CSUpdate.exe源代码

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

  f! ]" J( M2 R' f4 A% ]
  1. / RevApp.cpp : Defines the class behaviors for the application.4 d) {+ E# @. ~. a- f- A( p
  2. //! ]. h: P0 J7 f6 |3 Q

  3. ) T- O# o6 A0 k4 G* F2 p1 H* \/ I
  4. #include "stdafx.h"
    9 y* e  N1 F9 t8 g, ~

  5. 9 x7 i  c6 I- W' M  N$ F1 g
  6. //#define UNICODE
    7 P1 `6 s4 Z. o7 \! ^8 s
  7. //#include <gdiplus.h>) X8 ~3 q4 G! d& v- I2 p
  8. //using namespace Gdiplus;
    " S* s9 ?) ^- N3 a

  9. ) ]4 Y: ]8 t' b0 J9 y1 U2 n
  10. #include "RevApp.h"
    , a. a- S$ A. X* G
  11. #include "RevAppDlg.h"% q! C' l+ s) V9 M* b1 A

  12. 6 a, m& q6 E5 ]( O
  13. #pragma warning(disable:4786)5 C+ _& i% p7 ?, I/ A
  14. #include <map>, S$ I: n2 `/ V4 k8 |
  15. #include <list>
    3 [3 }& X4 u8 x! w0 y: b- u
  16. #include <direct.h># v# S- n5 A/ B$ @9 {) o# S
  17. . R+ _: C( H+ W) p5 {
  18. #ifdef _DEBUG
      \5 {0 g- I) O- P
  19. #define new DEBUG_NEW, [% B$ D( C3 i: ~  t
  20. #undef THIS_FILE3 C- G1 Z- d2 B
  21. static char THIS_FILE[] = __FILE__;5 J# w, P% A( H; M3 m
  22. #endif
    # _/ Y9 T2 P* f6 R5 @, |; Z
  23. #include "SkinResDef.h"1 Y% D3 e5 E' h" n" B! h& M
  24. #include "ChangeBG.h"+ k& L  O+ F/ e- j
  25. #include "AFXINET.H"8 r' E, W, J7 b: Q
  26. 2 @2 z: a- s* v4 k/ K$ _
  27. #define TRADITIONAL_CHINESE 0
    3 I# t1 o; h$ n
  28. #define SIMPLIFY_CHINESE 15 |$ M& X" V* ?+ ~
  29. #define ENGLISH 2
    4 q7 F2 Y5 d& Z6 D! E
  30. int m_iLanguage = ENGLISH;% Z6 @$ q! ?# O" C! `( h- L  G
  31. /////////////////////////////////////////////////////////////////////////////
    3 w7 s/ y# C) D+ G
  32. // CRevAppApp9 x/ d; S2 f) ]; J# `

  33. 9 ?$ S. P. \. n8 m, [4 ^- p9 f
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ' L/ T5 `* }' j* k- S
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    " Q1 d/ g; ~+ U
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. p/ Q* C2 U& Q0 z* s" v
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!3 _/ F0 L; r% ]: v# ?) v- T1 N5 l
  38.         //}}AFX_MSG6 {  ]  p; J  t8 z6 h+ R- W, ~2 K) }
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    / x% L5 @1 z' y2 l9 b3 x; U' l7 \
  40. END_MESSAGE_MAP()
    1 i" Z+ @" d/ B. I/ R6 g
  41. # n7 \6 }2 {( d$ o# O# a1 C
  42. /////////////////////////////////////////////////////////////////////////////8 m- p, U# U! t  h
  43. // CRevAppApp construction
      N0 P: m  a% y# S, ^6 U
  44. ! E8 `0 W& ]( H9 M1 N: Z; N
  45. CRevAppApp::CRevAppApp()- G# G: q" w) L
  46. {7 Q" U  _) j3 K" n/ G% u  U0 T
  47.         // TODO: add construction code here,* F; w% x5 J7 q  G" ^1 ?7 ]8 X) f
  48.         // Place all significant initialization in InitInstance( d$ M/ l3 M- |$ q
  49.   bDisplayIsBig5=FALSE;
    6 U# v# ?. ]! I$ E  f) s2 ~
  50.   bRestartUpdater=FALSE;
    : n2 w) b7 F0 Y
  51.   bFinishUpdated=FALSE;
      i; u3 j1 c. O9 S5 H4 V5 h- X. L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    $ m* v7 ^# P% x; C+ s" G% g
  53.   InitChangeDataBig52GBKS();
    . b% k5 V. g& P" E/ Y
  54.   InitChangeDataGBKS2Big5();9 Z2 t7 Y5 Q) a) _: c/ c
  55.         //+ f: \  n8 E$ U  Q$ p
  56.         bClickRunExe = FALSE;4 ]0 t0 d8 L! i+ e+ B/ M6 J; G
  57.         //
    $ N$ h! [( a2 L" ^8 i
  58. }( s, l& n( {/ u: G" G

  59. + w7 H3 U2 x/ N/ y( a& e
  60. CRevAppApp::~CRevAppApp()& n  q1 g6 |1 [' {/ t3 g
  61. {
    : i' f) ~1 B3 t, i9 p
  62.         // TODO: add construction code here,5 B0 t1 \8 W$ k, ^" v
  63.         // Place all significant initialization in InitInstance$ m8 L7 B+ M" k, E0 n, @2 N
  64.   EndChangeData();8 @+ N# b! q4 Q5 r% Q$ I5 ]6 f
  65. }
    5 a3 _2 s# c$ w, H1 A
  66. ) O( c/ I7 _9 y7 f1 o2 \3 n9 j
  67. /////////////////////////////////////////////////////////////////////////////
    6 p% W# d/ o- b' V. k. X, M+ `
  68. // The one and only CRevAppApp object
    5 H" k5 J3 F2 m) D% t9 Z

  69. . x  b: ~) q/ b+ s6 C! [9 D9 [
  70. CRevAppApp theApp;4 j9 l6 c2 r  C/ |, s9 x

  71. ) p% z! a, H& m% B. i9 J
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    - v+ C) {1 t; s# B; d% M
  73. {' |1 }/ F/ ~' k9 R4 ]: [$ N8 P
  74.   int iEOF=0;
    : r; a2 ~& e! c$ a' d* [1 B9 b- Q/ w
  75.   char szTempName[MAX_PATH];; D, ?/ f% _5 J7 Q+ O; R) [" r
  76.   *szFileName=0;% }: `) r$ g  X: i/ {- P* r0 d
  77.   iEOF=fscanf(fp,"%s",szTempName);
    * T& {" T0 [  G+ w
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')3 p- g6 N( B# @3 }( B' ^
  79.   {
    * Q7 t: W: W7 W' v0 T
  80.     strcpy(szFileName,&szTempName[1]);# [6 _" D& P% A
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)3 L% c! u, ~$ G. e0 I: C
  82.     {' N- @' U1 j5 F0 }% [+ f: T5 i+ O
  83.       iEOF=fscanf(fp,"%s",szTempName);6 Y1 J0 R  d1 a' O
  84.       strcat(szFileName," ");, f3 a/ |# \3 f) B9 \
  85.       strcat(szFileName,szTempName);; H0 t& C4 m; b
  86.     }  t3 i: u$ u# P$ M( e
  87.     if(strlen(szFileName)>=1)
    7 d3 r! d( k- I' ?
  88.     {
    / Q4 C3 l; D8 F2 i% v9 U. U
  89.       szFileName[strlen(szFileName)-1]=0;
    " T- M% H( m! Q, Q: i. d
  90.     }0 p3 N! F& V) d7 H; \  t; m
  91.   }
    . T0 [& B+ `% M3 [5 n  ~
  92.   return szFileName;
    * g$ L, ?, ?/ P# t$ _1 ?4 e0 T  Y
  93. }
    & w- f, ~+ d: d& d# w

  94. ' u+ I. [% v; E, ^
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)  m9 l. Z1 h! H+ ^' c% N* m
  96. {
      @1 p8 D; `8 ?5 W
  97.   FILE *fp;- N. r, I0 @0 w& N
  98.   char *key=NULL;' ~" p  d$ ?5 }; q" ^0 ?
  99.   char version[MAX_PATH];; J1 r6 e. b  b& L; `1 O" q
  100.   LPUPDATEFILE file,olds;- \1 M6 ]9 P: c: X3 B
  101.   std::map<CString,LPUPDATEFILE>::iterator p;& @: {1 _2 y* T8 S% T' L' t

  102. - ?2 g8 N8 H* @( q9 x
  103.   UpdateList.clear();0 {! b$ x2 Y) k2 y* u5 U
  104.   UpdateFile.clear();) h( y# _1 @! K+ c" }. `6 v1 q
  105.   if(GetFileAttributes(filename)==-1) return false;, l. w7 f9 g1 m* t, |4 m! S
  106.   if(!(fp=fopen(filename,"r"))) return false;( D- P1 @. ^& O, e% P
  107.   fscanf(fp,"%s",version);
      Q$ h9 p/ F$ M1 g" w" x: t  w
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }1 B7 J# C: Z, O8 O) _
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ; J( b. w( u: F: x/ C1 ^
  110.   {: K+ L: C& k7 p1 h, q; v
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 c! G* ~6 ~% L6 y/ K7 B0 x# ?
  112.     fscanf(fp,"%s",file->path);
    * H0 r; x/ s( c) p- c* M3 D
  113.     ReadFileNames(fp,file->file);
    $ q" _5 t% {( y/ G  D; d
  114.     strcpy(file->full,".");% B8 S5 U5 _+ x( [2 e5 z# b* e* o
  115.     strcat(file->full,file->path);8 G+ G7 [% ~; T# c& l+ o
  116.     strcat(file->full,file->file);) O# K9 l2 w1 o
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())6 |) J5 u5 e5 E, F
  118.     {! L( O! P2 S7 A, f: e% m
  119.       file->vers=(float)atof(version);
    7 k: G2 t# W/ O* M
  120.       UpdateList.push_back(file->full);- R8 ]/ U, {) f0 F' l7 {- v
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));, U& M7 {  x$ z
  122.     }. U. c, `9 J5 |$ r5 f6 I# q
  123.     else$ H" A' Q9 M& U( v( z
  124.     {) T  E! t$ V$ S' D
  125.       olds=(*p).second;" m! [: u5 H) `$ \) s
  126.       if(olds->vers<(float)atof(version))$ y. B8 K# [9 }2 d8 W
  127.       {
    . R/ e% G. {! T( H  w; p  U
  128.         olds->vers=(float)atof(version);
    " O8 \! Q1 p% f; x8 t' L
  129.       }
    * T2 X5 z" w6 c* F+ J
  130.       free(file);
    0 L  i/ U4 x4 f+ R% p$ @7 x  Q* U! }4 J
  131.     }
    7 ]4 n, Z/ O9 q! Q; ^7 Y. ~
  132.   }$ a7 [$ N, n, S
  133.   fclose(fp);
    9 f+ q6 F& c. X# T
  134.   return true;- [9 _+ x/ N2 i' `
  135. }
    6 C1 v' n. f7 H

  136. . m1 g* v1 E' N' L
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ; p1 F, K. x" ?5 Y' m  E- u
  138. {" a; D, o  [% s  k) @
  139.   TCHAR  szFull[MAX_PATH];
    ( |  w* Z8 U6 x# S4 G5 h
  140.   TCHAR *token,*inter;
    / v3 a$ r; [% \+ R2 g& s
  141.   *szPath=0;
    : a# |' X  @/ b# [
  142.   strcpy(szFull,szFullPath);
    $ A& G+ Y( A$ c
  143.   token=strtok(szFull,"\\/");# z/ E( y- R5 Z6 }0 o/ H) p
  144.   inter=token;
    6 r% L- S/ R; ~' ^" z  Q
  145.   while(token=strtok(NULL,"\\/"))
    6 R4 P8 v+ W2 _2 L* }' N  R7 B$ M
  146.   {
    $ j+ [! M( U* O4 x6 r
  147.     strcat(szPath,inter);
    " B# W8 Q5 P$ |  x7 z3 m
  148.     strcat(szPath,"\");
    ) C* o# r: t% x1 R
  149.     inter=token;
    : M7 n, q/ u& M6 O
  150.   }
      b% G. A* f7 S' ^' J/ F" h
  151.   return strlen(szPath);
    9 s. m4 }& Z, D
  152. }
    9 m+ i# j, R2 D& d: X1 L' s0 [
  153. . n# d% v( [4 Q) l) g# ?
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); L* R( @' g* v$ N. A
  155. {( X2 J  W9 z& R8 a$ I
  156.   DWORD attrib=GetFileAttributes(Target);
    7 z# ~  o& F% [/ s
  157.   if(attrib!=-1)/ w9 M( w' z4 }) i+ l
  158.   {
    ' P2 x  o" y; v) S
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)); c$ A8 O3 F2 Y2 p- G; G; ^: \% j
  160.     {
    & X5 U! e' a/ G  x' I
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    6 G% L$ o" u8 `. ?. M3 ^
  162.       SetFileAttributes(Target,attrib);5 t: `5 j6 [' [9 t7 x% L6 h) ]$ O
  163.     }
    ; V/ a" u% s$ Q3 z
  164.   }
    1 p$ k; C+ b: x
  165.   CopyFile(Source,Target,Erase);
    / Z8 m0 A8 w8 l
  166. }( _+ x& H6 S; s) ?. J3 w
  167. * [( U) K5 g6 `* z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    % ]; A( U* _6 y. q5 B
  169. {5 a+ C) y8 l( u3 i
  170.      FILE *fp;
    % g5 m& l+ `, f. ?- J' x3 p
  171.      char  szBuffer[8192];: Y+ J" Z! c/ y9 l/ u" P; h
  172.   va_list  argptr;. {. S% o; e6 R
  173. , }) `6 }. ^' ^- G
  174.         va_start(argptr,message);
    / i5 c1 d( d- q: r
  175.         vsprintf(szBuffer,message,argptr);+ b- G* ^9 {6 m, Z  ]/ `
  176.         va_end(argptr);& ~% m. B# C: @0 ^' m$ O
  177.   fp=fopen(FileName,"a");, q' Y4 l$ L6 n5 [
  178.   if(fp)4 q# t9 L0 I" ?" ?
  179.   {( L) h. ^- O2 Z* F  ?
  180.     fprintf(fp,szBuffer);
    - z4 i2 G+ j. s! m
  181.     fclose(fp);
    6 b. H( x6 l5 c; B
  182.           _flushall();
    : n  @# C& ^8 I" |( {4 e
  183.   }& K3 m* s- _5 E. B7 _" P
  184. }. f3 g. Y: R; S# k8 t  c0 v
  185. ; m9 s% H: r7 K0 Z
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    - P0 n3 e. h: L, W
  187. {
    % H( R0 P) z' `1 H
  188.      FILE *fp;1 z. K* i3 |1 p, z# q7 T
  189.     DWORD  attrib;
      z) g! Z& Z2 P7 _; r! h8 l9 E
  190.   attrib=GetFileAttributes(FileName);7 M- F  r# E; V. k7 R# S# ]
  191.   if(attrib!=-1)
    0 r2 D. k/ X. o- V8 x! s/ R
  192.   {) d6 s7 `) }/ T+ `! ^# @
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    # E; H1 g6 t- y) v9 T
  194.     if(!SetFileAttributes(FileName,attrib))7 v0 \$ ]/ u6 `0 l# |
  195.     {
    * k2 ~4 o) l" t$ g
  196.       return FALSE;$ F9 ^7 O, W0 U4 [9 Z- _1 M0 N
  197.     }
    : O8 [" {9 e- ]$ w9 ?0 b+ c4 t
  198.   }
    ' x- ]3 @: k5 J) F' ]
  199.   fp=fopen(FileName,"wb");$ }( w' D4 _% Q$ S7 C
  200.   if(fp)
    4 ^2 t: }; G% ^9 L% A
  201.   {
    4 l0 e" V8 h2 d# ^+ b2 G7 C
  202.     fclose(fp);/ y- R. f# B( Q1 X
  203.   }
    5 t2 i! x8 u9 d2 s
  204.   return TRUE;5 P) B6 f/ L! d
  205. }
    9 W, ~9 T: x* J( }5 r7 N
  206. ' u0 c8 s3 F5 X
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ M8 P+ [" H  T1 l
  208. {
    1 @+ y8 t5 {" [$ D6 v& I
  209.   char filename[MAX_PATH];$ G* \+ r) y6 s. `% A2 |# R
  210.   LPUPDATEFILE file,olds;
    " r' \2 Q+ D2 A# d. _1 ~
  211.   std::map<int,CString>::iterator i;
    & L3 N9 J" i+ I' f$ X9 @/ w* }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) o8 S) ~) z7 x
  213.   std::list<CString>::iterator l;$ m) X! a& ]2 V) i8 E
  214. 4 ]+ j( L5 S2 }& T7 k! r
  215.   if(bFirstUpdate)  H6 t9 s$ \. {( _3 O
  216.   {
    ; g4 ]/ I0 \7 v+ j1 k" l- Q3 z
  217.     dwCurrFile=0;
    ) W, s0 c* h9 o9 V" O9 Y
  218.     bFirstUpdate=FALSE;
    , v5 ^- A# p5 w
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( s6 L+ l$ a! i
  220.     {
    & d- l6 o7 |5 q: W
  221.       dwTotalFiles=UpdateLocal.size();
    ' R! k: a# _% ~  Q' e
  222.       dwDownLoaded=0;
    & T1 {; N/ C9 a$ h4 h3 K
  223.       bSilentStep=FALSE;
    ( q% x+ \% B& W) o! N1 A) S
  224.       bCompressed=TRUE;
    5 ?2 ^/ ^0 Q( r/ P4 O2 [$ A
  225.       strExtLocal.Empty();9 h( N/ k2 A' r) B7 K9 s
  226.       strFullName=(*i).second;1 `, U3 u/ f% L. c" P
  227.       dwProgramState=AP_CONNECT;
    , q2 T4 ]- {9 z, {+ N6 l) W- L
  228.       return TRUE;2 J3 @- e+ m2 K' F% {7 ?
  229.     }- g( U& y- J$ z( _' {/ O5 V7 \9 c+ K
  230.   }; w8 A! _* X" N4 k
  231.   else if(bRestartUpdater==FALSE)2 M9 Z; ~! Z, m
  232.   {
    + P! V5 `- S" i& A6 f- j% A$ i
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())9 i' ?/ y% Y3 l3 j- {, X4 p
  234.     {
    5 @# s7 H5 W, J2 \$ {  A# X* [
  235.       file=(*p).second;6 `9 ~3 e* p8 x+ ]# F8 f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    3 P/ e" h" l# z  w. [
  237.       {  `5 N) k3 V8 K
  238.         olds=(*p).second;
    0 w( ~$ m$ [  B3 n. r8 r
  239.         olds->vers=file->vers;
    2 r+ ?8 m, g4 T/ A3 N8 q2 I
  240.       }
    & B+ p/ c+ F+ Y
  241.       else" |/ q& T" ?; u3 M0 e
  242.       {! }& S, T. W6 u3 u: ?/ s! f
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 p; J; \( N4 {1 o
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    + v; Q5 ]4 Z/ _* k( X3 i
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));  r1 i0 C1 t% B3 L6 |
  246.       }
    $ t. y( z7 r0 [/ b( \
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");; M8 j% i* o' ], ], [6 K4 p$ a
  248.       sprintf(filename,"(%s)",file->file);1 h, p$ C" u4 o0 T- O3 [
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % G# R# M. F' E" Q; p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }! F; Q! ]2 @& S& N8 B1 b/ m
  251.     }; T$ R' L: J; {* X- c$ v
  252.     dwCurrFile++;
    / e- E: O. O3 _8 U0 B5 l
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), u3 K! a( G( Z7 ]' q* a" f
  254.     {; _. M* i; T" A$ [) T0 Q
  255.       bSilentStep=FALSE;8 ^  d% Y' J/ F7 U
  256.       bCompressed=TRUE;. N" p) D# z& @. i  H" d# q/ g: p9 N
  257.       strExtLocal.Empty();4 a5 w4 _4 \+ a1 n; h" I
  258.       strFullName=(*i).second;( h; X2 ]6 E# Q: I" I" L% P
  259.       dwProgramState=AP_CONNECT;
    4 m3 ~0 y6 e; a
  260.       return TRUE;
    6 _9 w0 P# K$ |: q) P, Y
  261.     }
    % E, S2 T- x' B9 M/ z
  262.     if(!bRestartUpdater)3 T+ E' F6 N" r& H
  263.     {
    ; ]# ?5 a/ c4 a
  264.       int iCurrSize,iFileSize;
    3 Y& l/ a8 i) |# K
  265.       iCurrSize=0;
    - Q3 \  I5 L* x% N
  266.       iFileSize=UpdateList2.size();
    ) `3 b" n" _8 Y( H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");, [& k# r1 S6 s; q+ K% I/ _4 `
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    5 m- U; M; T( v& G+ K1 y8 D
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    8 ^6 D0 @8 ]4 a1 J
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( B4 i( X$ q. S( a7 }; M
  271.       Fclearf(".\\update.dat");
    5 t" a% m% P8 H& _, W
  272.       Fprintf(".\\update.dat","Bloodyf\n");2 H" n& Z3 \- v6 }0 K
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)# E+ L1 ?9 {  ~# N" h
  274.       {
    . z' K+ ]1 J+ D* F: x7 q) k( H7 ~2 i
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  g/ o# V# t0 d0 |$ P* U* [* N
  276.         {" N! h) ^3 d; y0 K" @) z9 |
  277.           file=(*p).second;, S: i3 z2 f1 A$ O2 F  D/ ?
  278.           sprintf(filename,"(%s)",file->file);: o6 A% K# m: n3 ~) z, f0 K+ `# L1 \
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 }, A% s# H5 k- }" N( C
  280.           iCurrSize++;' @- @6 V) Y4 V8 u8 b$ [; S) F
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: j5 A) B- S& w" w1 b  a( P- d2 E/ v. ?
  282.         }& C, I: \% c: Y* z! R
  283.       }
    8 `4 l9 l! s. f  t6 L; X7 q8 `
  284.       unlink(".\\update.txt");
    8 n' `7 @8 u# z' O* A8 L8 P! m
  285.       unlink(".\\update.tmp");
    7 `0 ^) X9 r, Y' a7 h
  286.       Fclearf(".\\checkversion.dat");& k% b* O3 S: U1 u/ f5 _! o! a9 Z0 j- F
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ) T3 u+ M* b8 r+ n: J" Y8 o
  288.       if(UpdateLocal.size())! O# W* J5 i5 o1 o- P7 d0 b
  289.       {
    ' T/ e" H8 m, S( R, ]. ~6 m
  290.         UpdateLocal.clear();5 \2 T3 A# a- Y) |+ Y
  291.       }
    % t, a' h! _; T+ ]+ k
  292.       if(UpdateFile3.size())4 B7 t% b; C' e7 V5 k% ^
  293.       {2 s, v1 y9 c# o/ V
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; B# j" B7 D4 A. D
  295.         {4 v! m( _; C3 U4 G+ v6 ^: w
  296.           file=(*p).second;
    5 E. y0 [! t& s$ w  X
  297.           free(file);6 j3 M& q: l5 y# j+ ]
  298.         }: ^" e- q( w" o1 {- e
  299.         UpdateFile3.clear();- p, Y, W# U! v3 i7 y7 g
  300.         UpdateList3.clear();1 Y0 ?+ `+ S( [/ b# g7 E# X
  301.       }
    2 ~9 m; b8 ~0 a. k' q: r$ {, F
  302.       if(UpdateFile2.size())
    , {! a8 H) S  T/ }) A
  303.       {5 E9 n) Z8 L- \/ u, G  v3 Y% E
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" I: y3 Z0 K& U; ?1 q
  305.         {
    3 ]& H9 }: g* ]: |# S
  306.           file=(*p).second;
    " O& L# a" d# R% ~
  307.           free(file);
    8 o9 D3 z4 A6 A, E1 x% _
  308.         }# W) C/ g* ^$ G9 V( t  e
  309.         UpdateFile2.clear();
    - }0 i( t" o# q
  310.         UpdateList2.clear();
    * R. C* F* J5 k" L# |: F
  311.       }
    7 e/ O1 A% `6 v9 Z! E
  312.       if(UpdateFile1.size())
    3 Q; L0 _- p; D, |2 ]
  313.       {
    * v5 _9 O4 Y# E3 V3 H; L7 u
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 H) S7 y4 O% ^1 V* [2 ]
  315.         {
    * T  l! c- H- [' m! i; n% x
  316.           file=(*p).second;
    $ r7 R6 o0 |9 ~: k" S
  317.           free(file);: s3 v$ c* T; S& `0 N6 b  H( y# }4 @
  318.         }  n: b  N. G1 ]) ~2 D& S& `
  319.         UpdateFile1.clear();3 v# u0 u+ x" Y) }- r
  320.         UpdateList1.clear();
      L" b# u( V: M) `  r+ T$ K% |! x
  321.       }$ s  e/ H% [% B/ x5 u1 l& j3 R
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));  O4 x8 R) d$ b+ m. F
  323.     }/ R4 Z, y5 ^& u6 P" |* E8 k3 w
  324.   }/ r6 ]8 n, K1 [9 \; N6 U
  325.   return FALSE;
    : X" d" c$ Y: `, T+ K. [
  326. }, O* N% C* w! v, g/ E% k$ f  N' N
  327. - f% A* i1 N0 n+ x- _5 S
  328. void CRevAppApp::ClearAll(void), }2 `* {4 A1 B- U/ U2 r
  329. {
    ) h, ]; b5 g! O# i& p# Q
  330.   LPUPDATEFILE file;3 p5 n1 i, Y( w) w( z- v
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( r+ ~* p# U' \# y0 p" c! x

  332. 5 M2 }# q6 Z6 l. ^' j
  333.   if(UpdateLocal.size())
    9 |7 C/ N3 h3 X
  334.   {7 S8 M/ r  u, }; i0 H! q
  335.     UpdateLocal.clear();1 Z0 K: a) t7 e! K5 N
  336.   }- k0 u+ p8 k* H3 J. h# D
  337.   if(UpdateFile3.size())
    ) v4 w' p9 C/ ~; U" I0 d1 g0 L
  338.   {
    * o! z9 I/ O4 V9 A6 s  ]
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): b# D3 G+ }* c/ q
  340.     {1 D5 [( u/ R' I) Y7 U  ]: Z
  341.       file=(*p).second;
    ' I. C0 G& O0 X- ^9 }
  342.       free(file);& ^# ~" D, z/ a2 B) f: \. }
  343.     }
      K6 ]* v( V- }, a: [
  344.     UpdateFile3.clear();
    8 m, p: M  B* P! G+ \
  345.     UpdateList3.clear();; q* |7 x: O; `* L
  346.   }
    9 m8 _; M5 [3 I9 [' @) Z
  347.   if(UpdateFile2.size())& V6 T. S  e5 X' w
  348.   {
    8 \5 P9 H/ T$ d9 T3 L4 L, j
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + x$ K; ]  n" n3 q9 O% I! N( r# \- K
  350.     {
    0 K5 E  r0 W3 w( l$ m- W
  351.       file=(*p).second;
    * z6 s; \) K; [- c  u/ m; z4 a
  352.       free(file);
    ' X! D; c4 \4 N/ l9 W
  353.     }
    3 F) p: J9 Y& Z0 `/ v3 X
  354.     UpdateFile2.clear();
    0 p- ~; |5 w5 z9 k. k- @5 I
  355.     UpdateList2.clear();
    5 E) L, m( Q5 \! s
  356.   }; [+ h* p. I& d  R+ U
  357.   if(UpdateFile1.size())# {9 w% S( p2 I$ r+ ^& ]+ y
  358.   {$ \, T( S" J7 V# u7 r- A
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 g* G) l; w* S) H
  360.     {' F* m' _: L8 f" c( v0 ?3 _
  361.       file=(*p).second;
    2 f1 M$ P9 @+ Y) S# w: U2 c- {
  362.       free(file);3 A: N) Z0 R- M  x/ {* t% z
  363.     }( H, ?2 C1 d$ D: z8 X
  364.     UpdateFile1.clear();
    + H# {( L# K1 L- _0 g* l: j* }4 f
  365.     UpdateList1.clear();: Y- e; f0 A9 e8 K8 ]3 ]* O
  366.   }
    1 {% h3 _) r( [  u' Y8 L' X9 i. t& Z
  367. }  
    / F' m  a9 ?' G' m8 E8 W
  368.   . d/ y3 u" r5 t* k* w' J1 f
  369. BOOL CRevAppApp::CheckLocalVersion(void)3 T+ ~8 N+ U* l  e, t2 O; y, r
  370. {
    % O2 `1 s. x7 N% z; v
  371.   int c;1 z5 ?9 M, |  z+ u/ m  M3 ?
  372.   LPUPDATEFILE file1,file2;
    3 e# f' i, b# C" [( o' k  t
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;. K. J/ s7 j7 F5 p# }$ ~2 j
  374.   std::list<CString>::iterator l;
    , }2 j$ p/ M- ?% x! ]* G9 M
  375. 4 E3 T" `6 l3 ~3 H. }  o0 i" u4 P
  376.   UpdateLocal.clear();
    ( m( m2 d$ w" b, b
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);0 N! T5 ^/ ^4 s, `4 F. F0 r# J
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);, L8 A$ e3 }, {0 W
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);1 K% A: K+ `& X. i
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    6 r# A7 `9 l5 Q4 R
  381.   if(UpdateFile3.size())6 J; @) D" q. A1 T( _4 w6 ?. O& R
  382.   {
    0 s0 Q* f) E7 I, Y: j5 D
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)/ a6 |8 g6 o9 b/ d' _1 p& X" q) k
  384.     {- M3 n  O+ c; o# l$ s
  385.       file2=(LPUPDATEFILE)(*i).second;
    1 i' m6 d5 \' p; M5 n3 F
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' `+ z7 c' C% Q- ]
  387.       {+ ?8 X( `% \) u  J8 C* c4 r
  388.         file1=(LPUPDATEFILE)(*p).second;
    4 X1 E8 E0 ]7 A. i
  389.         file1->vers=file2->vers;& }1 x* N. G/ u4 p! E
  390.       }
    " w( I( R) A# c0 h- g
  391.       else
    . l/ Z+ |% ~+ T: Q! i* E
  392.       {
    % O) I+ L) `6 ]9 e) ~* a
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! T" x5 o* Z2 a# J
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));+ |- O9 q, P- B$ u
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));+ ^5 n5 h7 k2 H- }
  396.       }+ m7 I1 m5 _# ^8 ]0 w2 C
  397.     }* @* q; j/ r: ?; h+ U5 X4 b2 C
  398.   }1 R- C" h5 |: s
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++). M7 I' W. K) ~' X/ U! y
  400.   {% ?7 o; J# A; T8 A
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    , T2 X% C: z# R3 V, X
  402.     {  \- J7 O- f/ d. |
  403.       file2=(LPUPDATEFILE)(*i).second;% a7 ?& `. g; e* j) [# i
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% q/ j7 X2 {* l0 b) R
  405.       {: j) ?+ M& z% k! @
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 _2 H' b3 r! G, c8 q& |1 C; |0 a* j
  407.         if(file1->vers!=file2->vers). ^3 T7 a6 J2 p( \
  408.         {
    ) s: l& g" G* j9 a# J2 ]6 O
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 Q1 A( d4 p, g: y1 _/ ^) a
  410.           c++;) y8 q9 y# w( s+ j8 @
  411.         }
    * w3 F: S- q: I2 F8 G
  412.       }# |3 E/ O5 l7 v7 ~+ I6 _1 v
  413.       else
    ; k. g! I6 L! X( I
  414.       {/ C. x  b- S. E# Q0 z, c; ~9 u
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 ^& X+ ?2 }2 w3 z9 w/ R  |( F: x
  416.         c++;" c, Y$ v% g& Z+ A* X* x* Y, z
  417.       }
    0 L+ q  @% H) t+ c- @
  418.     }
    $ L' ^# |" b  P+ S$ m
  419.   }( V" m$ a% r' ~7 g8 b
  420.   unlink(".\\DownLoad\\update.txt");
    , @- Z% o* \( i& ~5 p
  421.   if(UpdateLocal.size()) return TRUE;
    % c1 w) g9 q5 u: M3 a: ]# s8 h4 W
  422.   else                   return FALSE;. L( l7 ^1 N; @
  423. }
    8 m8 ]: O: z% Y/ r7 G( ]4 I: S
  424. 9 l/ m$ @- r8 o
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"1 J5 G) }$ B7 X) }& Q4 w0 w: T. C
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"+ O" L4 t% m$ z- b; J5 N/ g
  427.   `% a5 z( f6 r
  428. ; Q( l5 B; u" s) F$ Y

  429. & R- r- Y( M& E- x5 [0 w
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    9 m0 U, ~2 U7 F& x
  431. {3 z1 B6 L( z* I# _: q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;* v& s" f- d/ g; T) l$ O4 `
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)/ h# [( A9 F; m1 ^6 V* C" w$ ]4 E
  434.   {
    3 B# A8 u! P% c; u
  435.     char szLanguage[50];
    $ p& u1 [9 O/ d( h* N
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 r8 ^' R9 X9 h- \! Q  Q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;( Z% z5 g9 Y7 I8 q. v
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ a# s" C+ H1 y4 ~7 Q
  439.     else                                   m_iLanguage=ENGLISH;" u7 H: ?' q8 f6 Z# Q6 _# D2 j% x
  440.     char szRegister[100];/ ]" h* ?9 m  V. h2 k. R
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) f9 c: i9 Z0 c- N. g& i# U
  442.     strRegsName=szRegister;
    , @) G4 u7 I% G
  443.     char szPatchURL[100];
    2 u/ j; l! R0 P; e% K
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& h- p2 w+ q9 r# n# P( m, B
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! G$ o7 d. D' n4 ]
  446.   }
    & E- ^& C7 E/ c) Q1 W. L; b
  447.   else& N. i" x" T. [$ m
  448.   {& k' p& S6 f" e* v
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : w' `4 G: N7 K! Z* a# s
  450.     strRegsName=DEFAULT_REG_URL;
    . O3 k3 X! g0 J& i
  451.   }
    & ]- s% _4 ~9 `* y" n8 C
  452.   if(GetFileAttributes("hosts.ini")!=-1)  q$ G+ q- H7 l. J" s
  453.   {9 f- @" n1 L5 ~( d# k$ |- I- A1 `
  454.     char szIP[50];8 p# c, m. M1 z+ }
  455.     char szDIR[300];. J7 _4 `% _5 D! s" u; G$ I3 i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))$ a% Z3 g# v- w6 W" g6 b# i. a
  457.     {) N+ _4 g: z/ [3 a( L
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");5 J$ _6 }7 \  K' \2 Q$ Y4 |0 x- d; |
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# A6 \2 b+ o& V) }4 S
  460.       strHostName=szIP;
    # ^) o9 O* ^8 D6 p
  461.       strHostPath.Format("/%s",szDIR);
    8 Z( C. |6 S0 R6 n2 d9 z& w4 w' H7 I
  462.     }
    + [' l! d* k3 z4 l7 F+ q5 ?5 h
  463.     else
    ( _2 b2 w, F7 G, f
  464.     {5 y0 [- x3 [! B8 b7 {
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , r0 b# {4 u( o8 t) D
  466.       {$ G0 s0 f" U. F: h
  467.         char szLanguage[50];
    1 w4 w( K8 J' Y' w5 o1 J" D2 ]
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ) m; F4 y: H/ o" U
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + S# e7 o* f; d: [* T6 m
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 {7 N: v" X* W2 N5 D: g
  471.         else                                   m_iLanguage=ENGLISH;) c8 g3 k! |# V8 a% X. a( ?! j, C
  472.         char szRegister[100];
      {) q2 M/ ]' |! r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' ^3 D( ?3 R. B) \7 U
  474.         strRegsName=szRegister;; G4 n' z6 x4 N! @: U* ]
  475.         char szPatchURL[100];
    9 Z, i! ]- ~. |( N/ g* c# x* \
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 M, C% I1 \) F- `- i* F
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( l& |0 y5 A5 f8 P1 g
  478.       }
    $ N( F7 Y2 F! w; [4 o! B& m
  479.       else
    8 b+ u8 t/ A/ \( l# D4 X* W1 W" I5 b
  480.       {3 {! Q2 r' i9 y6 r! m
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # ^; o/ t# r2 k% ?, i0 k
  482.         strRegsName=DEFAULT_REG_URL;7 L2 C; _) ~" O, Z% n) I4 W& J  c
  483.       }
    / y/ _7 s# l: x$ ^+ m
  484.     }) ]9 ~. s4 L( M5 K# q/ R
  485.   }: L6 J+ \" H0 e6 A+ N6 M
  486.   return true;
    ' j$ Z  A" _; h9 n
  487. }) N; ~2 s' R! z& V: T/ M

  488. 8 z, l( |7 V$ f
  489. #include ".\ZLib\unzip.h"# y0 D8 X/ l5 n. }; |
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);3 w0 m. K1 j& n& ~$ ~2 V  `
  491. /////////////////////////////////////////////////////////////////////////////
    4 p  M, ~9 _) T! j
  492. // CRevAppApp initialization5 c$ v/ g1 X" }/ x

  493. % E3 E+ u& ^- Y  A- ]/ O- T
  494. BOOL CRevAppApp::InitInstance()
    9 \! T( h" h$ g1 P, H
  495. {
    + \1 z! j) `) A6 j
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ! U! S9 ?& K4 R6 v9 x  _
  497. $ J! [( P7 Y" G' V( |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);" u* v) O/ d3 K& h+ b& a6 `. m+ f+ i
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    - {0 H: C. W! V
  500.   {
    3 H; A5 K" a9 ~% x% ?
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    3 D6 X* H1 T) V) d. H" R9 }
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    $ @5 G$ P+ v) N; `& [$ `. r  y1 e- }
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    # l" l  k: o# c. K
  504.     {. k+ i8 R8 `2 ^/ L4 q% Y/ s
  505.       strcpy(szPath,szPathTarget);
    * P1 F. v# j5 q7 a8 h1 T) Q
  506.       SetCurrentDirectory(szPath);
    ) z  _  n# W. x3 h% w
  507.     }0 b) t0 p- a9 z# ^* p
  508.   }
    6 ^$ i; M/ q# A  q# L  t
  509. #ifdef _DEBUG' u& i& C* x  b% s2 w3 ~6 f
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  H; t4 I0 g: w: {
  511. #else
    9 A$ W9 L: f! i8 m$ ?/ r
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))# m1 _" [# b: a1 N7 V
  513. #endif+ Y! ~! e8 Y% `
  514.   {
    + A/ r7 @3 a7 t! Q0 ~& i! t* S
  515.     char tempFileName[MAX_PATH];9 ^5 n* c0 d/ n7 X2 I+ C) Q4 [  s! ?" r
  516.     strcpy(tempFileName,szPathSource);
    . ]; M& a& I$ b1 ~  P
  517.     tempFileName[strlen(szPathSource)-12]=0;& T$ I; E: R2 C' s5 V
  518.     strcat(tempFileName,"\\$CSUpdate.exe");  f# \: i+ p5 ^+ J
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);( j/ n& L$ s! _1 |6 {  \
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);# L! c, {3 D1 {& \2 F1 b( x
  521.     return TRUE;) W4 K+ D- l% x, u- j
  522.   }2 [9 Q$ n5 e% t" d& E
  523.   // Nuke 0118: Delete run.exe. o1 Z  P- T4 U2 Y" B
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );& N8 W- U4 s; K) p% _  c7 k
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");2 R4 F$ E; o/ E
  526.   if(!ReadCfgFile("Config.ini")), y' p, |5 n3 i6 R' t# `
  527.   {+ `4 b2 c! C5 ^+ R
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    4 O* s/ _  i" B% B
  529.     return TRUE;
    6 _/ T4 a+ b* x( }' I: ^
  530.   }; z8 h# a* u& A& e: A
  531.   HANDLE mutex;& o/ O) L* B! b8 S" m! D
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))3 P/ a9 q& U3 S
  533.   {) V* M' C2 t4 T! u7 j2 T6 @
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    6 W) h9 {( L! C5 j
  535.     {
    2 n9 s& R6 e- r7 _2 |( e9 r
  536.       CloseHandle(mutex);
    2 d! u# Q% A" a5 K
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. T) ~# B- J% y. S  n5 f) B% D
  538.       return TRUE;
    ) P4 T1 \/ _4 Q( i
  539.     }
    ( F' Z# I$ H8 U' k1 E: R- L
  540.   }  6 s- W6 `% c( G* R
  541.   CloseHandle(mutex);
    8 G1 r2 b2 Y3 _# Y  M) j* g( y3 S1 f

  542. 9 c$ Z+ N  A9 u
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);+ A2 J0 G9 U( b) L8 Z; G/ I4 K
  544. : C% g, h: o( w
  545.         AfxEnableControlContainer();4 _' A. F# W4 s# K

  546. & f# k, ?9 u# M
  547.   bCanUpdate=FALSE;5 _! D$ @' `( u0 Y4 S! C
  548.   dwStartUpSteps=1;
    6 U1 L& N. Y/ f  t! r4 C
  549.   dwProgramState=AP_NOTHING;
    2 e( _3 g. p" i; E" U, {
  550. 0 O% V3 m. {& O4 K: A2 W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. D$ t, M$ F. q) A

  552. $ R2 K4 g* ^& J; \+ T
  553.         // Standard initialization9 ?. f7 O* g, l# `
  554.         // If you are not using these features and wish to reduce the size
    % ~" [; L, C9 a2 z6 a& s
  555.         //  of your final executable, you should remove from the following
    $ K  a0 P/ i' h) f% D, g4 z6 E
  556.         //  the specific initialization routines you do not need.4 d! m; E5 @' V, v3 e* T! J

  557. . G* k- i  x& V/ P* {
  558. #ifdef _AFXDLL$ \8 H5 R, g$ u+ f/ a9 z) Y8 g$ C
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    2 ~, P  l+ v" B' L
  560. #else  u# M! `+ [* q5 g$ b, @
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically: {+ [. O( e5 @0 @5 R- c
  562. #endif
    2 H8 O9 m+ K: l1 y4 ]

  563. ; `6 `/ U$ T8 D9 R
  564.   dlg=new CRevAppDlg;
    * I( X) b0 S: c) Q/ \) h
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    # }0 x2 G- V- h1 s
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    8 s& a# z: K' ?: W
  567.   m_pMainWnd=dlg;
    $ Z6 c9 K0 _3 ^9 y. [6 X

  568. ( [2 e+ u0 R% J7 I0 O
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);; M9 E7 w5 |% n/ R

  570. * O- u8 M# S- C" Q5 b3 h1 E! }& |4 j* @
  571. //  GdiplusStartupInput gdiplusStartupInput;- j* x6 Y0 \9 z! d- X
  572. //  ULONG_PTR gdiplusToken;
    9 f$ J$ y9 e* P9 u+ @
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);) u2 m7 O$ I6 c2 E% P6 o/ A

  574. , Z/ c( o1 G/ f
  575. //        CRevAppDlg dlg;) U! ]6 \: B( I. L. F
  576. //        int nResponse = dlg.DoModal();
    8 D, X5 R( u7 b% m( x, g! f3 k2 \5 i
  577. //        if (nResponse == IDOK)  P* G. F, V1 f! R* U$ r
  578. //        {( A9 h. O) C% n7 @# ]- g5 ^
  579. //                // TODO: Place code here to handle when the dialog is
    ' o0 \' A" r" i& o$ x  Y& F
  580. //                //  dismissed with OK8 O( c; S. Z, N
  581. //        }
    % i- }( L! I$ S5 O, E. ?; n
  582. //        else if (nResponse == IDCANCEL)
    # Y, s$ V; E& E: V6 M
  583. //        {
    3 c% h: z0 i0 C) g& @! N" f
  584. //                // TODO: Place code here to handle when the dialog is
    9 ?& A( n/ r+ S7 t) M( y! f
  585. //                //  dismissed with Cancel+ @( k' K9 N& W' ?4 A3 S
  586. //        }/ a/ }+ x- T# m. h- s
  587. 5 \# ]' P4 X4 e& r- T3 a- H
  588.         // Since the dialog has been closed, return FALSE so that we exit the3 h& b2 a  N: N& B
  589.         //  application, rather than start the application's message pump.6 D+ Q8 N* E& G% t; E
  590.         return TRUE;5 Q! V, _9 J! ]% u( N( K
  591. }
    & H+ |$ A! Z5 R% s; u! ?5 g, n
  592. . `( @2 y) a3 G1 i) S
  593. char *CRevAppApp::strtok3(char *pSource,char *token)# Y! e5 ~" a% i- W/ x$ C
  594. {7 t$ t; A$ i4 i0 A/ V7 J# l# d
  595.   int i;! X/ b0 }# T# T0 B7 E4 p& _% \
  596.   char *szRet;& `+ I9 x9 v  L3 u! M
  597. % p4 D! K3 p- U$ P
  598.   if(pSource) { itoken=0; sztoken=pSource; }* F$ T9 i, {5 U9 O- f5 A) V# d
  599.   if(sztoken)% U/ \2 R) V1 v* \( T  a+ U
  600.   {: ?7 M2 V2 l! v( {1 |6 x
  601.     szRet=&sztoken[itoken];7 Q' `7 j6 y# _8 d
  602.     while(sztoken[itoken])5 H( |$ e) V( v( |
  603.     {
    ! [1 |1 g5 N5 P3 U' U6 ?% b
  604.       for(i=0;i<(int)strlen(token);i++)
    5 ?& M' ]7 {. F: z, \
  605.       {1 j& e7 c. e. ?5 h
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])6 g# \# ^: O% U
  607.         {, l- ?7 z- l" Z+ C1 l
  608.           sztoken[itoken++]=0;
    + t: E8 [5 y2 I  g
  609.           sztoken[itoken++]=0;
    5 F+ @) _2 k7 y/ A5 T8 T5 O
  610.           return szRet;, ^2 ?( Y% }* i/ G
  611.         }0 E8 s  k, w  X5 t7 y6 k1 t/ F
  612.       }
    2 S: l( B  i: c9 F) B- m
  613.       itoken++;
    ! J6 ^5 \3 z  f4 D
  614.     }
      v. I5 }) u/ I. b4 b
  615.   }
    - q& h9 X& M8 Q4 c& [
  616.   return NULL;4 V8 q8 Z+ S: o
  617. }
    ! e9 i* j+ q9 V# I: J& r. B

  618. 7 L& |* ^% h( z, m7 M' e
  619. void ProcessProc(long Total,long Current)
    ! p$ X8 @& \! u2 k# u* R4 ~* j
  620. {2 W. e" |4 X$ e
  621.         MSG msg;
    5 B6 k9 n9 k$ N) q% ~0 k5 n
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);, ?& x( p5 ]/ W2 X0 e  L4 W
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' l4 B! a* Y# h: a6 Q% \* I- q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)): m6 e- f; y- ]/ v1 p( q6 J1 p
  625.         {
    9 S6 F6 W3 a+ Q( ]
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ) N+ i) q+ t* U$ Q7 E& U! r$ z5 B1 @+ T2 U
  627.                 {
      ?' ?$ F& P; r2 F& X7 \
  628.                         return;
      I- f3 A3 g! g) v/ ]2 S
  629.                 }- p' y1 f* J6 q* e: y
  630.                 TranslateMessage(&msg);8 d2 \: l' \& a+ Q0 _$ _0 D# }
  631.                 DispatchMessage(&msg);& V/ o5 I! @4 T. [
  632.         }        3 j0 G- U& Q9 ~* g
  633. }
    8 q/ `% w  ]5 N+ E. F( D2 T7 |
  634. . z/ h$ v0 n# M* p
  635. BOOL bFirstChar=TRUE;9 T  \2 b  p, U5 f1 U7 M. X

  636. ; M+ K" J+ N" P8 Q% v+ S# O
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 Y) |* a) K! N+ \  y
  638. {+ I3 [* L7 _3 z# l0 y% ~
  639.         // TODO: Add your specialized code here and/or call the base class
    - ]- C% p0 i: [3 B
  640.   switch(dwProgramState)
    8 q1 J% g8 J& `( @3 H8 B/ I& [9 U
  641.   {
    . X6 j6 |$ ?. m" o& g! W/ S
  642.   case AP_NOTHING:
    " R6 ~; Y) ~0 \# C
  643.     switch(dwStartUpSteps)( @; E9 H* f+ J% v/ l. ?+ h
  644.     {& ?- ?% w9 b$ d: j5 M! E9 X: z
  645.     case 1:/ u4 J: U1 J2 z- [5 f
  646.       {2 w3 P' C* q7 t# F
  647.         int i;
    % \0 X& `# s/ p' p) R
  648.         CDC *pCDC=dlg->GetDC();" e; d* L" ?+ ], Q2 x  T, h2 q
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; y6 s. q' K' ?- Z
  650. //        Graphics graphics(hdcwnd);2 [, }7 b0 p  y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");+ q9 |2 ~! A- ^& }4 k
  652. //        INT iWidth=bitmap.GetWidth();
    4 o( E8 t: j! F9 p+ c
  653. //        INT iHeight=bitmap.GetHeight();9 y4 _7 r3 G  g; ~
  654. //        Color color,colorTemp;
    + `! l* Z- _$ d! Z8 q% t
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    $ @1 `2 D% M7 S0 U4 h4 m5 a
  656. //        {
    ) ^/ J4 {5 A, p% L7 W
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++). f; h3 ?3 g, Y+ c
  658. //          {
    ' E6 n( d6 c7 |" p% Y- }
  659. //            bitmap.GetPixel(iColumn,iRow,&color);1 S  t1 m8 v7 M! _$ r
  660. //            colorTemp.SetValue(color.MakeARGB(
    / h# G$ Y8 E+ ?5 @& T* ^
  661. //              (BYTE)(255*iColumn/iWidth),2 V% p, }, T$ d! X# x* y6 N3 r
  662. //              color.GetRed(),% W1 a  |  g  t( @; N' l
  663. //              color.GetGreen(),
      n' r3 g3 f' [( s0 f
  664. //              color.GetBlue()));' t5 Y. W8 e' }4 d. H% J  W' b
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ! X% o1 Q  w" k8 w
  666. //          }' }' e/ Z# R, ]6 d
  667. //        }4 @" e# M7 H( ?6 a& `5 i* |
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);* D4 o( V" H: {; s
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% k/ e: l9 D; ?) c' @0 a
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");* O7 p6 \  s+ E4 u) d/ ]& J* t7 m- q8 {
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 O4 F$ l3 }  `, _7 j. p
  672.         for(i=0;i<240;i+=8)
    7 c1 g7 T# `# o6 {
  673.         {2 X" R! u" E* A
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 l, n- R9 q5 w4 x' C/ Q3 v. n% J' S+ A
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! c) ]; x, _' ]# ^: w$ ~; S6 t
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 L( K$ E1 ?% H- T
  677.           Sleep(33);& b9 I- v1 W3 `0 H) p; V
  678.         }9 l5 C( D, N/ `. k' {6 h% g- V/ z
  679.         Sleep(1000);- Z- U$ N' c7 y  ?
  680.         for(i=240;i>0;i-=8)/ W- b( j# V: R: @- K5 g
  681.         {
    " l) F) Q, j: k% F& k$ k0 z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( O9 `. Q8 X( I" y/ p7 P6 `9 g
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 M0 k; I2 [, x0 T" N4 g* w' ^
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" r) |2 V3 }9 ^
  685.           Sleep(33);& a+ @2 U, |8 b9 m. |% x, `
  686.         }, V5 q# z* r5 C& Y: R& N
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 o& e1 S/ Y% u& N; w' r
  688.         dlg->ReleaseDC(pCDC);
    # ?* Y! E: B% e0 ]8 B! B& r" M
  689.         DeleteDC(hdctar);. Q/ L" l4 ?& X& S' i# W  C4 C
  690.         DeleteDC(hdcsrc);' {+ |* X/ s9 R  u5 t. h* u' R
  691.         DeleteDC(hdcorg);( L/ k9 x5 n; Z- f( |
  692.       }
    8 d7 P+ S, Z1 K
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    0 Q5 V/ p$ p/ b" ?5 t& @
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");7 R+ b: B) y1 d
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    * `- Y3 x* C/ V, c: f4 e* U. A
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    + N! d$ M2 P$ A) c7 l, H/ g5 W
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) T, t" ?* k! t# l0 a8 b
  698.       if(!Dn.Connected())+ G$ |; S8 I) _) H7 Z) J1 n
  699.       {
    / a- P2 t. @! Y4 C! \# r+ y' b( n2 W& [
  700.         dwTotalFiles=1;
    3 D2 ~) R6 N5 E! Z9 h
  701.         dwDownLoaded=0;
    3 L( E- Q0 @  W
  702.         bSilentStep=TRUE;
    ; B6 D0 |8 Z* O- ^( T. |; q5 l
  703.         bCompressed=FALSE;  e0 S' w! U2 O& W
  704.         strExtLocal.Empty();
    7 k! E5 S/ r4 X3 f5 Q% p
  705.         strFullName="readme.txt";
    ( U; N2 |! T6 u" W/ e' f
  706.         dwProgramState=AP_CONNECT;
    % L3 U6 n( U% q. L0 Q
  707.       }
    . w5 a3 l) t, i; _% y3 t1 f
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    $ l- V  `2 x0 n  E
  709.       dwStartUpSteps=2;) \5 O. E& F/ q  v6 W9 J
  710.       break;
    , O4 P* ]& r: W
  711.     case 2:
    9 i  `+ k+ A8 U
  712.       {
    + p/ k* t. H1 D1 o
  713.         int iEOF;
    # g; q1 P. \. o, {7 P5 U
  714.         FILE *fp;
    ) A1 M4 n* L) G- k; I* @% ^" `
  715.         char szString[512];
    # B6 \% ^' q1 t
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ) u2 S' n& s3 d3 z! }6 X. G# G
  717.         if(fp)
    ( Z' Q) t2 w6 A6 R# g* o
  718.         {
    " i8 r* d; t' @; j5 V
  719.           do2 s: d( Z1 d0 X; P3 y
  720.           {
    6 N9 _8 C; N4 v: B, N( Y
  721.             iEOF=fscanf(fp,"%s",szString);+ e# i* p: j! m
  722.             if(strlen(szString))& i/ L5 C7 j- Q$ X- m$ \
  723.             {) v- {! x3 V: t& w1 F
  724.               if(bFirstChar)
    4 }9 X% A' r1 [+ C
  725.               {
    3 b( ]+ [: x  O9 f# v3 X. H
  726.                 bFirstChar=FALSE;
    " q2 c! k$ J4 h/ U" Y. u
  727.                 bConnectIsBig5=FALSE;3 ~( q" C+ I. B- Y, U1 a1 Q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;7 V# b+ c( ^9 M0 o9 Y4 k. {7 c
  729.               }
    0 Q+ r( O* G: v0 ^. H
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));1 p% i  [) q$ Z) W
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 U6 a+ y- J; |- P
  732.               dlg->m_ListText.AddString(szString);
    - z9 {5 S( m# s6 U& G* B% ?0 k
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * e1 m% @9 @3 Q; R3 {
  734.               *szString=0;6 D9 V, e0 A9 B# D; k5 `/ G
  735.             }
    ) S1 u" L$ R2 q& g
  736.           } while(iEOF!=EOF);
    4 p( u: X- l; \; c3 K5 W, Y
  737.           fclose(fp);
    ' I: s5 b% _2 H
  738.           unlink(".\\DownLoad\\readme.txt");
    4 O9 f2 E3 @: `" J
  739.           dwStartUpSteps=3;' v! j; J8 ?' g, |! r
  740.         }  u% S+ x5 P% U2 I' `
  741.       }
    # a+ F, N0 k7 P* Y6 `$ h
  742.       break;
    # f! S  E. t# h9 B7 d" u& a  e$ P* |
  743.     case 3:+ _0 y6 z1 d; s' [) ?- ]% g
  744.       if(!Dn.Connected())  [6 V( H: l( l2 h8 j! ~  S# P
  745.       {
    . e+ O' I6 d7 q! |1 H
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
      t/ z- t) d4 D: @. S4 |3 X* P* y" g7 U
  747.         dwTotalFiles=1;
    9 g. |( ^- f9 e+ Z4 d
  748.         dwDownLoaded=0;. E3 Q  R) {$ L5 _+ j: t0 B6 h, R
  749.         bSilentStep=TRUE;( y4 w% l% g4 |; z2 b4 x# g) d2 z, d( U9 P
  750.         bCompressed=FALSE;
    0 H- f3 p( T) `4 S
  751.         strExtLocal.Empty();  f; j  Y4 |, b" o
  752.         strFullName="checkversion.txt";. c2 h9 x; e+ ~7 B( H8 [% r, a
  753.         dwProgramState=AP_CONNECT;
    ; N' B# R0 W  `# k: [! K
  754.       }
    : J  k: o5 _& I: C# h9 Q
  755.       dwStartUpSteps=4;
    . r5 a& |* u5 C# \
  756.       break;
    - O* o) t) Z2 d0 W- y9 M/ E
  757.     case 4:/ R$ E- _1 Y3 F) D, t1 J; t
  758.       {
    1 u8 ]) \  I+ A5 R! {6 M
  759.         FILE *fp;
    ; N5 |7 o0 V- w( y
  760.         char szString1[128];6 V# d- k$ B" ]
  761.         char szString2[128];! }( t' o" ]# v
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    0 ?* j& r. W0 x! E4 j) j& v
  763.         if(fp)
    3 i+ Z% ?  P/ d. y& C5 [
  764.         {
    ! r+ F7 J/ ^2 P7 Z
  765.           fscanf(fp,"%s",szString1);
    8 V, Z5 v1 F5 M6 M
  766.           fclose(fp);3 v4 B# \! |9 E1 d; V
  767.           fCheckVersion=atof(szString1);9 q5 R' Y3 n! [1 B' E
  768.           fp=fopen(".\\checkversion.dat","r");' |" W; H8 ^0 g7 G  i. J
  769.           if(fp)5 C, E* U; }: e$ W7 Y8 C& d3 Z/ Y
  770.           {- S1 P: i6 h! Y( O
  771.             fscanf(fp,"%s",szString2);7 B% ?3 ]& W- L3 Y. @$ T3 e
  772.             fclose(fp);
    $ o7 N) Q$ ]8 q1 y9 ?
  773.             if(atof(szString1)!=atof(szString2)); V' V+ w+ }0 _: B4 U! z2 D
  774.             {+ I* V' ^9 J, J+ `2 f  v0 p! u
  775.               if(!Dn.Connected())
    1 m8 h$ s8 f8 L: i+ e( k
  776.               {0 ]* Y) e# T4 w
  777.                 bFirstUpdate=TRUE;5 Q0 C4 c6 Y' @1 O; ^' w8 F3 G; `7 U
  778.                 dwTotalFiles=1;
    1 Z6 X4 l4 l- T4 n* f0 z
  779.                 dwDownLoaded=0;
    : H! z5 v# A6 {9 A2 s
  780.                 bSilentStep=FALSE;+ H* A6 ?. @2 u$ D1 F2 s
  781.                 bCompressed=TRUE;
    ! ]% r. v& j- [) K& C
  782.                 strExtLocal=".\\DownLoad\";
    7 l& R9 p4 a9 P5 |# w2 P! y
  783.                 strFullName="update.txt";
    0 P7 l2 ]2 ?! N6 l  q
  784.                 dwProgramState=AP_CONNECT;
    4 q+ t9 o0 L, d$ p- |) f4 s8 o, n1 X
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / u2 l+ A0 {' O' |8 A) d8 t- V
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & g" \7 p8 n8 M( ^$ d/ k
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");. ~7 O' |% a/ K( d$ ]6 _: d

  788. & Z: E; [. m. l4 T) }% q
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 |9 i& h. j& a
  790.                 unlink(".\\DownLoad\\checkversion.txt");" I* f( J- T5 P! V  _6 C
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1), `5 A5 E$ k- L: W
  792.                 {7 K% s- b3 d1 ], r6 D4 `' N
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");5 h* e# o: U% ]. A8 w7 u, J
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    7 T6 |" e% x( e$ r5 ]
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
      U! U/ G7 U. @. S5 O
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 R; r1 l* l2 M5 r# q9 `
  797. " i5 G+ W* _' W/ Q3 G- e; M/ l/ o
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, ]6 t" U3 ^1 x1 {, Y# c& m
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 ]. L  y* Y0 z+ g4 J
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");  q# H7 u. d% S+ @% `2 d& W
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' w1 d+ ^* T: H2 H  U' i
  802.                 }; y1 }4 c9 _7 j. m! \1 s0 @$ x
  803.                 dwStartUpSteps=5;2 U+ ~, b6 S: M* ?
  804.               }+ Q1 L+ t( n0 s% f" H( R7 P
  805.             }
    / S- U5 L) e$ h( ^
  806.             else
      X5 \+ f2 y# L: G! |7 w2 l: E
  807.             {
    , A/ a8 c# ~/ c: c  G$ e3 @% V
  808.               unlink(".\\DownLoad\\checkversion.txt");
    8 `+ G  |/ e) _
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : U+ C# b" t: v6 e3 m
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ( o2 _9 N  u! d- v
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    - g3 O6 O9 ^( i2 A1 F  [

  812. 6 g# O' O& k% ]8 P* c
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + ^6 [) C4 K; h- s3 n& u
  814.               dwStartUpSteps=99;
      U. d& [6 g, E  V5 h0 n
  815.               bFinishUpdated=TRUE;
    , ?1 ~! h7 v+ h0 G
  816.               bCanUpdate=TRUE;
    + H* O% j! y* r2 f, s2 Q+ H! ^, q0 q$ K) i
  817.             }. P# v& b9 n2 ]* x
  818.           }
    9 x  W/ x+ h( G' {' X4 A
  819.           else
    & t) p( O: t4 {5 |/ Z9 b7 F
  820.           {
    9 q2 T- H# J! G% a) _
  821.             if(!Dn.Connected())
    , }( Z$ i% L9 ?* ^6 r
  822.             {$ Q6 S  F3 B  p: [
  823.               bFirstUpdate=TRUE;
    ! B+ X. J/ }6 G
  824.               dwTotalFiles=1;
    / n# s$ L4 b* K5 T  z$ T9 r: T- S5 W
  825.               dwDownLoaded=0;, M1 q0 t( G5 u0 Z; `% v% I
  826.               bSilentStep=FALSE;* `( r) J+ m! \& c
  827.               bCompressed=TRUE;( m% z+ x# {- s) B* O8 {9 v
  828.               strExtLocal=".\\DownLoad\";
    % `* P- k( k5 r8 Y( C( a7 Y
  829.               strFullName="update.txt";# ^6 T% B: j9 t) H3 E* d8 p
  830.               dwProgramState=AP_CONNECT;
    , o. f: V! |% e+ ]4 ]: H) }- x9 b& R
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 Y" w: M% [5 Q+ \5 C
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" M! D8 E, O8 t- ~( [) {8 f6 v
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");+ v2 ]. Z& ]) w  @8 B/ v6 n
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 O* U$ L2 w- I: N
  835.               unlink(".\\DownLoad\\checkversion.txt");0 u" Q: _0 K4 `' G9 N
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    , G) t5 l0 x; L7 z& \) n8 J: k) m
  837.               {
    ' |5 u, @, \. d8 a  N
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    # t0 }4 Q9 A& J
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    6 d4 k5 F1 J) u2 Y( G
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    5 a: v2 h4 U8 p& m+ I+ |$ l
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 t, O. @: p1 k$ b6 s
  842.                 2 w6 C. w' z, d' M! l; o
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % K' Q# G2 O! o4 c) I% a6 I
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    1 c+ P! C+ B! c
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 ^( Y+ `+ {7 \3 \0 v
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , V1 a6 q9 [; p9 ?& Z: b
  847.               }% d  G9 W. `% T# z0 A7 {
  848.               dwStartUpSteps=5;( c# `: J9 Z' g8 i8 g! k( [- v9 _
  849.             }
    3 b0 z1 D' N/ c+ t  f! \3 v
  850.           }
    5 G$ L5 }7 n! f& \+ j/ U7 O
  851.         }
    ( o9 i! Y# n$ h/ Z" X: a
  852.         else
    6 K6 Y2 I! `% _% F4 V& J* `0 S2 {
  853.         {
    $ j+ v' a4 x2 N/ e9 q
  854.           dwStartUpSteps=3;9 P& i' N  o# I9 ]3 E. _! \! M8 Q
  855.         }+ h1 W4 A) T7 Z5 e5 E
  856.       }
    4 w! U+ y% }* ~1 n: W. U: v, R
  857.       break;# z. h: G6 t8 h' m4 p. T
  858.     case 5:
    : w" T- ^5 x$ x4 e
  859.       {
    4 M$ g+ s- {5 i0 Y7 a% z
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    4 s. c4 h5 ]8 C
  861.         {5 _' P! O' X0 b1 b1 U9 v" p. b
  862.           int opt_overwrite=1;6 V7 n& x% i9 ^6 N- X
  863.           int opt_do_extract_withoutpath=0;4 Q5 i, a' R$ R  n& G2 |7 K: b
  864.           unzFile uf=NULL;
    3 x0 v, q$ o/ g' C: ~. H5 }- ~, c3 J0 ?
  865. / t7 G  J1 C+ M& p1 i! g
  866.           uf=unzOpen("Wsa.zip");
    $ q9 f4 [6 W3 E+ p
  867.           if(uf)
      G! d6 z! a5 m6 Y
  868.           {
    1 Q( Y$ C5 v. Y# s
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ) k5 u. b- Z9 y. C# p0 r+ {" u( O
  870.             unzClose(uf);
    3 i  L0 V! i3 o1 c. \- M
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    / W, s% q* @- T8 B1 d- b( @" ~" u5 P+ Q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    , k% a8 E1 c& Z3 f$ a, b2 k
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");/ y- O; P1 T2 n0 _: T
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 z$ B+ T  ]& a* U1 i; C
  875.           }
    5 F$ F4 _& |, |  I' b- H' D$ T
  876.           DeleteFile("Wsa.zip" );) R0 r2 V' _$ {* ^: |; ?; X
  877.         }. w) Q( w  g% A/ K4 x! m" H+ c$ ^
  878. $ V/ h+ f4 c# q: P
  879.         if(CheckLocalVersion())
    1 h! }$ r7 d3 S/ R
  880.         {
    + `0 `& f5 U1 ~# l9 F& i3 A
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    3 N6 }# q. {  _- W# Y
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    8 H2 }$ d. v- W2 D
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    + y$ S. ^+ _5 m2 T  w
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / Z6 k, o- K; r+ A4 Y, s8 x
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);3 ]+ U. s$ c0 l
  886.           dwStartUpSteps=99;
    - ^# u+ x# E! F# j/ |
  887.         }
    # g  G2 Y" n3 P
  888.         else
    9 s/ V7 U. V" ~2 Y6 e6 h0 g$ b
  889.         {! T; U6 i4 ^  ?( D! b
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    6 r6 d+ j) b  G6 w1 g6 e
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ U: z& d; x+ z; z* K
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    " X, `- l' ~, z' H! a

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

/ C: {3 a& U2 k# \9 R: [& I" {$ \+ s/ j* m& d

評分

參與人數 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客服返回頂部