找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
3 U! s3 u/ G; C* G* d
  1. / RevApp.cpp : Defines the class behaviors for the application.
    * j/ {$ o) r2 p5 a
  2. //0 _0 O, z5 a- m: O4 y: ~: [7 B: C2 D* I9 V

  3. * x# J" Q# c% I
  4. #include "stdafx.h"8 k2 j. h' o) M8 Q/ S
  5. : y4 \4 Y. Q  t' W" H
  6. //#define UNICODE- U; E/ C& Y5 r0 q$ h" t
  7. //#include <gdiplus.h>
    6 W2 \# r. F/ W9 [4 `& i# J# q
  8. //using namespace Gdiplus;
    6 _1 b& q3 [/ ^/ B" D( i& j7 Q
  9. 3 ?2 T- a. {! P) m; e3 E
  10. #include "RevApp.h"9 S& U/ z7 N3 g* O& D
  11. #include "RevAppDlg.h"
    $ v% a+ i/ `( l: g) X4 L

  12. 0 d0 l( m# ?6 W# `: a7 d, e. j
  13. #pragma warning(disable:4786)8 ]0 J+ ^1 u% i$ |, Y) A# @( S
  14. #include <map>
    6 ?5 }) D& w: \
  15. #include <list>5 P' O6 S9 O/ f+ s% Z1 ?
  16. #include <direct.h>
    " y. B1 u2 i) Y
  17.   ]+ o9 _! f% W; h$ @+ x
  18. #ifdef _DEBUG* }* J! h( r! V& A& a( a% W
  19. #define new DEBUG_NEW& K5 `  L8 {* @& g; ~/ ]7 @- Q
  20. #undef THIS_FILE
    * T9 p% S( K& S# Z9 X) M
  21. static char THIS_FILE[] = __FILE__;8 T( K% w; \" L$ c& Q( |  ~4 l
  22. #endif
    + C: k# h, ?1 J+ w
  23. #include "SkinResDef.h"
    / s+ J  [9 ?  u3 I
  24. #include "ChangeBG.h"
    ' @1 K# j* B4 A+ f+ [8 k
  25. #include "AFXINET.H"7 i! m& J5 V% r- ~  R
  26. 6 \+ W: z0 N6 J- @
  27. #define TRADITIONAL_CHINESE 0
    " k. c; n- _2 z; K) [+ B- [
  28. #define SIMPLIFY_CHINESE 1
    4 b% o- i# v, g( A( t
  29. #define ENGLISH 2
    * M. |# G" L" ?. O
  30. int m_iLanguage = ENGLISH;8 G* z  U) I  P( T+ q1 {
  31. /////////////////////////////////////////////////////////////////////////////$ L. C% q+ v% f. p7 t
  32. // CRevAppApp
    : ~' o7 U1 ~6 ~# h' y% {- J7 _
  33. " o. i+ {- T9 {1 R' E* ^* W8 D# v; L
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    # f6 D4 r' i, V+ W7 u  }
  35.         //{{AFX_MSG_MAP(CRevAppApp)+ ], |5 f5 ^) e5 r& B- y
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.0 [: l' d5 d) H8 L* ]& U% a
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!% u. W% ~9 ~. ]  w. c
  38.         //}}AFX_MSG2 y5 t% A! Y$ K4 c; v
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)4 B# V* I; ]& _+ `
  40. END_MESSAGE_MAP()
    - C& H2 ]5 i) W0 A1 p" ~
  41. , j8 L5 a: l7 a$ M8 {+ a  x/ z
  42. /////////////////////////////////////////////////////////////////////////////
    6 p: r4 y+ U7 r# Q. Q- [% r+ ~7 N+ c
  43. // CRevAppApp construction
    . p5 \3 Z/ e+ L! G' \8 u0 x
  44. - T" Q1 y- F) Y& j7 ?) [; @
  45. CRevAppApp::CRevAppApp()
    2 Z. I5 o* c5 P2 `
  46. {9 B, g: |* G) p3 q% O
  47.         // TODO: add construction code here,0 ^! @* h0 A! u; B2 P9 d
  48.         // Place all significant initialization in InitInstance
    7 }( U# r/ n+ d9 r. m8 n9 g! {
  49.   bDisplayIsBig5=FALSE;
    - e* L5 M9 d7 t2 G
  50.   bRestartUpdater=FALSE;8 _+ e7 N0 V) a7 o# M# w
  51.   bFinishUpdated=FALSE;4 k/ u0 _" J8 q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    6 J" b9 ^8 i4 F! D/ H% _
  53.   InitChangeDataBig52GBKS();
    ! t& G2 G7 d( p6 k8 Z
  54.   InitChangeDataGBKS2Big5();) G$ g4 a& `) P. W* n
  55.         //$ ?. x+ S8 ]+ W; ?* l# n/ v5 J
  56.         bClickRunExe = FALSE;
    $ i7 o" {% ?! n# o# q) |: Z5 X) H
  57.         //
    : l2 B3 H5 [9 V1 @" E
  58. }5 Z" w* [& e$ B5 V

  59. 0 C' X- p: h6 g/ z; p& S5 m! d
  60. CRevAppApp::~CRevAppApp()
    & h0 b5 L, @" y5 @0 n- ~  g
  61. {5 ]0 D" ~1 s1 [' ^+ Z9 k
  62.         // TODO: add construction code here,) a8 u8 K$ j( f- ?% Y
  63.         // Place all significant initialization in InitInstance8 ^% _' w, c& P5 N: w
  64.   EndChangeData();7 T, ?6 k! P1 r6 U- v1 o
  65. }* ^9 ?9 p0 `1 ^. z" r4 O" W' {

  66. 2 Q$ e6 t/ h2 s" \9 w
  67. /////////////////////////////////////////////////////////////////////////////  G. C$ e9 C% {: v7 g
  68. // The one and only CRevAppApp object0 V1 z2 U; Z7 W" ?2 _) M& |4 ?

  69. & S( C3 `( [4 x) q+ g
  70. CRevAppApp theApp;1 ^' s* c. g% m4 {/ o; c3 J

  71. ! t7 W7 N+ f: x3 X& @0 W3 Q6 |
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName); h+ {8 u6 e& Z$ y8 `
  73. {
    1 h4 M. J! {1 p% R& ?5 k4 }
  74.   int iEOF=0;
    " o/ m7 U% U% B/ `% z
  75.   char szTempName[MAX_PATH];
    ! j  y1 N3 l" i6 O* ]
  76.   *szFileName=0;# \$ t* I9 {. H- E* h
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( u6 P% F' S: H( p. ~- E( [0 |/ @
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')! s& A2 Q; s- j7 Q( H
  79.   {6 P, i& @6 u# }: F4 m
  80.     strcpy(szFileName,&szTempName[1]);
    . e5 R$ ?9 V  m0 S. B
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ! r5 j! ]1 C# c& J
  82.     {
    , a" V$ N+ E: z, r
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " x1 v8 |* B& x% U& O5 r( h
  84.       strcat(szFileName," ");
    - l" a4 f. ]; i4 b+ q
  85.       strcat(szFileName,szTempName);
    4 R) Q# b; h! h5 S+ m& g
  86.     }: e2 w) x! {' ~3 g* L
  87.     if(strlen(szFileName)>=1): E( ~+ w6 I5 @, T* n
  88.     {
    5 l& B6 M: L) ^
  89.       szFileName[strlen(szFileName)-1]=0;
    # A1 ^  c- G; ~* ?
  90.     }8 _6 U" ]* H4 q1 C& V
  91.   }
    / r0 k7 z1 R. R$ H2 p( h7 P
  92.   return szFileName;
    3 I' [0 L# j, l/ n( p8 ~7 I
  93. }- e+ Z  Q* U0 h
  94. ) ?+ Q/ p2 X$ ?4 U/ \2 R- H
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ! h7 K, |5 _: e5 a7 I
  96. {9 a+ B8 H4 M4 `2 B
  97.   FILE *fp;
    % H: j$ Z- T* F- i' Z2 P4 K3 @5 y. w
  98.   char *key=NULL;/ m$ y  `5 a, o# v' B
  99.   char version[MAX_PATH];, _0 T5 Y# k( u$ {
  100.   LPUPDATEFILE file,olds;
    6 d) I3 P! |. M" C
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 d, Q4 F& X, s
  102. ' i8 ^* _- [3 q9 O' r
  103.   UpdateList.clear();
    4 }; Y6 }5 c9 v' X7 q% {+ _8 j
  104.   UpdateFile.clear();
    # z8 \6 O& u$ h0 n, k" o
  105.   if(GetFileAttributes(filename)==-1) return false;7 ^" |- M" N9 O9 G7 q
  106.   if(!(fp=fopen(filename,"r"))) return false;1 f* y2 I# \" I3 a0 h( D
  107.   fscanf(fp,"%s",version);: Z% Q1 N) L7 r/ y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }6 H  H5 }9 T# q* S7 w
  109.   while(fscanf(fp,"%s",version)!=EOF)
    6 v3 w9 Q! J5 Z  q( ]' L. w  f
  110.   {; }" W) i% @  n% J: Y1 U
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. n# P. X) u# v# h: t! s- F  r, }
  112.     fscanf(fp,"%s",file->path);3 O% u8 _3 m% k" `+ n; n
  113.     ReadFileNames(fp,file->file);. t# B/ Y, C2 {7 Y  X
  114.     strcpy(file->full,".");+ W$ L4 \/ T( f/ |, C
  115.     strcat(file->full,file->path);
    7 U$ E( Y2 c  t9 ]4 W
  116.     strcat(file->full,file->file);
    : d) _% U& H! z, z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())+ h; K+ [0 }. c/ x
  118.     {$ E5 e4 f( \* x$ n$ I# f3 @
  119.       file->vers=(float)atof(version);# V" m! p9 e% {. y! y
  120.       UpdateList.push_back(file->full);
    $ [  [. }) ?7 W  ?" Z0 y" y1 ]4 ?% U
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    5 T  e3 h( o( G: ^8 R6 r
  122.     }
    7 u6 q) f9 L. n: l; o. z; r
  123.     else
    " O" y! e  R3 D
  124.     {+ y' N* Z9 V8 a5 L! x2 o4 Z' L
  125.       olds=(*p).second;
    ) H" J! k# ?1 }
  126.       if(olds->vers<(float)atof(version))
    # c5 K! `4 d$ q* v
  127.       {
    + W  L' k/ E" c& M3 q, i
  128.         olds->vers=(float)atof(version);/ D; c' ^9 X) H% I$ m3 ]8 ]
  129.       }
    : V# Q' ?4 G* z" ~
  130.       free(file);
    5 [' w) I* }1 s5 P" U1 G& Z) ]
  131.     }
    ( n$ |/ A/ g) R' o1 }6 F5 N! Z9 {
  132.   }1 K3 d/ ?2 s* }% h+ k7 [5 ^
  133.   fclose(fp);
    3 \" m, d+ b4 b' q6 Z2 Z% w. l2 }
  134.   return true;; m9 p4 F& p0 {5 v# _
  135. }! \& S) }& q4 J- w  X8 b! r# U( _; u
  136. & N2 w: U8 A: {. r  |7 d) c, Y0 I
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    " r4 w5 U5 z5 l
  138. {" L( {: H- e; D+ O6 T/ U1 A
  139.   TCHAR  szFull[MAX_PATH];0 a# R% S) d& E( u; ^6 [. G* _
  140.   TCHAR *token,*inter;- C% X# B' ~. l( x' m+ N
  141.   *szPath=0;
    / S0 A$ g. }8 Q  O; A0 O
  142.   strcpy(szFull,szFullPath);
    ! N& |8 A; K) r1 j/ }
  143.   token=strtok(szFull,"\\/");
    . q  H+ J9 H# A! R
  144.   inter=token;* _8 d6 g: a8 Y2 _/ j" }
  145.   while(token=strtok(NULL,"\\/"))
    $ B7 {- p3 M: j% T7 f' ]
  146.   {% c7 J! x# u7 O
  147.     strcat(szPath,inter);) ^2 @/ {7 a9 m0 E2 P! y6 q" q; E
  148.     strcat(szPath,"\");
    + }2 k# L3 B4 `9 x' p
  149.     inter=token;& }. F2 Z3 m  J# A, q
  150.   }! R* Y  @2 Y' l/ T
  151.   return strlen(szPath);
    ! O+ ~/ T- |: K4 {! q/ p
  152. }
    ( w; i9 X$ l7 V/ O4 X" g: _
  153. : o, Y) J3 f: X/ W4 D
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    0 b; O7 D% k3 d5 b9 c0 I% K
  155. {4 v8 w; q$ X! h& f5 s' c) {
  156.   DWORD attrib=GetFileAttributes(Target);
    / t& t9 {2 x" f3 f: C
  157.   if(attrib!=-1)& x8 I# x; R: z% d2 h+ R. D
  158.   {
    ) n$ b# r3 V. o3 j6 {9 e, n- [
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' M9 O" e7 L  ^* Z
  160.     {* \% u. t( {2 x
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    " ~) Q# F$ j; D8 x1 \/ z
  162.       SetFileAttributes(Target,attrib);- f6 B$ O8 X( e) `; Z7 L# f: C
  163.     }4 ^/ m: Z9 H! h: o
  164.   }$ I* w6 Q6 j0 O/ X
  165.   CopyFile(Source,Target,Erase);
    ) c* B3 x$ \3 b# o4 n3 D* O
  166. }/ k  H. t) l- I! l% K$ z/ q/ z) Z/ S

  167. # p5 f4 x9 g; ^0 H
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)0 t9 v" ?6 X1 \/ a: S
  169. {2 h( A9 s* n, d" }; G' w: D
  170.      FILE *fp;. O. J. t9 C+ \% b
  171.      char  szBuffer[8192];
    * ^, R6 Q' E) Z( x2 E; g
  172.   va_list  argptr;* u% A, Z8 M& i# w, e" g

  173. , I: n$ B/ T" H% {
  174.         va_start(argptr,message);
    " k3 Q$ y. A0 C) \: y3 Q" ?
  175.         vsprintf(szBuffer,message,argptr);
    : M0 n. S3 B; [- I0 r; Y: U" M
  176.         va_end(argptr);& E2 C+ |5 E6 D: [* _/ x
  177.   fp=fopen(FileName,"a");! @9 m0 `# Y9 W# u
  178.   if(fp): ^+ z; O3 f) y/ u; c" f
  179.   {( K: y' ?7 ]4 [) O
  180.     fprintf(fp,szBuffer);
    % T. N  P7 }5 N4 a% d2 T! P
  181.     fclose(fp);
    5 s4 p5 U6 L& A7 |
  182.           _flushall();
    6 ~, ~& p/ c; a" d1 R& e2 e
  183.   }
    4 F" W0 B0 A, V6 M$ {6 b7 N1 b! k
  184. }
    7 W( E, g# U, F

  185. 8 d% {4 U# g) h* W* E  s5 m5 ?
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    % ?0 t: l! }/ i" R* u2 u
  187. {, p, x: u9 w. P0 u# ?3 h& E' B
  188.      FILE *fp;
    ) ^$ c# @- t! y! M, y" Q8 `4 H9 B
  189.     DWORD  attrib;1 G5 z& E/ s# q9 n* m8 G% \
  190.   attrib=GetFileAttributes(FileName);
    " ~. F9 e" p9 z& w. ~/ x
  191.   if(attrib!=-1)
    % {$ n9 `6 [5 L) U+ y5 Y
  192.   {* e% d1 [6 e" B: W: N2 Z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ( X4 E7 ~0 [9 ~
  194.     if(!SetFileAttributes(FileName,attrib))
    5 P5 Q6 I; E) F2 a' ]0 [
  195.     {
    " {- B4 ~5 b) u5 J" Z
  196.       return FALSE;, r0 q6 {. m2 M# [* B
  197.     }
    ! j; O! e; m4 a+ o- P
  198.   }9 `  o6 B. ]* L
  199.   fp=fopen(FileName,"wb");
    " M& @6 o. ?1 `% b- `' b# A
  200.   if(fp)
    / K/ A7 g5 F3 l, b$ E- H! i
  201.   {
    ( w0 e/ e) ~/ e& X" |4 x
  202.     fclose(fp);# r2 M! G4 R5 M) f, P# E& L& D
  203.   }
    5 q9 u" N( n! z7 h
  204.   return TRUE;6 A' n! y6 K6 _& d8 A
  205. }
    $ S5 a1 g0 u+ q

  206. 2 H9 M7 {% r' h" R7 u1 t
  207. BOOL CRevAppApp::UpdateLocalVersion(void)7 Q) [# G4 \1 P- P, i: V& P
  208. {
    * ?9 k# J' D/ {9 _' U  e" Q
  209.   char filename[MAX_PATH];( ~# f; Y- t0 c3 T
  210.   LPUPDATEFILE file,olds;
    $ G; v1 P. c6 Z6 q. O
  211.   std::map<int,CString>::iterator i;' ^4 m) j1 n& S. M
  212.   std::map<CString,LPUPDATEFILE>::iterator p;; I$ c( u/ X$ X: {# j" ~( c
  213.   std::list<CString>::iterator l;
    # m# I1 T/ ?" o; N& A$ ?5 s
  214. 5 q) x5 o" p8 ^' q. R
  215.   if(bFirstUpdate)
    8 `3 t  P/ B+ g, U9 b+ d
  216.   {% |/ `/ w! n' t9 d4 Q& T6 G" C
  217.     dwCurrFile=0;' B' _( ~) x0 a5 w9 P( }
  218.     bFirstUpdate=FALSE;# W9 k( T& o8 `0 k! u5 m
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / x- @2 w! }4 H: {" `" F% ~8 M
  220.     {% R' z7 `: ?7 d5 K* i
  221.       dwTotalFiles=UpdateLocal.size();* [8 z. u* d+ C) V0 z* Q
  222.       dwDownLoaded=0;
    2 E6 t# w( R, O9 `* K
  223.       bSilentStep=FALSE;
    5 U9 y+ R: E* e4 a" `) i# k- p# D
  224.       bCompressed=TRUE;' y1 U0 j2 t- n$ I( M/ ]& V
  225.       strExtLocal.Empty();
    : T$ B4 }& ^2 X: N' I+ V
  226.       strFullName=(*i).second;' }/ y% w, u) s6 c0 Y. k' k0 U$ w7 x
  227.       dwProgramState=AP_CONNECT;
    * ?9 T, i. P0 W3 P. b0 c, v
  228.       return TRUE;* R5 o( F$ n  h& Y9 P7 Y
  229.     }! r6 t/ _2 a& D# ^
  230.   }
    / u4 y1 h4 |8 j% Y+ x& I3 G1 U
  231.   else if(bRestartUpdater==FALSE)5 R5 h- [7 v& N+ d" j6 m* U
  232.   {
    $ ]( U* N9 p0 B4 ?& L% b6 P# J
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    . h! l9 `5 M" w0 o# }7 v: c
  234.     {
    8 Z% Q9 e" M$ D1 ~. W% |  z# Y
  235.       file=(*p).second;0 p$ j2 a2 v6 w: f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())$ I, w* |" L5 f" t0 I
  237.       {
    3 R$ v, u" M% W6 Y% Z
  238.         olds=(*p).second;* M, g& t% a* R( S6 @5 b6 C2 @+ E
  239.         olds->vers=file->vers;
    9 ^6 s: u7 p3 O% U5 f* T
  240.       }
    0 _. C, c3 t! ~# x
  241.       else) J6 t. E0 a+ C0 \  h
  242.       {0 k; y! ^" k8 E5 [6 p
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ W$ ~+ A' U& c
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ! Q. {; y% m8 n7 r/ [& J( y
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));7 R% n: {: ?- H- w
  246.       }# g+ ?9 s- Z0 H/ Z# V, V' i
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");9 D6 \9 y% a/ j/ D4 g- V  q7 V
  248.       sprintf(filename,"(%s)",file->file);) S) B! {5 C" @
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 \3 P: H4 b" o0 l7 r. q9 C) _
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    0 ]2 v8 a+ p  y; `( [, [2 w
  251.     }
    . g3 s+ Y' c: P! U* z
  252.     dwCurrFile++;& R. K" m8 L# \- {/ ?
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 h% v( ?& ^: a4 @6 e" W' D
  254.     {
    # u8 g2 {( `0 d  e! z
  255.       bSilentStep=FALSE;
    * Z. |( p1 E( f- _* O
  256.       bCompressed=TRUE;* [0 P7 w( r$ D% f% G4 F
  257.       strExtLocal.Empty();6 A& Q+ P% n" w0 c% C
  258.       strFullName=(*i).second;
    . g4 s5 x0 N% W7 u4 W
  259.       dwProgramState=AP_CONNECT;
    7 i0 _5 L6 y. P3 J" K
  260.       return TRUE;" _9 }3 }8 t* ]4 W
  261.     }+ ]" k; H" `; L9 A! B
  262.     if(!bRestartUpdater)
    , [+ {# d+ @' F# \0 B
  263.     {
    / w5 _) M% f2 Z# R
  264.       int iCurrSize,iFileSize;. _- Q- \% n6 l5 C7 \( s
  265.       iCurrSize=0;4 X- k: E6 C! j* a# `8 X6 W* f4 e
  266.       iFileSize=UpdateList2.size();4 \8 Q5 \' W# M9 F
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    0 Z) P0 D+ v, j  X: l) v- T2 E9 q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");+ D' k' k) a9 n8 k5 h
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");# E. P: K3 u1 D: D0 s
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / k1 J' ]/ D; x1 M1 n- P3 c, F
  271.       Fclearf(".\\update.dat");9 ^) M0 H6 Y" ]+ U4 J# _( s
  272.       Fprintf(".\\update.dat","Bloodyf\n");2 Q7 w: B; U7 g, G6 y3 O* V$ W2 n: d
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++); a) m8 t& _% T. ]; `
  274.       {
    2 N0 Y: u  `2 |0 ]. p$ P& d' s
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    / f4 v+ n9 ^# D' h: Z
  276.         {
    ( K9 Q' ?/ `  i' C
  277.           file=(*p).second;
    / r) x& _# C) n! ~* `# G
  278.           sprintf(filename,"(%s)",file->file);/ S# `! ]4 L% h+ `
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " h6 ?- d" M3 S$ J0 {
  280.           iCurrSize++;) w, X/ U- |& [
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % \5 Y! j, _" W0 W
  282.         }* P9 q7 n5 P8 e1 F( }
  283.       }
    " ?' X0 n; K6 Z
  284.       unlink(".\\update.txt");
    7 P0 u, O& N0 `1 R; H( |
  285.       unlink(".\\update.tmp");
    $ E# o8 A1 M) i+ P4 p. L# E! |
  286.       Fclearf(".\\checkversion.dat");" z: R! w5 T  M2 U
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    4 ^5 F/ X2 M0 Y, b. _: |; Z& |
  288.       if(UpdateLocal.size())
    & @8 f( U9 P; R/ ~3 f
  289.       {$ A! G9 s2 O4 B1 }
  290.         UpdateLocal.clear();* q0 @( M0 Q3 P4 D4 B$ r  o
  291.       }7 u* U  T2 |  L
  292.       if(UpdateFile3.size())" o, J! {! w; R" T
  293.       {. ]* b# f- Z! x. x6 d: {( L
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    $ ]8 A5 q4 d2 k; K0 Q, d) R0 Q
  295.         {
    9 C! \9 Y) h5 [' U( A
  296.           file=(*p).second;* B& [  `8 x) A( ~1 R0 @7 F
  297.           free(file);
    6 `. q+ ]* u/ m/ {
  298.         }
    , H( v, \; _: J8 V
  299.         UpdateFile3.clear();
    * V; [4 H# j' w9 @
  300.         UpdateList3.clear();2 @% f1 V- v" m' U7 q
  301.       }+ h9 a8 f3 Y  f% X& X3 @% x9 M
  302.       if(UpdateFile2.size())
    . z! }* K0 \$ o% L; `
  303.       {- k8 ^6 ]5 R: ^: T& `; |
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)6 R+ t  Z- I& z* I, }6 p
  305.         {1 r  U: v: q1 v# [6 a
  306.           file=(*p).second;. d. A8 ?0 T. y; {/ n4 u
  307.           free(file);  Z, |' R. L) c4 k; O, @
  308.         }  V6 D7 Y  H, c; \1 X; K0 S
  309.         UpdateFile2.clear();
    $ X. Y% C  H% v! s! G6 `8 g
  310.         UpdateList2.clear();, v7 y4 Q* k$ ^2 ^! ^  J6 e
  311.       }' k2 Z9 P+ O; K0 \# N
  312.       if(UpdateFile1.size())
    / ?$ n6 c, {5 J" ^/ G& N
  313.       {- {8 y, Z  c+ ^: Q( V0 r; L* x
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 E) Q+ z* C: h! Q. {! ]
  315.         {1 D  J) `* {& o: J2 l7 _, j5 g
  316.           file=(*p).second;
    + }$ O2 g0 L: k
  317.           free(file);$ I- W( Q) b; k, U) `$ r  v2 ]8 c% E
  318.         }% i) r9 n! H0 ]
  319.         UpdateFile1.clear();' X* O4 Q$ l& k9 ~
  320.         UpdateList1.clear();
    $ I/ Z- C# L# [7 _, J
  321.       }
    ) n5 Y& r: \/ c: U
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));4 v  b& A6 d5 i8 Y, B1 y' W3 K
  323.     }
    / C1 j2 ]/ d# _" E% U
  324.   }
    8 N- F  Y0 @4 Y. P% O7 }% c1 p
  325.   return FALSE;; {- G5 D7 A7 N7 V4 F( ]
  326. }- v, R+ ]# P- I
  327. 0 [: N0 H& l4 o0 J1 K3 i: x9 N
  328. void CRevAppApp::ClearAll(void)% E* ^" |1 ^+ d! A4 n) e
  329. {
    0 ?- O3 z5 e) s% k% X* P& A$ p
  330.   LPUPDATEFILE file;
    9 W7 ~: Y5 j8 o, \' A- O
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 m# j2 K/ K$ N' t% |  W8 p

  332.   J4 E- T6 \& b$ D; B  T
  333.   if(UpdateLocal.size())/ X% U' m2 f' N
  334.   {! O# f2 J" T: D* f' W
  335.     UpdateLocal.clear();
    # T6 f% v4 N# [' ^
  336.   }
    : |) k! a' v9 Q( M7 T
  337.   if(UpdateFile3.size())8 }9 Q% S* e+ u3 p' h0 b( `& t
  338.   {  R2 ]' W7 `6 S1 P8 i
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) L4 W: u* H3 }
  340.     {
    5 L) @- `8 k. m# _  {, _
  341.       file=(*p).second;8 j7 B& ?$ _' R
  342.       free(file);+ f; O( u1 ]: R
  343.     }
    - k* W1 N. J$ z7 i, v
  344.     UpdateFile3.clear();. ?3 o$ N* h" s' @
  345.     UpdateList3.clear();
    * J# x" C3 m: x* g6 ~9 U
  346.   }* g6 k: t5 R$ U7 N
  347.   if(UpdateFile2.size())# }) ?6 A  u5 G4 T9 b+ V
  348.   {
    " j9 C6 T9 x1 d
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)0 N5 k! b, z% _. y- e  B
  350.     {' N9 Y  {- r3 |0 Z
  351.       file=(*p).second;" m9 c9 O: i% P
  352.       free(file);, {5 q" l( w2 x3 D, h! m& a5 O
  353.     }' M6 c- t* {- M" ^0 @
  354.     UpdateFile2.clear();
    # v- r2 C0 s- a( H. P/ @
  355.     UpdateList2.clear();
    8 l9 j. g1 ]% u, t
  356.   }
    0 }  {+ _& _# O  D( }" Z0 }% ~- N9 w( M. ^
  357.   if(UpdateFile1.size())
    . i4 Z: u/ i8 g4 B4 D& G2 ~5 j
  358.   {
    2 W; H) y1 O# B2 r0 @+ t' g
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# u4 F# H$ M) ^- K7 u8 d
  360.     {
    ) ~' c7 K3 O, C: T1 ^. U
  361.       file=(*p).second;
    ( A8 z( K/ |/ t0 M, E2 b
  362.       free(file);
    * U2 u# N, }- q5 l
  363.     }
    , I7 T( a! Q  B) K- u1 `! R
  364.     UpdateFile1.clear();
    - D& r9 U6 s6 Z' n. ^+ Y) ?& j
  365.     UpdateList1.clear();& t) c1 w% W5 C( u) \5 }* x0 n
  366.   }0 t. W; E- L) N; T- J$ s9 \
  367. }  
    / z% q, k( w+ J9 t: ?( y1 S* r9 u
  368.   
    . D6 @+ [2 s9 h$ [- P9 H  N& D
  369. BOOL CRevAppApp::CheckLocalVersion(void)' f- C+ P  F; N- n% m
  370. {* y) |1 K. A+ Z; k# P& l6 M
  371.   int c;
    ; b/ q  T8 N& ^# @9 N2 T& L
  372.   LPUPDATEFILE file1,file2;, P5 x. {- N# @- A" T- @2 ~
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;7 }' c) ^7 ]4 J$ U
  374.   std::list<CString>::iterator l;1 ?8 x6 z% _) x; l- `9 T

  375. 4 Y( o* s3 d0 t0 a+ |! P3 b
  376.   UpdateLocal.clear();: \, e3 s! j& X
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    5 }' M' M5 U8 _9 B- K% \
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);5 e5 f* _% l" L6 x& A
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);3 O  P6 a% t! h2 Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    2 }$ Y: T/ [& H$ F1 a
  381.   if(UpdateFile3.size())! ]  w# b: P' x& N
  382.   {
    & P5 v7 D" `4 u- F/ ?  k1 {8 B! t
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 h8 Y, j1 m0 {. m
  384.     {( r4 x# t8 i/ _& s" ~% ]# K! @  i* Q
  385.       file2=(LPUPDATEFILE)(*i).second;
    , Y, O# [/ H, @' ]( s* q! S
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" ~! n) l, F3 J& ?" l
  387.       {
    3 n4 }& `! y1 k' v% m
  388.         file1=(LPUPDATEFILE)(*p).second;
    + G" h6 Y5 c  z5 y3 c$ s0 r+ |
  389.         file1->vers=file2->vers;. T% ~8 E. R" p1 \* m0 D: }8 O+ t
  390.       }
    ( U$ t# o) P5 e1 n2 Z% A4 ]
  391.       else: {  o0 a( I: q3 t/ Z1 f6 n" Y
  392.       {. t& e* r: q. m1 K  _- b3 z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  y) `' L! c; m
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    2 l8 y( p) v/ ]& N2 I' M; w2 v0 x! w
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    & \. L3 j' N' c7 t! ?! Z
  396.       }( F0 m' N* x) l
  397.     }
    1 Q5 H' L5 J. V( @3 N! {
  398.   }9 G; }5 ~. ]* a6 i
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & X" e$ B: p, F2 B! ^( }
  400.   {) P/ v. k2 {* t* o
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    : G. A; k( Z5 l" M' }
  402.     {
    4 w3 g& Q& v1 J1 p* P
  403.       file2=(LPUPDATEFILE)(*i).second;& V' c, Q  E5 W% u/ `: K, f* C' h/ n
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 J( k, c3 e8 w1 x9 ]& O
  405.       {
      ?" B) l# X# F. E+ E) K$ a
  406.         file1=(LPUPDATEFILE)(*p).second;
    + o! Y! [& h+ c! D
  407.         if(file1->vers!=file2->vers)
    ( z; ^7 N1 y* P# [2 Q& W- W
  408.         {
    8 h/ G3 O9 w! d' X! V- K9 q  H+ ~! o- T
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 Z7 p2 z' S& q; v" T& @  t
  410.           c++;- f1 i% K& Q3 Q. Q0 Z% s
  411.         }. \# i% Q! y' Y3 D* n
  412.       }9 D- S% a' E& k- ?& Q
  413.       else
      n/ D* O; d# }1 h4 L
  414.       {- S; T( W$ P/ R. Z  p$ T* a
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 v/ w9 s+ Q2 R3 [3 V
  416.         c++;
    & ]5 a/ o9 K) j& F
  417.       }1 [% a. Q7 l4 x. Q0 ^& ^
  418.     }
    " Y4 t2 m& W; p' S
  419.   }
    3 j4 {% r4 ?, V( A1 K
  420.   unlink(".\\DownLoad\\update.txt");; Q7 a: a) Z" ?! f; H
  421.   if(UpdateLocal.size()) return TRUE;  N( _9 a' m" j+ Z4 |$ j+ O) p% V
  422.   else                   return FALSE;
    ) ~  Z% z+ _5 |' i
  423. }
    3 j' o/ g; R4 m7 E- W' F& @  z
  424. 9 g2 Q9 b) E6 O( p
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    0 G, b4 Z, C% M! m- k" t
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    6 k0 X3 R0 c; G: q2 W

  427. 2 q, g. O% r" E, G  E$ i
  428. . d' n7 ?5 r* t6 R
  429. 9 Y& n8 M) u/ P# j/ G4 z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    # E% x% H0 Q! Y9 S
  431. {
    & c  t+ @0 }; }2 N6 C6 E6 J
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    / Z2 n% o8 Y' F; X# b
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): o1 P$ i5 L# i9 J  e  U. i' f% p$ I
  434.   {0 b' y6 x' {. m8 _% x, D
  435.     char szLanguage[50];; Q) N4 O+ E) {; v# U
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 A2 h7 o4 J6 ?' Q, `; T
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ r6 t& F  h) c$ [" u. f
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. a! R3 R! o% C! \* `
  439.     else                                   m_iLanguage=ENGLISH;
    & _$ w0 ~# m2 e4 }
  440.     char szRegister[100];* i& a" T6 R+ c4 V, r% o
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    9 S  p. Y/ i- c& n# `
  442.     strRegsName=szRegister;
    ' s% L+ e, i+ H4 c. R+ ~# `; _. p$ ]
  443.     char szPatchURL[100];3 V: z: f) R. g# ^
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / }% a' Q) E3 @9 L1 _, b& [( P
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ L7 K+ d* z, O) E" G
  446.   }
    # R2 [8 T' W1 ?$ h+ v
  447.   else$ {& b/ E/ s3 m9 Y( R2 K
  448.   {
    * F, m% H# Z% g( ~7 z- p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % h) i1 B# X- P' ?/ a: j
  450.     strRegsName=DEFAULT_REG_URL;. J6 f6 z# z5 G- y# W
  451.   }
    . V! F1 _: m3 P* O- Q: O! K
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    : g( H1 c: Z- e# G
  453.   {
    $ x! A: V: b! `# Q
  454.     char szIP[50];1 Z; y& ]1 p! \8 |1 N5 |" R7 H
  455.     char szDIR[300];" ]" o. q& F- l3 M/ j( y5 P
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))( E* ~* }" s, n1 O
  457.     {
    : }' [" _' L6 S# I1 {
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      M2 Q& c5 A% j4 M9 t* h
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");3 t( q3 w7 a* C3 }. V
  460.       strHostName=szIP;
    . a% \! j; Y) F  F
  461.       strHostPath.Format("/%s",szDIR);
      a; j; v, [& U! N" h- N3 h. x
  462.     }' @6 `( s( |) ?# \- E1 c3 I
  463.     else% ~! q- a: r4 u; t! ^
  464.     {
    9 e( b0 Q1 A' ^
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# C6 S7 ]" O6 ?$ `
  466.       {
    / W0 u$ X2 l: N  X2 ?
  467.         char szLanguage[50];4 w$ _. o( p' d! ?; k$ _
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    # X" t) e9 J. ~) j7 I
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 [. A' `. g) t" g+ x
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! }" d: z( H5 \  H8 F8 h$ |5 f
  471.         else                                   m_iLanguage=ENGLISH;
      t; v; ?# K) h5 E$ c! Q+ W
  472.         char szRegister[100];
    : h1 k! Q# s, S) L' ]
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % ?/ j1 w0 Q: O& }6 x
  474.         strRegsName=szRegister;
    0 Z+ }& B8 ~2 Z. ?, r
  475.         char szPatchURL[100];
    # J$ P: g- y  F* ^% k  h9 g
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- N% p+ V1 \, L+ O* V* z% O, ?
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 q- ~: n6 `8 ?) h7 y
  478.       }1 F" K2 J0 R2 d; K  v+ b$ o- L
  479.       else
    ( S8 @4 I5 S; b! |, B
  480.       {: u' N3 C7 i/ f# |* T8 `
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / Y1 N) l' }% v8 W  d1 C3 p# S
  482.         strRegsName=DEFAULT_REG_URL;
    ( U1 y: e: a  E- F
  483.       }
    4 ^- p- k% d& f% {
  484.     }$ L# m) N7 t% l$ S2 _- B
  485.   }9 t; L8 \& K# M. U2 N" q% Y
  486.   return true;& M- [* R+ {& s! \
  487. }2 n% U) V  M$ I$ q8 Q5 f" G. q6 v
  488. ) P* y: @7 ~# V- ~
  489. #include ".\ZLib\unzip.h". j8 m3 O" \9 k6 g  l
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    1 I( B, D  N0 N1 w
  491. /////////////////////////////////////////////////////////////////////////////9 j' o' J* h5 N. I  C# N
  492. // CRevAppApp initialization
    - Q% r3 Y$ ~3 _( y$ S

  493. * q2 S2 T. v+ Y* ~2 N  M
  494. BOOL CRevAppApp::InitInstance()
    ) A( c- v9 U# t) B
  495. {  f, b  J$ ~0 M, B5 d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    1 [: F/ h! P, D: @8 Z

  497. 1 c: _4 M/ i7 X0 v
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    8 R6 G6 q+ @/ W: w, H
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))  t8 j9 r0 O$ _2 J& w
  500.   {/ a* }7 C& {; w, t$ j3 ?* D
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");/ Y/ V5 d/ @, ?& U2 D9 y* p
  502.     GetPathFromFullPath(szPathTarget,szPathSource);) l2 V1 ~) d& G: J! k% N
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))2 Z/ g, p7 C& _0 O; \! Y. \
  504.     {, t8 @- c' W& J& p4 B
  505.       strcpy(szPath,szPathTarget);
    4 q" c+ z1 C" ^9 M1 l  \$ {: K1 s1 x
  506.       SetCurrentDirectory(szPath);$ K5 I1 I3 j: m# x
  507.     }
    - _* N# L8 w$ i- N3 m8 R' R
  508.   }
    5 h  p. H! d+ f! [; U1 {
  509. #ifdef _DEBUG
    0 l7 p: \( H- B/ p" \- \; ~  a
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " X4 w4 w% _4 ~: f& w" [3 p; z
  511. #else
    7 C# `# v. l' p
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). t; i( R  N5 I+ W7 ~) o* h- J# `
  513. #endif
    0 k# F6 L5 c( y2 C
  514.   {
    * G/ ^: v/ p0 }! F
  515.     char tempFileName[MAX_PATH];1 |0 a( @7 T  r- E0 C0 d
  516.     strcpy(tempFileName,szPathSource);2 ^5 Q* }. }8 ]* T
  517.     tempFileName[strlen(szPathSource)-12]=0;6 L8 e7 z' n7 H1 J! F/ V' L2 S# k" v" O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    : W* |4 s+ p3 ^
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 a" n$ k, q& e
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);0 D( D5 w. A' S9 T
  521.     return TRUE;1 ?( @- V! \$ D' }0 a
  522.   }
    / R+ x7 q4 \0 [$ K5 k1 g
  523.   // Nuke 0118: Delete run.exe
    ' j6 M# j& X" ]# Z+ T: `4 Y( D
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 w5 G: n; m- v, a( l5 _6 C' Z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) ^/ x6 Z+ b' o( d2 H( Y5 z1 G
  526.   if(!ReadCfgFile("Config.ini"))
    - |  _! p$ a0 c! x$ y
  527.   {
    / V& A7 h- {. U/ N1 g1 {
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    9 H/ \/ b. [) B
  529.     return TRUE;( G8 H, g; r3 s2 ]7 f
  530.   }5 o& Y( o9 w, ]' y2 |4 |4 N
  531.   HANDLE mutex;4 j. w9 g6 Z, x% N' \0 F
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    4 ~' u" g. d: o$ s$ l7 i
  533.   {
    / e7 f1 g/ R4 t( F
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)4 h  l8 k; L- O' _; ?# M
  535.     {3 n& g/ @/ u) `, ]+ c8 R) Z, x  a
  536.       CloseHandle(mutex);$ u* n- Q- E9 ]
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    % N  b$ _9 i' ?- \" d0 `
  538.       return TRUE;
    ' _4 G; {: O1 r4 }1 ]- n* N
  539.     }
    " v5 _2 c# R" Q0 ]0 @1 M
  540.   }  " o- n0 E& p0 `/ ?
  541.   CloseHandle(mutex);
    ) I, h2 s9 b" B, P  a2 I( r" z
  542. + n. a9 s- {# l+ c; p4 P6 b) d
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);8 }5 v) Z; Z/ K; W0 [5 P
  544. $ V* E) Y- U0 x: o
  545.         AfxEnableControlContainer();
      j, x! y1 }+ T+ {5 O; A6 A
  546. ! ]7 o+ p9 n7 ~0 n
  547.   bCanUpdate=FALSE;
    ; y7 `6 x, O! \* @/ h$ p
  548.   dwStartUpSteps=1;
    % X+ J0 T- |. k: w
  549.   dwProgramState=AP_NOTHING;. w+ c  L* t2 n$ v1 N8 i
  550. / D' t# U8 e$ J, K! P
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);5 N$ t4 h& n% I7 F' d  a

  552. & ^) o" L, n' C& p  W& {- g, L0 \
  553.         // Standard initialization
    " F3 V  h2 @1 S' h2 G" w1 J7 c
  554.         // If you are not using these features and wish to reduce the size9 m, T2 ]9 E5 F+ a. U
  555.         //  of your final executable, you should remove from the following
    " ?& d, J) u1 |
  556.         //  the specific initialization routines you do not need.( q8 m4 ?4 ]" J+ i8 C& t* P, e

  557. 0 s" P- R( l, o( q4 s! ?
  558. #ifdef _AFXDLL
    ' P4 b( {) I5 }8 B* r; i
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    # Q3 v/ \+ Z3 t, f- d8 k3 t. h
  560. #else
    : ^4 J- c' X9 S# Q5 D9 h: [9 M. c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    7 X  c3 P6 E& w, K8 s+ _8 u: c+ h
  562. #endif
    - x/ ^- c6 x7 }
  563. / [  b  L% D/ h) r% @
  564.   dlg=new CRevAppDlg;0 ~; Z  O* C; F) f
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    - M9 \- r9 J2 q. f
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ( q: L8 n% P# s. g
  567.   m_pMainWnd=dlg;
    7 q' z1 z5 J* Y# O
  568.   Q. j; _/ [; ~- u2 l
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);" Y# \; K: l5 H3 s4 m

  570. ( x6 [  o' `6 \4 ?# s
  571. //  GdiplusStartupInput gdiplusStartupInput;, Z4 r  T5 t0 }8 p: I+ |& e
  572. //  ULONG_PTR gdiplusToken;+ S9 s- p) x5 o1 y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);! o0 O. G; e& m% n5 R: o8 u) k1 P, V

  574. - V8 Q3 v- n; V; o9 m+ F* y
  575. //        CRevAppDlg dlg;: G% R# M* y: Q
  576. //        int nResponse = dlg.DoModal();6 T5 G% R; S0 r: _
  577. //        if (nResponse == IDOK)7 n& `) z" [; \% Q# W/ I/ ~2 {. f
  578. //        {6 r: j- a1 M9 X, v* B# l
  579. //                // TODO: Place code here to handle when the dialog is
    + ]+ o$ ~0 u6 W! T3 [: c. N
  580. //                //  dismissed with OK% Y; i( N4 |+ E4 D5 \8 h/ P. {7 l# F; q
  581. //        }
    : S" a4 a# l% H0 n
  582. //        else if (nResponse == IDCANCEL)) x- n" D/ p; a# C, i* M2 L1 p
  583. //        {* u, l3 k8 k% d3 O# q9 W) [" l9 f
  584. //                // TODO: Place code here to handle when the dialog is
    6 x1 G9 q' }5 ]8 m* l
  585. //                //  dismissed with Cancel
    ( n) x' v* x1 }$ Z/ ?( Y( J& W
  586. //        }. E) ~0 ~8 F: H5 i2 A9 P

  587. 6 h9 `+ c+ q. I8 t6 d( d
  588.         // Since the dialog has been closed, return FALSE so that we exit the" v6 B6 d4 u& p! Q/ N
  589.         //  application, rather than start the application's message pump.
    # u, v# e5 Y: R1 D5 A
  590.         return TRUE;& B4 Z9 C- e, M: B5 x% c2 J1 i% P
  591. }7 L6 d& B% J+ n- j  d% Z% ?! o& l& y

  592. , b% L+ @, m" q. p/ g! Y& W! Y5 [$ ]
  593. char *CRevAppApp::strtok3(char *pSource,char *token); m7 J" M6 r' A1 H
  594. {
    . }  _6 L' I( h  x
  595.   int i;
    6 ]0 p( y" p8 J9 S: l2 l; ~: ~  T' X  o. X
  596.   char *szRet;
    1 v( \$ P0 I. w
  597. / g6 o" W: Y" T8 M2 X
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    5 Z- |7 P+ G' q. K% W# [
  599.   if(sztoken)) X2 ]2 G) n. w; O7 C6 P! o; L
  600.   {$ X  H6 I' s- c8 D- ?3 \6 s
  601.     szRet=&sztoken[itoken];
    , A; ^/ ~" O( H; }; c6 l
  602.     while(sztoken[itoken])
    + ?7 Q+ [: B  I2 o( C
  603.     {" U! U. P$ \/ t0 h4 v
  604.       for(i=0;i<(int)strlen(token);i++)
    8 a6 f2 X4 D( D: x& _+ f' c
  605.       {
    2 ~/ p3 P% F1 w1 F
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    # _7 Q7 Y" m6 ?0 \( c9 a8 J) i
  607.         {
    + ~" N8 r; V& {' f
  608.           sztoken[itoken++]=0;; K6 ~& ?! O, x7 v! Y: h( P
  609.           sztoken[itoken++]=0;
    0 d' [5 m# J# C5 P6 c8 M' n
  610.           return szRet;; {- c2 m& H6 m( L% S
  611.         }) q3 y* W, R+ ~4 e7 z+ v( ^8 W5 ]
  612.       }5 ?& u( g8 q' x3 \( B* u
  613.       itoken++;/ A3 Z+ E( S6 d' F* y
  614.     }3 C; C4 z- N: W+ ~
  615.   }
    0 |! J) L( g! Q' V/ [% Z# T+ n$ O
  616.   return NULL;% \) s1 H& m/ }
  617. }# y: m' X( ?% [1 Y# @9 V' {

  618. % q4 M, |: q" t* ~" U
  619. void ProcessProc(long Total,long Current)
    # `" r9 D5 l5 J, W# O6 `# Y$ o
  620. {' w- Z' L) A% ^& m4 R4 [2 X& N" V
  621.         MSG msg;# x2 w, L  f7 h9 W5 O
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);: {- m6 E9 E7 |2 L" ~
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 D8 h; V0 H; `) B9 ?0 P
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))0 a; |8 b2 D" O- y' Q8 l
  625.         {
    ! f1 R2 [8 z' U7 R% O+ D: x+ M0 C
  626.                 if(!GetMessage(&msg,NULL,0,0))
    1 k% O9 z' X1 ~7 T4 @0 L
  627.                 {
    ) ^  D2 D+ ?- T7 _) l
  628.                         return;
      B2 R& R; z3 \: X( U0 t- E
  629.                 }
    . w" j3 {$ y7 e, v4 S8 r
  630.                 TranslateMessage(&msg);. W) \, M# k+ Z; }0 A1 ~6 k
  631.                 DispatchMessage(&msg);
    6 G2 T6 X$ k6 N& L
  632.         }       
    6 G' u+ D4 y% y
  633. }$ f% _; }9 Z( U1 ?  i5 V. H
  634. 2 r! o2 L# F. p- |5 ~
  635. BOOL bFirstChar=TRUE;
    $ ]3 h6 l1 l8 _" K8 F) Q
  636. 9 |& I+ a/ B/ {
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    5 B: D: t6 B8 W* n6 f  }8 L& d
  638. {# }/ f5 i) ?! d$ v$ r5 r5 M5 m
  639.         // TODO: Add your specialized code here and/or call the base class
    3 T. u# p( E. j
  640.   switch(dwProgramState)  a2 I, H, ?5 ?% f2 ?, l3 O
  641.   {
    / w2 w8 e5 B! q2 v& v7 E
  642.   case AP_NOTHING:
    2 C+ b+ \9 i2 S  O
  643.     switch(dwStartUpSteps)5 L1 h9 c6 V1 r# G0 @; M- I5 u
  644.     {
    : g% K/ O4 _! g1 A3 P. ]
  645.     case 1:
    1 ^4 _9 Q/ G1 H  A( w; _4 ?
  646.       {
    0 m3 O/ V- J5 A: L& e9 u
  647.         int i;
    1 w$ c8 E6 N# R4 H+ O
  648.         CDC *pCDC=dlg->GetDC();) O: H7 J# G5 w8 ^2 @. l9 _- G
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; }$ x0 U$ [( }6 l
  650. //        Graphics graphics(hdcwnd);
    " x+ v  q+ {) V. Y8 A! N- ?
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");2 y: E7 I& N8 ~  X. V
  652. //        INT iWidth=bitmap.GetWidth();) e" G" X/ g! p( I  E# ~
  653. //        INT iHeight=bitmap.GetHeight();* Q: v2 k3 |0 O8 i5 p' a8 S. G
  654. //        Color color,colorTemp;
    ( R. U' a7 ?' W" z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    8 h3 A: p- N/ L6 q$ `
  656. //        {
    " _) `; ~3 J5 F' b9 o: K) }0 K
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)5 o4 J. X1 I0 d
  658. //          {
    0 h$ `4 J+ u$ l4 E, K, J
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    % ~- J) j7 f, b
  660. //            colorTemp.SetValue(color.MakeARGB(
    % u& T/ v! b2 |5 e  j. H3 a
  661. //              (BYTE)(255*iColumn/iWidth),
    0 g8 r% G! f7 ~
  662. //              color.GetRed(),6 T6 d- [+ d+ j5 `5 g
  663. //              color.GetGreen(),0 n- Z0 O; l5 S( B- c
  664. //              color.GetBlue()));0 e+ y/ m1 D3 P$ c8 C% H
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);3 ]; b! T/ s) J
  666. //          }/ T# r! s/ e# A4 ?7 |
  667. //        }$ H. a4 I1 d( Z; b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);0 [+ Y+ }7 k" G. {0 v
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 N1 e( j' K" ~( J
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 c$ _+ D# L$ T' ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. `0 W; e9 Z* [( D) @
  672.         for(i=0;i<240;i+=8)8 d* b2 ]; V) h8 h& a( Y
  673.         {
    ( R' w, c4 r  f- k
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: u) l0 V4 n: h* Z9 W$ j7 o; a
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 r0 O% [7 w% B. m9 l
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 J. G: z8 l  q& _
  677.           Sleep(33);
    , {0 V' [  t  b; s
  678.         }: u6 w$ s( ^8 r: c
  679.         Sleep(1000);0 V, p, B' @6 L, R
  680.         for(i=240;i>0;i-=8). L0 j/ ?$ {4 m5 g$ m6 S
  681.         {, K+ o9 D9 F% i; v! t2 i
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 u# C8 u5 N4 [$ Y( ]
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / u% n" P, n5 \3 a' F. _0 V, r
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 D  t' w/ l" b  ^+ l- I: z3 J& b
  685.           Sleep(33);+ d* B7 k3 K2 l5 e
  686.         }1 S- R: G6 x8 P- ]2 M# l! Z4 i. {- M
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);% O- o8 R- c9 e( g0 {
  688.         dlg->ReleaseDC(pCDC);. U" R3 _& O  A
  689.         DeleteDC(hdctar);
    ) X: s8 S5 `- c
  690.         DeleteDC(hdcsrc);$ i! e# ]$ Q: K& T* U
  691.         DeleteDC(hdcorg);- ~6 Q" N8 u4 X4 R' W, P& d
  692.       }% q  N( n. Y1 H. i$ z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);! D# [# d$ H. `0 U5 c- r+ R
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");2 Y) ^3 \7 d# n6 e
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    - i" s* j; ^* z* S
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    * w* i+ j: f6 v0 ~4 {9 t
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 m+ T0 z3 z( T; U# }5 d: F% v6 W
  698.       if(!Dn.Connected())" p! M! ?: `% G7 X8 M0 d
  699.       {
    $ F+ W4 X, X1 `6 x/ V! r6 ^( Z
  700.         dwTotalFiles=1;7 ^, r2 ~- N+ R2 ^+ k1 ]
  701.         dwDownLoaded=0;) V4 \  s& h, y
  702.         bSilentStep=TRUE;' O- ]$ Q# O) j: R5 T; Q! Z
  703.         bCompressed=FALSE;8 e  L5 @8 y) o  _# K& j
  704.         strExtLocal.Empty();
    5 K/ X' m# _/ V% q$ U7 k+ M# e
  705.         strFullName="readme.txt";
    , `7 c, `- p8 O0 e) O" ^
  706.         dwProgramState=AP_CONNECT;
    & ^$ D$ n; {3 T% L
  707.       }
    : {- x. z* {8 p+ H8 U( e+ r
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 N% y; D1 |4 D2 ]* U; p* f5 B; C
  709.       dwStartUpSteps=2;
    ! A+ j8 i; D) k, y+ [/ h$ i9 x
  710.       break;) v, X# r6 T' e8 r7 V0 f
  711.     case 2:6 U7 W/ i& n" }
  712.       {
    . i  I4 A& v" _4 G0 R3 j
  713.         int iEOF;
    ) i7 k3 @- g4 w  f3 o# Y- O! x+ w
  714.         FILE *fp;
    9 e, p6 }2 i; J3 E, x
  715.         char szString[512];
    4 r, P) D( g6 l5 Y1 h3 L
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    2 p$ `8 |; r) v2 r# d9 M# j
  717.         if(fp)  A6 ~1 i! Z+ X! Q; V% O, Y5 k
  718.         {* R; t, l6 a+ y1 X! I5 z- s) _
  719.           do
      k" r6 X- Y6 f9 u' `
  720.           {
    + Q5 Z* C1 P: U) }
  721.             iEOF=fscanf(fp,"%s",szString);
    0 k0 z: T0 B6 W8 U
  722.             if(strlen(szString))
    4 M) T4 b0 ^$ h# c
  723.             {% N7 S9 i1 a) U) B, ]. n8 U) _4 F
  724.               if(bFirstChar)
    5 S. Y4 O; N; A/ o4 R
  725.               {
    0 G, @6 I. g7 Z2 T4 m
  726.                 bFirstChar=FALSE;( C5 r' |5 v' \2 w* c2 K5 p
  727.                 bConnectIsBig5=FALSE;7 Z' S' P) O% b6 J- P" g
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;4 D# h# J/ u( S( a5 X6 _: G
  729.               }
    % r& S$ E7 A( k" Y  a7 l  F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    & y9 K5 j( D3 y7 M& [3 D; P- b
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));7 p* Z# o8 F4 p  g/ R& e3 L
  732.               dlg->m_ListText.AddString(szString);
    2 E( R. c8 |  d3 O1 n* C1 u5 B3 W# ]
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 Y% V. u2 J) o7 R
  734.               *szString=0;# }5 v" X! _$ \% [) u
  735.             }
    9 S# Y9 z. m, p, Z
  736.           } while(iEOF!=EOF);
    ' a5 @- t$ V8 V9 b4 T
  737.           fclose(fp);; h0 C; Z& q$ _- Q
  738.           unlink(".\\DownLoad\\readme.txt");
    8 X- G  K& |. I: w
  739.           dwStartUpSteps=3;3 C9 y& z: G+ T( ~, K, `* u
  740.         }* q. }0 M6 j! r: E, D
  741.       }
    ( c$ C3 b$ q- z/ |$ i% M% l
  742.       break;9 a; Q, c6 N3 n# H) r
  743.     case 3:5 ^2 t( j" e: K9 r8 F/ q
  744.       if(!Dn.Connected())
    , V2 r: p$ D4 x" v+ A2 B
  745.       {% y0 \  m8 s- b: A& D- f
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    2 b8 r3 J% k& r5 W& e
  747.         dwTotalFiles=1;- R' J% Q& Q! ]# i3 J6 G7 S1 B; i
  748.         dwDownLoaded=0;
    3 H2 |3 W) }4 \$ H( h
  749.         bSilentStep=TRUE;
    # @( t" n2 E- x/ a- }: f) H8 G
  750.         bCompressed=FALSE;0 z) c7 l- N! N& ~% ]. p
  751.         strExtLocal.Empty();2 V, d1 \- u6 R; L3 y  ]: I8 W
  752.         strFullName="checkversion.txt";, ~0 F, Q1 d1 g! E: a: I
  753.         dwProgramState=AP_CONNECT;) V" R0 A% P1 Q) J4 ], ]' Z
  754.       }* L, U9 [7 q4 ]6 R
  755.       dwStartUpSteps=4;2 W: C; N+ ^0 A+ I
  756.       break;. j/ l7 P9 o  Y; x" H5 w0 H: [+ U* ^
  757.     case 4:
    2 U% ?( Q4 N3 I4 H: X
  758.       {
    . U: ~& A- B4 N$ B
  759.         FILE *fp;: T! B/ Z9 S8 c% y. d7 _& X6 ~+ ~' [
  760.         char szString1[128];
    8 [7 f  `& ?, Y% ]
  761.         char szString2[128];( X: Z1 X/ H% B0 a+ ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");, R7 g- _% [2 g
  763.         if(fp)
    # h/ G2 w' l! @5 \  k
  764.         {! R$ ~6 j, W0 o: \% v
  765.           fscanf(fp,"%s",szString1);6 p6 r+ E" g) R% u- d' V
  766.           fclose(fp);9 R6 k  B+ Q' D0 a8 |0 R( b' p
  767.           fCheckVersion=atof(szString1);# v- y" V5 X! o* `! P
  768.           fp=fopen(".\\checkversion.dat","r");' h: m0 [$ P1 `& T2 s
  769.           if(fp)
    " T2 s" p, Y$ w" l2 c
  770.           {
    ' v# W: W6 u# B2 U; L2 X
  771.             fscanf(fp,"%s",szString2);! @3 |% j' e. Y2 k* M  |7 v
  772.             fclose(fp);# H6 q, J) c# u
  773.             if(atof(szString1)!=atof(szString2))/ j: R9 J: O0 f$ w4 G. a$ Q7 ?9 a
  774.             {
    7 D  G+ S1 }: \5 _' J' t  u* I% E
  775.               if(!Dn.Connected())
    # S  V) S8 Z, i0 Q: J4 p; `
  776.               {
    ' F5 f9 u1 f( Z8 u) P
  777.                 bFirstUpdate=TRUE;2 a2 F# W  e, L" o, W
  778.                 dwTotalFiles=1;
    0 X& O# H( q. A$ W
  779.                 dwDownLoaded=0;
    6 q) t. A/ S  m1 X3 l
  780.                 bSilentStep=FALSE;1 K3 D- b) g5 |  D4 ]
  781.                 bCompressed=TRUE;$ T( j! i4 n$ t( M
  782.                 strExtLocal=".\\DownLoad\";
    6 y+ k2 Q) `: c  [* R1 s9 v/ S
  783.                 strFullName="update.txt";0 S8 x6 a) K/ f. ~
  784.                 dwProgramState=AP_CONNECT;
    + f" o7 R) d, U5 J+ W8 W) h! X
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 t( G8 @9 I" n! O
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - |2 R3 E: \. V
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - K( |, y/ [$ T( P" b, s1 Q0 N4 [

  788. 0 |& n9 {4 e: }6 h
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 U+ N( u. l+ M
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ }- {. d4 S; i3 L8 C8 b
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    3 c4 q- c+ p% I0 s' W' Y9 d
  792.                 {
    2 b2 l  G; \1 @* x8 |. G
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    0 C: {) |2 O3 K& G' D, a
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");4 m! l& f  |$ \. g& c
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ) G4 E; o3 T+ l1 q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % R* Y& \5 q7 M6 F
  797. " k3 _) C8 g" d
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. f( A' q3 Y4 i! E& z5 ^
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 R- j5 G& H' L$ q
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    , w1 R# E+ V0 g! G% u% ^1 k( {% a( ]
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / W3 N: |9 S/ i. w
  802.                 }
    ( F0 Q: b3 L7 x" f5 W! d
  803.                 dwStartUpSteps=5;
    5 L. K& e4 L: |3 h7 b/ N0 E
  804.               }0 P4 q1 B% r$ g" x+ G! X# n
  805.             }
    # v# O: f6 ]( {
  806.             else
    ) F/ d' M& o9 X5 s* F0 _; K
  807.             {, B6 G3 ~: p6 F* a: h+ s+ v+ z2 i& V
  808.               unlink(".\\DownLoad\\checkversion.txt");
    6 E" @2 V( W4 E9 Z
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    0 L$ V+ A5 E; i: K4 r: I4 i
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + H& j5 M/ m, ^
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");2 Q2 C) G5 j8 l% K) v

  812. 9 N" H: M* b+ f5 c& |2 o8 |
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' l8 [. v, u; W8 h. G  F( [! L; \
  814.               dwStartUpSteps=99;8 P+ D. d, X% F/ m
  815.               bFinishUpdated=TRUE;0 D8 L5 I# \8 c
  816.               bCanUpdate=TRUE;4 E, u, a8 j$ |3 Z3 b" w5 {$ j* F
  817.             }3 i3 _  P# A. \! q+ C4 M5 p: Z3 u
  818.           }
    $ t/ ?6 p1 U- _
  819.           else
    ) K  L9 d: i/ W3 L4 J6 ~4 s
  820.           {- e8 K/ |% ~3 r' _, W' r
  821.             if(!Dn.Connected())! U" d+ K. s8 }
  822.             {
    " y0 y& `, y: X" t
  823.               bFirstUpdate=TRUE;
    : I  J7 h, m# ]7 C/ w5 T" H% y
  824.               dwTotalFiles=1;
    , K& O! R, b6 {' I7 Z
  825.               dwDownLoaded=0;
    6 P* l9 Q% i( k% ]4 l9 f
  826.               bSilentStep=FALSE;0 }; G2 P9 z7 {0 {5 e) T- O3 i
  827.               bCompressed=TRUE;3 L) b) k% I1 t" ]" t
  828.               strExtLocal=".\\DownLoad\";
    % Q# S2 v+ U, o' ]) Y' w
  829.               strFullName="update.txt";0 A1 n. g4 b! l, p8 r
  830.               dwProgramState=AP_CONNECT;! X% q/ i5 H3 W0 ]3 F& _5 N" q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . J: r' x& C1 J0 Y) |( t9 Y! p# ?
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 w3 K7 D5 _' x; G! Q- g
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");2 t5 E3 a9 s% |
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / j+ W% N& z) m" c
  835.               unlink(".\\DownLoad\\checkversion.txt");: V( H$ M9 G& P- k
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    0 {8 ?  d) W1 M! `9 G
  837.               {2 [+ K- c6 m. D) F& J* Z
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    3 a/ i, q! P0 `9 c
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    1 {) ~# K; k& }) L3 \% |2 s2 E/ z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    * I1 K1 r6 u' P
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! h8 H* m1 w/ g& [% _# }( j
  842.                
    ' W: p5 ]! F* T! r
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ h0 e% {  `/ a7 f) U
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & }5 `+ ]* s+ x% G, n
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    # _7 d* D* ]5 k7 T. o  A2 L
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 j9 d, T+ }& @8 V  h7 ?4 @* ^
  847.               }# d. j" c# d1 W; `
  848.               dwStartUpSteps=5;
    6 k! _5 p6 j; N
  849.             }
    % V) s7 [' v- L. V# a
  850.           }
    + U; r, p4 a* N
  851.         }; C* g7 }! H+ }, R- A
  852.         else* e4 G* l) q! |% T
  853.         {
    + r/ [! `  J8 o6 z- `4 \. ?
  854.           dwStartUpSteps=3;% ~/ q, k9 N6 v4 m1 n. A/ x
  855.         }3 C7 E( e/ {/ h0 G/ L. k
  856.       }5 E, B% w% v) b# z# {: Z: U5 H$ k2 \
  857.       break;
    + d. `6 ^2 }3 [& B+ U# M  B
  858.     case 5:7 K# U( I: W/ f" \1 [+ P
  859.       {
    * C6 u! z$ v% A: w" T' D. @3 Z
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); q6 N7 I# a( k! T1 _- ]5 M; A
  861.         {
    / l9 K/ K. U- x/ H6 V! P; W& P
  862.           int opt_overwrite=1;" a9 A* p# F" i- G
  863.           int opt_do_extract_withoutpath=0;
    0 F8 |) H$ F% P7 T6 i
  864.           unzFile uf=NULL;
    . |' O! M4 g1 |. R; \* a+ ~

  865. 0 K& f; J$ |* {3 _! T
  866.           uf=unzOpen("Wsa.zip");
    4 A$ m; ?1 o- [# `
  867.           if(uf): ~: w/ Y( _6 d: L& d- X
  868.           {* a2 M: r5 |) f; u
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 ]6 z( I3 U$ U! L3 B, B+ h
  870.             unzClose(uf);1 l& R7 W* m8 f7 I  R" k6 S
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ; U3 M- x! Q- R! Z- M7 @8 g- P1 K
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    : y  Q& ~6 |( I7 E2 Y1 ~
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");. a) T, c' @6 e) y) X1 m8 ~
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 J4 S' |, {1 }9 r6 \
  875.           }
    3 u, r6 `% f" @1 _
  876.           DeleteFile("Wsa.zip" );
    . Y0 f7 U2 p9 A
  877.         }  n  r4 Q% H) a
  878. 8 _# v$ t) \0 [8 C2 B/ q+ d1 c
  879.         if(CheckLocalVersion())/ B& g  |. y2 ^
  880.         {
    . [$ D+ g7 }, c/ m1 I- I, A
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ) J0 e6 U9 B' R! U+ I2 ?0 j
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    2 ?# d, d; N* D. x" o) y! H" t
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");5 k1 i/ [( G$ y3 b4 E3 i
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 s8 Y$ K' T" `, V7 Q, s8 L
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);, q# Y" X. c. k
  886.           dwStartUpSteps=99;4 |  I3 ^- a  n) r! E+ y; S
  887.         }
    . ^2 ?) [* F, u# d2 C
  888.         else
      j% P5 i- p1 Y/ T- F9 ?) l# J! ?
  889.         {, V/ |- J. {; I% b& Q7 y. Y9 ]' u8 q- J3 k
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 N& b: w8 k# ]. b( I" C
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
      v( z/ d' S, X" a9 j
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");' A. C* t: ^9 L) U9 r8 v$ _) j

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

* n2 y, H( u9 ~0 H+ L

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-10 07:31

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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