CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
# @' A/ }/ {* N7 c
  1. / RevApp.cpp : Defines the class behaviors for the application.+ H% M0 v5 i5 z5 T
  2. //" _" @% @5 X& q
  3. 1 \/ D' U- n; `5 h2 b  v- f% p
  4. #include "stdafx.h"2 m. G9 b/ n0 F% K8 U( I
  5. , h0 O; r$ Q, q8 X
  6. //#define UNICODE
    , @6 ]0 T! q" L; ^/ [; a3 M
  7. //#include <gdiplus.h>
    ) L. O. l2 D& \- J1 `7 p5 }6 N* b
  8. //using namespace Gdiplus;
    7 _% Y; o8 b6 W1 [

  9. 7 {1 Q8 N4 s8 Z, c1 Z
  10. #include "RevApp.h"  ~) p; _) C5 U# \5 p+ G
  11. #include "RevAppDlg.h"% x& j1 [4 Y7 L- M# R4 h8 w

  12. 0 X. u: V% J0 f$ x3 u
  13. #pragma warning(disable:4786)
    ( d" ]8 T3 _- [" q) @4 ^  X! N3 o$ [
  14. #include <map>9 L1 `" p' P: F
  15. #include <list>
    " L" X7 H7 X( X
  16. #include <direct.h>
    - u, g/ e: b3 Z# T, ~
  17. 9 }* U) z- g' K8 y& f( H
  18. #ifdef _DEBUG
    " R8 ~/ H5 u' p, t8 R  |
  19. #define new DEBUG_NEW
    8 S& p& O# ^' F/ E+ g$ x
  20. #undef THIS_FILE
    , o, T9 t/ T2 L+ _
  21. static char THIS_FILE[] = __FILE__;) E9 }5 p# Q! r  ^% C5 m: n. L
  22. #endif
    " N" B- k, x8 n* C( s. ?
  23. #include "SkinResDef.h": }, d8 k! o2 E
  24. #include "ChangeBG.h"
    5 V! I5 M( ?7 F% W
  25. #include "AFXINET.H"
    ! D4 w1 a( t+ E2 g$ ~
  26.   m# l& ~9 X6 u; H8 {: `  e2 [& p
  27. #define TRADITIONAL_CHINESE 0- i! ?  k" z6 W4 ^
  28. #define SIMPLIFY_CHINESE 1
    2 O" f/ L$ ^2 Z$ @
  29. #define ENGLISH 2+ {+ }+ u& W/ {+ h. d' Y5 u
  30. int m_iLanguage = ENGLISH;
    8 I- L, [, e' p, a
  31. /////////////////////////////////////////////////////////////////////////////6 P" A( z) S8 l8 [
  32. // CRevAppApp& d. _/ U1 t) k+ [
  33. 2 a# v$ v# V, S- T' q( K* R8 @
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)6 A( n- k' q# h/ h7 Y& ~
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    2 o/ }: H4 o, g3 r7 ^. p! Z' a' o
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.; D2 @. z! `9 y% N. O  ?0 X
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    3 F" {/ A2 @4 {) w5 X
  38.         //}}AFX_MSG
    % ^. Z* |! g% j6 Z; [& a
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . k# [+ n& z* }* x( m# v" h
  40. END_MESSAGE_MAP()
    2 [+ F4 v; N" I" U3 }

  41. ) Y6 U% B* ^) b4 f! y& P( r) Z
  42. /////////////////////////////////////////////////////////////////////////////: ^7 q, ~8 N; O0 j4 L' i
  43. // CRevAppApp construction
    ; e+ m2 G$ j6 \: d
  44. ; n% j" q* \2 b' B3 `
  45. CRevAppApp::CRevAppApp()
    0 A2 h2 f1 s* ^8 U$ @/ r
  46. {
    $ ?( u4 d( q7 u8 x
  47.         // TODO: add construction code here,
    5 C8 L& n; [. \, [  z2 Y: Z# e' p
  48.         // Place all significant initialization in InitInstance
    + q. E$ S' K9 u' p
  49.   bDisplayIsBig5=FALSE;# L/ s$ M2 y9 F( W, i8 Y
  50.   bRestartUpdater=FALSE;
    ( m$ k% Y& o) u8 E- ~( T/ _
  51.   bFinishUpdated=FALSE;3 ~, C/ D+ r* E! I# m) ~, z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
      L2 k  V7 Y) C# y+ y
  53.   InitChangeDataBig52GBKS();
    * Z/ T6 e2 c: k5 j) k  d1 x
  54.   InitChangeDataGBKS2Big5();  j3 {0 n$ Y8 `; z6 K- e* }
  55.         //
    + z" t8 w" K; x% c
  56.         bClickRunExe = FALSE;
    / R2 W' T+ E3 W2 F
  57.         //  s. ^7 y  s2 D& w8 U2 c
  58. }
    2 h3 y4 d, q1 y
  59. + B" j, R/ x% X( E) ~8 d8 i# _
  60. CRevAppApp::~CRevAppApp()
    ( y. W4 S/ S8 X: i6 @
  61. {
    1 D: ]0 d6 k4 t0 G3 y( k0 Q, [; K% E+ b
  62.         // TODO: add construction code here,
    5 |0 g+ A* z- r7 C
  63.         // Place all significant initialization in InitInstance
    8 U3 O1 e. i9 m+ `
  64.   EndChangeData();
    ! X6 t7 Z5 [: K
  65. }
    , }" P; ?) q2 v3 ^4 h% d. p

  66. ; m: E$ t, i" @! H' N
  67. /////////////////////////////////////////////////////////////////////////////6 v" v4 c! o6 N
  68. // The one and only CRevAppApp object
    5 u% z- C& Z3 Q9 @3 t$ X5 _, @; C

  69. # c, _4 C6 ~$ n4 Y  o$ R. L
  70. CRevAppApp theApp;$ n: @( D: r" g' s
  71. / k: n' L' q" h. H9 b! p- V
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)# R$ @3 r2 v# A. @' j( `
  73. {; f5 R$ V, o5 @3 W# h; o. j/ |
  74.   int iEOF=0;: x* S, `: |2 u$ v
  75.   char szTempName[MAX_PATH];$ d3 v/ Z: b/ e, h' E. G! _, r7 ]
  76.   *szFileName=0;; M) z6 F8 e3 f! ~2 J8 ?2 b! u- I
  77.   iEOF=fscanf(fp,"%s",szTempName);! v' @1 {/ Y' [8 [9 D& e3 t$ a
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& W! |# _. i* X, v  V
  79.   {) |* Z" ?" |5 W# x& P6 R
  80.     strcpy(szFileName,&szTempName[1]);
    + C# R: n: F8 k/ N  J/ n% Q9 h! a! F: m
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    # R+ @5 G; A/ i+ P" J2 J& H* j
  82.     {, H+ `8 s  _0 Q1 ?! ^7 H' K/ r
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ) [1 t6 V1 t! T) o& X
  84.       strcat(szFileName," ");
    * |3 {/ h$ C" v+ D8 x
  85.       strcat(szFileName,szTempName);$ |% z# t5 i3 C- g) M4 A7 z
  86.     }- d; C8 @% I% t9 r3 D' \' N; h% A7 t( P
  87.     if(strlen(szFileName)>=1)
    # H3 H" V/ s1 g8 _+ g  k* E
  88.     {& ?: x  l* @$ s7 \
  89.       szFileName[strlen(szFileName)-1]=0;
    " p9 R$ y$ |; f& [2 X
  90.     }
    ( ~' b; K( ^/ I3 V& M4 [+ U3 k
  91.   }
    1 W! l5 _$ Y* v/ M1 W# Z* J
  92.   return szFileName;
    " b# r9 v+ M) q
  93. }
    5 e; {% f7 I  b8 A& }  b# N4 S
  94.   N; i$ r0 ~( |/ K1 X0 v" {" h4 Z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)2 e/ j& M" Z  W5 J- T
  96. {3 A/ a  f; m6 t4 F: G8 _% Y7 i/ l, T
  97.   FILE *fp;  F) l7 y3 w2 e3 H
  98.   char *key=NULL;( g" @" o* V7 t# I
  99.   char version[MAX_PATH];
    / c  s* P6 M2 s
  100.   LPUPDATEFILE file,olds;; X% J2 D) z9 J- j, p
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & O% `7 d3 E: |

  102. 4 e! L; d' k% v$ C
  103.   UpdateList.clear();0 }% t  g6 T( X. H
  104.   UpdateFile.clear();
    2 |3 a( Q5 p' G. L! }
  105.   if(GetFileAttributes(filename)==-1) return false;
    2 b/ \3 G$ I# g: P" v' K+ N
  106.   if(!(fp=fopen(filename,"r"))) return false;4 Q$ h. Y4 a/ T) r( T- L# e
  107.   fscanf(fp,"%s",version);3 A7 m3 X: P& |: ~* l
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    , n$ y" V& D1 }% m  _* p, E2 p
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ) k' t( [9 q) j* Y
  110.   {* b" W8 v+ L& e" w: _- F
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % j* u% ]6 F$ [& [$ _
  112.     fscanf(fp,"%s",file->path);
    9 E2 W1 }4 @+ Q8 u& _0 B
  113.     ReadFileNames(fp,file->file);! ^  O1 Q5 ~9 i3 R% G9 {
  114.     strcpy(file->full,".");1 P8 E0 Q9 O7 i; v# g2 e
  115.     strcat(file->full,file->path);, F6 q3 b; r! @$ X  k4 [6 D  M
  116.     strcat(file->full,file->file);, B# s$ o7 j; f7 _. B' n: _4 _0 \
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 ~* |1 F- Y/ H2 Y- [
  118.     {
    / M3 I3 Q# d! |
  119.       file->vers=(float)atof(version);6 Q  |) n/ w7 x) C6 f3 l; \% v
  120.       UpdateList.push_back(file->full);, I3 n7 z; L0 p4 Y, K: U9 \6 O# |( s3 E
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    / r$ F' b7 r: s
  122.     }) Y! `( x& {4 L% w# z8 X6 {3 k- K
  123.     else
    0 e8 ~9 H; Q" N2 [3 `% b
  124.     {8 r, k% l* r5 j* N- F
  125.       olds=(*p).second;. G/ Z, I5 }; o/ ]. C- G- h
  126.       if(olds->vers<(float)atof(version))1 W! [4 ]+ Z5 ^
  127.       {: j; u" K: r% h3 G) S
  128.         olds->vers=(float)atof(version);3 l! `+ D1 _; L) W% G% F# Y9 M5 r
  129.       }. r- E4 [3 n, U# A3 e3 s
  130.       free(file);
    ! [. X% H( [) H: Y( B: \
  131.     }0 v3 L" l$ P7 t3 w3 q# W) W
  132.   }0 R# n, U0 I8 h
  133.   fclose(fp);
    - `) {3 h4 A5 @5 M
  134.   return true;5 O/ x( _0 R3 F
  135. }
    , Y' s/ B+ R" l  x; b( B

  136. ' s& n4 @" f, p& X7 v+ t- X
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    0 h- p# q) N6 g5 M$ L: P, f
  138. {  H3 h: {) s: L. \8 ?
  139.   TCHAR  szFull[MAX_PATH];! J  H! s( m8 i' Z! Z3 L
  140.   TCHAR *token,*inter;/ v0 m' ]( _3 \( c9 w8 N
  141.   *szPath=0;
    2 o$ q6 i$ s0 l* j( _0 @
  142.   strcpy(szFull,szFullPath);0 B4 g4 B( B0 [
  143.   token=strtok(szFull,"\\/");& M* w" p1 N6 O( j/ ~
  144.   inter=token;* O  A4 Y& I3 v* s+ }$ M
  145.   while(token=strtok(NULL,"\\/")): f0 j9 k! G6 K
  146.   {: ^/ t! h9 g% l+ e* z0 H2 V  t
  147.     strcat(szPath,inter);7 g, L6 _; {; h2 k3 {1 v% L
  148.     strcat(szPath,"\");" N/ X& z3 c& A
  149.     inter=token;- [  r% P0 r8 F
  150.   }2 k0 `% ]' q- c3 X' g
  151.   return strlen(szPath);/ k8 U2 }* N; _' H$ C, m" V
  152. }3 d; g9 T4 W# `1 ]% ]1 V

  153. 2 l2 S! Z  x. ]% A9 }5 e" `
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)7 {3 u5 _* a, u+ i
  155. {2 @- K2 }9 k) j1 O+ U5 m
  156.   DWORD attrib=GetFileAttributes(Target);4 u. j1 v; S+ B, a1 ]* I% {6 |
  157.   if(attrib!=-1)
    / ]8 _& U7 Y0 t
  158.   {
    7 _4 c" E( D/ ~6 J% R. D& f6 h
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))0 \, q9 u5 D5 j0 j$ j- J: g
  160.     {
    ! L; a2 W* `* h
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ; h$ r8 \4 j% W( C
  162.       SetFileAttributes(Target,attrib);* A9 V# x! z  V) K+ N0 r9 M
  163.     }
    , ^) ]+ |1 R0 @# q# p: P4 t% n/ d
  164.   }
    ! ~3 s) M* O  F& n- E
  165.   CopyFile(Source,Target,Erase);/ E' I/ s$ x  }3 {, G
  166. }& s* M) W. ?" g' G' s* |0 @4 F
  167. 0 `: w) d' \; G' d; m  W* q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)7 k& F% K5 |; m5 f3 |* t
  169. {" o+ G2 b% z4 c; ?) p* w
  170.      FILE *fp;! g, U; i' H' Y/ X( i
  171.      char  szBuffer[8192];
    8 l4 z9 \; g# c
  172.   va_list  argptr;
    ) L; R8 e( J$ z' b# U1 s" A
  173. 2 ?' z  J3 e1 ]7 G8 m
  174.         va_start(argptr,message);& U; ~4 p& h( j" X6 x) w
  175.         vsprintf(szBuffer,message,argptr);
    - h- {4 P/ D$ P4 O
  176.         va_end(argptr);
    ( C# \0 f, ~" j) M& ^
  177.   fp=fopen(FileName,"a");* i* a! o6 K: g; m  l# l
  178.   if(fp)$ h5 @9 ^/ T1 R
  179.   {& k1 e0 t1 [( _- y, N
  180.     fprintf(fp,szBuffer);1 D$ ~. O! m$ {2 i; R# A8 v
  181.     fclose(fp);( c  E+ D5 _, X  x2 o/ Q
  182.           _flushall();' D/ |8 x! V( Y6 n" {
  183.   }) B7 E( i; f8 b1 `. I
  184. }
    1 b, o' J' m; X! i

  185. # J5 P' k2 j) I6 N, I. w
  186. BOOL CRevAppApp::Fclearf(char *FileName)
      B( v8 K- Z: c$ }9 v% Q. k
  187. {
    % {! {1 G4 h! A6 q! e2 v4 K
  188.      FILE *fp;) c* G! d7 p# H4 J" r- M
  189.     DWORD  attrib;1 F* K6 {- h2 @. y  V5 w
  190.   attrib=GetFileAttributes(FileName);  f' g& p2 T0 v2 w+ ?; S4 M
  191.   if(attrib!=-1)  \6 P: m, ?. I" ~- R2 F5 @' u, n
  192.   {. P: Z- d3 [) Q3 P5 ]: v
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    - q+ A0 X) `1 Z( \
  194.     if(!SetFileAttributes(FileName,attrib))
    ( m1 D2 n+ O7 A# k, H
  195.     {
    ) z: T2 z6 v1 V. L* @
  196.       return FALSE;+ Y$ I6 F/ B; X: l: y( b: F) Y7 s4 u
  197.     }
    ! ?8 a6 V  A! g* {
  198.   }& V) n. |0 A' [. K( Z' ^
  199.   fp=fopen(FileName,"wb");
    3 C  Z! [5 K# R9 E* w! v1 H: L
  200.   if(fp)
    : r# q4 O9 o- |! p
  201.   {) a8 x+ O. W. z) ]7 S
  202.     fclose(fp);
    6 R2 ~7 r: G' \6 }; s# V) n
  203.   }" _0 Q% l- }9 f7 Z% i
  204.   return TRUE;2 a/ c; Y$ c) K1 L
  205. }
    ) t+ w( p4 f- X7 O
  206. 7 S! j% S: x* h2 H/ {: q% O1 \! U  C+ q
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + a$ `# s  d' a* m7 t0 b: v; _
  208. {7 f* n+ d* L& l: x4 B5 E8 c9 P0 t! _
  209.   char filename[MAX_PATH];/ Q/ S5 _3 }6 @) ^8 N! k$ |- Z
  210.   LPUPDATEFILE file,olds;, o" x, y$ S; h. h7 h6 u& A
  211.   std::map<int,CString>::iterator i;
    6 J: ], R1 e5 P+ i4 u& l9 w
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    % `" Q" d7 {! ?, x6 r
  213.   std::list<CString>::iterator l;2 }+ q! o, D! D
  214. ! O% A- U  J% V. y# Q+ J7 T
  215.   if(bFirstUpdate)
    1 `' t* J& S5 }' ]& I, \; o' w
  216.   {
    * A2 D/ h- ~6 c* U) ^  {! Q
  217.     dwCurrFile=0;! E3 k9 F0 N7 t) ^( g' }/ {
  218.     bFirstUpdate=FALSE;) V1 I$ b7 }' Z. F. h- O
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 P) A: {2 [6 g( x4 r' T
  220.     {. v3 H- u6 A  D; b% z
  221.       dwTotalFiles=UpdateLocal.size();
    9 Y  j# f5 ^5 [* n) ]
  222.       dwDownLoaded=0;
    + P+ K' B* r/ a( q
  223.       bSilentStep=FALSE;; S5 r- d5 z% D8 P0 L9 s& H
  224.       bCompressed=TRUE;
    1 w3 L7 Z) \: r  l% |5 C5 L
  225.       strExtLocal.Empty();
    0 j5 O8 x" U) b# a  l
  226.       strFullName=(*i).second;! f3 p) ?4 ^# V7 C4 j1 S6 E) p1 z
  227.       dwProgramState=AP_CONNECT;3 u% \- m( }* J' A/ G. j# A; Z
  228.       return TRUE;8 m  n, p- x1 B3 l
  229.     }
    : c. M" ]+ [) w3 O% N. D3 m
  230.   }
    / r% Y* r. q4 y( Y8 H0 g5 V8 z
  231.   else if(bRestartUpdater==FALSE)' [# N  m( _% W" A0 e3 w
  232.   {
    ; O, k# \! P% A2 d
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      n- B& {7 F- g5 E! T
  234.     {8 k9 e5 [; h! r# z8 m5 O1 z& e5 V: ]
  235.       file=(*p).second;
    : U$ n& Q  z) f- h) G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())9 \5 \/ p3 c  n4 m' @& w
  237.       {
    ' J- B6 z5 q& Q7 {" P, z
  238.         olds=(*p).second;
      @# M4 n# J7 {5 ~2 F6 T6 ?
  239.         olds->vers=file->vers;; S9 J- D- r9 p5 n2 J
  240.       }8 {" n$ O( `, N3 j+ F0 T
  241.       else. P: L- {, R" X6 O2 V6 \+ U0 b: O
  242.       {  W7 L% a/ V) j" r0 Y$ Y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 c9 B: [2 S" s, u
  244.         memcpy(olds,file,sizeof(UPDATEFILE));! Y( n& M- P2 l7 |4 \( R& V' D
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));/ q; f  g9 g& r) Y7 W- t: i- `( o/ y+ R
  246.       }
    ( ]/ r; f: H9 W, |
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    : b2 _4 u) d( j/ i% B# P8 ^
  248.       sprintf(filename,"(%s)",file->file);% ?! D. o+ r' S% `! v5 B
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 I, e) L1 a9 n3 h$ l+ G
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }' p# H5 k4 D) c$ m9 x
  251.     }3 b% q4 N4 y  n
  252.     dwCurrFile++;) j' D. E0 T. ?! P& u
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 r: ^; q* y7 b% m1 M0 c" S
  254.     {' b  x. n! F: A$ M4 I
  255.       bSilentStep=FALSE;2 G, D# b4 [7 \* y
  256.       bCompressed=TRUE;' E- ^4 V- [* E' l" _4 L
  257.       strExtLocal.Empty();
    ( D# F, g( T' W( p+ P, F
  258.       strFullName=(*i).second;, n& N4 J- w; t( l( ?' Q  P& W
  259.       dwProgramState=AP_CONNECT;) V0 a! U! ?  N2 [" Y
  260.       return TRUE;
    . {# S: ?  c$ s  P
  261.     }
    4 w8 X* H# P/ Y# [$ |; |1 e3 \& X! @
  262.     if(!bRestartUpdater). g7 {, K" \3 I& v: e! \0 b
  263.     {9 ~8 i) O7 \3 ]0 r6 {4 P
  264.       int iCurrSize,iFileSize;% q; s* A7 [$ z* {+ Q, n
  265.       iCurrSize=0;1 Y& y9 b. k; ?. G/ g) e
  266.       iFileSize=UpdateList2.size();) I: X  p  D8 f) z6 T
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");+ y' {+ b, B0 i8 y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");+ I- o5 H' }9 [, X0 G( y8 W/ \
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    " C1 r- h8 m, L2 {8 b' A9 g
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. S* @9 `6 f: J' [0 V3 Q+ |
  271.       Fclearf(".\\update.dat");
    ( O1 x% O* V/ H, A9 ~
  272.       Fprintf(".\\update.dat","Bloodyf\n");) }" d  S2 j- ?  k) B
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) M" E, l2 p$ J& Q' v, h
  274.       {3 b! z8 x% Q2 b$ p8 U' I+ f
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())7 K1 {. ]# N8 b0 g4 r0 R
  276.         {
    7 P- ?$ t- q' Y% o. _5 c& J; ]7 Q
  277.           file=(*p).second;4 m2 u0 o: j+ @# _" e( o. e9 Y$ e
  278.           sprintf(filename,"(%s)",file->file);
    1 I- o) {0 j5 H6 f2 j$ D
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) ?6 n8 _. g) S' R- N
  280.           iCurrSize++;1 e5 }' Z0 |1 ~
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: B* h% \$ J2 n
  282.         }
    ' g6 |- K$ H, w7 ~- s' u: e3 `
  283.       }$ \8 J3 H$ J& a1 `% j
  284.       unlink(".\\update.txt");
    & |& z' }7 v& n+ \2 L2 B# J& {' r
  285.       unlink(".\\update.tmp");
    8 J: z7 q$ D+ N& T/ V9 l0 m
  286.       Fclearf(".\\checkversion.dat");
    3 F6 o2 n0 g( A& ?
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( U* h/ H; X# M3 Q0 L
  288.       if(UpdateLocal.size())# O- @; x/ L2 a  w1 {5 i  d& A
  289.       {" b! X' J2 W- s* R" O* [8 S) E+ `
  290.         UpdateLocal.clear();
    4 s& X1 {3 z5 P2 Y
  291.       }9 d2 h8 i' d9 V, Z/ n, @) `
  292.       if(UpdateFile3.size())1 Q/ X8 B6 j% C# F5 [% A! ^+ V
  293.       {& {4 ]* _7 o+ y- e
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! m2 b, l& e+ ~9 d8 V: ]
  295.         {
    0 q& p" ?4 g; j- [1 o$ n- w0 I
  296.           file=(*p).second;* w! Y1 K" Y9 A2 O+ V, }+ ]
  297.           free(file);
    ( h5 s: x/ F8 K; R$ ]
  298.         }
    1 c5 ^4 y; Q+ t$ `9 `
  299.         UpdateFile3.clear();3 E2 e& X" o& z- m" e: D
  300.         UpdateList3.clear();5 Z/ \) w& O* P* y
  301.       }- }" g" o" G. w& {$ T8 W5 `8 G
  302.       if(UpdateFile2.size())
    $ d) K( v' i+ i, w- m; c, u* b+ b
  303.       {
    ; X5 b% N# j5 \: Z; J5 j- ?; N& Z3 [
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' t' O# v  b$ }) a, y; x
  305.         {* [/ C$ J8 O$ l
  306.           file=(*p).second;' B) m! p7 Q7 S. \; ]/ L& J6 Q# |
  307.           free(file);+ w6 ]6 ^" Y0 f: d
  308.         }6 [- ?5 b* P0 `6 K, w& X1 Y
  309.         UpdateFile2.clear();
      A% o3 p9 E4 L4 F% V: |1 u
  310.         UpdateList2.clear();  ?" K0 W% q4 k1 B
  311.       }
    ( k- s: \1 X& P$ L
  312.       if(UpdateFile1.size())
    $ I; `' _0 m, s; R0 \% r+ c
  313.       {7 E3 ~$ X& J( L" {) U
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : M  ~, E5 W( m& O( @% H+ V; m
  315.         {
    , ~1 e0 `, T0 Q5 c8 P! H' |
  316.           file=(*p).second;% q# v* P+ }  a
  317.           free(file);
    0 i. N* }( S7 s2 h! n
  318.         }3 y0 E9 u3 V5 r% w3 e1 [3 a1 Z/ {
  319.         UpdateFile1.clear();
    # f7 B) h7 V! d6 i# [
  320.         UpdateList1.clear();% o5 S! j' G' Y  ~* ?/ B
  321.       }2 x# M3 B$ r# C
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 ~* }# t" w' k8 y9 Q1 M
  323.     }9 A5 y7 v  v/ t
  324.   }
    1 a. S2 \: @( X( d( ~- v. {: x
  325.   return FALSE;4 P$ n1 q, {* L4 N
  326. }) E' d, P, V, r: ~. G/ S$ B1 I# X
  327. : p5 F, C4 G( ~
  328. void CRevAppApp::ClearAll(void)
    2 r9 A% Q4 I6 h: H( S
  329. {
    2 n$ w# ~5 g- t; a/ O8 `& y3 S5 Y
  330.   LPUPDATEFILE file;
    ( A$ k7 ^; Z: o0 K
  331.   std::map<CString,LPUPDATEFILE>::iterator p;' ^) e+ Y; `" E. K! ]
  332. ; H# K6 a; W% k1 |& u5 o, t' z! X. m5 B
  333.   if(UpdateLocal.size())
    ; [' @- `0 {1 c; ]
  334.   {  R  D7 P# l" X7 J4 [  d+ T
  335.     UpdateLocal.clear();0 b& z# s% d/ D8 D6 W$ l  R
  336.   }
    5 t% B* C# h' V5 m( i
  337.   if(UpdateFile3.size())" j# P2 Y9 J9 ~3 Q2 A
  338.   {9 ]1 Y. r4 f# Y. O( e
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 R/ C  W5 E/ W. x8 a9 w5 L
  340.     {2 v: h3 P/ y5 j6 Z
  341.       file=(*p).second;) ]% s3 E' O- l
  342.       free(file);: U& [& ^; C- {- S; F1 [
  343.     }( u7 k& M8 X( C" _4 b
  344.     UpdateFile3.clear();* s- v! i$ d" F7 q" F- q
  345.     UpdateList3.clear();
    6 ~2 h% D6 f$ Y/ d1 U5 P
  346.   }6 g4 j9 Y$ e6 j* ?! r# D% }8 v
  347.   if(UpdateFile2.size())/ i/ Z4 u2 l3 K1 H1 b6 m
  348.   {! D- A. z) z8 S. ]+ F6 F
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # Z  V) v' x; b+ N9 m" D
  350.     {
    8 w6 x# [5 r) Z6 D: |' }$ F* ^+ m
  351.       file=(*p).second;2 x1 e2 _8 d' a+ E- p3 D2 l& P
  352.       free(file);
    8 x, _4 A$ [7 E" a
  353.     }# J2 I9 I2 P) y
  354.     UpdateFile2.clear();: c: w+ O' _6 |
  355.     UpdateList2.clear();0 L& p( A+ `- e( f& A: p
  356.   }
    8 M5 S. E1 x3 s, ^7 s) f
  357.   if(UpdateFile1.size())* i, l) B" e6 e0 y
  358.   {
    $ C* n% t3 I" i3 u5 o, u$ M: C
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 W' \- r2 p' m
  360.     {1 }  Y  `* Z# M0 D9 z  w/ r9 o
  361.       file=(*p).second;
    8 O( F; @- k; T* g
  362.       free(file);% m0 c! e( Z% F% h& h! V
  363.     }
    8 [$ w8 S! ]6 f- s8 t
  364.     UpdateFile1.clear();5 C# p* |/ r5 b8 ^
  365.     UpdateList1.clear();
    5 n+ z; _. E$ k& U( j
  366.   }
    9 N5 U8 X7 @, g$ X' S
  367. }  " l& z0 {* l4 f% Q8 n
  368.   
    / s, r2 w0 D1 @" o( b! N. [
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    : ^! `; x! h# A9 i' Z( w
  370. {0 ^& _2 n7 T# V( _& c- t' e
  371.   int c;; s$ {% @2 e" z/ C% n6 H
  372.   LPUPDATEFILE file1,file2;
    3 e& i  ^/ n8 `& T
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    2 Q$ L6 E; i5 C" V* L
  374.   std::list<CString>::iterator l;
    ( B+ ?$ [5 Y, x

  375. ( y4 \& P8 P  v* o7 w* \8 ~% ?
  376.   UpdateLocal.clear();
    0 t; }7 Q* P1 E* \$ S
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 t; |0 }1 s% j" l& e
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
      X' L' v+ N  Q$ `
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);; ~. b# v. q  B& J- a! j
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);+ u1 E* x/ n: q! q) X. R+ M  G  f7 K
  381.   if(UpdateFile3.size())
    5 s7 \0 V9 O2 {! M
  382.   {0 B' t) R1 [( i5 h" A
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++): U" B( ~6 x& A% u3 ^5 @) {) h: E
  384.     {/ Z( _, H. J* y9 A  P( ?7 x+ M
  385.       file2=(LPUPDATEFILE)(*i).second;
      D4 N' T7 l- F, n
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " X% R5 t& z" M0 H) B7 e( W% C5 e
  387.       {( u6 p, O+ M* n/ ?5 y$ t  M3 V
  388.         file1=(LPUPDATEFILE)(*p).second;
      _7 u$ [% o$ o1 O
  389.         file1->vers=file2->vers;
    " \7 K8 Y8 Z3 b& p! V
  390.       }
    - ?% }7 J! y) J
  391.       else/ v" M( {3 e* V2 s/ L
  392.       {( C  @6 e0 E8 U% {0 f* m
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . T" B0 o6 t0 l$ }
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));& f( Z$ Z& P. o
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));, |0 J2 U( ^; c; w. U7 q
  396.       }: H& u! X, r- E# I& ?
  397.     }+ Z7 ^. G+ u. D' n( j3 W
  398.   }
    $ S7 O7 P. [+ I( @7 f
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)7 @% H& w( E# B/ b
  400.   {6 B, B9 p, D& l0 M6 k' g& r' s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())% [8 A8 o7 {) p! m- Z& ?% p
  402.     {# S' `* r3 \! S; v6 h& e; Y. B
  403.       file2=(LPUPDATEFILE)(*i).second;: y2 g4 U, [" x- w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# D: \; b2 v+ g& @" j( Q0 @2 d
  405.       {+ K# U& z2 N; \7 ^/ K2 a
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 l  l3 Y% {3 q) X" O* R9 p
  407.         if(file1->vers!=file2->vers)
    8 H# v/ V6 I/ y) ~
  408.         {" u' ^: @8 [0 c# ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + w+ J8 b" d: [0 H! p4 v
  410.           c++;
    ) t" c  \( [! C1 _8 H) x- B4 |
  411.         }% K$ i4 E6 Q) ?( K
  412.       }
    , X) Y  y' G) ?3 [0 j1 t* H
  413.       else3 O& N' w0 Y$ r. x( D# p  Z) c
  414.       {* J9 M3 `# @: Q3 H- o
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 K+ ?1 i. _! P! D
  416.         c++;: W* Z' b: Z+ K, o* |8 Y- \
  417.       }
    3 W) d) S1 T/ N! k' t) S
  418.     }+ {! p- h5 j8 R# q9 ?: M, R
  419.   }
    8 V/ u$ r, T% R
  420.   unlink(".\\DownLoad\\update.txt");9 e3 F4 \: W6 P. S7 I' S" |6 U
  421.   if(UpdateLocal.size()) return TRUE;
    " b) F1 n9 K- j' S& ]
  422.   else                   return FALSE;
    & P0 N% P+ V, a  s
  423. }
    1 t6 X1 y$ H  ]$ T$ k1 r( r
  424. & \2 v. e' O: t$ `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    3 R$ G5 ?& x; i* i2 V! S3 h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    . E8 m: a* B  I
  427.   g9 \  ^* x7 q( J8 c
  428. & @* e+ r# D/ o0 t
  429. $ z: w* G5 ?1 W3 l' w
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)$ @  [/ P& W( n1 W
  431. {
    ; `, _( p) P( n1 H/ n
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;$ x( [  v+ M0 i# U2 m
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): D+ L% M( t; W
  434.   {
    . b2 u0 \# n- K7 U: f, y
  435.     char szLanguage[50];
    4 F% {2 ]/ {3 [4 U9 |! ]
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / [) D( H* b( @3 `) N+ g
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 F4 @0 @) m; b; d" z6 @/ }
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' Y: U. Z) B' _7 G" L
  439.     else                                   m_iLanguage=ENGLISH;  E, r$ l- e# z1 I4 b
  440.     char szRegister[100];5 g- [1 A& ]2 [3 x( [! a0 ?( W
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");* v& T9 G0 d8 A9 `- u
  442.     strRegsName=szRegister;* u* O  X, h8 A! |  H5 M3 e# f
  443.     char szPatchURL[100];- x, v& \- p, ~2 f0 h% A
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + m1 g- v2 P2 ]
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & V- ?+ E4 T( n% {9 R
  446.   }3 N" V+ E  @7 D' ^6 L8 W8 t
  447.   else
    * i( z: i- J$ ~8 d1 W: E
  448.   {
    ; g: q7 _  U. }4 N8 X
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 G1 V, `( E% Z$ r7 v
  450.     strRegsName=DEFAULT_REG_URL;
    ; f! u9 x+ o/ L$ I1 x' L
  451.   }; m2 t3 R2 U8 J1 g' ~
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! |" M# ~) A" \) R% y0 ]' o
  453.   {& L7 k* Y% ~6 w9 k9 L! Q
  454.     char szIP[50];
    ) U9 t  e. c8 B. v
  455.     char szDIR[300];2 q; H8 e% i8 b% d
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % X' h% M8 V' }
  457.     {8 y* d& V$ V  O/ E$ W
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");" ?# o1 A8 f: ^
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");% u" \# S1 w* A& }8 O
  460.       strHostName=szIP;; w. ^9 u$ d' {+ v5 D7 c* h
  461.       strHostPath.Format("/%s",szDIR);& d2 {4 a' J$ \  q9 f
  462.     }
    ! p+ f( A: R7 o( T/ J- z/ Q3 ]3 Q" A
  463.     else0 [- u6 W, s' n# G: _% T
  464.     {
    " B" q8 n0 X% ]
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " B4 ?" A% x/ V& k/ ]* u6 P6 @- ^
  466.       {; ^2 u" P5 B1 I. b, I( E
  467.         char szLanguage[50];
    3 I+ j+ m" k5 T6 q4 r
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 U# P* m6 H# x, d$ u
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; v5 a3 R" F  l9 \$ l. m) `' o
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& ^- L6 J. J: y1 l
  471.         else                                   m_iLanguage=ENGLISH;
    1 \. h& N2 V8 p! T6 p6 G
  472.         char szRegister[100];
    4 n" c; Q8 r; B% G. a: l: O: y
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. |3 Q' @" c: o- g' K2 q3 R. G0 `
  474.         strRegsName=szRegister;7 V! q2 T5 d9 m0 X$ m$ g
  475.         char szPatchURL[100];, q) }/ ?: i1 ~0 t7 h
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 n' b; I/ q9 E4 S7 R; |
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " W, F" t2 r) O. |
  478.       }3 ~# a( r  U/ f  ~% A: i7 B: n
  479.       else3 i( h- S+ d+ n0 n3 j4 [
  480.       {
    9 O% Q4 G; [/ n0 N/ Q8 T
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' ]; ~5 K- i6 Q0 q
  482.         strRegsName=DEFAULT_REG_URL;" K3 B* F/ @5 W. c3 Q
  483.       }3 p' Z& }# r! v# m8 f
  484.     }% e8 v! `: p/ v4 Z5 y) j
  485.   }/ Q$ n) Q' }" w$ G/ S3 T9 i  [9 d0 `
  486.   return true;: R; x$ o. f) x
  487. }
    ) R0 y3 D) X% }- c
  488. ) F$ a! c5 t- |0 V7 x) {7 g6 i
  489. #include ".\ZLib\unzip.h"
    . N; R, P) y+ ]; b9 `, i- I
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    / q( A5 X4 {3 O5 G6 ^6 N
  491. /////////////////////////////////////////////////////////////////////////////1 n% ^0 D: e. g# C1 ]6 |3 V* W
  492. // CRevAppApp initialization
      P, Q2 A* u" R  \$ [

  493. ( @0 f) \9 F/ o* R4 h. N5 N
  494. BOOL CRevAppApp::InitInstance()2 d/ [2 V8 q& h2 U# g
  495. {
    + `' C, m+ x: K
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];: p, _* e$ P# g9 b* e
  497. 6 k. J5 d: D4 X$ t# G2 B2 j" G
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    - I; E$ D7 J5 h: y5 E2 S
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)). ~& z. i7 {2 D- ^$ `: J0 w4 t
  500.   {$ ^" B% ]% ^/ T
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    , Z9 h$ z( n& }" W
  502.     GetPathFromFullPath(szPathTarget,szPathSource);3 H9 D* Z2 E3 J4 D6 i
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))), u  q2 ^" H4 K2 ~, D+ m
  504.     {5 y# b8 F* P0 x& B8 Q. y' v
  505.       strcpy(szPath,szPathTarget);
    - h" u  T  x# f* ~/ _* J/ T5 p; T
  506.       SetCurrentDirectory(szPath);7 ?  k% |/ k* v9 O" ?* \6 {
  507.     }
      D4 X* a0 P' ^0 C( v  r
  508.   }
    2 R; I/ ~- `2 \# ?+ m; p: ]! k2 a
  509. #ifdef _DEBUG( G& Q  z. P, W0 y/ X; }- Z  R( Z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 H5 I: D7 g' a2 t  K1 H% Z
  511. #else
    1 Z$ U' e3 t/ c" O7 y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 A6 m, `7 _8 d8 L3 ]" b; \* w
  513. #endif3 U, \* L5 u! w7 V" R  T; ^' ~
  514.   {
    " v$ M2 n; ?1 Y5 ^% W/ R! ?- v
  515.     char tempFileName[MAX_PATH];# p; G' K. d$ s) y8 t
  516.     strcpy(tempFileName,szPathSource);) W0 L" D; ^+ N5 a
  517.     tempFileName[strlen(szPathSource)-12]=0;
    0 \8 T- q4 n5 U! c( E. t+ r3 {
  518.     strcat(tempFileName,"\\$CSUpdate.exe");& e6 X7 y! O6 m0 d* x+ I
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);  S; o. y1 j7 B7 l6 {8 q# v; A
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    $ V$ |4 E; U6 u. @" h# {5 c
  521.     return TRUE;
    . o9 n4 w  D- U9 @, P
  522.   }
    ) w: p7 X$ {" Y" n  P6 I: Z
  523.   // Nuke 0118: Delete run.exe
    + C9 Z6 D+ l# Y4 p6 [
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );4 r+ Z& K4 L$ N+ q
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");( S- C8 J$ m) s& w, ?! x
  526.   if(!ReadCfgFile("Config.ini"))0 ^/ O3 T, U$ Q
  527.   {4 k% N& I7 F/ R3 I& U" |
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);; l# ~% K8 R% w. }) ]! W% N
  529.     return TRUE;
    & S: M4 x! n" X6 ?7 U
  530.   }+ s* K) X2 w) h
  531.   HANDLE mutex;
    0 O% a2 [0 y7 A  S/ G) f
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 ]2 b* F8 x) E& z! Y7 h
  533.   {
    0 F5 I( G% S0 `7 u$ ~& O
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)& q5 c9 n- g8 R# ^3 \
  535.     {
    % `1 j" \2 g$ [5 Y7 k0 y
  536.       CloseHandle(mutex);) N3 F+ H  [, D+ E' l7 J
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);4 C6 A1 [) B5 e6 u  R' [
  538.       return TRUE;
    + f! ^: x8 i4 p2 ~& ^" W* B; E
  539.     }
    8 Y) r" B- D: q3 v% u
  540.   }  4 Q: s/ Z  t6 G
  541.   CloseHandle(mutex);
    3 Q4 N7 {/ Z+ Z( G# Q
  542. $ \! p6 `, o1 p2 I: K/ X% d$ {
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    7 g! j, h/ \2 g4 g) O6 V6 V
  544. 3 r* Q& k& {5 ^& z" u
  545.         AfxEnableControlContainer();
    ' p# w0 G' _8 e! H
  546. . i; l/ E0 e& \' b
  547.   bCanUpdate=FALSE;
    3 o+ v( ^# c3 p5 T6 O4 Z& _
  548.   dwStartUpSteps=1;
    1 Z- D( o0 P" F/ Z. s
  549.   dwProgramState=AP_NOTHING;2 c5 |# e# B* S

  550. 2 V, q; T# ^; k6 Y1 e5 B
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    7 h2 F: s8 P# Q+ o8 J

  552. 1 l0 C4 w, u# e
  553.         // Standard initialization
    : T5 K' X0 R$ w
  554.         // If you are not using these features and wish to reduce the size+ ~! p) g: r3 n. J# w7 V- [
  555.         //  of your final executable, you should remove from the following
    # I. B, T: K5 c
  556.         //  the specific initialization routines you do not need.! I% p+ {$ c1 M! F* o; H0 H$ c

  557. ( B% y/ m& @9 ]( n0 o8 E
  558. #ifdef _AFXDLL
    5 ]) e3 h3 f: }# A2 Q9 W
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ! _0 n: T: N" G
  560. #else
    6 s6 j$ v1 ]. ^" p: _
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically) m4 d+ W& _3 ^- ?( E1 `
  562. #endif
    # `. T2 j+ m  u* B9 b8 v. u( N
  563.   R3 X9 A9 N& z
  564.   dlg=new CRevAppDlg;
    " d0 e( B* b: O! \
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    1 f# t8 |. l" a0 z( p  o% ?- s: ?
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    $ c+ m, x  p5 o* f
  567.   m_pMainWnd=dlg;% Z* z; J0 _( k& p; C; z

  568. - w6 Z* m$ C& E6 I8 l* J: V
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    : ~* a* Y, v& x) h- \0 `

  570. % j7 F8 a+ ?9 W, ]/ o  P
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ' x2 |5 {! x" k* N
  572. //  ULONG_PTR gdiplusToken;
    ' T0 \  J8 w7 _. S" L2 j4 m
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);; }  x4 y* n1 {7 R7 Z  K8 G2 Y

  574. 9 J# m& e9 x% b  s9 F, ~  y9 I
  575. //        CRevAppDlg dlg;& S+ b: z( p9 [# ]! ^
  576. //        int nResponse = dlg.DoModal();- f. g' r2 |4 L$ h8 K; R  C
  577. //        if (nResponse == IDOK)3 y# x  r! U- B2 U0 L
  578. //        {
    ' Q1 |9 p9 O7 x
  579. //                // TODO: Place code here to handle when the dialog is  }3 I& R, r$ m0 h
  580. //                //  dismissed with OK! \3 R5 V1 X6 ], {. I- ?
  581. //        }; o- y8 K: t6 m( _  M. f- Q8 r
  582. //        else if (nResponse == IDCANCEL). p2 n4 s+ n" P6 S$ {
  583. //        {! F6 f! q4 e; ?
  584. //                // TODO: Place code here to handle when the dialog is7 j* N2 m3 s& B
  585. //                //  dismissed with Cancel
    ' Q: h  u4 q: y1 A0 U
  586. //        }" K( e& L# E1 g" n4 `

  587. " k( U$ L0 K/ M) x3 N" o
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    * z1 x& R" C- K" c$ E8 b3 b5 H$ \
  589.         //  application, rather than start the application's message pump.
    1 {$ Z5 y) ~  O& E- A
  590.         return TRUE;
    + u1 z% N  M. r  c/ A
  591. }1 a3 o. s- M& M& D  }  _- T: m

  592. " t$ m+ c- T8 s! A* k2 L) s2 I3 ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    & k% d! N) R$ s+ U! Z7 R& Y
  594. {! O3 J( C' N9 h7 d5 E
  595.   int i;. Z: N& @9 J  L5 D* n. {3 c! m8 G
  596.   char *szRet;" s0 x6 I$ n5 B* O& f9 I) G

  597. + i8 s+ W1 i, d% @# v
  598.   if(pSource) { itoken=0; sztoken=pSource; }% w8 k& H. O: q* j# d
  599.   if(sztoken)- v8 Z& x- }7 B4 K3 M" J
  600.   {
    . ]/ {  L, F3 z( D& J, W5 A0 N
  601.     szRet=&sztoken[itoken];
    ; B- r& K$ u9 o7 q6 ?: X% P
  602.     while(sztoken[itoken])
    - y0 K3 O" {. J" G7 c! Y$ j2 _. c
  603.     {
    4 C. J, o* W2 e" |5 u; d
  604.       for(i=0;i<(int)strlen(token);i++): w, R' q# F; J. k5 G" m9 ~+ g  F
  605.       {
    7 i" h/ P0 q( P3 u5 J
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])  B- ~5 o5 T/ ?, c
  607.         {* Z  D/ ]1 `; A  M+ Z7 B$ M$ ?
  608.           sztoken[itoken++]=0;
    # k- R1 O! k6 J8 v2 _( {$ i: j  o
  609.           sztoken[itoken++]=0;) C+ p+ `" {8 c( P5 j: a8 Y  S
  610.           return szRet;
    - B9 O: K$ S; y- B. z, }1 V
  611.         }7 |+ t7 C+ ?, N! g, Q) [( T
  612.       }
    ' H' l  o: e! ?8 n
  613.       itoken++;
    $ B/ `& f' d/ ~
  614.     }$ Y0 w4 r6 s2 n
  615.   }: q, G3 V9 [3 o; M
  616.   return NULL;, {5 q9 Q1 a2 o" G0 j
  617. }2 a- c( H% K" k) Z
  618. 7 c* y/ g! w" h, I4 }9 F. y( P
  619. void ProcessProc(long Total,long Current)8 h5 m3 L  X. l8 Z9 r+ n  G% K6 x
  620. {6 u/ D2 l$ e, {+ b3 I
  621.         MSG msg;" b# z* S( |/ v+ x
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);5 i, F4 ^5 l" y1 y1 N7 p! |) c0 h
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' y9 O- h; _) U# q4 O2 C
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))% \$ n: L6 K, K) S: v5 m
  625.         {
    , N4 v! i8 ]7 y6 B' e8 t
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & w; s: j9 k; l! j) K8 Z5 X
  627.                 {
    ; s+ o2 B: G+ R
  628.                         return;5 [' H: \  q% N5 b
  629.                 }+ x9 p  V3 W# f. `
  630.                 TranslateMessage(&msg);8 L  w, |  T2 A* s. y, q% f
  631.                 DispatchMessage(&msg);8 V8 D1 C( b3 Q! d
  632.         }       
    9 |( o% [; b9 ]3 s
  633. }' @( d& _8 |- p

  634. 1 M5 T; G8 A9 [2 P
  635. BOOL bFirstChar=TRUE;
      ]3 {' I1 O9 m, [- `) Q+ R

  636. ! {& y3 O+ d# s0 |7 o
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 q% W( {3 F5 o. Y
  638. {, K# _& C; I- ?6 {; T  H2 H
  639.         // TODO: Add your specialized code here and/or call the base class1 n, A, C" ^, |# E
  640.   switch(dwProgramState)' k$ p8 B0 ^" n, w1 e$ }+ E1 z" a
  641.   {
    ; ^, N# m3 _8 \- X
  642.   case AP_NOTHING:
    8 _+ N0 p5 [8 N1 s4 l1 l0 m$ @
  643.     switch(dwStartUpSteps)7 B  }8 W  ?9 T7 \' a
  644.     {5 n6 s8 Q$ ^' c+ P
  645.     case 1:8 y" C; G& {2 L) Q" {. `
  646.       {
    5 p  ~2 {3 u, G, Y1 m' b% e
  647.         int i;
    9 l% \+ N! y) X+ e  g' H. H3 y
  648.         CDC *pCDC=dlg->GetDC();
      g" e8 U1 @  d' R! O
  649.         HDC hdcwnd=pCDC->m_hDC;- G( A* @9 p/ E) c/ a
  650. //        Graphics graphics(hdcwnd);9 \: a6 R( E/ T! u% b+ }* e8 U2 A" i
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");: O& l# I% c5 w, P+ Y6 P
  652. //        INT iWidth=bitmap.GetWidth();6 R, Y! U: ~: g
  653. //        INT iHeight=bitmap.GetHeight();, H1 A/ F. Z; V; Q1 ]
  654. //        Color color,colorTemp;
    $ i/ J+ D) Y# h8 |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 y% |# L8 W& h  i) Q
  656. //        {
    8 [0 j: [4 a- A7 ^
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)* \3 M$ O0 p' T' J$ m+ y& X
  658. //          {( ?6 U+ M' @! b
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    5 \8 c1 p. I1 p- M7 O. n
  660. //            colorTemp.SetValue(color.MakeARGB(
    & ^/ ~" q: t: E/ K! A
  661. //              (BYTE)(255*iColumn/iWidth),
    % `3 r/ o  u3 R$ S6 S, H9 R
  662. //              color.GetRed(),! ~$ L) e) i0 X
  663. //              color.GetGreen(),) v* R/ C1 n2 D( Q; t' |1 W! ]
  664. //              color.GetBlue()));  f4 d, |8 ^1 S7 T+ m5 p. f# i
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    % j# P5 k/ k' m
  666. //          }
    1 Q1 m9 U" w, e' B. a
  667. //        }) f7 d/ }# `' G+ Y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);* l* E8 S% j0 Z2 M# i) x1 e7 x
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 _; U  S: y, }( `" V* l: ^
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ }0 ~1 r7 G6 j$ g3 G" Y' E+ D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; l/ U' y( B) O! ]
  672.         for(i=0;i<240;i+=8)
    . M$ k5 ^; j5 S
  673.         {5 b) }7 I* P. p# @5 @' p
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  _# F- F/ y# A. \. ?3 Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . V5 J: j) g3 ~( ^
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; X% C4 P" P6 k8 j
  677.           Sleep(33);
    8 u: ~6 d2 q7 G& N
  678.         }: c2 T1 b. s) m3 Z1 \
  679.         Sleep(1000);
    - {& i$ {( d9 _( X! p0 q! z# X
  680.         for(i=240;i>0;i-=8)* ]1 Q: c: X2 j  i; h# e
  681.         {2 I9 c, h- E) @
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) j4 e* }  m8 \
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  x  \. L$ b6 I. X
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; y/ w6 {' r$ M  N7 s4 H
  685.           Sleep(33);
    - E! l# a2 w8 s& w4 n# g
  686.         }7 r2 o  g" ^& l' r6 x& O) e8 j
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);5 U3 T6 g% Y) ?& y& b: Y
  688.         dlg->ReleaseDC(pCDC);
    ; \; f, h; |3 A7 }
  689.         DeleteDC(hdctar);
    , Q1 \$ H3 A- [
  690.         DeleteDC(hdcsrc);. P' i$ `, N+ Z$ T9 L2 d
  691.         DeleteDC(hdcorg);
    ) E* @' J9 M, a" m" J( v3 l
  692.       }
    : _! i3 w6 L4 ~  ^0 C
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) O! A8 V: h& t: f
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");5 ]5 ~7 v7 N* h. @: ~  M
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");3 G7 |, ]0 E! I( I5 ?9 C4 o$ C
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    % l! ^- j6 w. s7 z; s
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) y9 e5 \3 f. M- j7 w7 s4 F0 |
  698.       if(!Dn.Connected())
    6 l) R5 @8 K: ?1 W4 v; d
  699.       {, I' S0 N  M' Y, h7 X
  700.         dwTotalFiles=1;
    " q% D& M& ]( {: B4 z( r
  701.         dwDownLoaded=0;1 o7 _0 k5 `1 B  r& y/ K! \* G8 Z& \
  702.         bSilentStep=TRUE;+ d  V. [' i# W6 [8 g$ R; D
  703.         bCompressed=FALSE;
    ) l& a' _$ K6 g) X% l" D
  704.         strExtLocal.Empty();
      Q7 A1 i3 ?+ |
  705.         strFullName="readme.txt";/ V& G* K1 |' l$ G" X  O
  706.         dwProgramState=AP_CONNECT;8 D3 S/ i6 v) O2 F& B& `2 J- ]& [
  707.       }4 i( s% s7 x' L! r
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 L0 {4 F8 G. r+ T1 v( v* e$ Y
  709.       dwStartUpSteps=2;
    1 }6 l5 p. M. @' Q  }
  710.       break;
    0 z. i5 |( w0 R# S
  711.     case 2:0 o% g" ]- k+ c3 E
  712.       {
    2 K, z$ R: U1 ?& ?+ S
  713.         int iEOF;
    7 S/ F# G, n/ j/ H
  714.         FILE *fp;5 Y4 [8 b4 r, T- v9 ~
  715.         char szString[512];
    ! d# s: ^: u' ?
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    + Y4 h( u- o3 h* |. U& P& r
  717.         if(fp)! N2 ]' C: ^5 i
  718.         {
    7 Q6 t5 j: K  `, w& u# I& B
  719.           do- A  |5 k0 ]2 a
  720.           {9 Y' s7 ]' [' r  S7 T2 c
  721.             iEOF=fscanf(fp,"%s",szString);
    : r& M$ F1 N; \% E% m$ X3 q2 V6 U0 k
  722.             if(strlen(szString))# g( \5 N+ |( v4 E7 G* c
  723.             {
    5 ]9 Q" a; O4 i% M
  724.               if(bFirstChar)( V& P6 X) a1 t4 c1 b: a% C
  725.               {
    $ E3 ]0 O5 Y0 m" y. b" a$ U
  726.                 bFirstChar=FALSE;
    / ?( y1 {, x* k: ]9 l& a
  727.                 bConnectIsBig5=FALSE;
    # q3 e+ G. P0 Y8 Y( @3 b3 N$ h. U; _
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;" u/ o9 W; T" H0 b. ^# U
  729.               }
    * a4 ~! O8 a' W& t" E  }9 c. N
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));/ R: s$ q$ L1 f* k& J
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    3 _$ E) c+ {6 m# y' Q, [8 Y5 x
  732.               dlg->m_ListText.AddString(szString);3 I( `* `+ D. z( Q, W5 ?
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" F4 R/ g  f& j9 H% G8 v) ^8 N- x
  734.               *szString=0;2 l: ]9 |7 l) @
  735.             }
    . T# L+ p) ?: Y1 i5 O' |% a
  736.           } while(iEOF!=EOF);
    2 {- b/ z) w6 r
  737.           fclose(fp);1 [6 v9 M- C  Z! l$ D, n
  738.           unlink(".\\DownLoad\\readme.txt");
    ( D  A# w6 [9 S$ P- I7 B4 R
  739.           dwStartUpSteps=3;0 V+ L' D+ J% ?5 o  k3 i' r
  740.         }
    4 g# m9 x& ]/ D; ^7 f, M
  741.       }+ |( e0 J6 ^- n
  742.       break;
      V5 K0 S7 }( E" G9 N8 X
  743.     case 3:- w, n; Y" h$ y( m
  744.       if(!Dn.Connected())
    5 _- T) |6 \  p; k1 j
  745.       {
    2 `! j- n$ \. ?1 K) ~
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 ~3 ~( r1 y/ s* G
  747.         dwTotalFiles=1;# [, ~1 F2 m+ n4 @8 ^
  748.         dwDownLoaded=0;, p9 \+ }; y+ E% L
  749.         bSilentStep=TRUE;/ k8 l3 y; D9 \# c/ _4 a3 g, n
  750.         bCompressed=FALSE;
    $ W- _9 E% W* b2 r5 r. ?
  751.         strExtLocal.Empty();
    0 B) s4 k' S. h1 V
  752.         strFullName="checkversion.txt";8 y- Z5 s8 @7 R& L2 Q& l: S3 `' V
  753.         dwProgramState=AP_CONNECT;% `9 ~% v9 k3 l' h3 s* v  l: H
  754.       }  p* ]7 G! N; v. w
  755.       dwStartUpSteps=4;1 i. Q3 A- w4 j7 x
  756.       break;4 Z. q: C  i' g4 r' q. O, D; G# E
  757.     case 4:  |( I2 r* J+ G6 z3 M3 K1 |8 e. a
  758.       {
    ' u! A* I- k) D; C, E( ?4 o
  759.         FILE *fp;
    % }' h# x4 W8 N$ c) I# m
  760.         char szString1[128];
    6 j3 ?) y( f$ m2 b& k
  761.         char szString2[128];3 w0 k) F. B) B' S0 a& a# P
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");9 }% ?2 Q* ?8 ], Z) B6 z
  763.         if(fp)
    & O( Z4 L2 l1 v) ]" A8 C- U
  764.         {5 C2 n7 I; D' e8 w* h
  765.           fscanf(fp,"%s",szString1);! t% ~/ [& @# t! B: F
  766.           fclose(fp);) L+ f- q+ t3 W: j) B& l3 [" N
  767.           fCheckVersion=atof(szString1);/ m' F, x; M/ A2 `) J
  768.           fp=fopen(".\\checkversion.dat","r");. m3 {# o# Z' a! e
  769.           if(fp)$ U8 A  ^) w! P" D, c* Y
  770.           {
    5 {+ F8 ~* j; u
  771.             fscanf(fp,"%s",szString2);
      }5 e" h# i* r* X
  772.             fclose(fp);$ N# N: n7 c6 E! O1 M8 t
  773.             if(atof(szString1)!=atof(szString2))# a* U! D* ]9 k$ Y0 B/ ^. {! `
  774.             {' K) }! R8 Q# f+ m* B; T
  775.               if(!Dn.Connected())
    2 g) i" T6 v, _0 F2 Z) h/ V9 R
  776.               {
      @3 N1 T6 H# R  U& q7 c- ?
  777.                 bFirstUpdate=TRUE;/ o# P. Z" t5 G( Q3 C
  778.                 dwTotalFiles=1;
    : d+ y8 P& f) S  e! l$ a
  779.                 dwDownLoaded=0;
      \3 V0 ]% Q; i; r; Z) w
  780.                 bSilentStep=FALSE;
    ( Q. |* x* P3 N+ i" l7 N
  781.                 bCompressed=TRUE;
    " W" @6 X' E; F
  782.                 strExtLocal=".\\DownLoad\";
    + s! J2 `$ P! q/ |
  783.                 strFullName="update.txt";# I9 @7 b5 U6 w0 W$ q: o
  784.                 dwProgramState=AP_CONNECT;" T8 f( y9 q& P* @/ }( r% m
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 U8 P8 ~' v' N$ O' C3 s3 J
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 t  `, b% a! ^2 ^% O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");3 k6 \" ~* r8 ]; S% O7 D' b
  788. : t3 I: J0 z& H* ]5 `
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 v$ f3 Y9 K+ h. M/ S
  790.                 unlink(".\\DownLoad\\checkversion.txt");) m  G9 u8 I6 m8 Q* g
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)9 f$ A! _' f  }
  792.                 {, j8 j8 O" I; X( ?) I% a$ l
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");3 o8 Q# z- _; J+ k! o9 y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" X, a  X, ~, r& z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");* w. q' Z4 O$ \! a
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- W2 E) N8 r2 `4 x. l, N* A# M

  797. 0 m$ j0 x# E0 t( ]. n/ J+ X
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; k2 H/ o+ U3 Z( p
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- I9 v7 s9 K7 \- n  {
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 l% P) i5 L$ r  x* `- H
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 h7 H2 H+ z# c1 G# W8 S
  802.                 }
    * ^7 J! _( F% P0 }
  803.                 dwStartUpSteps=5;
    " _; K. j0 F2 d: [( W- ?; C
  804.               }
    & L8 l& T/ v' H# I& F
  805.             }
    3 }( i% U( P, E  u
  806.             else
    , @2 O- }( e1 C! L6 }* ~' M7 X
  807.             {
    # t0 `2 A6 O- Z, |: _
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ' V, I/ C: ?3 A0 j
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");0 T$ F! e3 E& @! O! N
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ U8 |7 ^5 O* c; U' l, O6 |
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");) Y& U2 A* o' @! Z
  812. 1 o* T6 ^8 U0 Y0 A* ^: X2 A
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: i& I7 E! c  `0 J5 `, y. y; g0 h
  814.               dwStartUpSteps=99;
    ( t' j7 {3 y9 p$ n- q
  815.               bFinishUpdated=TRUE;
    - A9 x4 i; R4 u+ ]7 `: f) ^
  816.               bCanUpdate=TRUE;4 \  n* G% C$ ^2 r
  817.             }
    * p' j2 u6 l$ N7 y8 D
  818.           }# E9 [' b7 d# T( n, s0 m
  819.           else
    8 T. [$ J5 y- R$ i% Z; U
  820.           {: s1 d' N. Z- T& ]  E. z
  821.             if(!Dn.Connected())
    4 _$ O9 J% e$ q1 P6 v4 y( u
  822.             {: }$ D7 ^1 I& {3 o) v
  823.               bFirstUpdate=TRUE;
    & z, {) h5 |% G- O" J" g. U9 C
  824.               dwTotalFiles=1;% T* M4 ~8 l6 O' g# j6 x( E* v
  825.               dwDownLoaded=0;
    & k. l! E3 n7 l
  826.               bSilentStep=FALSE;
    " G4 n7 p- e& s- X4 V
  827.               bCompressed=TRUE;3 y' {, h2 F' d& {' }+ o# l9 w) f
  828.               strExtLocal=".\\DownLoad\";' e/ U2 H6 ]6 a1 }+ J7 B7 Z
  829.               strFullName="update.txt";& P7 ]. U* t$ C4 L  J7 @- X& x
  830.               dwProgramState=AP_CONNECT;
    ) a. h/ b  {# r* h2 \. Q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 J. y) V! I& S) ^1 U% C! J
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 ~# o2 A% l0 G+ g# w" }% L* F
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * ]& k! O" S; T7 R( ?
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 |2 e% w+ \% K: n3 G' G9 ]) o
  835.               unlink(".\\DownLoad\\checkversion.txt");& U4 A, x( s5 X; k/ K& R2 P
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    & N4 E5 y0 @4 u+ I  w
  837.               {
    . b8 k; u( b1 \" J
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    $ X! K$ K, _3 b$ o
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");' H! a0 Y2 M) K1 L: g
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");/ t7 u. B/ [' c0 P; Z: ^3 a6 @3 t
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 s! q0 u; x9 s6 k, o
  842.                 3 Q* l  s  b/ ^2 F
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 Y0 i" ^7 ^: l  R2 I
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 H1 H& Z; \( I! R8 \0 {
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 ?, z% O- l: I7 `# n( J
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * H. ]$ I* F9 @, A0 \, z
  847.               }9 r# z5 p  }/ `. t! v; v+ e2 G
  848.               dwStartUpSteps=5;; e+ _/ x, g8 Y  J* @2 g
  849.             }
    # m! G* F2 b( c. V) {) e8 _; J
  850.           }& j0 F  B: P& `
  851.         }
    : l: f. ^* x" D0 _0 Q& |3 s5 z
  852.         else! t" Z: k8 E. y+ `
  853.         {
    ) @( l7 s! a6 f( k
  854.           dwStartUpSteps=3;  u+ c- ]" w, E: O' ?
  855.         }
    ; M. w+ ]5 o; E9 S; S& p" d4 Z
  856.       }
    ! N( h2 `: w( H& v$ c6 V' H* H8 N
  857.       break;
    + y: k/ C5 j" \7 w# U2 Y
  858.     case 5:
    ! S$ J5 F% f7 r& j, K+ x3 T
  859.       {  o7 Z: `4 p2 i
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)6 ], S% `! m  R& F2 \. D" q4 Y7 v
  861.         {
    + L+ I5 k0 f& O5 J2 {$ M/ @- [
  862.           int opt_overwrite=1;
    * w0 q- P3 \/ L8 k, k
  863.           int opt_do_extract_withoutpath=0;
    , k' o( o" e% u
  864.           unzFile uf=NULL;
    9 K+ J8 p7 t9 g8 R0 G

  865. 2 u: [/ @1 L! p
  866.           uf=unzOpen("Wsa.zip");: A6 k9 ]9 X8 V6 o
  867.           if(uf)
    $ G& t& X; T% J5 i0 E
  868.           {, f/ J( \+ I& c
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);) @! ^2 ?4 u8 A& V2 u
  870.             unzClose(uf);
    9 y7 w: Q6 S4 ^% P5 A
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    - U7 R: @# w" x
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    1 W2 w+ C- v6 M( D2 ?
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    8 e( u- K, o! w* B. @: [
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) n1 l& O* l; o+ C6 J7 H, ]% T# F- B
  875.           }
    4 S8 c3 ]9 l& d8 j
  876.           DeleteFile("Wsa.zip" );
    * a6 P- p/ P& i) i
  877.         }! d; ~- u0 Q+ g$ R5 L: G, N7 ^

  878. 6 v+ Z5 f+ n) _, q
  879.         if(CheckLocalVersion())
    * [6 M1 m2 P1 }2 l0 {
  880.         {
    5 x- x7 Z+ d% V
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");- Y3 }4 w, N, T; P6 u+ V; g
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");3 f5 v) D7 @  ]2 R4 M/ [
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");. T3 N6 k0 G) T/ t
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & o6 U5 I# C9 s) {; G
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);5 @) ~9 A, Y- R8 i. t3 F1 D
  886.           dwStartUpSteps=99;/ }- P! B/ k+ p3 t
  887.         }$ v1 Y  D0 t3 E# T
  888.         else- {' f1 Y, x/ D" X5 T2 S
  889.         {
    7 `. u! G3 a7 h9 [- {# |  ?. P+ t) B
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");4 b/ O% H1 f) y
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    1 b9 s+ W! \5 Z' U4 H' ?
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 i5 i5 {* w7 h5 \$ b

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

: u6 B. k# @: s- q1 k
$ n/ f' M, u7 ?: i) w% h

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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