CSUpdate.exe源代码

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

6 I9 a& M+ J4 a4 c7 o/ I0 G
  1. / RevApp.cpp : Defines the class behaviors for the application.
    1 `% u7 D0 {8 E- C% F+ G
  2. //
    ( r; I) a  X4 z; j6 Y: u# C

  3. 2 l# V: W" x$ {3 D3 O
  4. #include "stdafx.h"" v% [0 t3 W3 F# S" o) m
  5. 8 P3 w6 k2 j# f
  6. //#define UNICODE
    * Y6 ]: }5 p" D1 p6 n$ X; q
  7. //#include <gdiplus.h>0 K# E) Q9 `- X7 ^6 n
  8. //using namespace Gdiplus;( H$ m* Y% V* }) E
  9. ( [& P6 u' e7 O' N
  10. #include "RevApp.h"
    ' N$ r- o6 k% `; t" [  r- |
  11. #include "RevAppDlg.h"% R3 L2 R% H0 |% f( k, \) A1 G8 I: s6 Q

  12.   t9 p$ X& d/ x6 ^- [; N5 t, O
  13. #pragma warning(disable:4786)
    / x6 e- Q) P- Z8 h( w
  14. #include <map>
    7 z: \2 c/ w* V" Q$ b3 R4 L3 @
  15. #include <list>
    & j# Z: |1 ]' X0 j
  16. #include <direct.h>6 B& [8 V' q- O6 C3 R- B
  17. ' L3 n) p: `5 h
  18. #ifdef _DEBUG. a0 [  U$ h1 X
  19. #define new DEBUG_NEW
    , L; e2 G9 }# Y0 B" Y$ ?; Q
  20. #undef THIS_FILE
    2 {0 b& V/ v, L6 l
  21. static char THIS_FILE[] = __FILE__;
    ; i; |" ^* T0 X* W* b
  22. #endif) p8 j8 G0 v/ ]! N( \
  23. #include "SkinResDef.h"
    2 t% ]) y) F8 |& A% i1 }
  24. #include "ChangeBG.h"; Y; d' d' L$ T  P
  25. #include "AFXINET.H"% k+ ?1 k* X! n  `

  26. ! d$ r, I: N1 s
  27. #define TRADITIONAL_CHINESE 0
    1 h, a5 }% p. r3 |, c* b
  28. #define SIMPLIFY_CHINESE 1& l7 y0 `8 Z1 b
  29. #define ENGLISH 2
    / e: z7 ^; f, }0 }9 l: L: ^
  30. int m_iLanguage = ENGLISH;  v  B9 {/ R( i6 x: g
  31. /////////////////////////////////////////////////////////////////////////////! W7 e# @7 n" S+ h7 D' I! |1 a' G
  32. // CRevAppApp6 p( ]+ F/ H1 b3 `9 p4 @

  33. 8 g. Y" F% B% D% ~7 X. F5 Z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    + M: ^2 @- e3 J3 _8 p0 R
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ; {% a# i0 e# a4 ?2 r5 u. A
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.; [2 x2 G; n% E! H1 \$ I; s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 s) v( \6 x+ f8 C1 X7 a
  38.         //}}AFX_MSG
    ! M4 _' j( P3 Z5 i- F1 s  w
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
      Y3 ^1 R0 @; `0 t' h  B8 R6 v
  40. END_MESSAGE_MAP(), d+ I& x7 f2 \8 P1 V8 ?4 X

  41. 6 `- }/ D& G, E9 ?1 s0 S
  42. /////////////////////////////////////////////////////////////////////////////0 d# {/ o" I8 l: x' Y8 s
  43. // CRevAppApp construction1 ]7 a- X1 T/ ]2 F
  44. ) p7 \+ V. h2 E- H8 L
  45. CRevAppApp::CRevAppApp()
    % C7 j. C2 Q; R5 X) v1 G
  46. {
    : m0 ?. x  o$ O% x( U0 k# E/ {
  47.         // TODO: add construction code here,+ [$ F# y2 F- p6 d  S- d, i
  48.         // Place all significant initialization in InitInstance+ L% n# ?0 K( V5 ]( `: I
  49.   bDisplayIsBig5=FALSE;
    * [, [" i( ]3 m1 f2 Z, P# f* g3 O. E
  50.   bRestartUpdater=FALSE;* O1 c2 E* `5 O! W
  51.   bFinishUpdated=FALSE;: N% C1 W- k+ Y8 c' E
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;7 V3 y* B  f/ w5 d/ E9 Q$ ]6 |4 ^. U
  53.   InitChangeDataBig52GBKS();
    & m) V) N! ~# t* }
  54.   InitChangeDataGBKS2Big5();) b$ R. k# _" Y7 r( z) I4 ^
  55.         //
    8 g% @: z* u: K) ~
  56.         bClickRunExe = FALSE;6 B  _2 T/ F" S& R
  57.         //$ h8 k; M3 o: z  x, n
  58. }6 q% i/ L1 C  _. r, `

  59. 0 i. K1 K  M- Y6 K- u0 O
  60. CRevAppApp::~CRevAppApp()
    9 {8 `* w; O& D' K
  61. {% |1 d4 H" B1 d' S8 A5 C
  62.         // TODO: add construction code here,& z: F+ @- D9 l# D5 E/ Z
  63.         // Place all significant initialization in InitInstance  Y- E; O) w6 [/ t/ g$ N4 ^7 {
  64.   EndChangeData();) R% w7 T* |# X
  65. }- n/ v/ ^5 \* o1 d0 Y4 u+ e  P
  66. 7 X9 {( ^3 e7 c$ t, U. x9 M
  67. /////////////////////////////////////////////////////////////////////////////
    " E% p3 X& L' X- _7 z5 e- R
  68. // The one and only CRevAppApp object# l1 M7 c% V; j

  69. , p  X0 }' G" w6 }
  70. CRevAppApp theApp;
    4 d# |! c+ j8 I3 |6 d7 O9 k$ j

  71. 8 i2 J, N5 Z1 M+ e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    % z# R( A. Q- y
  73. {( ]2 T1 G9 z- t. D+ J' ~" [
  74.   int iEOF=0;% Z1 B5 v) _5 z
  75.   char szTempName[MAX_PATH];
    4 X# H% k  I; E
  76.   *szFileName=0;
    9 A2 M% a; _$ r8 H+ ~# d! A2 `
  77.   iEOF=fscanf(fp,"%s",szTempName);( _# F5 X  x/ S7 v) C
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    & V7 G) W+ K, `, E0 n" }
  79.   {
    * z6 d* i8 ^2 x4 C/ I. ^
  80.     strcpy(szFileName,&szTempName[1]);" e2 i" `+ f/ r$ y: ^
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)4 ~. _  L, e' O
  82.     {
    / l$ B- z  \) U9 ]1 @
  83.       iEOF=fscanf(fp,"%s",szTempName);
    2 N" r1 y' u4 ^& x
  84.       strcat(szFileName," ");
    & A$ N7 v6 Z% [( L; g5 e& j
  85.       strcat(szFileName,szTempName);4 v' M" N- _7 G( v
  86.     }& k8 f% w8 r/ k
  87.     if(strlen(szFileName)>=1)& y# z( J, _2 \7 ?$ I
  88.     {
    . E- F5 a- Q7 K
  89.       szFileName[strlen(szFileName)-1]=0;
    7 X  {3 h9 e5 J. T; R0 D% ~
  90.     }
      h$ U6 F4 y! ]# s
  91.   }
    $ U6 s! [) L0 U" O8 e4 r
  92.   return szFileName;/ N: A& A7 h/ L, w+ L* l
  93. }* x% Z# ]' i, `  @( F& ~* K

  94. & S+ a& q- V+ u2 h& H  [9 W$ b/ g
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile). \: \* J- o* @0 _/ ^; F
  96. {3 G0 j% a/ ~9 @5 \, i$ d, e
  97.   FILE *fp;
    9 a, p. |, Q' n$ x" O
  98.   char *key=NULL;
    ' X  v. p# l$ z
  99.   char version[MAX_PATH];
    ; x8 S2 a5 @7 ^+ ?3 V
  100.   LPUPDATEFILE file,olds;
    4 ^% `- D) v7 v; z+ A
  101.   std::map<CString,LPUPDATEFILE>::iterator p;: r: \& N# g6 r- y9 j
  102. ; `: M7 C) k$ K& [
  103.   UpdateList.clear();  U4 j8 W* }6 u, Z
  104.   UpdateFile.clear();
    8 E" m+ y/ E' k, x/ {2 l
  105.   if(GetFileAttributes(filename)==-1) return false;. U4 I. h' u$ ^7 b' d# z, }
  106.   if(!(fp=fopen(filename,"r"))) return false;9 F9 Z9 K- Z' {, a
  107.   fscanf(fp,"%s",version);
    ( t" f0 j/ d: `& L+ r1 R9 R
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }7 U6 V4 c2 D  B) }0 S. X
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ; u# k; D- i7 }1 x: |; E9 a. r' `
  110.   {
    " l2 S6 G) M1 g5 `* y% o/ x1 _
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # q, _2 y' J- S3 P! {) T
  112.     fscanf(fp,"%s",file->path);0 ~4 F. J- c( D  W) |
  113.     ReadFileNames(fp,file->file);
    + q' Y" [1 o" V5 }5 I, Y
  114.     strcpy(file->full,".");
      S+ T# N! g& ~* _/ ]
  115.     strcat(file->full,file->path);
    3 i# r; C& L1 A% M! p  I
  116.     strcat(file->full,file->file);- l+ s; {* i7 w8 Q% N& x4 m9 {6 {0 Z+ n
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    , I7 F9 q$ I& g- S( \
  118.     {
    * b/ ]& {1 n) b/ S; y
  119.       file->vers=(float)atof(version);
    - a% {1 V, Z" e! i$ V2 Z) `& m
  120.       UpdateList.push_back(file->full);
    % d. ]0 Q; ^0 j, ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));1 Z5 V0 c+ Q! N8 t4 E# ^
  122.     }
    " y) X$ b  `+ i# `! t
  123.     else% z' P- v% V; m( J, d7 y
  124.     {
    ( F, I8 x* I5 h4 ]1 Q7 ]% g
  125.       olds=(*p).second;
    0 ?8 B* G0 }7 q4 y( M2 M
  126.       if(olds->vers<(float)atof(version))
    + b# ^& I' u4 L3 D: m( t% d8 [
  127.       {3 C/ r6 J9 ?1 s4 o
  128.         olds->vers=(float)atof(version);
    - G+ T0 _# ?. n! V" p: {
  129.       }! L3 E  b$ h2 H* |: t3 d( |
  130.       free(file);
    1 E. E$ G+ [( S! T0 L2 D
  131.     }
    4 h5 `& `# E- Q0 s
  132.   }
    . O8 B, p2 V' o2 x2 s
  133.   fclose(fp);
    7 l+ ~3 ^8 @; O
  134.   return true;
    8 a2 R7 C( n4 M- i+ w  m* ~6 z
  135. }
    8 |+ [; \; v, E3 N) V
  136. $ x' T" M4 l6 E3 s8 g+ |4 M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    $ w3 f" }# e- D! P
  138. {
    0 {+ h2 m+ p4 u9 h  ?
  139.   TCHAR  szFull[MAX_PATH];
    ; n& B" K$ G+ Q1 @2 _
  140.   TCHAR *token,*inter;+ d: B1 [' U1 a2 C/ Z
  141.   *szPath=0;) W' M7 s1 q) m' A4 X6 h
  142.   strcpy(szFull,szFullPath);) q# }) Z# l% }$ c' r7 M
  143.   token=strtok(szFull,"\\/");; A% \9 }* }  h
  144.   inter=token;( q$ ?8 ?! f* W8 z
  145.   while(token=strtok(NULL,"\\/"))
      h2 W+ W. q1 N( g
  146.   {
      W' q% w4 F. a/ p
  147.     strcat(szPath,inter);
    ; V2 j# c5 L0 e
  148.     strcat(szPath,"\");
    ! b% g! w4 d) d& Q# X$ d7 ^2 e
  149.     inter=token;
    & _( V, `& P4 X. Y
  150.   }
    $ R8 L8 _& X8 s  w
  151.   return strlen(szPath);
    ! y5 J* W) B, J- |4 S
  152. }7 h! n( [! x% T" F
  153. 8 ~9 I" E  d- w! K: W& S! |
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% v2 H- K# Z* W, ]5 c- u! X
  155. {
    2 P7 P2 e! u! X' K; }
  156.   DWORD attrib=GetFileAttributes(Target);
    / a! A1 D" A9 P$ c. z$ k
  157.   if(attrib!=-1)
    , r4 o; j5 ~. l- F% n0 D
  158.   {
    , h" U0 U: B8 x, H
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    " S9 g" D. o2 ^% ~2 K: a& h& O
  160.     {3 o* T9 q. C) b% L; {
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 X! z# V) w! K: b
  162.       SetFileAttributes(Target,attrib);
    $ z  c" e" Q+ q0 c5 a
  163.     }4 Q  ]0 P( `. d1 M% w* i
  164.   }7 c/ o# p  I1 @
  165.   CopyFile(Source,Target,Erase);
    " X) K" U! }( s3 Z# j* k
  166. }
      \0 ^( |2 D9 c1 ~

  167. 7 C  S9 h) b2 h4 Y/ p( T1 _1 v: r, Q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! p( w; e0 d  x6 g9 Y% g5 v. ?
  169. {8 B, G( F. N- U
  170.      FILE *fp;
    * L7 ~" ?) A( P8 C0 h! [% ]) c9 i0 D
  171.      char  szBuffer[8192];
    2 y8 D2 w, H$ ]5 L1 I
  172.   va_list  argptr;
    ' o7 U2 s8 Z# _2 ~5 S

  173. 5 H1 K2 k8 K6 R3 [- O( x1 f4 q/ B
  174.         va_start(argptr,message);5 L2 y5 \  H% V" z
  175.         vsprintf(szBuffer,message,argptr);
    ! Y" \4 Q1 {& P+ Z) x8 C* z2 h
  176.         va_end(argptr);+ ^9 @% V  S7 w4 Q* J5 C* r
  177.   fp=fopen(FileName,"a");) @2 Q3 }' ^5 |3 p/ O4 C% N
  178.   if(fp)
    & A$ `% A6 a& z" F6 R% K
  179.   {
    . F" q( i/ N* a2 z0 e0 y# b& Q" r
  180.     fprintf(fp,szBuffer);, ?2 ]4 n' Z! F, z1 C! R3 p
  181.     fclose(fp);
    4 I5 O+ H% Y- ?8 c. P- b
  182.           _flushall();
    # ]1 C! T: _. G8 u: K$ N
  183.   }6 h7 l& {/ L: x$ d7 V5 c
  184. }
    - H5 e& G# B1 x: P$ ~

  185. 0 l$ m& y/ p; [( K
  186. BOOL CRevAppApp::Fclearf(char *FileName)) L+ P, t8 q2 V/ E2 S; N: Z- O
  187. {
    ) ~5 J  R+ \0 U$ O
  188.      FILE *fp;) i" R' L  i- G+ d$ L
  189.     DWORD  attrib;" A6 Q! K2 H3 k/ g% h- |% x8 N
  190.   attrib=GetFileAttributes(FileName);! d" Y# p5 C4 R" M# Q  a
  191.   if(attrib!=-1)
    / s3 h/ ^1 |+ Z) y7 \: }2 ]/ L& q
  192.   {
    ! x& a/ ^5 x/ O
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ! L4 X9 t! g: ~( l
  194.     if(!SetFileAttributes(FileName,attrib))
    ' f* W& @; B9 c! o. l
  195.     {# R; V6 Z: a) w1 j7 M" g- V4 s
  196.       return FALSE;
    4 y) I+ j- ~1 S' J' k; I) P
  197.     }
    : [& T. \0 J; w: x# e$ r5 @5 a
  198.   }0 ~" T2 u& [" o$ F/ }! [% w
  199.   fp=fopen(FileName,"wb");
    8 H# d5 Z: S5 ]) F
  200.   if(fp)
    ! q, `: V0 q1 h5 \; F
  201.   {
    1 B2 Z, l2 y8 J- V
  202.     fclose(fp);
    " S4 i3 t& D5 i9 R4 b. O( q7 |; a
  203.   }1 f; t; t/ X/ K; K
  204.   return TRUE;; z1 u. ~2 H5 \9 z! {
  205. }
    , K" W8 w2 \& z3 X: i. ~( S( y
  206. 4 F! B% E! I1 h! k! p; A
  207. BOOL CRevAppApp::UpdateLocalVersion(void)! a  z# L) O0 V: _$ }/ q% A/ f: m
  208. {
    8 b4 t0 Z# a, N
  209.   char filename[MAX_PATH];$ U8 k* f. C9 x
  210.   LPUPDATEFILE file,olds;
    1 l+ f: ?9 k  W+ l) @
  211.   std::map<int,CString>::iterator i;
    ; q7 r8 F* Z  `0 D9 q( o- h& L
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    / y5 E- h  |& w6 g3 n5 t7 u
  213.   std::list<CString>::iterator l;+ D# ?0 C. K& b% y

  214. 0 X, S  e! z) \* F) u9 G: h
  215.   if(bFirstUpdate)
    % v, c* h* O& z& P/ a4 _$ b
  216.   {" e& a$ |: F8 P8 N
  217.     dwCurrFile=0;+ o( p- }4 V& z/ c1 q* n" T
  218.     bFirstUpdate=FALSE;
    7 a7 C0 m& K, _
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( i& }0 T- c; [8 g% n
  220.     {
    2 k, E; r7 S% Q: g8 J
  221.       dwTotalFiles=UpdateLocal.size();9 X# c( C: i) z% w) ?; ~# e! n
  222.       dwDownLoaded=0;1 s" [/ w% ?% G! M
  223.       bSilentStep=FALSE;
    - \' o' w. _) Z- l. x* w6 Q0 Z! U
  224.       bCompressed=TRUE;
    " A- Y, d7 J- o
  225.       strExtLocal.Empty();
    ' _  E7 ^1 a* X8 M7 g8 p
  226.       strFullName=(*i).second;
    . G( n( G- ~3 ~. w5 Z" d4 W2 O
  227.       dwProgramState=AP_CONNECT;
    ' r( t1 w/ L4 ~# L6 T, A# a
  228.       return TRUE;
    , ?+ J- `) f+ K8 B0 t2 o4 J
  229.     }- x7 e$ ~: p) k* v
  230.   }
    % ~$ B: a0 I* E; e
  231.   else if(bRestartUpdater==FALSE)
    " s; v/ |0 p/ |' F; L# T1 R, `) Q
  232.   {6 X- M  A4 V9 n7 l
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()); v! o+ t/ k! w" W
  234.     {8 f5 D% }- B4 w* m, U! f! X3 E
  235.       file=(*p).second;, D$ L4 Y* U2 S, O8 O9 Y4 k: u, Y3 x
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())6 l1 z* u; a/ G; T. {
  237.       {  P+ H1 v  `- F( N5 q- C
  238.         olds=(*p).second;
    + S! B- y: ]$ L
  239.         olds->vers=file->vers;3 q, p, w1 P9 T+ Q, |) s
  240.       }/ l; R  z5 f4 m
  241.       else5 H+ T, w0 D  q# i9 @+ k& Y+ l
  242.       {
    - G( [  g% f0 ?- W1 [
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& F/ U' L) W, }7 U$ p, L
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    9 n/ V. B/ l4 ?8 s% _- _) e* h
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));0 ?, a; N$ C" ~8 m
  246.       }
    ' K  D  n- w) L* I/ B
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ' {# U. y/ H" o8 `
  248.       sprintf(filename,"(%s)",file->file);
    # ~/ N3 T( v) {. ]
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 Q* F% r% j1 v7 V, Z" i+ H5 \# H
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }/ y6 H% Q* @+ n4 r6 W9 l
  251.     }' J9 j  ?$ z6 \" |' U$ a( p
  252.     dwCurrFile++;3 x9 u# H7 _7 y. P. m8 x( i: ]' |
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- N' h* g( w. |8 y  u( v# }
  254.     {0 ]% C# ^( V3 m  S; N$ m
  255.       bSilentStep=FALSE;- Y2 I- c) G7 n5 Z1 o% t
  256.       bCompressed=TRUE;
    2 ]) N5 R# Q4 Y) n- l& @% B
  257.       strExtLocal.Empty();* j3 s5 X0 e, [7 U# [$ ^2 I
  258.       strFullName=(*i).second;% ?/ O; j, H" y# ?' H) p7 M8 T9 `7 H' `
  259.       dwProgramState=AP_CONNECT;
    9 ^6 u) s& ^/ U  x4 J) w1 c1 b+ `
  260.       return TRUE;  ^& \7 A1 V; C1 a8 W9 j
  261.     }
    - |# y6 t4 Q3 n
  262.     if(!bRestartUpdater)
    / u! F' ^6 k/ [( |* z8 n$ ~& i4 [
  263.     {. Q/ G7 g# N+ u* t# W; X
  264.       int iCurrSize,iFileSize;
    0 d5 A. C& _/ }1 i  G( R9 b
  265.       iCurrSize=0;
    - ^- l3 Q. l+ o& K$ @: j7 h! @
  266.       iFileSize=UpdateList2.size();" }8 I. W/ ]0 c
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % R0 ^$ \( Y, n3 C1 x, I, W! f
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ; b3 K+ g: v, |# M# F! ^
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");' V- Z; s5 z3 `
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : a0 L8 G5 H$ G$ }! h* @4 ^& ]% f' |
  271.       Fclearf(".\\update.dat");
    ' v) Y* V* B' ~: e8 ]+ i0 I* @. Z* K
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    8 L7 ~' D) G( ]* A5 [4 ]1 t
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)5 X( L& j: K/ A9 k7 k
  274.       {' I9 _! d# I# H
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())$ A8 A1 S7 {: r) ~; S
  276.         {
    6 V0 R  b; s0 M
  277.           file=(*p).second;
    7 J' T( j3 }( o* t) K9 x7 o( j  F
  278.           sprintf(filename,"(%s)",file->file);+ E. Y! j. f* N0 r+ t( E- i! e. C
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);9 H) e% e4 ^$ s) n- x8 j$ b! C2 J  X. y
  280.           iCurrSize++;& A! R# M6 e* i) s+ B
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    4 ^! J4 W4 u: b, H2 U9 C
  282.         }
    4 X' q; b; R8 i. y+ m
  283.       }
    # l( j  Y$ c& _/ M" J. |5 b% Y* \$ c4 ?
  284.       unlink(".\\update.txt");9 Z" R% n2 o( i7 P6 K3 L7 b
  285.       unlink(".\\update.tmp");
    5 c0 U: `( X# ]0 S4 b
  286.       Fclearf(".\\checkversion.dat");
    ' A9 x" W- h& x( b
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);; e# L: d6 j* q4 u1 @" X' x- C
  288.       if(UpdateLocal.size())
    , b$ S8 p% S5 c+ j
  289.       {+ M* }7 _4 s& w+ u
  290.         UpdateLocal.clear();
    . \8 A4 ?- ^* H7 }/ B, K
  291.       }6 ]5 |8 s5 h  k  V: K: m
  292.       if(UpdateFile3.size())) g, d: K, R; Z! B1 @- m
  293.       {  M: [( X$ L7 s* f% ]1 K- w4 u
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! y9 }5 n' Y6 a4 c7 Z
  295.         {) [/ h" b2 z" j6 _* D
  296.           file=(*p).second;( S7 ?9 ~/ h/ E
  297.           free(file);& C4 b: H! c; a/ R9 L; V# s
  298.         }2 J  A# {8 c, P, C
  299.         UpdateFile3.clear();; F9 {; ^1 A+ `' X1 U( D8 F0 K* V
  300.         UpdateList3.clear();9 q2 s& o- q6 Z, r& M
  301.       }
    8 d$ b% l* |' `
  302.       if(UpdateFile2.size())3 e2 W. B+ E, V+ N( j
  303.       {
    3 @/ |% R' \6 d! |
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 L; }5 w! R( g" C. A
  305.         {6 r2 o/ q4 B; q, r  n6 h9 K
  306.           file=(*p).second;0 f  R. \5 \4 c/ v
  307.           free(file);
    / U% E; Q7 x+ T) g- t1 P
  308.         }2 v  ^7 \0 ?* }0 g- `3 O' l
  309.         UpdateFile2.clear();) i% a8 P4 B) B9 W' F! y
  310.         UpdateList2.clear();
    1 K8 l& @$ K" T3 \( _9 N/ q) f
  311.       }/ [$ p" r6 ]3 Z, X9 @4 u2 |
  312.       if(UpdateFile1.size())
    . d1 n6 B1 g' }8 A5 `* E2 @1 |
  313.       {
    ( p2 a3 z+ f0 o
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 T. N. z" q( f$ t' ^; i- f
  315.         {, ]  t8 `- t' h. ]- S
  316.           file=(*p).second;
      P0 p+ I3 g+ [8 _0 A: X
  317.           free(file);! \! V8 b, S8 b3 ^7 m& V  h. C
  318.         }
    & J9 A. d4 _/ a3 P1 F! ?, r
  319.         UpdateFile1.clear();- w! X/ p" [9 J& H3 C
  320.         UpdateList1.clear();, E3 T, z" R9 {0 ^, E( l6 X
  321.       }
    + a( z& P* x6 S. n4 k6 {
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    5 c7 E: ~7 a! ]" z
  323.     }
    , f3 G6 d7 k! M) ?- j
  324.   }
    : f# c8 A# l2 E  N; d
  325.   return FALSE;
    - ~, J9 R+ m& ], R
  326. }' m6 z4 e# h! [. c- l' J5 y

  327. : x1 K/ R! C9 q( @" p9 P9 N2 [
  328. void CRevAppApp::ClearAll(void)
      E8 ]& r. l( A: ^8 {5 I
  329. {
    5 b* s$ k- }, e  N3 b3 v
  330.   LPUPDATEFILE file;* j& P# n2 A: q# t. z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) Z! w. W3 I$ f; m$ J
  332. 2 u" ?6 ]2 H$ K, P% u9 s
  333.   if(UpdateLocal.size())! g8 L% U+ t1 R- y
  334.   {8 F0 L! U3 ^3 _- A% v0 c
  335.     UpdateLocal.clear();
    / T; x! N3 r3 h
  336.   }
    : I8 A- u2 i" Y6 I3 C! r/ j4 ~) t4 O
  337.   if(UpdateFile3.size())- q" I& Y8 j7 D4 b( r% [5 G, m5 x
  338.   {
    7 y8 e+ o0 Y: y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* H/ z  B& V/ s: _$ H
  340.     {( l) T1 j( [$ C* `' y: O, ^: L
  341.       file=(*p).second;
    ' |2 V2 V! e* {, w5 y& Y
  342.       free(file);+ Y( b! Y. [6 M( E! B  k8 t
  343.     }3 t& [8 H: u  I7 G8 i# Z
  344.     UpdateFile3.clear();# h; S( F! L6 \4 G) G) B( H, Y
  345.     UpdateList3.clear();
    ! |7 B2 A1 Q0 X& `
  346.   }
    # C, i# t& i1 q2 U6 D" G* q3 x
  347.   if(UpdateFile2.size())' }9 c2 P) `/ c- Z! @9 G! f
  348.   {
    * ^  H* K2 |- J' `: F3 h) v9 w/ H! J
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      x1 @4 A5 W$ X5 p
  350.     {
      t# ~5 x1 Q/ q8 V
  351.       file=(*p).second;7 w" p' s2 V# X$ E$ z
  352.       free(file);! D( v3 z* W# ^/ A+ \9 {$ }! R3 M
  353.     }
    : _# N5 x* |- F3 U. v
  354.     UpdateFile2.clear();5 j9 k% b+ Z" }. |, y  M
  355.     UpdateList2.clear();
    $ E7 o# k8 E2 k/ q* ~
  356.   }
    * J2 V) E9 F" N7 r
  357.   if(UpdateFile1.size())
    $ Y& w6 E4 O; j* f1 w
  358.   {0 |& u' |+ I9 {9 y' M
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). s0 ]# r! B/ I. `0 |7 P
  360.     {3 M0 @+ U( z0 a$ U3 M, d: [
  361.       file=(*p).second;
    ! n. o3 i' o. I$ u" ]
  362.       free(file);  M. I- u$ i0 K9 @
  363.     }
    & p/ l( V! W% F, R% T; ^) Z
  364.     UpdateFile1.clear();' \/ |: p3 F8 I2 [% ?" M
  365.     UpdateList1.clear();
    ) }4 Y, i/ K+ U
  366.   }
    $ Y; t3 S! }+ F) b
  367. }  
    / i' N7 |% i3 }  r7 g! O9 X3 [/ S
  368.   
    ( r* D3 |3 H1 y+ M; r$ y. l
  369. BOOL CRevAppApp::CheckLocalVersion(void)! Y6 P* M0 |/ r/ [5 M
  370. {' z4 |0 g5 }, n/ p9 {
  371.   int c;
    . m, K9 v3 Z: k: ?6 M5 `; Q
  372.   LPUPDATEFILE file1,file2;
    ) F, K$ C. T2 n$ V0 }6 a8 T, q
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;4 f! E, n$ E) @  A
  374.   std::list<CString>::iterator l;  E3 c7 `+ U! }7 M% ^3 [. [) `, F

  375. 0 ^$ {" ?" J% B
  376.   UpdateLocal.clear();
    ! R# T/ r4 Y1 r
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    7 i/ y0 J7 D  d% D$ I( G- E4 v
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    : n2 Y" z! l5 Y4 P! l9 V6 K
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);6 Z+ M7 s( L) Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
      p* p" n5 x5 |9 n3 I5 b# \
  381.   if(UpdateFile3.size())
    3 M+ m' A8 Y$ F' ~' t; _
  382.   {) Q) I4 z" r; B) B& I' S/ Z: ?$ k
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)( Z; }% F1 \4 a; d. R  c
  384.     {( R* L2 i; x5 |7 r1 V/ ~. {/ a
  385.       file2=(LPUPDATEFILE)(*i).second;
    2 G) K2 |9 k7 @  j) l9 F
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + g/ W5 J6 o6 {3 o$ S
  387.       {4 Y3 U5 n2 ^1 X" z( b: ~8 I- `& r
  388.         file1=(LPUPDATEFILE)(*p).second;2 Y  L8 @" e9 g, b1 m
  389.         file1->vers=file2->vers;" T% W- N0 g( z( d6 y: ^& @+ S! B  ]! a
  390.       }% h+ Q7 p( f( @# p& C% n
  391.       else: x4 n) P  J1 m* g6 h: b# ?2 Y
  392.       {; R3 T+ c; ~, o5 V$ V2 d% ?1 h
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 O+ s! }( K% j4 _+ K0 t3 z. D4 v' [
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));1 v& r% K' B- X) J5 d
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    & n4 [2 `( q5 C
  396.       }
    & M- M5 P/ Y+ x7 E: d8 E
  397.     }
    6 k/ N" O5 X- i
  398.   }4 D+ I$ V1 Y% k! K4 }& V7 h
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 o- ^' o, g# H" t* G9 l
  400.   {2 x. Q! f+ Y3 T$ H. @/ r  Z% q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())# M6 Z8 Q$ O/ ]% e" Z
  402.     {$ ~# s$ W8 C0 N; M: T, F" }
  403.       file2=(LPUPDATEFILE)(*i).second;
    # ?# p) w2 @& o
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 }8 Q2 X- V3 R7 @9 r2 x9 \
  405.       {
      B; z8 E% l2 A9 F! a, r2 S
  406.         file1=(LPUPDATEFILE)(*p).second;
    3 c2 I) u% [+ w( R5 H
  407.         if(file1->vers!=file2->vers). j) L, y& O% h& D, v! m
  408.         {% G  `8 t7 f. A$ q" p1 D( u
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* ?' [, C% u3 z0 l. h/ s& P
  410.           c++;) g7 C" m; k3 |' t6 `( y) C
  411.         }1 q, ^, V# ~5 t) o* V* y
  412.       }; P0 B6 g; K9 z/ J3 e, h9 P
  413.       else
    7 h. Z- n' {: X7 d0 f
  414.       {
    : [4 q/ c, {. F4 v7 {; F# c/ O
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 w% E: h7 A9 M5 S
  416.         c++;
    . u: ~2 U! v2 t/ |
  417.       }1 q/ w( o) M# c. F/ W
  418.     }
    ) R2 r+ _& Z7 m0 Q* p  s
  419.   }% s  ^6 ^/ K/ P4 N( G& s* n
  420.   unlink(".\\DownLoad\\update.txt");
    + l1 C* A' }( p- u
  421.   if(UpdateLocal.size()) return TRUE;: Z! W" Z) e8 F- c7 k
  422.   else                   return FALSE;
    2 J! W% E7 }. A0 e6 ^
  423. }6 _% ^! q$ [1 ^+ y" m0 [, p

  424. ) x! P- E6 `9 q. f
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"+ P3 ]# W0 y2 u  Y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
      G( g$ m& c& C' @+ S$ a  x
  427. 8 s5 {2 q4 c- D

  428. % q8 ?3 R& T0 ~! }1 L6 R
  429.   _/ |5 i# H6 x  a
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)) W+ i7 x, H7 O3 k: m
  431. {( @, T; ?0 ]6 ~: T. r5 g* _
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ! q! l* J; x) r! J: `8 i
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  P# l5 z  d6 ?5 u8 ^# l
  434.   {
    : W- |; _* }  Y3 n
  435.     char szLanguage[50];" A: L5 M/ \$ V4 U
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) d: \, }* Y7 V
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- D3 e9 P9 n* U0 [  K. H& g- c
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 x; F$ b5 {: f- p. @& r: H
  439.     else                                   m_iLanguage=ENGLISH;
    ) C( a3 V3 p7 @6 [+ M* g
  440.     char szRegister[100];8 K; X. f1 G! B5 w) v8 h- P' f
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % u, c* m, @" ]6 V
  442.     strRegsName=szRegister;
    2 g# B+ j6 G4 H9 v
  443.     char szPatchURL[100];
      F- K! Q* R- d9 D) I* M9 [
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 T' q% G" S& @# l
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 i2 S3 \$ ?& s) \% ^- n+ H9 g
  446.   }
    - n0 a/ Y9 t% D
  447.   else' g. l% M5 d* F4 G: F8 R
  448.   {* W) l1 j2 i+ r' z" ~& ^* E
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. n/ e$ \5 j* I) _) s
  450.     strRegsName=DEFAULT_REG_URL;1 a# u( }: {) ?% O( j
  451.   }
    5 u; P! [; z- E9 l! }) c" F
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 Y6 \2 z2 i9 X6 ^/ o* c& Q
  453.   {0 W& d7 ]2 X. g6 Z+ o% @6 e7 m
  454.     char szIP[50];
    6 z! F) `6 g" X, V- C3 f2 F
  455.     char szDIR[300];
      Q0 R" E+ }* O3 P+ [( n1 d
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 z  C" e% {! M( J1 K
  457.     {1 n1 B( J6 `" f) x
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    3 N* a! m- l- S/ r* `1 [+ j1 r
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");9 V4 ^* f. ~1 }! ~9 J2 B: @
  460.       strHostName=szIP;
    6 c" ?6 I, Y' H" v. V
  461.       strHostPath.Format("/%s",szDIR);6 @1 r2 m# r7 p% e
  462.     }
    ! }2 y8 p* E0 h1 t
  463.     else) R+ S% L1 S( e# Z
  464.     {, V8 R, i& `# w# y& h% e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 ^6 }$ s  W# `  u
  466.       {
    ! T5 u# z: _2 t- t
  467.         char szLanguage[50];
    - Y8 ]  b4 M" `% E& _! W' H# U5 b
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! x7 _* U8 U- M+ s5 [( J2 P
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& q$ h7 X9 U$ v. j& c2 D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      ^" ~" _% Z' E( h
  471.         else                                   m_iLanguage=ENGLISH;5 q5 C+ }: I3 o" ^4 d
  472.         char szRegister[100];
    & L0 n( c- c9 g6 Q
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 J' V& c/ \7 g
  474.         strRegsName=szRegister;$ n& y/ z! e' }
  475.         char szPatchURL[100];
    , Y/ o1 l" P( n' a! s
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! Z4 x5 H4 c) H) E& N% c5 S
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    % L6 U6 z5 `4 w% e$ g9 m
  478.       }0 Z2 G6 H9 U5 Q+ U0 x
  479.       else
    ; X2 P' Q  l9 B9 \, ^+ u4 v
  480.       {! |5 g" I! @, L
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! w# V6 a% Y: Z) A! f, A( r) U
  482.         strRegsName=DEFAULT_REG_URL;9 }/ z4 k3 @- w: D% G8 a
  483.       }; b( Y) l& H' m) \, n
  484.     }* B" }# H8 x" @& M! J
  485.   }0 O4 U9 I! s8 O* k
  486.   return true;2 r5 R+ Y* g) C9 e8 T
  487. }
    : F( f+ h3 S! D- Z
  488. ' Y( Q( U" |6 X
  489. #include ".\ZLib\unzip.h"
      ^" S" j6 N! Q) X% T! g
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( ]7 J% g! g8 e; b- `9 l# G
  491. /////////////////////////////////////////////////////////////////////////////
      X* b7 k! e/ ~6 A
  492. // CRevAppApp initialization/ N( l) h$ H* v! J+ }* R
  493. 7 ~1 E4 k2 @! ^
  494. BOOL CRevAppApp::InitInstance()
    7 K; T* N! _. D' K; N" d0 G3 ^3 m
  495. {# e% R3 @5 n) k
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 `% v0 P3 L- O& G
  497. 8 `" f( E4 x6 V, A% f) ~
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);" ~1 ?7 G- C2 T: j: a# R. |! f! {
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))5 r2 Q4 n9 {) @! C) Z% s# V
  500.   {+ k. _) I; n( H; b' h2 u
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");) A2 f3 n* X+ J3 m! H) `: t7 {
  502.     GetPathFromFullPath(szPathTarget,szPathSource);$ `1 E/ K7 J  {5 D. T8 N
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    3 |0 T! u8 |: R  E4 P
  504.     {
    . _; [  o* j. J) i1 h$ G
  505.       strcpy(szPath,szPathTarget);
    * k9 k: D! n( L: P' X
  506.       SetCurrentDirectory(szPath);
    1 g6 F' {% w# B# \
  507.     }
    ) Y+ K# Q) `: E3 B: n# V, V7 s% }
  508.   }& A# _  y  S' b' V! A* U
  509. #ifdef _DEBUG
    " W, ^$ P0 k: [4 @
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 {" T5 F  |" O  N! D  T$ y+ F
  511. #else( }/ x5 b* n; ~, o; ^" g' f
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " a- e. o, g* b
  513. #endif
    5 u/ b4 N, x( P6 q& Q+ d- {5 y- i
  514.   {: H6 Z" m9 w9 N; P" ?6 ~9 B) D
  515.     char tempFileName[MAX_PATH];1 P  B" ?) I# u
  516.     strcpy(tempFileName,szPathSource);, t, Z5 H: g1 Q! V0 r2 f
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ; O. a) D( J# j  R' [
  518.     strcat(tempFileName,"\\$CSUpdate.exe");! r) B% Y( G" q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);/ g' C- N/ Z* ~" C2 a
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    : s+ r' M6 P5 f  B3 b; N$ t; C
  521.     return TRUE;
    7 b# P% l- }+ s$ s
  522.   }
    1 Q- t2 L% ?5 r" X1 \5 ]
  523.   // Nuke 0118: Delete run.exe+ z: D1 Y* L. I1 ~, l
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    - s9 N+ N3 W( m! n4 o7 V! e
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / o0 m8 X, C7 Z; x
  526.   if(!ReadCfgFile("Config.ini"))
    & ~; N1 B! \6 H: w" D
  527.   {- C# }, N6 k3 m* z' U2 q8 [
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    5 f) P! t6 p, X, u
  529.     return TRUE;) d& I8 |" r" h9 N6 P1 Y
  530.   }
    0 D( ?' d9 j0 B
  531.   HANDLE mutex;
    6 t  W  ^0 B  c% o0 ^3 R% w$ @% o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ' k/ Q7 J) ^8 v# v' q
  533.   {1 p; R; U2 q; ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS), Y) Y4 Q0 r2 d9 j
  535.     {$ Q. e" v& x# Q. A0 i0 A: P
  536.       CloseHandle(mutex);
    ! A4 L- w% L& b% u# }: q: D
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);; ^* ]- W! x% v" V; q
  538.       return TRUE;. e% `/ i/ L) n& s8 o' i1 K9 @  C
  539.     }
    8 W3 A/ B0 n8 \
  540.   }  # C8 P4 I' F* c' k  P2 L. w
  541.   CloseHandle(mutex);
    , g6 ?/ M& b; H

  542. , E) R* [( y" w" g
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    & L9 b& V- ~4 U" ~. I
  544. 6 v; F4 U0 k5 D$ V
  545.         AfxEnableControlContainer();$ l4 j, J: A3 O' d- ~# u2 R
  546. , i( a& C% F4 I3 W' Y2 Y
  547.   bCanUpdate=FALSE;6 V* F! f0 ?$ q( q2 p& m
  548.   dwStartUpSteps=1;
    $ |; A4 }1 j8 s: {8 {( x  ?
  549.   dwProgramState=AP_NOTHING;( d+ m5 _0 b8 a2 U5 i; U

  550. 1 O9 Y* ?* T/ ]0 Z- p1 A
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);7 |: x, [2 Y1 \% z8 z/ H2 e; m

  552. 6 e# r2 D" N: |! }+ O* a
  553.         // Standard initialization
      g5 C  Q) V  Y% W/ S2 i
  554.         // If you are not using these features and wish to reduce the size( N& \8 b4 U" ^4 W: H
  555.         //  of your final executable, you should remove from the following& L6 H: _! V1 n! G) L
  556.         //  the specific initialization routines you do not need.
    . `  g! _3 A, G7 z, G7 N

  557. & X' q% E' n/ l$ s2 [
  558. #ifdef _AFXDLL
    8 e9 C0 _1 A) W+ t
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL8 A+ |' B, D" ~) h
  560. #else
    + I; Y; B% f6 M
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 ]# r* C: h6 L: w5 g) n
  562. #endif
    ( k2 K" b% _7 t) o. x! |2 f# R
  563. 9 p+ W) e/ b7 D: v; g3 b
  564.   dlg=new CRevAppDlg;+ i- j) _+ z  x2 K: I' n
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    * K1 F2 r. P; v. F9 |
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    " I5 |% t% V3 I9 m/ u% k/ c! z
  567.   m_pMainWnd=dlg;8 y  t6 h% y: U9 x0 x7 j& x. D8 p2 }

  568. % m* O  A/ g9 {4 I9 N& z
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 i2 A  V! h7 i5 J8 B2 L+ e# _

  570. : _* F/ y$ [4 I8 K6 _( F6 c$ e
  571. //  GdiplusStartupInput gdiplusStartupInput;/ `1 ?. x7 s$ d4 y: v$ o
  572. //  ULONG_PTR gdiplusToken;
    2 }- ]0 t) q9 K: Q4 u1 i7 V1 Q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    1 }* t" G' ]5 P; N' d

  574. 1 k$ u% z" x- }" L1 K
  575. //        CRevAppDlg dlg;  H7 Z4 ~+ _: I* |4 h  o
  576. //        int nResponse = dlg.DoModal();
    - B' S5 B! e& A3 B
  577. //        if (nResponse == IDOK)  M# X" n- H9 X5 R) b. M6 C
  578. //        {
    $ A+ \6 P% ?2 @$ o. `
  579. //                // TODO: Place code here to handle when the dialog is( |5 }. L- S$ |( m$ H
  580. //                //  dismissed with OK
    3 X) a4 R. v" b2 ?4 K$ t
  581. //        }& C' T, T* ]: y
  582. //        else if (nResponse == IDCANCEL)
    1 w9 \4 m( H7 b( a) D* a
  583. //        {
    7 L' {8 O) f2 W% H! P+ j
  584. //                // TODO: Place code here to handle when the dialog is
    1 [5 J4 u. m& Y) o
  585. //                //  dismissed with Cancel
    ; d! [- ?' z' M; v/ f3 @( N
  586. //        }
      d9 b% u1 Z7 N# u& K$ x; p; G
  587. ; D" S# T$ F! i
  588.         // Since the dialog has been closed, return FALSE so that we exit the) M5 j7 M8 i+ Q8 J7 R  E9 Q% o
  589.         //  application, rather than start the application's message pump.! h5 a1 D2 O+ r8 D  M: O
  590.         return TRUE;
    / z( X, [, n6 m9 q% @
  591. }
    6 @: |1 t% B. A& {/ V( R% f
  592. 0 W' [/ N0 v( I6 f
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    # s/ M! w' p9 f; K: b( F
  594. {
    / W' n$ K- z0 c7 [* z% e. Q
  595.   int i;% v, c' i: i$ Y+ I
  596.   char *szRet;
    4 j4 e1 F) p1 b, y
  597. 7 x3 }8 e$ b' k% Z
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    0 F3 L! g/ ?* n  T
  599.   if(sztoken)
    - g; d) K$ x" z* a( ~
  600.   {
    ; E! t3 V( o; m
  601.     szRet=&sztoken[itoken];
      L: n- X+ X7 a" K, Z7 F7 g
  602.     while(sztoken[itoken])
    ; }% b1 Q. c" Q9 `; v
  603.     {
    % p: N# F' _; d! r" t
  604.       for(i=0;i<(int)strlen(token);i++). e. ^% _7 L: g0 U, H5 G" e
  605.       {# j" B( A- c0 t2 Z8 g7 S
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    7 j( p3 A! m  }  r
  607.         {7 I0 L% v" x: P, E
  608.           sztoken[itoken++]=0;- T6 C8 [$ V3 ?7 b  y9 N$ d
  609.           sztoken[itoken++]=0;
    $ I% h4 k# D: \( e3 q" Z
  610.           return szRet;; b3 i7 G  g! L: l% B$ N7 a
  611.         }( ~# Z( Q- ?$ {6 Q
  612.       }
    ! s: R0 u' A1 r0 T7 U+ o: ^/ t
  613.       itoken++;3 Q- D7 H/ T: i- V; r1 |
  614.     }
    2 Q- u" I7 u3 t2 f" E( x
  615.   }* q/ O1 X0 y% H! H
  616.   return NULL;
    ) o* W+ e$ r! l4 A" i8 ?) H+ Z
  617. }1 T2 m; c( n. `

  618. * o3 D& G; A1 D) ~6 c% g
  619. void ProcessProc(long Total,long Current)
    : a5 Y/ n  L4 |! R1 P  C& D, C" e
  620. {
    9 m; F) v$ u& ]; }$ t
  621.         MSG msg;
    + R  }- D* D- d: q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ) o& K" R; E( u; |, Q0 T2 l
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ( ]; g! e# y8 `0 m! \
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))+ K6 K2 y: C- j# I, S3 n
  625.         {
    ) [' R8 h& S$ D1 T7 Z: |
  626.                 if(!GetMessage(&msg,NULL,0,0))
    8 A0 \' X, e6 Z8 A9 K
  627.                 {; ^9 a& |  t8 T& B
  628.                         return;' n# ]1 }6 s2 h' i1 i! y$ T
  629.                 }/ e. P. t: c7 [/ y
  630.                 TranslateMessage(&msg);( |9 v: g9 G3 H& l2 I
  631.                 DispatchMessage(&msg);
    * z4 ?/ W) z2 @( j3 _
  632.         }        % F7 Z5 ?1 Z" v* |3 i$ t
  633. }5 s6 o  m0 t) E& ?2 ~

  634. ( F7 f( |2 h* ^+ o* e. x
  635. BOOL bFirstChar=TRUE;  @& ^1 \2 g) f$ J7 Y) ]; Y

  636. * H8 U$ y& j' a3 E% K
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ h4 l& m' \+ S3 n, F* q& a
  638. {
    , Z! N/ p2 o# t. m1 Y
  639.         // TODO: Add your specialized code here and/or call the base class$ ~" Z) n6 L& D. g' N( c
  640.   switch(dwProgramState)5 [  o  w" u% R! L3 B" ]
  641.   {4 v+ d* W' z' h/ h$ @
  642.   case AP_NOTHING:+ m( {7 F1 P5 f) _! Z( g- v
  643.     switch(dwStartUpSteps)
    / w. s. d4 P. V# ?
  644.     {
    # k1 ^0 |3 c0 e+ Y+ a& v# o
  645.     case 1:
    . Q6 @& S$ i* w) q$ D
  646.       {
    7 {( \+ k& D( T
  647.         int i;
    ) m3 O6 ?$ n1 O7 a. @% H
  648.         CDC *pCDC=dlg->GetDC();/ |8 H6 {/ J( d, }7 h
  649.         HDC hdcwnd=pCDC->m_hDC;& e( q$ ?" w0 M
  650. //        Graphics graphics(hdcwnd);8 ~. Q6 }/ n# r
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");5 q) m5 I6 O& `9 h
  652. //        INT iWidth=bitmap.GetWidth();/ p% X  q, G- R; u1 D- Q& l. N
  653. //        INT iHeight=bitmap.GetHeight();
    ! r/ g+ @$ E5 ]( l% ~5 \
  654. //        Color color,colorTemp;5 G% l: x/ a& T, a
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    $ D( j( Z7 q% P. c
  656. //        {) |2 m5 g/ u0 ~1 R7 q; L9 ~4 U2 j
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    " ?5 Z$ w% }) q
  658. //          {" p7 _1 {0 h7 b, K) a2 f8 E
  659. //            bitmap.GetPixel(iColumn,iRow,&color);( L. Y; z8 ~* T3 ]; |: e8 j
  660. //            colorTemp.SetValue(color.MakeARGB(/ M7 B% t. O6 v9 |  j0 I
  661. //              (BYTE)(255*iColumn/iWidth),' g, H) p/ h0 q/ r1 t
  662. //              color.GetRed(),8 C: r1 H0 {5 m+ G9 H0 X1 T
  663. //              color.GetGreen(),
    # Z- G: y& u4 C3 y/ @
  664. //              color.GetBlue()));
    $ r3 F1 I. r0 a: e
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    7 E# l. s9 b. D
  666. //          }
    * v& |. W: q4 g3 D  H2 a. u2 o
  667. //        }
    ' X9 g4 _; m$ d, o
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    5 }% V+ E0 o* ~3 |3 P
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 N; D1 _1 s# p" F% j
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");1 d7 f1 }- A6 I4 K
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & e* O: N% v, P3 k0 H0 P( i
  672.         for(i=0;i<240;i+=8)) u$ `: Q& V& G7 ?5 Y- E, F0 R0 u1 n! r
  673.         {
    4 P! m% {: t7 p+ y  O) U- R
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 Q+ p/ |" c) A* l- e3 B( F
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 `2 E5 z; `3 A7 r6 z( A
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# ?) t  M, |, z! s. T
  677.           Sleep(33);
    ; O( L* c3 k+ Z1 p1 I# d/ Z8 y. ~
  678.         }" Q; L- Q. p+ k( O
  679.         Sleep(1000);
    " Y  ~+ b* [. O7 D
  680.         for(i=240;i>0;i-=8): ]( E1 a4 W4 C- U
  681.         {
    & O+ a( Q. Y9 {: G' \" T" n; A
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    + `; L6 |2 n6 n5 n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " n5 i: `4 C3 s. p) x
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! ^" d/ ^3 a+ N3 H. B5 s
  685.           Sleep(33);
    7 K9 C* W$ I6 m/ P7 H; J
  686.         }6 F- @' y+ ^1 i! _! ~: \
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);8 _- u4 D& @* f$ E7 g- }
  688.         dlg->ReleaseDC(pCDC);
    2 |1 U9 }. \; k% h
  689.         DeleteDC(hdctar);
    . C( [/ l( P4 M& o6 U
  690.         DeleteDC(hdcsrc);
    7 T6 e: l* x& `) h$ Y0 V' W
  691.         DeleteDC(hdcorg);
    % d# `" u$ i) ^5 W
  692.       }
    % z# s) n8 F7 a2 V2 X- m7 N
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);& B' u8 b. ~5 |
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");5 r0 {6 h8 }! ?5 @2 z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    , o) a+ ~7 i" {' h1 u
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");% y4 D( k2 N. I) G( s) @; ?! C$ }/ o
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; K0 W; I- M- b$ o  D/ D. ]3 P
  698.       if(!Dn.Connected())* e7 J/ F7 o5 o
  699.       {
    / \4 I' ]9 f' Q$ t6 g1 u
  700.         dwTotalFiles=1;) b& M0 R6 S! E8 n
  701.         dwDownLoaded=0;) S0 `) v, _$ f9 {
  702.         bSilentStep=TRUE;& [  k& _4 _! L
  703.         bCompressed=FALSE;
    ! I$ i6 a% p6 [
  704.         strExtLocal.Empty();- v4 p1 d' G3 `) j0 c6 n
  705.         strFullName="readme.txt";
    , w( T7 b2 }# i; o  ?9 \2 u4 V" O2 u
  706.         dwProgramState=AP_CONNECT;# r! ?- |; l8 P3 V; b- D
  707.       }$ l1 N/ A- K2 J
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();/ ?) R6 D( k+ {0 e
  709.       dwStartUpSteps=2;7 @# n! ]/ a8 w3 z0 Z2 u& s
  710.       break;
    . H7 R( o, ]5 X7 g1 @
  711.     case 2:
    " C6 a  A7 }' l
  712.       {
    3 D% y0 y' A) I& n. S# S
  713.         int iEOF;
    ! J" Y( H' A! B6 h: ^
  714.         FILE *fp;7 X; h- l9 @# }% ?1 N# p2 s
  715.         char szString[512];+ G- r7 |; v) ~* z4 ~% C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");" W3 J3 v7 e1 H
  717.         if(fp)
      u7 ]' f1 G0 R
  718.         {
    3 s! N0 U& m2 X" w4 B& j5 {
  719.           do
    $ I  s3 w0 P5 u: ?
  720.           {
    # e& [" `( ?! W  T8 r
  721.             iEOF=fscanf(fp,"%s",szString);" w, _$ j$ r" W) H2 c# e7 X: r
  722.             if(strlen(szString))
    3 N4 {; p$ e2 l2 l& m* P
  723.             {' r) i( ]( ]1 {  Z7 [8 z
  724.               if(bFirstChar)
    : I0 c2 g/ k: \0 o: {9 D% W5 m
  725.               {
    ( h9 N& _2 j1 ]& Q6 \1 I; c
  726.                 bFirstChar=FALSE;
    / L5 {; Z' O6 Z! u. J: `: s& m* s
  727.                 bConnectIsBig5=FALSE;
    " ?2 |% w5 C0 v. c9 t+ Y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;1 O$ I" \3 I( T
  729.               }# h& t2 T+ P+ o1 Q2 R$ ~
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ) Z7 O% k$ e6 W" w4 t& |8 F0 @. X
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));0 P9 k8 H# J% }5 s# j, X& W! p
  732.               dlg->m_ListText.AddString(szString);
    6 y+ ?) o7 K( v9 w+ K' ~; `4 W
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * f, G: `3 x1 h3 Q1 c8 q% u
  734.               *szString=0;. V8 A3 H' n5 J) M" x2 ~
  735.             }
    5 m. ?6 k* U: R
  736.           } while(iEOF!=EOF);6 \* l, D6 g' L% G2 A1 {
  737.           fclose(fp);0 D# f+ e7 n1 a( _0 m( k2 O. l
  738.           unlink(".\\DownLoad\\readme.txt");/ L5 d4 C) d2 N: ]5 M0 ^% S: z1 g7 G& P
  739.           dwStartUpSteps=3;
    / X# i: |+ Y5 c5 {  W9 z7 p
  740.         }* d0 n: P9 f, |. h9 e3 b1 P7 W: [
  741.       }
    ! b# Z) I+ X; I0 H, V6 o
  742.       break;
    ! j0 w# J& G2 z5 U8 u. K  [& q/ u
  743.     case 3:3 @8 @6 E$ ?% J* I2 u* B1 a
  744.       if(!Dn.Connected())& v# \& H" u' M
  745.       {: Y4 A. L# D0 j- ^' p4 K
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 c# }* G8 u. Y+ `8 k. ~
  747.         dwTotalFiles=1;
    5 k3 g1 ]( b1 |( t
  748.         dwDownLoaded=0;3 X* l+ h9 p" m1 n* f
  749.         bSilentStep=TRUE;) I9 C  Z. I. |6 [% D
  750.         bCompressed=FALSE;
    3 t7 `* c4 I% G
  751.         strExtLocal.Empty();
    8 X7 o9 i( w3 c
  752.         strFullName="checkversion.txt";
    8 J  e9 X+ b7 o) g' r
  753.         dwProgramState=AP_CONNECT;  k3 M* z1 q6 Y4 ?; H
  754.       }
    2 r$ D* ?4 ~9 r' ~0 h) _' Q- y
  755.       dwStartUpSteps=4;8 ]" ?, g$ J8 w/ e+ M1 P, z
  756.       break;9 `( I7 S9 o+ B3 A6 ?: J
  757.     case 4:
    5 R. Z! J% o) q) B. F- p) S
  758.       {
    6 A1 C! \- l# a. w: ^  g
  759.         FILE *fp;
    - L9 v2 l- t& c: H, O
  760.         char szString1[128];; C4 X) U3 A/ t
  761.         char szString2[128];
    7 z$ k0 `3 h3 i+ a
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' L8 r$ v* X( B, x! X9 ^. u
  763.         if(fp)# T) g1 S$ ]8 R% Y5 b3 S/ m& O
  764.         {! e4 Q% o# k, h+ r8 ^& z: t1 ~
  765.           fscanf(fp,"%s",szString1);
    9 Z8 z6 D$ P2 ?5 g/ q7 V1 K
  766.           fclose(fp);3 Z0 `- a! B# O! B1 L7 U( o
  767.           fCheckVersion=atof(szString1);# ?) T: d8 o1 X2 \+ ]0 G' ], Q
  768.           fp=fopen(".\\checkversion.dat","r");
    % z5 G. t) ^% L
  769.           if(fp)& N5 u0 u6 Y- A
  770.           {
    & n. W& E: H+ h. h
  771.             fscanf(fp,"%s",szString2);
    9 w% z5 w3 W" W. b5 l
  772.             fclose(fp);
    7 U' N' X5 e3 C% Y
  773.             if(atof(szString1)!=atof(szString2))( ^% h& s4 k" O9 r, B
  774.             {6 j0 l6 O& C! i3 Z
  775.               if(!Dn.Connected())/ [  \/ M( C) _$ _
  776.               {/ X! u2 S7 J4 c( v2 t
  777.                 bFirstUpdate=TRUE;* x5 X$ J$ E! O
  778.                 dwTotalFiles=1;
    " A9 o5 S5 m; S: f5 c
  779.                 dwDownLoaded=0;
    ; O5 T* Z: l; q+ Y
  780.                 bSilentStep=FALSE;& J: B5 s/ i& `
  781.                 bCompressed=TRUE;
    ' [- g+ ~+ Z8 I5 F) x3 @3 ?
  782.                 strExtLocal=".\\DownLoad\";: }0 O: F0 ^  i9 v$ G+ P, g/ s
  783.                 strFullName="update.txt";* }: a6 |4 U3 @. [0 G! s: b, x) D. ]
  784.                 dwProgramState=AP_CONNECT;0 n+ G+ q( r! K. p+ H: q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    6 a7 q/ e3 V5 t. l7 s
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 e0 T0 i; u: g0 I, f* R# Q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 I% r8 ?. |: r* [* T, n
  788. , E; p: q% t6 D
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 \6 X. \+ I3 g/ `5 K: |
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    4 Y! o8 o! G) Q8 v
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1): W3 n8 Z; }. K" `/ T9 I" T5 A
  792.                 {
    2 l9 V" d1 a7 B- M& i
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");$ G: Q( E+ u0 m* m* b7 V$ H
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    7 ?6 u6 `; _) E; u
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    6 A5 s- I5 u9 m& o/ p0 l
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 \! e' |# D) R) q: f' |! X3 w% H
  797. 7 C: m+ f5 z) A/ L
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( I' l5 }% ~. v
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 u) _% d0 ?3 x# B
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; q5 t: n  Q( a1 X% L2 K: `
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 L; u. D) q. s! ?2 l: L! b
  802.                 }' c9 g" ]8 Y/ v4 o! [
  803.                 dwStartUpSteps=5;& A9 d- }% E  \. y* O' Y. [( C
  804.               }# v+ l- [, Q# O) u/ |! }5 {3 K/ q8 X
  805.             }
    5 v; [) W: u) g3 A6 s
  806.             else
    . [" S; B# X* U' J- B. O
  807.             {$ {" U" p2 ]0 y! q/ Y6 w
  808.               unlink(".\\DownLoad\\checkversion.txt");0 {  D% L; x- D& G9 g( ]0 v
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- g: Y5 U+ x$ u
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    . T9 V0 [/ a; s! W- O  l" G1 c
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    " d& {7 L/ Z% u1 B

  812. 0 {6 A3 p1 }7 v  F' x
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' Q  S/ ~0 `4 b2 S8 Q
  814.               dwStartUpSteps=99;' H- A) N1 ]4 i7 u3 A
  815.               bFinishUpdated=TRUE;
    ! p7 |* E: h7 {& K2 A
  816.               bCanUpdate=TRUE;  D) M% K& ?* P, w6 y& Z
  817.             }' B2 {- a! w) v0 z4 {" d9 ]4 g
  818.           }
    6 S; V% b+ {* {' \# R
  819.           else+ _4 W. t4 Z. V/ {2 r$ Z
  820.           {8 l* _& g' b% @( Q9 B+ s0 d! o
  821.             if(!Dn.Connected())! U  ^- g8 W4 H6 l. H
  822.             {4 {2 K+ S5 b; r0 Y+ i9 J- {
  823.               bFirstUpdate=TRUE;
    $ m9 G, K: p7 x9 b! _9 c
  824.               dwTotalFiles=1;1 `& d+ T: a9 O8 L/ _. a1 F
  825.               dwDownLoaded=0;4 R: c& p" C0 Y/ D7 M3 E
  826.               bSilentStep=FALSE;1 n9 {! ~+ c2 U/ l: [0 Q- x
  827.               bCompressed=TRUE;
    3 V- J' o& p9 K* ]& W, `
  828.               strExtLocal=".\\DownLoad\";  J) Z, c/ H5 C/ ~* Y1 q
  829.               strFullName="update.txt";6 F" |% h& ^. B3 D( r
  830.               dwProgramState=AP_CONNECT;7 r4 N# r) R: P, a0 F5 }
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: G2 D6 U. @/ w) U3 U9 u* \
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / P  B! i2 E' v! d8 K. `/ E4 ]
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");2 S& q+ ^4 \% C
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . |8 y, j: ~; t4 x7 b" \/ n8 `
  835.               unlink(".\\DownLoad\\checkversion.txt");
    1 A+ R9 r+ A9 W8 c' L: l% }
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ) a, v! d0 B7 n; _9 }9 b  x5 D
  837.               {
    4 U2 |2 v, E: j6 X5 ^; N4 E0 W% A
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    * F7 l! v3 ]1 T) H
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");6 X0 G4 n6 Z; A$ G6 h3 a& n
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    8 A" h7 X8 X2 b; E
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 t. z2 @0 Y# a8 d# q" ~: S0 O
  842.                
    . S$ E  [$ c5 J' b. F% b% a, k" F) t
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * b  Z  T6 y# J, f
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 b; V1 l* i2 q) V" \
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");- y6 m9 h. j( u* ?7 n( a  u
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 b+ q" @* f( }( p4 q
  847.               }
    ) t/ X- S1 }9 |/ S, z5 ]8 n
  848.               dwStartUpSteps=5;
    * V; ^/ }- q  T
  849.             }
    ' a0 r7 l8 k9 d/ A5 Z
  850.           }
    % E* o1 B6 ~' l1 C
  851.         }
    9 M2 t2 Z; p- l' n; c/ a4 C5 ~
  852.         else
    % W3 @. y- Y3 O5 q5 w
  853.         {* W; |, A2 q: F; _6 J
  854.           dwStartUpSteps=3;
    * |: J- y# `. w' L+ K8 i
  855.         }
    - D; e( l; p0 Q
  856.       }) x* f# W: C. f! f2 g
  857.       break;) d2 U8 @8 b+ _: C, e, z: e9 M
  858.     case 5:' K$ s' T0 ]8 l1 o9 V
  859.       {
    $ d4 m6 r( O% p& ]1 s
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    / s& r6 K. }9 K, N9 p6 N* F0 [" e
  861.         {
    9 y* p) B, P& i* _4 n* p5 R
  862.           int opt_overwrite=1;/ b, M) _1 R7 x/ K, e3 n9 Q0 E
  863.           int opt_do_extract_withoutpath=0;
    # Z7 W. t# l6 v7 b4 ^
  864.           unzFile uf=NULL;
    / l0 y. @) z3 b4 U; P
  865. " ]$ b! U: e6 @& J  m: l
  866.           uf=unzOpen("Wsa.zip");7 t4 X; @# w. e$ @, w
  867.           if(uf)1 A+ `+ S. V" |# v" E6 |
  868.           {- ~, v) p$ f6 ~" q; D9 K9 @/ J
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    " W* b2 a3 K9 [$ D/ p
  870.             unzClose(uf);2 u) I0 W+ l8 R
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    3 t2 P) [. ]* G' z" z- d
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    : I+ \& a9 f( P+ u
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");* q5 f# _2 p2 ?: U- r& }: H
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + m1 u5 k. a* a, R
  875.           }
    6 Y* O% w; N9 B' U" Y. i
  876.           DeleteFile("Wsa.zip" );
    6 j% n) ?- D7 G2 l4 o
  877.         }
    : X8 v6 H5 s. O" c' h

  878. " h3 T9 D, p9 C/ F' n8 \
  879.         if(CheckLocalVersion())* }0 H( @! M+ d: k4 B
  880.         {( \  y9 n( c, O% L, P% O2 @2 k
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    * X# p# N, z7 R  B7 X! A
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");& V& {. Q, X/ M( e
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    . d+ P0 }5 a6 Q0 t3 L0 @
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& ?! f1 l3 o3 y
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ; t2 y# u8 [- F# M$ \: ?4 Y1 E
  886.           dwStartUpSteps=99;" D7 N9 g) J- U0 O1 `
  887.         }
    ; C4 o! P+ |" @
  888.         else
    # M+ m% d, N1 Z6 m
  889.         {+ ?9 r5 F) t& l0 x
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ( u+ q& Q- J: \: Z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! O, t9 L9 A+ U5 Y
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");: h  Q# p/ c4 T# s$ D; j

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

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_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
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部