CSUpdate.exe源代码

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

7 ]% R8 e8 A% x7 g! `
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ' {4 T0 B/ _6 h* r4 E
  2. //
    2 n0 Z- i1 }! a) G6 ?

  3. ( `) W; l' j' m4 v9 Z3 f
  4. #include "stdafx.h"& p6 J' G+ G/ _+ J

  5. 4 R& v- B/ K$ r0 P0 O$ Y; B3 C0 f
  6. //#define UNICODE3 b2 _( F* q8 U4 [
  7. //#include <gdiplus.h>: u( c, q9 V4 V/ U! |
  8. //using namespace Gdiplus;; I" R! d; H: O; m6 ^6 y
  9. 7 Z9 n, ~; K8 m2 k: y
  10. #include "RevApp.h"
    . N' r( S$ E) _
  11. #include "RevAppDlg.h"
    " {: @1 n! P5 ]8 ?* ^0 ], Y$ t

  12. ( G, ^  i  C% _3 _+ z  G
  13. #pragma warning(disable:4786), m+ r( @7 l9 E" D7 a; n1 A2 g
  14. #include <map>
    ; B  C% L6 v) c/ M- L/ r
  15. #include <list>; }5 S; ?7 c. k0 j4 q2 o
  16. #include <direct.h>
    0 |4 X% @7 d$ z0 p5 L8 x; A2 \
  17. " L" R3 A" ~6 j
  18. #ifdef _DEBUG6 J) A9 A1 a0 H" }, G
  19. #define new DEBUG_NEW# g! l- @, b& g; q, F$ g# W
  20. #undef THIS_FILE# K8 O* m6 h: @  v4 j
  21. static char THIS_FILE[] = __FILE__;, a6 w; T! ~% [1 l" P, e0 [
  22. #endif# j8 j6 @1 {. V" ]
  23. #include "SkinResDef.h"; U( Z  Q1 L3 T
  24. #include "ChangeBG.h"; m+ ~0 i5 n$ M) C) Z
  25. #include "AFXINET.H"
    5 b+ m: u0 b% ?% T

  26. $ ?; s% @- `0 B
  27. #define TRADITIONAL_CHINESE 0
    2 ?0 q" I# e! z  y6 X
  28. #define SIMPLIFY_CHINESE 1
    $ [/ j$ v6 N- |$ g& U2 i; h6 ]9 n1 U
  29. #define ENGLISH 2$ S) [& l' I2 m1 }) N$ z  @0 A8 z
  30. int m_iLanguage = ENGLISH;& n( l6 e  L0 Y# _( e  z; r& F* S7 M
  31. /////////////////////////////////////////////////////////////////////////////: W1 k' t0 Z2 v8 H$ c) e+ ~+ j& a
  32. // CRevAppApp8 k, \6 K2 C# [" a. T8 u1 D8 N0 m
  33. 3 G  L0 Z3 d- K0 K+ y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)6 [. ?) A( W& S3 A1 u
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) C& P! v! b$ E$ ]! Z! Y4 h: ?$ q- O
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.7 l6 q! t7 y- L2 f. e* ~
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    2 v" F! C/ d7 g/ r6 c
  38.         //}}AFX_MSG
    % i2 r3 a5 T. e& B1 p
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)* n2 D) E' j, d$ c
  40. END_MESSAGE_MAP()+ }( M+ R& J+ w7 n

  41.   S8 R- t: R* I: n1 V2 E/ W8 ?
  42. /////////////////////////////////////////////////////////////////////////////
    ; H" y* H1 p4 D8 p' l0 U8 P) T/ u
  43. // CRevAppApp construction, i/ k2 p( e9 }! C

  44. * n% l  K7 z$ Q. `# i" |* ~
  45. CRevAppApp::CRevAppApp()) i2 V8 _6 R; V0 [0 D5 y4 I) d$ w
  46. {
    ' h* L0 M- z8 X0 s0 d" Q. `! n. ]
  47.         // TODO: add construction code here,
    5 k: }2 C5 R/ i! i
  48.         // Place all significant initialization in InitInstance" s' c9 D" p! x! [. d5 }
  49.   bDisplayIsBig5=FALSE;; Y- c6 o6 G9 v# F3 V4 A
  50.   bRestartUpdater=FALSE;
    ! w* M: ?- s) P* u
  51.   bFinishUpdated=FALSE;
    + j, z# h+ R" @6 a% d2 A
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;% _+ C+ T8 W" m) y! \# _
  53.   InitChangeDataBig52GBKS();
    * X  s' v" z7 x
  54.   InitChangeDataGBKS2Big5();
    * V. Y" w  E3 h; @; a# q9 |* W
  55.         //
      r7 V" {: ~% V1 H8 I( ~5 C
  56.         bClickRunExe = FALSE;
    . x8 `6 [3 u6 `; L( f6 ]
  57.         //: q' C( O: z+ E  N% k, d4 S6 [
  58. }2 f$ E& I# A2 i& @
  59. - v! I1 m' J+ h- F) h3 n
  60. CRevAppApp::~CRevAppApp()
    ' E! E" G, A7 j+ e  f. C+ V
  61. {
    4 R% m6 H% g9 n* _1 h  W
  62.         // TODO: add construction code here,3 k* [0 w" z; O/ R
  63.         // Place all significant initialization in InitInstance7 _4 a% M% Q0 _" E9 w) q! j; g
  64.   EndChangeData();. N; j! j7 A" i1 ~) v1 V/ O
  65. }; D! t8 P2 F! A

  66. * i  Y: |. b" E; Y/ C$ A& X
  67. /////////////////////////////////////////////////////////////////////////////8 v, O6 K* V0 U9 h& ?( X
  68. // The one and only CRevAppApp object( C% d: p" c) T% F! _
  69. 1 g* F) j5 d7 f% r
  70. CRevAppApp theApp;
    5 a$ A# u, U; @0 d: y5 {2 S5 M3 Z9 T

  71. ' F3 R1 y4 t  B5 \5 h; t5 m
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    4 ~' T% W& S$ `. B- P% s% U  [
  73. {
    4 L# w0 K2 K" x, J6 ~
  74.   int iEOF=0;
    , A: s0 g8 }! a# F/ I8 l, T+ g+ B4 J
  75.   char szTempName[MAX_PATH];" B5 L; e0 Z9 Z* ~" Q
  76.   *szFileName=0;% q6 h+ a- w0 f; o# B
  77.   iEOF=fscanf(fp,"%s",szTempName);
      ^  {# O) ?4 }5 q9 d6 O4 l
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    % E6 ?/ D9 T/ o6 n, ^7 D# B# h6 j
  79.   {2 j$ ?/ C: @$ B0 I) w3 W" h
  80.     strcpy(szFileName,&szTempName[1]);
    2 d( m3 m9 L; s3 g, Q( Q' X
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 v$ t# J% p* n# Q; ]- R' r' M
  82.     {
    ! |, P! P. r7 t
  83.       iEOF=fscanf(fp,"%s",szTempName);5 B; a: l  c; F4 C
  84.       strcat(szFileName," ");
    / Z, y8 _5 h3 c, ~. q1 }, u
  85.       strcat(szFileName,szTempName);
    / k3 B# X, t/ A. q
  86.     }
    4 i9 J: q& W# p# L! J4 X
  87.     if(strlen(szFileName)>=1): _! F8 e8 d% s8 _( L
  88.     {$ C2 B' W! h; O, `0 e9 l0 `
  89.       szFileName[strlen(szFileName)-1]=0;. d) D' M; S' q7 z. B
  90.     }
    ' {7 K7 b+ s! ~- j0 x7 _. F6 e
  91.   }# o+ @: F) [$ G1 o* F
  92.   return szFileName;
    $ ^- t2 c8 R+ h$ \7 Z& i
  93. }
    7 s# B; x, a" p( Y) I) }
  94. 6 T! U/ S# z+ r0 \" H1 _2 a- N
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)/ z1 H6 E9 i9 f8 t* ?% i
  96. {$ Q4 s, E5 E. T0 o: m( Y* A! H+ E
  97.   FILE *fp;% W& G- w7 ?5 n& ~$ l" u9 m4 h8 \6 Y
  98.   char *key=NULL;
    : N" n! u* z6 o  E3 w& G
  99.   char version[MAX_PATH];7 x7 U: g: D6 h3 ?
  100.   LPUPDATEFILE file,olds;( Y5 T$ f% f3 d+ j& T* \
  101.   std::map<CString,LPUPDATEFILE>::iterator p;( m* Y0 I; f; y) f! x; o7 d" f2 @/ X' s
  102. * p5 s# s$ w/ c/ m* k! Z
  103.   UpdateList.clear();. S/ \" h" V: K; g) z9 x0 B9 H
  104.   UpdateFile.clear();
    ) j4 C: ^0 m3 J9 r  n& M8 T( `
  105.   if(GetFileAttributes(filename)==-1) return false;' z" b/ `# t9 b
  106.   if(!(fp=fopen(filename,"r"))) return false;
    4 b6 x& r% J2 ?
  107.   fscanf(fp,"%s",version);
    : X' V' v, P: f# o
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }. ~3 c: O6 c) l3 W
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ; d8 j+ x* @+ d# R) m* I  b2 G, D
  110.   {
    6 `9 @6 f! [" j$ z% O5 v
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 K- U. ~# D( {. o- A
  112.     fscanf(fp,"%s",file->path);
    ! O& o6 G$ n" N, S+ `% B
  113.     ReadFileNames(fp,file->file);: R8 B/ ~* [! g, X4 Y7 \8 n5 p& f
  114.     strcpy(file->full,".");
    * u& x# s. l, @
  115.     strcat(file->full,file->path);& A+ E2 k* s" m  N2 p
  116.     strcat(file->full,file->file);
    , H! z4 @4 R/ O& x+ x
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ' V: g/ w. }" D& N: r
  118.     {
    1 [% J1 x+ I  w2 K* M5 F* l' A
  119.       file->vers=(float)atof(version);
    , S( C, ^5 D6 q0 a
  120.       UpdateList.push_back(file->full);
    ) X, l) V- r2 w& I. ?5 n. J. V4 Z
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));% ^" o; i+ E* R2 K2 N6 m
  122.     }1 a0 a. R* }9 G" h6 V3 b* p
  123.     else
    9 m7 _& P$ e( H( j# _5 T  y# `
  124.     {2 X9 A! {3 c1 R. q6 a0 z' x5 x
  125.       olds=(*p).second;5 z+ K* N. ?9 p! E7 t# `4 m# `
  126.       if(olds->vers<(float)atof(version))
    + L0 y: @7 ?' z" \6 V
  127.       {
    . B6 L6 o7 S5 x7 F
  128.         olds->vers=(float)atof(version);
    " Y2 u  C. J) S; ~
  129.       }5 p' s# d. D; {
  130.       free(file);1 W4 H. t+ E0 V) F
  131.     }/ y; w1 |2 ^, \$ ?/ q6 K
  132.   }
    & H' S7 s/ {/ G0 ]: F
  133.   fclose(fp);0 o4 t" E9 ^3 U( u4 ^
  134.   return true;
    , s: t1 L0 s# z5 r
  135. }" a9 k- H- s' F& A- c, Q
  136. + m& q' }7 C% X+ E% ^
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    & ~% y" J  C, A6 T
  138. {# l- h/ w$ O# ~9 K3 d" M
  139.   TCHAR  szFull[MAX_PATH];, ~0 K: R, e/ @
  140.   TCHAR *token,*inter;
    ( R4 f# [% m& r
  141.   *szPath=0;
    " u( T8 c5 }- k9 q  A$ c1 {$ r2 E
  142.   strcpy(szFull,szFullPath);
    4 [1 s+ H! p0 z3 V6 r* _- l
  143.   token=strtok(szFull,"\\/");
    4 z0 n1 \8 ?/ @: ^" q* [
  144.   inter=token;
    4 l& S1 ^$ W9 ~; w, I
  145.   while(token=strtok(NULL,"\\/"))5 Z% Y  F% @% V! O! a
  146.   {
    % g4 X0 q9 M$ M& P5 j6 \) ~/ f1 \
  147.     strcat(szPath,inter);
    " I1 o, r, T8 G* k, l
  148.     strcat(szPath,"\");7 ?- b) |( J4 T( F
  149.     inter=token;- M8 B( b8 K; X8 z- K5 s
  150.   }/ Z- X/ Y( {) [; M: O
  151.   return strlen(szPath);
    ! q3 K1 l+ s/ e8 Q$ ]4 e' u
  152. }7 ?3 y: @) B1 [( |' ?

  153. 8 s; o& L) w$ A8 G
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase), D, ?3 ?, @) b- f. W9 p+ z' y1 l
  155. {7 P  f! g7 d  G; N, ?
  156.   DWORD attrib=GetFileAttributes(Target);# j5 ]0 x" \3 N! R6 K2 O. Z. d9 S
  157.   if(attrib!=-1)8 C  n6 f  Y2 h# l: A
  158.   {! X8 o+ h9 N0 ^1 ^5 [; k
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
      ?2 N3 C' N1 d
  160.     {( `; O! {6 y. |1 _7 x4 T% J
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    4 e& [7 n3 c+ t
  162.       SetFileAttributes(Target,attrib);
    9 D" i4 ~4 f4 p4 r
  163.     }  P3 o2 F- s% x* z5 E- v+ W
  164.   }
    4 @, c) y8 }7 X5 V3 C
  165.   CopyFile(Source,Target,Erase);+ p1 I* O  x: l2 l' l
  166. }/ ^. O; K; e0 k" t! _8 O
  167. " ]3 E  ~/ |$ N3 q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)1 [1 u/ c/ j; o' P+ @8 X/ m
  169. {
    7 F) D6 d- l! Q+ ?% A% N/ f
  170.      FILE *fp;4 k) `0 p* ?* m. d0 p% ?/ {
  171.      char  szBuffer[8192];
    ( F# w2 ?* _# C3 k$ g$ E9 E
  172.   va_list  argptr;
    / V* e8 Z, V4 B
  173. " n! }2 e% o5 R% L7 g' I
  174.         va_start(argptr,message);( i+ \3 K% U1 r
  175.         vsprintf(szBuffer,message,argptr);3 o% f2 |; [" ~( l& f( R
  176.         va_end(argptr);% I5 U4 Z! v1 |  J" X
  177.   fp=fopen(FileName,"a");
    * H7 n! q( V1 z6 S  c8 J! u! ^
  178.   if(fp)
    9 T, g! v9 Q8 Y0 K4 C
  179.   {* A0 f2 ~8 M% ~
  180.     fprintf(fp,szBuffer);9 d7 @. Z. ~! w  _7 r: ^5 O
  181.     fclose(fp);2 d0 s* |3 s4 W3 a& ~5 ~
  182.           _flushall();. ^5 ~- _6 G3 @$ A
  183.   }
    3 M- Y5 i/ O0 M
  184. }
    $ ^  c0 a& Q/ @. {- N. z; U
  185. ! v, a, f5 m/ I) }
  186. BOOL CRevAppApp::Fclearf(char *FileName)5 F6 {" n7 T: ]1 ]* _
  187. {' h$ r# Y, M, p  U& d
  188.      FILE *fp;
    9 j( x% U* t' x2 }# w
  189.     DWORD  attrib;6 j( w* z) M2 T& [1 m& e
  190.   attrib=GetFileAttributes(FileName);
    , V5 I+ C, @5 E3 m! ^9 J( N4 B
  191.   if(attrib!=-1)
    , `, E" e+ V' C: w" ?1 Z" W! T
  192.   {
    - f4 j2 x4 _, T; \+ _
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);2 G% M5 u1 T) Q
  194.     if(!SetFileAttributes(FileName,attrib))
    ! w* ?( Z# t! ?" o1 G! Q/ m, c& _
  195.     {/ d% o  e  E7 H! Z9 j* w5 s) t" a
  196.       return FALSE;
    . U+ F1 e3 E- s. |) |" k& z5 \
  197.     }
    $ j$ V8 b& b7 D. o/ S7 l; n
  198.   }! B2 f4 L( ^/ r1 Y  _
  199.   fp=fopen(FileName,"wb");7 |$ N8 D. s! _  S2 V1 m" P: y
  200.   if(fp)
    ( n( w8 c! y9 U, {: h  x" i
  201.   {
    " q, Q! |& Q  A. Z! z  m7 P/ n8 ~, R4 i
  202.     fclose(fp);
    , w% ?: G$ f3 ~7 R7 x
  203.   }
    - X; D+ Q3 c9 v, B( \6 x8 m
  204.   return TRUE;) G9 f; [9 l' R& x/ x
  205. }1 D9 n2 K6 K  I0 u7 K% B3 K) n
  206. 0 Y  o7 c9 h, Z0 t) m* `. i
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    , A' b# s5 q* \! T# C
  208. {
    # i$ P6 A0 I- F5 F3 |  d* z6 F
  209.   char filename[MAX_PATH];3 p) M4 X6 Q" T  ~
  210.   LPUPDATEFILE file,olds;
    4 K; a$ k" p9 f# X0 N7 N
  211.   std::map<int,CString>::iterator i;
    9 Y( C5 N4 {+ _$ \) C5 j
  212.   std::map<CString,LPUPDATEFILE>::iterator p;+ I* q, M# e7 f$ F
  213.   std::list<CString>::iterator l;
    4 \5 i  p1 D/ m: Y
  214. ! F4 q% a: N  E9 h3 ?6 C
  215.   if(bFirstUpdate)
      [" z! i" R9 N  T" s
  216.   {. k. J( b; r! m& J
  217.     dwCurrFile=0;
    ' e4 L0 {, g* j! l
  218.     bFirstUpdate=FALSE;1 U7 u" d# q- t! E, M
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 n) A0 ^. G, ^  ?( }8 a
  220.     {
    5 }, X9 ^0 L6 M( p# j
  221.       dwTotalFiles=UpdateLocal.size();0 X+ @" |: e: U5 S$ m
  222.       dwDownLoaded=0;# G. ?/ x- G: G2 s* d( }
  223.       bSilentStep=FALSE;
    8 I( ]! d: S+ H3 G$ F5 M  i" m
  224.       bCompressed=TRUE;: {) g% S3 u4 \. L) g( W0 p# Y
  225.       strExtLocal.Empty();
    : l* I: R) P: S
  226.       strFullName=(*i).second;. E& U. J7 [- _; f% O; ~1 U& g
  227.       dwProgramState=AP_CONNECT;# I5 L7 a5 W5 d* W
  228.       return TRUE;
    - `8 n' ^& z' n0 ~# w9 J: t
  229.     }" C7 R. t# y/ w! U% }+ {1 a; u6 b
  230.   }& M) O' }% {9 C4 i3 u# M7 W
  231.   else if(bRestartUpdater==FALSE)" G9 M7 Q, D/ j" ]
  232.   {0 M6 X+ U& }2 e8 S+ X
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    " L- Z& R0 _. i0 W' I
  234.     {
    $ a0 o4 h: q$ ~- G
  235.       file=(*p).second;& o4 K8 s. T2 [+ f* W6 j0 m- i/ k
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())% l$ T0 m0 M0 Q6 T1 K
  237.       {0 H0 T1 c5 ]: X- a( m5 f, y# F6 X
  238.         olds=(*p).second;0 P7 r9 D1 W) i; m( V
  239.         olds->vers=file->vers;  m& W+ @# Y# ]
  240.       }
    # l' ^! c5 d* V( d
  241.       else
    4 ]$ E3 p4 e6 ^' f, Q: U3 |
  242.       {6 y' X, [( w6 l/ F/ K
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( b8 c. W# W  E* k& O; X7 [0 S
  244.         memcpy(olds,file,sizeof(UPDATEFILE));7 l% P6 S) h- _0 Z, Y) ]$ |
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    3 e  f4 |5 C) j) s+ U
  246.       }
    2 i% L' {# V6 t; ?
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");+ {2 n  s& y# _, H
  248.       sprintf(filename,"(%s)",file->file);
    ! \, N6 z- {8 y5 b+ p! r" U
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 ~% v+ h6 W. t& n
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
      h0 X) Z. \# c$ m$ P- K6 i
  251.     }
    1 Y1 _3 B* `4 @. c
  252.     dwCurrFile++;
    6 Q: ~+ A  g6 e  B6 n1 f5 w
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / i) j& P% t7 m' ]" C
  254.     {8 e4 Y3 [# K$ I  _/ @  l* b
  255.       bSilentStep=FALSE;
    ( P, [% E( Q# D3 P  I6 G! M) c
  256.       bCompressed=TRUE;
    4 X8 B/ h8 u; G4 D
  257.       strExtLocal.Empty();( ]; C5 ]3 d3 y* S% o0 M. m
  258.       strFullName=(*i).second;" B  A' @. }( C6 z4 J( r
  259.       dwProgramState=AP_CONNECT;
    0 C' |+ f1 P$ k) q- R! J' R
  260.       return TRUE;: Y7 M3 w" H8 s, j
  261.     }: {8 G/ D& k/ O
  262.     if(!bRestartUpdater)
    & d9 S% }; ^, m" n' c6 E$ ]
  263.     {
    3 ?3 s# g& N" |/ {- `, `5 |- i
  264.       int iCurrSize,iFileSize;
    6 w8 p4 u7 N* @
  265.       iCurrSize=0;
    6 f9 Y! I& N) N  A4 u& [! w
  266.       iFileSize=UpdateList2.size();
    6 D2 e1 C! K4 k, t% o. s
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");' B7 p" R" e$ J
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ) p& K* N% Z! B. J; p1 {
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    - k; v1 ~% v/ m+ b* x: V3 U8 O  x2 E
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% L! |0 U. A: a
  271.       Fclearf(".\\update.dat");/ k4 C+ g2 \/ y  W( a0 H7 @
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    5 q2 p6 U! F/ ?) ]' B( a' Q! n
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . P6 A  L) M! n
  274.       {
    4 S+ d" b! k9 m
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())9 D- f/ m" t9 S" z1 [$ J
  276.         {6 \8 ]: M. H+ B0 m" k
  277.           file=(*p).second;4 Z% }3 S$ c; |' K
  278.           sprintf(filename,"(%s)",file->file);; W, l! }3 b) ]. F# M  m. s
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 }) A1 n  u8 H+ x! D
  280.           iCurrSize++;8 v. R1 L1 p9 h% d7 W% S
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / I, W' S; b" B
  282.         }
    " i5 _" J! W0 p) o
  283.       }1 M, N2 P" a4 f3 v& V$ k
  284.       unlink(".\\update.txt");
    6 I! d2 q' S8 ]8 v4 s+ R
  285.       unlink(".\\update.tmp");
    6 D) m) B: y* m
  286.       Fclearf(".\\checkversion.dat");
    . ~  K& {" E$ B. l8 g
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ; c6 h) y7 t0 L8 C- d8 w/ Q3 ~( ~
  288.       if(UpdateLocal.size())
    4 F8 z/ \) j$ @
  289.       {
    ( e! R& d/ F  y
  290.         UpdateLocal.clear();
    , F" b/ q, U0 H  h: o( P
  291.       }
    ) i& j: r1 C% b: ^) S; T: L$ S
  292.       if(UpdateFile3.size())
    ! T' s" O# u1 y* g( H
  293.       {; U( R  U, C, m" I
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 y- B* @+ P) E# L% R
  295.         {
    9 g8 ?* K; [5 j$ K5 Q1 S
  296.           file=(*p).second;5 `) W* `1 ^/ [
  297.           free(file);
      ~; b; @9 z% \. O
  298.         }
    * S# [( ^' }/ S! R: f4 c" p
  299.         UpdateFile3.clear();: `: T: q1 j+ k$ d, |
  300.         UpdateList3.clear();
    7 X9 t* c9 e! S
  301.       }1 m- ?! G. y, J( ~3 {
  302.       if(UpdateFile2.size())( P5 c1 z% C9 w( Y' ^
  303.       {
    3 q# X) g  ~3 t5 x: a) k7 p
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 |' g4 H; s: G( k! r4 _" v- G. O
  305.         {& @6 ]- S- N" ?3 M
  306.           file=(*p).second;
    , d' s9 k7 B0 Y, h; {- D2 i
  307.           free(file);
    4 Y  }' z9 @0 E/ o/ b
  308.         }
    - l+ t' w+ [; Q  C; ?  Q7 L
  309.         UpdateFile2.clear();/ i) r- f+ S. |- {7 h
  310.         UpdateList2.clear();
    * c! @4 P" a0 n- q, \$ g
  311.       }
    & a+ d! H, B" Q7 Z+ M2 k
  312.       if(UpdateFile1.size())
    : G7 L$ g; w7 ?7 d
  313.       {
    * W7 ]; |: \- D4 O
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 W8 P0 N& A! }2 K# x# S. C
  315.         {' R+ U2 }! n; Y9 g0 K9 G5 f
  316.           file=(*p).second;
    , g$ R& L; y" A7 k+ _' v5 a; h1 ?
  317.           free(file);4 P- M7 b' L8 j  I8 F4 n0 ~
  318.         }3 n1 i+ _& @8 i7 P; d( g5 U
  319.         UpdateFile1.clear();) C- m) O" t5 L  I
  320.         UpdateList1.clear();
    ) s) C8 Y4 k# Z9 i
  321.       }- c6 }( s& n$ v. J+ F' i% l
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));) @. k  i) g. {
  323.     }# g+ o4 Z7 r% ?# r5 D! |: V  p9 b4 O
  324.   }
    $ V5 }6 E% J( h0 K8 H
  325.   return FALSE;" D- z3 L6 _8 e1 X" B
  326. }
    8 c( f8 Y' Z8 L" L* V  V6 I

  327. * m  T7 h1 c' _+ c* X5 K) K7 R9 C- |
  328. void CRevAppApp::ClearAll(void)& u: A8 a' j7 p
  329. {
    ) G, `4 Y! v& B3 Q% H; ?
  330.   LPUPDATEFILE file;9 G: U& D& F, o# a8 Z. J' U8 y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) e4 Z+ R+ F2 i* R; o

  332. ( f/ ]* l' M5 d0 ]4 k0 h" n: F
  333.   if(UpdateLocal.size())
    . U, r4 w& r; \, y" B+ v0 j% v
  334.   {1 U. I; q9 i6 Q* R
  335.     UpdateLocal.clear();1 n4 X! q4 U7 k6 s' |
  336.   }1 ?( f  C2 O6 E% C2 ^* w  b
  337.   if(UpdateFile3.size())- V+ I& o; V( g& H; m/ m7 m
  338.   {
    * h: t; \3 ^8 A# W! M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)& {) n/ Q4 \6 y
  340.     {' U) [3 W0 [& g; J! ]
  341.       file=(*p).second;$ Q1 d& g6 G8 d1 y0 ]
  342.       free(file);
    7 c# x$ d! [# `5 {* |% X
  343.     }. h' x9 Y' O7 @: C% [
  344.     UpdateFile3.clear();
    8 n+ X% a3 J# r4 h1 h
  345.     UpdateList3.clear();7 p& L8 h- C* D
  346.   }' z. B* c" Z0 @! f+ [+ z' n9 F5 }
  347.   if(UpdateFile2.size())
    1 j4 d: w% J& t: o
  348.   {
    # D6 ]; }* o3 W: J2 C" {( k4 S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 c3 t5 r6 A7 N
  350.     {
    2 P* p9 ?) v8 V" E4 [/ X. z
  351.       file=(*p).second;, C* _. ~) e1 g( x, w
  352.       free(file);, g' c, ?6 k, S0 l  V$ I$ {" V
  353.     }! D. E) z& C! }7 i  ^9 G
  354.     UpdateFile2.clear();
    0 `1 ~( k* Q( z9 m1 L  `
  355.     UpdateList2.clear();$ L4 v! d, f6 v4 Q8 D
  356.   }6 d0 x  u2 r3 p
  357.   if(UpdateFile1.size())( |* u* l8 Z0 _6 @
  358.   {
    8 ~3 B3 i* k0 p6 N7 d; v3 t  {- Q
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 I: I. W1 Z0 w$ q" n- ~
  360.     {
    6 c. L: d& d, v1 D: D/ J" h
  361.       file=(*p).second;
    4 E, N* D$ w6 [/ Y  }1 V) M9 u) B
  362.       free(file);
    ; {0 X8 b9 r: ~. w
  363.     }
    3 d: H  j; g! {5 q
  364.     UpdateFile1.clear();
    # J% S0 d; y9 @0 g/ ~/ b: R" u7 F
  365.     UpdateList1.clear();
    - l- g, i9 J: ^
  366.   }
    & ]/ t7 @* y/ ]+ Z
  367. }  
    . b. n- @# r. }% N
  368.   
    8 e- I" l: `+ Q8 k4 ~7 ^- o, Z) f0 z3 X
  369. BOOL CRevAppApp::CheckLocalVersion(void). l& N7 f7 @( _5 ]( M. U
  370. {
    # Q7 g7 L$ Z0 M, |
  371.   int c;
    $ R3 \& U( U( ]+ i& B: ?
  372.   LPUPDATEFILE file1,file2;; A/ q5 g; l" T
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    " l* F/ @% x" b5 k) R! u, Q, b9 F
  374.   std::list<CString>::iterator l;
    9 ~2 z% u! r  O/ O' A/ Y& ?% p

  375.   t  i5 f3 E& F0 M' z
  376.   UpdateLocal.clear();
    ! v# u* I2 o! @# d3 k0 ?  x
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    0 _: o0 z+ T) h4 `' l+ ~
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);2 p. ~0 [) h! O, i8 `
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : c9 U: E7 t. x
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);: K3 X- l8 ?) M; _( H5 Y5 p
  381.   if(UpdateFile3.size())" Z4 w+ T2 [/ v5 _; O+ a
  382.   {
    + T; z/ U6 k$ S% W) D/ _" E4 i
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
      x3 q1 f( x' e+ ^7 _# R
  384.     {, W8 s* w4 L: u7 Z/ R' i+ K
  385.       file2=(LPUPDATEFILE)(*i).second;6 L: P- D; t; w5 E: L5 {4 A
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 C3 m) C2 p. A. ~6 c, L
  387.       {
    : j! F5 {" g7 D
  388.         file1=(LPUPDATEFILE)(*p).second;
    ! H2 R: o* o5 \2 t
  389.         file1->vers=file2->vers;
    ; U; B! M. Z! @+ p- n$ x
  390.       }+ s! m5 b) ]8 v! C! R1 Y' k* u
  391.       else7 [' N$ X) C3 R; ]* d5 [
  392.       {1 l7 ^6 `6 L8 q7 D) u2 l
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 v7 h9 U( C' \6 k+ k1 h
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    * m# u+ s) R" K8 I* T+ }
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    5 }. Y5 a  D% c
  396.       }
    4 S4 c1 R7 g+ |8 ^
  397.     }
    # u/ {7 K( Z9 K3 t+ y- o! e! v
  398.   }
    $ ?5 V4 X! |8 y* r+ ]
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , u& E4 D; {* B" P# d
  400.   {* O3 e& t2 R" g4 \, Z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ( y0 Q' U" O: t3 d1 b3 n, b
  402.     {7 C) W) Q( A+ K% c) z& S- Y' g
  403.       file2=(LPUPDATEFILE)(*i).second;: Z" e, ~9 D% L% e  B: f* @5 o- \
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  \- @+ m  a( V7 l9 V0 ^) c
  405.       {
    8 {6 @. N2 v/ X% I' `& n
  406.         file1=(LPUPDATEFILE)(*p).second;
      e' v0 g8 T. W& R% z6 S! U/ [
  407.         if(file1->vers!=file2->vers)
    % R; o# i& n3 i# d6 I  j
  408.         {$ T, i& ^$ z, r" X+ v
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 ]& N  Q  g2 U+ g2 d3 y, C
  410.           c++;
    ' b* K: e4 I; x; j/ W; O. b
  411.         }7 i; F. \$ \3 \% ^, y/ i6 q
  412.       }! O% j* S7 G+ j( O5 ]# z3 q
  413.       else* \0 \' ^$ D# A" A
  414.       {* |6 P. r7 Y3 s3 @
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 s4 u* N/ I: q, x3 T% S* j
  416.         c++;
    , s- m4 X  y2 g2 p5 U
  417.       }
    / l2 v: C- H4 t% a, e+ @3 I
  418.     }
    : v# q7 x5 r3 y2 N' q1 L! J$ E& Z5 A
  419.   }
    $ N. A) v# I. ]" p& g+ G
  420.   unlink(".\\DownLoad\\update.txt");2 C; I6 q+ X) O" R6 B
  421.   if(UpdateLocal.size()) return TRUE;  ]6 \/ H# n/ N% w8 Y7 a% U3 i
  422.   else                   return FALSE;" F% n; E6 J9 Q
  423. }7 k2 _% Q' O, ^0 ]. Y# |
  424. : c  z# W  C1 w; ]2 E
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    % m7 u* Y! s7 m4 V/ t
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    5 y; g8 u* B: H- L$ K6 J
  427. $ l3 F: ^* \9 Q6 n( F1 @

  428. 6 _& Z" A% u& d7 i, n/ l
  429. & I, q0 C. c6 _& ~
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    / y( E, J7 ^+ b" E
  431. {
    3 w+ k: m7 n, `, p  x4 A+ a
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;0 a$ {  b+ {# T5 o: q2 h! |
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 l4 l! F* z. N2 W  r5 m, R
  434.   {
    7 R6 M% `1 X4 {( ?$ L  T
  435.     char szLanguage[50];
    " t% U- H9 W5 Z% f. c1 M0 Z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & b; F  \  S# d, X: n
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' }" L4 u# C% E$ `: R0 F
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 _8 [! @" O6 r) U. d; _: `
  439.     else                                   m_iLanguage=ENGLISH;
    ( W9 @0 E: G" S2 C# Y5 F# K4 \
  440.     char szRegister[100];1 ]7 }/ _3 D+ @  H6 m
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ Q, q5 N* `6 S
  442.     strRegsName=szRegister;
    9 k; S7 G% n* i& |  R0 k
  443.     char szPatchURL[100];
    3 N2 `. n0 P/ M  I+ |+ H( h) n
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 z, V. ^  e$ i# L  K3 T9 Y) s
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 U: x: f, j, Z
  446.   }6 @& U6 a  ?, g* h0 n- R
  447.   else1 |& ]8 S2 s5 ~; h4 x+ C
  448.   {
    ( ?& k- k( l: ]' O  |1 i
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # _# k" c% o8 ^5 E
  450.     strRegsName=DEFAULT_REG_URL;
    ( i/ P. m- z, j$ r( Q. L
  451.   }& s" s: w; |7 x9 L; b( x% d$ ~3 N
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    - P9 R  c8 ^  {/ _, t& w/ s
  453.   {
    7 Q; h! k! N1 A5 Z+ a4 t! e, F4 k
  454.     char szIP[50];  d! g5 x" L0 j
  455.     char szDIR[300];
    ' p" S* a! X" y* U; H( L
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))4 t0 {2 a4 N) l  W7 m# y; |# [
  457.     {
    9 D: Z9 |& V! [2 @7 y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");, v/ M4 v& b! X1 T, s
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");! B' x2 f- C5 X8 e
  460.       strHostName=szIP;
    " U! n+ n  X9 B$ X% o
  461.       strHostPath.Format("/%s",szDIR);
    7 }8 X9 ^. `, d# e' a
  462.     }. f- D: c6 ?+ \, f' F) c
  463.     else
    & \; @7 Z' {: E* g
  464.     {
    , E' v/ \' c$ T' c* h5 n% i; q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' R4 n* q( B* z5 Y
  466.       {8 L# i! Y1 {/ X
  467.         char szLanguage[50];
    1 O& d. x/ q- P3 l. Q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & z& t+ E8 m, L3 m5 J5 n4 B* x
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* R/ I$ \" A5 Z, f! \, [
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' Y7 T4 A/ f( x1 }5 a( ]$ o
  471.         else                                   m_iLanguage=ENGLISH;
    * K, k$ i9 G$ L' z0 @
  472.         char szRegister[100];" W0 I  G* a$ g" [3 H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , G7 b" W0 C7 H
  474.         strRegsName=szRegister;
    : W/ ?+ e! [. q2 `4 [
  475.         char szPatchURL[100];2 M" P9 j0 M: ?* d2 H" L9 U7 F4 p& L3 C
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 {; G7 s" q1 B9 Y$ F1 c3 d4 h
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : A6 l. `& e; @- D2 p+ k; K
  478.       }
    8 c' d3 g/ D. m9 s: K  k0 `$ x
  479.       else/ R' g. |( N: ?7 X- A
  480.       {
    ( {$ h8 |0 b0 K7 E$ i# U, z" T8 @/ T
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- y6 l- Y! X8 N8 D0 j9 E. |
  482.         strRegsName=DEFAULT_REG_URL;$ P* n* k9 N4 {) `8 Q
  483.       }
    & j. a, \" a6 |, F) W* w; A; }
  484.     }
    " r. p( x4 S3 z! S
  485.   }
    " @1 z* d* D3 s# @% f
  486.   return true;" Y& h3 w1 K/ Q6 s* V8 o
  487. }
      o- X3 C4 X& v. ^( y% m1 W
  488. ( n+ D0 t% h+ @" K
  489. #include ".\ZLib\unzip.h"1 L4 m  k$ L  t0 D8 \5 J5 R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    , ]! D% R4 _  i+ O
  491. /////////////////////////////////////////////////////////////////////////////" j) h/ w+ A2 h- o% A" m+ q% Q& N
  492. // CRevAppApp initialization
    $ H- [$ i, r8 k3 H2 ^' O) D% g

  493. 9 a: |5 i9 E0 q# h5 D
  494. BOOL CRevAppApp::InitInstance()
    9 l/ P& q0 r& j( J# V) R- T
  495. {
    8 j  `/ Y# P+ c0 `8 X# ]7 \
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    2 F& y6 i" ]5 f0 f% ^, V& k$ [
  497. 5 a9 S3 g3 ?' W5 f& c3 @
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);5 i: v( x2 W, y2 W
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    4 J' P# G2 A% @1 S
  500.   {
    $ y, r' h5 ?! E& J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    6 S- q7 M6 U# q; K6 k- _
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    " R# X+ X* n& l2 H( z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))). O' R( ?) f6 h2 U$ d. y) V8 c$ U
  504.     {
    / v5 b- H( w1 Y1 I) Q
  505.       strcpy(szPath,szPathTarget);
    ; y8 s) ^- v6 U1 U
  506.       SetCurrentDirectory(szPath);/ N; e9 A& t$ N3 g" H( u! y2 I
  507.     }
    6 J& `( t5 Y9 p0 e9 P# W; _7 E
  508.   }# W2 w6 k9 b, F# U) J( \0 \( B& E
  509. #ifdef _DEBUG
    3 D- y2 V! U7 C" \8 g) `% X; D
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      |2 q! F0 q- j1 U6 l2 S
  511. #else
    ) r& g5 |6 b( z0 ?
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( I! r: @9 R8 q; _; z
  513. #endif2 W2 M6 d4 n0 @$ k8 `
  514.   {
    # F% x2 H( O/ p9 Y% i# V+ O) r4 {% ^
  515.     char tempFileName[MAX_PATH];
    7 k! W" d5 ~* q  K! t
  516.     strcpy(tempFileName,szPathSource);
    . o. D; L* j; C; l! l& j1 q! J5 M
  517.     tempFileName[strlen(szPathSource)-12]=0;5 L& v0 O+ A4 b* M$ ^
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    & h* ]8 V1 q$ C! v5 m+ P0 R
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    9 Z5 W: a6 S/ h6 [2 L0 Q1 x
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    * k- L7 t+ `# c/ E' ]3 ^! n
  521.     return TRUE;! s3 F8 g; M' r/ l
  522.   }' Z- f$ v1 m- K/ B0 F9 E
  523.   // Nuke 0118: Delete run.exe5 J0 Y# v" D; g5 r" m( M
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ! g0 e+ M- T: N2 b+ N; w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");; z' ~* j5 w2 U' q/ p7 B0 A  O
  526.   if(!ReadCfgFile("Config.ini"))
    ; R' z  f5 x6 p- E6 L
  527.   {* p1 M3 s4 \' |" Z* B5 X
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);- \' P% E3 ?( h2 @/ {  s3 i
  529.     return TRUE;0 S7 A6 k( d6 s/ \+ u+ Z2 E
  530.   }6 P- R9 }7 n, @- G, T. c. s& a
  531.   HANDLE mutex;
    7 P: Y/ U2 [% }
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))( W1 ~$ e# ]' _5 G! p8 m9 f% C
  533.   {
    + f3 c, n7 T8 G
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)3 m& @! a4 W: i! x/ k7 X
  535.     {
    9 `' N. O5 Y3 r' z# G# Y
  536.       CloseHandle(mutex);2 d5 l+ C7 @% A3 t
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);: l7 v. b3 @5 H
  538.       return TRUE;9 p& A+ ?9 p- c* b- }
  539.     }, h+ ^4 V, ]2 x- ?  `: P8 O( g
  540.   }  9 f% Q; v3 ?4 N/ d
  541.   CloseHandle(mutex);
    . T  b1 ?! U( M3 A* i. s3 A
  542. 9 Q: v/ m7 |+ L" v; o9 D
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);3 _/ [0 ~* ^: j) O3 ~
  544.   G! ^: R5 U' J5 m" u4 U  b- s
  545.         AfxEnableControlContainer();
    0 C6 L" u) h6 N
  546. 8 y2 I' ^. p% s
  547.   bCanUpdate=FALSE;
    1 }) u, l5 g2 |) B) ]6 c( [
  548.   dwStartUpSteps=1;( Y8 @; a. N! }; ^# Y" o* D- ]1 `8 k
  549.   dwProgramState=AP_NOTHING;
    # a3 y1 }( F- C' t! D/ Z

  550. 2 f4 }" G; p$ B" ]3 Q
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);5 C, i, [& `5 ^( r7 ^4 b+ y
  552. % k1 D5 l- u. U* c0 L1 Q6 h
  553.         // Standard initialization3 k$ D' E0 k+ v. o: Q% `9 M+ u
  554.         // If you are not using these features and wish to reduce the size3 Y1 m7 \. e0 T+ ?' D& }1 c
  555.         //  of your final executable, you should remove from the following* E& ~  ~3 v/ [: @2 s" P. B
  556.         //  the specific initialization routines you do not need.
    6 P/ ?5 N: W* H: V; I- g6 W4 c3 W
  557. 3 P9 L/ [# B. C9 }/ n5 V5 P. e
  558. #ifdef _AFXDLL8 d& i6 e# V" t" \: L. _. ]
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " Z* y5 G6 S% S6 o' A5 M
  560. #else
    # e4 k+ C7 y6 i3 J5 R: k( s( v
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( [8 ?% `5 p! A, X0 h( \
  562. #endif
    + q; g' u8 |. k/ Y# J  ]8 s9 |

  563. 8 q4 d& w. F% ?6 W& b: M+ p
  564.   dlg=new CRevAppDlg;4 p; r' p; ]' e% Y7 U, D. k2 n$ t
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    0 u9 F2 I5 Q) l) G$ h% Q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
      Q, z) Y. H" I8 l% f
  567.   m_pMainWnd=dlg;
    , m- p8 W& u  r# p. b

  568. 6 T$ Y) F. H2 r; o8 b) J
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    : h* _; N: y2 ^# c
  570. * i/ N; ~( t. t1 F0 x
  571. //  GdiplusStartupInput gdiplusStartupInput;0 x% }4 q/ h1 Z
  572. //  ULONG_PTR gdiplusToken;$ b5 k7 J* ]; s9 a+ t
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);+ ~1 r8 J& N2 n7 F  d' h' g
  574. 1 \! Q6 \" b7 ]2 B: q
  575. //        CRevAppDlg dlg;+ C$ ?  [1 K1 W+ y
  576. //        int nResponse = dlg.DoModal();
    ' M6 _- @; _$ o  e- ]- W$ V# X
  577. //        if (nResponse == IDOK)% I$ p5 T0 h- p1 {( L7 m* ^
  578. //        {  `& r- g8 l2 Z/ k% y* d
  579. //                // TODO: Place code here to handle when the dialog is, L8 x" |7 `2 L# U, `
  580. //                //  dismissed with OK
    ' Q0 a, L6 i3 |# a. g* O% d( Y/ j
  581. //        }! O" m5 W. @: u+ z3 ?" s( b; M( n
  582. //        else if (nResponse == IDCANCEL)$ F6 {% b6 o% }$ O& J2 ?6 A8 B
  583. //        {
    ) O4 A; C3 t% k; j4 P, h# V
  584. //                // TODO: Place code here to handle when the dialog is
    8 g3 q5 k" i3 t: E1 B7 X
  585. //                //  dismissed with Cancel
    ; j8 y' @0 R( C* ?) k& O  X
  586. //        }
    ! N* T0 ^# O: {1 {4 e

  587. 7 Z' O8 M% N# h
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ; E4 s! `( I- x5 v% u- J# v
  589.         //  application, rather than start the application's message pump.
    # s; H. W, l/ |2 J, O. c" M
  590.         return TRUE;3 ]5 x# w+ |! j% Q% W% q' o  ^: K) B/ R
  591. }" D1 f2 h! |; J3 @$ x3 A5 M6 d
  592. / D; q9 x# [+ m, ]) y  d& }
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    9 X. i+ I$ J* h; z1 ^/ e& k
  594. {8 a6 i3 [1 L  z9 e
  595.   int i;
    4 p$ u% Y/ d" m- X' m9 F- y
  596.   char *szRet;6 s0 i( P3 O5 E5 p" }
  597.   O2 d$ p" q! [5 t
  598.   if(pSource) { itoken=0; sztoken=pSource; }3 A  Q/ y! k; `( y
  599.   if(sztoken)/ @# I3 X* @: i6 U
  600.   {" @1 I% ~3 T' W% T: u" k
  601.     szRet=&sztoken[itoken];5 `5 ?+ o( f. X' M" Z# X: D  r7 z
  602.     while(sztoken[itoken])
    ! r* n# |" z) \" q$ X
  603.     {/ o- U& Z& P: `0 m# O7 Z
  604.       for(i=0;i<(int)strlen(token);i++)* u% [$ r9 Z# q  l4 n2 V( D* R
  605.       {
    ( ?% T& Z, W" K  P5 _# M
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])" ?4 I8 r5 r2 e
  607.         {5 P2 l+ A5 D' c$ X6 n% k6 n
  608.           sztoken[itoken++]=0;
    2 n' b2 c) @2 ?% P4 P
  609.           sztoken[itoken++]=0;
      A( k. q( [2 n; Y9 x, U
  610.           return szRet;
    : B- u/ A- y9 \% d6 ?/ y9 ^3 S
  611.         }
    * h# m+ B0 f: H# z  c, Q* D
  612.       }5 T5 P, A6 h4 n: V7 i0 m2 O/ C% L2 ?$ d
  613.       itoken++;2 W. o3 S3 G# I1 i: _  C) C
  614.     }
    / Y! j+ k1 p7 M& h" P
  615.   }: Q  S. y7 ~3 c' X) P
  616.   return NULL;* g0 U% k4 P3 h
  617. }
    0 J/ v6 o! a- v/ y1 c8 J

  618. ! [5 i& V0 _8 A
  619. void ProcessProc(long Total,long Current)
    - M* ?" L: t& i/ A* p8 W" R$ g7 X
  620. {
    & i1 Y' N! }4 ~. M4 j
  621.         MSG msg;
    5 v( ?: K& e- _
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    : Y" O0 u$ R% [( e0 n3 T
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));1 b. k$ Z( _( S, C- ?! b
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))6 F- x8 O) C0 t' |# @0 j$ [
  625.         {
    7 ]$ C% A* f2 G% M% g+ c1 t
  626.                 if(!GetMessage(&msg,NULL,0,0))
    3 U3 p' k% O$ W; X6 p
  627.                 {
    3 j# Z- c! \+ d( {2 u6 r
  628.                         return;
    & m1 I. G1 _, w8 }
  629.                 }" h) L+ O4 E  X$ F8 j3 Z
  630.                 TranslateMessage(&msg);
    & V8 V  [) I3 o4 Q, Q' J+ F) ~
  631.                 DispatchMessage(&msg);
    1 Z" |& }2 U) Z9 [: \7 \$ y% b  c
  632.         }        " r- W3 n4 H3 B- }" f! e0 v
  633. }
    . Y! J: I4 |8 M4 P. ^6 |, E* V2 \; u

  634. $ Z/ b9 g: _# @5 T# ~1 q1 |
  635. BOOL bFirstChar=TRUE;
    2 c$ ^# h0 B5 u9 Y: H0 Z3 y

  636. 0 W  t1 }8 o) `# e6 v
  637. BOOL CRevAppApp::OnIdle(LONG lCount)" p% s; \, f$ G1 h0 n/ E6 {
  638. {
    , n6 F6 `6 o) [( s* W
  639.         // TODO: Add your specialized code here and/or call the base class# K7 [8 e2 Y  S3 f4 l$ A: w
  640.   switch(dwProgramState): T+ r  x. s; Z0 v4 A+ L6 O8 `
  641.   {
    ' q* C( }2 C7 a
  642.   case AP_NOTHING:8 l0 x4 u' P* v. l$ U9 ]
  643.     switch(dwStartUpSteps)
    4 N; t( h% Y$ D. ?1 M  ~  _
  644.     {9 n, b" @5 l8 a. z
  645.     case 1:* V6 {, F5 u+ B# X1 R4 @, |3 j
  646.       {
    3 ~9 H- F4 c5 V8 F# y% [
  647.         int i;  \$ g4 j( d& U
  648.         CDC *pCDC=dlg->GetDC();
    9 C& }, W8 R( Y' t0 u9 A0 W5 L$ j
  649.         HDC hdcwnd=pCDC->m_hDC;
    - y! A4 \- p  f5 v: r
  650. //        Graphics graphics(hdcwnd);5 x$ B! a' c$ U, Y0 m0 r8 F+ q# M) Z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");: z$ w8 {" Q  F2 ]
  652. //        INT iWidth=bitmap.GetWidth();
    % e; A9 d: {7 Q. |# p# b3 J
  653. //        INT iHeight=bitmap.GetHeight();' u6 |' ~9 `7 R) y7 F( E
  654. //        Color color,colorTemp;* j: y- O) B7 \! f" W
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)0 j8 o" D; [6 \  \
  656. //        {) _7 B0 k4 ~7 _
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)5 U0 o- M1 |$ R: D4 x
  658. //          {
    1 y: ^& Y& R. |- ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; P) k# z/ X+ P' B% f
  660. //            colorTemp.SetValue(color.MakeARGB(7 f2 z4 |" ]1 n! ~# a1 B( [
  661. //              (BYTE)(255*iColumn/iWidth),
    * p5 k3 F( O! c
  662. //              color.GetRed(),
    $ N$ }, U1 J' \- V! |
  663. //              color.GetGreen(),
    / k: T1 L# V  q* [
  664. //              color.GetBlue()));7 c$ d9 Z' Z5 r, [$ ^9 T
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    " E' \, J/ P* F3 {7 s) J# p
  666. //          }- P! c, k; G4 G" L
  667. //        }! u1 {) w* P" N/ s
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);- D* u' M8 @  V8 d
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, ^/ _9 k9 M1 b5 C% C, F" G# C5 h; h
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( {( m' [( Q* k) Q" g7 z2 N
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; Q! g( C, E8 d
  672.         for(i=0;i<240;i+=8)) o; b% x- I6 u' |
  673.         {& f3 @) |$ X) r( y; u5 g0 u
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 |! k' R4 @# F) ~$ b2 X
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : A; U0 R/ ^  j3 Z
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & Z4 L! i8 n8 R) [
  677.           Sleep(33);  e/ P8 ^/ O/ |3 ^0 C- \
  678.         }8 y2 G0 w  L4 n! [- n  V
  679.         Sleep(1000);# H, M- f- e, D8 ]' ~, m9 N! m
  680.         for(i=240;i>0;i-=8)3 ]' Y7 \8 ?4 m2 F
  681.         {3 p1 ]: v" {0 ^  Z4 x" i* }
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 e- d: E, Z: T4 a! g8 ^
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 Z* \3 ?( a: [) Z: O, Q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 G5 U: ?1 P, s& |- z9 X& f
  685.           Sleep(33);
    , Z: ?! q; l' Q! R
  686.         }! n0 A% p& V& X0 D2 ?' x; `2 q) H/ H
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    3 w1 U. X; ~4 }% L3 @9 t
  688.         dlg->ReleaseDC(pCDC);0 h: J9 w7 F( Y
  689.         DeleteDC(hdctar);6 ]. L# k/ p5 \: m( O! U' s
  690.         DeleteDC(hdcsrc);
    : C+ C4 ^, x' H, h; m0 I+ z5 F
  691.         DeleteDC(hdcorg);# a9 I* V8 g$ o
  692.       }# n. _  k( L+ {0 B& R( D
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    , C5 G! [6 H& M+ X$ x7 \- R
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    # P0 P6 s; o$ }5 }9 z4 v6 G! V
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");4 V" T9 f. `# {) p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");! e! h/ T  P+ }" w- m
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" G  z% B3 `) m
  698.       if(!Dn.Connected()): h0 t4 T+ ~" b1 |
  699.       {
    3 }/ g2 v1 I4 m# [2 T1 b
  700.         dwTotalFiles=1;. z# J+ Y% {  O. [4 ~1 K# b
  701.         dwDownLoaded=0;
    * C& X, s5 Q9 h$ y/ J/ ]
  702.         bSilentStep=TRUE;
    9 e# G- L1 d. @+ t
  703.         bCompressed=FALSE;
    ! A, `8 F% l; f
  704.         strExtLocal.Empty();
    & f3 K/ p' w( M7 ^5 G
  705.         strFullName="readme.txt";1 ~# h; [  @5 x$ k# P
  706.         dwProgramState=AP_CONNECT;
    ' S% O& w. G9 S/ i1 J
  707.       }" z, x; C. d- ?, \
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    6 g" O4 a+ I: j" S$ m
  709.       dwStartUpSteps=2;
    " }% n0 u+ [& d2 I: N6 b, {
  710.       break;
    3 k5 _/ f( a! V( `! i
  711.     case 2:3 m" e5 I6 _; I! t+ A, v( w2 Z/ N  i) X
  712.       {
    & I* O& K4 s7 r" P% b0 B
  713.         int iEOF;
    ) B2 f$ S3 R8 V: ^
  714.         FILE *fp;
    $ I5 ]+ b( F2 E6 V6 C
  715.         char szString[512];
    + J4 p' N8 P6 V) w- `& q8 w
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ( a3 O& o, [1 p
  717.         if(fp)3 r+ `1 }1 f+ C
  718.         {0 Y% u6 o6 B% x: l7 ^# N9 c
  719.           do
    4 `1 L9 H! |& I2 z
  720.           {
    6 u  v8 [1 v) |; F9 i2 r' z9 t
  721.             iEOF=fscanf(fp,"%s",szString);
    5 s2 u. Q! R) X+ |6 R5 U3 a
  722.             if(strlen(szString))
    & Q- l0 ]4 X+ G; ?
  723.             {
    ' F  I& r, n' f7 C( t
  724.               if(bFirstChar)4 I8 {+ X# k- a) q
  725.               {! n, X; A3 r5 [% E
  726.                 bFirstChar=FALSE;5 B5 D' r  C9 t5 q# T: y4 S) d
  727.                 bConnectIsBig5=FALSE;3 `9 |% I6 P6 v: N
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    0 e: b/ G! A3 \2 z1 V3 R5 C
  729.               }
    * b7 _% \" v! I1 Z( e6 H
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));" ~" Z( j# v8 m! G; g8 C* z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    9 u5 Q1 _( x8 q8 J2 j& Z  R* r& C
  732.               dlg->m_ListText.AddString(szString);( W3 x0 ~( ]7 a& f
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 X- Q) X6 {" g4 u* f6 z
  734.               *szString=0;
    # Y* I' y; `0 U4 J5 {, M/ k
  735.             }7 y2 B7 r, k  c, A: J6 U0 b) C
  736.           } while(iEOF!=EOF);
    5 B5 W2 R6 k! R( \+ S3 T
  737.           fclose(fp);
    ) d1 u* [) o) w4 ]# k# t' g/ U
  738.           unlink(".\\DownLoad\\readme.txt");+ C8 p6 E& B; J/ f$ ^( S) O
  739.           dwStartUpSteps=3;
    4 k2 {: Z% M5 f4 r, N2 a6 r
  740.         }2 \* ^9 K7 q# d( _3 w
  741.       }0 t& T# f" n! S4 r/ e& [* K
  742.       break;
    . k1 W; Z5 Z+ w3 s# b' _" l
  743.     case 3:/ O" y' O! P" t
  744.       if(!Dn.Connected())* }: e) I- f0 N$ M1 p
  745.       {
    / w, ?: J$ X* p
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    + g3 [5 `$ ^) l& X0 f' ^7 t
  747.         dwTotalFiles=1;& Y: B: ?6 U; U; U7 n' I
  748.         dwDownLoaded=0;
    * V7 `) F. c6 e+ p/ A" X( S
  749.         bSilentStep=TRUE;
    ( _5 R2 {) D1 c* O
  750.         bCompressed=FALSE;" {9 {  S& F7 p4 B" \2 i, R0 }
  751.         strExtLocal.Empty();7 r% {1 R/ B+ p4 y0 a
  752.         strFullName="checkversion.txt";( @  H2 G3 }! s+ O& s5 D7 N. J
  753.         dwProgramState=AP_CONNECT;" d/ `' _1 c$ q$ p6 ?) R
  754.       }
    / U; D: [0 z7 M: h2 R1 u' n" p3 A
  755.       dwStartUpSteps=4;- h0 H! X& K" x( E  V2 }% R: A; G
  756.       break;
    : q: ?9 b8 `. B1 A0 i
  757.     case 4:  Z9 E% q* A" d: v
  758.       {' ]* ~: K( V0 J. B/ }1 U2 c1 d
  759.         FILE *fp;
    % f! X' o6 k: y& C  h% n9 u( R$ _
  760.         char szString1[128];
    # y3 N; N! U7 R
  761.         char szString2[128];
    ) a! K+ |8 M! K4 n1 B, k7 G* E
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    7 z; B; p6 n9 p2 r
  763.         if(fp)
    " A' r3 q$ F/ P  |: v
  764.         {
    $ o! Q& R1 x0 R8 |5 i: L9 Y  l- c2 [! `, |
  765.           fscanf(fp,"%s",szString1);& w3 f2 |$ F" J0 P* x) u# S
  766.           fclose(fp);
    % W) r9 R6 F7 _! D% S6 ~1 R
  767.           fCheckVersion=atof(szString1);# l+ L$ `' k# {( `
  768.           fp=fopen(".\\checkversion.dat","r");
    1 r! u* I; x/ ^* j" _- r
  769.           if(fp)
    3 |5 m9 S% O; r5 q' @* G
  770.           {
    5 J+ n7 h0 f+ Z& E$ H
  771.             fscanf(fp,"%s",szString2);
    ( O8 c1 @; {2 y2 F5 ~
  772.             fclose(fp);+ |* n2 t5 h' g0 w8 _1 Y3 U9 W0 w
  773.             if(atof(szString1)!=atof(szString2))& [3 I) {  k2 Z* ]- i* H: ~
  774.             {& U+ m4 K9 W2 m0 Q! y  t0 n8 J) i
  775.               if(!Dn.Connected())1 l" W5 J! F. Q; ]- q4 i: j, O
  776.               {  @) A5 y4 Z$ ^! O
  777.                 bFirstUpdate=TRUE;
    4 r! Z9 K! y9 x. y2 n
  778.                 dwTotalFiles=1;& D. @, u& H% G; B
  779.                 dwDownLoaded=0;
    5 g3 g1 y- A' J( n" z
  780.                 bSilentStep=FALSE;0 _& A3 v! e! j5 v, N
  781.                 bCompressed=TRUE;# Q/ }8 d5 V& l0 c
  782.                 strExtLocal=".\\DownLoad\";, e, u$ h  a' e- w
  783.                 strFullName="update.txt";  n" E: N! X/ ~$ |! Y
  784.                 dwProgramState=AP_CONNECT;6 N; P/ J) s* H7 U% w
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 t! [" J6 t- @' `1 K6 G4 i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 a+ N3 C7 @0 f, X
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- G0 H0 ~  Q# m1 s0 [

  788. ! I$ v% ?7 k  B8 P$ c9 j5 I$ ?
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ ~  i/ `3 Z5 o/ \6 Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    6 H6 T9 b1 i5 k2 V3 F9 e4 N
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    * q$ _& k2 f& k  f1 ]
  792.                 {
    3 Y& w) I" P0 Z0 I
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    5 g3 g9 s/ y- ]4 q0 G) S
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    / Q$ J; D. q$ o: |4 W8 S5 B: h& ?) `4 j
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");  r& C9 H3 F: }2 g6 n
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 a1 f4 d: F7 K- P7 T) C
  797. ! r8 b' {% X8 ^. N- ?
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# D' J& D2 D+ K3 m& Z
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. ]5 t0 f$ ]: J& d& g" z8 ^
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 f! \: F7 I% m: N* ]( Z) r$ P' {
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , V  y9 y  K% c$ k0 U5 ~3 Y
  802.                 }
    5 ~+ b, W3 P  R/ K
  803.                 dwStartUpSteps=5;
    ' J# w+ k- W8 R$ X
  804.               }
    $ Z# s' E0 v: M' `: b& R4 r
  805.             }9 E1 T; D  Y% r- k
  806.             else
    # Y/ Z; \+ G1 i8 ]
  807.             {* ~0 c5 C6 ~4 V; ~; ^
  808.               unlink(".\\DownLoad\\checkversion.txt");
    5 O2 |+ @# t- f0 _
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - h# d" @( j8 K& L$ V9 M8 C$ G* l
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 a( }6 \  p. j- m! P1 E& ]
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    & v0 o2 f" U, x, C/ ^( N7 b

  812. . g3 k+ V' m& V% d
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # Y2 z& [( S) `4 Q) L  b" u
  814.               dwStartUpSteps=99;( M, f# d& y, y
  815.               bFinishUpdated=TRUE;7 B3 F# h; j' E0 v. e
  816.               bCanUpdate=TRUE;8 j" F6 Z( X& x3 d1 J3 q, d' a
  817.             }
    7 |+ y3 w2 I- [3 h
  818.           }
    . K1 D# L0 h; Z7 s5 @2 l  s. i
  819.           else
    ; S- |4 p3 U; [$ W& ~
  820.           {
    ; ^4 p0 w  s# Q3 Y$ r' z9 }
  821.             if(!Dn.Connected())
    % u4 a' i# f. @, B. ]: l
  822.             {
    ! j+ l! B) X# ?. S% U8 w
  823.               bFirstUpdate=TRUE;
    3 T; X3 B6 J; y' x
  824.               dwTotalFiles=1;
    2 p6 x1 F9 i/ a( d% y
  825.               dwDownLoaded=0;5 D* T5 f; Z" W3 a
  826.               bSilentStep=FALSE;  Q7 i1 |  b1 s0 N! U7 J
  827.               bCompressed=TRUE;: \% L1 z; t/ a9 D
  828.               strExtLocal=".\\DownLoad\";: o- P1 p7 A3 K; t
  829.               strFullName="update.txt";
    # P9 U( E6 Q& d' H: W9 R0 g
  830.               dwProgramState=AP_CONNECT;3 [( f& G& Z. n' d0 X% q1 Z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* a* f0 p. R0 X0 i! s1 T
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% T4 Z1 B' `7 ^9 a& Z& O% {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    0 X9 B4 _; p+ |
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 Q& O: D- |8 k' L$ @+ `; t
  835.               unlink(".\\DownLoad\\checkversion.txt");3 y, e% D1 x3 P. I+ M# X, r2 D
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    4 f+ ?3 W4 b) ~! N8 h
  837.               {
    ) T. R8 B- ?& b
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    : \9 K' _6 }7 B% \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");! @6 D9 Y% i; I+ s2 g
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");, m  w) r3 R  v8 `
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 p7 E8 ]4 J7 j' X3 I0 O( P8 ?
  842.                 6 m- u1 ], J2 O. a& w5 Z
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + G( U  ?4 p$ X  v* v
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' w" R( ^3 Y5 b* z: j( A4 ^: G! S
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    , H! @( U$ p" d" `
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - b/ `( H& D) n9 @4 ]9 `6 h( \
  847.               }
    - ?* y. r* a) j0 |
  848.               dwStartUpSteps=5;
    ' U9 c& K% y& }" p
  849.             }
    : L7 g  ]8 @, |2 q! i
  850.           }/ H2 u; q3 {# L" A* G2 U" u
  851.         }. }. k5 h7 C. D
  852.         else
    + ^' k- t! z4 }- Y, s/ v
  853.         {
    ) N9 T5 g$ _8 D  p$ c8 S
  854.           dwStartUpSteps=3;" ~! ]4 m$ A% B; n9 q! S2 Z0 b
  855.         }
    4 J3 P* {( [4 W3 [
  856.       }
    % U5 e' F; e( M1 p" ]0 j; s9 Q
  857.       break;
    - b+ y' d! H, `
  858.     case 5:
    0 @$ \5 d; g- h6 k
  859.       {+ Q& x  E" s  x( t1 A- ~
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    # p7 m) D/ d- v6 d  V  l
  861.         {
    ! M0 p& L9 p* a0 H
  862.           int opt_overwrite=1;; x3 F& m6 A; W7 @1 \& w- l; k$ t# J$ R
  863.           int opt_do_extract_withoutpath=0;
    : a* i3 B* r6 f$ p3 a
  864.           unzFile uf=NULL;6 I4 U  }7 h8 m

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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