找回密碼
 立即注册

CSUpdate.exe源代码

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

2 m( l/ z" H  \% M" e( q
  1. / RevApp.cpp : Defines the class behaviors for the application.5 F4 e6 D, v) v( B  H/ J8 O$ ?
  2. //
    % y" q$ s4 ?" P( }0 M$ ~

  3. ; ?7 `- f0 U1 ^' o7 q) Q0 U1 O
  4. #include "stdafx.h"# E7 D, v' w/ F% z& B
  5. ! L) ~, u; L. ?/ s
  6. //#define UNICODE
    $ W" u, y/ d" K, B
  7. //#include <gdiplus.h>/ V% ^4 J* `" @, v" j
  8. //using namespace Gdiplus;+ G8 `! J! i% v& q+ \$ [4 u' g/ v& F

  9. & Q) o; T" V+ f3 P! I, n7 G6 a
  10. #include "RevApp.h"! w% e* k0 W) f
  11. #include "RevAppDlg.h"2 {8 ^6 w) y* q
  12. $ m3 E1 C- m2 x
  13. #pragma warning(disable:4786). M4 f3 z" @$ B
  14. #include <map>
    $ G9 W. t2 v5 E2 U: X
  15. #include <list>
    ) h6 U, i, V& ^. `" y+ o2 g" x" D8 c
  16. #include <direct.h>
    4 l2 l) Q2 u3 ~: z% c( h

  17. % ]0 b- u5 D. p+ J4 X' S+ G
  18. #ifdef _DEBUG
    0 H0 \+ a& H. _( m* c6 g
  19. #define new DEBUG_NEW
    ' {9 k  H$ u3 S) v! C
  20. #undef THIS_FILE
    7 C6 U% r- ]) E1 t2 L" r/ C! ]5 _# g
  21. static char THIS_FILE[] = __FILE__;) m1 l: C: D1 f; i1 }
  22. #endif
    8 R/ Q3 j+ @# `0 }
  23. #include "SkinResDef.h"
      }9 Z& n( V% y& d$ y# y# X
  24. #include "ChangeBG.h"
    - [% R. i+ @0 ]; o: X
  25. #include "AFXINET.H"( }+ H# j  ^- {7 ^7 r% H0 f& j

  26. ' U& p2 m7 N: Q0 `# z* k% ~
  27. #define TRADITIONAL_CHINESE 0, h3 ^# u, e5 P+ f1 g; m: ^+ J
  28. #define SIMPLIFY_CHINESE 1
    1 f: f8 S* I- y
  29. #define ENGLISH 2
    , E$ l# a$ Y8 {: ~: J8 U4 ~
  30. int m_iLanguage = ENGLISH;
    6 R3 y6 p, n8 z( {6 ?! \
  31. /////////////////////////////////////////////////////////////////////////////
    - C1 P0 ?$ \3 y# }
  32. // CRevAppApp
    # x& ?4 a3 W% i- e" e" W

  33. ! ~0 w0 B3 g( Y& w
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" h- D$ t8 d$ I' R$ d4 H
  35.         //{{AFX_MSG_MAP(CRevAppApp)% R% t& z9 U2 a. _! |
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.3 e- m" j. ]5 I) t0 ^
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!/ h9 |" P/ Z! r  ]) a$ E+ R! [2 S
  38.         //}}AFX_MSG1 a6 z# q8 W( t
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)* z1 a( j" Y3 D3 I* t4 g
  40. END_MESSAGE_MAP()
    " F3 o/ V7 ?$ j8 ]7 ^  P+ _- L4 X

  41. * X# Q% `/ M- {1 j( V, o
  42. /////////////////////////////////////////////////////////////////////////////# E( _, D  D5 P
  43. // CRevAppApp construction' A% R3 @1 J9 N0 \* M1 l7 s

  44. 4 m/ u- i/ \& [. f) ~  O
  45. CRevAppApp::CRevAppApp()
    ( r* G) i2 J7 E6 {
  46. {* p$ v9 L2 `" ^3 T* n- ?+ n! B
  47.         // TODO: add construction code here,
    ' h# B2 ^4 ]2 q; p. G
  48.         // Place all significant initialization in InitInstance1 m" {$ f. H+ C! U
  49.   bDisplayIsBig5=FALSE;1 @/ j% I4 N$ ]! c* B) B
  50.   bRestartUpdater=FALSE;. t. _* m$ `) c
  51.   bFinishUpdated=FALSE;
    9 X1 D" n1 `# ]2 {8 G! \' `3 C
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;% q0 X1 J' d; }' ~$ x
  53.   InitChangeDataBig52GBKS();
    # u! c* ^7 ^/ s" r1 x
  54.   InitChangeDataGBKS2Big5();) B1 N5 z- k4 ?
  55.         //
    : Y% _, r0 h% L% W- x
  56.         bClickRunExe = FALSE;# F- u  P* f9 Q2 O' `/ O
  57.         //* I4 F8 l  a6 q9 a9 T  `0 t2 k# g" ?
  58. }7 K  ?  K( H* u
  59. 1 M3 t! Z, M- L1 S
  60. CRevAppApp::~CRevAppApp()
    + b! @7 ]; l* N' B: b2 u$ Y
  61. {" q; V% s  J/ f9 z, D# `! O/ A
  62.         // TODO: add construction code here,
    9 ?# P% H0 ]/ d" a5 Z- h% n3 a, l9 I
  63.         // Place all significant initialization in InitInstance
    2 P, z+ O$ n. r$ X& A( ]1 E
  64.   EndChangeData();
    ) G* {2 g2 s5 b7 W
  65. }
    " K; ?9 ~8 ^6 V5 A. ~2 I

  66. " E+ j  `7 ~8 V* F( @( g
  67. /////////////////////////////////////////////////////////////////////////////  N% R. ~7 q8 ~' p* [' T
  68. // The one and only CRevAppApp object2 G: ?) E* X6 m5 r! J

  69. % ]2 H8 h! B( f/ w% {' p7 `8 S
  70. CRevAppApp theApp;- u) d9 [0 e4 I/ Y2 b- ?0 a
  71. * `$ d7 }% C6 y3 e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ! s2 K& y" T5 ^4 Z% i# T8 e) L. y' ?
  73. {
    , ?$ S9 |- [  \1 x$ s! {' S
  74.   int iEOF=0;8 @  C' o- B' }2 O
  75.   char szTempName[MAX_PATH];: Z. {; V9 g* j3 l/ w; T
  76.   *szFileName=0;
    3 b# P1 r( p& Q
  77.   iEOF=fscanf(fp,"%s",szTempName);4 ]6 m4 g6 k. a6 o0 N0 `
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # D; v3 D9 [& G  B1 B+ F/ B1 Y
  79.   {. V: Y  n% k* I) i$ J2 p2 {
  80.     strcpy(szFileName,&szTempName[1]);
    $ P, R9 E1 y: H+ j
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)$ g; B0 \1 f+ r' E  j
  82.     {
    ) ?5 I4 K* R6 P; o2 m; m1 ]3 C
  83.       iEOF=fscanf(fp,"%s",szTempName);
    9 z" @! R" h7 V6 ?/ B7 |3 N, A
  84.       strcat(szFileName," ");' a5 R: l# I" i# _' E
  85.       strcat(szFileName,szTempName);; a" C1 ~6 s9 R9 w6 ~5 t
  86.     }% W) J* o! h' V, w% |& k
  87.     if(strlen(szFileName)>=1)
    7 P4 e; p+ C8 O( B3 b! C
  88.     {
    5 e1 I9 ^0 i# f  a
  89.       szFileName[strlen(szFileName)-1]=0;
    4 Q% s6 P% X# ^1 u6 M( n! d' x
  90.     }: {3 M" K) n. N1 M5 Q1 r- c+ o
  91.   }
    $ t1 x9 v4 Q/ ~
  92.   return szFileName;
    ; ~# u3 Q7 x8 l$ @
  93. }6 a1 T8 O+ x' y7 o- o$ H
  94. 6 \  i8 A7 f+ K7 ^
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)2 N( H+ h$ B1 ~# X2 w
  96. {
    & {- r1 l: H# u5 A. N' j
  97.   FILE *fp;; V" m8 I: r6 ~. r5 U3 e  k
  98.   char *key=NULL;
    ( L1 p9 [4 F! C0 K
  99.   char version[MAX_PATH];
    ! S' X7 [5 |! _& v+ u
  100.   LPUPDATEFILE file,olds;
    1 \1 K  H2 m+ Q1 _( d' N+ K9 G5 |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 |1 {, a+ w" ]4 w( O$ m. k0 x# ~

  102. $ Q. J: _0 s* u0 \1 T* J! U' j
  103.   UpdateList.clear();
    2 `3 K% B8 @& z! T2 v2 I9 j# `
  104.   UpdateFile.clear();
    / o3 O# a9 t* ]: j7 c2 |1 x% F1 U
  105.   if(GetFileAttributes(filename)==-1) return false;9 b/ u* c6 E" `
  106.   if(!(fp=fopen(filename,"r"))) return false;
    " J/ _5 S2 t" v  z2 M
  107.   fscanf(fp,"%s",version);
    ; {/ ~8 c4 J2 `# s7 E* R' b- N
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }% G( _; {6 B8 c% w  U8 K1 a6 K+ s
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ( K3 k: k/ d# k  C$ {5 {
  110.   {" Q! S) b) |0 N5 N! l+ S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 Z; I+ ^0 `/ ?  E$ m- p" N7 S8 b) B
  112.     fscanf(fp,"%s",file->path);
    9 w! n0 Z( P% Y" f  m$ I8 U
  113.     ReadFileNames(fp,file->file);
    * n/ g6 ~2 c$ @. p  @! \; B
  114.     strcpy(file->full,".");, Y! A6 q) v1 w8 p+ n
  115.     strcat(file->full,file->path);
    & V4 B6 }2 Y7 D7 _  T9 I
  116.     strcat(file->full,file->file);
    5 M9 p( I4 `9 k0 W
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- {/ c$ ]' B1 s0 V
  118.     {- i, j8 {- N/ }
  119.       file->vers=(float)atof(version);6 d! [7 A) l. ?$ w' I
  120.       UpdateList.push_back(file->full);  G' ?3 l# A# Q
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));9 j+ d/ |7 C0 {" d8 R. p: Q
  122.     }
    8 W  D  N2 [( X( f
  123.     else
    5 X2 {! z/ S4 x9 S
  124.     {
    . ~2 F* l! U. D: H* w
  125.       olds=(*p).second;1 J- T5 A( g/ [; j* \5 S8 V* N" B) g% [
  126.       if(olds->vers<(float)atof(version))' n. ]9 \% x+ q" M9 M' S: K
  127.       {
    5 L  w4 r# l# l3 U' i% `: t% W
  128.         olds->vers=(float)atof(version);
    . W) ]' X/ ?; {" U
  129.       }1 ]- G$ P; z  @- n! i/ \
  130.       free(file);
    . N) B, Z* W+ w) W( I
  131.     }+ C4 M! W2 O0 G0 J4 J  ?
  132.   }/ V: B! ^1 G- H1 }5 {$ A
  133.   fclose(fp);
    % W; u5 O  e2 B
  134.   return true;
    ' `0 G7 y$ m5 E+ n# J
  135. }
    ' @1 m' E9 c/ c& r) h

  136.   _( ~! _& `/ g! h/ b: c
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)0 [  a% ^% p! R7 p- E$ N
  138. {4 i2 a6 V1 m- L/ D
  139.   TCHAR  szFull[MAX_PATH];( ^. [% D& R& ?. B6 {% G. B: M
  140.   TCHAR *token,*inter;  ^" ?; @5 A1 [# |0 ?
  141.   *szPath=0;
    # G6 @  J8 R/ j* r
  142.   strcpy(szFull,szFullPath);
    2 s2 s6 }: e7 E( [5 W! X
  143.   token=strtok(szFull,"\\/");- r/ E! }8 ^) x* p. ~
  144.   inter=token;* k3 y" u$ N+ T  J* E
  145.   while(token=strtok(NULL,"\\/"))
    1 v; V9 m' h6 {
  146.   {/ c8 ]- L. G( }& f
  147.     strcat(szPath,inter);* a8 P: |  k5 o9 {6 \0 u, c
  148.     strcat(szPath,"\");
    ) X0 s5 o2 W! h* r6 ~5 G
  149.     inter=token;
    / v1 d6 k( l- C2 j0 d- v3 ^
  150.   }
    4 z7 i1 T2 A5 W& a" d. d
  151.   return strlen(szPath);
    - J! `( c5 r, }, q6 Q! y+ d( o
  152. }
    . O* q, I1 S% q: N( X
  153. ' K3 c3 F" @' S7 ~' `! T
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)8 U# D1 c, `) R* m5 I
  155. {) g! ?, J. Z7 v9 A% K
  156.   DWORD attrib=GetFileAttributes(Target);
    0 c$ g8 F- Z2 q3 y; w: ]5 ]1 H
  157.   if(attrib!=-1)
    ' X& f# U3 `& q! l+ c( l8 I
  158.   {! ?$ Q" C  `: s# p; J' Z9 y: V: l
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))9 I9 @# c' k- @/ ]5 X
  160.     {; Z8 B8 B0 a+ {2 Y( ^* \
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);8 Y) `$ H5 ~: t
  162.       SetFileAttributes(Target,attrib);
    & K  c3 _5 a! S$ }" F
  163.     }0 I; u/ H) E7 X8 S& u
  164.   }
    1 a, Z4 v) g% v$ f$ `
  165.   CopyFile(Source,Target,Erase);: r, g1 b. t3 b+ a. d$ j1 \
  166. }3 P3 z+ A0 f) f7 M- m+ Q

  167. * O) Z. U: L8 D; Q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    9 T+ ]  q0 R2 I
  169. {) N3 d5 ^% J% b/ N# ~4 i+ |5 k5 C. G$ ?
  170.      FILE *fp;$ [; ~& b. T9 E8 q
  171.      char  szBuffer[8192];
    ' t$ y9 M- r- Y% R
  172.   va_list  argptr;# M( U7 d. j* ~; E8 n
  173. 4 r2 L: Y* c; x6 _" ]9 x! _
  174.         va_start(argptr,message);
    . _, l' t4 i) Y6 R" ?+ h' ~5 r
  175.         vsprintf(szBuffer,message,argptr);  N+ @1 h% y/ q' A, t
  176.         va_end(argptr);: F, Y; S) X3 M: O; i
  177.   fp=fopen(FileName,"a");
      `! Z* c' ^& Y$ |% @  P( {$ t
  178.   if(fp)6 ]2 p4 |1 S$ U& Q9 t2 _
  179.   {
    2 y6 s2 s- a/ Y6 _' }% y' M; a
  180.     fprintf(fp,szBuffer);( u3 T2 F) Y% b( B" N
  181.     fclose(fp);
    : e. @# k8 ^, L
  182.           _flushall();
    % ~4 V2 t/ o" v
  183.   }1 y  j7 O$ `" @  Z: H  o8 r! K
  184. }2 N+ F0 g0 f5 w. E; ~0 o5 Y
  185. ( t/ p+ I3 m, x+ ?' [6 G
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    - V) \" t. P2 ]/ m6 F
  187. {# c+ f/ j8 S. i) y! Z
  188.      FILE *fp;: {9 j3 s) M" a' \  @# z, k  w
  189.     DWORD  attrib;
    6 T- G! h$ A8 z4 E" Z
  190.   attrib=GetFileAttributes(FileName);8 U* E  E4 [$ Z. l4 Q1 f3 h4 {3 k
  191.   if(attrib!=-1)# y. X; Q7 \7 V1 L- U
  192.   {$ Y6 N3 _1 v. b# W( @8 v6 m
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);; W* U  ?- p! x& A5 f, J
  194.     if(!SetFileAttributes(FileName,attrib))' I+ Y* X# t; \: n3 Y
  195.     {
    3 a$ C* h1 z  q6 y& I; x
  196.       return FALSE;2 u6 Y* _# [  P: n7 R. V
  197.     }7 l5 v  t9 g6 j8 k7 m9 Q& |
  198.   }! p9 n! x3 g* {8 l, g# r; ?* S  U% u
  199.   fp=fopen(FileName,"wb");
    * t, o' N8 t" w# O! G8 t  R
  200.   if(fp)' m1 g3 r* f: f; `
  201.   {
    0 k/ b! _+ N4 C
  202.     fclose(fp);
    5 o# G* u4 m# P" _) c0 W$ @( ]
  203.   }; z9 v. d4 U, W' x% W, O
  204.   return TRUE;
    / y  p! A9 S6 R1 _7 n
  205. }
    & v; y9 f  z# C3 K& `# U9 N
  206. 2 o, g, c" r8 b/ q
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + N3 n7 S- g! P0 K
  208. {/ c; I  f: n+ V; ]! ^* ^
  209.   char filename[MAX_PATH];
    ( w  E# z+ ^7 l  b2 t* z
  210.   LPUPDATEFILE file,olds;
    7 |0 {$ a/ N+ v" ^) |- t. L. {
  211.   std::map<int,CString>::iterator i;7 C6 s& S8 ]3 t0 D
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    + w3 F  s/ ?0 ]' r) o7 z- ~
  213.   std::list<CString>::iterator l;
    6 @8 h$ |7 x- p" u) N& r

  214. % }3 s7 E: v* b( \
  215.   if(bFirstUpdate)% ^$ b( K  x6 ^! r8 L# d; w
  216.   {* w" D- }8 E/ E
  217.     dwCurrFile=0;: B$ p# ~7 K- W& \4 |) J+ T9 @8 k
  218.     bFirstUpdate=FALSE;
    ! {& ?: Z: d2 V# M$ \' R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())" b7 ?$ G- b% z1 S4 e; s* t$ M  Z$ p
  220.     {7 \& r/ Z" ]2 e' a5 `6 d. M  L
  221.       dwTotalFiles=UpdateLocal.size();
      C# }& L7 `' M( |- m
  222.       dwDownLoaded=0;
    ( ~1 D! G$ E0 C% J; z
  223.       bSilentStep=FALSE;: f9 a3 |  {2 M' B: k
  224.       bCompressed=TRUE;
    ) @7 U1 F5 }3 Z
  225.       strExtLocal.Empty();
    + n/ U  k4 w: G8 M
  226.       strFullName=(*i).second;' E  e/ ]* x2 s2 L2 j4 q
  227.       dwProgramState=AP_CONNECT;
    ) p( t1 e0 J! T3 W1 a- y% O' x
  228.       return TRUE;1 Q( v2 P% _7 ]$ S, h7 k  C
  229.     }
    - }- b- ~* N% }0 I# R
  230.   }% v5 I4 z8 u& x3 F6 Z4 A
  231.   else if(bRestartUpdater==FALSE)6 c2 `+ |" ?6 y( t2 U* ]
  232.   {- [5 m2 m0 q( R0 ^/ m
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    8 I5 I) G" [/ Q1 r' M. J
  234.     {9 G# b5 Z/ }, v. V9 e
  235.       file=(*p).second;& H$ m3 ^% Z7 \8 o1 g: B
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    6 R* d. F& L/ k  s/ E# ~! ?2 x
  237.       {
    ! \" c+ i7 J  _5 P) y0 [/ s
  238.         olds=(*p).second;( M/ ~) l+ _" A4 a
  239.         olds->vers=file->vers;
    ( l1 r3 j; q  s" ]: N$ g( R4 p
  240.       }: Z) y1 C! u" L4 x/ A% ^- ^9 k% z
  241.       else
    4 ]- d' E/ m- W# O
  242.       {9 r+ {- I' `. w  W$ v
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- I4 p0 K7 V9 r/ _2 ^, Y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    / ?& [9 W  P( n) b2 S+ Q9 Z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));# h6 F+ t/ B# g0 b( p9 ~
  246.       }9 D; j5 J" T. n! y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");4 G& p9 o1 k' E9 a; X6 L* `
  248.       sprintf(filename,"(%s)",file->file);
    " _. E' d' z" {- l4 I  }  M- b7 e* g
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);" a: o7 f) [4 |% N
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }. z- w# U# e: c; j9 K
  251.     }
    9 k; K7 R" h7 r3 N8 y; \
  252.     dwCurrFile++;
    * A- ~5 r* V" O5 W
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 s/ `2 b7 l$ r2 D/ |3 b
  254.     {
    ' k- ^4 N7 t- Z, u" A8 h
  255.       bSilentStep=FALSE;, Q+ F; D; H& e0 M* F) K
  256.       bCompressed=TRUE;
    + H1 _7 H& q( B4 `8 r6 B) U, ~( M
  257.       strExtLocal.Empty();
    $ X* @+ `* _- U$ H
  258.       strFullName=(*i).second;3 H3 s6 Z: k" z) z: S' e
  259.       dwProgramState=AP_CONNECT;+ V. h% J" M) e3 P' }5 z
  260.       return TRUE;" j7 |2 `& I& l. \
  261.     }
      F% a- N; z* r2 Z9 i: t( P8 i
  262.     if(!bRestartUpdater)( d6 ~8 {9 j4 n" [9 R# _7 p% S
  263.     {7 l5 [  u8 ~8 _7 M' {
  264.       int iCurrSize,iFileSize;
    + ~* j( T% b2 h2 I$ U) o
  265.       iCurrSize=0;
    , d. R2 ~& f% U. h
  266.       iFileSize=UpdateList2.size();
    . D$ U7 ]7 X! j( T9 f! z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");. w5 n  m# F7 n' r) f; d5 B7 r
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ) ^- n9 }( K3 Z" {3 k0 `6 p3 Y9 }
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");5 L' ]* A' D# b  U" m' Z! `
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      `& @# D) u9 Q; ?, S) {- P# z
  271.       Fclearf(".\\update.dat");- D8 e1 ~. I4 E" v
  272.       Fprintf(".\\update.dat","Bloodyf\n");1 j+ G5 U' V& G3 J
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)0 Z  h. R8 Y3 }. t0 `
  274.       {: U# _( v% S( Y1 k% r0 x/ f
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ! P+ x. ~- N# U1 V4 a
  276.         {8 ]& L2 k5 K$ Q0 }; ]8 G' o
  277.           file=(*p).second;
    " V0 Z  T5 W) |2 }. w
  278.           sprintf(filename,"(%s)",file->file);. a& @5 P6 C; r/ i' t8 j7 ]
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ V" S1 y% H$ w8 ^# O! i* t
  280.           iCurrSize++;. X6 D5 w+ k0 K5 E; G
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));$ X5 k& s: q' f
  282.         }( ]' g1 p! F. L" n! A% {3 A9 f
  283.       }6 o3 H3 p/ ?( A
  284.       unlink(".\\update.txt");& \- n. }' x& B- ~5 _5 Q
  285.       unlink(".\\update.tmp");
    9 v. F' m( k% n6 `
  286.       Fclearf(".\\checkversion.dat");4 B! _9 h4 x3 y  H  `' ]/ g
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# K0 G  R( Y( ^; @* R9 V; B
  288.       if(UpdateLocal.size()), A6 x; V. w- T( M% ^& P
  289.       {
    ) p; Y) X9 h8 L3 K/ s5 y
  290.         UpdateLocal.clear();- u( b2 n# H' y4 `& e, g$ B( ]3 Q
  291.       }
    / {# s, i9 s% [
  292.       if(UpdateFile3.size())
    & D$ ]- E" k0 V
  293.       {0 u* C2 D6 l. F" M
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 j0 W# M5 c# t) v+ a8 p0 t  g
  295.         {
      I# G! d6 i  w) Z8 X
  296.           file=(*p).second;
    , e& g( K7 K3 r8 n* `
  297.           free(file);$ r: l7 }% g9 @: b1 M
  298.         }, u8 ^' r4 U8 b* L+ _9 g& O3 r5 Z
  299.         UpdateFile3.clear();4 l( ?! S9 [" d* g+ ]
  300.         UpdateList3.clear();
    5 F# [* r( D8 u- J  p; B& L' c0 l
  301.       }
    ! H4 y, v* i$ f4 g+ @$ j% r/ x" x
  302.       if(UpdateFile2.size())  t8 D8 a6 s7 [0 m
  303.       {
    : h4 B+ O( q" ~" p$ `" N+ v
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) r7 r6 b3 B+ P  J
  305.         {& i( L2 [7 K0 g  p
  306.           file=(*p).second;; k: x# o3 ]+ I1 t3 U' E
  307.           free(file);! j, A) o- v+ p( N
  308.         }$ I3 B9 l( X: Y2 o$ t
  309.         UpdateFile2.clear();0 S# B3 _3 s  |+ q8 ?7 n! ?0 u
  310.         UpdateList2.clear();
    9 U  _( ^; \- t( X. B% {: T9 f
  311.       }1 r3 M* D: n+ V6 F  k0 {
  312.       if(UpdateFile1.size())- s6 ?8 k/ n+ \, }
  313.       {
    , ^9 h  C+ ?& \
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ S5 l, H  n. I" I; k" @) W0 I
  315.         {0 s4 k8 m; H4 y+ \1 G
  316.           file=(*p).second;
    9 }6 c" q1 E, \9 m  F8 I% ^+ E
  317.           free(file);6 K& m( N4 t6 j5 f; m
  318.         }
    + O( l, x+ M* c5 T: f& j' n3 m1 }
  319.         UpdateFile1.clear();
    * i* C: e" X5 f1 N
  320.         UpdateList1.clear();
    # T+ o/ R+ F" Y( S* R" Z0 |1 O7 _
  321.       }
    : A- S: c- @) i5 K& q& M& C
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    0 w9 n3 J8 |7 b, x4 Q: S
  323.     }
    8 F# w% z: {5 y% |
  324.   }( v0 x$ Z$ q( h, `1 y9 C4 c
  325.   return FALSE;
    0 _6 X. a+ U, ^
  326. }
    2 _. m6 q7 ~0 i- S' N
  327. & m+ t& G0 N/ ~3 S7 {, q
  328. void CRevAppApp::ClearAll(void)& d& ~/ _! g! Q) F' b8 c- d- U
  329. {6 Q& j  Y# e, [3 [
  330.   LPUPDATEFILE file;
    / \2 X8 b* U; z. w5 h& R
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 U6 }6 m: W# C4 G' S

  332.   ?% K4 |% _1 ]: n
  333.   if(UpdateLocal.size())& T. `) E# w) u; J
  334.   {8 O! P: T# t$ T, e0 J; j
  335.     UpdateLocal.clear();
    , H0 j3 d' F( E( V" _$ C
  336.   }
    , U/ B7 h; ]( l7 h
  337.   if(UpdateFile3.size())2 d! Z* `  v: P  t+ c. \" ?
  338.   {
    " v, l$ u# |& _8 B
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 p0 o8 L% s' v' u
  340.     {# A2 Z) G: S% o6 m! ]
  341.       file=(*p).second;" ^" K6 K& G- G' R7 ^9 ?, A% [
  342.       free(file);
    ' M$ I8 u0 m: a% o9 u
  343.     }  E( ^2 W% C' c( y2 N
  344.     UpdateFile3.clear();( t! R, S$ X  L! Y+ ^8 F
  345.     UpdateList3.clear();
    ( y( G/ x$ X6 L; W' u
  346.   }. J2 S0 S% h5 Z7 ^2 @* _; B
  347.   if(UpdateFile2.size())
    : ~. C0 Y5 y8 D( S! G' G. V- j( n
  348.   {6 [3 [$ ~6 u: l9 c: N. W' U' i
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)5 J; W3 K9 m* a& m+ Q- t- `5 V1 |
  350.     {
    7 }9 ~- c! T, U2 q' d6 i6 l% x0 P' j+ J
  351.       file=(*p).second;
    # @  n) C6 m7 W) V. y- i
  352.       free(file);: U$ A/ ^" n, `$ t, i# [5 h4 _8 Q0 |
  353.     }
    / f4 {- h: {) H: F0 N1 K
  354.     UpdateFile2.clear();
    . ?! @9 Z7 u$ Z- O  E1 n
  355.     UpdateList2.clear();
    " h7 c. a& ^* T- w" D2 `
  356.   }8 i3 C+ i8 U6 X- ~$ P) Y
  357.   if(UpdateFile1.size())
    2 B+ C. G) @8 H! M" N; L
  358.   {
    - C; n/ j1 R- i. z4 T9 u" f
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 o' i1 M0 M* O0 M
  360.     {
    ' g$ H7 \4 M( L" G" e: {8 b
  361.       file=(*p).second;
    ( \; H. M2 p( `# E: w* m
  362.       free(file);2 v% Z5 A% O8 O5 ^
  363.     }
    , \  _) f: i0 y: A" O9 O
  364.     UpdateFile1.clear();
    1 ^/ [6 f. j: P
  365.     UpdateList1.clear();
    4 S5 D$ o+ a) S3 D# f
  366.   }
    ) x! v6 h3 {" O. @# w4 s% U8 x! y4 Z
  367. }  ) A1 f3 M4 O0 ^+ k9 C
  368.   8 k5 F% e* S% P5 u6 S, t
  369. BOOL CRevAppApp::CheckLocalVersion(void)6 e' b/ C9 c% j6 r
  370. {
    " r: D$ o4 g- _# n- d! f
  371.   int c;
    ! u4 M$ ~9 v, e3 x( D% n
  372.   LPUPDATEFILE file1,file2;1 ?3 |& F. L; d+ o& t( L* f4 ~
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    . D( R, o8 E# }, m, K2 W0 b' H
  374.   std::list<CString>::iterator l;. b9 u1 g, j  m
  375. 1 u6 L* i1 ^- X" j
  376.   UpdateLocal.clear();0 r: C/ S5 I, ~! L8 o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    1 F/ Y) {6 @. m+ E" R  {0 O* L3 o
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);. B( f7 k/ `' \9 M! O+ P4 t
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    $ ^  y* n6 P. f( @4 u' T. J
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);2 a, P( i+ X4 `) K/ n; b
  381.   if(UpdateFile3.size())/ A. _0 i* B, s& K) Y
  382.   {
    0 a; D% \$ t# ^, n) r; [
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++), T4 b9 V* J9 f* O
  384.     {" u1 |% W6 V7 M/ e3 _
  385.       file2=(LPUPDATEFILE)(*i).second;
    3 ?6 _" b% }- D6 `
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 j9 W% W# K; q) C, ?
  387.       {
    $ A# f: b2 O! H5 y! F; K. m8 k5 X
  388.         file1=(LPUPDATEFILE)(*p).second;' Q" [+ \  R1 Z6 X  J3 R1 K6 l
  389.         file1->vers=file2->vers;
    ' \5 x) T+ N2 l; `
  390.       }  D- m/ C! U8 u8 H' z
  391.       else" x: C9 S" i$ i9 X: a4 Z
  392.       {
    % D4 J$ R; V1 \# d
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" q( B- o8 m/ S- ~6 O
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    * [: o9 y2 ^! w4 e/ u# Q5 D) _; `
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));* m, d) M  t7 ^, O* g
  396.       }/ K- \5 j; d' U
  397.     }
    5 i# F# g! t- g+ q; E3 s5 r7 C* S
  398.   }4 U3 @! w+ n% l9 w3 R9 `
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)1 Q) c0 `: e7 g: c
  400.   {  l( c5 b  J2 i0 l* |5 B4 i
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())/ M5 ~! P  k5 V7 Y8 x$ E
  402.     {6 ^. N' I- R- y" _, R
  403.       file2=(LPUPDATEFILE)(*i).second;
    ; ^) j# U6 d) Q6 c
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 L2 F; {1 U( l2 }1 Y/ O; k0 ?
  405.       {4 \9 ]0 Z3 i2 t8 ]
  406.         file1=(LPUPDATEFILE)(*p).second;8 l7 f2 }; t( a+ I: W6 d# i
  407.         if(file1->vers!=file2->vers)" M& \, Z1 {% ^( ?. t9 F& c
  408.         {
    , S4 a5 T' k4 Y, h4 m4 Y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 z8 H0 P4 `  A6 F7 L2 n- K
  410.           c++;' s9 N) }. t" X9 n0 @0 q
  411.         }
    7 Q+ [) O5 P) M7 V+ T, H( T
  412.       }
    , _* ?! R" [5 \- h9 z
  413.       else
    ) D8 T2 G1 z2 _: y4 J; r3 e
  414.       {
    7 i( d* J; V( v1 G" m7 `$ @
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / _; ]) H, R. J- N* P" t5 |
  416.         c++;
    ( E% ]2 h! W+ }" ]$ U% ~7 _( Z
  417.       }# C3 X2 b. i9 b" x! p& |# p
  418.     }, e; D4 `- ~4 e9 C, B; J" w. x1 _
  419.   }) k8 [8 P0 Q8 q1 o3 v+ W+ S. f: _" m
  420.   unlink(".\\DownLoad\\update.txt");' I, L/ [9 r3 X, j% |/ v
  421.   if(UpdateLocal.size()) return TRUE;
    ; l4 F& b3 y! `# v3 G0 C7 q" a/ J
  422.   else                   return FALSE;0 S" U7 Z* U7 ~$ v3 e
  423. }
    ' q" G1 q( F9 {1 N$ w4 g0 X
  424. - K) p; x0 t/ ]& [
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    * n4 r! O9 H0 c& w  t) S
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  v7 t: O; ?% _  f5 {  h
  427. 7 I( j. _9 [1 G) G9 X

  428. * H( I$ g4 N0 V
  429. # y& P: B1 Z7 d2 T' {8 I
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)7 ?/ r* _  Q  ]. O
  431. {
    + a/ x4 @# q4 i8 {
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;& v5 x" c/ b! j  p% a0 Z
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 Y) ?. G, Q. S: z
  434.   {+ u/ d/ f0 Y9 S' U! A
  435.     char szLanguage[50];0 w! i4 G% b9 o
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 S& @  E' P$ t$ Y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;5 x. P8 |2 V0 m5 y8 |
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  b% d) R& U% h5 s: a( j% t: e
  439.     else                                   m_iLanguage=ENGLISH;, z7 k- Q" J5 r' B# R( W' F6 `. |
  440.     char szRegister[100];
      F# D7 b: n+ D& x; x
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 k% b4 \, Y6 Y: r9 q3 Y6 l. F
  442.     strRegsName=szRegister;2 A$ z# M# @) n( g
  443.     char szPatchURL[100];
    , \* [+ i$ G- ^3 s, ~$ T0 e, r9 M
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- L5 h  e- R  U9 c; o4 }( U
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 C9 h$ B; ~+ I% D% w8 u
  446.   }
    - I% ~& w* O: Y/ j$ y
  447.   else4 k8 i  b) r# w
  448.   {
    0 l/ S/ S6 f( X& r2 ?6 V. F0 f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 y1 }- L( U! _+ o/ K! m
  450.     strRegsName=DEFAULT_REG_URL;5 v4 n8 d! _0 i& y* q
  451.   }% Y4 ]7 ?6 @. ?2 M+ y+ A' i+ @
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! b: W7 b2 B( F6 a4 \# C: m
  453.   {) E/ @: ~$ d% T* y8 h6 d) f( H
  454.     char szIP[50];
    4 _5 m2 u* N, E  L- ]
  455.     char szDIR[300];" X8 ^0 ^% |3 ^1 n
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 T# T( `/ j! S4 W& z  T4 d1 i/ x
  457.     {9 y  t2 \. s" I) l( H. j
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");+ U/ j% R  j" A6 I3 X6 P
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    # `- u, |0 y) o: e
  460.       strHostName=szIP;% H+ c9 ^* T* H3 d# V' t5 V" s" }
  461.       strHostPath.Format("/%s",szDIR);
    / c0 Z! ]* }- X% l+ H
  462.     }: l+ s1 x' [( v. Q) `) v
  463.     else) E; b2 U0 U7 E7 I* Z
  464.     {1 Q5 z( o1 x% j% N& i4 S, e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! v1 e/ p4 z' E7 R9 w/ M* [
  466.       {4 D5 `$ |/ d7 g4 u4 u
  467.         char szLanguage[50];) p, ?% G  H" ~  _8 E! e
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * x% L/ f* a: O$ S, [. [2 L
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, g' |+ w, k. w' m( d2 ?# h
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 Q: ], v: H5 P  R' o' \
  471.         else                                   m_iLanguage=ENGLISH;& c7 \- m$ D7 G3 q6 F) q. l' l
  472.         char szRegister[100];
      K4 [$ B5 V$ l9 a+ ~
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 }; h' O3 c3 H- h2 i1 V9 R
  474.         strRegsName=szRegister;5 @# j$ y6 s3 k5 \
  475.         char szPatchURL[100];
    1 \+ F" K* d) m
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# J2 U- V5 F4 s: [! ]' [
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 y  o/ [* _$ M- P1 v
  478.       }
    . U( N; U  y) q1 ~9 o" I8 L+ Z8 L
  479.       else
    ; |# D, V. y. V2 {+ l( n
  480.       {
    , r) ?( t& J' _( R9 U7 \
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 D, V$ [8 ~% j9 q1 L& B* m
  482.         strRegsName=DEFAULT_REG_URL;
    $ O9 e: a/ n( j6 R8 y# K9 v
  483.       }
    & @  P& X0 T% h  e+ y- |
  484.     }9 V+ O4 ]; C- C5 s- w
  485.   }
    . U# P  g2 ^' q! n) T# X8 M' }
  486.   return true;# s) o' w" M% [; F2 j
  487. }( j7 F6 x* {; l' [/ d& h
  488. ) z& x1 ~5 b2 G
  489. #include ".\ZLib\unzip.h"$ e( F: h0 N$ @% u: a  r" z
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    . N7 l3 P$ i) d& i3 |3 C& R
  491. /////////////////////////////////////////////////////////////////////////////
    + P/ T0 A+ b- E  }; j
  492. // CRevAppApp initialization
    # Y7 H# ]/ K4 x* _; y0 Q  M

  493. 2 R0 S1 F& K# |& t) Z) a
  494. BOOL CRevAppApp::InitInstance()
    - @6 ]8 W$ Z8 `& L: o
  495. {0 c: s- l' ?) d6 ]9 a( t" r
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 t- q- c/ @- A0 ~
  497. : x* ?  n$ c) D; J' a6 r
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    0 _. `% {1 u9 g( A
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    " x8 G% b8 a! c: e: C* e
  500.   {# T; o9 ?8 C5 z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");4 p9 t  \4 \, g8 i
  502.     GetPathFromFullPath(szPathTarget,szPathSource);# [- d9 q& h6 c2 F) {: G
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ; B8 M4 t6 C. }& g  D
  504.     {
    1 _& L0 v6 a. R. e
  505.       strcpy(szPath,szPathTarget);0 @' |+ g2 P7 Z& x+ e
  506.       SetCurrentDirectory(szPath);
    ; W8 n  i$ Q' Q; O: i# P
  507.     }& S( ?+ f0 E1 ^2 w8 x+ J8 m! k
  508.   }
    7 G& H! U5 B' j8 x* k% [
  509. #ifdef _DEBUG& D# t0 \. Q+ z- Q7 S; \1 A- o
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" k# R! W! @  `4 x1 ^) L* F0 N, b
  511. #else
    : F, u- v% C- z, W1 p- }3 y# p
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))* e- N3 I" y) ], C
  513. #endif9 e$ E  v) _, M
  514.   {5 A: \+ {  S8 `% M, t$ K7 ~
  515.     char tempFileName[MAX_PATH];% ~1 ]9 `" Y% V
  516.     strcpy(tempFileName,szPathSource);
    5 w' Z; I5 e: v/ v0 w. u
  517.     tempFileName[strlen(szPathSource)-12]=0;3 i: z' q- ^- L! \" x
  518.     strcat(tempFileName,"\\$CSUpdate.exe");! `  J  @9 g8 b; O3 D9 @" \
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);! h( {5 I: r' P- c
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    6 W4 \0 L# h. M/ v: i
  521.     return TRUE;
    ( B9 w, H  R& A% B
  522.   }
    + J4 g* j4 z$ _( _: E: \
  523.   // Nuke 0118: Delete run.exe
    ; T/ r2 h3 W  I: N
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );- L' d$ m6 n  i% b% q" b
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");7 S! |( G. F' z0 w. A1 h
  526.   if(!ReadCfgFile("Config.ini"))( T4 b7 D, t0 E. w% T
  527.   {/ E4 g! z6 M- X; ?( L. }
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);, r$ u  Y, ~0 ~8 b/ {; P
  529.     return TRUE;
    ' w' e/ t. M4 d
  530.   }, ]# A, Y7 x& D  z; D
  531.   HANDLE mutex;
    # }, m, e+ m' Q" K- u
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))' X7 r; N5 V7 ?( G: H. M
  533.   {" k$ [* @1 O3 Q( u. r1 {  {5 X' [9 [
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    / c- y6 J5 }0 L$ o, _5 y
  535.     {" f6 [! {9 e8 H. K
  536.       CloseHandle(mutex);& {$ c8 Q0 [( H) i
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 t- w& @% w! L
  538.       return TRUE;
    # V" Z# r/ A" v% k$ C/ U
  539.     }
    ( B2 r' o  T6 \5 f7 A9 t
  540.   }  # Y0 }% o# @5 H( D3 t' O1 B" F
  541.   CloseHandle(mutex);' }; S) ]) k/ ]& [7 P% i
  542. ) Y: Q4 F8 B- z: |/ h
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    0 U3 I6 y" ]; C) Y9 j  Q- t
  544. & X: x% S! [3 V( @
  545.         AfxEnableControlContainer();8 I6 ]: a/ q1 \
  546. * Y% H( w3 f" V/ V1 k
  547.   bCanUpdate=FALSE;2 \1 o6 }1 ^9 t1 M
  548.   dwStartUpSteps=1;; h. B- r! l2 H( `- j# s; q
  549.   dwProgramState=AP_NOTHING;6 {2 T0 ?5 X# p
  550. % }  e' {; u# ], `
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & k% p4 Z( V5 w1 y" i, ^; s
  552. 6 K! f+ B% f# t1 U8 l* s
  553.         // Standard initialization
    / r3 ~% m" f& g% _! V  G  x
  554.         // If you are not using these features and wish to reduce the size* a4 i6 T4 D6 G: G! U. A5 d! K
  555.         //  of your final executable, you should remove from the following9 ~: L- P) g; P
  556.         //  the specific initialization routines you do not need.0 V/ `% M6 F2 i# a

  557. ! ?6 J* W0 Z8 ]' n2 D; o
  558. #ifdef _AFXDLL* W% \: `; b1 F- Z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ) v' y8 H& ]  T  D9 x# m1 K
  560. #else
    8 L: D& \- j! @) Q; d; c2 S9 j/ l
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically4 H( K) ^; C3 i. a
  562. #endif' \- {& @2 C6 |% Q) ^: A
  563. + f6 D. u' U, \8 ^" F7 _5 r$ w2 y
  564.   dlg=new CRevAppDlg;
    7 P* h, A) q: A4 m( j9 q
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , Q9 S" n- ~! q9 M  s5 G. p
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    " |! ~( S2 j! l8 C
  567.   m_pMainWnd=dlg;
    3 j% L9 G' H$ B/ l& a

  568. 1 z$ Z9 `( V8 |  F% J- F# F2 J
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);) [) `% d1 W: [$ i8 C/ @
  570.   t+ `3 I8 S4 h4 z; c
  571. //  GdiplusStartupInput gdiplusStartupInput;
    2 }+ N% [4 R/ G
  572. //  ULONG_PTR gdiplusToken;  ~/ N- W! @& U, ~' H$ G: [* w
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    8 P2 J1 J, B6 _9 j5 Q4 M. M  }

  574. . k8 l* [" o5 R" `$ L
  575. //        CRevAppDlg dlg;' G/ H# C7 V5 |, v5 ^; b! z5 a3 u
  576. //        int nResponse = dlg.DoModal();' w) Q( `4 a: d+ _' I4 y: _/ E$ c
  577. //        if (nResponse == IDOK)& B( q& a: s  G3 a: e0 c0 f: H0 a
  578. //        {+ A* S) |6 H1 H! [) U
  579. //                // TODO: Place code here to handle when the dialog is
    7 _# Q+ A8 x  O0 z  M
  580. //                //  dismissed with OK# N7 A# V- D8 c, m2 a4 Z
  581. //        }
    4 y* H" I  v" Y  b9 Q$ J7 T; o
  582. //        else if (nResponse == IDCANCEL)
    3 Y# S- t  `1 ~: Z, I& G+ N5 d- j
  583. //        {
    / B5 _# D" c+ Y! K  e) y
  584. //                // TODO: Place code here to handle when the dialog is
    ! {! U8 C) X% s7 n" e) ?# q; t
  585. //                //  dismissed with Cancel  ]: a( [7 ^0 Q% y2 f
  586. //        }  S" A1 V6 `0 b1 ^2 ?' D" `' K, n
  587. 8 H& g/ o# ]7 x/ T  ^
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    7 e  K0 [5 }$ }4 \& E3 F
  589.         //  application, rather than start the application's message pump./ u$ a, O, x6 G0 t
  590.         return TRUE;2 U8 V: b7 N$ C; N7 L! V& h4 N
  591. }0 p: p: P7 o0 A' I

  592. ( x5 l; ?: i/ l, r: r
  593. char *CRevAppApp::strtok3(char *pSource,char *token)( R% d, |+ b1 \( b, _2 |3 m
  594. {
    ! j$ J& ]8 Q3 h* p! j3 G% o6 B) p" e
  595.   int i;8 e5 _/ q! H* I' Q3 ]
  596.   char *szRet;
    # V# {# D/ v$ x

  597. % F/ h& d% }8 f
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # {/ @/ b4 F: {$ F! @
  599.   if(sztoken)
    1 |4 S/ ?# @, g2 w4 O6 o
  600.   {6 F/ V: i. P9 i2 G2 E: h, ^0 Q
  601.     szRet=&sztoken[itoken];
    & ~/ Z( j0 Z/ h8 O2 I
  602.     while(sztoken[itoken])
    2 ~- ^" {4 e2 `; S; E+ F
  603.     {
    3 K/ @* h& ?. R
  604.       for(i=0;i<(int)strlen(token);i++)
    ( `3 w0 q4 e; \7 r( M8 r& \
  605.       {
    4 X6 J' }9 k3 v
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])# V& d  @$ j3 D% y8 s. h( ~
  607.         {
    " z( b6 `* G, k5 f8 ]
  608.           sztoken[itoken++]=0;( X) w" q& h1 ?4 ?( t0 E, O
  609.           sztoken[itoken++]=0;/ Z% D9 M( K, B* a0 z
  610.           return szRet;4 h1 t* ?1 j# e* s4 a6 L* s
  611.         }
    * e! W: Y1 h$ W1 O
  612.       }
    5 x& G, s7 t2 d5 \/ s
  613.       itoken++;
    ; m! W2 \. B; Q7 h
  614.     }
    , @2 W; s/ o* p1 m' b( m/ H
  615.   }8 a% B& F8 {) q
  616.   return NULL;6 {# Z* p7 p6 s  D
  617. }3 X5 g& ^; J! @( s1 p* n

  618. - ^$ L+ X, [6 K8 I- H  g
  619. void ProcessProc(long Total,long Current)7 b! O+ V. [; \7 [
  620. {- r; [; y0 x2 R5 Y
  621.         MSG msg;; G! |% ?* Y5 C2 S" ^
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    6 j" f3 C9 k# t9 D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
      |9 K7 o, A6 T' }% `0 i; i
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))% x! D# n. b' [1 v& @5 E
  625.         {
    0 z- \* U: x4 F+ S0 x9 v, J
  626.                 if(!GetMessage(&msg,NULL,0,0))6 A: }& H: O* a1 L2 s; i
  627.                 {
    0 B( {% V' b0 |6 d' U6 f
  628.                         return;
    + `* u, v; b. e' d& t
  629.                 }! o! @" S0 }7 \" r" v  ?
  630.                 TranslateMessage(&msg);6 q7 e/ h% c: x0 w( x5 P; o1 x
  631.                 DispatchMessage(&msg);
    & k2 O3 R+ A3 F) T5 H" {- s" V
  632.         }       
    1 d7 {- d' s& Z* |7 G" d
  633. }+ W) n% Y, m8 x7 [4 Q
  634. 2 u. W8 u: K) I3 Z) f, N% e8 ^
  635. BOOL bFirstChar=TRUE;
    9 e5 N* c, J2 x
  636. / L& ~" n% x- J$ L& E, B
  637. BOOL CRevAppApp::OnIdle(LONG lCount)5 S6 u9 r0 @0 ~+ W
  638. {! l+ R( X( k. a* C/ U
  639.         // TODO: Add your specialized code here and/or call the base class: A+ d5 A9 s9 U7 }6 v. Q- Z4 V
  640.   switch(dwProgramState)- m# g/ m6 h  ^9 A- Q- k* B
  641.   {
    : q1 X6 T6 c4 t* x, g8 Q, c
  642.   case AP_NOTHING:
    6 ~# [- j" p4 V  W5 \
  643.     switch(dwStartUpSteps)
    9 N* e0 I$ |* x- R2 \: P
  644.     {
    3 b/ S" P- Y, b
  645.     case 1:( t& `4 I' v  v  k2 I- J
  646.       {! B: g( W" M, Y5 [: }, e) T2 q) }
  647.         int i;* j& |2 W( T/ {4 K/ T$ j0 B: _9 D. s3 O: `
  648.         CDC *pCDC=dlg->GetDC();  H' h; C- ^& U$ ~* Z  }
  649.         HDC hdcwnd=pCDC->m_hDC;4 e& f5 V5 K4 o8 Q& C1 C
  650. //        Graphics graphics(hdcwnd);4 e" {3 @) Z  |6 B' C  x/ _0 o% F
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");" _/ i) w9 `' X8 i+ k8 i' s. W# ^; e
  652. //        INT iWidth=bitmap.GetWidth();
    6 R' ~( ~7 O2 l' P5 r$ u* C
  653. //        INT iHeight=bitmap.GetHeight();
      U8 N1 v1 O7 w" ]" S0 }2 O
  654. //        Color color,colorTemp;
    $ ^; a. X) N/ C" A) N
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ S; @! i7 B1 t- U2 F
  656. //        {  G6 e: J6 N' z9 _/ b  l
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)8 [' L5 H6 e' Y  k* R- u( M' z
  658. //          {" E) w4 o. b, u. ~
  659. //            bitmap.GetPixel(iColumn,iRow,&color);+ @" ?8 F2 u5 D4 l( \
  660. //            colorTemp.SetValue(color.MakeARGB(
    % u; C, I4 |: F+ _
  661. //              (BYTE)(255*iColumn/iWidth),* {( D- s, h9 ^7 K# U
  662. //              color.GetRed(),  f9 ]7 X: @. D2 {6 L
  663. //              color.GetGreen(),
    ; m- V4 t" |; u- E: T
  664. //              color.GetBlue()));
    # U3 }9 j; V5 Y# o! o# m' E
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    9 ^8 j! `$ [, H- h+ f3 X' n
  666. //          }
    ! z) |4 T: P( \0 @; V* G
  667. //        }, d" u  a2 ]# R+ j7 w/ F0 \
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);4 ?# x& J& m" S. ]# s8 a/ h: W
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" t4 v/ V* [% [- O  n( ?
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    % x. o' _) E" m  e; d- m7 g8 Q9 m9 b
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");) s# y! K$ O/ O
  672.         for(i=0;i<240;i+=8)
    ) g$ Z8 ^$ J: ]) g5 u: Z! k
  673.         {
    4 H$ S/ M! ^( V' m
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 v5 S! E. x$ f+ l
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + Q* S1 k, D5 ?; F
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; H3 r9 D: @: x, U, S8 q* C4 k- e
  677.           Sleep(33);
    3 D9 {$ m. Y' a2 k: a, `
  678.         }
    8 N  l5 Y( v4 r2 e2 E3 S9 ?6 z
  679.         Sleep(1000);
    ' Q$ U* c3 Y% X
  680.         for(i=240;i>0;i-=8)5 F4 y: `, s5 M  c- Y* c
  681.         {
    ! s! P$ L$ I! h( c# A) q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" o1 L) m* v0 \# z9 s
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; A( |, _( O+ V, Z/ u' a
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' E4 e& F6 }, X( Y  G) l! S0 U
  685.           Sleep(33);3 E, r( I! j9 _6 Z  T9 c% I7 Z( x
  686.         }, v  O" }8 s# B8 x8 e! E# u" p5 I4 ^
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    4 _2 R) M- l) p  D) X1 u
  688.         dlg->ReleaseDC(pCDC);
    ! I8 e) O/ C1 u/ H. `
  689.         DeleteDC(hdctar);
    9 u1 q# o( L; Q" N
  690.         DeleteDC(hdcsrc);' T. a' E$ f% e: X# A" P
  691.         DeleteDC(hdcorg);
    9 ~5 }& A6 e& D( t% i+ |& F2 Y! O
  692.       }
    ' d+ [( r- b) [& e; m
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ! N# V2 m* F8 X, d7 q+ t- f. o, d; M
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");% j' d. D8 V0 G% a0 p
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");- w& Z+ |1 Z5 U
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");3 T+ c% x9 s" ?" ]. V, W, Q( `
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 d6 ~4 p. r4 Y) H( e. y, u2 ]5 N
  698.       if(!Dn.Connected())& S1 F  J" q" e) x+ P! d+ w. R# W4 G
  699.       {' k6 G7 _  S6 `* x  {: T5 W3 y# f
  700.         dwTotalFiles=1;
    8 a; l3 E' k9 ~; o5 ?) o; z
  701.         dwDownLoaded=0;
    1 G2 H* U6 a  G% ^# |
  702.         bSilentStep=TRUE;0 P, J; S& ?3 z; k7 D! q: i5 X
  703.         bCompressed=FALSE;6 S1 y$ e9 G7 i; P
  704.         strExtLocal.Empty();
    * n7 N8 X9 e1 n, d! {6 t8 o
  705.         strFullName="readme.txt";
    5 [' \3 I% t0 S2 J1 F% S
  706.         dwProgramState=AP_CONNECT;
    - V+ S7 \2 W6 y% u
  707.       }4 A3 i" ]5 ?! L5 S* A/ D
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();1 e- Q3 a5 s/ @$ v: L
  709.       dwStartUpSteps=2;7 O; i' p/ w7 A4 f9 F
  710.       break;
    $ k; ?! o# k$ v& Q" M; w- r
  711.     case 2:
    $ W$ Y/ B: ^% `: M8 y' Z0 y
  712.       {
    * b8 ~5 D4 S4 i% X
  713.         int iEOF;; O& x( C/ ^- l' F
  714.         FILE *fp;0 P' v! }0 o" R
  715.         char szString[512];/ L5 k$ S# c  M
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* H' c. \* g% G9 n3 I- H
  717.         if(fp)
    6 t3 c. k* j+ H. [* g% j  H) P( V
  718.         {+ b4 X' P9 I2 L/ I* c- t
  719.           do
    % Q9 Z+ J# }7 s9 n; Y! _2 @1 K
  720.           {: g* b8 G, c& w- u1 p! s8 R: t
  721.             iEOF=fscanf(fp,"%s",szString);. |: A4 r- g5 j
  722.             if(strlen(szString))
    ( i* G0 W, Z8 R8 z( B
  723.             {
    & K' m0 z# g' Q# ^- R$ d; P; i8 Z% u
  724.               if(bFirstChar)
    & Z7 B- e; s+ S; }% ~7 O% J# c5 K
  725.               {8 o1 r3 U/ Q& a
  726.                 bFirstChar=FALSE;* ~7 T. A! V, h; M  b1 y- j
  727.                 bConnectIsBig5=FALSE;
    ! Z  b! z& U9 E( g# D3 b
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;( E. P  m" J4 {* \. ]! S
  729.               }+ Y. s) I+ D8 \/ K, @0 d* f
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));2 [& E6 w. m! Y" J1 _8 W. c* _: L; b* T" @
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    3 L9 |. P& V, J, s8 s$ d2 J2 Q
  732.               dlg->m_ListText.AddString(szString);
    8 F9 Z$ f. R; {" `2 `8 {: s$ C' T$ W
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: Y4 G, J* \8 }7 Z' {; O
  734.               *szString=0;
    9 M$ c) h; |4 D- K, u& Z% K
  735.             }
    6 _- V% d+ G) V: @! h
  736.           } while(iEOF!=EOF);+ Q6 X3 l* X( T: S' M
  737.           fclose(fp);+ C1 x, m- @9 T6 W+ _
  738.           unlink(".\\DownLoad\\readme.txt");
    - d6 B% L! G) N0 z' X
  739.           dwStartUpSteps=3;
    + D6 _- u$ c2 ^* A. u
  740.         }& V  k# Y& j  c, N
  741.       }; Q3 F  }- n+ l  K2 O
  742.       break;3 b) O9 i9 x8 ~: V
  743.     case 3:8 L( y5 p6 G' l9 m2 _$ v$ }, h
  744.       if(!Dn.Connected())
    0 r% l  ?  C, O! {
  745.       {
    & R% O% @9 D4 {3 k* f: j
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    - |1 Z5 ^9 x: a3 p/ X
  747.         dwTotalFiles=1;
    . ^. a  \6 l, Y. J- t/ ]
  748.         dwDownLoaded=0;) Y9 @8 Z7 v6 ]. x
  749.         bSilentStep=TRUE;
    0 F( z% H' e0 K
  750.         bCompressed=FALSE;
    / K  w( A/ q/ y5 w) B" v
  751.         strExtLocal.Empty();
    ' h) P8 B( q6 R# [/ d
  752.         strFullName="checkversion.txt";
    - T/ l  ?* p0 u1 H" M# J
  753.         dwProgramState=AP_CONNECT;
    4 v5 B: }) F$ T! X1 I7 F6 W% o
  754.       }
    , B; A/ Y7 j+ z) R2 W
  755.       dwStartUpSteps=4;
    6 I: }; z, i: K! ?
  756.       break;
    4 ]7 V$ `! S1 _
  757.     case 4:
    9 {0 [- P& \  P% A
  758.       {
    6 j, e$ w- |  b& q' j/ W5 ^
  759.         FILE *fp;
    6 @# i+ P/ j; B5 S( i+ t2 T# c! x/ }
  760.         char szString1[128];2 |- w$ H3 o. b2 Q
  761.         char szString2[128];
      K/ L% R7 a( S5 `, f
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    & M) a, b: k: _$ F2 C+ {7 D  ]
  763.         if(fp). s* a' `- K9 [) }
  764.         {
    " @# m" |  v' o& C+ C, o
  765.           fscanf(fp,"%s",szString1);9 ?6 c( }  c5 F8 L5 W  ~- Y7 z
  766.           fclose(fp);# z5 L* \! k5 P8 q
  767.           fCheckVersion=atof(szString1);
    * k- B1 i; \1 s' [
  768.           fp=fopen(".\\checkversion.dat","r");
    " c' d' o+ Y5 d) _
  769.           if(fp)
    7 y& m2 R( N- I" `- ^" {! ?
  770.           {4 m  K/ M0 X$ A' n5 B' P
  771.             fscanf(fp,"%s",szString2);! k$ O* P+ p# D4 J" M
  772.             fclose(fp);
    / l( o1 v9 q# e3 r/ O
  773.             if(atof(szString1)!=atof(szString2))1 A& A0 N9 C% v* Q
  774.             {
    5 c5 p) t2 x/ G3 O: V/ [9 T
  775.               if(!Dn.Connected())
    4 v, M& c+ |) v0 N- R2 g+ Q/ n
  776.               {; M. c8 M" S9 f" l& k2 `) f" H* a* g
  777.                 bFirstUpdate=TRUE;( s' I; `% p( |) E5 m
  778.                 dwTotalFiles=1;& Q: G& s' c9 e& t, f8 H! j# `
  779.                 dwDownLoaded=0;
    - k  {0 u* _- z7 }( @
  780.                 bSilentStep=FALSE;! m0 e- B% G7 c" {; t
  781.                 bCompressed=TRUE;
    2 K4 A( i. f, \  J6 j" M, g8 E
  782.                 strExtLocal=".\\DownLoad\";
    6 `. E( T7 h4 B; B
  783.                 strFullName="update.txt";$ Q' Y$ ?8 [7 _1 N! j, |
  784.                 dwProgramState=AP_CONNECT;
    1 P, p! U  B7 M
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) J, \7 `* u, V
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( N+ c, }6 w) L' g8 W' ~
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- Z* ?4 g) m0 Q" g% X
  788. ; w$ G# O8 f7 Y  ?. T
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& R3 U0 @" ^  ~/ @
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    / U. a( o% m( Z* D. k2 s
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    " j$ |5 G  X* _6 D5 W
  792.                 {
    . A( _. Y/ x6 g5 D
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");* N) o; W% H' q- j0 ]5 U% t: `
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" x4 I- {* w2 ]/ h
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 o' @$ {& U) ]+ ^, W* c
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# N  D& q* _( a' G" ^2 W7 x
  797. 6 I4 D. U* C& E5 E+ l; ^
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    6 K; A# C% W& ~: ?9 Y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , R9 U2 I' X8 v9 I
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");7 `; T7 E/ z7 i7 q6 u% {
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / _- F1 D3 V0 y0 F" z
  802.                 }
    + O: s" L6 w2 {6 }
  803.                 dwStartUpSteps=5;
    ' A7 P5 n, A: N
  804.               }
    ; ?" f' M" v9 [$ k; S! ^1 J9 U
  805.             }& p" L6 ?5 U4 D, v$ Z* _2 |
  806.             else9 n  J) x9 ]& s+ k. ^
  807.             {
    " d% w  U; O* \2 v
  808.               unlink(".\\DownLoad\\checkversion.txt");
    # N& T# w" Z" T6 _  r' Q" C4 i+ s. ]3 F
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");$ }: u8 v/ \3 A
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");* S! S9 X8 w4 Z, Y9 O
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    8 a+ v- w* D/ e1 N$ p  Y, q3 i

  812. 7 `) g& E; {, E3 a1 B9 M
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 ^0 f$ [! g/ T0 e' D+ y8 Y
  814.               dwStartUpSteps=99;0 o% S  z) I3 G  j
  815.               bFinishUpdated=TRUE;
    ' A  G* `* q9 a9 L) y9 W8 j6 C
  816.               bCanUpdate=TRUE;
    + T, X$ W7 ]4 d( O2 F8 x% x% N
  817.             }, A/ m- N0 ?$ ~( M" n- w$ r% y
  818.           }7 G% j, O0 |6 E6 \, K; h% ^
  819.           else
    2 B8 I6 g5 h% Z/ J& D
  820.           {
    # z# [- I: U' C+ x
  821.             if(!Dn.Connected())* V7 Q) K% p$ ?) `
  822.             {% K. ]$ t7 t, F, J
  823.               bFirstUpdate=TRUE;' j& k; G! M; k" \& G: \2 E9 P% }
  824.               dwTotalFiles=1;# V* x. _% P# _1 i, j* {6 P
  825.               dwDownLoaded=0;
    " g$ ]- @: ?6 ]# w
  826.               bSilentStep=FALSE;; o* C( ?, s8 P6 u
  827.               bCompressed=TRUE;' R' U5 N1 H4 L
  828.               strExtLocal=".\\DownLoad\";
    9 Z2 `- K6 y3 l/ K4 z
  829.               strFullName="update.txt";! H1 ?! W+ p! A1 N2 c9 W. {8 ?1 {, o
  830.               dwProgramState=AP_CONNECT;
    # Q) l. _$ \0 s0 I  D4 o
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - T7 b; C% b! e! d* l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& x, |: X& m& G+ a9 ^, y: e" F
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - ]. w/ X' M+ `% d9 @
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & L. \& Y/ ~" x# w
  835.               unlink(".\\DownLoad\\checkversion.txt");  h2 z$ J$ t' D9 k4 v8 ^2 {
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)0 N8 v/ `1 q  ^" t
  837.               {6 q& `; ]- q8 E& n" A
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    $ ?- A5 q2 ]8 Q2 h
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    $ `4 R6 B/ }, k# h+ Q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    & ?" L, P' ^6 @. a' S
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + o) Q- p0 w# Z4 p7 O
  842.                 ) T/ R' S  ?3 g1 r3 o" h8 B3 g% X
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + }$ u- ?/ b! [
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 [9 P6 k+ @9 z2 i& v  r
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");5 I0 K- M8 x: M: R) S( f
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 D# L7 L$ b% C# H4 }
  847.               }
    5 ]9 x& `; V5 E, q0 @3 c* p
  848.               dwStartUpSteps=5;# b1 x' r+ I; w5 [6 \$ N
  849.             }
    3 m& ^4 w/ z# {1 G, n9 s0 u+ ?
  850.           }
    & K; C$ a: r* b2 F3 D
  851.         }
    0 ]" n  u$ w; v
  852.         else8 }, X& Y# E/ B2 V
  853.         {5 E8 X& m6 T  c9 ^# |6 j3 a' ^
  854.           dwStartUpSteps=3;
    4 M+ x, K- \+ y1 |! A5 J3 x
  855.         }
    9 Q. @- n, M# V) q! R& T
  856.       }
    & {" W7 C+ k3 z+ p
  857.       break;7 p! U1 D# }' I1 H2 x
  858.     case 5:3 y) Y$ W' N0 V, @
  859.       {
    & t% _9 c7 a. n/ |4 E& @; I! S/ R
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)% B& j8 T' n1 J4 r
  861.         {
    2 k; ?: M! r1 |
  862.           int opt_overwrite=1;. x" T6 q1 a$ g  v/ Q5 T
  863.           int opt_do_extract_withoutpath=0;  q; W% Y! Z5 F
  864.           unzFile uf=NULL;0 I$ X3 c( T3 T7 ~3 k4 Y6 X5 W

  865. 7 @. d' _8 i3 O: s1 Y
  866.           uf=unzOpen("Wsa.zip");* z( l/ E  W' N7 A
  867.           if(uf)5 a7 q  G0 ~- o3 H- \! X; L
  868.           {
    7 L: ~; Y7 @5 U  T/ t: S+ F
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    & w* S5 b1 x8 U! B
  870.             unzClose(uf);) O" c  v1 W% _: Z+ a4 F6 P1 [+ f* Y
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    5 h, B/ ?: R2 c2 \5 W  d
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) `0 ]" Z" h: K4 ^0 f
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    # N4 _. z( s$ V0 V7 \6 |  A
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' d( G  k; P: ~( Q7 g
  875.           }
    ) x2 Z$ w. `2 X- I
  876.           DeleteFile("Wsa.zip" );! B. B8 |0 ^3 B: M0 w+ R3 d
  877.         }
    : }2 D  i7 ^- p' Y3 U4 q* f
  878. / N/ u! X: k# T3 i9 I8 t3 _+ C
  879.         if(CheckLocalVersion())
    ; O$ H; y# d3 I2 d6 J7 Y9 W( `
  880.         {8 k2 X- Y  w) u8 f
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    8 g5 y) l, \. l8 f4 y
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    8 _0 V6 d* y/ i9 U
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");0 ~) J' @' S+ ]1 C& `
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% G2 D. i: g5 a7 }$ e
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    , R7 ?( w% o1 ]; _7 I
  886.           dwStartUpSteps=99;8 }' k7 Q& L+ [7 T1 `# N
  887.         }6 c7 p; V$ q' m3 x2 S
  888.         else
    & a8 o& M3 v+ P# P% I) Q1 W1 X: g
  889.         {7 I: p2 |+ e1 v- p
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 ^5 y2 U9 N$ B, T7 }7 f! }' E
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 S* F7 [. V, o* R% U; m  C
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    1 C) m- l' E2 q5 k

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

! M9 Y% U& o6 K3 ]9 t
( ?7 M: N+ J  ~  r6 k

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-8-26 22:04

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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