找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
' C1 X* H9 V6 D" B. B
  1. / RevApp.cpp : Defines the class behaviors for the application." J9 X. Q( U% r" l6 t) U
  2. //2 X' _3 v! C9 ~6 t

  3. ; t) T  N) U+ G! i) C
  4. #include "stdafx.h"% }9 C; ^' d. T9 c' Q+ t* e: @
  5.   D2 \/ E. F# ^! I' ^
  6. //#define UNICODE! ?1 C/ f3 l$ Q4 i$ n
  7. //#include <gdiplus.h>
    & ]7 V/ N  ~' S# d
  8. //using namespace Gdiplus;
    1 A% \7 X$ p% Q( g9 ~, b5 [
  9. " Y) u  N, t+ t' \
  10. #include "RevApp.h"1 \  \6 m; k5 F3 L$ {) |4 \, Q
  11. #include "RevAppDlg.h"$ q% t, b; b. |, q. M7 d2 Z- X: |6 @

  12. + G6 Z* Z! }" `: h  K7 B
  13. #pragma warning(disable:4786)7 [3 C  j: s  ^
  14. #include <map>
    3 t6 _+ B2 H. X, m$ y
  15. #include <list>2 O7 O) w0 `! @/ c
  16. #include <direct.h>
    0 {7 c+ s+ q8 H9 h2 w

  17. & D/ b- a4 V/ u6 \$ V7 c' J( P
  18. #ifdef _DEBUG
    # [4 b; H9 O) b) \: k8 J: m
  19. #define new DEBUG_NEW
    - ?- y2 c' Z+ k) w1 Y; \  F" L9 j) x
  20. #undef THIS_FILE( e1 d8 B8 M' n1 E: D* p
  21. static char THIS_FILE[] = __FILE__;
    ! S' l( v, ~: R. B* v
  22. #endif
    " f2 ~0 N/ [& ?7 m6 a
  23. #include "SkinResDef.h"
    4 r8 i! \+ n1 ?
  24. #include "ChangeBG.h"! ~7 U* i+ v6 d4 z* }9 D& H% _
  25. #include "AFXINET.H"
    " E+ Z0 c# m. b0 }: k- {

  26. 4 ]" r5 [" E& ?8 y
  27. #define TRADITIONAL_CHINESE 0% e2 G) f2 b$ m  Q
  28. #define SIMPLIFY_CHINESE 1
      \( D. y0 g% t7 `4 k+ U, ^2 G
  29. #define ENGLISH 25 M- q, Q( I+ Z7 V! T
  30. int m_iLanguage = ENGLISH;( G( S5 n/ f9 h% U/ A& @
  31. /////////////////////////////////////////////////////////////////////////////
    4 Y: G- @5 {! q9 @/ g( g$ M
  32. // CRevAppApp
    9 C5 X9 t* _2 v
  33. ( ?2 o2 ?/ F  _; c. x5 P+ }  `0 S8 c0 I
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)- f+ b$ R; v$ o; R% l
  35.         //{{AFX_MSG_MAP(CRevAppApp); e& Y, I: k/ I# B
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.3 {+ k7 q* |" f% h$ ?; {& H8 L
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ) G6 s$ e0 s, B* D- x
  38.         //}}AFX_MSG
    1 y) X* N8 Q! }: ~  x% ~4 Q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    " g7 M7 E( ?1 P/ v
  40. END_MESSAGE_MAP()- n7 x7 y$ `5 ^5 U7 {

  41. + k. U$ g! @7 H6 a" H4 }
  42. /////////////////////////////////////////////////////////////////////////////3 g. p( {+ C; N! [
  43. // CRevAppApp construction
    / r( r1 w* h3 d) D

  44. ' |( ?- O: M( N5 y8 @
  45. CRevAppApp::CRevAppApp()! C) Q- r# o# C
  46. {
    0 s- f9 T6 w5 I) L  h0 v
  47.         // TODO: add construction code here,
    , f& r) q  w- r. F0 X
  48.         // Place all significant initialization in InitInstance
    ) e9 L, M6 w& ?$ o/ U. I3 o! U+ Y
  49.   bDisplayIsBig5=FALSE;
    4 h; q' c, ^; j
  50.   bRestartUpdater=FALSE;
    % f- L/ D" u1 l- j  L
  51.   bFinishUpdated=FALSE;5 P. |# K+ g% U/ J& q( F
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;( T1 ^: H/ o1 B) K  o9 H( J
  53.   InitChangeDataBig52GBKS();
    0 ^. s% s% A4 t, j/ `
  54.   InitChangeDataGBKS2Big5();
    2 \& e5 D0 D4 t, ]) a
  55.         //2 X% O4 o! e* |9 j
  56.         bClickRunExe = FALSE;/ s+ Z% ]: l. e! R( m$ ~
  57.         //3 K: F  C7 `' u' T8 a2 s* }  [9 p
  58. }
    & f  h! D: p2 k1 L! S4 a$ A" B
  59. * Q: g. t6 _& z. p
  60. CRevAppApp::~CRevAppApp()9 H; R. W& V, K+ }, ]4 H+ b
  61. {3 g& e9 `  f  e) V3 {4 o. x; G
  62.         // TODO: add construction code here,
    8 |9 i! p$ G7 p. e
  63.         // Place all significant initialization in InitInstance6 J' |3 d" |/ [5 J! ?
  64.   EndChangeData();; y+ g+ x5 H5 r4 y" `$ N4 O
  65. }% P. A7 r! ?. \: \+ v1 ~2 P
  66. 0 S% w$ {: u2 y; w8 y# w
  67. /////////////////////////////////////////////////////////////////////////////
    ; U9 [. m. b/ Z7 Q
  68. // The one and only CRevAppApp object
    1 @8 y: b8 J$ v6 h6 ^4 U# K3 `

  69. ' q9 K1 A% f* S% J$ P
  70. CRevAppApp theApp;8 ?- i! Y% N: J% h$ k7 m5 b$ P8 g
  71. ; B; @0 j+ u2 l
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 X1 z& S4 d; o5 d! j' F  R, m
  73. {
    ; e: G  g, [8 ?1 }( K' v
  74.   int iEOF=0;
    ' x% @: \+ g  l% ^2 j9 r
  75.   char szTempName[MAX_PATH];
    9 i) j$ `. {7 n$ q3 w
  76.   *szFileName=0;) {& N! p" I, R2 ?: `4 S  ?) G
  77.   iEOF=fscanf(fp,"%s",szTempName);
    $ p$ M& p6 C8 G. B1 i/ x
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')) p, k1 x, g5 Q; k, t4 _6 c
  79.   {5 [) @) i# [6 i
  80.     strcpy(szFileName,&szTempName[1]);
      z  I& n# D1 c% c, }
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    4 {4 A6 I( k% ?8 ^0 K, }/ [+ m; {) C* B
  82.     {
    * h/ y  K* \" c' L( I, s  ?" N: J
  83.       iEOF=fscanf(fp,"%s",szTempName);8 m( g# e2 j- l* [
  84.       strcat(szFileName," ");6 n: O6 S0 A) D- ?1 D
  85.       strcat(szFileName,szTempName);+ o0 E' T  G" n4 m7 V
  86.     }
    - G/ z0 {/ z3 {# s5 }
  87.     if(strlen(szFileName)>=1)
    / R5 l& c1 k! z+ C2 t1 p1 Y
  88.     {4 D* w& V; d% h6 P' P  s3 f5 p
  89.       szFileName[strlen(szFileName)-1]=0;
    & Y8 o8 I* t) V1 C# b; v
  90.     }$ P6 V- s! x& ]5 l. n
  91.   }
      O, \) Y0 i& `7 T5 z% }
  92.   return szFileName;9 y3 ^8 \% w5 A+ ?' {8 S, B7 [
  93. }
    9 y% z4 w  j6 Y' F

  94. 9 ]6 f; L0 M6 m# n1 V: P' I
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    2 |- [+ Z3 o8 ~$ }! y( v, g3 v
  96. {7 f& r4 A) E$ t0 v% |$ Y  n
  97.   FILE *fp;' p: r( S1 Z! c: h' w7 r
  98.   char *key=NULL;
    " j% w+ b' j/ e1 J. W% R7 Q
  99.   char version[MAX_PATH];8 @4 P% h9 l  ]  J( Y
  100.   LPUPDATEFILE file,olds;" F0 W8 B1 R* ]5 {4 Z/ E. i7 X* P
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
      l6 T/ l3 m* k  z' Z
  102. 7 u2 H* M2 }7 C) ^, V
  103.   UpdateList.clear();4 {8 X7 q' ?% Q1 V. W( S
  104.   UpdateFile.clear();
    - M* U' O: o& s3 m; x1 I0 @! ~
  105.   if(GetFileAttributes(filename)==-1) return false;9 _3 R; E% s) i# z, c" I( w
  106.   if(!(fp=fopen(filename,"r"))) return false;
    , l7 w0 ^' w  S+ R
  107.   fscanf(fp,"%s",version);. u3 o0 n, e6 o1 d3 {
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 ^! _! O9 B9 |
  109.   while(fscanf(fp,"%s",version)!=EOF)
    1 z7 k" A- L1 q! n. b
  110.   {
    1 c1 B! e5 F7 n, P- w7 ^
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% v6 e& }; M2 s8 |! d( z
  112.     fscanf(fp,"%s",file->path);
    % k* T& J* m. C1 e0 ?
  113.     ReadFileNames(fp,file->file);
    # X* z% B+ G7 v9 R" R8 U
  114.     strcpy(file->full,".");7 E) \' y5 m3 d" n% f1 L
  115.     strcat(file->full,file->path);6 ^0 v5 n7 |) I  U) T/ F
  116.     strcat(file->full,file->file);1 Q0 L* ]+ Z6 Y( s" ^- s
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    6 r) [% J* t7 w5 o/ A& G0 z8 V
  118.     {5 |5 N/ b; b  T
  119.       file->vers=(float)atof(version);
    $ e6 l4 Z( e/ _  q+ k/ z
  120.       UpdateList.push_back(file->full);: O* x% c, T7 h) o, w8 Z( u* Q! L# q
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    3 G' V. C; W. F% |( A7 c- g: @
  122.     }
    % {, ^1 _; X% `6 p5 i3 W
  123.     else
    1 M9 T- L% q* K  u: x3 {# @/ _  j
  124.     {
    * X; W1 j; s1 C* b
  125.       olds=(*p).second;
    / ~; d; n7 A& J& t# N6 ?9 N
  126.       if(olds->vers<(float)atof(version))
    0 D0 I# q. ^2 K' V- A
  127.       {! ]: w: l; @( ]
  128.         olds->vers=(float)atof(version);5 _: b* x: r! K
  129.       }# o/ Q  z3 R' [0 S3 u  [% `% b6 O
  130.       free(file);4 ^9 L' ]/ ~* U2 X
  131.     }
      G. p( `  Q6 |# w
  132.   }  d" f3 M+ A) m- q1 @  N
  133.   fclose(fp);- ?: e2 ]( J% c' l  H$ ?
  134.   return true;
    2 m( e* |+ T/ k0 B3 h* [
  135. }# @2 v3 _4 h* G

  136. 0 f! _+ Y8 e7 A4 L; F
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! A8 x2 f8 c! ]8 B2 X
  138. {- _* n, m0 H9 U, m/ y9 i& [- K/ D
  139.   TCHAR  szFull[MAX_PATH];4 C4 w9 b* `, [; s
  140.   TCHAR *token,*inter;
    2 R% B5 z8 x1 }
  141.   *szPath=0;( {3 }) i( l  P* O( R- Y" }" l9 V+ v
  142.   strcpy(szFull,szFullPath);. b7 c! o' L7 J; l9 P8 n. _: w
  143.   token=strtok(szFull,"\\/");
    & _4 w2 T* l% J: F- m3 E8 l
  144.   inter=token;9 V7 V( j" Y1 i1 e6 W
  145.   while(token=strtok(NULL,"\\/"))
    3 l5 S9 `1 {0 ]( L, i8 E) n* h; S
  146.   {2 o% X5 u$ M* t
  147.     strcat(szPath,inter);
    , X9 P$ Y4 S( M, c8 H- k& L
  148.     strcat(szPath,"\");
    + t6 `4 \0 C! R4 Q  S% U
  149.     inter=token;0 l: E4 w" I, D( |- ]" H/ {4 n
  150.   }
    ! p' S& E& p9 [$ }9 @2 {$ G
  151.   return strlen(szPath);% L0 |) N( v" o! p
  152. }7 u: q0 f' ?5 E8 I4 M% E

  153. ' _6 {# Q4 e; r+ H
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    4 j' S* m: {3 }( ~5 E' C
  155. {: ^5 m3 i. b! g. l8 d" O! Y0 d2 l
  156.   DWORD attrib=GetFileAttributes(Target);
    ) z( |5 j( ?2 I4 Q# n
  157.   if(attrib!=-1)/ l: T4 t  f( Z, D
  158.   {0 w1 d" x+ j/ o/ V9 c; ]6 D* C
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  S+ ?7 [; r+ ]+ j3 W  A
  160.     {+ h# x! i" o2 J
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    4 E% _# i+ S% L% B7 _
  162.       SetFileAttributes(Target,attrib);$ g3 c" ^" ~  Q
  163.     }
      }2 E; S: g; b% C8 s7 H! I0 I( i
  164.   }. _# E, r. s7 A5 }) Q+ W
  165.   CopyFile(Source,Target,Erase);
    * G- |: S4 _$ w! Q* G1 t/ v- L
  166. }
    5 \4 ]& o% u- k* Z7 u6 ^- C: ^, R, K

  167. 3 L# G' D7 J9 S& T4 [# z- r
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)" o/ W+ a) d- y+ W# p, r' Q, n# R% ?
  169. {
    , L! K, x9 h8 f) F! W
  170.      FILE *fp;
    6 b8 T+ C5 ]  s
  171.      char  szBuffer[8192];
    2 X  E7 z" i% V- T1 b+ P+ [- k
  172.   va_list  argptr;
    $ e. f/ E$ u8 h1 ]1 p5 _3 Q
  173. % T4 R8 U3 l# A5 f7 ]& v
  174.         va_start(argptr,message);4 Z0 X6 c) |' I" {' \# [$ S# O
  175.         vsprintf(szBuffer,message,argptr);
    3 Y( J/ z  x. L/ r8 a1 k& a4 J
  176.         va_end(argptr);$ {) b) E9 K$ _3 s
  177.   fp=fopen(FileName,"a");- B/ j2 [$ _6 t5 e8 x# x+ Z9 V+ ?$ ~
  178.   if(fp)
    ! u7 N7 a8 j6 W. h
  179.   {! E: R3 `# j6 b8 ^; `5 E
  180.     fprintf(fp,szBuffer);4 G! Q8 H- W6 e0 l, ^7 s
  181.     fclose(fp);" n* I7 Q+ b9 ?8 q+ ]
  182.           _flushall();" q0 Y4 Y6 e0 Q* X6 h
  183.   }$ L" b+ h2 s' X8 {& J; e
  184. }
    % I$ y# [- H6 E0 W: |* G

  185. . r0 x, X; D  ~& y. R0 l3 |- @& I, O- f
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ) l& t9 j$ _3 Y( P  [% G
  187. {! e8 n! B, }1 H, s
  188.      FILE *fp;6 p' m9 d+ J, L
  189.     DWORD  attrib;
    & s( C+ f0 {$ I# H9 A7 j; D; R
  190.   attrib=GetFileAttributes(FileName);
    9 F9 ?0 L) W0 ^3 e
  191.   if(attrib!=-1)5 i' F# P8 P5 o: j: h! Y) n$ N
  192.   {( l6 f5 [) K) R$ m2 N
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    0 M. E+ ^7 w+ _) c. r+ [/ Y: {
  194.     if(!SetFileAttributes(FileName,attrib))
    6 A5 q4 b9 N  x1 E/ ?2 t
  195.     {
    ' j- ~. S4 ?* }- [) h
  196.       return FALSE;) o, Q. B# M% }  @. S" g9 j
  197.     }
    + v8 G9 B! k4 a, r6 C4 T
  198.   }5 G, h5 p1 h* @! f. r3 X
  199.   fp=fopen(FileName,"wb");! a7 S% q( y3 s
  200.   if(fp)
      R2 X5 V, k" v- B3 H0 q7 Q
  201.   {
    . Q( c; M% a; r* ]
  202.     fclose(fp);4 I5 u3 F+ @4 i* ?/ T, [
  203.   }/ g' @+ X; z7 B6 d- @
  204.   return TRUE;
    6 d& P  K: ~2 n
  205. }
    ) D5 A' ^; C' S. @4 W( j; S
  206.   A9 ?) t2 b4 w9 m0 O
  207. BOOL CRevAppApp::UpdateLocalVersion(void): l/ J6 t: d; v1 P" a
  208. {
    5 h$ \% Y! [" Z
  209.   char filename[MAX_PATH];) {6 \' W, F- ^& g' M# \
  210.   LPUPDATEFILE file,olds;
    " A" t" }7 x- Z0 @3 U7 K! l
  211.   std::map<int,CString>::iterator i;
    * ?& ~8 }' `9 v
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    % O. J4 o+ Y$ q8 l/ Q+ }
  213.   std::list<CString>::iterator l;% `, I" K6 `6 V* ?# Z

  214. 4 B7 _* W$ Q  t# @: ~
  215.   if(bFirstUpdate)
    % s+ _4 W2 z9 R. z0 |$ L5 O4 {
  216.   {! b! r9 l, O* ?6 I4 P, \' U4 U
  217.     dwCurrFile=0;" h* M. }. V4 S
  218.     bFirstUpdate=FALSE;
    ) t  Z2 k2 [8 D; ?' o( A  D. K
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) o& ?% V+ \9 L  u* ~0 L
  220.     {. j3 @8 ?. f& G( i; C
  221.       dwTotalFiles=UpdateLocal.size();
    3 }7 y; ?* y; f9 _
  222.       dwDownLoaded=0;0 o7 A/ d9 q: i4 U) t
  223.       bSilentStep=FALSE;
    3 d' {4 z  _( z
  224.       bCompressed=TRUE;8 v" o7 Z  F% C" }# p% ^
  225.       strExtLocal.Empty();+ c% M0 G; Y' W; I  @+ ]9 u" `
  226.       strFullName=(*i).second;$ L9 y2 J9 k% h+ y: D
  227.       dwProgramState=AP_CONNECT;
    0 j; |3 S; P: S: Q$ ]; ?) [
  228.       return TRUE;( d7 m1 }4 Z  J7 E4 Y
  229.     }) B1 m& Y- K% n1 j3 ?% v
  230.   }1 ^- a; C/ ~! q& R' o
  231.   else if(bRestartUpdater==FALSE)
    * H. [# T! \- o& L9 l0 M- \
  232.   {$ D5 {% ?. R. a2 s9 E6 F) [4 I3 ?" P
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()): h1 M% K( x" ~' D
  234.     {
    5 A4 o" A: @) g% r
  235.       file=(*p).second;7 J' J3 w4 [5 j5 R# p$ y+ e* A* r
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())" U- F+ {4 c* u4 U
  237.       {
    5 Z$ x  ]2 V& z+ A8 b% W
  238.         olds=(*p).second;, j% g! B" E: F# j. j: ]
  239.         olds->vers=file->vers;
    % R4 Q. H: O) Z& P% h% E- y
  240.       }, _& `8 [  ^+ \8 t8 z
  241.       else8 r% T7 M# g7 G, ]' L0 W
  242.       {
    & T, x: O* C' Q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 Y6 ]1 h8 q4 O$ v  d+ T
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    6 q" M0 j) H0 N7 B& [7 @' e
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));9 n  S9 ~3 E* B$ t
  246.       }* ?& ]9 T- k7 B1 f& Z4 ]# I' [; L. ]
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    , w* X$ F: E! ^) V! X
  248.       sprintf(filename,"(%s)",file->file);0 K7 B2 D4 Y1 R  Y) i1 v
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 |7 f, I+ s( T* d; W
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }; j5 c% E9 p. l; S1 _  X
  251.     }
    + j2 i- ]2 W. p2 L
  252.     dwCurrFile++;9 F7 E0 s, }- `  D7 a
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      D" _* v8 q0 }+ ^3 m5 T  m
  254.     {& i, H' R& n9 ]6 I  `- _
  255.       bSilentStep=FALSE;; d! h  |# L+ c$ K
  256.       bCompressed=TRUE;7 q, t- b5 S& s
  257.       strExtLocal.Empty();. o* h5 q1 z% Q, R% l: |0 X
  258.       strFullName=(*i).second;
    $ D: d0 V8 w( P. r. w4 r
  259.       dwProgramState=AP_CONNECT;6 L% ^8 l. l8 \) c+ m4 C
  260.       return TRUE;6 ?8 J4 h: V- _. p" N/ M- b
  261.     }
    ( U3 d& j1 a$ b; p* B8 a, @* J
  262.     if(!bRestartUpdater)
    2 Z3 ~8 D6 e2 @
  263.     {
    , |$ y) L$ ~7 ], Z
  264.       int iCurrSize,iFileSize;% k8 C. X, ]5 S9 c
  265.       iCurrSize=0;, M$ G4 x6 d+ w+ N9 h
  266.       iFileSize=UpdateList2.size();3 l( W& a4 d9 Y' j: \
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ' ^3 W# U( h( t- Z9 }; x$ G
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    4 _! _4 ^  w& J2 K  ~4 ^& ?0 a- ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
      O! V( B! Y' t- m% F
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 `" F% H7 S1 h, M; n) g" g
  271.       Fclearf(".\\update.dat");
    5 E5 ^3 u$ [- O2 d# V  N3 \; C
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * N% m7 S: r  `4 z0 h8 j" D/ v
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ j+ ]6 Y/ A; ~3 q4 O% D) U
  274.       {! T4 |& {! `. i/ V% J. ]; A* N" r
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())2 [  w8 ~0 R) Q& c" e
  276.         {7 r1 l- y: g+ n% |8 U0 h
  277.           file=(*p).second;6 L5 W4 M) Y+ V+ H. G* S9 I
  278.           sprintf(filename,"(%s)",file->file);
    : Z5 B3 ?/ Z; x* I; |( J4 j
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " x' z9 x0 R, @
  280.           iCurrSize++;  m3 \" p3 H# L% N
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    + Y7 @* L7 W' @3 Y$ W$ s& @
  282.         }
    ! M& n. w5 t3 A2 `- u0 B3 w- x
  283.       }, o3 [/ j& Z, f4 A( D2 `6 D
  284.       unlink(".\\update.txt");
    ' j. P; Q+ X8 d) n) i
  285.       unlink(".\\update.tmp");; Q+ p3 ~* \7 F: U; f3 K# n0 w: X2 U
  286.       Fclearf(".\\checkversion.dat");% \: k5 C( j2 w4 O- I# m
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ) s7 L4 \0 }$ H2 A
  288.       if(UpdateLocal.size())
    * h" Q+ B: v7 [/ H$ t
  289.       {
    ) B/ k* w% ]2 x& P1 M% L2 U8 O
  290.         UpdateLocal.clear();- m# H9 B9 O8 Z3 f: M4 {
  291.       }+ L3 b. O1 _: ]+ ^) P& g
  292.       if(UpdateFile3.size())$ r% ]1 P, E9 g7 x7 a
  293.       {  g/ Z6 E0 s1 c8 }
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% k- m, b, {8 c, m
  295.         {
    7 S) v- c; B% b- ?1 U  f
  296.           file=(*p).second;
    + o1 u$ v/ w% h7 V
  297.           free(file);4 a/ ^6 c7 T" C1 N  g: |# }: j
  298.         }
    $ H  ]1 D: j5 b6 a8 _! {( N& f
  299.         UpdateFile3.clear();1 i, Y0 Q) T) e* O; E
  300.         UpdateList3.clear();
    ' Z- e3 ]0 i' X* h" [/ ~* k$ ]
  301.       }9 K/ i. ~) d* s- D6 M
  302.       if(UpdateFile2.size())) Z) T% J- {# i; Q" z
  303.       {6 q1 G4 O& n/ R* c- f/ d. W9 K
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' Y/ I. m& D( A, c) f
  305.         {4 g  @% K  O3 p* U3 X3 Y
  306.           file=(*p).second;
    # e# _/ D; s: d
  307.           free(file);8 X9 O# G( \: N, o6 @
  308.         }' r( ~/ b6 s6 E8 a. c
  309.         UpdateFile2.clear();5 E1 t. i7 K( u* Q  F$ x  @
  310.         UpdateList2.clear();
    ; L9 V9 B7 c$ w$ O
  311.       }! b! r- Y' h3 f4 z( o) h3 ~
  312.       if(UpdateFile1.size())
    0 t/ ^9 X6 f2 j) [
  313.       {( m" x2 U) }9 S4 g
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : ?8 c& ~" J4 E& L" n* r
  315.         {, O/ o1 ]: P8 i7 @
  316.           file=(*p).second;
    . V7 h, t. T/ @8 \
  317.           free(file);
    & R) j, y; C2 e3 j1 `
  318.         }9 x7 b% ~9 E. ?& \3 {9 J+ X- Q
  319.         UpdateFile1.clear();
    & s4 A! W. U0 f8 v3 O+ h
  320.         UpdateList1.clear();
    5 |+ R4 k5 v6 e1 k/ d' i  g; Q
  321.       }
    " B. k& w: l; n$ y1 ?& E
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));( D) T+ N7 w; f, o1 L, }7 m' c
  323.     }
    % Z" p0 ^) [$ E* H4 a8 s
  324.   }$ }) u! G- V1 ]( p
  325.   return FALSE;$ h& Z$ X( u( E' M: y
  326. }
    , p/ L1 k3 K; N) j" n4 b4 z
  327. 2 t' c  R! F& W5 o& H
  328. void CRevAppApp::ClearAll(void). g' H( w. K4 {, |- t
  329. {6 f  V2 p+ T) c/ c% W. j- }" h
  330.   LPUPDATEFILE file;# y5 U' P1 x7 j" _$ z# _4 D0 ]
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 _2 v* m& s5 V9 H' h
  332. ( r9 H- ]- A, l6 z8 w; v
  333.   if(UpdateLocal.size())% {+ t: {- s& E+ X$ ~
  334.   {
    / l1 P: i; k1 D! O2 J% P8 O
  335.     UpdateLocal.clear();) r8 c2 J8 p- P' ^: p, ?, z+ }
  336.   }# t  G4 }2 m0 Q" P; F* z
  337.   if(UpdateFile3.size())# e5 ]6 {: S2 _" J
  338.   {
    & v9 R6 }2 J" N2 A% }9 N" x
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 }% Y5 l* i7 [2 h5 A; d1 R% s
  340.     {
    $ U9 t: ^1 Z' `
  341.       file=(*p).second;
    ' V8 ~" n! n+ U: d8 |3 @1 z- D
  342.       free(file);$ E/ S2 S( F5 |. R& c3 e
  343.     }
    ! w/ K0 m* ~6 t  u1 ~5 ]' k
  344.     UpdateFile3.clear();; i6 l, J1 }  ?
  345.     UpdateList3.clear();9 s1 t: b- M- m2 }$ H9 U- G
  346.   }: C% e  \* U( V+ |
  347.   if(UpdateFile2.size())
    : U# d0 O7 y' s  V! L
  348.   {
    ) e$ ~8 X9 l8 f! I, ~
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! G8 }9 A7 y9 ]1 I
  350.     {
    , e4 h- k$ \) v3 L" d! |
  351.       file=(*p).second;
      G6 v3 B, V4 r  Q" ^
  352.       free(file);
    9 R6 m8 I& _4 q9 |: }
  353.     }3 _& ~; V# g: o) I& _4 x
  354.     UpdateFile2.clear();# J+ K, ?: s) W! ~) ^, \
  355.     UpdateList2.clear();
    $ w  A/ ~4 {& P( m( G: G8 V& r
  356.   }
    * V, i% J5 g% ^' D% F$ X
  357.   if(UpdateFile1.size())
    ! z9 }$ S" @( c4 e
  358.   {/ @; D: ]# j& V# t
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# X( b7 B7 k. `' J! R% s
  360.     {
    3 L" U( I3 ]4 G; U5 `
  361.       file=(*p).second;: ~; q* |) ]  g
  362.       free(file);9 j/ |) ?2 t% o( }
  363.     }3 y+ v4 o4 v) g8 I+ |0 P/ H8 ~
  364.     UpdateFile1.clear();' b1 c* B: w8 a3 `1 R5 b
  365.     UpdateList1.clear();0 F/ G  u  d4 R5 G+ R) w
  366.   }) @: ?$ h! C( z' c+ P: Z
  367. }  6 S4 f6 A4 a- U6 e1 E
  368.   
    - u! ?, U% T' v5 ~
  369. BOOL CRevAppApp::CheckLocalVersion(void)( S. I! U" J; ], |  H, M8 r
  370. {
    6 l. ^+ g; d; h' H( d3 [+ h/ _% Y
  371.   int c;
    / W! i& k: u) e; _7 D3 d/ f
  372.   LPUPDATEFILE file1,file2;$ O+ J3 @/ [& w  U" W  q, [/ E$ x
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    0 H+ R9 U- h! j, Q, U; Y
  374.   std::list<CString>::iterator l;
    ! p0 q. ]: y; |& a  n: ?5 K
  375. , L+ t4 i; u5 e$ U5 B( V( o
  376.   UpdateLocal.clear();. y& V  |  G' O0 R$ D) a* a7 J1 ~
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; v+ b8 Y  Q1 Z0 P
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);$ i$ A+ o+ w( {
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);8 H, k/ m+ \) l) ?+ A' G
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 u/ q0 P1 |. W# G
  381.   if(UpdateFile3.size())" e, A% l$ L* q! k. E
  382.   {
    6 o3 v5 {+ Z3 H4 O& A7 M0 I
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
      g+ V1 d; h" u$ J" F
  384.     {
    . _. E5 p% d( z
  385.       file2=(LPUPDATEFILE)(*i).second;
    ' l8 i9 }6 {" j0 L! @
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 x1 F8 d* E0 V! ]( M) T* g" M0 w- o
  387.       {& G0 _! e* P' Q- K5 }" p
  388.         file1=(LPUPDATEFILE)(*p).second;, ?7 X; A' J! T% N. q$ h* o
  389.         file1->vers=file2->vers;
    + O: _) \0 m# U' h& _; d
  390.       }
      j- _* X7 H9 z! s& I3 d/ f
  391.       else3 U) U* \4 z- H/ m" A& ]2 d
  392.       {7 [/ h. c' r( `+ q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 K3 Q' G$ k' A* n
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));- z& Y* f5 q% ?' k. w* ?
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));# B" W( z1 i' z! T" E
  396.       }
    - H# o2 Q* b" i0 Z& \( Q1 G; L  y
  397.     }
    2 R9 t) g5 V  _; A. j, M
  398.   }5 l2 {/ z# M+ x% w# |; L
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 U6 @8 V6 @; O4 o, S. w
  400.   {
    ; Y! u) K. `3 @" l! j0 ^3 c  B) g
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    # M+ ?, ^/ u7 X- c2 y# o
  402.     {" l7 Y( Y! N3 E
  403.       file2=(LPUPDATEFILE)(*i).second;
    - D" G2 `# f  {+ M0 }6 Y
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; Q- k5 i5 x) G4 P
  405.       {; B# R/ N, |) h5 x) D/ i2 [" g
  406.         file1=(LPUPDATEFILE)(*p).second;
    6 E2 z! a8 O# _
  407.         if(file1->vers!=file2->vers)
    ' `& l4 H( d  O! g+ R  Z; p; H$ X% `
  408.         {
    9 v. f" F1 f2 b( _  R
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & O2 ^( k2 B, f" D4 C: w- p
  410.           c++;
    : n: e4 M# s* Y% t. n3 h
  411.         }
    7 m# `8 \8 Q( e' j1 [8 N
  412.       }
    & z. w3 J. |6 Y# C9 R6 o/ q
  413.       else# a/ _7 Y4 g7 j, o5 t& f. |
  414.       {
    , q' ?, h3 l; T, w6 D
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 Q- d& B; S& a( f8 K; q- O, |
  416.         c++;
    ' q& ]: R/ S: k6 v! z+ ?
  417.       }
    $ o. A7 t% l( Q  I4 c. x; P
  418.     }: E/ |4 L) I- Z% k4 e
  419.   }
    % h: B, _9 z# |$ j5 B+ e& s
  420.   unlink(".\\DownLoad\\update.txt");* K& R2 j7 |: f; G% n
  421.   if(UpdateLocal.size()) return TRUE;, Y3 C" m: ^( D9 x1 [. ^, g9 M
  422.   else                   return FALSE;' C% J  P0 p) i* h1 @
  423. }' |5 f, {% O* C

  424. 1 a( u  L0 o  g% T# ~7 p* Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"3 N& F: b$ T7 n  j$ b
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - v/ E- C& O  e' X* i+ D* ?3 Z
  427. - w% q4 d5 Q. |) U2 s7 l
  428. 8 b6 {& R7 |+ i% i) S; f
  429. ) O! r% X1 O$ z0 u% R
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    : E: b! G' L: {  B4 G) N
  431. {
    1 Z9 _. j, K+ M; F1 C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;! P) ]8 m; U! l  \6 A5 {
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)/ z8 W- c; D5 J/ s; x8 ]
  434.   {
    1 ], P+ o7 [$ c3 S& Y/ z
  435.     char szLanguage[50];
    - ?* J2 i+ T. F7 k6 S2 ^
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, l. X7 Z; H. V' v; ]- `
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) ^1 ?+ {( y8 |1 m: S: ^
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 {8 d9 N, r. g: c7 D9 H- T( q
  439.     else                                   m_iLanguage=ENGLISH;
    - z5 \+ \$ L6 m) J
  440.     char szRegister[100];4 [3 A( ^. ^; O0 X2 P6 d3 F
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 q" z2 L4 y2 ^
  442.     strRegsName=szRegister;; ]2 A# V- j' X6 b6 B% u9 T6 F2 h
  443.     char szPatchURL[100];
    , @5 |% w0 u* b( `0 p
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) \; n; z3 _  N( P1 A
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    % _* z& g! Z# P2 k. `% \) P
  446.   }% R& g6 v& a5 X5 `( {5 a/ `
  447.   else
    $ ^! ?+ f/ r/ r( p: `9 i
  448.   {
    9 T8 k% ~( q! m3 x! `7 s# p4 l& f( i: N
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# O! Y$ \) c8 y" H0 b* K# U4 ]
  450.     strRegsName=DEFAULT_REG_URL;  v% R: U, _' z" T8 z
  451.   }
    / _. x, ]* I/ W3 K4 p8 S7 L
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    " z% T0 E5 ]+ S% L! S
  453.   {
    ! ~* I2 x! E1 W0 ?4 C
  454.     char szIP[50];
    9 b9 ^0 N& b+ e0 _
  455.     char szDIR[300];, Z4 J9 r" Z, c  s1 z% @; ?
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    $ P# P0 r, J$ y6 o
  457.     {% Y7 X! _. k3 V  u
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & U/ ?. v9 t% P# q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");) G' D( E% O! t8 U1 w: K
  460.       strHostName=szIP;4 \! B8 z% ]# {7 q3 ^, W2 c4 k
  461.       strHostPath.Format("/%s",szDIR);# m/ M5 x$ F5 E7 d! X. {. v& u
  462.     }9 E* |) f5 J( ~0 g2 P  r
  463.     else
    $ C: z2 O! g8 u' ~  O
  464.     {
    8 W/ k4 L8 ~) a
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 U2 D" a" ]$ V. Q9 ~" c6 _
  466.       {$ n+ N  [) |' _
  467.         char szLanguage[50];
    4 _2 r" o! J% r# N; z/ ?. j% K
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 Q  v* Y% \0 D5 c, U$ |9 W2 D4 j
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 o6 [  I3 u$ s' c6 T( z
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . h& L. m9 a& A/ B7 }
  471.         else                                   m_iLanguage=ENGLISH;
    , v# E9 |. O6 A3 H9 r+ ]
  472.         char szRegister[100];  q$ x' [+ G. {/ l% z4 J( ^) t  C
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");( _  }2 D9 c4 r5 @; J
  474.         strRegsName=szRegister;: _$ |7 ~( P4 T
  475.         char szPatchURL[100];* y3 K, q# B. e; i9 u  o
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( `5 P1 v  x, Q' L( I! m. i
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 t7 ?' v/ {2 V  W7 B
  478.       }6 \" F5 I; `9 |) O  f
  479.       else, e( `0 T4 |1 \0 @% C% n
  480.       {+ }9 O8 }5 q3 c- y9 u1 ]. ]/ O8 C
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) d! L! S5 z5 Q* f
  482.         strRegsName=DEFAULT_REG_URL;! s( \& w: I8 k- A3 @2 M' A& r, `
  483.       }3 E0 T# x! v' t6 V
  484.     }
    , I" E  t. v1 b/ G. M6 p' X0 a
  485.   }/ J6 F; m% {) d" C/ G, V, l
  486.   return true;
    5 q* l' t( A0 A. j
  487. }" m, i+ E: U- f6 v% D4 }

  488. % L5 O+ g$ |" N
  489. #include ".\ZLib\unzip.h"
    ; f( b' R$ v0 }/ x# v1 Y
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ; L  o- i; w% L1 k  e; d4 l/ Y, W
  491. /////////////////////////////////////////////////////////////////////////////  _1 {; q3 E) {
  492. // CRevAppApp initialization
    / l! I/ i9 o9 c& ]9 Q

  493. # e- \" o1 v; R* ]8 F1 p
  494. BOOL CRevAppApp::InitInstance()( ?5 R+ T8 X8 X
  495. {8 q8 u% e& P- G! J4 |4 A' c
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];' {$ O, e1 n/ x) d2 u
  497. 1 m( B; {; ^: x+ T5 L* {) W
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);! @6 g" }8 t3 m" P8 S- \4 b* x
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ; H+ Z$ V/ u4 h& Z% v5 ^
  500.   {: X* E  J+ u: T% R" n$ U
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    + u7 Y7 H3 ~  E- R
  502.     GetPathFromFullPath(szPathTarget,szPathSource);, W4 m0 v8 {9 P: f) m5 B- Q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))): Z% j8 Y8 W. X, w1 F, Q& L4 q
  504.     {1 P( L0 e9 K4 z2 s0 O
  505.       strcpy(szPath,szPathTarget);
    : m$ c, U( Z' c$ h1 p: w1 ?( w
  506.       SetCurrentDirectory(szPath);
    , c. S7 G' x# I) H
  507.     }# L) X5 c! u6 w8 u# I% S9 A# K
  508.   }) {) n* q3 a; y$ q' g3 }  B' ^
  509. #ifdef _DEBUG
    : D7 G5 S, v9 ~! a: g. N- c
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" I9 f" L: r( ?( {4 `- J
  511. #else
    - L3 S3 K# L5 {+ H* T" ^1 `1 w5 K& Y, c9 Q
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 N) S6 G* r. e9 t
  513. #endif
    $ _5 H0 W7 K1 q! p- h) k
  514.   {
    4 m- O7 {) i6 b( y! q
  515.     char tempFileName[MAX_PATH];
    ( E. u( F5 G9 O# a
  516.     strcpy(tempFileName,szPathSource);
    - }" j. I! w" B: O  l' B7 r! p( F
  517.     tempFileName[strlen(szPathSource)-12]=0;
    # [0 l# E. n3 t, c/ h, |4 j! Z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    * n- I' H* \1 _  B, w* X0 b! F
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);/ o4 A% E! h5 s. g6 Z; }/ T: z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);2 P9 h+ U  ~+ s+ R4 M7 v3 C
  521.     return TRUE;
    % B+ P/ q' M3 f6 S$ t
  522.   }3 \% l* b% E  X& r" O
  523.   // Nuke 0118: Delete run.exe1 w0 D: @+ U, V: s; Y* Z3 _
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );3 P3 y5 T) ?; ]+ p$ g
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");* r5 k$ s) E# y2 F0 v
  526.   if(!ReadCfgFile("Config.ini"))
    3 E5 U- C5 l1 ^4 u1 X
  527.   {
    : J+ J" N  |/ G6 z  d" \& {
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);- B. ?8 [2 y2 z
  529.     return TRUE;
    4 r0 K+ j7 l' i. G+ M
  530.   }
    ( G, j. V9 R7 J& E
  531.   HANDLE mutex;$ V+ v  w9 P, O2 @& }
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 v. k/ M) i! y3 R
  533.   {
    ' `) v; d4 q( |# H& }
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)8 E# [- A) v0 K
  535.     {
    ! k: O- v; y: Z/ \7 o. k
  536.       CloseHandle(mutex);' p. G" r& k8 y& G+ Z% e, Y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    + q) L0 |, U% s# X
  538.       return TRUE;9 X9 Y! a( h3 b7 }4 h2 q2 V1 D
  539.     }
    : F+ x* Q! b( O- h1 ]# \
  540.   }  
    . W( {" c3 \. D- T' g, j
  541.   CloseHandle(mutex);
    * }4 E; O( Q3 A2 H' u
  542. , q4 S7 c$ g$ o8 z1 f
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    & {! F# p/ j8 |+ j

  544. % ^0 L. T  ^( H
  545.         AfxEnableControlContainer();) j9 I9 X6 ^2 Q0 [9 H. |  W' b

  546. # G9 O5 Y+ p/ |! `: ]7 M
  547.   bCanUpdate=FALSE;
    ! ~# E& ?  A0 G+ n3 _4 q. r
  548.   dwStartUpSteps=1;
    & K9 j1 w' }7 I# w* E2 r. z4 ]
  549.   dwProgramState=AP_NOTHING;8 `4 k# N2 `( ~) q$ I$ n
  550. ! q% W3 o! e3 L* k# m: i" [8 V% |6 H: C
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    1 j( X* f! g/ s# l' w8 M8 ?! c

  552. . w0 i. @) W& t# h$ g8 ?$ a, e
  553.         // Standard initialization
    & \% E# U! F# H0 a* d- u
  554.         // If you are not using these features and wish to reduce the size/ ^% ^9 X: f, F& }7 O2 @# }/ c: J: m( d" D
  555.         //  of your final executable, you should remove from the following; l$ X- M0 e8 A$ @" F7 ?
  556.         //  the specific initialization routines you do not need.
    ! U& ~% @! z$ r7 {% l
  557. + x9 w$ f* J4 R5 |' ^) @
  558. #ifdef _AFXDLL
    4 S/ X4 a% k. w! W' L) z) N) g0 U% j
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL9 y0 [8 S- F7 P$ a6 O% f
  560. #else
    , O2 R/ V0 Y+ k% D7 x
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically- W4 t0 O% n' @& j7 ]
  562. #endif# i/ b0 \* G2 {1 j! N, a

  563. * ^  q7 Y3 B  u" S+ d2 B: Z
  564.   dlg=new CRevAppDlg;
    2 w# [# J0 b# \8 b
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    7 c3 H0 y, u7 w( g
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    6 d" ^& R5 ]/ M) ?3 y
  567.   m_pMainWnd=dlg;  `# ?* ^" f# E; h  r, @1 k

  568. - r. ?% Z  B+ F
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);6 Y0 c; q+ _: ]- |
  570. 9 {1 y- N3 A3 L- s  q
  571. //  GdiplusStartupInput gdiplusStartupInput;
    / D" @  z  ?8 ?5 @
  572. //  ULONG_PTR gdiplusToken;5 o" V: |& n2 i6 f: b3 ^" x! F
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);' m5 u- ?. Y5 \7 @- x7 p: r. i
  574. 1 @/ _5 v8 [8 g! N! g$ G- T
  575. //        CRevAppDlg dlg;2 e. o. h9 w5 v9 D# r+ R% ~. k
  576. //        int nResponse = dlg.DoModal();
    & H$ f2 J3 V/ ^" M/ o$ y) \6 y
  577. //        if (nResponse == IDOK)
    / @) a+ [" O* \% L( v( D
  578. //        {
    2 D! z$ v( ^9 k  }) I/ H( ]$ H
  579. //                // TODO: Place code here to handle when the dialog is
    % u8 d. P! I/ R8 N: [6 f
  580. //                //  dismissed with OK' p% G* M* J/ S1 y* r
  581. //        }
    ' G  ?( u2 ]- u6 T9 T
  582. //        else if (nResponse == IDCANCEL)
      l: g% N5 L6 ]: i0 z+ ]
  583. //        {
    . ]1 b+ ~2 R4 C! u; M! |& \# K
  584. //                // TODO: Place code here to handle when the dialog is
    2 _# G* g6 ?8 W" z( U! T
  585. //                //  dismissed with Cancel
    & |2 Q5 m+ |. o% X
  586. //        }3 x/ B9 B* c+ @5 t( j

  587. # Y+ Y) y' p2 G, J8 @3 o
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    - `6 z" S$ M1 N/ P% }; n
  589.         //  application, rather than start the application's message pump.0 a$ w8 M* P6 q9 S9 H  b: Z3 G
  590.         return TRUE;
    # @4 j# m% {+ p/ u0 e* @2 k
  591. }2 |9 k& l$ h3 @' r7 V

  592. + K( q0 T" j) Q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* R' W5 E' R$ l
  594. {
    , E+ l. ?7 _- \
  595.   int i;
    8 _- c( q' z) C! h4 Q6 N, ^- S
  596.   char *szRet;6 O& K' M& v3 ^6 I# `' k# z

  597. * I% R" _" V7 M0 f$ }
  598.   if(pSource) { itoken=0; sztoken=pSource; }6 U, N3 e# E, C" w" t. O
  599.   if(sztoken): ~6 {, Z+ U+ d4 t1 W
  600.   {
    7 J1 w$ S1 N; I5 d) H
  601.     szRet=&sztoken[itoken];
    # L! q. F. i1 K; a: m1 F
  602.     while(sztoken[itoken])( A2 j! e5 A8 ]6 }' T7 s3 G
  603.     {. a$ `+ E* V. l3 ~  v$ O0 t6 `( F5 }5 Y
  604.       for(i=0;i<(int)strlen(token);i++)
    7 O/ g; N( U0 p* ]2 ]4 s5 o8 O4 i# e
  605.       {( S$ B/ U, v! H1 C+ z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    $ b. g+ e( g, Y5 Y5 ^
  607.         {
    - _+ `; l! i6 b& q" d7 G* p
  608.           sztoken[itoken++]=0;
    7 C5 {# t1 I; m* k
  609.           sztoken[itoken++]=0;
      f9 D6 Z- N5 \* b) X
  610.           return szRet;
    & x3 v& b7 j8 ^0 v# D- P. V
  611.         }8 B5 k' A- u3 A- ]4 l
  612.       }
    ) m  v9 V7 ^5 \' q
  613.       itoken++;
    ) |% ?1 m# j0 E$ q! Y
  614.     }: q9 _1 F5 C. o' y6 I# i6 e
  615.   }  C! e" o) ~" R0 }- }+ _/ q
  616.   return NULL;
    3 x0 y1 r2 C; g
  617. }! J6 d. f. O0 H6 M! g
  618. ( C9 b# E9 n& z+ v) x5 v+ m5 g
  619. void ProcessProc(long Total,long Current)
    - u( z& R# j/ G1 A- r9 f7 ~) |
  620. {
    1 `; W/ M4 \  g8 T
  621.         MSG msg;
    ! X: ?" {! D4 ~( n6 b
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);5 W5 l0 B  x4 H% Y2 g' Z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    $ M3 o4 B4 o0 q. q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    & Y& g/ G) N) Q
  625.         {& H' G# A. ~' z3 u2 T
  626.                 if(!GetMessage(&msg,NULL,0,0))
    4 N" j6 {% n& b2 g/ f" M
  627.                 {
    ; \! T. L7 Z. ^
  628.                         return;- k0 V* e  J. F) `
  629.                 }* B( z' R" S6 x" L
  630.                 TranslateMessage(&msg);% W4 a, [" r( C( P8 ~1 ?
  631.                 DispatchMessage(&msg);
    " t9 s/ G4 _8 j- ?4 i$ o; |+ v, C
  632.         }       
    0 ?0 s: m" S& r# t/ k- Q
  633. }- T$ ]( c( Z/ l# z" k, T  V$ N* h3 J
  634. 2 U$ J; q# Z" a' ~3 U/ C- V" d
  635. BOOL bFirstChar=TRUE;, @5 d5 z5 ?+ g) E# m- W, y6 ?
  636. + w) I6 c9 Z( |4 @
  637. BOOL CRevAppApp::OnIdle(LONG lCount)3 |( f, T0 r" E; P2 y
  638. {
    - |& U: I( G1 ~, g- J, t
  639.         // TODO: Add your specialized code here and/or call the base class
    ! g& s. T0 V" ^# W) n
  640.   switch(dwProgramState)7 ^1 p/ _0 M3 v8 Z
  641.   {% ^/ _* J! Y7 k4 T% i
  642.   case AP_NOTHING:
    * T/ `/ X; p' k, o, n+ g! x- c" ~
  643.     switch(dwStartUpSteps)3 a1 g0 ]* g5 o( d
  644.     {
    " C% @; u7 }  L6 Q+ v6 F
  645.     case 1:
    # b. u( W- A1 @' S- p, n$ H
  646.       {
    0 s! f6 h& y/ r
  647.         int i;
    + J) ?/ v( q( g4 a" W* w
  648.         CDC *pCDC=dlg->GetDC();
    & i0 S$ [: o- H5 p
  649.         HDC hdcwnd=pCDC->m_hDC;) `0 [! N4 P* d& x  [
  650. //        Graphics graphics(hdcwnd);+ w" o) Z2 _( e8 U2 E7 w+ x4 H
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    - a; {- R+ ^# q' \, X
  652. //        INT iWidth=bitmap.GetWidth();
      K+ e1 L0 X( i, B5 [' l" _* Q
  653. //        INT iHeight=bitmap.GetHeight();
    : ~. e0 A9 F( n- L7 t
  654. //        Color color,colorTemp;
    / p* k! m  M! n+ L
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ) l" y2 D# Q" T1 C, t& `
  656. //        {
    / x/ L& x) i/ ~% r: M3 P6 v0 h% p
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)! [& Z* J$ E1 e3 ]' w
  658. //          {
    & u6 V' q. h/ }8 J/ A' _. e; r
  659. //            bitmap.GetPixel(iColumn,iRow,&color);5 w; n, X! f; a! f1 r8 A2 ~
  660. //            colorTemp.SetValue(color.MakeARGB(
    1 B" \1 G7 U( a
  661. //              (BYTE)(255*iColumn/iWidth),
    4 K$ n/ ]7 Y3 o' @
  662. //              color.GetRed(),
    9 ]  C# \/ L5 [/ E  Z8 B5 v
  663. //              color.GetGreen(),
    $ H, H' X: w" Z) D! M* u
  664. //              color.GetBlue()));
    ; W% I+ J+ p2 ~$ D8 k/ I# E  R/ h" l
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    1 [/ S) m  e- n3 H
  666. //          }
    * n3 m0 H0 A  T2 z/ L0 J! K
  667. //        }
    8 @8 x) I) ], s  b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);7 k8 l) b  r8 G$ k2 G; X/ h
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & X/ i" q: \4 ^2 M
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    : O; N" q3 @1 w
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");  y8 b+ f- f. {, u  ?
  672.         for(i=0;i<240;i+=8)3 h! m9 Q+ m6 P7 R5 T+ [
  673.         {$ ^2 E" v( ]% v& r
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      t) |% y. L. ~% R4 u, k& [5 H
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 n% B4 _% |; C; F: |* [
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % ?, R4 O) [( s* u7 _, T
  677.           Sleep(33);4 C4 q, V* h# X2 M& R' a
  678.         }0 g2 K* I" @. _9 G
  679.         Sleep(1000);
    . z. _, q+ e0 Y! B! z
  680.         for(i=240;i>0;i-=8)
    , M+ U$ R  X& X
  681.         {
    5 A) S7 `) Y- X: c& ?$ B
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - h4 V& `. z8 ~9 N
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& g2 @2 `/ m2 x- |0 k' a0 Q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & k1 {0 u( B4 Y0 B0 J1 z+ g7 D
  685.           Sleep(33);
    , d* v: L9 U) Z8 O5 m* ?# H- X$ `
  686.         }0 M  L- N1 H1 J( {0 Z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    : A% B+ d3 Z; w7 d- D
  688.         dlg->ReleaseDC(pCDC);
    ! g- e- c- w2 v/ U. [
  689.         DeleteDC(hdctar);, B( `, m0 o+ k. C7 y# \
  690.         DeleteDC(hdcsrc);
    2 d8 b' a1 P. X: n8 N8 a) j$ x
  691.         DeleteDC(hdcorg);% f9 H6 x, n- t# W* j" t2 n8 Y
  692.       }
    6 [7 X) h3 [9 ]2 f
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);. m2 V) e) R& b4 b* i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" _5 Y# q' |, g% Z/ I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");  a/ j  s# C% J
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");/ f1 T% G0 t5 H; z$ B# r, c( p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 \; @5 N- H1 i* y
  698.       if(!Dn.Connected()); I) K7 E: y" t9 X1 K" H, z
  699.       {  F6 n0 I+ l8 x  o' [% `: l
  700.         dwTotalFiles=1;' Q, f! ~7 E# M# C( X" Q! g
  701.         dwDownLoaded=0;
    ' v! s0 B  v' W, F7 W
  702.         bSilentStep=TRUE;1 u# M2 F9 K2 h: Z; H- P1 \
  703.         bCompressed=FALSE;
      Y+ x5 T4 R0 G3 I. `5 ~
  704.         strExtLocal.Empty();
    " i+ F; o$ F' ]: A5 g/ i0 N2 x
  705.         strFullName="readme.txt";
    2 G) S  O. g; Y- N% ?1 t1 c
  706.         dwProgramState=AP_CONNECT;7 q8 v  H2 S( N% F: X$ `% g5 @
  707.       }
    8 g$ e1 G% l+ t2 ~9 e
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();  f% ?4 m) @* v: p
  709.       dwStartUpSteps=2;* E# H4 o; o6 M( X
  710.       break;1 t  O# P7 p2 c6 N
  711.     case 2:# g, D6 w7 _7 E$ b. a" W2 L2 _1 A
  712.       {$ _9 e5 T9 M0 C2 R- P4 E: V* g
  713.         int iEOF;
    ! K5 Q7 \1 m! r8 ^9 Q# R& d, f
  714.         FILE *fp;( j' d4 z( B. n: l6 v
  715.         char szString[512];1 Y4 K9 B8 I9 C+ H9 L
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");0 ~$ d6 O1 w3 W0 s
  717.         if(fp)/ B9 Z9 y5 U# L, p4 \/ c. s
  718.         {7 y' E# P4 \( Z, X6 L6 @
  719.           do8 A9 P; Z0 \1 Y3 u- q
  720.           {
    7 y* Y5 g/ V: k7 N
  721.             iEOF=fscanf(fp,"%s",szString);
    # T4 w9 B/ B% Q2 N
  722.             if(strlen(szString))# Z: i5 ?+ o0 P, t( T* w0 Q
  723.             {
    ; ?) ]7 j3 k* D  T" C" N# h) N) M
  724.               if(bFirstChar)
    * f" u" w: |. N; f, z" Q
  725.               {- a2 M+ _  _. H3 Z5 ^# K7 @6 e- u2 B- E
  726.                 bFirstChar=FALSE;0 p1 \  c, o2 w& a1 a' |1 P- _
  727.                 bConnectIsBig5=FALSE;
    + D2 Q2 c/ f+ S* K8 e0 T$ I
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;  A3 `& x% `9 l2 K" t) R4 ?: g$ e
  729.               }1 ~- W' T& J4 \
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));+ |2 K3 A. u1 S* d7 R* V( u% M
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    + F) m8 |, b# T. R3 Q1 ^, g7 E* c
  732.               dlg->m_ListText.AddString(szString);8 ]$ \: o$ l3 d# h, X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 e) _6 i. `" H; T
  734.               *szString=0;
    ) b' u4 B4 B* i9 d6 W& s9 G
  735.             }  v7 \3 x; f4 O% Z
  736.           } while(iEOF!=EOF);) J2 E" Z# R% H: l
  737.           fclose(fp);
    ( b% Z$ u1 n5 F( R+ y
  738.           unlink(".\\DownLoad\\readme.txt");: t/ N/ y4 q. R' p4 N# G7 n
  739.           dwStartUpSteps=3;: D# @& x8 f0 x+ J1 d1 H! {
  740.         }
    ' q4 q* Z5 F: O) G
  741.       }
    ) s+ Y  m' G" C3 C2 j" k. A
  742.       break;
    ! k- w; }1 I- k; l5 s
  743.     case 3:, B* x" c  z1 o$ ]" J7 c
  744.       if(!Dn.Connected())9 V' r$ I. {! \* ?  G5 ]
  745.       {1 W7 K9 x- L4 u4 X4 Y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    8 v7 s0 d1 o' L: C
  747.         dwTotalFiles=1;/ {+ u2 G) E- r; N4 y5 F3 X4 j
  748.         dwDownLoaded=0;! u- I2 u; A1 M3 V
  749.         bSilentStep=TRUE;3 e% P& R, D0 q: P2 I2 H5 h) v
  750.         bCompressed=FALSE;
    - y2 B3 P( H  L5 ?0 \: W
  751.         strExtLocal.Empty();
    / G- x8 K) ^$ M# C6 C
  752.         strFullName="checkversion.txt";% k/ ?4 U  b- Q+ e
  753.         dwProgramState=AP_CONNECT;9 A/ ^7 N" p* m8 k+ r& [
  754.       }
    , W) R2 T5 `+ e+ {; k! n
  755.       dwStartUpSteps=4;
    . A, u0 \/ F& ~1 _" h
  756.       break;
    ( @  {: r# H) \2 U
  757.     case 4:' ?+ _6 Q& i1 `
  758.       {$ _8 C. z3 r8 e4 m* K2 S* D
  759.         FILE *fp;
    ' \& W/ W% g/ ?0 {7 m* m& ^  J
  760.         char szString1[128];
    1 }% }( `9 f! q; H  H5 s
  761.         char szString2[128];! x1 c4 G8 A# X- W) a
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 B; B2 x0 ^- V' Q9 e
  763.         if(fp)0 ]7 h6 O6 J* O$ l5 {
  764.         {
    % Y: U! V; ?3 p) \( s. t
  765.           fscanf(fp,"%s",szString1);
    7 D; R5 y/ ?/ I
  766.           fclose(fp);4 n' |; K' E0 c4 z
  767.           fCheckVersion=atof(szString1);- Y& |. P1 d) Y( Z3 a2 U
  768.           fp=fopen(".\\checkversion.dat","r");
    & W/ l, p/ U) F. y$ {" x
  769.           if(fp)0 C. U' s- e2 E# ?( m1 [
  770.           {
    5 m, l( K0 y+ ^1 {& g
  771.             fscanf(fp,"%s",szString2);
    1 O% d' s$ u2 O3 W
  772.             fclose(fp);  s0 a8 c. Y1 V/ b9 p
  773.             if(atof(szString1)!=atof(szString2)), n3 Y# V5 V. r+ X) c. d
  774.             {
    ; }" ~  w& L" x) K/ g  Y& i
  775.               if(!Dn.Connected())
    9 q- I+ C7 t0 \; A- m3 u- Z
  776.               {( Q! B6 J( `( o& f
  777.                 bFirstUpdate=TRUE;9 y) c/ [* I' V, a' q
  778.                 dwTotalFiles=1;
    9 l3 m# |$ |3 p% ^: v' M
  779.                 dwDownLoaded=0;7 n0 Q% T4 `' H: c) E
  780.                 bSilentStep=FALSE;
    2 T; T& }& o7 k
  781.                 bCompressed=TRUE;$ X- |* _9 O! r: H" ~% L8 x: ?
  782.                 strExtLocal=".\\DownLoad\";
    : M  g" z. b) n' s0 l4 r
  783.                 strFullName="update.txt";
    0 g5 ^  w2 Q8 C; b  \1 m
  784.                 dwProgramState=AP_CONNECT;
    - ~$ w' o" y. b8 Q4 a7 \
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . h# L$ O0 U; R+ z. P' @: Z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " \0 `; O! l4 F+ w4 Q! Y+ w
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " H; A) \2 y8 ^+ g; P
  788. " g" d0 R" ]" ?; \' w
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 f) K' \9 y! h5 @3 F' C% [
  790.                 unlink(".\\DownLoad\\checkversion.txt");# Y) v8 W8 f- m
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    $ s, ^; c: L8 _. `* Y4 y6 R" U
  792.                 {
    6 O5 x# u, y# E9 t# G+ F7 P: U
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 T0 e$ ~3 I. x) D3 L, V8 _, t
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    & ~2 P7 {: y/ D" A0 N7 w  }
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    3 e1 H$ F5 d8 r* I% t
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. m+ g5 k6 X5 t3 \

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

! @8 c# O- s- r& ~" v! X9 F- Y

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-17 04:07

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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