找回密碼
 立即注册

CSUpdate.exe源代码

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

1 i- r' B3 f# h# M- M
  1. / RevApp.cpp : Defines the class behaviors for the application.
    # ]' q; [/ z& c
  2. //
    8 ?% b+ R4 M4 W4 u. V) P! h
  3. 2 H. W) k3 r0 H
  4. #include "stdafx.h"
    + }: f% F: C2 {1 z6 n0 {

  5. 6 e; X4 @  n# T7 ]" l7 x/ T
  6. //#define UNICODE
    ! z. Y: r+ x) y: C! [( N# g) ^( \
  7. //#include <gdiplus.h>
    & }, t& H$ R% x2 ~8 o
  8. //using namespace Gdiplus;
    2 t5 z5 X1 s5 K" _5 p+ ^/ D( S2 L
  9. 2 D- V" A; ?; K- q/ k
  10. #include "RevApp.h"
    , p5 V1 H- u6 V# P: F1 P& }8 x
  11. #include "RevAppDlg.h"8 P; U( I; T5 b  j- @
  12. . }* H& |- s4 O" _; T
  13. #pragma warning(disable:4786)' S7 e: \5 _& ]/ x) f
  14. #include <map>
    8 N# o/ o0 n0 ?. t5 S# P' b  V
  15. #include <list>& }+ r( m* x! F% {
  16. #include <direct.h>& h) O& x. k2 G7 n6 O  ^0 ^

  17. ; [/ k7 n* }, P$ {, K
  18. #ifdef _DEBUG9 X8 J0 P; P( H  m$ _) c' V
  19. #define new DEBUG_NEW
    ; T$ S1 f' z  x8 A' S
  20. #undef THIS_FILE
    - U5 _* B! Z5 {6 Z# W  l
  21. static char THIS_FILE[] = __FILE__;
    # m7 ?7 T& g8 g0 o
  22. #endif
    % [( r, R& e& |# u/ w
  23. #include "SkinResDef.h"0 h/ b. K/ W5 }0 ]* _
  24. #include "ChangeBG.h". M, s1 p+ N( _1 b6 V1 G
  25. #include "AFXINET.H"
    % E& p+ [7 T2 B5 x* L

  26. % _" t; o# B( y. L- J
  27. #define TRADITIONAL_CHINESE 0' G4 E; M) B7 y( _* j
  28. #define SIMPLIFY_CHINESE 1# }8 M* d0 [5 l6 [6 ?5 g2 h8 Z
  29. #define ENGLISH 2  w2 {; B3 c3 [1 M# S2 w
  30. int m_iLanguage = ENGLISH;
    + c2 b) ~% f2 W. D9 }; f6 s
  31. /////////////////////////////////////////////////////////////////////////////
    * g) u# T. ~1 x( U/ `" N
  32. // CRevAppApp
    ; a5 e4 f* O9 j9 `

  33. ; j) K: m5 ^7 T7 a" r
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp); k) o5 D4 c. m" k0 I/ m
  35.         //{{AFX_MSG_MAP(CRevAppApp)0 Q/ V; Y8 G5 U4 f
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.7 C& ~+ ~) q* y$ D3 j5 \# B
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    3 R6 z8 X% H8 K% x/ C
  38.         //}}AFX_MSG
    $ @; y$ B1 ], R& z! ?1 Z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    5 w, C' X3 m1 p& n9 s7 u
  40. END_MESSAGE_MAP()+ b3 x6 c, G6 r

  41. # p6 N; l" E& M3 z& O( H
  42. /////////////////////////////////////////////////////////////////////////////
    # U, c! u8 ?3 l2 k" W6 }5 d
  43. // CRevAppApp construction) d# |8 `0 {! V0 H
  44. , C* R2 |* d3 H3 v/ ~
  45. CRevAppApp::CRevAppApp()
    1 S, ?' G* Q3 b" d
  46. {
    ( N0 J  j5 t( H
  47.         // TODO: add construction code here,7 C# k0 w" t( m" Q9 E# K
  48.         // Place all significant initialization in InitInstance
    8 Z9 [& k" e+ u8 {  S
  49.   bDisplayIsBig5=FALSE;
    ! }5 |( V2 c! w) s8 t- A
  50.   bRestartUpdater=FALSE;, c" X) R/ A+ u/ g8 u/ d# W, J
  51.   bFinishUpdated=FALSE;# u( E- I7 O6 F8 N0 {6 F- N7 X; |
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;: l+ J3 S5 F0 E5 q" V
  53.   InitChangeDataBig52GBKS();2 Y. p' B' j4 H
  54.   InitChangeDataGBKS2Big5();
    8 X0 t/ V+ b) G# T6 R
  55.         //
    , z3 i! p  {! B) M8 ^( a* i
  56.         bClickRunExe = FALSE;0 A; I1 b3 [2 \5 F# L- [
  57.         //( N5 k" ~% F) B, _3 @0 |0 b
  58. }
    / m6 z! h" Y7 d( b& }0 Q
  59. 1 a& f$ s: b  O, c# b
  60. CRevAppApp::~CRevAppApp()
    : {% }! K" h3 v- k$ X  j$ B$ I, u, O
  61. {6 C1 Q2 {7 g3 Y% {( m
  62.         // TODO: add construction code here,
    3 c2 f; [/ }: y5 {. l9 |
  63.         // Place all significant initialization in InitInstance0 T, V. Q, f+ d# i/ J( j
  64.   EndChangeData();. T: l9 g$ t3 ~
  65. }* v" N, P  z) A, R: H

  66. - [9 ?* Y' u% c
  67. /////////////////////////////////////////////////////////////////////////////
    + J6 o5 V* p" A; i' j& F: Z- u& G
  68. // The one and only CRevAppApp object1 P9 H. ^. q- N: V

  69. & z( [2 ]# c# P
  70. CRevAppApp theApp;
    4 z6 l- ?+ V- q$ d1 F& J7 H
  71. + W! |" U4 G% c3 B! {/ y  B6 K
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)4 j* M: I& |- h9 c
  73. {
    3 R" K: X$ _  u' ]& V
  74.   int iEOF=0;
    / m, _+ {/ b" y# N
  75.   char szTempName[MAX_PATH];
    & \. f+ i! T5 y, t4 Y/ J1 d
  76.   *szFileName=0;: }2 H' d6 e  S+ t3 U+ _  x8 W, B
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & w- {- j5 u/ g# H0 H% j) E
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    " s4 E( e* J! J! f5 m$ V7 \
  79.   {
    ! D6 j, }: s: }# q: }) V% T
  80.     strcpy(szFileName,&szTempName[1]);' F1 N1 m8 ]) v' g& n. E1 r
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF); n2 q. K) P4 U, G
  82.     {
    ( |! E$ Z- d7 \/ m; X
  83.       iEOF=fscanf(fp,"%s",szTempName);
    6 G4 @0 w$ n; H3 l1 O
  84.       strcat(szFileName," ");& Q2 _0 E  w. v1 |( r% {9 ^
  85.       strcat(szFileName,szTempName);
    1 r& x. U) K! {% g+ g. p
  86.     }
    # h! K) ^5 I$ c1 v1 u
  87.     if(strlen(szFileName)>=1)- b: X4 _0 @6 U* S) B& u
  88.     {% ?% @+ B4 c) A2 p0 {6 p' u* r/ t
  89.       szFileName[strlen(szFileName)-1]=0;
    ! d  g9 r9 S2 c$ ]0 `, U
  90.     }
    6 P$ Y# Y5 V2 {! t( _9 ]! g
  91.   }
    4 i3 m! k8 |0 `; E" D
  92.   return szFileName;& k8 e( l" M' l& J: n
  93. }
    2 G6 a; j: Y9 C- w

  94. " o9 L8 {4 W/ K. F3 d' ^# x, W
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ! J% T2 H7 i# m
  96. {
    ; U0 M7 {3 l8 Y
  97.   FILE *fp;
    ) B1 W$ T" T. n0 C2 q2 u1 J: |
  98.   char *key=NULL;
    7 H  t7 `* d2 F( K, o* v
  99.   char version[MAX_PATH];
    ; x* ]6 r) p! d# C
  100.   LPUPDATEFILE file,olds;2 H! N  Y( \3 s! B! d6 P' [2 X1 a
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    + b* I( @4 \! q  ^- O4 U/ o

  102. : R2 ~; q& \9 Z
  103.   UpdateList.clear();
    & R+ Y- j: [& [
  104.   UpdateFile.clear();3 w+ A& {3 {. @1 W; h5 ~/ z3 s
  105.   if(GetFileAttributes(filename)==-1) return false;2 E: E$ k- D9 D( p. ~
  106.   if(!(fp=fopen(filename,"r"))) return false;% w( u# A/ T1 s3 o9 o3 |* h$ O; \
  107.   fscanf(fp,"%s",version);7 j. Z* K' v2 y# ?; [; h5 _0 i! @
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    & T5 E, o) h5 O; y2 ]7 X% Y7 Z
  109.   while(fscanf(fp,"%s",version)!=EOF)3 c' {; N, _" w3 e" \5 p
  110.   {
    5 l+ n2 z3 p! T  m5 a
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + ^1 x/ |" P3 H! R7 n' T- N" {
  112.     fscanf(fp,"%s",file->path);
    # M$ x. k' z# U$ ~6 K+ C
  113.     ReadFileNames(fp,file->file);
    % d/ K3 U: b1 ]; D
  114.     strcpy(file->full,".");
    5 j( U0 v: i2 H4 T! N5 u$ ?  M( e0 o
  115.     strcat(file->full,file->path);
    4 w$ f" u* ~: m) U" M) p
  116.     strcat(file->full,file->file);
    5 m$ Q+ y( X2 k( p  a, O
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())5 D5 T2 F4 F$ t. z! c  Y
  118.     {, t7 ^$ T, ~4 |/ A5 J
  119.       file->vers=(float)atof(version);4 Q0 W/ H! I/ z  W0 j7 p* w; l+ H5 d5 n
  120.       UpdateList.push_back(file->full);
    $ Q) K' M* V- I! D  o( i! T
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    3 X8 n/ r: k" x6 O& b
  122.     }
    8 Q% v2 ~0 K" C& M% o9 F
  123.     else
    ; M! x3 Y/ k7 D8 _7 R
  124.     {
    , f2 p' [" J! u# L" ^
  125.       olds=(*p).second;
    4 q  N3 n9 f9 X* e- _$ p) F2 T
  126.       if(olds->vers<(float)atof(version))
    ! T) W. H6 o0 F4 Q8 x% w/ d
  127.       {4 U6 H4 a* [# p
  128.         olds->vers=(float)atof(version);
    9 Z/ ~% X2 {) }! _9 n) T* L
  129.       }# E! ]: y9 t5 s' [6 ?6 @
  130.       free(file);& r8 ?3 M2 J3 I8 R$ c( M& L
  131.     }
    - Z$ W3 s& J, c+ j' [
  132.   }5 b& N6 i3 [; `+ I" ]3 ~; W3 e' o0 `
  133.   fclose(fp);. l6 `# ^9 P3 j3 s2 D1 R+ H
  134.   return true;8 R2 W: V, A7 @; [5 e' f1 d& }# \
  135. }
    , n  m( _" \* N; A- E) h
  136. . N) J7 Z& X  f! z; i0 ?
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ; s$ p9 R% V2 {# h/ J+ m
  138. {2 \' G: H, z' J
  139.   TCHAR  szFull[MAX_PATH];
    $ r, g4 N* w- s4 ^) D* p  l
  140.   TCHAR *token,*inter;
    # z7 Z! H" [* q4 M8 [( W8 I
  141.   *szPath=0;2 U: }& d% i8 ^
  142.   strcpy(szFull,szFullPath);9 G" p% ^9 y6 q! [' Z5 W; Q5 E8 L6 l3 X
  143.   token=strtok(szFull,"\\/");
    $ \3 X& J" W; G" u+ ^
  144.   inter=token;1 T+ l& i+ _9 {# c/ Z6 d
  145.   while(token=strtok(NULL,"\\/"))$ B0 ?4 p% Q* }, |5 X. r
  146.   {
    , Q: D* h0 y$ _+ U2 W+ D
  147.     strcat(szPath,inter);
    + Y+ |& `# K9 T. A4 w; E8 c
  148.     strcat(szPath,"\");
    & u" y! W) B" |' N0 W
  149.     inter=token;3 O: [& f4 b: k% Q
  150.   }5 W4 A! a( u3 k/ C9 P. m
  151.   return strlen(szPath);5 B5 R7 ~# B2 r/ @
  152. }
    6 `8 h/ }& d- l8 z0 }
  153. - H. t. \) {; H, [7 {" I3 e: l
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    2 o/ f3 e5 t  n5 ]4 Y$ n  _
  155. {
    * y9 W" ~3 _: R) M& i
  156.   DWORD attrib=GetFileAttributes(Target);) `6 X8 z7 c8 q
  157.   if(attrib!=-1)
    , a0 `* C2 f6 F6 H1 e: W9 |
  158.   {2 Y, j, l0 b  m, t# O
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))7 w( ]3 t* h9 Z* ]0 e
  160.     {5 `- s: z$ y6 l8 O
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    , z3 |( j- b6 r) S2 W
  162.       SetFileAttributes(Target,attrib);
    : |) Z& C, {3 u
  163.     }! X- U1 J8 E  Z2 S3 e
  164.   }
    ( d4 x* s* v" N9 N; H( I
  165.   CopyFile(Source,Target,Erase);, g  S% Q4 ]- X  O. \
  166. }7 z+ K) [/ I. A
  167. 7 [# E, Y8 ?9 ?$ g/ g2 N/ ^
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    $ ]- s) f$ S7 F+ T2 P; _
  169. {2 R4 n) ?2 B4 _! T9 v& U/ G0 A: i
  170.      FILE *fp;! E, [" p- h: N1 E. F0 |3 s3 c
  171.      char  szBuffer[8192];
    8 x" u: |; f' c* K9 u
  172.   va_list  argptr;8 ?2 G/ u+ g: v" Q- R

  173. 6 }3 ?" N/ x5 z) `) J$ O7 u, K
  174.         va_start(argptr,message);' C' `$ j5 v1 W6 G; Y
  175.         vsprintf(szBuffer,message,argptr);
    % W5 a4 K2 u- C, y5 [, r9 i
  176.         va_end(argptr);
    0 ?5 v3 I6 {& U
  177.   fp=fopen(FileName,"a");7 N5 T; w1 C1 Y4 J; n
  178.   if(fp)
    " f. Z! \' M1 z! w% O3 N8 M
  179.   {
    & R, E3 L8 ^8 \
  180.     fprintf(fp,szBuffer);' A4 J2 G' f. E6 g2 b- u
  181.     fclose(fp);
    0 g  [* S6 V# e- n! N+ D
  182.           _flushall();
    9 K3 D1 [; `* x- b' S
  183.   }
    5 y: \+ F" g4 c" O8 z
  184. }
    , l0 U% u) n, r# H

  185. 6 Y: q. E  {  m  r/ z
  186. BOOL CRevAppApp::Fclearf(char *FileName)  u1 I* v: S$ |6 a8 j
  187. {" d: ?4 p" _3 i' d. b
  188.      FILE *fp;7 F( t0 `9 Y( V6 k( |
  189.     DWORD  attrib;
    - F2 a0 A* {9 f( K+ q7 V0 g
  190.   attrib=GetFileAttributes(FileName);
    1 ]. `& [2 ~( ?  J) ]
  191.   if(attrib!=-1)
    2 R  l' r: J1 {( O
  192.   {8 l+ a' a* L5 m$ s& j
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    8 G$ T& R6 H" q) s# Z1 w
  194.     if(!SetFileAttributes(FileName,attrib))
    4 X3 ^2 q2 w$ Q; \0 G
  195.     {
    * a1 S$ |4 ^# a8 }! D
  196.       return FALSE;
    2 ?7 d$ i0 t6 O2 Z
  197.     }
    , {* \/ M  i3 H8 C' w
  198.   }
    . W) d0 b6 Q. q. E4 m
  199.   fp=fopen(FileName,"wb");1 _& E% m# f; [& M% J' ^
  200.   if(fp)
    ) a. T) P+ o2 u9 G3 _6 l, ^3 b( e
  201.   {8 V' T  }7 o2 n3 |7 s& |
  202.     fclose(fp);
    3 e; S' f  |9 E* f9 Q
  203.   }7 Q* Z$ K. e0 ]+ s& u) g* d! v
  204.   return TRUE;
    " q# Z1 \& x% N: V+ ^
  205. }
    - A- o0 U2 L* B# ~

  206. : T" a4 g: C7 F# L
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ) @; {& e% c5 m8 S7 k2 G
  208. {
    " ?$ [" \0 J/ N4 i) C+ f" c
  209.   char filename[MAX_PATH];
    ) H2 w& N0 E. D5 K; \4 C2 j
  210.   LPUPDATEFILE file,olds;/ T# l* _& L2 e0 R3 Q
  211.   std::map<int,CString>::iterator i;
    ; {+ y6 Z; D& H
  212.   std::map<CString,LPUPDATEFILE>::iterator p;6 Y& D  l. N8 u4 F8 d
  213.   std::list<CString>::iterator l;9 C8 T! F6 G* N" B! l: J+ M1 ~

  214. + m* J3 n  k9 e8 s& ^3 V
  215.   if(bFirstUpdate)
    ! D) C- {; V( U) y- {* P; `. p3 a+ @
  216.   {5 ^* _3 I0 U8 J2 G' k+ [
  217.     dwCurrFile=0;
    0 D9 N: I( C, j4 `$ G  q
  218.     bFirstUpdate=FALSE;. b( Q- @2 i/ h& ^+ p" x) P
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - W' A6 G2 [8 F
  220.     {: a4 ?1 e- p# d* R2 Y7 \( U/ \
  221.       dwTotalFiles=UpdateLocal.size();
    8 t' ~* ^: `7 r( X9 k. A" ~9 c
  222.       dwDownLoaded=0;0 }6 o7 W4 g' ?- T! q* H! p
  223.       bSilentStep=FALSE;# s$ g" A' L1 r+ h
  224.       bCompressed=TRUE;
    5 ?- ?. C6 i8 M& |9 `
  225.       strExtLocal.Empty();
    : o8 T0 |* G2 J# Y
  226.       strFullName=(*i).second;
    ( x; Z2 Y, Z% s$ N* e
  227.       dwProgramState=AP_CONNECT;$ a8 h" r% O' y, L
  228.       return TRUE;
    & b7 t3 j0 c8 N/ m
  229.     }
    9 `% [8 C/ H  ~7 W" ?. [0 o3 G
  230.   }( ~7 |4 ]0 \- b4 n$ D! `1 o
  231.   else if(bRestartUpdater==FALSE)- \# W( `( s1 B
  232.   {1 j0 {$ E  b! D, s* ?
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ( K+ c2 _# c& D
  234.     {1 x; f8 X" n' e& g2 A) O; }7 a) Z
  235.       file=(*p).second;
    " t8 P9 v# x: r% v5 M5 M2 Y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())3 x" Z% w1 ^. z  e/ i: X, \
  237.       {5 V3 z/ m9 m9 y3 I6 n% [8 |! D
  238.         olds=(*p).second;- {0 T! \6 V# U% @
  239.         olds->vers=file->vers;
    " j; S9 O, \. @* _' E/ l
  240.       }' T( u! i) A8 O" C: x' H
  241.       else
    ; B( h' b% j/ ^+ T
  242.       {
    8 _  D2 Y" m4 H1 j
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' o+ E+ u: m# m$ K3 m" _" c7 s. Z2 c1 T9 ~
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    8 H' R0 j5 z6 p4 t+ ^4 h
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) c* x% Z  d9 i+ O1 @: Y. U; F
  246.       }' n4 e3 m: _& f
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 m- I6 F' Y4 r1 V  ]
  248.       sprintf(filename,"(%s)",file->file);9 o8 ?6 A! T. P' L; p7 l. s% S+ \
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- @! a6 l' X7 P$ f5 Y1 M: C& W4 O& Q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    7 i  E" r5 C# Q6 `& K
  251.     }( {# O0 o& z+ @/ z6 H5 L. B0 S
  252.     dwCurrFile++;
      H& {( a" a& J. B1 Y5 D7 J" h2 B
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! g1 R# u2 A# ?$ i7 A3 {% j
  254.     {3 e" m, d! x$ K% _" R: s
  255.       bSilentStep=FALSE;
    , C3 e$ B2 _1 ~( c3 t
  256.       bCompressed=TRUE;  a8 [% ?# d& F& s" A
  257.       strExtLocal.Empty();
    + W+ @, V0 Z4 B$ x# |+ t6 N* k1 T- U
  258.       strFullName=(*i).second;' }* I3 Q% F3 I% H' E
  259.       dwProgramState=AP_CONNECT;
    ' d3 X$ C& `' z# {, ?0 G* q
  260.       return TRUE;
      Z9 S0 U# b  |" [1 {
  261.     }
    " a1 g" L; V3 q* a3 |' |3 y( r
  262.     if(!bRestartUpdater)
    , h2 |3 O; f! g) [# V4 W
  263.     {% g/ [% k1 R6 T& ?
  264.       int iCurrSize,iFileSize;. b4 b4 `5 g- r! y" ?4 x; j
  265.       iCurrSize=0;# q8 i8 N1 N4 C3 A* f* c
  266.       iFileSize=UpdateList2.size();/ ~  C0 |" S1 r0 P- k  j( ]9 p. _
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");: u6 g' l# H! a# b2 G0 R9 y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    3 c; `+ O3 f/ W& j
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 Z, z3 {. G! ]5 G& L& [5 e, Y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 g9 c( W' L$ G" K
  271.       Fclearf(".\\update.dat");2 `, w( J* A, u1 y, Y4 M! i9 D
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    - s' Z( r0 k% f0 @4 t* ?4 R5 |
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++): a9 t# O" A- C3 {; ~' _8 ?+ ]' D; i5 m- {
  274.       {& G7 F& d4 `. b' ]; ~
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    9 r- t  y6 j: o5 C
  276.         {
    + w2 `6 H" e/ D; d) \2 Y
  277.           file=(*p).second;! E( `' y7 I" ^5 P% w- h4 ~
  278.           sprintf(filename,"(%s)",file->file);0 }$ z, D4 I! _9 D' ~# u
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! Q. a' c* B& H) W
  280.           iCurrSize++;. c" G8 Y& K, {2 g; Y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ) t; m$ j& z! l* R8 ^. I8 c
  282.         }6 Y8 S5 W% c! c# l" |
  283.       }
    9 u, w0 F3 S5 V1 s$ Q3 V
  284.       unlink(".\\update.txt");4 d6 z$ q; E$ U9 A7 A& }' `
  285.       unlink(".\\update.tmp");. [) ^1 C& E; v
  286.       Fclearf(".\\checkversion.dat");
    3 T/ @$ ]# h" B
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    2 X! ~. A9 H7 V8 W8 G: k' Q: N& m
  288.       if(UpdateLocal.size())& {  x7 K  E$ ^
  289.       {$ K! l  P6 x- A9 Y& C( W* Y
  290.         UpdateLocal.clear();& ]" j, [) ]2 U% W9 s+ E& [
  291.       }# Q  z* ^. F& |8 }. @+ c
  292.       if(UpdateFile3.size())3 ]4 G: T' a6 k8 g* ]4 L, |+ x1 d
  293.       {0 u- A. v8 v, A: x8 [" B9 ]5 r
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 o: d: F. _( j9 i& V: v
  295.         {
    6 ]# o9 o- q' g, q( o! m
  296.           file=(*p).second;
    7 J: e8 z8 e. K' o8 K1 ^/ b/ q9 v
  297.           free(file);
    9 p, h3 x/ R9 }( g1 N. C/ H
  298.         }
    ) |1 x( q5 |" W9 w8 L
  299.         UpdateFile3.clear();
    : a4 M" j  [3 {' c4 N" N  C
  300.         UpdateList3.clear();
      r5 X& {5 g# ?& \/ _
  301.       }+ ]; U+ H5 e* j/ r
  302.       if(UpdateFile2.size())6 i2 p7 o( p1 C- w* @9 \" |
  303.       {$ f8 J2 ?/ w# P
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)6 {6 z% g; A4 P: m
  305.         {
    1 ~9 [% U1 h! Z/ M* b& A. }+ E
  306.           file=(*p).second;5 n# Y* M4 y6 u0 L! D/ i+ q: z
  307.           free(file);
    : f* z8 C8 W8 i4 Q
  308.         }3 N/ k6 o4 Z4 I8 e' H" g
  309.         UpdateFile2.clear();% |2 Z3 q/ {$ O
  310.         UpdateList2.clear();
    5 a2 l4 n9 z/ W9 T
  311.       }
    ( F+ z8 v; @$ {. W
  312.       if(UpdateFile1.size())! e9 s2 X0 z& ]" _6 ]' f
  313.       {9 q9 Q; Y- O2 M2 o' i2 D: P
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 p8 z  v# I; \
  315.         {8 p* I, }" Z6 d0 k  c
  316.           file=(*p).second;; m& V( ~$ R( z$ g( b* P9 o( f( t8 P
  317.           free(file);7 H3 x) u) ~/ F
  318.         }
    + f* Z1 L9 f6 ]8 p" V0 c* ^+ }
  319.         UpdateFile1.clear();
    / I6 T( {: H% E# Z4 \* N
  320.         UpdateList1.clear();
    ; S: S) O9 P. d8 L& O! z3 o
  321.       }$ P# C! m9 T! G& E6 T
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & M; v, U" z, O7 z/ {
  323.     }6 V4 b6 x  U% y2 ^
  324.   }. _# @9 J1 i& C4 e6 T+ D
  325.   return FALSE;
    ' P, g0 T$ o. z4 g
  326. }
    , P5 E& y% T+ m) A

  327. 3 ?2 |+ W. K- k7 e' ~5 [
  328. void CRevAppApp::ClearAll(void). n: X( ]7 l$ E0 x) d, ]
  329. {
      k0 ~  ^+ A! b( r. j; C, _
  330.   LPUPDATEFILE file;
    & x6 X/ _  O2 l0 j
  331.   std::map<CString,LPUPDATEFILE>::iterator p;  j; F9 C3 |* p4 |8 q# R& v: Y
  332. : h. A5 `: ^2 H% |* Q* S3 x6 S
  333.   if(UpdateLocal.size())* Q8 g( e' h" {- X  q, z) S+ O
  334.   {
    5 Z: Z& W7 B0 `
  335.     UpdateLocal.clear();
    & q# `2 Y* J) E1 P. x* f4 @
  336.   }
    * Q% k6 [3 ^: ?# h. e# v: Z
  337.   if(UpdateFile3.size())
    8 b1 V% Q& s0 H: x
  338.   {
    . r4 D, G1 m* j! u' {! r& ?1 u
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" w: I7 S8 N: Y# Z/ F6 w
  340.     {
    7 \, ]7 r6 d# l9 T0 f! ^! Q6 e
  341.       file=(*p).second;
    5 z* K  `2 E: I7 Q
  342.       free(file);
    , u, m) @/ ^; p! B; j" {
  343.     }) f8 g! y  J3 {2 b% Q
  344.     UpdateFile3.clear();
      J9 Z: k( l, f+ U' `" F4 D
  345.     UpdateList3.clear();
    4 H1 s" |* w% ?
  346.   }
    ! H" r9 J/ j7 [7 M
  347.   if(UpdateFile2.size())8 ]4 _9 h: [6 N& Q3 H  f5 h
  348.   {
    / x9 \; N8 F$ P1 G7 p9 R) T4 ?2 S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( ?4 j& Q" I& V1 }6 |
  350.     {! }6 Q% X0 S- N$ ]7 X4 }
  351.       file=(*p).second;
    . `* _5 M2 c7 ]4 C, H$ D$ x4 ~" K
  352.       free(file);* e2 N0 N+ m  V5 J: u9 ^' l
  353.     }& X3 [; }1 ~' l* Y4 z8 V5 y
  354.     UpdateFile2.clear();( J' O8 p0 U+ O. E
  355.     UpdateList2.clear();. F  E& |; v! ?/ C* s# a
  356.   }# z* w4 H+ M6 T" t& v9 c& E  }
  357.   if(UpdateFile1.size())
    + m9 Q7 W# S+ K' k, x  h4 F
  358.   {8 _: `/ Z$ r- V
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / X6 H) I# g1 s4 f$ H' Q
  360.     {
    2 e& w! }/ _; a' M& A; V5 l3 i$ }
  361.       file=(*p).second;8 Y) B0 u( G5 _- t; A# b
  362.       free(file);
    1 [8 F. S( @( Q! ], D% l8 W( o
  363.     }. Q1 H6 S8 z/ o
  364.     UpdateFile1.clear();
    # N+ D5 ?1 n0 c2 M7 }7 @
  365.     UpdateList1.clear();
    & y, b4 v1 t& S% w9 p# V, G: {
  366.   }
    ( R" @/ ~7 s1 N7 m% g' f- |( r4 u2 E( d
  367. }  ' b4 ]2 G" S0 H- i& o* ~8 L1 p" k5 H
  368.   - T* ?4 {5 U7 n2 Z( b2 E
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    " O" a' _, K& H
  370. {  Q$ Q# S6 Y5 G. [
  371.   int c;* w: [, x" K9 P- O5 r$ a
  372.   LPUPDATEFILE file1,file2;
    * g- F$ D% m; x9 ?
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
      i, e: H' `" r6 t# b, ]3 {: K
  374.   std::list<CString>::iterator l;  x& a) k. x* `1 e

  375. 6 d) P8 w) o7 B' o8 z( s) T
  376.   UpdateLocal.clear();
    4 \+ c3 H/ m+ I: F. s& G6 I
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 T& X( F" ^4 Z5 E4 B8 T
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ @, x) P% s7 Q: D
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ M' a4 g7 S0 q6 J: g  q0 M" G9 O
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    " V& g' E0 g2 Y
  381.   if(UpdateFile3.size())
    ' \# V. ]( O  i+ _
  382.   {
    + U, _: o! G; {1 M: |( T/ W
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)/ A) m5 V6 D+ W' `5 J- C
  384.     {
    3 P% k' w. ^/ y3 Y' C  E$ s
  385.       file2=(LPUPDATEFILE)(*i).second;0 _$ j- f2 w. B: \3 ?: y8 d
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' t0 @# K# l$ y+ J3 S, g
  387.       {
      n2 v2 d' Z' p) o4 d. F0 L; f( G
  388.         file1=(LPUPDATEFILE)(*p).second;
    0 g' e# ^- @0 w/ S+ m& R7 E* [
  389.         file1->vers=file2->vers;7 H' N+ F6 \6 o0 ?3 ]4 @! {9 j7 q
  390.       }
    ( ?/ B7 H  X3 O% d
  391.       else; C6 v) z1 M. q3 q* t
  392.       {
    8 J  r7 v" V; w+ W  y
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" t9 m5 u. d) E
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    + T+ X# Z, t% b; v, C0 e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    + y7 `" E2 g  z6 |3 N' B
  396.       }
    8 q- d5 x; n+ v( U% r
  397.     }- ?6 w- o0 s3 u" h& C
  398.   }
    2 k) g3 P& f9 ^
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)& |4 i! Z! D: Q2 @
  400.   {
    + h- Q; s$ ^) e; r- _& T
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    # n, W- U  q  Q% B0 ?7 c4 k' [
  402.     {8 g6 n8 w1 v' E* J) i4 S
  403.       file2=(LPUPDATEFILE)(*i).second;+ q8 K/ d  t4 r: J. j! u
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / g  p9 _. {9 v6 j6 V2 s% @
  405.       {
    ) c% b1 C2 w4 }9 H4 U
  406.         file1=(LPUPDATEFILE)(*p).second;
    : Z$ u$ H- V, Z3 {" p5 m/ K
  407.         if(file1->vers!=file2->vers)3 ^* d2 `/ `: R
  408.         {
    8 `9 U( R3 B. }
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' U6 B" L1 n$ I+ x# L6 Y( O2 V
  410.           c++;6 {9 T# {0 ?- D" q! A
  411.         }
    5 Q+ V3 t0 |- O* Q3 y3 |4 C
  412.       }
    4 X/ O' C0 m" S5 g9 g7 |; d% @
  413.       else
    " Y( j4 L- N$ J
  414.       {
    : S, P5 H. z9 @% P& d+ C
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- _$ y# n, {% X9 T/ \; x
  416.         c++;
    " t" J( h3 x. L7 Z6 e1 Y" S
  417.       }$ ^8 }1 r5 g) W. E2 C: j' k/ L
  418.     }. e2 V8 v$ |4 d2 R4 W: i8 |
  419.   }5 h+ `. m' I0 |: f( r5 u
  420.   unlink(".\\DownLoad\\update.txt");
    4 }( t" {. V' h
  421.   if(UpdateLocal.size()) return TRUE;
    3 y; q  a; |+ g* \+ v3 g
  422.   else                   return FALSE;
    & B* o+ O4 K1 o  c$ g
  423. }5 h) C7 G0 P! ~  w5 @
  424. 8 f4 d# ~2 i0 @* Y0 P) `; v
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    7 V6 a" x2 L5 N! h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"/ ]5 m5 `) J8 l
  427. 8 E; S0 x: B( ~1 O, F

  428. : L. j3 c/ Z& ^0 l( M; G
  429. $ i; h1 N9 q" H! q: ^  N, R/ A8 X" k
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)' s3 G3 E, c2 s
  431. {0 T, g# ?5 x$ u- }9 h2 R
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;& M# q0 m+ q5 F8 c* c4 X& t( S
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' U* A9 A  m! d  @' {( ]) z
  434.   {
      @3 ?. P& J3 J3 I9 ^
  435.     char szLanguage[50];' V9 |( B/ I7 }8 R6 e6 W
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  f. ?- |* ]/ ^. z
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " d, k, n8 o3 {1 Q" l( A# Y# d; f
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; e5 T/ b7 _( o, h" D, K8 L! v4 `- S
  439.     else                                   m_iLanguage=ENGLISH;
      _6 g9 l( S- L# r: ~! B% ]% U/ O
  440.     char szRegister[100];
    ( N  B" I' `$ Y
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " G) F. R3 J, `3 e# Z5 S' x: k
  442.     strRegsName=szRegister;
    7 p2 [, R0 \/ B' A2 o& N
  443.     char szPatchURL[100];! Y9 T& c7 b7 }3 E, i
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! h5 P, W9 y) v8 t$ p+ d$ S
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; `* ]; e  e2 c
  446.   }; @# u* |% W* D. z6 K' F# A; L  ?
  447.   else
    , V* w) `) ]. B- ~- T# p, ^: M. w
  448.   {2 T) ?3 M6 A, Q- p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % }7 h; w8 @) v. i7 L: [* H
  450.     strRegsName=DEFAULT_REG_URL;( {! m2 u5 B; F
  451.   }
    ! H. u4 k- _$ |! @% d" p
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    4 B# \; S1 k7 h" ?: Q
  453.   {
    ) v! k: n" }) C  L0 M- I1 j
  454.     char szIP[50];
      E9 f; \8 u1 r: [
  455.     char szDIR[300];6 ^# K4 b# S& b
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))2 a( k& _7 c; w
  457.     {
    7 Z  }9 Z) L3 l3 J0 ~
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");9 @& W, U3 {& M3 O3 |( A' I( R
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");3 `! @/ d& E- b1 r9 o$ M
  460.       strHostName=szIP;
    8 q& w) s2 w# C/ @8 N# C+ t$ o
  461.       strHostPath.Format("/%s",szDIR);( n- ]0 V" j4 k. u% L1 i, d+ v; s, C
  462.     }
    8 t( D. L2 M( r+ U5 d/ c
  463.     else& o, z# ^* g2 y$ a+ z  d( g0 L& e
  464.     {
    - b$ b0 _' Q1 y- q4 l! o
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 M1 d: [3 L( ]$ \: J! z$ T
  466.       {
    4 R) G3 Y4 T! u& P, p; h/ \
  467.         char szLanguage[50];
    ' t' W4 j: c7 `3 {0 X4 Q9 L& q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! r8 V6 t6 ^! m+ F! v/ T: D
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " p/ k6 D% `6 h. \" A% @
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 |# ?5 e2 r& v6 I1 t# r' {
  471.         else                                   m_iLanguage=ENGLISH;# o. |, J7 R6 _
  472.         char szRegister[100];6 L& F+ I: ?* M6 j& `! L7 ^0 |% D8 K
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - \2 S* T$ {6 o/ C: v/ b3 E$ ?
  474.         strRegsName=szRegister;3 I" k; g- [" Z- L& P% S+ p; V. X
  475.         char szPatchURL[100];
    7 Q; Y3 q! z7 Z- _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # Q! j9 f0 Y8 o9 y% a& w
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , A0 [8 N) ?  r) w0 ]
  478.       }6 O  j6 k. I. q) w
  479.       else1 y, w: d' E9 X2 f; G+ q
  480.       {  m! I8 R0 Y& A& ^6 d/ [0 Q
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * \" [5 _* D4 G7 u* h
  482.         strRegsName=DEFAULT_REG_URL;
    $ o; @" i) D2 `8 C( [
  483.       }3 i) y/ H: D1 [! h0 w) U
  484.     }" K" c& Z2 n, X0 W
  485.   }: R- G. V* h9 ?2 y# `3 z" t5 K
  486.   return true;( X7 l% w+ t  r) V
  487. }
    ) f4 C: i0 p3 W3 h3 T/ y& f
  488. + B" V: R5 b$ J5 }4 Z
  489. #include ".\ZLib\unzip.h"7 j$ F, U, g2 M8 P7 x
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ( c' @7 Z- ]) c* l3 G
  491. /////////////////////////////////////////////////////////////////////////////) H" E8 X+ R6 `8 k
  492. // CRevAppApp initialization% j4 i" L$ [+ k: O

  493. ( U* P* Z5 u9 g
  494. BOOL CRevAppApp::InitInstance()
    . N6 i+ I. y5 ~' p9 e' J
  495. {
    " p9 o8 e. D9 E/ {1 G0 p; M- T! _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];+ m2 Y. R; N# s6 x

  497. : q& ]8 z! X3 s9 K* D0 [) d3 ?
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    " E: q. S9 W5 X  X, Y5 g
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))7 U; U4 d* P9 u: Z" }
  500.   {* r6 \' {0 M/ R; l% v( }
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    / i. T: l5 T3 K  |& P* T: _9 Y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 F6 `- i9 j" l7 W
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))); B- d9 E; s4 M# ^5 R: }
  504.     {' ^& h! A! I& I. ]/ \; g
  505.       strcpy(szPath,szPathTarget);
    & `2 l9 Z$ ]5 v* t* m/ p! y/ L
  506.       SetCurrentDirectory(szPath);
    2 [2 T; T$ [3 `2 T; O7 ~' O
  507.     }
    , o% L( E. B' I/ @% K# ]- y6 B5 _
  508.   }9 s+ e! g( `) z' D  B" N
  509. #ifdef _DEBUG4 U& i3 H$ L4 l% E; p
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * C9 O3 ]# R! B( F
  511. #else
    : P: A5 t2 l! f: c
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * |0 o/ m1 H# i/ I+ z; s
  513. #endif+ L6 B, U( ?/ A3 h  H7 t8 L4 O
  514.   {
    & q7 r# H6 O1 g" ?0 q
  515.     char tempFileName[MAX_PATH];
    # h  l, j1 m  t+ w5 `- ?
  516.     strcpy(tempFileName,szPathSource);! F- {: [$ O7 w" M# P8 Y
  517.     tempFileName[strlen(szPathSource)-12]=0;* B- P, `6 Z  T  W: k4 b$ O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ' x, D4 x6 P% {# n/ {
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ' f) E9 c) h3 U+ G  F
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);3 F) A1 |/ \2 d+ b- [# M
  521.     return TRUE;
    6 x3 f5 F4 t% ^% u8 Y+ U
  522.   }
    / u+ o/ a6 b5 G* {4 D" M) O' R; u. G
  523.   // Nuke 0118: Delete run.exe1 ]9 e; e2 u+ b2 G( V' f% e1 I
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );8 x7 {1 |$ ^% Z3 r4 m
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ) |5 _3 i/ u  h2 W" M$ P
  526.   if(!ReadCfgFile("Config.ini")), \& ?) W' ~- r1 |" \/ ^3 _
  527.   {! @( R( _1 O4 e6 A6 A' u" e% k, a7 I
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    / C4 e; A/ M2 ]
  529.     return TRUE;
    1 P$ A4 b( `% [
  530.   }
    / i! O" q+ Y  f; U2 T# `+ o
  531.   HANDLE mutex;7 t, Q* k- ?7 f: [) h- ~( m
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ' z1 L, m, G8 J6 V& u: ]
  533.   {" F0 B( p1 G  W0 U2 j; w
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)7 }- @, Y5 ?4 l8 E, ^8 Y, |- q6 R0 |
  535.     {
    ( o; G3 h" s8 i
  536.       CloseHandle(mutex);. t! Q5 e" e  |6 E" l
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    & r) O; c" O: z$ O. z- n% R
  538.       return TRUE;' x: ]# C0 Z  R# a
  539.     }) y6 S6 p: g2 Q, W
  540.   }  
    . O3 }- c* S4 S* h& t! e" X
  541.   CloseHandle(mutex);& [  k+ l) r8 k; `; B* A

  542. + w+ I1 \* Z5 e: t
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( c/ \6 u1 Z. T

  544. & s1 U5 s, k! X9 h  G. D, S0 J
  545.         AfxEnableControlContainer();6 I! _4 @. i0 ~8 z' \8 f
  546. ; k& w- u" \" ^2 D6 H
  547.   bCanUpdate=FALSE;
    ! ^& v" C7 K0 x0 o( Z1 ~. B, B
  548.   dwStartUpSteps=1;
    9 r" \4 ^0 @& M6 W
  549.   dwProgramState=AP_NOTHING;
    & S6 M" y3 e- I0 ^0 v$ f1 w

  550. - V, L/ K( O1 r+ S8 L
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);2 U; V' e8 r8 t9 R

  552. & }3 i7 t. \# E2 D, y
  553.         // Standard initialization5 Y- a$ R3 q- f% A% e# p5 o0 H
  554.         // If you are not using these features and wish to reduce the size/ d: w* W. ]/ _0 z! Y1 Z! x
  555.         //  of your final executable, you should remove from the following
    + j; B, _% ^; m2 X
  556.         //  the specific initialization routines you do not need.
    & A+ ^+ {" H$ o/ ]% X- c) x
  557. # _" u( y+ b/ J, P8 a
  558. #ifdef _AFXDLL1 B. I  |( p6 ~# Q1 N' t0 V
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL' }# [- Z- Y- T$ E4 S$ g0 `8 I
  560. #else
    # W4 q: T0 `+ k/ i! Z: e
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically) O/ A; c3 H/ `" Z
  562. #endif5 l  U0 E+ a; l1 |# I8 _
  563. 6 h" b  H6 M5 @; W. s
  564.   dlg=new CRevAppDlg;
    ! ~( j( n8 z8 G8 A
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ; W! h* n) ]4 k, Z2 D6 B  [
  566.   dlg->ShowWindow(SW_SHOWNORMAL);; K8 G1 k1 D4 ?
  567.   m_pMainWnd=dlg;" o& M/ ~# t( `  a" y  J0 M# @
  568. # ]) i0 l. w& W5 a4 v" I# W
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 A6 t8 g& `8 _" R
  570. $ a+ x' Y  H( j4 ^6 M6 m: I
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ! i6 C6 ?  I1 w, F
  572. //  ULONG_PTR gdiplusToken;+ d2 v. m3 b: t( Z, d
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);0 {" K* p3 u! |% C% u5 Y
  574. : M  B3 Y! o0 F1 R( Y3 e0 ^
  575. //        CRevAppDlg dlg;+ E6 q$ ]9 V2 l# ~  W$ Z
  576. //        int nResponse = dlg.DoModal();
    " S: B4 k! m1 D$ d
  577. //        if (nResponse == IDOK)
    * Y- v8 Y$ r6 V# @4 C) F
  578. //        {
    ! O# ]; d2 v  ]' r" s, c& x0 t
  579. //                // TODO: Place code here to handle when the dialog is6 l9 D4 v5 r2 P! d8 D  |
  580. //                //  dismissed with OK5 P5 j. P2 w1 _- R/ T) C9 t
  581. //        }0 [6 S# a9 _! C9 m7 C
  582. //        else if (nResponse == IDCANCEL)
    " h7 Q+ |* D2 |& o+ R
  583. //        {
    $ g% d; s. X8 t* u+ B; c8 L
  584. //                // TODO: Place code here to handle when the dialog is' i- P4 H8 ^7 }! ?6 m* p
  585. //                //  dismissed with Cancel4 M9 c7 w( k+ R! e! K6 T$ ]
  586. //        }
    : ~0 G6 d; R& g
  587. 9 U( Z- e! y* |* O
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    4 N4 G3 u6 \. _6 y8 X/ N% U, B6 P
  589.         //  application, rather than start the application's message pump.
    + G# f' v6 Z9 k, X' N& d
  590.         return TRUE;+ \2 |3 G7 I- p) x, b* L; U
  591. }5 V* g0 f# `9 J- a

  592. / K* G7 J+ I" T1 C
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ) K1 o5 B1 r% Z
  594. {
    ; r7 _- D" J6 J7 K5 J4 `, M  V
  595.   int i;3 K! ~. E: Q9 v4 J' ]) B5 J3 u
  596.   char *szRet;
    , x" _  D% m, [# G5 c* l* V0 r' x

  597. 9 S* W+ L, z$ |% e9 u
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    - w! g* j, C3 }( M: n
  599.   if(sztoken): B3 P# W( g6 ^% ^. c2 t
  600.   {
    : E9 e0 M' ]$ L& m$ a7 H
  601.     szRet=&sztoken[itoken];; A* _( B6 ~( R0 y0 h
  602.     while(sztoken[itoken])0 E/ `9 [; X+ M. U* y3 f+ s
  603.     {
    9 }1 V  n3 _+ o* i) k: V' {( S4 ^
  604.       for(i=0;i<(int)strlen(token);i++)
    / u  W: d4 X$ Q# h
  605.       {
    5 S+ _" b" G# S; y! L2 V- ~' \
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]). z) C7 P, V) |
  607.         {
    7 `/ |& F" P& U4 |3 G6 z8 c
  608.           sztoken[itoken++]=0;: Z# O& Y2 Y+ K% U6 u8 {
  609.           sztoken[itoken++]=0;( S& P% `; T  J& `
  610.           return szRet;
    & y' F5 H! c# g" y, _; [& U/ }
  611.         }
    ( x- I7 T. e. W8 k& h$ l# a4 s2 z
  612.       }
    & `; V) s' V# A, r
  613.       itoken++;) w& D. p6 Y1 x1 ?2 T9 Y) I
  614.     }+ H5 `. c: J# j+ p- M
  615.   }9 g' }  S. j4 s0 W/ d
  616.   return NULL;
    : b- \( I1 t) Q" a2 b5 u
  617. }9 `/ G4 |# T3 k) F0 _( L5 }6 K1 n

  618. $ U7 n; r. Z. o1 T- g* S# ~6 U
  619. void ProcessProc(long Total,long Current)3 B: u* c9 \8 `& ^2 l* `
  620. {5 F! \5 i+ z! l  H
  621.         MSG msg;, j. _& R' S& `, O1 {: X' c
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    # O' d8 m" K2 n  ^% `" x
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));3 D+ R8 q; M% g! D2 w4 S3 |
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))$ d9 V! H6 Q/ p. \6 J& \
  625.         {" D* t6 a* n) s* [9 Q7 k# k
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ( I! w, S. O9 j% W
  627.                 {
    ) P; O8 \+ f" x% T1 R
  628.                         return;, O8 b+ v$ u+ o
  629.                 }' G3 q. s! p8 s3 p9 p" o4 s
  630.                 TranslateMessage(&msg);
    7 S6 d3 p7 J( x. G" C- e
  631.                 DispatchMessage(&msg);
      H# q2 G1 R5 n# G. a- q
  632.         }       
    1 C. G( a/ @3 f1 U! y
  633. }+ P- l3 e  E1 n, y+ a: R5 J! X

  634. + S" b7 o) ~: \. w7 f" A- \
  635. BOOL bFirstChar=TRUE;8 `! W' y( W2 {$ |3 Z
  636. $ E+ X) k2 D$ e5 G  G
  637. BOOL CRevAppApp::OnIdle(LONG lCount)% n0 h9 u0 _% Q/ E
  638. {
    " I8 z* m+ M8 O; y# ^5 {6 p
  639.         // TODO: Add your specialized code here and/or call the base class
    ' O6 m" `  k1 K3 A# _' z
  640.   switch(dwProgramState)" Q2 X& ?- H5 Q" K& J- F
  641.   {
    & D3 ~8 ]4 Y% z7 t
  642.   case AP_NOTHING:1 e: N/ _, C- \6 p! \* {
  643.     switch(dwStartUpSteps)
    % y1 ~/ a; Y" Z6 Q& X
  644.     {
    ( l9 g6 X5 C- h- K2 U: ]
  645.     case 1:, m/ l( Z# `4 R' u9 `$ E
  646.       {. c! a2 c2 _* F& {9 e  T6 m
  647.         int i;% C5 a3 G  J% e# i+ c* [! A$ d- c. z( b
  648.         CDC *pCDC=dlg->GetDC();/ p) v+ V  q* G( s
  649.         HDC hdcwnd=pCDC->m_hDC;$ V( S" Q* u: Z( k6 S3 H
  650. //        Graphics graphics(hdcwnd);
    1 \% t5 ?4 x% I- L3 \* E& {1 {
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 x4 @- h; h8 T+ N+ ?
  652. //        INT iWidth=bitmap.GetWidth();, h$ l8 S7 X! C" \
  653. //        INT iHeight=bitmap.GetHeight();& V2 x/ {3 ^) S! Q; Q6 E& [
  654. //        Color color,colorTemp;
    # k5 y% W  `# A3 W. a+ |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% Q$ G- e; o! w1 w8 a" M0 Y* J  }
  656. //        {
    . F( I: |7 t  r% c$ X( S$ y
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)* s- F3 O) \$ _. j" V$ s
  658. //          {
    2 {( h7 u& s4 |% X3 l0 w
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 `7 D2 Q! c  v: U8 G; J, l
  660. //            colorTemp.SetValue(color.MakeARGB(
    7 a) \- _! L+ o! @2 w0 S4 w
  661. //              (BYTE)(255*iColumn/iWidth),6 ?5 e0 ]: m& x& u& P2 O
  662. //              color.GetRed(),1 R( L" |6 H* u7 O  k
  663. //              color.GetGreen(),
    # J- b7 H6 B% G/ Z& v% l
  664. //              color.GetBlue()));) D, x+ k( Y+ d/ S# C: E
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    & W1 E  ^1 T$ m! U3 ]
  666. //          }: z( e- h) X2 E* [
  667. //        }
    " k7 }! g  t7 U% F6 N" l7 S
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);0 m5 W0 b( p, C) V. m% p# F
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 t0 K9 b$ w0 T. O8 q7 @1 B  T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    7 K$ V  v' U/ c! F
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 l+ E& r, X1 G9 U9 J+ s
  672.         for(i=0;i<240;i+=8)
    + f% \& p; N9 W$ J* p; I; y( C, \
  673.         {
    ' t- o' p% `# |* M: s
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; C, L) g2 j" Q9 U2 [0 b! C
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; f$ j# G  d4 s% Z+ x* N
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ X) Y9 m1 t; U2 i
  677.           Sleep(33);
    " c" n; j# s9 q- L1 R
  678.         }8 F6 f+ n  C) t8 |5 C% [
  679.         Sleep(1000);
    % c6 M! k. B3 d( \3 T  ?
  680.         for(i=240;i>0;i-=8)3 y5 f. B6 B$ i+ Y! V7 Z7 N* D
  681.         {
    $ H# H  F4 @/ ]* y' p% i7 N
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) {, e1 P" J* L% I/ Z
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ m1 f' z  f1 j
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 |6 U- x7 p% o; B* z2 S3 d
  685.           Sleep(33);( H, G$ `' g" m
  686.         }/ ^. v/ U( L$ B7 O
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ' c- \4 O) x* G- y
  688.         dlg->ReleaseDC(pCDC);
    $ ]5 \! @0 E# Y4 i
  689.         DeleteDC(hdctar);
    " W# U- @6 Y& y4 T6 J$ H7 k
  690.         DeleteDC(hdcsrc);
    3 C3 f& v" d3 u/ t
  691.         DeleteDC(hdcorg);
    % d+ K5 i2 ~0 K7 O. X
  692.       }# t+ N1 w! W, l" b! L  d
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    7 J! @# J6 \. p( a) q
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    # X: M5 r- z6 @" ^+ E& n: K, p+ s; e
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ( Y8 p) O6 a, F3 a
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ' ^' z1 ]) [4 Z+ o3 J: T9 i
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / G- |" g* C4 t
  698.       if(!Dn.Connected())6 p/ K+ k0 C, o: o
  699.       {
    ; B5 g  D* N+ k/ j
  700.         dwTotalFiles=1;# M3 G$ T* e1 I' b7 h7 R5 H
  701.         dwDownLoaded=0;
    / K7 P; Y  f/ J1 n3 O6 n
  702.         bSilentStep=TRUE;
    # ~# G% s" ^2 x. G
  703.         bCompressed=FALSE;+ B" `7 j/ f" n2 K
  704.         strExtLocal.Empty();0 R0 r5 d$ S( k% G# {. y3 C. w
  705.         strFullName="readme.txt";
    6 j* E" [5 ^' J: k" P- i& |
  706.         dwProgramState=AP_CONNECT;* |. Q5 b" B" t0 e* x
  707.       }- `3 m6 W8 T& ]- ]  Z7 H' c* u
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();  F- H5 Y+ z3 m8 U$ F1 B  Z* Q9 }
  709.       dwStartUpSteps=2;# x3 x3 g; d, J. O8 Q7 R$ }! R3 x
  710.       break;
    ' M/ N; W5 @6 {5 P: ~  O2 |) I
  711.     case 2:
    2 l5 A+ Q1 Y9 O
  712.       {
    ' t/ }5 V6 g" N; T8 K5 I) _
  713.         int iEOF;
    0 Z  d/ n- A9 h7 v5 h
  714.         FILE *fp;
    ; v8 J* ^7 X: e4 g6 m! r
  715.         char szString[512];
    0 L4 W. P" J* K; }$ b8 c$ p
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ( [0 e0 |: a7 _: N2 A4 G2 P& o
  717.         if(fp)
    9 p; I  \1 [% A0 `8 f' l. a
  718.         {
    # O8 [* g& S" c
  719.           do
    + W: H1 r9 r5 `: ?
  720.           {
    & x* `% }* a5 u+ \0 T
  721.             iEOF=fscanf(fp,"%s",szString);5 s% q6 f( y7 p0 O' |6 w8 d/ Z
  722.             if(strlen(szString))
    1 m0 l( v  ~6 m* A0 r2 i
  723.             {9 N4 u2 d" m$ r  M$ e! [+ U
  724.               if(bFirstChar)' G% j! A$ @# J$ N/ O1 ?+ n9 W
  725.               {; b6 J9 g3 L( Z4 s6 J
  726.                 bFirstChar=FALSE;3 v9 g, K; H( F. F; Q$ F
  727.                 bConnectIsBig5=FALSE;6 s/ l4 R5 P: ~2 }1 s& `; B
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    4 V+ n# T. a+ e3 q1 j2 `9 r3 J
  729.               }% s6 O+ v) P& ]0 p
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
      [! ?3 }, W% K# @2 G
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    6 b# Z7 F; `3 c, O( ~1 M3 S
  732.               dlg->m_ListText.AddString(szString);! r* v; {( W9 d
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 ?4 o- s8 Y' x
  734.               *szString=0;
    & @) Y9 M7 [, L9 j
  735.             }
    5 _( T5 x2 Y- _" |# Z. e- l% B
  736.           } while(iEOF!=EOF);' g' a# z0 M: [. p+ R
  737.           fclose(fp);6 w$ M- d7 k% [' g! A/ j8 N
  738.           unlink(".\\DownLoad\\readme.txt");
      G! D* u' p1 |9 m
  739.           dwStartUpSteps=3;1 e* A7 l, M* q0 T3 I) ~# _' u1 s: ^
  740.         }
    3 H4 e4 q3 k: s% }* ^! W9 M
  741.       }
    ! J0 Q# F/ K! @. t/ d5 X
  742.       break;
    . _2 r* D# X* i8 O( M
  743.     case 3:
    0 m- \! x) ^$ [4 S# v+ I+ o8 a( u
  744.       if(!Dn.Connected())
    : Z6 T. d$ A4 U: [# y
  745.       {
    7 k4 \' O! d2 X
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    $ h* X$ @2 F6 I/ r" g6 {2 F7 O! S
  747.         dwTotalFiles=1;
    ' h4 n' r9 @" Y# D' G5 h( ^
  748.         dwDownLoaded=0;! N/ J# E' L* A1 |- A& [
  749.         bSilentStep=TRUE;
    2 I2 @% H9 b: D3 Y* }/ `. ?
  750.         bCompressed=FALSE;
    + M3 ]1 b# l$ r
  751.         strExtLocal.Empty();) g7 T  I. |/ e3 V3 y% K
  752.         strFullName="checkversion.txt";
      D* l2 i, r4 Z0 N4 w
  753.         dwProgramState=AP_CONNECT;' E2 Y: e/ Z/ @, v
  754.       }0 }3 ?- _, T# `, A( I
  755.       dwStartUpSteps=4;
    0 M6 r7 K# Z) g9 f' P5 U% x
  756.       break;
    , |0 ^6 I6 ?  A/ C9 T; c* N% H
  757.     case 4:
    3 |/ N" H  k  M; w0 l* R8 j9 H
  758.       {, A9 R$ ~, T+ S
  759.         FILE *fp;
    ' N4 \- U* _3 x' D* h8 I4 M8 [
  760.         char szString1[128];
    3 l) Z2 S) f9 a# x1 g
  761.         char szString2[128];
    # M) X( [* \8 P6 g+ ~0 a5 h
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 E; ?8 ?, P3 p5 R7 f8 I
  763.         if(fp). [* p; `" H, k! [7 _) i
  764.         {
      c; I2 E0 J- ]
  765.           fscanf(fp,"%s",szString1);2 H$ j, l* c" a3 f' t3 e
  766.           fclose(fp);. |3 x# c! B) s  O  E5 u! h( f
  767.           fCheckVersion=atof(szString1);
    " z4 w: m" i* ^+ C1 O7 @
  768.           fp=fopen(".\\checkversion.dat","r");
    / j) @& `8 z2 k' o6 ^2 W5 q
  769.           if(fp)8 T0 k$ w4 F1 k3 B5 C
  770.           {
    . `' A5 S. f- x/ J
  771.             fscanf(fp,"%s",szString2);
    2 d! Q0 f: D5 R& ~
  772.             fclose(fp);2 Z9 {( e$ \) ^/ x$ z* _
  773.             if(atof(szString1)!=atof(szString2))
    ) ?" b# f0 f$ J  }0 b+ f
  774.             {* K2 Q9 t" I- C6 O* V# T
  775.               if(!Dn.Connected())
    8 y5 Q/ p% @0 }' w# [1 W
  776.               {: T2 w9 m, B5 c) @% \) A. G
  777.                 bFirstUpdate=TRUE;
    0 T5 `; [' V2 D  T8 p0 x6 K4 m/ y
  778.                 dwTotalFiles=1;+ [, N6 {- @  w$ u% u
  779.                 dwDownLoaded=0;' X2 z6 T/ E! ]8 ]0 J
  780.                 bSilentStep=FALSE;
    8 r4 T- c+ f( q. Q, G
  781.                 bCompressed=TRUE;: U, J' V$ L4 Y2 f5 b! O6 S' h
  782.                 strExtLocal=".\\DownLoad\";
    1 D' h3 _& P( g8 L+ x* n1 N. x0 x
  783.                 strFullName="update.txt";
    5 ]! Q  e4 V' `" V9 F( k
  784.                 dwProgramState=AP_CONNECT;' `$ Z0 m/ H2 h
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 _% y# z" z4 s! J3 D( v" @0 r; s
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( T( s& N$ g6 l7 v& {* a/ {/ E
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");2 R& q9 B1 m% W6 e9 i) @

  788. ! o( C" s# i7 t4 e0 {8 ^+ P
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) W7 D: p- v, o& _0 a; r1 ^  `/ X
  790.                 unlink(".\\DownLoad\\checkversion.txt");$ F, ]( m& Z1 k) [+ L& ^/ x7 x
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)0 }1 F' i, h( j- f4 m! N5 I
  792.                 {8 {" J( ^3 v3 d% v* o) v
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    7 F1 C7 G4 l3 Q1 w' n
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");7 l. g; }2 y4 r
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    : b) I0 ?  I9 j# g- q1 Y) F
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 t9 d! t7 g: K7 T: J. L

  797. 3 m3 S2 X, A2 F. w/ o' h) Q: n
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    2 ^3 ~4 a7 `, |
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - z( f- Z% K: a( I
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");3 ^, \$ m6 P8 T$ b- E
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - T1 {0 d* a2 O" [! A
  802.                 }  W4 B8 ^: r5 C; J7 k
  803.                 dwStartUpSteps=5;. f4 M  t0 N2 |( H! @4 S
  804.               }, J: n! y7 o6 i; I; ?6 E. [
  805.             }
    / i( v/ b' r  h2 s/ q8 R- H2 `! N4 G( k+ ?- f
  806.             else
    / T. w" R5 h# ~- P/ Z" Y; Q& \9 M
  807.             {
    # C1 x& T5 Q7 x7 l5 H& L
  808.               unlink(".\\DownLoad\\checkversion.txt");1 O- P0 p6 n! {& k; _
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    4 ?2 t% K3 g# W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");) _4 C2 T2 L+ |
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 o+ C# e% S* q3 J2 L% ~
  812. ; u' m/ c" p5 E7 ^7 u
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  K" b7 }1 \, I* ]
  814.               dwStartUpSteps=99;
      M% ]1 `5 P7 ~
  815.               bFinishUpdated=TRUE;6 E2 E9 g" j/ {
  816.               bCanUpdate=TRUE;
      {1 U' K0 R$ q- t4 s! V
  817.             }* H6 t3 P6 P1 H( o6 |
  818.           }! [3 T- l  }0 U3 ?4 k3 e
  819.           else# k! H# w- Y2 D
  820.           {9 S* C3 E9 z4 V, U) ~  S
  821.             if(!Dn.Connected())9 _0 G# M4 p! z# U
  822.             {
    + e5 w  A2 q, E1 B  g, \
  823.               bFirstUpdate=TRUE;
    " A# v  ?$ g2 U8 T
  824.               dwTotalFiles=1;8 ]' `* j" l% x* x9 K1 W
  825.               dwDownLoaded=0;
    6 E7 w% c& u( [- W/ s; P* `0 Y
  826.               bSilentStep=FALSE;' X! P# b# Z( V/ \' J& e; b" z
  827.               bCompressed=TRUE;
    - Y. {; G3 {; s/ \) [
  828.               strExtLocal=".\\DownLoad\";# O) o# D% z" S
  829.               strFullName="update.txt";' {5 c# Q- Q1 ~! |' r
  830.               dwProgramState=AP_CONNECT;$ K9 g1 l& w7 L& f3 Y& H
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  J0 s, L2 Q3 l; f% H, B# @
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - v2 a/ `3 j$ O. ]: P9 Z0 f
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");# O: Y: ~; D! K+ I, k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 Y3 V7 M" v# j9 @) j) `
  835.               unlink(".\\DownLoad\\checkversion.txt");- s& a7 ~( \4 O( L$ O7 e
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)7 T8 l: C- g$ t' s
  837.               {
    , Z. ]) u/ }- q% v, H- ]
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    2 g4 p) {) E) M0 S7 l$ Y7 W- b! ?* I
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");+ C1 [2 d; H3 E! J$ e1 B
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    - f9 q6 K/ g  s9 Y' _# G/ O. k
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! b0 Y) V6 x& @4 i
  842.                
    4 Q: ]  B1 r# e/ f" e$ O
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . a% a. s+ Y1 w, j
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% T& A" v( j+ {
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) R0 O, v% u7 C0 \8 d( y3 _
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + _7 q4 a" v& `) o
  847.               }
    : P& j* u% f, M" m; D
  848.               dwStartUpSteps=5;
    ' k  `/ \5 ]% f+ P
  849.             }
    / T/ h& h3 k% T1 I3 f. F
  850.           }) i9 A! E: e: V. d4 L+ H1 S
  851.         }
    - H* e- u& A7 n/ t
  852.         else. S# ]1 a4 o1 L
  853.         {5 B& c: i0 O! ]9 X
  854.           dwStartUpSteps=3;7 a$ v! m; F8 ]9 w1 u" O, d
  855.         }6 D4 j, o6 u" [# T7 _5 F
  856.       }
    , G+ |: N! H% T- C
  857.       break;
    0 e% `7 \9 k% t- f
  858.     case 5:
    + n$ `0 R3 w3 y% u1 \
  859.       {
    ) y7 `( O! Y5 X  c9 F* d! w3 v
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    9 d2 ^9 ^$ _6 F% }8 @
  861.         {
    % K, r5 d7 v, v  j4 [4 ?
  862.           int opt_overwrite=1;# H3 @' S  b& f4 X/ Y0 g
  863.           int opt_do_extract_withoutpath=0;& \( M1 X& P5 p9 `5 @
  864.           unzFile uf=NULL;
    4 }) [% k9 l1 O$ ]: P" d3 d) l
  865. 3 I/ y' Y: {6 h" `
  866.           uf=unzOpen("Wsa.zip");
    : E& f/ O# i/ V# C, Y/ ~
  867.           if(uf)
    . ]* U0 L$ t  V0 V4 L
  868.           {* d' M) S3 N; b  b
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    8 F8 e5 U: @9 r. @9 s# J
  870.             unzClose(uf);, e! b; {, p' \- C. A' G+ o
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    & J; X4 m6 S& J1 s- o5 I- r
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    * }# v3 u* S0 s6 x% {
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");1 }5 e- Z& M3 z! x6 l- j8 o0 x
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) L# K% l* ]+ M0 m& g5 ]/ p
  875.           }( ^* n( Z- {4 j/ W5 i
  876.           DeleteFile("Wsa.zip" );$ A0 d2 w' b1 s* u1 ?6 O( s
  877.         }9 h6 Y3 [# D$ N* @* M! ~8 \) Y* S( ?

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

5 s, H; y) R# D# l1 t+ j" 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-13 13:54

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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