CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
$ B5 E) `+ N  y1 r+ f% o; S' k
  1. / RevApp.cpp : Defines the class behaviors for the application.5 o; Z# _- s/ z- d! R+ C! S
  2. //
    , `+ D% y4 \3 n" `( s2 s

  3. 4 D0 T3 c6 w0 J8 k" h6 k) X  x
  4. #include "stdafx.h"$ i0 i$ a" C( z5 W* p, C5 g
  5. / Y) T% c/ I1 h& a
  6. //#define UNICODE
    ; Z! C2 I% `/ J7 x
  7. //#include <gdiplus.h>0 B7 ]6 |0 z! F3 N" {, s$ u
  8. //using namespace Gdiplus;
    9 S. h! d. G- {( I

  9. - p5 d$ D, D1 z/ l
  10. #include "RevApp.h"
    " y7 l6 Y5 p2 }1 R) u7 O2 V0 J
  11. #include "RevAppDlg.h": V6 k! z( B$ V3 T: g
  12. 7 `/ `2 Y5 x3 `/ l
  13. #pragma warning(disable:4786)1 m0 D) S: {5 Y* u5 F1 B) S* @
  14. #include <map>
    # \3 ]+ g# O* Q+ y; @: _/ M- H
  15. #include <list>
    # s4 r/ v5 m: f
  16. #include <direct.h>9 r! E" X, p6 x! p2 u( E0 S
  17. % }  u0 A( {+ z8 i7 M
  18. #ifdef _DEBUG
    9 u& \. [7 o& Z* \7 {& \2 x- w
  19. #define new DEBUG_NEW) r. a* a6 G- Y  ?, m
  20. #undef THIS_FILE
    & n/ b" t! f4 p$ g2 N5 i% z# P% @+ e
  21. static char THIS_FILE[] = __FILE__;' v# O0 C+ x. W: i% \) K
  22. #endif. z* M2 h& s# O7 n8 M! }
  23. #include "SkinResDef.h"
    $ ^2 T5 k' o4 K$ t1 z6 O
  24. #include "ChangeBG.h"
    ) K. Q9 S5 V$ ?8 A
  25. #include "AFXINET.H"
    3 J" z, _, u" o$ z/ a# s  z

  26. ( c! N+ ?% ?/ ^3 Y4 g
  27. #define TRADITIONAL_CHINESE 0
    % M* |, c( c5 o1 }4 U& y
  28. #define SIMPLIFY_CHINESE 1
    . V0 M! f1 x& {# P4 m; s
  29. #define ENGLISH 2, i2 a! D8 A) I( |; y/ v
  30. int m_iLanguage = ENGLISH;1 _7 X0 H0 b2 @7 O& C
  31. /////////////////////////////////////////////////////////////////////////////
    % k; k6 V& Z, I- f  k2 K/ U
  32. // CRevAppApp
    1 s, ^3 F6 ^  v+ V  R; k

  33. + A$ I; z& A6 x3 m
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)0 @! P+ |  E+ V3 G. W3 D/ B( I, O
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    9 ^; b% s6 V  {" A) P4 N
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 l2 _( I: Y2 F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    " y& ~, e/ U9 q2 X; J  v
  38.         //}}AFX_MSG% w& G: ?& o2 Z+ R
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp); c, X, B! n3 k; V$ @
  40. END_MESSAGE_MAP()* y& F; B/ Q2 Q: J) t6 {, E

  41. 0 |8 A' J' @% x  [& ^+ h( y
  42. /////////////////////////////////////////////////////////////////////////////
    ! `; }5 [' ?7 W- ^
  43. // CRevAppApp construction
    9 {3 j) z7 E8 s. t: W
  44. * }. ^' K2 S: x) R6 Y: [6 m% u7 b
  45. CRevAppApp::CRevAppApp()
    ; z6 t! }" A# O% j
  46. {2 W, v/ e+ B& ^% b# V
  47.         // TODO: add construction code here,
    + c9 D$ J3 u/ J) @/ l+ e
  48.         // Place all significant initialization in InitInstance) Q" ?$ K" z  X( `6 ]8 ^
  49.   bDisplayIsBig5=FALSE;6 L' q* d/ o1 n! c
  50.   bRestartUpdater=FALSE;
      N, M; X; {. k, P
  51.   bFinishUpdated=FALSE;
    ! P7 W9 b% k1 @8 a9 c# _
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;/ i1 N/ G) [; T2 @
  53.   InitChangeDataBig52GBKS();
      a. g) p/ S; {9 O* c5 z
  54.   InitChangeDataGBKS2Big5();3 X0 z; e2 {' }$ S5 p8 L( n
  55.         //) U& e2 m% h. ]# d8 v
  56.         bClickRunExe = FALSE;
    8 U! `/ A! w0 C) W1 v
  57.         //
      m3 g. [, d7 e  {7 }
  58. }
    8 F3 o% Y' S% @# r

  59. # `# i1 P4 f4 F) {: a
  60. CRevAppApp::~CRevAppApp()
    2 B6 J; B. a; G" r: A7 v( h0 ?; Z3 \
  61. {
    - s* |, m% o7 O) ^  m
  62.         // TODO: add construction code here,
    & C9 V0 v) @( {4 W- c
  63.         // Place all significant initialization in InitInstance' m8 C8 R  f( v% }% C
  64.   EndChangeData();) T) N  X( @7 M9 z8 R: W; D9 S
  65. }
    5 D$ ]$ y' h) B( N0 U8 K

  66. ( L# t7 S& m1 {; F9 f- q. k. o$ ^
  67. /////////////////////////////////////////////////////////////////////////////6 l4 W4 W% J" m6 Q3 \& p5 ~% e
  68. // The one and only CRevAppApp object/ S1 d( z" G# t4 a4 q' H4 k
  69. ' d* v$ p- ?8 t( [9 v4 _1 `
  70. CRevAppApp theApp;) c+ `' {# F/ Y
  71. , P$ A/ }+ [7 O! T8 K% k' l. r1 j
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName): R* Z4 [0 @+ {6 [3 f
  73. {
    - b# m, w" Q( J, y
  74.   int iEOF=0;2 k9 `, C+ k; q- ?9 S: E
  75.   char szTempName[MAX_PATH];5 p7 q  D7 M( ?6 I
  76.   *szFileName=0;4 `# k4 T' M6 q+ Y1 O5 L3 _
  77.   iEOF=fscanf(fp,"%s",szTempName);8 q4 {% W, U. o( \4 O3 a4 C& C* @
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')1 k( q  `3 C$ D, \+ ?, l
  79.   {
    ) H) h! s* u# q
  80.     strcpy(szFileName,&szTempName[1]);9 L3 y+ n" \9 a- T+ e, G0 X
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ) a/ \$ R* k7 M* i9 g5 y: P5 V% K
  82.     {: V) V$ [) j9 d6 l/ E, O) E0 X
  83.       iEOF=fscanf(fp,"%s",szTempName);
    1 C+ w* X  y' y# g* n" H) M* B& d
  84.       strcat(szFileName," ");: q& p# }% M) y1 y1 M
  85.       strcat(szFileName,szTempName);, t& `5 a6 p! H* S
  86.     }' b5 q' s' a# Q/ r: L+ o5 I
  87.     if(strlen(szFileName)>=1)9 J, E. \; f" z2 b3 `, Q
  88.     {# q/ Y! W' l: f! {/ q7 W2 N
  89.       szFileName[strlen(szFileName)-1]=0;! g' h5 }4 q& p( s# ^4 F) E
  90.     }6 W2 N4 t+ a# D6 Q0 u
  91.   }
    + j3 O7 g. b* b3 z  z) h
  92.   return szFileName;" v( a* b) l% t# J( A
  93. }
    ; x. ^4 q/ s4 j6 ?4 U: y* v
  94. 8 O4 M# Q+ {0 m( J" U: ^8 @
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)! w3 a) k3 `. N: X( Z
  96. {7 P1 ?  K. i5 O# d9 `7 ]
  97.   FILE *fp;
      m; w! K/ e% ^8 k2 K
  98.   char *key=NULL;
    % W+ Y# `9 U* _7 C7 {
  99.   char version[MAX_PATH];9 [, d' Q+ X! V% m* H7 t
  100.   LPUPDATEFILE file,olds;3 ]1 b2 E8 p% _$ F
  101.   std::map<CString,LPUPDATEFILE>::iterator p;4 _/ y7 j* \) ^! T5 u
  102. % ~+ u7 |  K# q8 b
  103.   UpdateList.clear();
    9 D1 H* J  i) m) O/ s7 j
  104.   UpdateFile.clear();
    $ M4 k$ A7 }) o3 \( |+ ?( ^$ l
  105.   if(GetFileAttributes(filename)==-1) return false;$ t3 \) ?4 N  [+ A) M
  106.   if(!(fp=fopen(filename,"r"))) return false;3 q4 Y3 {/ J( \1 C: J- u
  107.   fscanf(fp,"%s",version);0 ?3 ]# c* Z% k. n3 f8 @
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }7 B4 l" P5 s* O/ T( f0 I- k4 K# y
  109.   while(fscanf(fp,"%s",version)!=EOF)' I! @1 B5 i( h1 c  {, F5 C* {
  110.   {5 L, Y. M: w1 `+ X3 w$ ^
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  u' I, `7 i# l7 F5 T9 T* G' l
  112.     fscanf(fp,"%s",file->path);8 [- K( }: L# O
  113.     ReadFileNames(fp,file->file);0 A+ A. S, `! n6 c# `4 R3 z1 a) |
  114.     strcpy(file->full,".");
    $ z1 k+ _9 G% v7 q
  115.     strcat(file->full,file->path);$ T% e7 y4 W! }2 W+ d
  116.     strcat(file->full,file->file);
    2 p( ^% I4 c! R# D
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    2 U( E5 h5 F' I3 L; d' i
  118.     {
    ( M9 b# y* F) H# E- C6 Y. F
  119.       file->vers=(float)atof(version);* E" l( C8 g, I
  120.       UpdateList.push_back(file->full);: `% N- |, t( ^. N
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    $ x( I. E* Y1 C. K1 Z3 h0 J& Z' K
  122.     }- P( k) s; e' Y' D9 O' V/ y
  123.     else
      k4 D" o) Y: W
  124.     {3 T6 L9 ]3 c$ T. \/ m; b9 ]1 Q
  125.       olds=(*p).second;
    * W) |) k+ N- ^3 d, L9 U
  126.       if(olds->vers<(float)atof(version))
    : h1 b1 Y) t, s8 K( G
  127.       {
    " h7 L$ m! X- ?9 O' a" p
  128.         olds->vers=(float)atof(version);1 B0 Z. l- Z* @2 L$ h+ I
  129.       }- I0 ^1 Y4 d6 n* H+ F7 @7 H
  130.       free(file);1 Y, d& N# m2 L! |  }
  131.     }
    ' t* n" H2 r8 g
  132.   }
    " Y5 f- r) P9 K- G# _0 h0 o# f9 v% y7 L
  133.   fclose(fp);0 Z: a7 {9 k2 ~5 J1 y7 ?
  134.   return true;5 h' ^3 e7 S7 h
  135. }: \, T% g1 ^9 U# j6 x/ S$ C
  136. ; Y0 }/ j, K! d0 z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    - R# w. \2 o% h$ c) D
  138. {
    % S9 O6 L6 E! U+ F- v+ ^/ S
  139.   TCHAR  szFull[MAX_PATH];- i1 _. V0 \2 s% f- O9 `: m
  140.   TCHAR *token,*inter;: Y' q8 f9 h, F( N& a
  141.   *szPath=0;, b6 f" g6 }6 j9 c9 U
  142.   strcpy(szFull,szFullPath);' W- l( A% H% E, U2 U  U. j8 ?" D( W
  143.   token=strtok(szFull,"\\/");- K4 |3 [, [1 E, W; I. W2 O
  144.   inter=token;. _: {9 I3 b1 l4 n0 P$ t' u! Q
  145.   while(token=strtok(NULL,"\\/"))) K" z6 A: W/ ~* v
  146.   {
    , l0 O0 n! v6 }/ X1 H
  147.     strcat(szPath,inter);4 E& P) u+ Q! ^+ y) L3 {7 R) E
  148.     strcat(szPath,"\");
    - I0 k3 S$ A; A
  149.     inter=token;
    1 l$ ?5 P! {. X9 a
  150.   }, D9 T1 d/ e: B) h5 m0 `( w+ c1 s
  151.   return strlen(szPath);! y; a+ o! [) R0 }2 I+ D  b! }" K
  152. }
    * Z7 U/ E$ m7 p+ |" U
  153. / u3 N$ c7 v8 U* u1 E
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)1 W$ e4 K2 k7 X9 Z0 o% c+ F
  155. {' q# w9 L6 R3 q3 z) ^* `1 B
  156.   DWORD attrib=GetFileAttributes(Target);' s3 V& c$ t: v+ \
  157.   if(attrib!=-1)" i* }' _9 [/ M$ x: V0 ]
  158.   {$ L! z. s( ]4 G6 u1 P
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    7 K& p% ~, S1 {; k1 L
  160.     {
    2 i% |0 t5 z* \. @+ c, [
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) x5 l+ y2 W6 f; n+ R* G% ?$ N
  162.       SetFileAttributes(Target,attrib);  P4 G+ A# T8 G& Y8 I& l
  163.     }
    % u/ m: q2 N% V( j7 y! f  @
  164.   }, Y0 v" @' V( Z) q+ Q" r/ ?
  165.   CopyFile(Source,Target,Erase);
    + k) R/ Z3 L+ m- R4 M* C
  166. }7 ~1 U: T  i4 H
  167. 3 n% f: J8 t5 N
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)3 n: L  ?) D  ]# z- `: x
  169. {  @* S) D5 D3 h
  170.      FILE *fp;  Y0 }4 u) f6 z& B
  171.      char  szBuffer[8192];
    + ~: E8 n  ?# X
  172.   va_list  argptr;
    ) K/ T) z1 ]% k

  173. 8 f( |+ n. b0 {; S' k) f
  174.         va_start(argptr,message);
    + l* _4 r" d3 K# B- f
  175.         vsprintf(szBuffer,message,argptr);
    ) K6 x& r* H  D; Z, O
  176.         va_end(argptr);5 S( Q1 o% Z+ K. o# g
  177.   fp=fopen(FileName,"a");
    & Y% y) J# w7 t; N; e1 w
  178.   if(fp)$ I6 |% d% c! K. w" {( W
  179.   {5 l7 S3 T$ F! J
  180.     fprintf(fp,szBuffer);
    / C" T4 m2 n1 f# c3 `- k4 W3 U- n
  181.     fclose(fp);0 Q% H% {, B/ T6 l
  182.           _flushall();4 x# [+ Q7 f( q0 ]2 S
  183.   }
    ! Z! b; [! ~1 e9 r
  184. }
    1 J; j. G9 p: Z; K# E
  185. 9 U% X; n7 O( _$ U8 d
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ) @3 r1 x) A5 a; c: l. M. V
  187. {% t# D1 O/ Y) Q8 l, G
  188.      FILE *fp;. q8 g( p) J2 ]
  189.     DWORD  attrib;
    , A* W0 w; G2 ~; T0 P" Y) k
  190.   attrib=GetFileAttributes(FileName);1 Q6 g6 i7 \  s" u" L
  191.   if(attrib!=-1)
    4 j  p: S. o- {4 T. y/ O/ ?8 B
  192.   {  A/ w0 o* q" G, @' k2 {
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);. k! m9 d+ W: ^1 [/ g
  194.     if(!SetFileAttributes(FileName,attrib))3 F: ?' S; z( [4 j$ G$ d6 b
  195.     {6 I& a6 j! x- A1 P" m
  196.       return FALSE;
    + t' U) f5 V' z6 q& `" J4 _
  197.     }
    3 }6 w- m4 @- {4 g
  198.   }2 ^2 n. k1 _+ w
  199.   fp=fopen(FileName,"wb");" C4 S/ ^# n& t  W' q: Q( K
  200.   if(fp)
    " z6 z# Y7 [( z: h+ e6 b  [
  201.   {) C. ^0 Z6 y6 E1 N
  202.     fclose(fp);3 Y) p( `8 j* K- X5 D2 E( Y
  203.   }$ S& P, k6 p% w
  204.   return TRUE;0 R+ T1 o6 M  \3 }/ C
  205. }/ O, ^  M' V$ ^2 z% o; |
  206. 4 z: E3 |7 f/ M* k7 [
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 q" e% X6 U% Z1 k+ Y  e$ Z
  208. {
    + I( ]: |; f  @8 `; S) _
  209.   char filename[MAX_PATH];+ c$ X: q2 S1 `) D0 J
  210.   LPUPDATEFILE file,olds;
    $ _+ ^# y; S+ \) k8 M. v6 @" S
  211.   std::map<int,CString>::iterator i;
    9 N5 U$ R7 x( O+ W$ Z0 {! C  f
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 U) q2 f2 f* I+ ^# I( ^9 H
  213.   std::list<CString>::iterator l;( h% o+ a6 S% D/ M2 A
  214. 9 w) m5 N8 j5 i% i: }0 v6 f0 y
  215.   if(bFirstUpdate)( a7 ?  A# q$ u2 j$ G7 H
  216.   {
    7 r: B- L+ g9 q. c8 e
  217.     dwCurrFile=0;$ I* r3 H( M1 A) l- Z1 R; I  ~+ s
  218.     bFirstUpdate=FALSE;
    , r( B9 t1 G9 L% {+ |
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : H' b# c0 @) \% d) i. R: p; {( s
  220.     {( d7 I' u" O2 O6 ~8 Y. Q6 n
  221.       dwTotalFiles=UpdateLocal.size();, O3 w. C; n. }
  222.       dwDownLoaded=0;- G( ?/ R4 @4 }+ _1 v& |; {
  223.       bSilentStep=FALSE;
    9 R1 t$ Q& h0 j$ E* V& O
  224.       bCompressed=TRUE;
    2 O0 ~- ~- C4 a( n4 h
  225.       strExtLocal.Empty();* {; L" E5 N' D1 U1 X/ g
  226.       strFullName=(*i).second;
    & T0 c# a# X' N9 b- o/ y+ ]
  227.       dwProgramState=AP_CONNECT;
    $ `: P3 q5 [/ C+ ]
  228.       return TRUE;. b1 ]: Y0 L( [$ H% R5 @$ m; O
  229.     }
    4 i8 m; A2 W7 R5 g: [5 a
  230.   }
    ! v- l' C/ X: d; y4 z
  231.   else if(bRestartUpdater==FALSE)
    ; Y. I- V% |4 j8 ]! D& {/ j4 p" H
  232.   {! z* d, \6 S+ N0 r
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    + Q1 e' X( K6 c% B+ F& R  ^
  234.     {) f# I) F# N: p# ]  L% x+ e
  235.       file=(*p).second;9 _& C4 I5 v* G% @. O; _
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ; y% X( I/ R3 U) M) y3 I) B" q6 P
  237.       {' S8 O& C1 N# z- e: x
  238.         olds=(*p).second;. V9 c9 N" \7 d3 u6 w
  239.         olds->vers=file->vers;, h  ^7 r$ V( p
  240.       }
    : ~9 _, \4 V0 ~' C) B
  241.       else
    8 K* S; F' L9 @( S# z8 B2 h
  242.       {
    9 }$ T+ [! N8 {! |
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / \" f1 O# w: {8 X+ u$ {
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    4 h3 j1 ^3 a, J- q4 O1 y4 K3 H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));1 l! g8 R$ U, h! d6 @0 ]
  246.       }
    4 N2 H. O5 S- C  J6 U. E) i
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    , A& q8 S! V+ r$ Q8 M! ], t$ R
  248.       sprintf(filename,"(%s)",file->file);5 M9 c& v6 d. Y% `
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 M6 x0 m6 C- Q6 D& p+ |6 H2 y+ m
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 L8 s/ Y! a$ I  o6 y
  251.     }+ m. @2 s/ V* t6 [. [" h
  252.     dwCurrFile++;
    9 D5 M! Y4 b8 @( o; o, [  J' X
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - C4 |, i( m" s# u1 n( j
  254.     {
    + K: Q5 H  {+ r( n0 ?0 S! e0 m3 k
  255.       bSilentStep=FALSE;
    2 D6 U$ k- A- z
  256.       bCompressed=TRUE;6 g; o9 {! e( n7 ]
  257.       strExtLocal.Empty();/ e+ C# b, H+ G# x; U1 v/ r
  258.       strFullName=(*i).second;
    5 g  ~+ U1 V" C  |* a: `3 P
  259.       dwProgramState=AP_CONNECT;# _1 A; q) n+ v, D1 `
  260.       return TRUE;
    * Y* _* o$ c6 D
  261.     }
    4 W. ~! n$ ^' j: R! C
  262.     if(!bRestartUpdater)9 |$ Z9 s  V% w/ Q9 c9 G, t
  263.     {
    ( E1 M) I/ P7 |
  264.       int iCurrSize,iFileSize;
    3 ]) P0 y  b# C! E3 e
  265.       iCurrSize=0;, U4 J# N, Z& n7 W+ O& T+ X2 p' J3 C; d
  266.       iFileSize=UpdateList2.size();
    ) N# }* [% S/ E$ q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");# |, u2 \# U5 E" x/ B
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    , m( O, F( l* a5 @) }/ Z) M# V
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");0 R; U  D! X4 Z6 p: g% ]/ k; v
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 \# I% X$ a( h' i% V
  271.       Fclearf(".\\update.dat");
    / ?; x/ Z  @& ~+ ?: i( h
  272.       Fprintf(".\\update.dat","Bloodyf\n");( Q' H! E4 o$ f4 n% x. a
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + v" `' ~: w7 B: V
  274.       {# I0 b3 \3 {+ j7 z# [/ Y& i
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())# h' `$ i& o) \8 P! `
  276.         {4 w& e. J9 g% T6 j8 L$ W# c( i4 S/ _' H" U. A
  277.           file=(*p).second;
    & n9 Q5 i5 Y( N0 X  I/ b+ |+ c
  278.           sprintf(filename,"(%s)",file->file);
    ! E& O7 W# c. K" h) U8 q0 l
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 {/ I+ D# W* J+ V% w0 [" @2 H
  280.           iCurrSize++;
    / [% r1 X$ j/ O: c
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));0 S( J2 m$ U$ q& [
  282.         }3 `1 K) ^; y/ V8 K
  283.       }1 s2 C' b9 g3 Z5 T7 Y2 T- N; K1 x6 Q- D; j
  284.       unlink(".\\update.txt");% ^! B+ C  O7 M  O) z8 L% x
  285.       unlink(".\\update.tmp");/ Y0 e. V% B+ ]
  286.       Fclearf(".\\checkversion.dat");. I" T6 z# l6 H$ O2 f+ O. z% p
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ) u% M9 y0 f2 ^2 Z$ o
  288.       if(UpdateLocal.size())) U4 z# ^" X6 u; Q4 l' i% q  q; P
  289.       {
      \* @# R# e, d2 y. S+ S6 z! E6 N
  290.         UpdateLocal.clear();
    9 X: A) v. C. K6 i! M2 C* v1 }
  291.       }1 f( K7 ^* q' \
  292.       if(UpdateFile3.size()): I. U# M: n% [/ u  X4 e) e5 ?
  293.       {
    & ]1 q& S8 M) Q% Q; q4 D) k
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! t# d5 p/ ]% S" y
  295.         {( E0 ], j: H4 w  b
  296.           file=(*p).second;
    8 {8 S# ], x* y- f
  297.           free(file);
    & ~9 `) E, x5 j& M; @
  298.         }
    / }% T" D: U& ]6 r* d( K2 A) \7 h; |
  299.         UpdateFile3.clear();
    % v( |4 h& ]2 O' |
  300.         UpdateList3.clear();9 `# F# H( M6 `* L/ @1 q2 L
  301.       }% R/ r, P6 y2 H
  302.       if(UpdateFile2.size())( \' t% {) i) O3 K* N0 l
  303.       {
    " Q3 @  X  E, f1 x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)5 U/ S7 J4 j( H) S( {2 d: i
  305.         {
    " ^- x2 h( [( O. B6 K0 X4 j
  306.           file=(*p).second;
      \: s: G# x6 a3 A" X+ k
  307.           free(file);
    * B( [  Z. i1 G4 `1 ]" q
  308.         }
    9 M* ], N5 p) P# g1 F
  309.         UpdateFile2.clear();" l. x  ~1 |* s3 l- n5 t5 _
  310.         UpdateList2.clear();2 X4 Q; B6 h% _; L' D" K+ W. V  N
  311.       }" l9 Q* t, F, f% d& _& g/ |5 S5 ]
  312.       if(UpdateFile1.size())% F1 e0 h# h. Q
  313.       {/ X2 Z- g. }, @- Z( Z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 Y4 i% i$ p8 D; B# c9 m, {! d7 C
  315.         {& l: f5 K. @' a- |
  316.           file=(*p).second;
    / f2 @4 d% f+ n5 w  I
  317.           free(file);
    ! ^( g; N9 v  @3 E( h
  318.         }$ b% L* ~, a  i4 m/ p2 u( g& n
  319.         UpdateFile1.clear();, J$ S. n/ z' E
  320.         UpdateList1.clear();
    % o* [  W* n$ d6 k& `6 p4 E( G8 e
  321.       }/ m, x# N- ?. h, l1 G' H
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));$ l# J  Z6 [* j' Y0 x0 j+ {
  323.     }
    " D: Z7 R# V3 C2 y9 ?3 ]
  324.   }
    + N7 y; G$ ~: }7 i1 S) n" ~2 c
  325.   return FALSE;" w$ y5 E9 l* b9 O! |% N; x
  326. }  Y) c" q1 g# |* S  Q6 a1 |9 N+ L
  327. ' d( [9 B/ ~3 S
  328. void CRevAppApp::ClearAll(void)
    ! G5 D! o4 a! {7 Y
  329. {
    3 x- v5 c. p8 l
  330.   LPUPDATEFILE file;
    ; ?% k1 N5 o% q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 _8 p% y9 E3 q% I8 r: Q" Q8 p& k8 f
  332. ) l$ p3 w9 d- Z  \. H* r5 }5 ~
  333.   if(UpdateLocal.size())
    2 i5 W( i+ m2 r. s4 y
  334.   {
    , ]- M; x0 D- G
  335.     UpdateLocal.clear();& Q9 m; V. y5 B) X- N
  336.   }
    ( \) u. P  C+ p0 q( Q2 o
  337.   if(UpdateFile3.size())# j7 b0 ~5 Z3 n# k, Z/ ~8 E& h& x: ^
  338.   {
    ; E- z4 l9 x+ D- o  n$ v2 E8 z5 U
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 V$ @2 R( I1 S' c; Q" K
  340.     {" O% l, ^% i% x: w* ^
  341.       file=(*p).second;) c+ S& z; W* \8 [
  342.       free(file);
    9 b* y! Q& n2 k  _2 W7 s0 Z
  343.     }4 ?) |, l7 s; j
  344.     UpdateFile3.clear();$ O9 v! y1 _8 ^2 M( q& X. F& |
  345.     UpdateList3.clear();# }* S1 `2 \+ ]! R# Y' B$ M, v
  346.   }" m2 a' e/ }2 l1 Z
  347.   if(UpdateFile2.size())
    + X: `5 q) B* L# f
  348.   {
    : ?8 Q3 a* Z0 p) j. \
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ L! Y" ]. C  n/ c! K( }; J
  350.     {* A- W) J( S% u; @8 y
  351.       file=(*p).second;
    - B! L2 ^0 H" o3 Q+ p  [9 S! B
  352.       free(file);' e" L3 t. o4 [- H: A
  353.     }; c1 h& I0 p, _3 P1 F: q6 x% V
  354.     UpdateFile2.clear();
    : d! }* {1 b  s0 p
  355.     UpdateList2.clear();0 w2 [9 j9 l- z& H# p7 [6 c3 H
  356.   }0 U9 v# U. m) j1 T4 W: \9 G$ D; X
  357.   if(UpdateFile1.size())
    * N( I1 V; J7 D4 V
  358.   {
    ! w  [- T3 D) @/ X( D3 o. f( d( q( X
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 U8 B1 @8 V4 [% b+ d* L
  360.     {
    # W( N4 Q8 U5 p& [3 D
  361.       file=(*p).second;7 |" [2 r6 q( Q: _
  362.       free(file);
    3 l0 l% ]6 ^" J  ]$ Z- g2 k
  363.     }
    " a- T: i8 [. W0 \5 I5 ?$ r
  364.     UpdateFile1.clear();6 [- p# g7 K& C) j% X; P& f
  365.     UpdateList1.clear();
    ! a6 G7 G/ B  a' Y# m7 T" z8 Z2 h* Y
  366.   }
    6 Y9 o+ J% K. Z
  367. }  " E& d8 |# Y# S$ e% e6 f
  368.   6 ?+ F. H$ d; @$ v- o
  369. BOOL CRevAppApp::CheckLocalVersion(void)! V! d0 Q" o% T1 b$ P
  370. {  j( ?( P6 e8 S9 W; }% O: p
  371.   int c;
    + x( z! C( S; k5 B8 a8 ~
  372.   LPUPDATEFILE file1,file2;0 ]9 X- ~( r1 b% g6 R; Y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + x: I& S( u3 l; o8 f% _
  374.   std::list<CString>::iterator l;
    . ^/ [5 L- S+ h( R: o$ p$ \

  375. 0 |( Z0 k. ^7 e1 L: K
  376.   UpdateLocal.clear();
    ' i% e. [2 t) ]7 \7 x2 X; r. O. Q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    4 l3 c7 ^5 _2 _. x: N
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
      @) V. l) z9 c/ P
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    , l9 W% Z* V1 e; I# d2 E
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    2 v7 }. n0 l. D  x9 x5 s) C& R
  381.   if(UpdateFile3.size())
    6 ]: w3 E+ C4 V; d
  382.   {- @2 h0 |3 d. V. ~7 w3 {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)3 s0 K. o1 z  \/ _- M! M4 u2 ?
  384.     {( N1 W- c9 c: {! E- U
  385.       file2=(LPUPDATEFILE)(*i).second;' f  T6 l# c, @# f  F" l. z; ~
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 p3 @* T; E6 P* G5 j
  387.       {: t7 \. s" g' M# H2 I6 v
  388.         file1=(LPUPDATEFILE)(*p).second;
    8 h7 s- {6 F' W0 u$ M% E
  389.         file1->vers=file2->vers;
    6 ~# I3 \. C# P3 ~; w. o  P
  390.       }7 F0 t0 ]3 s3 n
  391.       else
    " F1 @0 {1 q7 A( ]. e( j0 ~$ P* B
  392.       {* I: [  c. Q9 o' P/ _
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 c2 s# z  n$ C7 @2 h
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    0 ]8 T( e) W0 v' i5 y) d8 U) q6 z
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));( _% d0 {! x# R& H: [) R0 D9 Z% M
  396.       }
    ; N1 y( _9 E0 j! |( F
  397.     }
    2 _. z6 u* h/ H2 G
  398.   }
    - x/ C* e: Q8 h, X( I/ z
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)# N) Y$ h1 U9 `
  400.   {
    8 U- E) Q  E% c( T7 c4 u
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    2 F5 K) d/ r3 N' \/ r3 l
  402.     {5 `9 k- r/ e1 F3 K3 R& M
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 x; U+ H5 o  b' f
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 \" _3 x0 d$ K4 O* u! H
  405.       {
    $ ~2 h. W9 I, r2 \% t
  406.         file1=(LPUPDATEFILE)(*p).second;
    # ?0 a: v, G( `: x) `2 B, \1 Q% q8 k
  407.         if(file1->vers!=file2->vers)( i' J0 r4 O8 X, |8 k) e/ b
  408.         {# H" d% D: M: c8 [+ `
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * S4 S7 \" c% n- ?5 d
  410.           c++;
    & E7 A# E9 q) T7 a8 Y2 y4 e
  411.         }
    / S" e, p, L- V; g
  412.       }8 x7 @8 [( I& m+ S$ e" _
  413.       else( A* o# X! R1 U# p
  414.       {
    , |) F' v+ |- d. |
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - o3 i+ o! v$ J( e8 J
  416.         c++;
    / ~) e8 S! `& D, p/ g) x( u
  417.       }& X" ^) @0 g' t! f4 |
  418.     }, ^6 q! d* ]0 t0 j/ Q. g7 j
  419.   }$ L+ ]* h' x0 R6 ?$ g
  420.   unlink(".\\DownLoad\\update.txt");, b6 j# ~& _4 K$ V- L! E4 g
  421.   if(UpdateLocal.size()) return TRUE;
    " d" s+ K+ ^/ g( U, C3 M- X& z6 {
  422.   else                   return FALSE;
    . e9 g. f9 W9 ]) n7 U& `
  423. }
    ( j* F0 F1 ^4 r6 E8 V
  424. : r) n. J6 \& E8 ^7 G
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"8 P. p+ a" M$ f, }0 {! V  ~
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    # Y! g/ T+ `1 G1 x" ^. I6 _

  427. ( ]% v! F6 ?: d, d8 S

  428. # m5 Z6 V4 w8 ]. Z

  429. 1 U& N5 V, A- Q9 T' M
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    . V. H; D6 s& l" w# U% H
  431. {! k* l2 l* W$ d
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;: T" J3 ]# r+ }  s& P' q% x. s
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - z- h6 a! J2 K  ]  \
  434.   {
    1 E0 s! R4 @  d1 E* i0 V
  435.     char szLanguage[50];
    ! n+ Q/ a$ n2 @* R; H6 h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ o& N' M4 y: N0 r+ S) X
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; S# R4 @' ?: F
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ R: G  @- R1 O/ v
  439.     else                                   m_iLanguage=ENGLISH;
    " ]+ Y. |! U# \* V
  440.     char szRegister[100];% O" b9 l8 `6 @* b2 c3 W3 ~. U
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 ~8 {( u1 E2 A( P
  442.     strRegsName=szRegister;& {8 K) ?& i5 d* W' |9 ?
  443.     char szPatchURL[100];
    . U" R7 h8 m* B
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) U- E4 G. w2 z& l
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 [/ w& @7 y' G/ t5 W6 h0 @# E
  446.   }. I( c  M. q' A& C6 ]
  447.   else' S3 m5 F; c% l% X& k2 k/ H
  448.   {- Y: w4 W( i5 t( ^' Q4 W
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ _+ Q; j/ f  u& [
  450.     strRegsName=DEFAULT_REG_URL;
    3 J3 ]: `2 E1 ^9 s- i6 x1 d
  451.   }
    $ S5 P2 c& @' H1 {+ N
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    0 D: F1 v0 M( U( X$ k: G& G& d
  453.   {
    . f% p1 x/ |2 A, c7 J! U+ @6 R+ [
  454.     char szIP[50];
    2 s0 u$ H1 J/ y5 ]6 j. A; D6 `
  455.     char szDIR[300];
    . z7 k; S+ [, _. H4 z7 U% R- ^
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    5 ^5 O' b$ m7 @7 C) ?
  457.     {
    2 u+ H: C* P7 i- f, S  Z6 k) m
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      F$ W/ X7 R$ \8 D3 l, a
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");4 c/ `( Q7 k4 p1 e; {
  460.       strHostName=szIP;
    7 V5 H( W4 h, ~. l8 r! U
  461.       strHostPath.Format("/%s",szDIR);
    4 c0 d4 i  U7 I" \; K/ r# ]  L
  462.     }
    3 Q6 |  X# F$ \# h1 w
  463.     else8 w6 q8 }7 T3 L2 G6 y9 `
  464.     {; m0 E+ P1 j, _; I% n& K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , M3 }- o9 A: W' K# j' ~
  466.       {
    % F& C+ |: Y. v* F2 o
  467.         char szLanguage[50];
    7 a. `, P( [9 V' Z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' K/ y. z* T& B- s
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & {4 q) V" P/ E4 |8 `0 `6 c# j
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;: f& w! e1 h  O' c9 \$ w! _- {2 _* g
  471.         else                                   m_iLanguage=ENGLISH;
    , @4 {% A" T' ^. `" x$ K" P( B
  472.         char szRegister[100];. I1 n) n8 Q9 `. e8 u
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - Z/ U7 h: S0 P- w. S# D
  474.         strRegsName=szRegister;
    + b" H8 }! j: |5 \8 j/ G
  475.         char szPatchURL[100];
    0 _" G/ ~7 ~3 O/ N# x$ v( Z! y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ r/ s  b& ^/ F. C' a& @- N
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " f3 ]& R9 ?' K+ X+ B9 \) D4 v
  478.       }' W/ I7 F" U  h. h5 i! Q# ?; F
  479.       else
    1 e# u/ c1 C- H# g' f) I0 v
  480.       {
    ' W: L# @0 ~- d* g# j: l% r, [6 }  z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : {* ]+ E$ W# S: V2 ^7 x
  482.         strRegsName=DEFAULT_REG_URL;
    9 \0 e1 H& M% c( {" q
  483.       }" {1 X7 B( |; |+ d
  484.     }( }9 S5 K' R$ E- f
  485.   }/ e/ W1 y+ Y1 r% h/ U
  486.   return true;, U8 K: `- r( Q; J
  487. }  k& Z5 X- z- q6 D: R
  488. 7 F. N# Z5 Z; L. a" v1 p
  489. #include ".\ZLib\unzip.h"( e; Q8 d9 P; a: L) f6 x
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);3 i6 X8 S" E" _' o
  491. /////////////////////////////////////////////////////////////////////////////; e5 d& W& ]. C
  492. // CRevAppApp initialization( [; P" X9 x: W1 E% {
  493. - O7 W5 m0 p0 ^
  494. BOOL CRevAppApp::InitInstance()
    * L& k9 y7 ?+ L7 K0 ^
  495. {% Z, V# K0 R) [2 e( I2 `% u
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    + ^9 h" ~+ Y# V

  497. 1 L2 j& z" V! }* c
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);6 s9 U9 X& q* z) i$ M
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)), |1 d7 c5 M. f' B7 C
  500.   {
    * u$ R- E0 C7 Z1 C" e5 l& v6 \+ F
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! u$ N0 Q6 T3 d: ~3 P8 i0 P1 R
  502.     GetPathFromFullPath(szPathTarget,szPathSource);- K. L+ ]' _; }6 N6 n
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    5 s. y( {9 g* p4 |
  504.     {
    - E- P9 x' F& t) u2 v& x
  505.       strcpy(szPath,szPathTarget);. S7 n, `& t, a" N; c' {/ q
  506.       SetCurrentDirectory(szPath);. C3 r) |/ j% D6 L! }% J( u1 S
  507.     }
    2 e/ k7 ?1 I$ ~' R% e. _
  508.   }3 k. m% Q$ S+ I- S5 u4 `7 a% l2 i
  509. #ifdef _DEBUG& b5 f: t$ G/ N% w  l& b( k4 e
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 Q5 W+ t$ z4 K. ]$ R& r
  511. #else
    8 _4 `6 u. M7 Y5 E" ?9 C
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! y# e* x3 N) I! t3 S( S: M
  513. #endif$ A7 f+ ~4 x* Q  R# R% u8 U
  514.   {
    3 r: `5 ?" G0 n& m& L" J
  515.     char tempFileName[MAX_PATH];
    ( F; I, L4 F' @, j' z# s9 [- ?0 d
  516.     strcpy(tempFileName,szPathSource);/ C$ y! X. T; G
  517.     tempFileName[strlen(szPathSource)-12]=0;: H- m7 A% {+ r+ T" G2 [7 L2 y- f
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ) q. Q8 L  k3 W" J' _' J
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    * \2 x9 i; Q" H5 E% D' t
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    & l' w" u  u: f
  521.     return TRUE;" u8 N( v! |6 d3 c& H% D5 ]* E
  522.   }
    & x. y2 z% V. y% n
  523.   // Nuke 0118: Delete run.exe; p! j! p; `" t9 P4 E
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 i% H/ h# G8 `0 k, S6 k0 S
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    5 q; k7 T! R9 x% B5 F0 z1 D
  526.   if(!ReadCfgFile("Config.ini"))
    7 M2 j% P, J; M6 w* O$ q
  527.   {+ v9 i* Z! Y# k) F, q
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);0 K$ s1 |' E$ L! C. p
  529.     return TRUE;
    9 `" v: y& Z: p1 ~0 r, F
  530.   }. x5 z8 N, e2 D5 W. G( V
  531.   HANDLE mutex;2 [: a! ]2 U7 L9 I8 F/ f, J' `  G
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 C7 W% H8 \0 X
  533.   {
    , x/ {3 o  k( Z# k+ i
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    * h- w5 ]# l0 \- \
  535.     {( s: Q/ Y& O. i, p$ a9 j0 D
  536.       CloseHandle(mutex);2 J9 o# Z) U- w6 g
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);5 z+ l" X7 v# J! m3 v
  538.       return TRUE;1 d  S* D$ d( ^' T
  539.     }
    * n7 a" l9 g5 t$ x$ V$ i% l
  540.   }  
    # F: n9 O# b; G! A
  541.   CloseHandle(mutex);9 p; }3 n+ a+ |0 U9 R
  542. 4 ^8 V, ]" X& v9 O7 d& o( n
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);7 N8 U, R: d0 Q( d" W! ]9 O

  544. # W! f6 K% ^2 k) E3 n5 o9 g
  545.         AfxEnableControlContainer();
    # i+ G9 d9 j7 c5 v% @6 r% s& }
  546. + y% [1 _+ j7 x' V# {6 A+ \
  547.   bCanUpdate=FALSE;0 o6 G7 y1 o+ R8 M6 v5 w- Q3 y* g
  548.   dwStartUpSteps=1;1 P' N# M. v  d% l
  549.   dwProgramState=AP_NOTHING;
    ; P  g  n( G7 `
  550. - t: \/ ^6 a" _! J
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    0 g3 X0 F* r7 |6 j
  552. : E, Q4 P8 Y1 J# A- \* u; s
  553.         // Standard initialization5 [0 w. R. Y! @8 _( K
  554.         // If you are not using these features and wish to reduce the size9 |* H4 D$ Z* N* m6 i& O
  555.         //  of your final executable, you should remove from the following% K' B7 @$ e1 I7 [7 s7 e
  556.         //  the specific initialization routines you do not need.
    + {# R6 t# d0 E/ D

  557. " n2 I$ t* ]& a
  558. #ifdef _AFXDLL
    2 d5 w: {  M! P/ ^9 d2 x
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL+ d; d; J2 H2 h
  560. #else
    & _9 h% \% O' Q4 {3 p. e$ y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically. P1 V2 ~: e0 U/ c2 u5 P
  562. #endif, K' X3 }% w& Y

  563. 4 s' L; `7 Y0 K0 f. F7 P
  564.   dlg=new CRevAppDlg;3 X5 Q, w/ h  z% I6 k/ n% ?
  565.   dlg->Create(IDD_REVAPP_DIALOG);$ c  r" W3 _& n! w$ x* V
  566.   dlg->ShowWindow(SW_SHOWNORMAL);9 E: ^5 z- H: U$ l0 O
  567.   m_pMainWnd=dlg;# f9 e, q9 p9 k/ O2 l, c
  568. ; O# {: `6 ?; ~2 i4 u
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    - j8 ?4 s1 z% n' j+ W. [
  570. . T. S1 X: W$ _& O1 v6 x) w0 l
  571. //  GdiplusStartupInput gdiplusStartupInput;, t* N! B8 E) z  C6 ?  y7 J: C" D
  572. //  ULONG_PTR gdiplusToken;
    5 t( Y5 T: g& y* K! u" }( [6 U
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);- b2 _$ A# |" |) X: |$ S+ z
  574. 5 k5 D3 v# u6 }, m7 e
  575. //        CRevAppDlg dlg;
    , c- P6 d0 G9 Q
  576. //        int nResponse = dlg.DoModal();. _( c6 h% K; S  U
  577. //        if (nResponse == IDOK)2 B6 ?& m. `  V: E2 N
  578. //        {
    ' \* ?3 z  z. ~# l5 P8 N$ P
  579. //                // TODO: Place code here to handle when the dialog is
    9 A, r0 X9 ^9 Z2 [
  580. //                //  dismissed with OK
    6 E& u' X+ ?: r5 f
  581. //        }! p) S5 n6 E( a" g
  582. //        else if (nResponse == IDCANCEL)
    " R, ?+ I  \" ~
  583. //        {
    - G2 e8 d9 x! K0 t
  584. //                // TODO: Place code here to handle when the dialog is8 n! [* }) t0 u" |
  585. //                //  dismissed with Cancel& o, K) z) A& i) E: _% h  P
  586. //        }
    1 R  y2 C% @: j* ]; S7 m3 X$ ?0 x
  587. # X8 d, j0 F' }9 L6 c. M3 G
  588.         // Since the dialog has been closed, return FALSE so that we exit the8 k( b/ |0 l. F* P/ p
  589.         //  application, rather than start the application's message pump.
    6 r/ G! a  [( j" K' f0 L
  590.         return TRUE;
    8 W; V8 Y9 K; J+ `2 S1 O
  591. }9 }6 `* C7 Y/ l! q# v9 b5 K* ]

  592. 8 G8 V! H! W% R9 |
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    # H( [4 K% e5 o9 E& ?" I7 g
  594. {& {$ F+ F1 \; f
  595.   int i;
    0 X- H; Z7 e8 ]0 Q/ r
  596.   char *szRet;6 ]1 T5 H4 L2 P  L
  597. 7 X  i3 D/ ^6 c$ c' b8 K: f7 l
  598.   if(pSource) { itoken=0; sztoken=pSource; }( M3 @: @  @- I+ I* b
  599.   if(sztoken); q) p8 J' W5 i8 z
  600.   {
    8 R* i& x0 Y* g- e8 f5 L* y3 `
  601.     szRet=&sztoken[itoken];
    2 [+ i. ^- E( i* @3 I
  602.     while(sztoken[itoken])- I- w6 x/ N. L$ m% q( U5 P: i
  603.     {
    2 W0 v  A4 {/ G, J+ ~
  604.       for(i=0;i<(int)strlen(token);i++)
    9 k& B1 c# V0 V6 i
  605.       {! ?8 l+ V# Q& P
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' \( c5 w# _0 ~7 {8 _- _
  607.         {
    % @; Y% Y* {8 r& _# C3 q0 M
  608.           sztoken[itoken++]=0;5 V' X5 H" Q/ m& V/ X9 f; |
  609.           sztoken[itoken++]=0;
    " d3 i8 S& n: B) U4 z' ~
  610.           return szRet;) i3 l1 s; y2 T, j6 m+ i+ Y
  611.         }
    ( _+ j/ y1 ?8 x
  612.       }
    3 }4 M$ S- a4 ~3 S8 z& U
  613.       itoken++;" `8 N/ }4 G" r9 w$ C2 Z
  614.     }) j# X, B$ g' {
  615.   }
    + O- }2 I9 c, Q' X3 U! L  L
  616.   return NULL;
    $ Z1 e( f( Y0 {* ?: a
  617. }9 D: W/ q! W% P- @
  618. . x: y& J# W: W. q9 e: ?* J  @1 P
  619. void ProcessProc(long Total,long Current)
    + w! J- b; E9 B
  620. {+ [9 C) \( r- J4 i: B0 r. ^: F
  621.         MSG msg;( k# t& a7 `- f% Z# K8 D& q+ ~: Y$ E9 e
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    - a8 q$ a1 w) F$ ^* u) R& X1 _' H
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ) Q" m9 x& Q/ _0 {1 f
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ v6 J. R! P# c2 a5 d
  625.         {) D" ^$ R9 ~3 ?! l' F& a
  626.                 if(!GetMessage(&msg,NULL,0,0))
    . O: F1 T$ y  r. _
  627.                 {2 O: M' n, g4 I& @6 @
  628.                         return;1 N- I7 Z: ~7 J  U8 B
  629.                 }4 ~6 K. L+ ?" Z( N: j
  630.                 TranslateMessage(&msg);$ M) R4 y- I' C3 Q; |/ ^
  631.                 DispatchMessage(&msg);
    , [3 C9 i1 d+ B$ E8 O8 y) V- ~
  632.         }        ; F: t: K) u) i* w" ?% m! U
  633. }
    3 H: f: B0 X9 ^) |; O

  634. + @% m5 @3 q7 k; Q1 G$ f
  635. BOOL bFirstChar=TRUE;
    2 A. a# a+ ]" x) s7 C

  636. # E' d; S+ a0 e5 N, H
  637. BOOL CRevAppApp::OnIdle(LONG lCount)7 ?# O& b5 M, \. }, ^
  638. {
    2 V0 s& E- |0 W+ b# R5 M
  639.         // TODO: Add your specialized code here and/or call the base class$ z) ^4 u5 y+ b8 K: S1 A
  640.   switch(dwProgramState)
    ' x' H% |- n8 l) K
  641.   {
    4 x  R8 ?( F) D% G2 d! m) ~+ a: _
  642.   case AP_NOTHING:+ Y4 r$ n# C3 }5 `" T
  643.     switch(dwStartUpSteps)* }9 P# k- m" O7 [! ]4 d* y6 n
  644.     {
    * }1 }& N8 V, U% _
  645.     case 1:
    ' f) j. G, v5 j7 W
  646.       {3 A. U6 r4 Z/ D8 n- T, a
  647.         int i;5 [: K3 O* b9 h5 O
  648.         CDC *pCDC=dlg->GetDC();
    8 `7 q- j- @: i7 |& m- k9 e1 {
  649.         HDC hdcwnd=pCDC->m_hDC;% z* t  @5 u7 F2 r3 |
  650. //        Graphics graphics(hdcwnd);- I2 x$ ?0 y& s2 G$ O) O/ k3 P! s( p
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ! Y! |5 F3 ^* V& x
  652. //        INT iWidth=bitmap.GetWidth();
    + ?) P4 P; `. A: f
  653. //        INT iHeight=bitmap.GetHeight();# r1 d2 n; [) r, X
  654. //        Color color,colorTemp;/ p8 O7 V$ `; T: Q2 U/ Y) s0 b" Y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)1 l. g9 _* C+ w$ \; O
  656. //        {
    . e! z2 g8 |+ \; A
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)$ e6 r" o" O5 H( t* Z6 E# }! S
  658. //          {' G1 M% L7 x& ~1 J; r# }6 G/ B9 a
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      m0 W0 N# [' B& M3 N6 y: _
  660. //            colorTemp.SetValue(color.MakeARGB(
    . C$ n6 z, u  d' X4 A- s% Q0 q
  661. //              (BYTE)(255*iColumn/iWidth),
    ' H! t( Y# {/ ^" O8 i5 A
  662. //              color.GetRed(),
    4 w5 W( ]  t0 O* Z
  663. //              color.GetGreen(),
    ' e- e, O8 ^7 q; V9 i" Y
  664. //              color.GetBlue()));
    - w6 b% U- N; ^
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    , d. T# v3 d" I; ^2 c% y
  666. //          }5 [# O. M" W0 f( d6 h/ \
  667. //        }
    1 X- L: m' W. R7 i2 C1 p1 E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);$ C# n# B4 s" c4 F
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! u4 l/ q0 u  x6 F
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");" J  C6 H: \8 J$ Q( s" w
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , ?9 x5 q2 U9 G. ~
  672.         for(i=0;i<240;i+=8)) l5 Q7 n8 I" Z7 T2 h' o; J5 E
  673.         {" u2 M) c( I- T# G+ p
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - N) S6 ]( z9 |; I% F
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 A0 N: t( a8 |- [
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: G8 M! }6 `  @/ g
  677.           Sleep(33);
      f9 r7 y0 r1 l9 j
  678.         }& P1 v. e1 r* t2 v$ v9 _( w
  679.         Sleep(1000);
    6 g6 E0 H) l3 r+ _
  680.         for(i=240;i>0;i-=8)
    + e9 r) l0 J/ `" }
  681.         {& `( G( O  w! Z7 b0 M  Y" p3 Z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! Z) ?, a9 c4 C
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& F. f! i( Y. w/ s
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) G2 s5 l0 Y2 e; @  z
  685.           Sleep(33);
    " p0 d, e5 p% y1 L
  686.         }
    7 Z& F/ k; m/ i
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);8 Y3 m1 B) Q* ]. E8 Y
  688.         dlg->ReleaseDC(pCDC);1 g3 G1 p' j) [5 r# w0 g% ]* e
  689.         DeleteDC(hdctar);
    . A4 y7 x3 q& [! q
  690.         DeleteDC(hdcsrc);) F: D2 K) D0 J" z! C0 X
  691.         DeleteDC(hdcorg);
    8 r/ ?6 o" E) p; \2 H3 {5 Q
  692.       }
    5 P5 N: Y4 U# c. c
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);& b# F& `/ N; I  Y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    1 \9 e9 g9 Q3 X% R$ {
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    # e9 D# c/ b' M/ p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    5 s  A. o# ~: R' }" b- N
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( S5 @& O0 A! u: {, d
  698.       if(!Dn.Connected()). n; m# R# H6 E8 u2 V5 M
  699.       {1 B) }2 A. H3 q  k, X
  700.         dwTotalFiles=1;
    0 ~3 ~  }* j0 z- y0 l) u
  701.         dwDownLoaded=0;  q3 ~. F* L8 r0 @3 @% B
  702.         bSilentStep=TRUE;
      D, ^  T& z! T
  703.         bCompressed=FALSE;, B% h. E' V7 J  R. j5 d
  704.         strExtLocal.Empty();
    + B8 j* W; G" N4 V4 z
  705.         strFullName="readme.txt";
    ! p1 i! ?4 t) i& ]
  706.         dwProgramState=AP_CONNECT;
    + u. R; p+ d1 E9 Z' J) S- @
  707.       }1 ^6 u& o+ f6 k+ ?5 n( w
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
      ?, O: U. p2 L, q0 @6 @6 @
  709.       dwStartUpSteps=2;. N$ N6 s& w- _" o' ]
  710.       break;  _4 \' j# H, Y
  711.     case 2:; K/ T. w8 v6 d; ^. _6 a5 u
  712.       {
    5 `' N" @. l/ F- o1 a
  713.         int iEOF;  L, U0 m' B% s0 b+ |+ q" G
  714.         FILE *fp;
    $ M5 n6 J: _" t* c
  715.         char szString[512];
    & k% Z: l7 ^# k$ \+ o
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    5 `. Y1 R; d% g: ]/ u; P
  717.         if(fp)
    4 |3 g3 D/ V+ T* m8 I
  718.         {
    ) K: N7 ?- h9 n0 V/ L% v
  719.           do
    $ ^; c6 w1 l0 @2 |/ L' l
  720.           {: u. `; y; a9 a6 m! ]
  721.             iEOF=fscanf(fp,"%s",szString);% ^' D4 r7 Y& h3 \8 `. f3 N
  722.             if(strlen(szString)); [" Y0 |6 t1 ]- Z% b
  723.             {( O2 k+ e# k8 R$ d6 c- b$ R" t
  724.               if(bFirstChar)# w$ K) M7 B% Q4 G
  725.               {
    " Z+ b7 R7 A' v  c" F4 R& @6 t
  726.                 bFirstChar=FALSE;5 T( ^( s  Q0 R, M
  727.                 bConnectIsBig5=FALSE;
    , N8 C/ S' |8 s' I/ ?  ~
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;% Q6 t7 W# M( L; a* |
  729.               }- X4 l  v* {, J. J
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));$ E/ `5 X* n4 q  q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));  j/ U; j0 S8 |
  732.               dlg->m_ListText.AddString(szString);
    : F3 k+ f+ g4 G: j3 Y' `0 L- W2 h
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 x& i  e5 M- e& f
  734.               *szString=0;, q/ ~% b$ f) ^, b( d! k/ U
  735.             }
    * X. W% t  U' Y4 I4 b
  736.           } while(iEOF!=EOF);6 j& Q" k3 I. q& N& h) G
  737.           fclose(fp);3 ]- ^7 D, n: r& O
  738.           unlink(".\\DownLoad\\readme.txt");! m, j6 D7 Y9 v
  739.           dwStartUpSteps=3;
    5 b1 H& Z) z2 l: c! y+ g/ x- R
  740.         }
    & P; R) U/ f+ L) Y- n7 X: z
  741.       }
    3 |0 v1 T5 Q6 ?$ O5 N3 u
  742.       break;  B! c. |$ q. c1 `' V
  743.     case 3:: N" O, p  F% x% ]# h
  744.       if(!Dn.Connected())- w  h7 s# b  [  I/ ~
  745.       {
    ' {1 ?4 g$ a% P0 r5 C8 I
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);" ~/ Q6 i# w5 f! b  S+ t2 f
  747.         dwTotalFiles=1;
    8 H* i4 S2 }0 O, |9 s9 Y& L! v
  748.         dwDownLoaded=0;
    3 L+ i/ H* h! d4 }6 m9 p) F; W* L
  749.         bSilentStep=TRUE;
    0 }9 L6 b" j2 U+ v
  750.         bCompressed=FALSE;8 _( |/ [* `4 ^0 S2 f# r7 `
  751.         strExtLocal.Empty();7 C1 Z5 S# m( ]& R+ P+ A
  752.         strFullName="checkversion.txt";8 {1 L$ F3 _4 b8 B% R9 r1 v; K8 k5 }
  753.         dwProgramState=AP_CONNECT;
    " n( T1 N9 x9 p  F" G+ t/ M
  754.       }
    ) n; }5 W1 q+ b* O1 p: F" t8 \% X
  755.       dwStartUpSteps=4;8 b' W6 v% b' f0 o: c& |6 W0 Z
  756.       break;( C2 |# f; q& l/ t9 @/ a2 H! K. e
  757.     case 4:
    4 n9 x* o7 v9 }+ H- i
  758.       {
    ( C) D' E# e8 E
  759.         FILE *fp;0 B- U2 {8 g4 T3 k! M" l
  760.         char szString1[128];" V) P  p* ^- m
  761.         char szString2[128];
    - {# h: R6 f7 V6 H0 P1 i: E
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");, H( }" D) t1 M8 W9 y; g: f
  763.         if(fp); z" Q" V& ]3 I# p5 w9 N
  764.         {
    * h7 B" K, i- e+ Q! f
  765.           fscanf(fp,"%s",szString1);' D8 {; ~  Q5 Y# g
  766.           fclose(fp);. n( o  a, F  t+ {
  767.           fCheckVersion=atof(szString1);
    5 p& B$ |3 F8 c2 u
  768.           fp=fopen(".\\checkversion.dat","r");6 {$ B  L9 u3 K; @0 ?
  769.           if(fp)
    8 g. n5 H8 D7 _/ j9 H, _  {
  770.           {* q0 S  @0 X7 l- j4 \# L) j" Y
  771.             fscanf(fp,"%s",szString2);
    ' M" s' D2 i/ S3 V/ {
  772.             fclose(fp);7 ^  G0 m' e2 Q; ^8 E
  773.             if(atof(szString1)!=atof(szString2))7 q0 s! I- Z/ B# l0 L
  774.             {5 V3 c# i2 n2 n& s, G4 b; o. g
  775.               if(!Dn.Connected()), K$ Q3 V( d, ?  M  ?' O9 N8 L& w% @
  776.               {( p9 E4 l' _( K0 W+ W2 Z' e- c' j
  777.                 bFirstUpdate=TRUE;
    , F- Z! `( o+ ^5 p) E
  778.                 dwTotalFiles=1;
      {  D/ i% w) `7 k! O
  779.                 dwDownLoaded=0;, s  `' s% s7 W0 ^7 L
  780.                 bSilentStep=FALSE;* L$ r5 a+ m8 h" W2 ]- \/ n
  781.                 bCompressed=TRUE;  V( h; z( [: t8 d5 ^6 V
  782.                 strExtLocal=".\\DownLoad\";
    4 L/ o( E1 x5 r( Z
  783.                 strFullName="update.txt";/ r" r9 ~( Q; H! S3 P! [3 O8 V
  784.                 dwProgramState=AP_CONNECT;: h/ q" m: d% ^# b1 j
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ W7 F) W8 n/ |" C8 b2 {7 Z2 H
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  r8 x2 e& e. i# {* J1 t# j4 {
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    0 F8 Z1 _7 `9 o' \& s

  788. 5 \9 U0 p0 T  q) K5 l
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ e. r! ^1 ^# J% X3 D
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    : U6 I' \$ J' h9 G1 q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1); d! z% @( y+ o  |9 G9 l
  792.                 {9 u/ V; n+ e+ j" ?  N& c
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");% C/ y8 E7 g( Z! C' W  \* o
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");+ W5 @( l  k9 {: Q; o  c0 V
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");7 V. Y/ R: t3 x  B
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 X, e- @: O$ Z8 B; w
  797. 9 b; L; \' A# J: t$ [
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : h1 l0 O; l+ ^7 c7 F" x+ O* }
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% |& ~! g5 s; k  m3 V- J- t
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    + ]# b3 E* F8 l& K% S4 J
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 z) Y: c# a) i9 L* D
  802.                 }
    ) s$ t" ~2 I5 X* j) `4 [# n" a( Z
  803.                 dwStartUpSteps=5;0 g/ X5 [4 Z. {% _0 G0 |8 K
  804.               }) f8 i, n# q6 ^7 M1 s
  805.             }1 j% i# c% @8 v6 q3 U' v
  806.             else
    4 L# n' g2 J+ i* l3 _4 f* P
  807.             {
    ' L4 C! ^0 h1 ^/ G; b
  808.               unlink(".\\DownLoad\\checkversion.txt");+ n! L* o6 d. \. o/ a) w# ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    3 L# |3 {9 o5 F" c' l2 ]
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");( \. Q7 p) [- E3 {: C
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");: P% o  e, j  m6 K; u) N

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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