找回密碼
 立即注册

CSUpdate.exe源代码

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

# p* z2 Q4 t0 K( P( `! W
  1. / RevApp.cpp : Defines the class behaviors for the application.
    5 w+ K& G; ~2 M" X3 s$ W/ T
  2. //5 Q3 c" Q" c& }! Y! c) [% H: o

  3. 9 @, V) N3 l3 d  y# s  |
  4. #include "stdafx.h"1 m6 _, v# q) H$ p6 i/ m7 K- D
  5. . ]" I! ]2 k; M. A. A7 n
  6. //#define UNICODE
    ( ~' L' d% S5 t4 H. b  `  a
  7. //#include <gdiplus.h>: d0 n* Z$ l' p. @+ f" k
  8. //using namespace Gdiplus;0 S# y) M# S" E( H- m

  9. 1 O. ~, B9 j: O! v
  10. #include "RevApp.h"5 \/ [, f& t5 o
  11. #include "RevAppDlg.h"1 r! g* N% j# d. p0 I" c4 y0 T
  12. 7 d9 \8 u# U) a- J4 N
  13. #pragma warning(disable:4786)8 T3 D% c. t3 x
  14. #include <map>; Y% F* @  x$ L& |5 d0 R( a7 l
  15. #include <list>
    ' W. F7 c1 F$ U- x4 n3 X
  16. #include <direct.h>
    " ?, V& o/ j* |# h7 F$ b0 e
  17. ) F& q% }& I# A. y2 {: v1 Y9 k
  18. #ifdef _DEBUG
    & A8 t' ^: ?9 S+ r
  19. #define new DEBUG_NEW6 x8 D2 [# K0 ^2 \2 x- L
  20. #undef THIS_FILE
    : M( ?* {$ w  Z2 [4 w7 q9 U5 \
  21. static char THIS_FILE[] = __FILE__;* E1 h) f, f1 i5 E
  22. #endif
    ; e  j1 d$ j8 s3 S# |! b% {
  23. #include "SkinResDef.h"
    $ B# P' p! c8 X  h2 y. k' U  |, c6 \
  24. #include "ChangeBG.h"& Y; ]9 H/ ~1 p6 g$ W+ ^* t
  25. #include "AFXINET.H"+ M. \+ u% W  T( O1 F
  26. ! Y& R" Z; v1 f/ e" g
  27. #define TRADITIONAL_CHINESE 0
    0 m! H0 P# N. m1 i2 N
  28. #define SIMPLIFY_CHINESE 16 C" [8 O- h4 O1 a8 W. R0 b" m
  29. #define ENGLISH 2( F0 M3 l4 N. j+ g/ J
  30. int m_iLanguage = ENGLISH;' Q0 ?( S3 D  n  o% o
  31. /////////////////////////////////////////////////////////////////////////////+ Q% Y( d+ a6 T) C4 {9 y. h
  32. // CRevAppApp) k) @9 W( x6 b: |' e

  33.   m" ?* }9 [7 B- y% ~  b
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)( w) J" p# M# ?
  35.         //{{AFX_MSG_MAP(CRevAppApp)/ q; K* N! s; n; C4 C) B
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 g, W+ g- f+ e3 j
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 ^& @7 @2 w7 s  u! w6 V
  38.         //}}AFX_MSG
    7 }6 M3 U; @8 H& C
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    $ C" s6 X. H: V
  40. END_MESSAGE_MAP()0 K" u$ b4 @$ |' N, s4 |
  41. 5 ?' j9 k. ?$ b9 Z; ?. P* O
  42. /////////////////////////////////////////////////////////////////////////////
    / q7 c4 {8 d: c# A" d9 m
  43. // CRevAppApp construction6 P/ u7 J5 n4 f1 [7 @0 u* {0 ^
  44. # K( U) Y) `: |( L8 s; o) S
  45. CRevAppApp::CRevAppApp()
    7 e* n  ^0 x" G% T, {4 ]
  46. {! J. Z% ~9 ?  U" T6 m0 V
  47.         // TODO: add construction code here,
    2 M1 h! h2 |( O8 \. U  B
  48.         // Place all significant initialization in InitInstance, }; M: H! H- N5 g9 g( R
  49.   bDisplayIsBig5=FALSE;8 b/ G: W/ V1 W! w' n& M
  50.   bRestartUpdater=FALSE;8 w( c8 b% `; b  H5 |+ B; G
  51.   bFinishUpdated=FALSE;
    ! O( i1 a: F3 G& `1 t$ H
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;8 ]1 P  J' p/ Y8 B4 F
  53.   InitChangeDataBig52GBKS();) d4 [% M6 A8 W1 Q: l
  54.   InitChangeDataGBKS2Big5();
    * D; |/ M: W2 D& W+ j9 O; g% Y
  55.         //) M) Q$ r. r  J- e* f8 v1 B
  56.         bClickRunExe = FALSE;
    ; V% s: n. d6 A7 V
  57.         //
    0 P( r4 A# R( [( L
  58. }8 g9 }/ ?% H: ]  p7 I$ h+ n9 z
  59. / x2 a9 ]( G" s/ b
  60. CRevAppApp::~CRevAppApp()
    - F' W& T7 j( ~/ j
  61. {
    * C7 k8 ^% R6 \# V6 a& f  R
  62.         // TODO: add construction code here,
    4 f* z( z  Q6 I% z6 i! h8 r  F
  63.         // Place all significant initialization in InitInstance
    . n5 j% u' P8 O* t# V* s4 s
  64.   EndChangeData();
    0 b5 N' b, w' T- ~
  65. }
    $ S6 }% l; J. y/ Q9 @

  66. - n+ m0 D5 v+ K4 B9 k) }
  67. /////////////////////////////////////////////////////////////////////////////+ m7 t/ d$ g! X: {( {; T' [
  68. // The one and only CRevAppApp object% [7 }8 O  q# L* f6 J7 n3 ~
  69. + ^, Q8 A+ \( {8 V  W
  70. CRevAppApp theApp;: O. K2 p5 z0 q9 }" `, `0 r! t

  71. 5 s- a( a* F2 s3 N
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)* o3 M, g- Q2 a/ l, \0 [
  73. {
    / N* Y5 u$ P7 q% W+ k
  74.   int iEOF=0;6 }! G0 D8 b# M* M
  75.   char szTempName[MAX_PATH];0 a) f$ ^! d% h4 w3 N3 Y4 ]
  76.   *szFileName=0;& N& Y2 d% R# a1 [3 i: Z% \! A
  77.   iEOF=fscanf(fp,"%s",szTempName);3 Z9 |% z9 r7 V8 C  \8 B
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    0 U- h5 I: f/ k6 e
  79.   {: B  o/ Q" x8 S- H, s* A( u
  80.     strcpy(szFileName,&szTempName[1]);
    1 h/ k5 t7 f# l% S9 s6 p  G8 F! k
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    . c6 g& A' j7 r/ _
  82.     {7 z- f! Q/ s) u+ S
  83.       iEOF=fscanf(fp,"%s",szTempName);
    6 z6 `- `0 \8 Y; T4 d% t
  84.       strcat(szFileName," ");
    % l) ?5 u4 z9 m
  85.       strcat(szFileName,szTempName);
    3 i% z( D9 y2 p! q4 V- \% K& }; _
  86.     }
    . I1 f9 ]: X. O4 N% q
  87.     if(strlen(szFileName)>=1)
    ' x( ]; g9 b$ \% `! l3 P6 Y  }0 J
  88.     {5 g3 H, ^/ x0 d# Y3 P
  89.       szFileName[strlen(szFileName)-1]=0;
      K  R8 \/ A& s& d
  90.     }
    - M% z6 ]2 K9 }2 H- Q
  91.   }
    , Q- A7 l# `4 Y: N! q) F5 T/ o8 T7 |7 T
  92.   return szFileName;9 h( }* a1 s6 Z) c1 A  V
  93. }
    4 ^1 @6 \  p& e9 a. a

  94. ; Z3 C; Z+ ^2 S- ^0 j
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    & g+ S, ?# k: t' j6 P+ t1 q
  96. {, R1 i/ {/ X# _
  97.   FILE *fp;
    2 B5 }; r- |2 Q+ I$ t, S; @
  98.   char *key=NULL;
    0 V+ y$ h/ U- q2 a
  99.   char version[MAX_PATH];3 T% v5 v' R0 _% w" B5 P
  100.   LPUPDATEFILE file,olds;7 E/ I" q- T2 y: k; Z- u1 J
  101.   std::map<CString,LPUPDATEFILE>::iterator p;; y5 `# N  X8 {1 B4 `! T: p' @
  102. . X7 U' c, @5 w, G+ e  Q1 O! b5 ~
  103.   UpdateList.clear();
    : \. G0 @1 s8 u( s2 T0 o
  104.   UpdateFile.clear();
    " I( n" L, D' A7 s  ^1 k* ~. I
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; s, M! e2 `$ Z! r
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ' m, |" A* S0 Z! Q2 o; D
  107.   fscanf(fp,"%s",version);# `' Q7 B/ B# v/ G. ]
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    5 L4 C! e* m3 E+ `: G& T7 u
  109.   while(fscanf(fp,"%s",version)!=EOF)0 ^8 [) m$ Q) z& S# t- s
  110.   {
    4 Z3 P1 Q# t# Y0 Z2 ~( F: k  g. z* c
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , H/ K- X' k7 W. j( o# {- F+ R
  112.     fscanf(fp,"%s",file->path);  r. @6 b7 L$ I, [5 T. C' N, e
  113.     ReadFileNames(fp,file->file);- A3 d. T# T1 Y# ]" T
  114.     strcpy(file->full,".");
    + {6 `( ?( R- F, n1 Z
  115.     strcat(file->full,file->path);
    - \9 B9 Z* o  V$ e
  116.     strcat(file->full,file->file);
    ' q6 V  Z0 a. f/ q, E# y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()). d. }; l: C" g, F: K6 H
  118.     {
    ; |6 T, f. C  c7 x
  119.       file->vers=(float)atof(version);
    2 C0 |/ s$ H3 L% b/ Y
  120.       UpdateList.push_back(file->full);- U  q4 }. \4 h* H" I# N
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 }9 S7 ~& d  Y% G
  122.     }" W( f: `1 I' t/ Y; q1 w# m
  123.     else# \5 Z4 v) c0 l  a' E7 u
  124.     {( c, o8 X  W6 {3 A
  125.       olds=(*p).second;
    / k+ ]' K/ H, Q" R( v
  126.       if(olds->vers<(float)atof(version))
    0 E# Y% e& C/ r. O% _
  127.       {
    ! q) X6 d  r: K% O3 [/ }: R/ d$ q
  128.         olds->vers=(float)atof(version);
    * p( a/ q; D2 T% G! o
  129.       }# f% T$ D/ }8 {2 M
  130.       free(file);
    . A5 g6 [* ?2 |- F8 t6 o) ?, C4 P  ]1 L
  131.     }  ?9 E: S$ c, G% [5 |9 Z, U: E& I
  132.   }: w4 F1 v% E9 ?5 m& [
  133.   fclose(fp);& T# t( C7 B( R# {# y+ }
  134.   return true;
    5 o. y7 O4 `! u/ z: |
  135. }
    9 A8 j7 L$ F4 u# k7 b

  136. ( J/ T* l1 b5 J% n) l2 C' q( o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  e1 G: Z5 G+ e; e# ?! z/ t
  138. {: \( j5 [0 _& e! i+ u2 P
  139.   TCHAR  szFull[MAX_PATH];) R% `7 T1 ~! M( O2 [' O
  140.   TCHAR *token,*inter;
    * p5 O; t( I  q- C" C
  141.   *szPath=0;! x# h0 |1 g6 W& h, F0 K3 g
  142.   strcpy(szFull,szFullPath);
    6 x7 L( Y* o1 B4 e  ?% Z( N
  143.   token=strtok(szFull,"\\/");
    5 C6 M; K' [6 I1 F. C) f
  144.   inter=token;
    0 V: ]. r8 M+ m
  145.   while(token=strtok(NULL,"\\/"))& N8 s3 \9 Z& [
  146.   {
    7 x1 T! G* O9 N3 R" W; {
  147.     strcat(szPath,inter);) O; @; w  k8 @% X, g- |2 S
  148.     strcat(szPath,"\");, o8 M8 M5 n$ M3 \4 c
  149.     inter=token;+ o0 S( M4 @' ^9 n8 n
  150.   }7 {* w% C3 \) E% s
  151.   return strlen(szPath);# c  v9 m" Q6 j- l0 H
  152. }
    2 l2 Y5 b1 r4 p% |5 ]6 V4 t" Z
  153. 8 W4 Z% z0 h5 r3 l
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' i: R% T( L+ T9 o: g4 J2 z
  155. {& P+ o% [6 W( L+ {" A
  156.   DWORD attrib=GetFileAttributes(Target);3 C: ^) y% }" I
  157.   if(attrib!=-1); |# R% l+ z2 R# o7 x( `' n" E# z& ^( ^
  158.   {5 M7 \% u" c0 ?: j# q: S) ]- b
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    : R1 L& O% J" v3 r
  160.     {
    3 W: J4 E5 J7 `' o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);8 ~: ^# |- u% f4 ^( W
  162.       SetFileAttributes(Target,attrib);* O# `0 b1 s4 ~
  163.     }
    9 ^4 X' Z  S: D! S- U  K
  164.   }
    3 @$ ]7 h! \1 K0 _& \5 A1 T- U
  165.   CopyFile(Source,Target,Erase);) X/ O8 S3 a( L! Y% e* W
  166. }5 `2 j3 h5 j6 ]. }
  167. . C; e2 q9 s+ K4 P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    # z6 }: _9 O' m
  169. {2 t; [- S" n  k0 S  M
  170.      FILE *fp;6 {. D$ N0 K, v2 h/ ^# P7 s& c' a
  171.      char  szBuffer[8192];9 S/ \0 T5 o- D! l. N
  172.   va_list  argptr;
    * w8 }0 S* ?2 M* V, ^" M. i

  173. 4 p' S6 E/ ^/ p  U0 `
  174.         va_start(argptr,message);+ ^6 R* L( R8 W! D$ x% H' p% C
  175.         vsprintf(szBuffer,message,argptr);' f2 K7 V/ I. z! E1 k: f7 g6 ^
  176.         va_end(argptr);$ @* a  G6 i, e
  177.   fp=fopen(FileName,"a");
      {$ X# g  m$ m0 p+ h: Y2 s3 n
  178.   if(fp)
    1 G1 O- V! `, M0 }3 N; |
  179.   {
    . C( T0 v, m2 @, \1 I
  180.     fprintf(fp,szBuffer);
    ( }( B( y: ?" G/ z
  181.     fclose(fp);
    , P; _, ]7 C% [
  182.           _flushall();# _/ r  d: c# X& F
  183.   }- p* e1 |8 x/ t" C
  184. }" O1 X# N* }/ [0 o

  185. 3 _  p8 R( O- R4 a2 O' v/ J
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    , S# b$ @, d+ M2 p7 o2 ~$ e  |8 `  {
  187. {
    2 y9 P$ X& S2 D6 k& \  J2 ~) N
  188.      FILE *fp;
    , Z7 g( g6 V2 z+ j. _# H2 S5 o+ r2 b& @
  189.     DWORD  attrib;. d$ b* W/ ^0 e$ @6 m7 o
  190.   attrib=GetFileAttributes(FileName);
    - ]  \3 L7 I7 E+ n* \& Z& \3 Q( w
  191.   if(attrib!=-1)2 L9 F* Z$ S6 B5 L. q
  192.   {
    - _0 i" ]  v6 j0 t6 h' r( S
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 O& T8 T5 Z# ~& T7 @1 v" Q
  194.     if(!SetFileAttributes(FileName,attrib))! m% k* F4 `! O" O/ T! }3 Q
  195.     {* X7 M! }2 F+ G8 V* X% j- q
  196.       return FALSE;6 t' }5 T4 U8 e7 G8 y0 A; G8 W# Z
  197.     }6 A6 d$ Z$ R7 Y: `% _# S
  198.   }
    " ^  M( b6 V0 g, j
  199.   fp=fopen(FileName,"wb");2 R0 R2 w( L5 X! O
  200.   if(fp)
    . M" h7 G# L0 b7 e5 Y% x9 _
  201.   {$ h) J) Y% z- O% X( ]
  202.     fclose(fp);
    2 U, L3 ?: s4 b- C9 }( Z
  203.   }
    8 v1 E- l# E7 x: z
  204.   return TRUE;
    : e+ d# j8 t0 f, A9 n6 r, o
  205. }
    4 I2 ~" H/ W* K  V- {
  206. ( ?  }( p( ~7 ]) o# e, C+ ^3 q2 U- }  S
  207. BOOL CRevAppApp::UpdateLocalVersion(void)8 b2 u5 ]: [  u: f! Q  Y$ b7 O
  208. {
    8 O. I8 E- Y7 }" q) v8 A
  209.   char filename[MAX_PATH];
      q2 D$ D; \5 `6 A( h2 v
  210.   LPUPDATEFILE file,olds;
    , D, ~* S1 L- H6 }
  211.   std::map<int,CString>::iterator i;7 K* Y. j. ^8 w+ v# ~8 H
  212.   std::map<CString,LPUPDATEFILE>::iterator p;# x! C7 N0 m" L8 O1 u
  213.   std::list<CString>::iterator l;
    ! r# H/ s8 z, y2 k
  214. ! f( p( ?7 y6 f+ B* y  @; X
  215.   if(bFirstUpdate), Z. `& E& I9 d7 K! M
  216.   {
    9 l+ I4 M* E" }4 s
  217.     dwCurrFile=0;
    % o9 ]1 U' b2 t$ [9 q5 i
  218.     bFirstUpdate=FALSE;
    6 f5 m' `1 c) f# c
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())( n, ^  }) K1 o8 M2 O
  220.     {4 v. e6 }% ?! s. J1 Z' i! z) ~$ k, e
  221.       dwTotalFiles=UpdateLocal.size();
    / m: l5 A+ Y  I  U
  222.       dwDownLoaded=0;3 H( m! U& d3 u% C6 d  ?/ H
  223.       bSilentStep=FALSE;9 w; M8 |' P: A, E2 `  K
  224.       bCompressed=TRUE;
    & D9 ^) N: F# l& A
  225.       strExtLocal.Empty();
    ) B& q. R9 a0 t4 H
  226.       strFullName=(*i).second;" K3 j( u; b3 U/ ?0 W
  227.       dwProgramState=AP_CONNECT;
    ! x! M: _' w$ Z# W) t
  228.       return TRUE;
    1 ^$ v0 L5 p% `# W8 ]* S
  229.     }' @) |0 W9 i+ N, s
  230.   }( T9 z+ c( k' @2 |. K4 m6 U! m
  231.   else if(bRestartUpdater==FALSE)
    8 }  G  Z0 e) v% D& v$ Z2 M
  232.   {
    + N+ l  N: q0 C& L/ W6 }
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    " u. R9 i4 Z7 n
  234.     {
    & L& `9 Y: `( }/ W4 m
  235.       file=(*p).second;' V5 ?/ Y* L7 m9 L
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    , \3 n% s8 E& R/ @. h, T. B
  237.       {- Y- L$ q5 G, b0 U+ N: [& _
  238.         olds=(*p).second;( e- I: Q3 b' T  D$ R2 g
  239.         olds->vers=file->vers;
    1 M$ c( g0 l1 k# A' @2 m$ g
  240.       }! w$ V8 m  g# g" H2 m( Q7 h
  241.       else
    ( ^; v- _( V0 x
  242.       {
    . n! W  \0 `$ Q# ^2 K! M) ?
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 j- O8 D. t+ W) W5 t6 v
  244.         memcpy(olds,file,sizeof(UPDATEFILE));6 V1 M/ G% K  X" m6 L2 f$ M
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));, b# Z/ n  q* V$ V% Q. A
  246.       }* E, }) a( }4 j# o' j' V* ?
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");, A2 c1 ^7 s# L0 p6 q, i0 M5 G
  248.       sprintf(filename,"(%s)",file->file);8 {+ n7 k5 Z- s$ V& |: i5 m9 v
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 d4 x5 Z6 }5 `. e2 d1 N
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }9 \' S* `& N. x* f% r; `0 L
  251.     }% Q+ I" `* U" N
  252.     dwCurrFile++;
    4 z9 x$ I- Z9 m, \
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 K& \" h$ E/ Y% p
  254.     {, h+ {$ ~# p1 y( _+ Z" o! Z. C
  255.       bSilentStep=FALSE;
    " p# L( Y1 e6 C* B" |1 C
  256.       bCompressed=TRUE;( h! L" w% b9 E1 U
  257.       strExtLocal.Empty();
    % E+ r; F. n+ `8 v, L: U
  258.       strFullName=(*i).second;
    $ L3 z) q0 i9 a. k. T
  259.       dwProgramState=AP_CONNECT;
    " z( a  q+ ?* D, i
  260.       return TRUE;* c4 K& e+ [: T1 V$ |9 }2 x
  261.     }
    ) k4 B7 ?1 {+ m4 M  O0 O
  262.     if(!bRestartUpdater)
    8 x& Y+ J/ V7 f" P
  263.     {- ~9 m8 j4 `5 }7 Q
  264.       int iCurrSize,iFileSize;3 }0 O* n$ d4 d* P8 E( s# N
  265.       iCurrSize=0;4 y2 i/ Q- \' R+ I0 d
  266.       iFileSize=UpdateList2.size();" ~$ F; ]" i' A7 ^+ j5 B* A, Q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ( v, g' Z) z" h+ m
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 d# t- j( x. Z2 @4 B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");6 ?0 C+ J/ v: I8 B! \. E9 ]" n  T
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! M- `# W! R) c" F4 [* R6 H
  271.       Fclearf(".\\update.dat");
    ) J( Q$ q" G3 Y
  272.       Fprintf(".\\update.dat","Bloodyf\n");; a7 t4 ^3 v8 w* c7 l' [. X
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 g% ~& B/ A$ u; w; g
  274.       {+ P  p4 p) u* L
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ' t% B" j5 I7 F
  276.         {7 W7 Z( a, N, M. \, x
  277.           file=(*p).second;
    9 d2 K' p# c1 c, S! e
  278.           sprintf(filename,"(%s)",file->file);
    7 x' {7 N: N! _" s* l
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 f3 ]' R* _# z- p' ?
  280.           iCurrSize++;4 g) Z2 Z( m/ l9 Q" j
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    9 ?  Y% g$ z, l. C& l- m% M8 G
  282.         }7 m! C' v; b' p
  283.       }5 j$ h! I  K, ^' A& p5 U8 w
  284.       unlink(".\\update.txt");
    ) Y  M3 i* y2 ~, [# U( k+ D
  285.       unlink(".\\update.tmp");
    ) l4 `3 P& J' w
  286.       Fclearf(".\\checkversion.dat");" v7 L2 z% u! q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);1 o" \- C/ e& y" h( m3 F. u7 X
  288.       if(UpdateLocal.size())
    % y% `+ ^8 w! M6 O: T, p
  289.       {
    3 X/ `; U( T. s+ d- p
  290.         UpdateLocal.clear();0 n6 o9 w( z/ f2 a' Y6 m+ Z
  291.       }% O% U( O' M: R, w2 o5 a5 Q
  292.       if(UpdateFile3.size()). U0 Y: C) v; O& W, k4 p+ d+ R
  293.       {
    # g/ }! J0 A# w; K1 G
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & {0 D/ X( w7 |/ w
  295.         {
    : [- ^0 V/ ~; G" o; o+ X
  296.           file=(*p).second;
    0 y" @7 a( z- H5 }
  297.           free(file);' O% V! ~5 H+ O) ]
  298.         }
    " ^3 Z4 W" s% u3 C" u
  299.         UpdateFile3.clear();, c3 I" |5 w% j0 I1 h4 [3 D2 {. E6 T
  300.         UpdateList3.clear();8 x0 b$ {: L% |3 T% K8 f
  301.       }
    % K# E: Y$ |- L+ w( r
  302.       if(UpdateFile2.size())
    5 x4 K" E8 ]  `4 Y( [
  303.       {
    0 d( V) [. P7 i7 g) s
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 L- {7 v: {* X4 \" u. ?" A, q
  305.         {
    ( K. P  {* K, m" E7 U% s
  306.           file=(*p).second;
    " b1 E- Y& m! G( M. s( G0 P9 w
  307.           free(file);
    $ H" ]1 C" W2 z5 R) b- N
  308.         }
    . |* D' k- m% f
  309.         UpdateFile2.clear();
    0 Q1 J  n$ \) ]
  310.         UpdateList2.clear();( G, L8 U' V  i
  311.       }
    ! u" l2 E+ `) n/ q  R. z
  312.       if(UpdateFile1.size()); o( S  O9 i6 k5 H7 I; H
  313.       {! b7 p2 I% M; n5 J! O
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , z% O" A( N$ `
  315.         {" o% R( Q( Z7 G( d* W7 g- c
  316.           file=(*p).second;
    9 w3 K' q2 [/ b/ V
  317.           free(file);
    + A8 h* R% H) `
  318.         }& l9 W, s; o) H$ R) }3 ^! @7 D
  319.         UpdateFile1.clear();  Z4 m& D! t8 t( M& g
  320.         UpdateList1.clear();6 O$ |) [# T$ V3 n
  321.       }
    1 j! ]: R7 J, \
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; G8 U* Y4 A& y
  323.     }) \& [/ W4 i0 G/ V. @
  324.   }
    ( {, t# D/ t1 q# H" }' r! l; M
  325.   return FALSE;
    % X. h& m2 P' b! U
  326. }) K; a2 p& x  o# Z2 }

  327. ( Y7 ?" m. h' ^1 J8 w1 P1 o& Q
  328. void CRevAppApp::ClearAll(void)
    3 d; Q7 ^/ w$ U, _: t
  329. {% m; q  c/ s8 D
  330.   LPUPDATEFILE file;4 I& M8 y2 b/ y' k/ P+ V
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' Y3 }: C. v  ?) h( }
  332. 6 _; v, P/ u5 O3 S
  333.   if(UpdateLocal.size())
    * B5 d' q+ K+ d1 Z8 k9 c5 t6 x
  334.   {
    , ]8 a- L& c5 U
  335.     UpdateLocal.clear();
    / q2 C# O& ]6 f
  336.   }
    0 t9 f1 B( _3 Y" x# }5 _! h+ Q; ]
  337.   if(UpdateFile3.size()): m* K- ?3 z* |& ]' j: X* h3 Q/ C
  338.   {
    7 ^6 ~; N0 \) q1 M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 v# Y8 F! A/ S' J1 h
  340.     {' G# z3 w% E1 G( `
  341.       file=(*p).second;
    , O$ @3 b; W1 X/ \; ]* Q
  342.       free(file);
    ( ~/ P4 S) o% ]+ m3 |
  343.     }& @6 v1 o/ S" J$ k8 X+ r$ J4 w: l
  344.     UpdateFile3.clear();) s% u, @7 G( v7 E5 n
  345.     UpdateList3.clear();5 b3 {0 C. Z5 @4 @/ J( C1 t
  346.   }) i5 w. O1 U6 g, N6 v4 B
  347.   if(UpdateFile2.size())7 ^6 L3 `) o' B, n6 t
  348.   {4 e6 Z& {% c, G" T
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 h, J. v: }1 a3 }
  350.     {: B% x$ P6 S( v0 v6 s
  351.       file=(*p).second;
      l* M) G  D# }$ O; n
  352.       free(file);8 z. V6 p/ N4 {9 V9 o
  353.     }
    ' Y1 x" y  e6 N8 i* H: x
  354.     UpdateFile2.clear();
    ' _  Q9 _6 {, E3 H
  355.     UpdateList2.clear();
    9 L* a# V4 W( `0 {, E# N, w# @) P  {
  356.   }
    + s5 t2 U3 r- t1 b7 s2 @
  357.   if(UpdateFile1.size())
    * C9 p) J* ?/ y9 ]
  358.   {
    ! B$ g4 o4 q4 O) a# C
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 ]+ f0 }* s5 H
  360.     {
    " z5 g1 l% [" S$ ~8 I4 S0 J  d
  361.       file=(*p).second;  h# X% z1 x, |
  362.       free(file);
    4 ^9 x2 c: @6 Q3 S* f9 \, P
  363.     }
    1 }, ?8 j# s3 w1 |) U# S
  364.     UpdateFile1.clear();- u  S! @+ ~; T4 E& S; C" E% E
  365.     UpdateList1.clear();
    ! i3 o& G2 z8 _" |# K. _* @* f8 M$ i
  366.   }7 \7 t) E; R+ R, c' I0 Z; S' F
  367. }  0 k( }% g1 d& n8 F
  368.   
    - Z/ t, |0 p1 B2 a8 a  R2 j" w0 Z6 g
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ! s; ?8 Z# ^9 f- ]" m
  370. {! V) n/ b5 L7 \
  371.   int c;9 g) _& u3 t  e% Y/ M5 l- s' w
  372.   LPUPDATEFILE file1,file2;
    . |% f7 T, @- k/ N. E
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ; V$ a& i3 }. k: L
  374.   std::list<CString>::iterator l;$ j: Z3 t) t. g1 E' K
  375. : Z& W% L2 ?* O/ `
  376.   UpdateLocal.clear();1 ^/ C( Q/ o1 M, M" \7 b5 f
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ l. g) Z" U3 V* ]5 ]
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ _" q& z9 @- _, k& y+ C' H
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);: k1 j6 C+ O) R. Q: J) Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);  H9 c1 F5 l  }3 k' t% V
  381.   if(UpdateFile3.size())  T, q% G; A: N6 U
  382.   {
    + f* N" I+ O# d$ i% o
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)6 n5 m$ q; n% a$ W) ?
  384.     {1 E/ p& O5 n  k7 H& m
  385.       file2=(LPUPDATEFILE)(*i).second;& U. s" A9 _. V/ n( i4 x
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) @6 U5 J+ J0 {$ T0 `3 K6 c7 K1 u  `
  387.       {
    # F  D) z1 w' \
  388.         file1=(LPUPDATEFILE)(*p).second;
      J, l$ q! h! n3 o0 y
  389.         file1->vers=file2->vers;& B0 ]) d0 S/ D7 {
  390.       }/ G+ `2 J  A; `* r; M6 C  D
  391.       else' X" C5 Z; d1 f# v3 W
  392.       {
    6 x0 G, e5 B2 R" S9 o" V: J  m  g3 }
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 C1 Q) o  I7 Y* e* y5 L4 W- R
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    / R: l6 D8 s$ ]( B! p; S
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    & s' I& x! }) a' F7 f" u
  396.       }
      ?9 r1 j# e2 y- E8 Z! T% k
  397.     }
    9 J; J2 h. J) s# ~+ g; I
  398.   }& D. v* ?8 \% q# J  s* B5 e9 `4 _, j# a
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)8 T) ?4 P1 A7 Y% G% t. |* t' W
  400.   {: S( O: x7 I, D5 t6 v2 W
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())# W+ V$ c) ^3 o
  402.     {
    ' |5 T" b5 l& j9 r1 W5 m; ~" e
  403.       file2=(LPUPDATEFILE)(*i).second;
    6 ^/ c- j8 b& V0 B" r
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())2 C( x5 d1 @8 ]! P1 P0 ~6 Y
  405.       {
    6 Y+ V- L+ ~8 _3 s3 |+ w
  406.         file1=(LPUPDATEFILE)(*p).second;% @4 d1 Q3 ?7 V8 |2 C# a
  407.         if(file1->vers!=file2->vers)
    ) g. H# n& r  Z- L1 a
  408.         {
    2 r& u* G  M. {1 t3 q2 {2 M% n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 z9 b) C, i" Z& _2 ^
  410.           c++;8 [; N1 [) e/ C5 m0 o" z
  411.         }
    , y" z% O- K7 C8 a1 k. r
  412.       }
    2 H; l9 @% r8 C5 _4 q4 }8 Q0 `  i
  413.       else$ A. t* q7 K2 [! N; K8 x  @/ w
  414.       {0 U9 I3 W  s& C1 V( K; }; s" _
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) }5 N  C) m" F, @- P  O
  416.         c++;' [* y2 e* B/ i
  417.       }
    " C9 V# S4 K5 @) E/ i: ]0 Q
  418.     }
    & `) T7 v# m+ O& j/ G0 C& |* v
  419.   }$ }0 ^; w( G2 Y3 ^8 N1 b
  420.   unlink(".\\DownLoad\\update.txt");
    ! o: g4 s$ K+ ~0 `0 R! T/ L
  421.   if(UpdateLocal.size()) return TRUE;5 e0 M6 q! P- n8 [; J6 j; r
  422.   else                   return FALSE;
    6 g4 m# j) U6 U5 J* ~- J! A* A* e5 ~
  423. }! T' S6 h( ^- b

  424. 0 s5 q0 Z) h; @" z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    3 ?7 j$ C' e. I0 E4 J  k4 \$ T
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    5 q8 z: R! l$ \( v* p4 z6 t4 c5 k# J
  427. + w) k! W  b, v; ]$ U7 m

  428. 9 I+ m9 f- g# V5 g
  429. ' v# U4 v9 |. o& X  y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ! j1 w0 d$ Y+ m' }: M7 |
  431. {
    / G. x6 n6 V' ], K6 W& T9 `, R
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;/ j: l9 ~3 B) u3 Y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ! R1 W3 B5 l9 v" ?2 {3 O
  434.   {
    8 P3 U. n9 X, u# r/ i
  435.     char szLanguage[50];
    # d+ a' X) m  M! m2 h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 r5 G1 o3 f# Z; a7 W5 ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: S6 Y0 e' Y, o: p: |7 C1 m
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 p" r1 |- p7 \
  439.     else                                   m_iLanguage=ENGLISH;9 F2 H5 j8 e& B* i
  440.     char szRegister[100];6 s. L& q  w& e* q1 C7 {6 W
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / @! A" J& ~5 A# ?- e
  442.     strRegsName=szRegister;
    & w* E' N. `6 ]
  443.     char szPatchURL[100];, b1 C' r7 N, C7 V9 B+ H( g
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 q: n* W1 v0 R0 u) Q) d& x) i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 o6 P6 T. A; P1 d- M6 h
  446.   }
    5 V$ T0 l4 [: a5 O& c9 ?  y5 k
  447.   else
    8 \  w! l# W- [1 B
  448.   {
    . _  V8 F& o1 P
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + Z" ?  ?9 C! m: V, N
  450.     strRegsName=DEFAULT_REG_URL;
    3 ~7 t& n6 A2 R3 P3 H0 J
  451.   }
    6 ?/ \8 {. A- y( m- n& G  y3 o2 z
  452.   if(GetFileAttributes("hosts.ini")!=-1), _1 q8 v& k7 U- @/ [
  453.   {1 {, C4 Y; }3 V; `/ m6 `
  454.     char szIP[50];7 e+ z: q" H8 W; \. o& Q* [% j
  455.     char szDIR[300];
    ; o0 i& B) y/ i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 F8 I% h9 F' H! r/ ~4 R' H
  457.     {
    / g7 \0 E. P5 J8 N1 F
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");$ b0 ~3 T5 ^0 N2 f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");8 ~, o  Z. U6 V+ k, H
  460.       strHostName=szIP;  u; _, i0 @# Y* m9 }# H' s8 l- t
  461.       strHostPath.Format("/%s",szDIR);
    3 x; t2 n* q! G
  462.     }9 P, }8 ]2 p) i$ i9 R' _$ a
  463.     else
    6 i8 L9 S8 z( @& v, y
  464.     {. _2 c' G8 @/ J9 h3 D% l3 E
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 q- }  d, z3 Z" e3 E. d3 l
  466.       {# E; j2 V& E0 G
  467.         char szLanguage[50];& C1 E! G: i* Y7 ~2 W! u
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . \5 {! M, v, O- r; V3 ]* z
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; E6 F8 a! h' b1 M# c5 K
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, v8 ^  M. G8 h
  471.         else                                   m_iLanguage=ENGLISH;
    - V9 q+ ?$ h% L8 j7 s; y  c0 @/ W
  472.         char szRegister[100];
    ' \4 o1 j8 M' \, o! l- N2 M( P6 d! t
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" v" W: `/ R% i4 A
  474.         strRegsName=szRegister;& q! h& M% |6 S7 d
  475.         char szPatchURL[100];$ k- H' D" [5 k, ^8 m9 N  D
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 Y) [" y9 {4 j( q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : C. @) n8 |* ^, k$ f; V
  478.       }; U1 F) E2 s6 }+ g8 T5 W" Y, p
  479.       else3 Q$ X- s, W  R  \
  480.       {, ?  M! y3 t' }/ E1 A
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # S6 P& c6 H3 M. |) f# |
  482.         strRegsName=DEFAULT_REG_URL;( m- a3 x% B6 q$ F
  483.       }
    ; b  r3 G9 U5 G1 ?$ ^- I% W
  484.     }
    ; r1 M, d! K5 \, f& c6 G
  485.   }6 n; [  I/ R# f( [: J
  486.   return true;" Q6 K- j! c' ?" ]7 ]1 [. l- X7 `
  487. }" w* }  e' \0 R  r  t0 l

  488. 8 x, s7 V# w: Y" `! K/ x& s
  489. #include ".\ZLib\unzip.h"
    . c& ^! z7 s4 ~9 A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    % w3 h* ]/ H9 p2 \3 m
  491. /////////////////////////////////////////////////////////////////////////////, }/ `+ p% @: T; `! F  `
  492. // CRevAppApp initialization
    - X* v7 t' ?" J; g& ^  a
  493. ! X* C0 ^0 h% v& a  `8 N' U
  494. BOOL CRevAppApp::InitInstance()
    # i- j5 m9 F  X8 T6 I3 \8 F$ a% M: d4 |- }" Y
  495. {* S3 H: b) O5 V& v- _, S9 A" o
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];* M( c7 p$ N  {) u
  497. 8 R7 _, q  u5 q: z( q1 |  ?; j
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);# }5 c3 e2 p. r. z; u2 B5 [; h
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    * W- E2 U* N7 ?, L
  500.   {; \+ k; J$ L& L- u
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    * c/ \3 f& c: I- J* A7 w7 R  X
  502.     GetPathFromFullPath(szPathTarget,szPathSource);) c5 g) i! P3 o7 {
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" W* O6 C+ Z2 E; z7 `9 L8 P
  504.     {
    3 Y% L8 \% x: r* o
  505.       strcpy(szPath,szPathTarget);
    * x) H' {" r: s% r: L  @
  506.       SetCurrentDirectory(szPath);3 q; y$ K3 _. R0 Y- y, I% l
  507.     }' _7 ]/ u5 W& h$ y# ]
  508.   }
    # }+ i: ~4 r9 ~# V; x. E1 w
  509. #ifdef _DEBUG3 M4 p; b3 V; r, t/ b: R  k. }, Z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 K: `+ |2 V% }
  511. #else4 Y. f9 F' g: `8 Q9 _
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))7 b- W5 b* u6 Q) E' k
  513. #endif
    # O) s, r8 F: @1 h) G
  514.   {, ?7 F' d. w( |: B1 v( `/ H  [8 T
  515.     char tempFileName[MAX_PATH];
    1 z4 m; ^9 C/ ~, S- y- ^5 D3 Y
  516.     strcpy(tempFileName,szPathSource);' C  k$ ~# r3 u) M! l
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 Q1 |+ i; c  d& Q4 p
  518.     strcat(tempFileName,"\\$CSUpdate.exe");+ y' |( ]. n1 a! D1 G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    / o& I3 J0 A& F
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    8 z" ?& y0 W# |8 h1 D
  521.     return TRUE;
    ! S% [- g! `% e
  522.   }
    7 [4 T) Z8 u3 s$ q
  523.   // Nuke 0118: Delete run.exe: x2 j3 G6 K) W3 R$ s
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    9 w7 F8 y* F7 H+ f" {5 P1 H
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    % b- o4 u; n) J2 T- S) H
  526.   if(!ReadCfgFile("Config.ini"))) q7 }2 H& C# w$ P! M
  527.   {
    , B9 s* A8 w9 U8 H
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    $ p$ p# J' s# u# u9 m
  529.     return TRUE;: V) s. D! m3 }6 V- m
  530.   }" v7 w0 X) `8 a* w# W$ T& n
  531.   HANDLE mutex;8 k: c$ ]) b' y: G
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))( F6 E' b, Y3 q) D% M4 P# r# C
  533.   {: K$ k! O% Q2 ~$ S: H
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)' ^  ?, f- q6 u3 K
  535.     {, Z/ x$ s; w' a( b) i  \9 _
  536.       CloseHandle(mutex);
    ; O( B7 {. t% G: W( N# e
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * y4 a$ J3 i6 Z' L* |( x
  538.       return TRUE;: ^: x6 z# Q+ ^! u# K
  539.     }
    2 Y, B. F" J3 D6 Q
  540.   }  3 K9 Y( K& f' q
  541.   CloseHandle(mutex);
    . \) R" _7 |2 L# Z7 H* ], p: E

  542. % X* Z" t4 y9 v9 G
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # \' X) T! |6 ^7 [6 M6 G1 Y4 j

  544. % P4 s% Y+ w+ X! \' e3 U8 A+ \
  545.         AfxEnableControlContainer();4 {4 u2 T7 T) N! I6 g( x* }
  546. ' O: q- d, E; j+ T' F2 ]
  547.   bCanUpdate=FALSE;
    # a9 P2 g# O0 d9 v$ c9 V; b5 W
  548.   dwStartUpSteps=1;
    * L+ j5 d7 v9 }0 C8 q0 |
  549.   dwProgramState=AP_NOTHING;5 E/ C' t9 z5 D; y# ~
  550. ! s3 y+ \) z% n+ Z6 K; n
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    2 h( x! R5 j9 b
  552. * ?8 z! a7 O, V, i
  553.         // Standard initialization% f7 p, F3 f0 k# P5 ~# b7 l
  554.         // If you are not using these features and wish to reduce the size
    ; {* f( d  S2 \3 b$ R+ Y
  555.         //  of your final executable, you should remove from the following4 M; Q% G% z* o
  556.         //  the specific initialization routines you do not need.; i1 ]% f/ l; Y) A) p

  557. 8 ^! P! V4 d7 e0 A0 K
  558. #ifdef _AFXDLL4 F$ b' k6 \- ?
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 g7 ^$ M# i- r& M4 f* A9 F7 p
  560. #else
    5 ]( a( O* D& l2 O/ w9 G
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ; U8 W: _) ?$ p+ l3 z
  562. #endif
    9 a' N8 U+ Z8 r- b1 T8 d- S

  563. . R. M+ {( D% i7 Q1 g7 ~
  564.   dlg=new CRevAppDlg;
    7 W. J, |9 a6 o3 g& P  v  O
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , Z5 `( h7 q, y5 n, w
  566.   dlg->ShowWindow(SW_SHOWNORMAL);1 W4 G# c1 [. t. X! N+ {' ^" X: q
  567.   m_pMainWnd=dlg;5 t0 ^! C0 \' V1 J7 @1 n: ?
  568. + M6 x* u& B6 |! _( j; M* z
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);7 ^9 V/ v; d* H8 G- Q

  570. , S0 q% P+ m/ X( v: T5 L
  571. //  GdiplusStartupInput gdiplusStartupInput;
    / B( k# c  F  j# w
  572. //  ULONG_PTR gdiplusToken;
      T# W: i) R# _0 c3 M5 p
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ' u0 V2 F) K- {' R

  574. 3 {0 q4 i& M  S: e, Y3 [& c7 l4 J. Y
  575. //        CRevAppDlg dlg;. c, g/ I0 D# N9 C" r: i5 T
  576. //        int nResponse = dlg.DoModal();9 T3 t5 o3 O; c- X- }8 c/ N3 Q/ v
  577. //        if (nResponse == IDOK)8 p! t  b8 l1 X' q) g: v
  578. //        {
    6 a1 L! m5 k5 ^- `
  579. //                // TODO: Place code here to handle when the dialog is! x7 ^4 L' ?" C. p; P- D. K
  580. //                //  dismissed with OK
    / Q) T& `( A3 E
  581. //        }
    , F; h3 R1 ?0 e' m# C! N3 W
  582. //        else if (nResponse == IDCANCEL)
    / ~3 _. J) b' L. E) {
  583. //        {
    % C( ~  y0 x% _) ?
  584. //                // TODO: Place code here to handle when the dialog is0 F1 c/ e( L: l. V  J) X
  585. //                //  dismissed with Cancel
    % f- p$ U5 ]+ x6 _6 v$ |3 f5 N8 g
  586. //        }2 h: @2 P1 X7 T+ u) B* R( |

  587. ! g: B1 `3 ^# ?% ~" Q
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    / n' _# w1 e* V1 p( w" s, _- n
  589.         //  application, rather than start the application's message pump.9 k3 L6 H7 P, E& |3 D+ C" m' P* {
  590.         return TRUE;1 C9 }9 ]" d: D# ^& j
  591. }
    9 U) m2 E2 H. ^' G5 [# g+ E

  592. ( j: n9 n; x' }9 m
  593. char *CRevAppApp::strtok3(char *pSource,char *token): ]4 @( Y# T% c7 d* }. S) F
  594. {
      B/ P6 e2 o. ~( I- r0 K1 W, W% u% N
  595.   int i;
    ) H; ~9 Q7 d1 g4 y/ F
  596.   char *szRet;6 ]+ h% Z) W. u& D  [

  597. 7 U0 T+ u8 @1 ~# i% i0 @
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # L, l4 l: c" X& I
  599.   if(sztoken)
    ! i# |/ d! r/ a# }5 r2 x
  600.   {; g9 L; |& L, J$ }1 k  F" j0 e
  601.     szRet=&sztoken[itoken];& @; C. ^% O( e
  602.     while(sztoken[itoken])3 N3 R9 }5 B9 W& J2 F
  603.     {
    7 C" m/ E9 ]4 e$ z: Z
  604.       for(i=0;i<(int)strlen(token);i++)( j( ^7 r1 G) k0 y- y# b
  605.       {: J7 h9 ^1 J1 F' @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])& ~! S/ J" t- b) Z: {
  607.         {# C. N  `+ j7 G
  608.           sztoken[itoken++]=0;1 N* [+ r6 o8 _2 o, E. n; f. \
  609.           sztoken[itoken++]=0;
    5 r2 N2 j! v# r) @
  610.           return szRet;
    " _) R5 P0 l9 ]- M" m
  611.         }
    , i0 ?" X+ q" F( V  |- x9 K$ x
  612.       }
    / a$ i7 l4 b# R% L! r. [& r
  613.       itoken++;
    " i* m7 ]: `+ o$ u
  614.     }
    3 f4 n" m0 K  S- S7 {$ v$ s- I
  615.   }
    5 J( j) y# N( O4 o" m
  616.   return NULL;2 \  o0 z- r! k; {! w2 a
  617. }1 D5 W3 {( w! ?0 Z& o

  618. + N! \( M) {. m& d% i- k
  619. void ProcessProc(long Total,long Current). Z- M! H: C. ~
  620. {
    ( V5 A' h" f3 B
  621.         MSG msg;
    / r% N3 h+ R- g  I
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);( e* k+ s6 ?+ O% y  C* ?
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    3 N2 J+ @* r1 v/ O* y; E$ U+ p5 F
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + N4 h- g0 s; D7 k$ s; a
  625.         {
    * p1 y1 G" I* e' O& D. v( k1 j
  626.                 if(!GetMessage(&msg,NULL,0,0))
    : ?  E+ {, k7 T/ n! e; A3 @
  627.                 {# `0 S; Z) j; v0 P: J; V4 |
  628.                         return;5 Y+ ~2 A% u+ [* O, B$ a
  629.                 }/ S2 K7 f5 j, Y8 S/ \( x9 p
  630.                 TranslateMessage(&msg);0 ]$ ?9 J- ]: {: T
  631.                 DispatchMessage(&msg);+ M! I2 \- [2 l. \1 s
  632.         }       
    - ?- j5 E# C0 d: U7 o2 k% p& F1 e
  633. }1 f: T: t- p  t

  634. % z5 f& p) L1 C" L
  635. BOOL bFirstChar=TRUE;* j- }2 [1 N4 t! Q, f

  636. & Z. O. n: N, h  k
  637. BOOL CRevAppApp::OnIdle(LONG lCount)6 F, T1 ?# N, C( Q) m6 {& M
  638. {( {+ [7 C7 T6 o' t
  639.         // TODO: Add your specialized code here and/or call the base class
    % _/ p2 L- P  b1 U1 S, c+ j& y
  640.   switch(dwProgramState)9 a0 S$ ^1 M1 Q! O5 j. z# x
  641.   {
    1 z( n( k( d4 ?# ~3 A3 Q% X, b& o$ C" W
  642.   case AP_NOTHING:
    0 T! l+ Z% A% X! C# q
  643.     switch(dwStartUpSteps)
    & ~2 F$ [$ O0 G/ J8 b, F8 k8 q7 ~5 C
  644.     {
    % A( k3 |# J, `1 m# m1 l, b
  645.     case 1:$ ~9 e7 w! V0 ~1 o* ]
  646.       {
    - M8 A$ ]- N' U$ Y) u) F1 G
  647.         int i;
    ; C: u2 ?9 F1 r4 N  b, v
  648.         CDC *pCDC=dlg->GetDC();5 A3 `/ }. h2 }* ]# G
  649.         HDC hdcwnd=pCDC->m_hDC;4 z2 t6 t5 Q9 _
  650. //        Graphics graphics(hdcwnd);3 i  O6 _( S- R; G$ o3 [0 Z$ n3 o
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    $ h0 R3 q; N; f+ x6 ?
  652. //        INT iWidth=bitmap.GetWidth();
    - E2 a! B% J+ g, ]- F& k: H/ _& I
  653. //        INT iHeight=bitmap.GetHeight();$ o6 `% S& r- p! Y# V" @
  654. //        Color color,colorTemp;' p( _3 D! j" f5 ^2 o' g$ |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . x5 J/ v7 z/ T6 L1 E8 a
  656. //        {
    6 N1 A1 c) L7 _" t! @: w: B6 y
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)+ g* {: \1 q1 `6 P7 j" v
  658. //          {0 Y9 i$ T5 o6 b1 \
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    9 |2 M( X1 o" H
  660. //            colorTemp.SetValue(color.MakeARGB(8 f/ ~8 G/ L, V7 O1 P8 h! a+ z8 e5 J
  661. //              (BYTE)(255*iColumn/iWidth),
    8 _: _0 W3 V4 s. E1 T
  662. //              color.GetRed(),5 }2 J: {/ d! m1 i
  663. //              color.GetGreen(),
    * g- ?1 X# u  X7 Z$ K
  664. //              color.GetBlue()));
    9 F; J" w0 e0 |' s; q" l: _4 x  J
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);) O& Q  L+ b1 I, I: p
  666. //          }7 j3 s2 B+ V, I
  667. //        }
      {" T7 `- ~" H
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ' L5 b! @# R% E- [0 {
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ }( V% _! r4 T, T* f& ?9 n
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");/ |& L4 F" T+ M2 c
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: K9 f' W9 H+ d* v
  672.         for(i=0;i<240;i+=8)
    $ O. k1 a: i( r5 A# d% h
  673.         {
      E# C3 v  z* T" m: }% q/ P0 m
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      O& v6 }. a: I. R, E
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 q8 ?& z- ~- x' V  r9 |
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ Z2 r/ P1 |" W1 b+ `+ T
  677.           Sleep(33);
    6 n9 X# V" Q& q# {; D- n+ F
  678.         }7 c, L" c6 ?, c
  679.         Sleep(1000);/ N4 a) P; w9 Q$ I- D; l
  680.         for(i=240;i>0;i-=8)
    + D) X# ]2 |8 ~! p" y' Z0 n
  681.         {
    ' u1 ^# ?1 O# \
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) d5 [( B- X4 ]/ h. x
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 U7 U- G( i9 g- Z0 d- c
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ i2 b# ?+ k- r8 H( w. ?# C4 i9 E
  685.           Sleep(33);9 `6 O2 o- `- N4 z2 t& Q$ n
  686.         }- ]1 L7 P1 M, W2 i& {7 M
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    " g# U. m( w- v5 K2 o. Y- ^- Y- v
  688.         dlg->ReleaseDC(pCDC);- _" r4 h. f. Z$ O& o
  689.         DeleteDC(hdctar);4 l; |( w# C& ~  p; a' F! b
  690.         DeleteDC(hdcsrc);6 k) a& u. v; o- E. }! n
  691.         DeleteDC(hdcorg);5 `) F  U; J- b7 B
  692.       }
    5 v+ k' T) b4 v! y$ p! p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ( \% z3 H5 x7 E+ Q3 W$ k) A3 G
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");; u0 W$ s: R+ `( h! N
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");& d, _7 s& L* Z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 e! l3 h# @* M9 @3 Z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  Z% ]1 t3 `3 B9 k  n8 `; |
  698.       if(!Dn.Connected())
    6 F- X3 i  L: G) f3 [. L6 ?$ D
  699.       {) @9 c0 `7 C: j9 x+ R
  700.         dwTotalFiles=1;& n* x; [$ F0 {6 i! G0 Z, v
  701.         dwDownLoaded=0;
    ! e% l# `8 ^5 K# i3 w+ y
  702.         bSilentStep=TRUE;. v6 J$ O6 i% A) P" h, C1 a
  703.         bCompressed=FALSE;1 C4 D' \2 s) [9 `
  704.         strExtLocal.Empty();' ]" [$ e" v1 _
  705.         strFullName="readme.txt";) o: ]. J6 F4 c6 j
  706.         dwProgramState=AP_CONNECT;3 i- P, L  k& w
  707.       }, E+ h9 U3 X% m3 b; a) s
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    " s( |1 R3 L" @4 V5 F. d9 l" X2 t; {
  709.       dwStartUpSteps=2;. z& w7 n/ o/ ~9 W
  710.       break;
    0 ^# A. [% y* o9 {* X
  711.     case 2:8 C- F! Z9 p/ w5 P& o: i
  712.       {
    # k6 S- Q; r0 s; c. p& q+ j
  713.         int iEOF;6 v! f5 ~7 o2 g: N: |
  714.         FILE *fp;2 E( Y) j' J( [1 {# l, ^
  715.         char szString[512];* [* f2 ^4 Z, h& ^) W' u
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");. T. E3 d/ {; T, T" n/ K
  717.         if(fp)
    # M/ u/ c2 H5 V7 p% V+ @
  718.         {
    5 X( i( ?4 C& ?- j& {  ?' @
  719.           do
    5 A/ Y) E5 w* @7 F, p/ O3 `
  720.           {4 }( P8 a; k& \/ j- ^: U
  721.             iEOF=fscanf(fp,"%s",szString);5 o: Q& u0 H, r: d" `/ g1 A1 y) i/ {
  722.             if(strlen(szString))
    ! _  l4 B5 \) o8 l
  723.             {
    5 |" ^0 D1 J2 p
  724.               if(bFirstChar)5 [7 a/ g' M0 h7 X5 o/ Q
  725.               {
    ! c8 d% I0 \' [* B, x$ }
  726.                 bFirstChar=FALSE;
    & d! K& \8 g0 k" F
  727.                 bConnectIsBig5=FALSE;
    # d# r) W2 a) W' ?2 p
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;8 V2 b( i- A  y$ u+ E6 P3 A
  729.               }
    8 L7 Q- i# l4 h9 l. E
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));' q/ b1 v" N, f9 ?
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));* @8 j# H" t: x- U! a( r  ^
  732.               dlg->m_ListText.AddString(szString);
    2 v& w/ T+ E1 K8 v/ c/ }3 C) k
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 `% C0 Y0 a9 [
  734.               *szString=0;
    4 e2 v4 Q4 f( r1 W  _
  735.             }
    . ?8 q0 h( g, o; c
  736.           } while(iEOF!=EOF);; s/ t  t$ v, u1 w5 N4 E
  737.           fclose(fp);; Q9 O. J" I  B5 d/ r  @6 \
  738.           unlink(".\\DownLoad\\readme.txt");8 O( z( K' E* [
  739.           dwStartUpSteps=3;
    . c; _& ^$ p! H- n
  740.         }+ A2 d/ O5 \3 @9 w1 X3 s3 {
  741.       }
    4 c$ N$ x& O" C+ I
  742.       break;
    ; \% I3 |  l2 a  G9 S( L
  743.     case 3:- l; b! y$ L3 ?" c
  744.       if(!Dn.Connected())
    & d$ X+ i1 M1 C: c- n: A0 k
  745.       {7 t2 {/ f' s5 |; |' s, z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);5 f7 V0 A2 h3 |( M. J) Z, Z& t. F7 b
  747.         dwTotalFiles=1;; [! M- b( V! n, h
  748.         dwDownLoaded=0;, V5 t# y5 J( O% t2 l
  749.         bSilentStep=TRUE;) L" Y8 W# J+ O' F5 h) {" N
  750.         bCompressed=FALSE;
    5 A4 @1 L8 C4 N$ o
  751.         strExtLocal.Empty();7 t& k* m1 P$ h- ^5 |
  752.         strFullName="checkversion.txt";2 B, U% m6 m( x$ D  \
  753.         dwProgramState=AP_CONNECT;
    8 ^7 Q% ?6 x% }8 @7 F* S3 R
  754.       }
    0 D+ O* U# ?3 t/ E
  755.       dwStartUpSteps=4;. }3 d0 z7 C4 F6 b; R
  756.       break;
    ) ]4 O0 U4 h0 \; Z, i
  757.     case 4:. `7 |2 k$ T' _$ y; ]: o6 B# k
  758.       {. ~6 \% K3 o, D% w8 |- l0 M6 v9 B
  759.         FILE *fp;
    8 D+ L" q" X! q( \7 P5 |# J
  760.         char szString1[128];: f. S  E4 l! m6 `' _7 p0 O
  761.         char szString2[128];3 `9 E" P4 J. k0 t3 ~; D
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    9 ?1 b) w# G7 D- w9 A
  763.         if(fp)
    ; b' X3 s; Z! R7 Q7 i+ {
  764.         {
    / ^1 l3 ?! p% j" t% j2 @: Y& a6 S
  765.           fscanf(fp,"%s",szString1);, S+ I8 q+ c: W# t
  766.           fclose(fp);
    1 e/ w" e) g6 L. {
  767.           fCheckVersion=atof(szString1);' G3 M9 _, k1 h9 _% a* C% D( B
  768.           fp=fopen(".\\checkversion.dat","r");1 @4 o9 D3 S) t3 O5 E* Z
  769.           if(fp)3 I" o& K) n3 s5 P4 d$ j" V1 m
  770.           {* u6 J8 P1 |3 `1 S9 y5 l4 @: `
  771.             fscanf(fp,"%s",szString2);
    ' Q# I+ a4 J8 w
  772.             fclose(fp);$ Q4 N" o: @3 X; J" T" c3 g
  773.             if(atof(szString1)!=atof(szString2))9 ~: t) R; S" ~% f8 s4 C
  774.             {4 Z( }: H% J$ F7 L+ k5 n$ L
  775.               if(!Dn.Connected())( V3 J8 M# L3 v, e) }9 w* q4 u
  776.               {" d1 ?/ H, \0 i8 a  o, G
  777.                 bFirstUpdate=TRUE;
    ! Z: U+ j- ^  o% g' W8 w& K
  778.                 dwTotalFiles=1;
    1 J  Z0 i  r8 b  c) W: c
  779.                 dwDownLoaded=0;
    & Q5 l5 B$ z# ]5 {! S6 O
  780.                 bSilentStep=FALSE;$ z* x" `% d! F; T
  781.                 bCompressed=TRUE;* T# p; y9 @" L- q2 M; Z/ a
  782.                 strExtLocal=".\\DownLoad\";: c0 Y0 ]/ h' [$ v' c
  783.                 strFullName="update.txt";7 z  w! P) T! y4 g8 Y( _
  784.                 dwProgramState=AP_CONNECT;
    2 t+ Y; [/ o: K  F$ _( |
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- a5 K2 p6 p6 F% {5 X% w6 J* T8 D
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 V, _, B! j2 V. B1 F6 {- v( a. e
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");! t' Y; l( H) X- a% D

  788. : a6 M6 j6 s. _) y
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 Z6 Q& y% m7 d* {
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    5 r0 ]; z' u  Y# |; `; r+ h$ G* l
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)) t$ g3 y  J6 E6 E
  792.                 {
    , j$ Q, q& ~: H
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    - q# d- W# Y; y0 T! T( O* |; R( U
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    / h; Y1 \! q( N1 o$ P
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");4 o6 k% h3 U2 X8 b9 I, X9 L
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- B/ U1 t$ N6 m* L9 C
  797. , g4 p6 X5 Y2 c
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # s, x) |! z7 J0 ]7 v
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + c! P1 H2 Z2 s' t$ [7 v
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    : t( }6 {/ a, D2 Z6 [0 X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " T8 d7 r7 T5 f2 V) w) r
  802.                 }. h$ n' x. s; D  O5 k
  803.                 dwStartUpSteps=5;% K+ I  S% h- w0 p. @  A8 ?
  804.               }. l9 z  k9 U8 S' c9 j6 S' H. d- [
  805.             }* r& B1 s0 D9 v: I- X
  806.             else+ _5 }# n( h" }& E
  807.             {
    - f1 g8 X# H5 g, W4 D4 |$ [
  808.               unlink(".\\DownLoad\\checkversion.txt");, l* C9 h0 R6 d3 w8 W3 R5 J' n  Q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    5 ~- k3 g. H& M& b
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- Q" `! p( E+ Z- H% h
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 \0 G% r4 H+ C. e/ A

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

# c. ^' r* \) {
% e3 }7 b2 Q. m6 x2 e8 y

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-5-24 07:36

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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