找回密碼
 立即注册

CSUpdate.exe源代码

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

) ]9 r2 Z+ j- i
  1. / RevApp.cpp : Defines the class behaviors for the application.% l- K3 h3 _1 O  [
  2. //) ?0 T8 U" l7 F. _/ J* Y

  3. - i/ y6 k1 c! O# T( f1 k9 U  _9 b
  4. #include "stdafx.h"
    # ]3 P2 N& i1 C( B9 n: O; k9 \$ |
  5. 1 ]5 _# t- z- k$ Q0 b, O
  6. //#define UNICODE* D, }7 W* b5 r7 m& C0 ~4 n8 V( A
  7. //#include <gdiplus.h>: u. k3 k# _3 `+ p7 p& n9 ?1 I
  8. //using namespace Gdiplus;0 ?: V" D1 m% L$ z
  9. 7 |- A; i) O1 @4 o- J  d8 w
  10. #include "RevApp.h"; \3 `, r' D, r4 a( d- W" F
  11. #include "RevAppDlg.h"
    9 U8 ^; {  g9 E( O$ s
  12. ( J& @% [4 ?7 T2 t+ X
  13. #pragma warning(disable:4786)# M* q1 V3 L7 ^2 r4 p
  14. #include <map>
    ' T5 R2 q" q6 m6 A9 e
  15. #include <list>
    - ~5 T& t, c! p7 Y) \
  16. #include <direct.h>3 w& N+ W: D' I. Y

  17. 2 C% @1 b2 R5 e- z9 O. N9 ?" b
  18. #ifdef _DEBUG* C- X# m4 ^6 m
  19. #define new DEBUG_NEW
    & i$ _& |8 F; J; T5 U2 ~& a; S
  20. #undef THIS_FILE
    ' {* N! Z: C7 {6 j; [) }# R
  21. static char THIS_FILE[] = __FILE__;$ z3 a5 ?1 R& Q% ~4 ^8 O+ T
  22. #endif- _! K0 w) a5 a' G% b5 B+ P# p
  23. #include "SkinResDef.h"
    2 s6 k. M) G0 l' ]' C9 j; v1 _+ l; z5 s7 _
  24. #include "ChangeBG.h"
    # s' P2 h+ l$ ]( N, A
  25. #include "AFXINET.H"
    ) y8 Z4 Q6 n* d% p8 Q  G
  26. 0 h1 q) ^, L$ Z. g8 R& @! C
  27. #define TRADITIONAL_CHINESE 04 C6 v/ ]# y8 ~1 Q0 p: G; c5 g
  28. #define SIMPLIFY_CHINESE 1& c7 d# a8 W& }+ Z7 x
  29. #define ENGLISH 29 V0 h; G( ]. [- }# s
  30. int m_iLanguage = ENGLISH;
    $ w; R- G/ G3 L- I: {) r  W
  31. /////////////////////////////////////////////////////////////////////////////
    ) O5 {" G$ v- F! ?, a  j
  32. // CRevAppApp
    $ R0 {/ J6 ~; G- o: G4 s% ^
  33. ( C) J3 K5 T& B; l+ p' \' \, F
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    : l7 U% \: |, R' c: e
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    6 r( o% S. G- I: h5 ~
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.4 D. P! c1 W6 U; F& f
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!  f3 B% g7 K, X: f- e9 \
  38.         //}}AFX_MSG
    , |1 R9 a) O4 K! N
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)) Q9 }& B# I- m0 M. D
  40. END_MESSAGE_MAP()* H' _; U, A! \' F

  41. 6 I5 x; S. @' e8 T
  42. /////////////////////////////////////////////////////////////////////////////0 p+ z# B. V) X* h  K; _# _. N& B
  43. // CRevAppApp construction
    # {( C5 b5 K% R0 f' V
  44. & U3 ^8 Y, @' M: q' u1 U8 @
  45. CRevAppApp::CRevAppApp(), S" w: v! n$ E% V
  46. {
    " T- F. ~1 T+ {+ E) w
  47.         // TODO: add construction code here,
    + L( v: Q& c2 x" Y) f1 J
  48.         // Place all significant initialization in InitInstance! H! c  ?  v; n, F4 y1 b( j5 O$ C" m
  49.   bDisplayIsBig5=FALSE;
    7 h8 F) _4 T+ r8 P* p
  50.   bRestartUpdater=FALSE;7 S1 D0 ^# n' k
  51.   bFinishUpdated=FALSE;
    ! Q  B' s( o& x- c, Q1 k
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;5 E8 H5 i: q! ]
  53.   InitChangeDataBig52GBKS();
    6 s% X' ]3 Y4 y1 @% v
  54.   InitChangeDataGBKS2Big5();
    - Y" }, r6 T8 N2 ^( {5 s2 t
  55.         //2 h3 p$ K. x0 e( H
  56.         bClickRunExe = FALSE;& O, O1 b) o& y! Z
  57.         //
    4 b$ U8 R& }" m9 Y* E
  58. }  J/ V, d" M  w, E# H# _9 T

  59. " W/ P4 A0 \4 c3 c
  60. CRevAppApp::~CRevAppApp()
    - e4 r7 `$ X$ ?" x
  61. {
    / x+ [; G5 M1 Q; A/ n: S
  62.         // TODO: add construction code here,
    + z4 e2 ?" ?; E/ e9 |
  63.         // Place all significant initialization in InitInstance! b6 D8 D. x9 T" S! _
  64.   EndChangeData();
    0 k* [5 J7 l% |! U" |. s
  65. }& y; }2 O5 k5 w5 \" o  w/ q

  66. ; I' e9 v, I4 j
  67. /////////////////////////////////////////////////////////////////////////////- f4 O0 f* j+ Z9 S8 }
  68. // The one and only CRevAppApp object
    % v' V4 I/ |* C( S' o, W

  69. ! d5 X/ h; a) B! b: G5 T
  70. CRevAppApp theApp;
    5 k% Y% r& ~8 ~* L1 x

  71. ( @. a6 @6 B( t% z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    0 Q6 e( {. N; F* r% h! f% t
  73. {
    & x7 {& `8 d3 \$ J+ l& p
  74.   int iEOF=0;# @! Q5 B5 b( C0 s; j
  75.   char szTempName[MAX_PATH];
    1 ]! @5 ?" I' K& ]
  76.   *szFileName=0;
    0 F; O7 n( ]9 v" A5 a3 T% [% S
  77.   iEOF=fscanf(fp,"%s",szTempName);
    % Z: T( e. O! u: {  y4 i$ t
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ' D7 n% P8 e8 f3 M9 z/ A
  79.   {8 [; R: P1 }( S( A( d4 A
  80.     strcpy(szFileName,&szTempName[1]);
      ?# X$ u4 b; W) E# }$ \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    4 C+ ]5 |8 U8 D' i7 i
  82.     {
    : M: j" Q1 u) ~+ m: y) s
  83.       iEOF=fscanf(fp,"%s",szTempName);$ S9 t4 x2 I" R( H$ E9 C& s( Q
  84.       strcat(szFileName," ");+ j$ D# u; ^0 k
  85.       strcat(szFileName,szTempName);
    % B- H# T0 s5 S& M2 _" ]$ U, h
  86.     }
    - X& |% Y& z3 Y5 e  }
  87.     if(strlen(szFileName)>=1)( e6 N- {6 Y  [( F* |/ u* @( T% c
  88.     {+ F2 {. t1 D+ ~5 c) P3 P
  89.       szFileName[strlen(szFileName)-1]=0;& [- S, g( _( _, @, R/ D
  90.     }
    3 Y8 @" o+ d6 ^) ]% Q% l
  91.   }# R& ]7 \+ k8 o( O6 n
  92.   return szFileName;  q) d' |. H' t8 V) {
  93. }
    0 ~9 m! W" w( I; C
  94. # a7 V7 b9 y( p1 x% v
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)$ [$ f: a/ i4 [# I* g  K
  96. {- W! ]+ F/ L4 C: }  [
  97.   FILE *fp;7 F: r( t# k: e. c# b* c
  98.   char *key=NULL;4 k2 }/ Y3 [; h
  99.   char version[MAX_PATH];) z! E2 Y. q% u4 h  c* {1 e
  100.   LPUPDATEFILE file,olds;4 S! `/ T' a# V
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , X5 s* q" n/ d: j) Z0 H2 ]1 M* P
  102. ( W5 s! \* a& N
  103.   UpdateList.clear();9 O9 l: k0 G( I  p4 Z/ A3 W
  104.   UpdateFile.clear();6 E8 w. n) u2 u% Q- ]7 H6 p
  105.   if(GetFileAttributes(filename)==-1) return false;$ s5 T7 K( |4 G% K. b. a
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( f) y; n' n1 I! ?
  107.   fscanf(fp,"%s",version);5 m. J" D" v* l7 n3 S( g: E5 }. l9 H0 g
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ( R) @$ W% U$ w1 P
  109.   while(fscanf(fp,"%s",version)!=EOF)
    + I8 M5 O1 l% L; O( E) E5 S4 V4 Q
  110.   {+ o$ c3 Z! s$ G
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " ^9 {8 B7 t7 g0 Q$ @
  112.     fscanf(fp,"%s",file->path);# q6 C* u/ m& I+ i# k; O
  113.     ReadFileNames(fp,file->file);3 @* Q) K3 s) F
  114.     strcpy(file->full,".");
    ; l+ m- N3 d5 ~, v! N
  115.     strcat(file->full,file->path);  T( e: e: g: e
  116.     strcat(file->full,file->file);
    0 `& ~. B  C$ r2 ~6 L+ O0 @0 u
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())7 |+ Z9 b: J3 Z9 u5 @
  118.     {4 ]0 `* L8 K# N5 ]
  119.       file->vers=(float)atof(version);# v$ A0 M( \/ A3 Y/ G- C
  120.       UpdateList.push_back(file->full);
    6 H  g2 z2 @- w) q
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ; r+ ^" g$ ~; S" _) H/ Y9 \% D; @
  122.     }! A. O" J% B1 u' H# }
  123.     else
    ! g6 l0 y! L8 s4 \+ I( |2 D
  124.     {; A) a7 x$ o/ M$ W! J, r
  125.       olds=(*p).second;
    7 |  W8 r+ C" \0 Z
  126.       if(olds->vers<(float)atof(version))) [2 ^5 v# d/ T; a% r1 P0 p: \
  127.       {7 E8 C5 r' R( S! u* X
  128.         olds->vers=(float)atof(version);
    / _* r% t1 W7 E( ~, I) f
  129.       }
    1 j+ l' T0 l/ B) h, q) C9 k
  130.       free(file);* U1 m. b4 v1 F1 S% `; `
  131.     }
      p$ p+ w( Z4 R' t$ }
  132.   }
    8 c$ u$ t$ U% @" p  T* F
  133.   fclose(fp);# |6 M7 @  z  u1 j  [9 `9 x
  134.   return true;0 |+ C' ^* N+ f7 W& m! _
  135. }+ @& j1 P  p+ l* ~# }8 @
  136. 4 C/ P' z. L" ^% e
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)* f% T" E3 D. @$ y+ {6 |
  138. {5 W& C2 N" L) u2 }) p: \  e/ G
  139.   TCHAR  szFull[MAX_PATH];( R9 C+ [- [# u6 y, i- b
  140.   TCHAR *token,*inter;
    $ @  m; |0 g% z8 e" C! ?
  141.   *szPath=0;3 i: ?6 j9 U! P7 f! f1 j
  142.   strcpy(szFull,szFullPath);- _; `3 N. Q7 B2 k  ~% P
  143.   token=strtok(szFull,"\\/");
    # t3 S; S" n* t, M; D( i% Z2 [
  144.   inter=token;3 F7 s' `4 N! Q4 U
  145.   while(token=strtok(NULL,"\\/"))
    7 T; N5 y! l% i8 k
  146.   {
    # o8 p# @$ J6 [7 h8 b: {4 [
  147.     strcat(szPath,inter);
    2 g2 U! x' E: G9 S" }
  148.     strcat(szPath,"\");
    * A' ~6 a; L( Z1 ^" G5 c2 a; F- P9 c4 `
  149.     inter=token;
    8 Z5 |2 C$ {2 O; f. \* ^
  150.   }  r% w  k$ v! N% ?2 [$ K; q8 H1 ~
  151.   return strlen(szPath);
    / U5 ^* A! w; i! j$ W. t- j
  152. }
    7 c) O8 p, ^" u- j7 m* r) @9 T

  153. * K- w, K5 i$ v: d9 D9 s2 q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) J* P4 g! z3 O6 E3 X: Q
  155. {
    3 n3 x1 d; }; z+ B* p- g
  156.   DWORD attrib=GetFileAttributes(Target);/ |3 i3 f2 P/ L1 k
  157.   if(attrib!=-1)
    $ P4 a% ^5 u7 T* g0 d- ?4 ^
  158.   {
    $ U% R5 G( f+ P3 `
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))1 Q/ S/ `$ E1 p- O
  160.     {
    % t; P, v4 k( J8 }- G  r. I# G
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    * e1 z7 n9 l( o6 E3 |
  162.       SetFileAttributes(Target,attrib);% F/ U' O9 {1 k0 ~9 K+ P
  163.     }  a9 h; O( p. v+ P: C
  164.   }
    9 p- n" n, |) r7 Y: u3 K
  165.   CopyFile(Source,Target,Erase);
      ^5 |' G: Y" w
  166. }3 l# r. N: w8 G

  167. ; g6 R# Z1 \! \0 R6 t8 r" o
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : U; r2 j7 @; k# j7 P
  169. {
    $ G5 I: r4 M  e5 A) `' ]  @8 Z7 E# N
  170.      FILE *fp;# e2 q& ?2 n, q8 v) R- V
  171.      char  szBuffer[8192];% l; B2 _$ G/ t7 n! C' ]' e
  172.   va_list  argptr;# m3 n) Q% H' f$ `/ M
  173. ! d. X9 X9 q, Q% }- m5 @/ w8 u
  174.         va_start(argptr,message);( H! G# L& i( [' u+ a5 y( o
  175.         vsprintf(szBuffer,message,argptr);
    ) s' Q4 g( B6 p3 [
  176.         va_end(argptr);' t9 v- P1 o+ R) W% ~2 c
  177.   fp=fopen(FileName,"a");
    ; H9 g. l1 X9 h3 f6 J# a+ I
  178.   if(fp)
    - T3 L& z* x; E6 F8 I8 q& B
  179.   {
    7 |9 S' Y9 O" ]" J
  180.     fprintf(fp,szBuffer);
    ; I, A+ S3 O+ B0 g
  181.     fclose(fp);  y. ~/ i5 b5 W; j4 x2 j
  182.           _flushall();) c4 i4 R1 J; q! q! T# c1 t
  183.   }
    0 Z6 ?5 v- \& q( y3 c6 [& Z
  184. }
    & y; o. T$ T' |$ e

  185. ; h4 f: |7 W. v
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    : n; o( \/ Z9 v9 h: N
  187. {4 ?1 S# @/ r- ~" w6 {0 C+ S
  188.      FILE *fp;
    , T" H) b& L6 p! O/ {
  189.     DWORD  attrib;8 {0 K/ O* ?9 B( v  c$ H2 d
  190.   attrib=GetFileAttributes(FileName);
    * J. X7 @0 ^5 K! |0 D2 I0 P7 w
  191.   if(attrib!=-1)
    3 O4 M) |: z) W$ d
  192.   {
    - \# L3 U" B, W
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    6 V# V9 C$ W$ @0 ]
  194.     if(!SetFileAttributes(FileName,attrib))  i9 }* y; r- T, `& f+ {0 `: V
  195.     {2 V0 t4 e6 j& _8 H
  196.       return FALSE;7 t' d: U, j' G- u
  197.     }
    + U  V3 U1 [2 E" r. I, Z
  198.   }8 w( f/ i: w0 D7 t6 U
  199.   fp=fopen(FileName,"wb");
    1 A# m0 L) j  t1 q9 v- d3 I
  200.   if(fp)
    1 p" R: [5 p! S$ g0 e
  201.   {( R' U" N) G5 [( v' z9 ^% }
  202.     fclose(fp);6 P* z, ?6 T6 l. Z" u8 w" h
  203.   }
    # B  t0 p- x0 y$ c2 Q: G
  204.   return TRUE;0 G. ]" c+ P! a/ R  @0 [
  205. }
    7 @, S) Z8 T* l. S; l2 O7 k0 Z

  206. 4 _6 _: g" P: }; S
  207. BOOL CRevAppApp::UpdateLocalVersion(void)6 j  @% u- K" D7 v0 V
  208. {
    0 |+ ?: p# r& |$ ]2 \- B, Z
  209.   char filename[MAX_PATH];/ J1 v" Q3 d+ n! e2 A' B
  210.   LPUPDATEFILE file,olds;- [( G0 e  m2 k3 G' \, I+ L
  211.   std::map<int,CString>::iterator i;
    6 X% _$ j' |- g- z2 x* S3 t9 V
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 ~  n, Z. w5 I
  213.   std::list<CString>::iterator l;
    6 n7 t& O. ?. c) r! n* v5 T
  214. ) t8 D6 ]' F1 [/ W1 ?9 W3 ?( l
  215.   if(bFirstUpdate)+ w3 ?5 X2 J& z! }, [: ~
  216.   {
    0 S5 b' R! q" _8 D
  217.     dwCurrFile=0;
    : S" I2 U, R; R/ T* J9 S% c! i
  218.     bFirstUpdate=FALSE;9 h' r0 \0 X& r7 G, y
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())' h' f: ~* P4 j  ~5 j4 R* A
  220.     {) w1 ]' o  q  t+ n6 f" O
  221.       dwTotalFiles=UpdateLocal.size();
    6 k4 O, i4 g1 E& v. _& b- z% u
  222.       dwDownLoaded=0;& c6 g5 @' a+ J5 L$ W! i
  223.       bSilentStep=FALSE;
    8 e( X* L; D4 q: V8 @: Z, V% w" o
  224.       bCompressed=TRUE;
    : r. ]! T4 [9 I# X3 l# d' a* L
  225.       strExtLocal.Empty();
    + c% b5 f- K0 W% L
  226.       strFullName=(*i).second;4 _, S% \$ J" Z0 S" e$ _/ p. ?, G
  227.       dwProgramState=AP_CONNECT;
    ' \( R4 H6 n' h! a2 x4 J6 n5 p) e# N
  228.       return TRUE;
    0 b. L0 y2 [' J3 q& Y4 X( q
  229.     }
    ) h: ~' p( G) f* `) c
  230.   }
    ' u. I- H5 n; J. B5 n
  231.   else if(bRestartUpdater==FALSE)
    / _! ^" h7 o( ~
  232.   {
    & T: |7 D4 K* a0 V6 O! s/ f
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())% o4 h; W2 l! \0 N
  234.     {9 d: a) K# i+ x! }' g
  235.       file=(*p).second;
    ; q% R+ h! e5 x0 p4 Q, f( E) c+ U
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    0 M$ M- F5 d7 }/ s; r- o
  237.       {# H% a5 y- @% G4 O% W% M; i
  238.         olds=(*p).second;
    ' z8 l  l# x) z( `# Y2 ~$ H+ I
  239.         olds->vers=file->vers;7 a; P" R( ]/ X5 Q0 n& N7 S; T! z
  240.       }/ ^2 N6 V/ X& E
  241.       else. Y5 f" Q2 l* @% f$ O* h+ l; e
  242.       {
    / q( u! L; a) y9 m# P
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / e8 Z# x. ]! u6 G+ `
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ) R- O( \/ W3 x% ?2 |% i
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));8 L- E# d* V9 N$ c; H9 e
  246.       }% T1 `1 j5 O+ Q0 \  P
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( _/ F* G1 E; X6 g* j
  248.       sprintf(filename,"(%s)",file->file);9 _0 u# n* a2 z! U# Y, s& ^
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, _. Q) @7 v! W" P! L+ c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    7 f5 N% t* O1 M0 @) @: d9 `1 b0 x
  251.     }; ^  G$ y  k" ^) I" S& x  |9 X- v
  252.     dwCurrFile++;
    + d7 l& o# q; F# I* Z# V. {
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) P5 c# U" s. n  h! E* o1 E
  254.     {
    / w/ T. u% \3 X- u4 e6 X
  255.       bSilentStep=FALSE;
    " F/ y* V6 X; X5 J6 Q/ }+ S
  256.       bCompressed=TRUE;6 ~" V( b( M7 k3 l: ]' S( O/ C
  257.       strExtLocal.Empty();* z$ G' O/ C4 U' a; b0 m
  258.       strFullName=(*i).second;
    ! b- t' I! {( B2 Y
  259.       dwProgramState=AP_CONNECT;- j6 e  P& b9 \4 S) I9 n
  260.       return TRUE;# C4 ]! Y! F" s6 i( g& k: M
  261.     }% W8 w+ c: X! c
  262.     if(!bRestartUpdater)1 M3 Y; F3 y2 T) w# r* |4 @. G
  263.     {
    8 g/ \  S* o8 q- f% G7 j! T# s3 p
  264.       int iCurrSize,iFileSize;
    & N( E" r5 Z* T  N( R# V4 x
  265.       iCurrSize=0;
      A' ]& d9 Y  {- j, U$ w
  266.       iFileSize=UpdateList2.size();- L" V" W6 Q* i5 K" c; \/ H. K
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ O( i3 G+ `% c- e9 J
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    / g# f0 e0 k" ]  [$ S7 A
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    / O. G% t3 t4 |4 J8 P) O  j# I
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. Q1 E, V' L4 K: o
  271.       Fclearf(".\\update.dat");1 A. i$ V/ P6 }0 T; i' m; _
  272.       Fprintf(".\\update.dat","Bloodyf\n");
      c6 `: w* \6 c5 x; l# s$ l3 T  f
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; i1 [5 \6 G' M2 v
  274.       {
    ; J% r6 d8 J$ P3 f  J6 ~% N4 b& i
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())3 M* d+ S- ~6 s! Z
  276.         {
    & \2 w3 Z# C1 U: n0 S" J) b* O( g
  277.           file=(*p).second;3 O/ F( h9 a2 S, m7 }1 I3 V# n
  278.           sprintf(filename,"(%s)",file->file);7 ?" S. H/ E3 `4 S3 p- |! t
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. L! C# ]: f( O& O
  280.           iCurrSize++;3 H% ]- i! _# P; B$ L! w9 q$ ?: Q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));% e5 t( o% C% r% r4 K8 x% \6 U5 B
  282.         }
    * |9 Z& R4 D9 i% j2 `2 A% L  J$ I$ U
  283.       }
    # ^$ ]+ @, n) H! k
  284.       unlink(".\\update.txt");* i1 ~# G8 L) @- q; l0 R- L
  285.       unlink(".\\update.tmp");
    7 ~6 [+ g* H1 P) k* R8 m( j
  286.       Fclearf(".\\checkversion.dat");/ ]% l. G3 r* A+ `" T
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);- _6 p, X! M* t2 {
  288.       if(UpdateLocal.size())
    ' K- U: w4 G$ `4 ]
  289.       {4 b* p* _" r  a4 b0 _" `# r
  290.         UpdateLocal.clear();* o7 J+ y6 O# B" d' p3 i' D$ ?
  291.       }
    5 y' R2 m, Q! ~8 B( w
  292.       if(UpdateFile3.size())( [' g- R- `+ u  L* W, h$ T& {" d6 r
  293.       {9 d# S- i& }; N3 S9 I) n! [
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" A" @1 Q/ `( Y' t
  295.         {
    1 P: B" Z/ C0 d+ l" R% q; W3 J* @
  296.           file=(*p).second;
    ; |, b/ [- }5 O! g" d
  297.           free(file);
    9 H5 S! T5 R9 D( D- s" R
  298.         }$ d) g9 W- U" P
  299.         UpdateFile3.clear();( e/ P: d) r/ d9 O' [4 ~" d
  300.         UpdateList3.clear();) u8 [, I' t4 b0 U& ]3 H
  301.       }
    7 a4 I# k' ]! l: C3 u
  302.       if(UpdateFile2.size())* t" O( G: A- P3 }8 I0 G3 n
  303.       {
    . P# {2 k5 M& T1 V" P% u
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . R+ T0 {1 Q0 A+ P: H6 r9 n, q7 y$ e
  305.         {: ^9 _+ G0 u+ Q5 f. S
  306.           file=(*p).second;+ A% v, Y& f0 h" ^& P" X( R
  307.           free(file);
    - @+ L9 L8 ~; M' h3 Y7 j1 e; B
  308.         }
    " L  J! m  Q, `' N
  309.         UpdateFile2.clear();
    $ s3 w  N# c8 B( Y& `# Y
  310.         UpdateList2.clear();5 K* b# M9 s2 l7 z/ r% c6 V) v
  311.       }. w9 H4 K' i; B0 p2 U3 {. l+ Y
  312.       if(UpdateFile1.size())
    4 s" U" \9 C3 q: _
  313.       {
    8 |8 q5 ?- T* M( B- N4 B$ i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 O: G) ]- t: c( t5 W9 O: y
  315.         {$ _5 Y: L4 J/ X
  316.           file=(*p).second;
    & i4 z2 ~; B8 K  ]9 z8 X% U3 M! N
  317.           free(file);# ~- a" O" E6 X; v" v6 s
  318.         }
    0 {# E; U: O4 Y5 l
  319.         UpdateFile1.clear();9 I  w6 {; }3 N2 D, f
  320.         UpdateList1.clear();4 \* Q8 _1 F' a/ P
  321.       }" Z! x6 ]) `1 c. ^' l/ {% a
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; p9 H# `: D: K2 U
  323.     }# ^8 u* L! r- D
  324.   }
    4 K; k" ~' T5 @
  325.   return FALSE;1 R% z2 L9 X" D! ^! W2 n! P* B& t1 [$ m- @
  326. }
    / A% r+ j2 R5 Q, i

  327. 1 b  a9 R/ u' f3 n+ u# c
  328. void CRevAppApp::ClearAll(void)
    ' ]5 M3 e% {  W
  329. {
    ' B' N5 x0 P! q. t
  330.   LPUPDATEFILE file;' ]9 w- g, q% ?) k0 Y% }
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! \6 C' V3 Y4 B" G5 o+ E$ X

  332. ; R2 ?6 ^8 b2 }3 w0 n" h9 ]. b
  333.   if(UpdateLocal.size())8 a! s" Y9 n' Z6 e- |
  334.   {
    7 y, p/ ]4 m) v5 j; p: E
  335.     UpdateLocal.clear();# D4 e9 Q5 t/ S
  336.   }$ \6 O3 r' c6 \& O9 |
  337.   if(UpdateFile3.size())
    . a0 g- u5 U7 e4 [1 f
  338.   {; I4 W, ~+ `" K- u) g
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 M# ^" f4 h, `8 G
  340.     {3 A5 T) H- A1 m# R  U* k
  341.       file=(*p).second;
    # ~$ I- P! V: i) D+ {7 Y7 b3 j7 |  a7 @
  342.       free(file);4 `: T- e1 f* d) V
  343.     }, q2 J* H8 |/ ]9 ^
  344.     UpdateFile3.clear();# i5 L9 V5 T. L' Y" u) o( G& S, \- S
  345.     UpdateList3.clear();% }3 l) f2 N! Q0 @: V) Q$ o: \
  346.   }& {' m# n. \' l. i; x5 |
  347.   if(UpdateFile2.size())' P  S/ T" }5 _) F" d: O+ F
  348.   {
    4 Y: `3 i+ _  B6 `( D- t- l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- n& R% f6 n& Y7 t
  350.     {
    4 Z! |' Q3 n0 R) ]2 x) ]) H6 f
  351.       file=(*p).second;
    : J* P. B4 y6 S! ?$ b# ]
  352.       free(file);1 r* c9 y0 h* R7 D- R% Y* R1 b
  353.     }6 s3 U' A  A7 ?
  354.     UpdateFile2.clear();7 `5 W# a) o! [$ e# a& k7 z+ K
  355.     UpdateList2.clear();
    3 V8 _0 U9 [# l5 |) Z
  356.   }
    * R  x& _/ V5 B$ ^8 q$ R( ^7 R
  357.   if(UpdateFile1.size()); \: M" `: f+ m7 ]9 e: K) ~
  358.   {
    ) d! v- L5 B. E) M& R* `
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 M6 {. A; H0 N0 ]! n, J0 C
  360.     {, y  ]( _. N, w5 @& C% J
  361.       file=(*p).second;
    * v1 V. T. Z: N( k2 h! E
  362.       free(file);$ q2 B; k# M; K5 H6 }/ X
  363.     }$ m! n" j* Q3 u
  364.     UpdateFile1.clear();" X- s$ l9 D. r. o
  365.     UpdateList1.clear();2 a! `; X8 S1 S9 ~( o$ g
  366.   }
    + N1 `3 T* ?( Z2 c6 t/ Z) R( T
  367. }  
    $ E; A  z9 v7 e: m8 Q% u
  368.   0 W- R* g4 M/ s- V( R: v
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    . W0 R- ?. j6 }8 B; U
  370. {# h( ]- t4 J  s: D
  371.   int c;
    : O$ l* }; n/ Y
  372.   LPUPDATEFILE file1,file2;
    & [  D5 u5 g( I5 @
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    . v0 p& s3 u3 Z4 F1 J  F5 s4 i: Z
  374.   std::list<CString>::iterator l;  {; H6 D4 S" v4 D* L
  375. ; A" r6 j" s: p5 l* v( p0 B: a
  376.   UpdateLocal.clear();% M; ~% F2 c& Y; Z$ M6 d6 Z; Z; m
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ' E5 `& b+ J8 d! w
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    4 T3 U. Y% ~! G
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);* ~- h9 F* t' M5 e4 [( A
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    1 ~9 S7 ]- |( R  r1 J
  381.   if(UpdateFile3.size())8 b5 Y# K5 x* g. r- G$ B9 ?
  382.   {
    . K& l. R  g2 N1 `1 s) v( P: g2 C
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 b, |# ^9 m3 R! c  d
  384.     {
    & X( a+ w+ c* ]0 G( z1 P0 a; K
  385.       file2=(LPUPDATEFILE)(*i).second;( j" z# V3 |, x; n, L
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ i2 N& J$ y/ [
  387.       {
    9 }4 O4 C& e+ Z
  388.         file1=(LPUPDATEFILE)(*p).second;6 y' X/ ~- ?, z  h
  389.         file1->vers=file2->vers;
    % \+ k3 \& Q+ U! s' B% u
  390.       }2 t7 z" g* h) G3 T
  391.       else# ?) _4 B0 n7 Y# y% S+ i! J9 R/ K
  392.       {9 ?+ |% M3 @) t8 q4 p7 U
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . k4 _% D8 n8 x: G; m
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    # m. \$ n8 I4 V- I, j
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ' C/ y% R$ T2 d6 B
  396.       }
    1 V+ z" ^$ C1 J" [
  397.     }
    % }0 J, J8 r7 j: t
  398.   }
    ( G6 @: x6 b& y" T' @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 ^% k4 i# k% ~  L* |# S
  400.   {0 F/ w" @7 {$ H1 C+ {
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    0 Z1 J. \: ^! G- U8 k
  402.     {
      p: D) n; ~- x0 {6 D/ U* w
  403.       file2=(LPUPDATEFILE)(*i).second;+ q: L6 T3 m5 u( v
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())2 s* e, l! x% T- U  a
  405.       {: T: x& i0 I( \. r7 I. @5 r
  406.         file1=(LPUPDATEFILE)(*p).second;
    / B7 f5 G& O7 _" g0 T1 F
  407.         if(file1->vers!=file2->vers)1 z6 {! o0 N4 k* @% |4 C
  408.         {9 u& e4 d9 J5 {2 q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; ^( R- Y, Q  H+ n5 [* a
  410.           c++;
    % H  C6 |8 z0 U
  411.         }
    ' A" C* R4 E5 q2 N, Z5 S' E8 O
  412.       }2 h; o% n. P4 y% {: g3 v
  413.       else4 w9 _$ r9 @) i2 m
  414.       {
    7 m1 S. h% j: [# u5 y  z7 }
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 Q. G% d% X4 D3 f* l3 H+ `4 {. M0 a
  416.         c++;7 _& `0 N. I, n8 t% `
  417.       }
    ' S. _" s6 d% N# j: p2 F
  418.     }
    5 i# R6 ]0 Z1 S( e' N
  419.   }
    6 f9 G* b1 H# f9 P# |& b7 b
  420.   unlink(".\\DownLoad\\update.txt");* U5 B. x: _* E7 j+ E( W0 Q2 o
  421.   if(UpdateLocal.size()) return TRUE;
    : e- Y/ P5 A  |1 C
  422.   else                   return FALSE;4 O9 M" p5 y. ~5 C! `% |) k- H" `
  423. }$ w7 q7 }6 m, L
  424. ' N. ]7 F* M/ l. f- R& Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    2 g4 A6 X; {) e% k, r
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"3 l: {! Z, ~  ~( f8 ?
  427. 9 w, R9 `' x0 C7 S0 c% j% l, g

  428. ; F" K# g6 f7 y) {/ n
  429. + H$ L' u1 U) n  p# b' l  E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)  ]+ v4 N# J$ c) [( c2 V
  431. {4 C) P& ^1 V7 G' _  m2 |
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;) h# h2 `$ _$ V) r# l3 f
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * t# [" R+ |" R% j+ L* r
  434.   {
    # A+ ^% h: ]; w9 a$ C! i9 O) b
  435.     char szLanguage[50];
    3 K" G1 G  Y8 ]# V8 ]
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 s3 h" t/ l, P5 L
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & A5 U/ K2 _5 L0 M4 X1 H+ b
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) g# m! K5 N- ]* ?3 ^
  439.     else                                   m_iLanguage=ENGLISH;) T1 e( _. j  `- `+ `) u; w" s
  440.     char szRegister[100];) P. [5 Z0 V. z$ q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) w) R* a! X1 E/ Y( P& Q6 {3 K3 `2 e, |
  442.     strRegsName=szRegister;) p' J5 \7 U0 g$ j  ]; g8 ^! w. t
  443.     char szPatchURL[100];6 L7 ~5 {, v7 y  I. a9 ?4 t
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- L) A' O6 Z$ e& c* X0 [# r: ], |0 C
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 X! c# t, e' e: c4 x3 \/ _7 \
  446.   }
    : m# z  j$ p8 M2 n  U: E( P
  447.   else3 ^* D+ d6 `, n' p# p' T7 t
  448.   {, U2 X# \7 V/ B# G" v+ s
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' E/ y* \4 Q1 j/ G* ^
  450.     strRegsName=DEFAULT_REG_URL;
    . i% ]( \. [0 |4 u$ Q
  451.   }
    ( y7 i4 }0 N2 t) D! Y$ O* m
  452.   if(GetFileAttributes("hosts.ini")!=-1)) v* _$ T2 E4 z" X
  453.   {
    / X, V# v( U3 v! t0 |4 \, y# a: F
  454.     char szIP[50];& k! b3 R& B, U" w( \( X
  455.     char szDIR[300];
    7 E+ \7 s; B# ^. y
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ! [: ]" l+ ~0 i# T% l
  457.     {
    ; p" f2 ]  I5 x  [* C8 A0 V7 H
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & X3 b5 k4 R* M3 ^
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: S% s, O  v7 h$ d$ q3 @
  460.       strHostName=szIP;* I$ a5 V" R6 |7 m: l" f
  461.       strHostPath.Format("/%s",szDIR);( Z* A2 u1 ?. H9 @/ S$ _3 `* S# ]
  462.     }. H! K% P+ R" Y3 }
  463.     else
    + I1 `; [% d- Q- S* v4 b% G
  464.     {
    / @7 E4 o5 J7 S$ u
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - @! j# e" L1 y1 R9 W$ f- J
  466.       {
    % D8 }, u1 [. H# n
  467.         char szLanguage[50];7 i* f, ~* ~, `- O* _
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 s% F  P( ]+ }0 G( B2 k
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 M) k/ U7 q, @# O" I
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 D+ O8 F, e2 ~
  471.         else                                   m_iLanguage=ENGLISH;' L' K! |( V; \& y) t' X, K
  472.         char szRegister[100];$ v5 g0 p; N# g2 h: s$ u
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 F' w. s) \. c- Q$ C% ~
  474.         strRegsName=szRegister;
    0 s8 R" S; s9 _3 j# m/ l
  475.         char szPatchURL[100];5 W; F% G# l1 W6 a( V' q
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# l# s- w+ ^2 c3 P9 a
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 Q5 a* }/ k1 T4 F8 ^8 O
  478.       }
    3 J& l* l4 j2 A2 X
  479.       else
      C6 @8 t7 q5 a
  480.       {- Y3 @& ~8 @. u* ?+ Q$ h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ S4 ~: G2 v1 Y
  482.         strRegsName=DEFAULT_REG_URL;
    & q0 A5 D1 A2 t$ H" G% H
  483.       }; }  l0 C) k, J" G
  484.     }; U! U5 T2 C7 ^
  485.   }0 U8 F+ I! v9 q2 V; I
  486.   return true;- M+ [4 C5 o# x3 A- `/ l
  487. }
    , F, F& a. `) B
  488. : J% s4 Y* i6 z$ Z& n5 ?2 z- A- b7 W
  489. #include ".\ZLib\unzip.h"! \) C1 W% X( R; ?* Y, [) y! ]2 m! Y
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 O) `& A, v4 M6 H
  491. /////////////////////////////////////////////////////////////////////////////
    - g/ D3 z4 t5 E5 u1 g8 I
  492. // CRevAppApp initialization
    $ H" `* h1 `, q
  493. 1 R+ H9 l& l: [# s- y# v
  494. BOOL CRevAppApp::InitInstance()
    8 u( h6 ?" E( K& c7 |% L% H
  495. {5 ?8 `6 U# x3 }6 x
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];7 d6 [9 o* @- S0 C) F: ]9 }

  497. 6 U( F8 o( s1 b. @! b
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    : l' M3 l8 `9 u, _1 \# ^
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)); B* N) u' c) [$ D
  500.   {
    / F/ b+ [0 Z% n8 Z1 U
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    / P- M. A& B& Q
  502.     GetPathFromFullPath(szPathTarget,szPathSource);' j& k+ [. y: e9 _% H  \/ n4 X  C
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))2 W+ o) n9 {. G" E7 D( ]/ o
  504.     {6 e6 G& T/ Y9 G4 O
  505.       strcpy(szPath,szPathTarget);
    3 G5 G2 Z9 E/ s( @2 i% o
  506.       SetCurrentDirectory(szPath);
    : H9 A+ p# b- X4 R  Y
  507.     }" H3 U& S( F9 d, K' A; p
  508.   }
    , w0 N8 X, b' G6 [+ |( B( k$ ]0 y, h
  509. #ifdef _DEBUG
    2 C# l. H% Q2 d
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( q. ~6 ?: {/ P! {
  511. #else
    * Y; }8 J( p( \0 Z9 m
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))# K  ~/ j" w6 t! e* ~
  513. #endif" j2 L/ z  e0 ?/ }& ?0 A
  514.   {
    ! v4 s3 r; E: D2 k3 P( g% d
  515.     char tempFileName[MAX_PATH];1 H! R7 z6 k1 j  P- ]
  516.     strcpy(tempFileName,szPathSource);
    5 t+ \+ D  ^' r) E: m/ R. Z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    / ]  ~* r0 _6 v' e' n( h
  518.     strcat(tempFileName,"\\$CSUpdate.exe");4 Z* k6 L, j' b9 Z1 n; }
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    # y. {; J8 z3 W  f: i
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    7 {9 t& I0 i( e1 u* X" N7 M
  521.     return TRUE;% d: _" ^, Z/ t$ m4 s' w
  522.   }# w( `: r7 l- A% G9 _2 Z
  523.   // Nuke 0118: Delete run.exe
    1 T( f& a. p" u  k+ G
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );6 K0 R  ?! U6 ?0 X
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ' R, E8 t) }3 K( V  h' G' ?
  526.   if(!ReadCfgFile("Config.ini"))
    9 N* z& X) x# h$ J) x0 D
  527.   {
    + e2 p- l3 x3 P& t' Y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);" B) X0 H9 g- f4 f6 G" i6 @! i
  529.     return TRUE;
    8 @& {6 ?# ?: P8 l' B
  530.   }0 y/ H- _; @7 f3 L
  531.   HANDLE mutex;9 W$ [: b1 U% G# w) E. Q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 T1 C# C1 U7 H' ^+ j2 z  u
  533.   {; ^* I2 v8 t: _0 z, B" F& a: i
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)! z0 |4 }$ Y6 r0 U3 M( E9 ]7 ?, Y
  535.     {5 {' V) E$ [8 A, z6 `  P9 f! X- o! q1 [
  536.       CloseHandle(mutex);
    8 \9 S) p+ n* u  t
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    / u$ p8 S% p! ]1 X  E3 ^
  538.       return TRUE;
    2 W, N. f9 d% T! G
  539.     }( p4 a6 j2 v5 Q5 e1 I: y- I( \; B
  540.   }  8 W9 b% a2 {: E
  541.   CloseHandle(mutex);
    + W; t7 U: t# Y- |

  542. + b+ V* S7 N! x" O. S
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ! R1 Q5 Y0 Q* y  v# v( e3 }

  544.   K% U4 V* Q2 a% e/ O8 T; F
  545.         AfxEnableControlContainer();  |. i% \# F+ ?* q+ a) O' o

  546. % e, Q) D) C( A' u& t# s
  547.   bCanUpdate=FALSE;1 p* w% u2 q/ g$ K+ D
  548.   dwStartUpSteps=1;
    $ p" d6 J3 e# g8 w" Y/ ?" P( N
  549.   dwProgramState=AP_NOTHING;$ q! W7 _4 v/ o0 T2 L; `& v

  550. # C8 Q: [; |; P) L' J
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" s: E0 }- s+ K

  552. & z, [) |6 ^0 L1 _( Z0 @
  553.         // Standard initialization
    2 N; T  o8 z  [; s) y& H
  554.         // If you are not using these features and wish to reduce the size
    9 \* W# u$ p" A! q) s
  555.         //  of your final executable, you should remove from the following  ?7 N$ k0 g; s7 s. N( J3 q
  556.         //  the specific initialization routines you do not need.- [: T- t' z+ ~4 M
  557. + l1 j- a% B' n. ^  S+ M* b
  558. #ifdef _AFXDLL
    5 m5 T* d( `9 ?2 \) g5 D% V  x- c0 d
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    1 _; O& k9 [# h0 g2 x
  560. #else" T8 @- o* S$ @, S
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    # W4 C1 u' w6 L' `
  562. #endif# c8 ^0 V2 H9 z
  563. ( ?0 `  S# m6 R% d9 T
  564.   dlg=new CRevAppDlg;
    * q. D, ], y; V; |  a" y( \
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 K! Z. `0 r, Y* \* o, F- h1 @
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ( N3 t3 h! s2 g. U
  567.   m_pMainWnd=dlg;
    # _" I  c2 n0 h" f% l. o, F

  568. ! V1 j8 E* o! A! T# O
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * @  o% u$ c# O5 p  Q- l! R2 O- d

  570. 9 X5 y3 U" ?7 O0 U
  571. //  GdiplusStartupInput gdiplusStartupInput;
    8 m% n! ?$ }; _* ~# J& |  Q: c9 B
  572. //  ULONG_PTR gdiplusToken;
    ! c# J# Q! [9 T5 A
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);" H1 y3 y4 p7 e* m

  574. . a' K2 |; B, ?) z+ q+ r
  575. //        CRevAppDlg dlg;0 A, F$ H; _: ~( K7 x
  576. //        int nResponse = dlg.DoModal();
    + ]8 e) O8 ~* V5 z$ c* `, q
  577. //        if (nResponse == IDOK)
    ) p: I6 A% r3 c6 [/ x9 I" M1 P% W( j
  578. //        {
      k) R4 t- J6 [) p+ K
  579. //                // TODO: Place code here to handle when the dialog is
    0 I) [9 t: ^+ _$ K: q
  580. //                //  dismissed with OK
    - n0 S3 ?3 O2 {' B) R
  581. //        }0 \; r1 ?$ \5 k
  582. //        else if (nResponse == IDCANCEL)
    + f- p+ X2 D. i0 p, m
  583. //        {( }, Y8 l/ n  A1 Z2 E
  584. //                // TODO: Place code here to handle when the dialog is6 ?) Y$ n" }3 Z- T4 P
  585. //                //  dismissed with Cancel' v3 i! @/ H1 a/ c! |3 K: a/ v
  586. //        }# p8 i+ g5 e5 s: l

  587. * Z, d" U7 i* h' `' H
  588.         // Since the dialog has been closed, return FALSE so that we exit the- m/ b" w3 l8 b9 f1 |3 }! ]) I
  589.         //  application, rather than start the application's message pump./ a$ {6 Z7 a! f: n( l
  590.         return TRUE;
      P+ j" ^) x8 C) u/ k, a
  591. }, a$ K! I6 N! D/ m% f! ]% L

  592. 1 H, P( F1 P1 h
  593. char *CRevAppApp::strtok3(char *pSource,char *token)! c: o" t2 i8 Y/ j
  594. {6 ~3 \" s# M* ?+ {/ u
  595.   int i;8 p3 c, |3 \. ^  e5 `
  596.   char *szRet;
    : q# o3 ~: H( ]& f) I; \
  597. " F/ u7 b1 T) p: v/ I
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    1 `7 V( N2 b" f$ G1 [
  599.   if(sztoken); s4 v. b' h' M  N& D1 C' M
  600.   {1 k' i/ P; p2 B( w- }( Q7 ?
  601.     szRet=&sztoken[itoken];
    / T/ U. d5 W6 B3 O( J# [/ y
  602.     while(sztoken[itoken])$ c" F: D; {( C- x
  603.     {3 M8 r" {3 }. ^. Q1 {  l" l
  604.       for(i=0;i<(int)strlen(token);i++)2 k, C( [) N- `: G  f( @9 ]
  605.       {5 Z% a- f4 W0 w- i/ U; c& _+ m2 N
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])$ L: C% T: l; e$ e8 s5 O* s
  607.         {; M5 [) x3 W+ a& g7 z( b
  608.           sztoken[itoken++]=0;9 f) g5 P' {1 _+ F
  609.           sztoken[itoken++]=0;
    & Q6 }3 V+ q" f( ~7 |7 j& \4 ^# o
  610.           return szRet;/ f* A2 d4 p! n! K, D9 d8 J; q
  611.         }
    7 T& r. s9 g. k' \& y
  612.       }6 ]( z$ ~5 g4 D1 _
  613.       itoken++;4 h% y* r, m- d/ V
  614.     }; d& R  z8 ^5 F" X- y
  615.   }1 c6 }/ I0 m5 ^
  616.   return NULL;
    2 s, k5 P4 ^+ @
  617. }
    . J- z3 {2 s6 b7 B

  618. 5 S3 w% d8 u# N# _; B
  619. void ProcessProc(long Total,long Current)
    ; W6 u: Q, ^7 O! k- i2 H
  620. {9 r, i- _7 Z9 x, h+ ]  j7 Z
  621.         MSG msg;  a0 \" s/ E  f
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    % q% P! ~9 v) {1 B/ H& i2 z- L" X
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));- ?' R2 k8 Q/ x
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    & A( J' y. U4 o1 K) p4 K
  625.         {5 d# `' j* F( l" n
  626.                 if(!GetMessage(&msg,NULL,0,0))
    0 C! C4 g; P, B* f3 N
  627.                 {: i7 I. P0 P/ s. G1 ~1 W" o& |
  628.                         return;7 I$ D+ S0 R% S  Y0 ~
  629.                 }
    , A% |" H7 n3 r/ T/ ?+ ]
  630.                 TranslateMessage(&msg);9 m. o) {+ x  d$ L) `% ~2 s( P7 v
  631.                 DispatchMessage(&msg);4 X8 I$ l5 Z0 ~" L- i
  632.         }       
    6 R7 }- x" B% }% Q& s( P3 ~/ c
  633. }
    . o2 W' [% C3 [  y: y3 j& N5 i; P
  634. , @9 v9 @) `8 e$ O8 N7 u
  635. BOOL bFirstChar=TRUE;
    % j. `/ p" W) W

  636. 8 E9 \& ~: l$ J' v
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ( u; O3 B4 l2 P- {0 G
  638. {
    3 t$ g  b5 z2 g/ A
  639.         // TODO: Add your specialized code here and/or call the base class$ j, Y- q9 D3 M! y: n& E- r4 r
  640.   switch(dwProgramState)' o4 I* m7 A$ m7 L. E$ j
  641.   {! F- u; J: Z* A
  642.   case AP_NOTHING:# q1 Z  i- l# |
  643.     switch(dwStartUpSteps)
    7 ^: G* s+ ]" O  S' s
  644.     {5 M" I* @$ R# D3 j; E# Z% L( h
  645.     case 1:' O/ B* s- h. o2 t* w* l! h
  646.       {, b4 L" {2 X4 M2 o3 I
  647.         int i;
    * r' A$ e2 V  ?  K
  648.         CDC *pCDC=dlg->GetDC();
    / I& d/ K; D6 V  C9 S& c
  649.         HDC hdcwnd=pCDC->m_hDC;: u/ K% ^" ]; I
  650. //        Graphics graphics(hdcwnd);6 T7 M' F0 Z8 ~  X! s- A
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");- l$ L) ]6 L% F$ k" d$ {, T
  652. //        INT iWidth=bitmap.GetWidth();
    7 ^, L3 Q8 T2 [! S
  653. //        INT iHeight=bitmap.GetHeight();
    $ e0 m2 x( v2 M- R- I- z# n
  654. //        Color color,colorTemp;
    ' P: L2 A- [: `7 Q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . p- m5 p7 }% t4 X$ H8 l/ x
  656. //        {2 z2 f8 @4 q6 x/ A0 d" S
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    5 z: ]( U8 k" r0 i4 N9 u
  658. //          {
    5 N2 J) v9 H8 z6 S" f
  659. //            bitmap.GetPixel(iColumn,iRow,&color);* R9 y5 w( }; U1 B3 @
  660. //            colorTemp.SetValue(color.MakeARGB(
    2 ]5 i( M, r4 E0 }4 B) w
  661. //              (BYTE)(255*iColumn/iWidth),: N; G' u  L$ p, F. [! k
  662. //              color.GetRed(),! ~4 k1 S" ~0 m6 c
  663. //              color.GetGreen(),
    ; }6 l2 _' r  ~. {
  664. //              color.GetBlue()));# Q/ m3 _& c; m8 M% x; d6 X
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    - m% e9 P/ p! d( l+ x) b
  666. //          }* g4 g9 m& K3 P8 X0 ]2 a
  667. //        }4 k) E9 J: J8 {+ X- u* B
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    , C4 j6 z/ I9 f& e  ]; k; O
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 p- \$ _0 N# k
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 H8 q9 v; N& t' ]1 M5 y3 f1 c$ t
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( T% E! _$ E, k3 x5 c
  672.         for(i=0;i<240;i+=8)& k9 @! ?& E. f8 ]' t0 j: {8 k
  673.         {" w: c6 A( i1 b- v# a, u# M/ `0 B
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; n! T7 [7 b+ l, a$ C( h6 q9 h
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" J3 ^: L( G- ^6 g
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 D% {) I3 V" C
  677.           Sleep(33);, N% _: T1 c5 _/ \5 ~8 s6 e
  678.         }
    0 Q# L$ n4 v1 m% B/ m' k
  679.         Sleep(1000);
    7 b* [7 r  `1 c( V: b3 H
  680.         for(i=240;i>0;i-=8)
    7 c  s; a) e' w! ~) s! I' }
  681.         {  ^9 x& s* Q( ^' d' n" t; m
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ d% R" _$ Z4 \" O" d4 j. N7 X2 T
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 r4 k7 ]6 D# B5 r. Y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);, w7 k6 ^8 @' U8 J/ D
  685.           Sleep(33);
    - f/ P" ]. m( P. ~
  686.         }
    ! r' X- k7 R, U" L# f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);3 W# z9 H# l6 k2 z
  688.         dlg->ReleaseDC(pCDC);$ m" Y! }8 e0 u* w8 @/ E5 I
  689.         DeleteDC(hdctar);, B" o/ R# P+ e
  690.         DeleteDC(hdcsrc);: }' d4 @6 U: z8 H8 [" U2 @
  691.         DeleteDC(hdcorg);$ o' P+ _( l% U9 U0 s( [- w
  692.       }& P# v6 {: E. O) J8 @
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 \: @0 G/ L1 Q* C
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");7 l5 o2 ?  ]2 P, e0 Y" w
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
      q' F& V  d- j8 b) P
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 M1 T( K3 O; p. f& V2 q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, O+ _2 @1 L4 R" C; y; }
  698.       if(!Dn.Connected())
    5 K7 g$ W: r  W% D  p+ p% ?8 ?3 g
  699.       {
    $ _! l7 j9 Q, C* S- D6 B
  700.         dwTotalFiles=1;+ ~& c% X- s0 ^. V  G9 @
  701.         dwDownLoaded=0;
    5 ?) E* S  z# F3 o
  702.         bSilentStep=TRUE;
    : M& x- ^7 [8 w  L, \9 r
  703.         bCompressed=FALSE;
    5 p; l- l, a) O1 m. F  K( Z
  704.         strExtLocal.Empty();, w9 z% U. y/ Y* y+ A  L" g* Z; w
  705.         strFullName="readme.txt";3 v( G3 T2 Y' }# ]; S: |% f
  706.         dwProgramState=AP_CONNECT;
    # a, K% B3 s+ O
  707.       }
    7 Q, y. T5 H  x, @: y% Z3 ^. F% A5 G
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    . b- {5 S& w1 ~# z- p" R  G. X8 g
  709.       dwStartUpSteps=2;' K; n. m. T+ d9 H
  710.       break;
    $ Q! S' I2 O( Q, t! e: X
  711.     case 2:5 J1 u0 Y! Y  m  h+ ?* a' a
  712.       {
    9 ]' |7 ?9 P9 x* j: c
  713.         int iEOF;
    + ?+ r8 M. H3 B) \, b5 C
  714.         FILE *fp;' g9 K" X$ b! E. E
  715.         char szString[512];3 ?/ E# H/ G" r, i1 T6 P
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");5 n2 H" O8 L! D  K6 m
  717.         if(fp)9 d' q8 z) P0 T( p
  718.         {
    7 i/ p& A* ]. i! _. [
  719.           do
    , V+ c1 F& u' w9 v
  720.           {
    - i0 `; ~3 m/ q
  721.             iEOF=fscanf(fp,"%s",szString);+ ]/ \( v0 ^0 Z( A1 D, S
  722.             if(strlen(szString))
    4 _3 s* B6 N7 ^! N! q/ F
  723.             {
    # t3 w8 J  v" H) ~
  724.               if(bFirstChar)) K8 k4 p+ k/ T, G6 Y; o4 e5 f
  725.               {
    3 c1 ~- P; A+ `# U) k+ p; e
  726.                 bFirstChar=FALSE;
    7 D6 k& t  {, U& s
  727.                 bConnectIsBig5=FALSE;
    1 |( l3 L7 ^! `, s1 l
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    1 G: u2 ~) t# |2 E  O
  729.               }7 }7 n3 ?0 @+ ]- I+ Q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    $ Q* j  w( t, Q6 Y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ! F4 Y- m/ ~/ `, W
  732.               dlg->m_ListText.AddString(szString);, B! K. _4 u* d. M8 i
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, ?1 x6 \* n2 ~2 P
  734.               *szString=0;' g/ t; q% V# U5 Q- u
  735.             }! S: R' t" |$ O2 x6 g" Q
  736.           } while(iEOF!=EOF);
    9 A. [7 n" G" x) y
  737.           fclose(fp);
    * V2 b/ W4 P1 u0 ^" M3 d( d2 N
  738.           unlink(".\\DownLoad\\readme.txt");# f( t* r4 B7 m4 U9 R. d3 K
  739.           dwStartUpSteps=3;* O- L7 d/ g1 V  c$ D
  740.         }% K" @  z4 `$ j6 j+ |1 _
  741.       }8 c6 q/ f9 E* I! g( H" x
  742.       break;" o6 @0 a) e$ H& g3 P$ H0 f
  743.     case 3:
    ; u; |0 A, p9 Z1 ?# ?& _; U
  744.       if(!Dn.Connected())
    * l; b4 A( ]* ]: P' Q
  745.       {' C* G5 o" o3 m" `% s" n/ l
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    # k% d4 L0 C* ~. r
  747.         dwTotalFiles=1;6 [% n) `: P- v; ^, k  e
  748.         dwDownLoaded=0;/ i/ x$ s8 ~# o$ c/ E& {+ @  d
  749.         bSilentStep=TRUE;7 n; B( u& o5 d( [7 x& E
  750.         bCompressed=FALSE;
    ( o0 X  L3 ^* y* |7 q- I' n3 h4 [" B
  751.         strExtLocal.Empty();
    ! Z& H) J" a. y
  752.         strFullName="checkversion.txt";4 A9 w/ ^  [! [( W  R8 W
  753.         dwProgramState=AP_CONNECT;
    % w. Z1 [9 g5 i* Q  v3 S( t
  754.       }7 W, N, I- U6 o! ^' B/ R( ?
  755.       dwStartUpSteps=4;
    2 ?& D0 {  q' q- n* c' z; p
  756.       break;
    : r. B" B5 k9 ]/ |  I2 w
  757.     case 4:
    : \8 N+ w0 d8 w( E# {. L2 Q! G
  758.       {
    % l" x1 ]. d7 D9 k6 j) {  R
  759.         FILE *fp;
    + w8 K1 e+ o  z3 o1 M
  760.         char szString1[128];7 K" N0 W0 s& k$ k
  761.         char szString2[128];+ L) e2 W* ^' }5 o: X# x
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");9 T- C: q( Z: _# D9 P; s
  763.         if(fp)
    9 f: c, J+ F3 d# h. D  X: q6 X1 o
  764.         {2 O# e9 r4 x0 C
  765.           fscanf(fp,"%s",szString1);! v+ a$ |% f* o, A0 [$ P* J2 Q
  766.           fclose(fp);4 C. J3 W/ E" y, Z
  767.           fCheckVersion=atof(szString1);
    - S8 {2 _5 a- z( y! E
  768.           fp=fopen(".\\checkversion.dat","r");+ ~9 S  \6 F. M+ r2 Q
  769.           if(fp)# `) B& Q* w  s8 M$ k$ M
  770.           {9 P9 z( z: \# U2 b9 b+ t
  771.             fscanf(fp,"%s",szString2);# W9 |# U5 l( Z' \
  772.             fclose(fp);
    8 d& {. ]" J( i! `+ Q2 ]8 w
  773.             if(atof(szString1)!=atof(szString2))
    ! M3 W3 c; F5 t- W/ s2 T8 c
  774.             {
    " k0 W( k  B3 r6 d( [
  775.               if(!Dn.Connected()), g, m# d8 R9 N5 g% a+ b  Y
  776.               {
    4 F4 C2 f5 ^0 p) P
  777.                 bFirstUpdate=TRUE;
    ( V6 U- I+ s  @. a% U2 b/ U* T
  778.                 dwTotalFiles=1;# T$ y/ {$ c( f' L% }
  779.                 dwDownLoaded=0;& A3 _+ _9 Y! S
  780.                 bSilentStep=FALSE;
    0 X( F5 p& S8 R8 M
  781.                 bCompressed=TRUE;
    : \6 {+ I& J8 P: t1 f
  782.                 strExtLocal=".\\DownLoad\";
    . f* p0 G+ K2 ]  `# l+ a
  783.                 strFullName="update.txt";
    0 \+ X6 U% ]# X: X: o
  784.                 dwProgramState=AP_CONNECT;
    $ k; y/ ~0 E! w7 A
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 o% G  i6 x. a( H$ a
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ e* Q  H7 `/ C5 y  {
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 n9 D5 I; b$ K/ W9 m
  788. % ^0 J( D( b5 \7 j
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' A9 M8 |5 c% ~+ E4 B6 [! `
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    , ~( ]# h2 G; j$ a2 h  n
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)4 H4 j" g; b& F; R; _
  792.                 {
    ) z9 L4 P: t$ I! S' o
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    + @1 j: |7 Q5 D/ ~% `
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    9 y; j) }$ I  j# W& r
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % ~/ F" c. C  s  T' o2 F* V4 W
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # O, p- j, l" w6 E8 Q
  797. 5 X- D. v, B6 W$ F; M0 g
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 B6 Z; v- N. D+ k
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 n9 J# w8 t: Q$ b
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");" K, ]7 z0 u3 R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 U* ], u6 O0 y
  802.                 }
    ; w7 |6 A1 u+ o3 A: x
  803.                 dwStartUpSteps=5;7 r- x& n& ]0 V/ l: ^' r
  804.               }
    / U) X, Q! o( U4 k6 x
  805.             }7 w3 t- y& x( F6 T$ ?/ [' W; x
  806.             else
    3 n5 Y) q; X2 d& _3 r, W$ r) u9 U
  807.             {9 D, b# H# W' d: Y. u2 Z8 c' I
  808.               unlink(".\\DownLoad\\checkversion.txt");4 R; k/ X4 K2 F8 J. V( [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 m  ?# U0 B+ ~  E7 S3 {& w
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    . t/ C% R7 W. l1 z! |
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");- Z' I- T1 V2 R/ r3 |% Z, V  M1 T
  812. 4 K, E3 |4 Y4 |6 q" R" R) y& ?& u
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 x6 A9 a) z3 ^/ k
  814.               dwStartUpSteps=99;) T0 ?5 c- W4 K  h0 ~
  815.               bFinishUpdated=TRUE;. M/ d7 B  F8 T6 U) f
  816.               bCanUpdate=TRUE;
    . B9 k4 H1 d9 J! ]0 d* |' Y
  817.             }; M6 _+ K0 T+ Y& A7 u
  818.           }
    5 D# c5 r' i* K, N
  819.           else
    1 t- |' M8 S# O$ @
  820.           {
    3 J3 L2 @2 f  A: f8 I- h% u
  821.             if(!Dn.Connected())
      Q' }' p: W! g1 ?; E9 i2 s
  822.             {: x! X) m$ U* y+ _8 Z4 p
  823.               bFirstUpdate=TRUE;' P$ _3 ~7 d3 P8 o* A
  824.               dwTotalFiles=1;, [" O5 Q6 d0 M1 [
  825.               dwDownLoaded=0;
    % X& ~- L, g8 A/ R+ f- Q; b
  826.               bSilentStep=FALSE;0 F6 L' a9 o% l: T
  827.               bCompressed=TRUE;
    1 r# M, |, F# y- u& C" W- z# P
  828.               strExtLocal=".\\DownLoad\";8 `5 m6 q, k" X4 K
  829.               strFullName="update.txt";5 r4 `( @4 u" s+ H# }9 o
  830.               dwProgramState=AP_CONNECT;" J, b6 s- y+ E+ q8 Y
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 B: o: Y5 d. J5 _- G, l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 ?7 O: i) h1 U1 Y5 w5 g
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 Z2 E% S% @" g5 N# d  U9 F
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # Z* Y8 l4 v) d
  835.               unlink(".\\DownLoad\\checkversion.txt");8 H& _" c: m0 f: [
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    # J( s9 c0 _# r$ s7 P4 d
  837.               {! h& Z0 h; G7 @
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 @: B; K" f' H4 _( |/ V; J7 J
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    & j/ D+ f: d9 R; T- r+ H
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
      D8 U; ~- D$ ?
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 t  Y: B3 I( w8 J6 o
  842.                
    ( `" W% K( }2 |) y% n; \/ M
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ ?* ^4 r% @% O8 G% I
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! @% s; W: P9 ^4 g$ O7 {
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");+ E' q% C1 m6 P; ]
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . }, R  v3 K% f4 N* S; x2 ~
  847.               }
    * h! R8 r# C. @1 g: b( R, l9 o4 X5 ~
  848.               dwStartUpSteps=5;  W- v$ n/ U4 h6 U7 I% b3 G- ?: ~; E
  849.             }
    9 ~2 \& K, M0 r# O0 Y0 k
  850.           }6 _& j. U" S7 i9 K
  851.         }6 v3 K/ B* x, r+ I
  852.         else
    5 N- U5 N9 q4 |' z1 b' J, z
  853.         {
    * H9 Z9 ]3 x3 q3 p& M  i
  854.           dwStartUpSteps=3;
    + O; h7 Y8 h2 C+ p/ N8 t/ ^
  855.         }
    $ T& X# {5 \, V9 `
  856.       }
    - O& L" l1 Q( H0 k$ k1 f
  857.       break;
    ( O& A% B6 i4 @
  858.     case 5:
    ! Z5 P* ~- \; ]8 b' V* A
  859.       {; u' f6 d6 F2 N' u& F/ Y3 n
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); ]9 s8 c# i# }1 Z: I
  861.         {
    / e" Y5 f( A5 D7 x  Z
  862.           int opt_overwrite=1;9 ^" s# R+ Q; A8 I* n: X
  863.           int opt_do_extract_withoutpath=0;
    9 F8 }" q6 M4 S0 W
  864.           unzFile uf=NULL;
    . a- E) H4 I9 q* [$ S" E5 P

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

9 S0 Y4 `0 y- u1 ^  b5 \1 ?; P2 m1 M* j7 V8 P0 S1 ^- B

評分

參與人數 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-7-13 00:38

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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