找回密碼
 立即注册

CSUpdate.exe源代码

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

; Z: ?& ~3 a+ s( z- I
  1. / RevApp.cpp : Defines the class behaviors for the application.
    * @% W0 ^, ^) _% ]+ I1 l6 C' F- m
  2. //
    9 q  ~+ M% e. L( C5 w

  3. 2 P$ P& C# s- L& W
  4. #include "stdafx.h") G0 M% w% V. w7 `* D' Y. z

  5. ; l1 G  z# @  C/ A4 P( I5 z& H
  6. //#define UNICODE
    5 p# J) ?' X: v* @4 s' ?
  7. //#include <gdiplus.h>
    3 |# ]1 b. P7 X1 @6 Q. v: @  b4 |
  8. //using namespace Gdiplus;. [% ~% _. Y" x

  9. 7 i3 Z& O4 {! Z, Q
  10. #include "RevApp.h"
    . z" b; h9 j& \
  11. #include "RevAppDlg.h"
    , b8 @* @, \) N  ], X, g

  12. ; l7 |$ `# G9 P( v# W8 q- @
  13. #pragma warning(disable:4786)( l  r- N! y7 S0 K1 R# G& E4 E
  14. #include <map>
    $ z7 n3 Y+ q/ T( l( y
  15. #include <list>& Z2 K6 N! F! ^+ F& @& J
  16. #include <direct.h>  ^& l% z4 S' V9 M
  17. & S& U" d6 O9 E: ]6 q* G- Y: K! ?
  18. #ifdef _DEBUG
    ; N( a5 ?0 k. W: C0 l6 t
  19. #define new DEBUG_NEW9 {- `; ~* Y5 y. q1 T
  20. #undef THIS_FILE7 ^3 P$ }- o: _0 T  [  E8 U
  21. static char THIS_FILE[] = __FILE__;$ Z5 l, y" y# D# E1 K
  22. #endif; Y. H7 A+ @1 @8 P. E
  23. #include "SkinResDef.h"
    $ O, N5 Q6 K) R% Y' f5 I6 u! m* b
  24. #include "ChangeBG.h"
    ( k+ C( I1 o* l4 _" S  x
  25. #include "AFXINET.H"1 {4 ?" w3 c! [; s6 {' X! z4 c, F

  26. $ _# l  s. @) Z4 m4 h9 y
  27. #define TRADITIONAL_CHINESE 0
    + B1 M1 I, u8 f  l' U
  28. #define SIMPLIFY_CHINESE 1  d: V' ]. P4 s/ W  l$ `9 Z# a
  29. #define ENGLISH 2
    * [0 ~4 h+ ^# h
  30. int m_iLanguage = ENGLISH;
    & h8 }& j7 }' X
  31. /////////////////////////////////////////////////////////////////////////////7 {2 t5 c) f% s: X6 j# U1 V
  32. // CRevAppApp; \4 X  N7 \" B  W

  33. $ I0 M& _  c0 [: i2 _+ _! M
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)) |' G4 t- u1 `9 {  y! [) j( _3 \
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    * k& M$ V- h& S% W9 R+ V" ~/ t
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.' h7 t! F/ r" l) M6 y
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    0 }  r; ?2 w( Y: V7 _# u
  38.         //}}AFX_MSG
    ! Q3 A9 Z  r4 d+ Z) f
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    3 n1 _. W+ b! K) Z3 s7 w/ L
  40. END_MESSAGE_MAP()) f; n& I! w) q/ d3 Q

  41.   K: _; Z) c( C8 h5 A& I
  42. /////////////////////////////////////////////////////////////////////////////: f+ K" L# a. L8 B: U
  43. // CRevAppApp construction( [5 s. R  ~4 C7 K& }
  44. ) L! Y* ^2 K7 Z7 a' E
  45. CRevAppApp::CRevAppApp()
    # A" m  f1 U: i; J. @/ E4 X' t# w& q
  46. {
    & Z- {& b1 P0 k* k- H$ K8 J" j
  47.         // TODO: add construction code here," X" r  x5 H! Z' d
  48.         // Place all significant initialization in InitInstance
    % b/ T# Y) }% \
  49.   bDisplayIsBig5=FALSE;7 z4 }5 P" x; T) I
  50.   bRestartUpdater=FALSE;
    6 }& n, s$ ]/ r& J0 {# q% S9 @
  51.   bFinishUpdated=FALSE;
    ( h0 W2 e, a, U. m' [2 {8 d
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;7 l6 r: U' N9 S# {5 b1 i
  53.   InitChangeDataBig52GBKS();
    4 e6 ^8 V; Z; c# h, H
  54.   InitChangeDataGBKS2Big5();9 z& l/ U. c" `: f4 O, E
  55.         //; S5 \% m3 v3 ~9 y( O, r
  56.         bClickRunExe = FALSE;$ b+ j# O/ L) C" z
  57.         //
    ; A3 e: K- v! v2 A% [
  58. }& D: \8 [5 z) r8 _% Y
  59. , S2 i* k* o( @( g$ o5 v% \& [, j$ ^; N8 i
  60. CRevAppApp::~CRevAppApp(): F+ J6 f. |) q3 c- t3 d. x
  61. {, l1 B. N) M; k. l" a' x+ R, m
  62.         // TODO: add construction code here,
    $ e* V6 }! ^/ [6 W  u7 L2 w: W
  63.         // Place all significant initialization in InitInstance
    + }$ `0 p6 I) }+ a7 d2 L% ^* |  E1 {
  64.   EndChangeData();# z: d- L: {" U
  65. }
    , C/ s8 X/ X/ X) L, v
  66. % g4 L7 u9 m. N' L% z7 J! j- V
  67. /////////////////////////////////////////////////////////////////////////////
    * Z5 D4 X8 _0 _" G" ]! j
  68. // The one and only CRevAppApp object0 \& P, r( @9 e5 O+ I# e

  69. 7 U3 s) P8 {3 S
  70. CRevAppApp theApp;4 c2 o2 F! m8 M* O, ~
  71. 6 d0 ^' C' y+ @8 |3 o# ]( K
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)# ^2 q. `0 A5 l' E; A% g9 s  S
  73. {
    % D) {  f2 A. u2 R3 n
  74.   int iEOF=0;1 U5 e- ?- D- s( [" H# o3 _/ H& [# z
  75.   char szTempName[MAX_PATH];/ `: m$ L6 R2 C  N& L
  76.   *szFileName=0;, ]8 ^+ @' f9 {' o! f" _( i
  77.   iEOF=fscanf(fp,"%s",szTempName);
    " G/ X! K$ Z% ]3 C1 L- C
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    $ F" c9 a# m/ m& W
  79.   {4 c" S" i; g" [4 J! O7 S% X
  80.     strcpy(szFileName,&szTempName[1]);
    ( r+ v/ W7 L4 k# ^$ Z( r
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ( p/ g8 g4 E5 s0 V
  82.     {
    % x# q. P, H+ o
  83.       iEOF=fscanf(fp,"%s",szTempName);
    . I% W2 U# B1 D# A- [. ^4 K
  84.       strcat(szFileName," ");
    , Q  X  ^  E& P% l' o1 v. l4 Y
  85.       strcat(szFileName,szTempName);
    2 K+ C3 T* b5 P7 _; O, X; e9 w
  86.     }
    ) c* Z4 N. {/ h" O( z# B
  87.     if(strlen(szFileName)>=1)6 h7 r* j0 }5 a4 O" q& i
  88.     {. |" V$ n! }6 W+ I; Q
  89.       szFileName[strlen(szFileName)-1]=0;5 K+ t% y, U6 R9 x
  90.     }
    / k! m  [& E: O( i
  91.   }. q3 O: \1 I% f6 ], P+ ~7 [7 {
  92.   return szFileName;
    $ x) E4 u- R" j$ `, P
  93. }
    ' a% k2 f7 D% E# c' d5 r3 F' h
  94. + b. r* B6 A6 x, k/ G, L" Y5 ^! u  A
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)2 g% W. c% [7 u- n4 @( \+ z( {! V
  96. {
    8 g5 T. j! a( O+ z0 E# l
  97.   FILE *fp;8 [6 b' Z0 w9 W4 Q6 @
  98.   char *key=NULL;( T: T) z4 G9 V& H
  99.   char version[MAX_PATH];
    : X( T: |0 n) X+ [4 c
  100.   LPUPDATEFILE file,olds;
    & A3 e* ?/ G3 D+ Y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    + p4 M) N, r# q! u% e0 I% j0 x1 @5 ]

  102. 1 ~9 {$ N4 P. W; u( c" [
  103.   UpdateList.clear();
    & H- T2 i' P$ u* `5 U
  104.   UpdateFile.clear();
    7 o0 A' R) ]+ O
  105.   if(GetFileAttributes(filename)==-1) return false;- s+ F) p/ t0 }! }+ P) A
  106.   if(!(fp=fopen(filename,"r"))) return false;
    8 O0 K0 R0 Y5 O+ h* |: v! ^; z+ W
  107.   fscanf(fp,"%s",version);" f6 f1 v  W/ n& t* X, b
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }* L" m2 M4 {7 |* o$ T
  109.   while(fscanf(fp,"%s",version)!=EOF)
    4 z( e) D9 U& q; C8 d
  110.   {) y8 {7 V2 J" C6 S6 w. P3 t
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" F8 T/ p) {, t9 v% t
  112.     fscanf(fp,"%s",file->path);
    " G7 p4 a5 X/ n. U2 M
  113.     ReadFileNames(fp,file->file);3 t( ^" ?$ h+ y0 b( c
  114.     strcpy(file->full,".");' n7 C: h  R9 x2 H
  115.     strcat(file->full,file->path);4 \7 T$ W+ |* d& z% E! `4 `
  116.     strcat(file->full,file->file);) a7 I: d3 D5 ?
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 P5 d" u8 e$ q
  118.     {
    9 A9 }, E3 N5 P; {# M
  119.       file->vers=(float)atof(version);
    4 i8 |9 A8 T) q3 z/ ~( D1 U
  120.       UpdateList.push_back(file->full);
    0 L3 ?/ x; @; s2 q) e8 {0 k- t
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    3 d1 m8 \' ?% k  I7 d3 {3 F/ p9 d, {
  122.     }
    ( q; w2 s3 N/ I9 E1 ~* t6 T
  123.     else: t  D9 J- C, K. f( \( R$ R8 t+ i/ V
  124.     {
    " Z2 I! J/ u/ y. y5 P8 J( Z
  125.       olds=(*p).second;/ ^* L; i8 R. ]5 L
  126.       if(olds->vers<(float)atof(version))3 h7 r! w8 e# F  F2 ?
  127.       {% G2 r2 c2 [4 c: ]+ Q2 H
  128.         olds->vers=(float)atof(version);
    9 h8 w( f( Y6 |8 ?! y
  129.       }2 l& A! h" w3 H& K. C9 b
  130.       free(file);  Q# T& X' c; A4 E4 W* l
  131.     }% N) {( N. q( T0 k% f4 R# W0 \) L
  132.   }
    5 \- [/ a. V( ]" U% N3 ]$ N
  133.   fclose(fp);
    9 g/ T( O# u3 U( R
  134.   return true;
    3 ~9 x9 A5 l& d1 `
  135. }
    - i' Z% Y; i4 c. B* P
  136.   X* C2 M5 ?. T
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)/ k- `& Z. g1 S6 D% \
  138. {7 B' T2 V6 ]/ L- i) L( d* ]
  139.   TCHAR  szFull[MAX_PATH];( l; {. n% _4 F& S$ i
  140.   TCHAR *token,*inter;
    * t7 _$ o/ U& M% g$ Y' _% i/ A
  141.   *szPath=0;
    4 ?6 y& o3 I; S2 ?
  142.   strcpy(szFull,szFullPath);$ x# n  [+ P3 `
  143.   token=strtok(szFull,"\\/");& ^4 X) ^+ J$ N
  144.   inter=token;, D# P7 _) K/ O3 D1 p& Q' J
  145.   while(token=strtok(NULL,"\\/"))* Q+ j4 Q# O) H8 O
  146.   {
    * ~$ e- Q; \5 S" s3 s% Z! W
  147.     strcat(szPath,inter);0 ]+ i7 |- L% W8 }! h
  148.     strcat(szPath,"\");7 J$ b4 E& W: w% d# o- q5 O" V7 D9 c9 _$ B
  149.     inter=token;/ g. B% G9 h0 @$ }' G6 U
  150.   }# G4 s$ Z% V! P( d6 W/ _. Y: Y
  151.   return strlen(szPath);4 G) b! q# \2 x
  152. }
    1 l* C0 m. K4 ^# j- |5 r

  153. + f; k4 `* D; x7 p% m2 j
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    1 O+ o3 R, y8 Y! a- y( n, U' q
  155. {8 i- v  c' u" y
  156.   DWORD attrib=GetFileAttributes(Target);9 V  _( `! }, |0 n& e1 E
  157.   if(attrib!=-1)
    ) A0 D' k5 [6 Q3 M
  158.   {
    2 ^. [6 w! E# j' u/ ^2 P) O& o6 h
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    " w2 j6 n, x4 _) X  o8 w" _5 C; d
  160.     {
    , }2 @. ^' f. z' i; H3 R) f
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    2 o) H8 C" b/ f3 M9 [. S. {: P
  162.       SetFileAttributes(Target,attrib);6 r& j. U/ K! D- k
  163.     }
    5 b4 v8 c0 V/ J& m: V$ J0 d
  164.   }9 a5 Y' Q0 `; e5 M$ Y" D$ I  l2 o! |
  165.   CopyFile(Source,Target,Erase);) f; u- s9 o& ]+ L
  166. }
    7 |: t) y$ _$ p1 q7 q

  167. / K* S* J* W; s* i
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)" Z% u8 M" L* Q. }" F
  169. {
      S- v7 a' C8 _& z" v& O
  170.      FILE *fp;' ?4 ?+ F0 M; O4 j4 ]9 a6 b: l
  171.      char  szBuffer[8192];+ }/ s5 q& U. @% N, `
  172.   va_list  argptr;: V5 Q4 h9 s) l7 Q2 v: u
  173. 3 s5 U6 d: {1 u4 B! l
  174.         va_start(argptr,message);; S3 X' d0 n1 ]4 {* y
  175.         vsprintf(szBuffer,message,argptr);
    ) j# |/ s: \, o6 X2 E
  176.         va_end(argptr);
    1 S3 [! V( D3 a7 w9 ]& d
  177.   fp=fopen(FileName,"a");0 ]" m5 ~2 o& J% ]( Z
  178.   if(fp)$ W0 B  c$ E6 C4 w& M5 l
  179.   {5 w6 u4 }: R2 {  V) u6 j
  180.     fprintf(fp,szBuffer);
    6 Z. E# S/ m* r1 K  R
  181.     fclose(fp);- o0 B' H) g: _' s
  182.           _flushall();# \: t. [5 V- T) b
  183.   }7 Y; V' O' U6 u
  184. }
    9 U: `5 Q4 d/ v2 ]# l

  185. : U2 O, v# I' [
  186. BOOL CRevAppApp::Fclearf(char *FileName)3 f6 ]1 W& _" ^, K) j# {3 F# M/ [
  187. {' L" o1 [1 ?* V. _# ]$ D
  188.      FILE *fp;
    & X8 |  e1 x* u) v# |9 G8 E( p
  189.     DWORD  attrib;
    3 G1 d7 Y; A/ G. V
  190.   attrib=GetFileAttributes(FileName);
    & n6 R+ q/ t* W5 E9 [+ ?
  191.   if(attrib!=-1)
    - K7 l/ c' M% y  `$ t
  192.   {# ], K6 f+ [/ Y7 R/ q, |
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);; K6 e+ G; G) q
  194.     if(!SetFileAttributes(FileName,attrib))
    ! a9 }& s$ Y; ?' b6 ^
  195.     {, S7 D% k5 z3 c, x' U0 m# S
  196.       return FALSE;
    " b2 Z# o4 E3 A' X) h: e6 B# H
  197.     }% p+ O. Q! N/ h% i( ]1 j5 F
  198.   }
    ( V4 V1 M4 H6 M
  199.   fp=fopen(FileName,"wb");
    & Y* s2 V  {7 @
  200.   if(fp)
    & d# ?$ {8 y) {9 ?: o# ~* ]
  201.   {
    . N4 e$ p9 @' \" P
  202.     fclose(fp);
    , d' H- u5 h! T# r- x- e
  203.   }' S, c! i+ B3 ?- W+ f, ]. w: Q; `
  204.   return TRUE;$ L3 G' w2 A8 {9 Y$ a2 |* t3 Z
  205. }' ]" ^1 Z5 v5 X) b7 o4 @

  206. 8 F# \% u. L& s6 b4 _$ Q6 G
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ! x/ \, c6 j% Q5 {) S) r. ]
  208. {+ p0 i( z* F& V3 s3 y! o: n
  209.   char filename[MAX_PATH];4 e4 |; ]8 I, h7 F: q9 `& q; J1 y- q+ N9 B
  210.   LPUPDATEFILE file,olds;' k6 w" E( O- K% l# S8 k) ^( F/ c8 V
  211.   std::map<int,CString>::iterator i;
    ) a! O) P; ]" i7 C# x* c; g
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( }6 k. p( h' G( `7 J1 ]- r
  213.   std::list<CString>::iterator l;
    ' m# ~5 W3 E$ j+ w' u1 A$ O) b8 ?3 X
  214. - `" p' s$ C) a) {
  215.   if(bFirstUpdate)' n+ I4 y: }) t' d; Z: }
  216.   {6 x" f( C) }# ?
  217.     dwCurrFile=0;7 m. a# q+ O# R& |
  218.     bFirstUpdate=FALSE;
    8 u# P. X9 F2 {) B* k2 r! c; V
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + E+ M9 K5 M# L$ f# j
  220.     {
    ( e4 Z3 c2 I8 d/ x1 H
  221.       dwTotalFiles=UpdateLocal.size();' r7 w  w& O5 O7 y
  222.       dwDownLoaded=0;
    1 w7 p4 I, r! q( w+ \
  223.       bSilentStep=FALSE;) C. p* ^, k. v) F' L! T
  224.       bCompressed=TRUE;# {% D+ i) l% w1 T
  225.       strExtLocal.Empty();
    6 C9 @9 U$ Z% c$ X2 b
  226.       strFullName=(*i).second;: G# {  U4 r& i6 r
  227.       dwProgramState=AP_CONNECT;
    % M. f) }7 j5 q7 c, R: U/ K8 w
  228.       return TRUE;3 v; [3 H' w+ I% S
  229.     }
    6 m: ]% m# T: [0 j: B, E: W! [! @
  230.   }
    3 t# A! m2 r; w0 J) t4 h$ G
  231.   else if(bRestartUpdater==FALSE)5 P  G* H3 B# w* {$ B0 J
  232.   {; ?+ f: m) f! T  b. a, m+ o
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())" K' L4 U" t% \# `
  234.     {
    8 V9 J: g, m& F- `* }1 {
  235.       file=(*p).second;
    6 Q, v! q6 w! @9 y( }' @7 a3 E$ v
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())7 `$ {' C& @, c9 j/ O$ @
  237.       {& J; V+ j9 @; t3 B5 S. R
  238.         olds=(*p).second;% ?; J- R1 Y" Y' W1 R
  239.         olds->vers=file->vers;
    7 [. a' M& Y. x$ C* u
  240.       }7 q  Q2 a' I5 V1 u' i; w0 ~5 v( D
  241.       else
    , X) D  [6 o9 s
  242.       {& R" q' R( Y3 c/ A1 f
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 u; P8 p) ]3 t* S
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ! p: ^5 b0 x( [) k% n. S
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));% Z0 l2 ^5 n, z1 f0 B' g' Q, b7 Y4 n
  246.       }
    / t) _' i, Q7 ]  R6 w8 t/ _5 [
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");1 B7 F1 R/ j' p6 N. j
  248.       sprintf(filename,"(%s)",file->file);7 I" e" ]! f. o" B
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ {% Z1 z' g' T4 u
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }$ O. V4 C: c" }8 ~
  251.     }
    + `3 }1 Q' E; H8 o( p0 }2 @
  252.     dwCurrFile++;. ]# Y9 g5 F" l( R) _
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 L0 q% n& `  y. b% }6 q4 h
  254.     {
    5 q6 H# a% X& O# H- u) q8 }0 T9 U
  255.       bSilentStep=FALSE;
    - A" p7 Y5 I$ [9 ^& o& `$ r; ]
  256.       bCompressed=TRUE;
    $ n' \; v$ u5 W. {4 ]! D% L
  257.       strExtLocal.Empty();
    , }8 c2 \& Z* o( B2 ^* `
  258.       strFullName=(*i).second;# \$ m, \1 B8 T& V
  259.       dwProgramState=AP_CONNECT;
    $ a5 {2 N2 p- H# o
  260.       return TRUE;
    / C1 l" S2 l  a- |
  261.     }4 i+ ?( p7 [. z4 V9 U  q4 W
  262.     if(!bRestartUpdater)0 u8 G% M8 T4 _
  263.     {
    0 t: n. e+ q' f% w# F) O. O
  264.       int iCurrSize,iFileSize;: X* x4 P- h2 _6 N2 G3 E  X+ L
  265.       iCurrSize=0;: Y+ g7 Q# k% j; c
  266.       iFileSize=UpdateList2.size();6 N; g, E4 n- O' W8 u  O6 B# Z# W
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");6 t9 d: V% U  R9 ~/ I; w8 j* x- \
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ! C. }, @! Z9 K  C, ~# O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
      Q( Y- F4 g0 B2 y& U5 l
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, t2 \# y% [/ u* q$ r4 V
  271.       Fclearf(".\\update.dat");/ h& S/ v1 x6 O
  272.       Fprintf(".\\update.dat","Bloodyf\n");! o1 x) A# U# e' I9 K
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % Z& i0 v. g, k' w
  274.       {
    2 {5 ]$ n/ a  Q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    - o2 \: N, L( g% D6 V2 N
  276.         {
    . O9 t, J( b: G
  277.           file=(*p).second;, C2 I( `" w& h7 U3 b" C" r% y
  278.           sprintf(filename,"(%s)",file->file);
    ( Z3 V9 y3 X8 _: M4 U7 w! r- `
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 g. m4 i& z2 L6 y$ U( c1 p
  280.           iCurrSize++;3 i; P  l1 `* P. [
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / \2 r& {! C) b9 ?+ q  Z+ r
  282.         }
    ! l; v0 y8 J* f" T
  283.       }+ m% L; k9 ~( W9 v
  284.       unlink(".\\update.txt");
    * |9 l1 U" i/ d( d: ~8 [3 {
  285.       unlink(".\\update.tmp");
    + ]3 b. p" p3 O; \- _9 W
  286.       Fclearf(".\\checkversion.dat");
    / A4 W$ v1 a# b7 r
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);% X- W. K/ y1 Y# K- z9 ?
  288.       if(UpdateLocal.size())5 @' w- J$ b# i0 q7 Q7 G8 I/ a
  289.       {$ V) d) c# X: J7 e" G' l1 g3 F. W- ~
  290.         UpdateLocal.clear();
    , o. r. {8 v1 p# w# i
  291.       }
    3 i9 Z5 f, C* \0 H/ v
  292.       if(UpdateFile3.size())
    / \+ [, [6 ^1 M4 c8 A
  293.       {* k* }# Q# w$ [. x- C
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): F' o5 M. Z- p$ t+ p+ G
  295.         {3 u) A/ d1 X) m8 X3 G
  296.           file=(*p).second;; I2 W1 _( t' ]& A
  297.           free(file);
    + J9 H  {" R9 c5 A- v2 p3 o6 [
  298.         }
    % J+ I& g: @. d1 I) E+ N
  299.         UpdateFile3.clear();
    . _/ L; U( q3 A- M& I: Q% a
  300.         UpdateList3.clear();
    . {: {+ {* j2 L, K
  301.       }/ W8 P) s5 Y$ O4 o6 ~
  302.       if(UpdateFile2.size())
    6 e; x! t7 ?0 l; D. ^
  303.       {- L) s% P: ^1 }
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  ^- F+ F/ r2 F( h
  305.         {
    & d, Q/ N+ M! Y
  306.           file=(*p).second;; k# s$ t. E' H7 @3 B
  307.           free(file);" }; H! F# S. |- G) F1 C% D
  308.         }
    ! k" x' g) A2 N9 z
  309.         UpdateFile2.clear();
    " Z/ U" c% f  U3 b
  310.         UpdateList2.clear();$ p* d% {2 j  s% P
  311.       }2 h7 H5 l( Z4 A. M
  312.       if(UpdateFile1.size())+ O" e( A/ M6 i' t5 \) a  b- Q9 `
  313.       {
      i, J6 F+ i8 m) H
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ N7 H3 B! Y' }  k! y$ T0 s$ m
  315.         {
    * B$ C% C5 `/ s2 ?
  316.           file=(*p).second;
    2 Z: Y; U9 w8 G6 I/ F/ q% O7 q
  317.           free(file);
    ( n: D% c" |3 t! j' K6 L; g
  318.         }. u* X9 z4 I! B6 A/ n; c6 F. y! M
  319.         UpdateFile1.clear();
    / w  m9 r' N8 |. K
  320.         UpdateList1.clear();* z. D  R; O; R# C( [6 p
  321.       }5 K& W- C7 e- C( q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    2 }3 ?+ m! L9 ?2 b3 K; h9 r# F
  323.     }
    & q, ?4 `+ ^' |8 D$ D" H" R7 O1 p
  324.   }3 d8 g( j; r6 H+ H
  325.   return FALSE;
    ' s2 }; ]+ a+ D- R" `0 l
  326. }
    4 k6 O6 Y$ E- |0 m# O8 d

  327. ( W- O$ ~4 `/ }$ y$ ]; }) u
  328. void CRevAppApp::ClearAll(void)
    0 Q3 E0 S. A& u8 M. }
  329. {
    : T) t' B$ m6 j7 |3 [
  330.   LPUPDATEFILE file;
    1 a1 S8 B. Z2 z) b5 s# e  I3 o! r1 J
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) P" W/ ^, U1 m& \  O$ C+ W

  332. - E2 g+ E; q: I, F1 I
  333.   if(UpdateLocal.size())
    % M2 ?& C+ N" U2 ~+ b: q
  334.   {8 U& e( u# h/ Y' n; S; C
  335.     UpdateLocal.clear();
    ) j+ y% f) h" B2 s: l3 M
  336.   }
    . L- ^5 F  ]2 d$ r& E; V/ N
  337.   if(UpdateFile3.size())5 k: {; Z: G% j* t& c
  338.   {+ I3 A/ ?" D& K1 f2 u2 F. M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 J: l' a. c  x
  340.     {
    - V! t7 ]* @6 W3 O: x# y0 ~
  341.       file=(*p).second;# D' E# l6 M2 \# f8 L& w
  342.       free(file);
    & K" l  f% Q) \; F# e# A
  343.     }* i. |. M; g* q8 z& U  E! v% M+ \
  344.     UpdateFile3.clear();
    1 V2 k! e7 s* a  l
  345.     UpdateList3.clear();4 M, j( d; A) L0 U& w
  346.   }
    ' t1 V2 m2 g5 H! W; D7 p
  347.   if(UpdateFile2.size())
    & j" p- {9 s$ T' A
  348.   {
    : o" T1 X$ X9 |- T
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! p9 A" D. Q* w. D6 [
  350.     {
    , q' l! j* @4 ?9 F% U' ]
  351.       file=(*p).second;9 I- v7 R' R7 |" w# L2 Y% l
  352.       free(file);
    0 I1 u" s. x# k/ y* k$ U
  353.     }8 v& E8 f/ j; R
  354.     UpdateFile2.clear();7 N9 {( I) C. |/ Z7 K: y
  355.     UpdateList2.clear();
    * n4 \+ N) b* @, t: e9 }
  356.   }" ~& u; \0 _, D( e6 G, h1 V8 Y
  357.   if(UpdateFile1.size())
    4 R9 d: d! ?& k7 u
  358.   {
    6 ^9 w+ [1 n. M* d5 D1 a3 |$ D
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  O- Q8 W8 m0 o6 v# ^
  360.     {7 b  Q) H$ O) K6 R$ _9 M2 h
  361.       file=(*p).second;+ D; {" U$ q  O1 C. z/ s$ x
  362.       free(file);1 O4 P7 J8 s( N) ~$ Q! I' _  a
  363.     }
    2 r/ j* K; X. S# `* n9 Z
  364.     UpdateFile1.clear();% N3 C7 Y- g: L: L4 t9 v( A6 O
  365.     UpdateList1.clear();
    + R* |' d1 Q# O9 a  V9 e6 W7 I
  366.   }3 F- s/ a1 `: P% ]: r
  367. }  4 E: V* u/ F: R! l$ C' j; n% ?
  368.   
    ) p( _4 t. h" D" h7 w
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    / {+ P: u) v/ {
  370. {' O4 {4 \8 v9 @$ `
  371.   int c;2 [' e* ~* T& Q3 ?& Z
  372.   LPUPDATEFILE file1,file2;( e5 x5 I5 J+ y* L. @2 A: A
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    . l0 Z, t/ ?' [2 O; P6 d
  374.   std::list<CString>::iterator l;
    2 g) z5 j/ j9 P# P! M
  375. 5 G# r5 @6 L. y1 ?! _- {
  376.   UpdateLocal.clear();
    5 M8 B/ |* N, ^/ k) N; P& q$ S
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    7 V' o( F* W- O% A; c+ H+ j2 D7 P
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    " u) m1 p0 K3 F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' |6 ]3 W! v! B1 o2 b2 {; r/ ^
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);9 J" q4 W) P; [* d
  381.   if(UpdateFile3.size())$ Z3 A& j, t' ^. z. T# e
  382.   {
    ) v$ m1 F! n1 z6 t" H
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    $ l/ P. ]0 G# `9 S, e# k
  384.     {
    7 S: H9 A) S2 w& Q/ E5 v. }7 S
  385.       file2=(LPUPDATEFILE)(*i).second;
    4 e3 _) k# D: n6 \, W7 i
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; c& A, h. v, s1 b2 n% P7 ^; Z
  387.       {
    ' D& M& x5 a% h# N% T  f6 z
  388.         file1=(LPUPDATEFILE)(*p).second;
    $ B* X9 v( c$ ~$ ]0 _8 Z; W
  389.         file1->vers=file2->vers;" z) I5 ~# I5 F& h) T9 r& {
  390.       }
    4 H. z) m' \- z
  391.       else% Q- \: V! ^1 l* P& U) d& }3 }
  392.       {' v1 V7 \) q# c- J& T8 `0 k9 T. a
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # Z9 t6 p# `) A
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));2 I6 V5 {+ }" O1 m- U0 V
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    8 e6 ]& v- c# H+ N4 I' B( o
  396.       }9 R# V5 Q5 v; J. f$ U3 L# T- T
  397.     }* J2 ]/ m$ F4 N* O# E  P( `0 N
  398.   }+ s- _) Y( l* e/ i4 b+ S
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)" V1 Q. ^& M* Q8 r7 l, M
  400.   {
    . X/ y, ^1 }+ L  e- F5 N
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    & h1 h" C2 A/ K$ t" d4 I( O! `
  402.     {% _; K& `) r3 ~: M, U& s0 S! B2 \
  403.       file2=(LPUPDATEFILE)(*i).second;
    $ s; ~$ q' [) r" S( r
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 h" q1 h% u" y0 G& w
  405.       {
    1 X6 A  l3 c9 a, Y# n  k
  406.         file1=(LPUPDATEFILE)(*p).second;
    # c4 ]# b* X* t6 `; V; h
  407.         if(file1->vers!=file2->vers)
    , c  f' W* C: v
  408.         {
    $ i; w7 ^  R: |5 E" b* J9 {2 C6 h$ @5 |! M
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 u% a$ P- H# c, P8 E
  410.           c++;
    4 g& f& p1 c+ i( K
  411.         }" I' T0 x* }! C* V- R
  412.       }
    / T) z+ Z3 e% ~6 ], n$ H5 G  e
  413.       else
    : f1 A! Y& m* t# g  j, J
  414.       {
    + [  T* ^' V8 Q9 r3 ^! e
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, I5 S0 }* G# E
  416.         c++;/ E( R) {) d: E
  417.       }
    8 s. \! {. l% @+ H# X3 ?  @3 `
  418.     }
    * C0 M2 `0 H: q2 g! r6 J
  419.   }
    * L2 B# G8 o5 K4 L7 _' D$ D* Z9 G9 d
  420.   unlink(".\\DownLoad\\update.txt");
    # r3 S3 q# e; C; S% _! _: j
  421.   if(UpdateLocal.size()) return TRUE;
    ( \5 t$ ~, n7 H' b' R
  422.   else                   return FALSE;
    % ^7 g- H* Q* A. h& |4 `  S
  423. }/ S: _( V) {7 t

  424. 9 ^+ k$ w0 y% x) q  E5 o5 p" J& y- @
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"+ V; H5 K! l5 _. r+ o& x8 g) y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ E! ~6 J/ Z& V

  427. 3 S. b5 V: p0 g5 f$ U
  428. 5 R9 S) b  e' d# m& z

  429. % g: n# W* l8 ]) v" W9 [! c! x
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( N' g5 U  U* W9 a; q# K' H2 l
  431. {
    & P9 P' h4 W# k, I- c
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;; `) a. @- A* Z3 K
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ U- o6 q) b8 r/ G& O
  434.   {
    # L+ K  k; K0 C& u; ~
  435.     char szLanguage[50];
    + h1 v  ^: [) @/ q+ g
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' M: L2 Z4 M: o' Q! @- P( r4 E& _
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% @" B$ Y& k  T6 @% p
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 j: ^3 ]  l# J6 `1 s, u
  439.     else                                   m_iLanguage=ENGLISH;
    ! B( \3 ?8 C5 T' Q
  440.     char szRegister[100];# k: U5 [$ m' N2 o2 i7 O7 K6 d
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' v5 i( x* m  K: W# |
  442.     strRegsName=szRegister;2 Y" P$ ]% B+ n2 ]4 H4 D- O
  443.     char szPatchURL[100];5 `  E1 W" J6 y$ D1 j" n
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 a! t" X0 h$ K
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' {/ e- U  M# ?6 \! E$ r, w' S
  446.   }4 z. c2 T; ]6 Y# y" X- L; Y1 h
  447.   else7 `2 ]& F+ {( ]" \9 ~
  448.   {5 V/ _/ _1 Q/ n% d% X
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) L9 N$ }8 E7 \0 S; I- ]' k
  450.     strRegsName=DEFAULT_REG_URL;+ h( _1 V3 E3 w# ~6 q9 ?% d
  451.   }" ~3 n0 O3 g% I% _
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    5 N6 H5 @  Q. A" G
  453.   {
    " s8 T4 v% T8 b, b( B
  454.     char szIP[50];0 Q  h5 x9 i* N- g7 B# ?4 a$ d
  455.     char szDIR[300];
    5 m3 [+ M! m" ?5 ]
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))2 J' U! G) C6 |; Z) X- q$ e
  457.     {
    ; E( U0 T* U! f$ O8 J9 B- x+ K& N# U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ( Y; o, h5 G. ~- L- C
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");5 {& @" p7 z" X9 v& y! K, S8 r
  460.       strHostName=szIP;# i1 T' x/ H5 ^
  461.       strHostPath.Format("/%s",szDIR);
      V, A( e# P+ H. O0 h
  462.     }
    % i8 W' a2 v/ Y, ^# D
  463.     else
    ) o0 F& `9 N! T" X$ U# L
  464.     {
    7 b7 Q' b' o$ b# M
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 \/ R* f+ _' S
  466.       {
    * K8 ?# ^4 B% y
  467.         char szLanguage[50];
    1 O; P6 y- v7 R3 W" X
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 s0 a; S" ~* c+ ^7 s* m
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) A' j, l, L4 [" K) S0 z
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" D! P" `$ L- U# x8 |) L! N
  471.         else                                   m_iLanguage=ENGLISH;
    & X% J$ q' ?% A9 w5 N2 z0 o
  472.         char szRegister[100];* B  f# B6 r3 @, `, I- Q; P
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- p- \; t5 v9 F8 i8 R2 ]1 b2 \) h; v
  474.         strRegsName=szRegister;
    1 Q4 H# V! h% I9 g4 `
  475.         char szPatchURL[100];" `8 M5 m1 p' f- d* b  J
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 \0 s( V- _/ R
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* f( m/ U; j. i7 l6 R& j% {! F" N. r
  478.       }: y6 @" C% Y! U1 ~, R' C% W4 b' e$ f
  479.       else& U) p9 f. Z9 r& l8 c8 q
  480.       {* B' W7 B+ `( B4 d/ i
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 k# D# L+ F3 K  H8 q: ^
  482.         strRegsName=DEFAULT_REG_URL;
    ) A+ |. H% x  M! Y% w5 H
  483.       }
    5 ?0 B0 j& o; y  o$ K$ U0 s) Q
  484.     }  \& d( s/ X; I+ J% i" h
  485.   }  p3 s; q5 P* C. O
  486.   return true;6 ~' A$ m+ }6 r0 h  [) `
  487. }6 z3 p0 b* y% ?" f
  488. ' ?- ]: C) k6 U" ~- y& u8 `
  489. #include ".\ZLib\unzip.h"5 R. N0 G1 l( ]' f4 ^$ l: Y$ P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);' ~: ~+ f, P  ~$ ^$ {' t# R' j
  491. /////////////////////////////////////////////////////////////////////////////+ W5 M& R* \: p. l8 h
  492. // CRevAppApp initialization
    0 e$ Q: i: @9 [! l. U4 |1 Q

  493. / F2 Y* }" G4 `# @2 c" @
  494. BOOL CRevAppApp::InitInstance()
    - M5 W: y' f5 H) Q
  495. {
    , ?) x3 @0 a; H0 y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];; j, ]+ v7 D: e2 D7 V3 I
  497. * A4 W  v3 x! S9 n- a
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    - s( F* w. v$ D6 R$ X2 H
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
      k9 x$ B  E" |4 Y5 M
  500.   {
      |1 a- p6 s" b* d
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    % f# |' P) k2 w
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    * e+ |8 A& x  l% o$ z0 }' w
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))* q# i6 `# K$ l0 M
  504.     {  W  o% N4 ^0 F2 [
  505.       strcpy(szPath,szPathTarget);. _. N: f* z) C8 L
  506.       SetCurrentDirectory(szPath);
    / c) d4 J" s. ^7 d
  507.     }- [; V# R) c0 z9 F* D( m  g
  508.   }% ?2 C$ W- g% z2 f/ V
  509. #ifdef _DEBUG: H* j+ g  P- C3 o1 C
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 @- u0 i7 |; W1 R+ B& T
  511. #else
    - S; c% T! z- h$ Y0 b% y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * g& R/ O2 o2 M; i5 f2 L
  513. #endif
    . `4 b0 J4 A8 k1 C. ^6 h& ^
  514.   {1 z) k9 t$ V; |, |+ d% A: t
  515.     char tempFileName[MAX_PATH];/ a6 t' L; y  `& q
  516.     strcpy(tempFileName,szPathSource);) c' }" q8 p/ h% j+ N# W
  517.     tempFileName[strlen(szPathSource)-12]=0;4 y5 X9 e1 o+ S, C+ g
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    - g! I$ y1 y) Y2 b
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);- B. ^  ~/ p- H( Z3 i, g  m
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    7 I* E( D. I" b4 W" x
  521.     return TRUE;
    4 N' I! @* `9 C, L1 j
  522.   }
    : ]( F! B: ~( T7 O2 q
  523.   // Nuke 0118: Delete run.exe
    / w" @6 G( j) U7 M4 s
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );3 w  e  J4 o# ?* L9 M
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ) a6 r/ c" H) D* Y
  526.   if(!ReadCfgFile("Config.ini"))
    5 c1 v& a% ?; X! d: X
  527.   {& y" y' }; I, a' k+ {) Z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);8 `: W% _% e: K% p2 L( ?
  529.     return TRUE;! K. L2 N: Q$ s! o: f
  530.   }
    9 F" z0 m4 J; T  Y1 }% @& l9 q
  531.   HANDLE mutex;
    / |1 n/ c# [3 m7 X) C' z0 F" l
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    " w* s1 N4 {% u+ R
  533.   {& s' u2 n. d% U2 W$ a5 [# S1 k! |
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ) I6 c$ e' k! X- n
  535.     {! D' A" R7 z. q% e7 K4 k4 T7 K
  536.       CloseHandle(mutex);
    + f6 e( S/ ]+ z& O  t" _
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    4 ]8 ^5 `/ c& @
  538.       return TRUE;4 H5 u  z) o5 ~* K) ^  p( L+ V2 H( F. x
  539.     }
    9 u, b! |% g# X
  540.   }  7 a6 {/ v  e, K) _4 H
  541.   CloseHandle(mutex);
    " x1 i2 W, o4 e+ z2 L, X4 Y( A
  542. * D4 ^- }( o+ V0 U$ c
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% f% m( H6 h* ~0 O$ t/ v
  544. 7 z; I" U: J  m( Y# z% J
  545.         AfxEnableControlContainer();3 Z! t6 P; ~2 i0 ^8 D
  546. " r+ d$ X! l1 E. d! b
  547.   bCanUpdate=FALSE;% E' A6 S. o8 @
  548.   dwStartUpSteps=1;. y. D8 g# y/ k% X; M3 M% l) g
  549.   dwProgramState=AP_NOTHING;
    - v, ]4 u$ T+ a
  550. ( \' H6 L6 H+ z* `& `: W+ Z- u
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);' o8 z2 X% O' w1 |  b  Y8 v
  552. ! H+ S( _' [( K$ T# T- e
  553.         // Standard initialization3 J6 j0 e, O7 r# a9 i9 N( E
  554.         // If you are not using these features and wish to reduce the size
    ' d+ o, G! C8 |3 Q: c
  555.         //  of your final executable, you should remove from the following( K& `1 ^. T! R/ u
  556.         //  the specific initialization routines you do not need.
    & {' o. i. F- p8 N) g2 i4 _* _
  557. 2 J# R4 P* T5 u/ F0 K
  558. #ifdef _AFXDLL
    ' ?0 J1 M9 z# U! G& t$ O
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    7 t7 G$ P* I5 v5 j0 m
  560. #else
    % E- Z0 f$ ]+ ~; a" `* V
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ v7 {- }" S" w: |- |
  562. #endif
      I. f1 \, B% |  ~, p$ L

  563. 7 S+ A! ~' s2 j/ L
  564.   dlg=new CRevAppDlg;2 Z2 Y; {$ q: a0 b5 H  e& |
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    * [  x+ y  S( M- }
  566.   dlg->ShowWindow(SW_SHOWNORMAL);3 l. D2 r! b. u1 f3 Y
  567.   m_pMainWnd=dlg;9 A/ G9 v) q' o  z
  568. ' l4 c  |" z' A# K
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);; q: y# n7 u  D

  570. ( h3 T( S1 L6 {# Q* @% c2 w9 P9 t
  571. //  GdiplusStartupInput gdiplusStartupInput;
    / p) c3 k+ x6 a/ g6 {% a8 n
  572. //  ULONG_PTR gdiplusToken;
    * h1 v, M- J) X9 r. B2 ]& [
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    - ~. I- u$ U  y5 ?  j; Z# b

  574. 5 @: Y2 f2 y% u0 h* Z6 d6 Q8 h
  575. //        CRevAppDlg dlg;& k3 M+ M! v- y! D3 g: V6 a
  576. //        int nResponse = dlg.DoModal();
    5 t: I3 p  j$ |1 {- |' `. _( X
  577. //        if (nResponse == IDOK)
    ) Q3 d* P3 i+ T# R4 n- O
  578. //        {( z- |% G$ H  r/ S- S$ X. k: V' I7 R
  579. //                // TODO: Place code here to handle when the dialog is; ~$ x$ \: w8 R7 r
  580. //                //  dismissed with OK+ v( u6 _! A% L* {( c3 K
  581. //        }7 X5 Z3 D$ _3 l' {. ]
  582. //        else if (nResponse == IDCANCEL)
    " {  n5 v# b" k8 ?7 Z
  583. //        {1 k$ I; L# h8 `  a' Y6 l
  584. //                // TODO: Place code here to handle when the dialog is
    4 S% D$ b  ]  Y/ R
  585. //                //  dismissed with Cancel
    $ U2 Y+ {; W7 s& x& }2 _2 ^' I
  586. //        }; B/ {- N! u7 G+ g% {
  587. 0 K7 U# R/ j* s- ?* n# C& j
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    / M2 F7 L& n$ k9 K8 j7 O& J- `
  589.         //  application, rather than start the application's message pump.. n# Q( O* n+ B+ b
  590.         return TRUE;! }+ d: M1 S5 i  z
  591. }% H& _/ ^1 `) t4 R: o. D6 @

  592. ! t: r0 Z, Q5 @: A& e* w* t7 }7 |
  593. char *CRevAppApp::strtok3(char *pSource,char *token)/ L/ p- _1 ^( T& v! I3 X5 t
  594. {
    5 @/ Y0 p  \; S- Y4 _% C6 W
  595.   int i;0 d4 r3 j, t8 ^7 m
  596.   char *szRet;
    ' i# ^; v* P% g' }
  597. . T1 I) Z  |; W! o5 `& S1 u
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " ^+ O% g  l! k. H7 ~, }
  599.   if(sztoken)
    3 `1 K; O" F7 [
  600.   {
    ( z; y0 R! i- h' e3 \( x' R
  601.     szRet=&sztoken[itoken];
    ) p* q$ E4 N. j6 z/ k. J5 |
  602.     while(sztoken[itoken])
      @# T" d1 @: W6 K- Y9 t
  603.     {
    ! @; @8 K; a9 ^
  604.       for(i=0;i<(int)strlen(token);i++)2 i- Y7 d  P. R3 e, x( ?. d
  605.       {8 I' h7 u3 P# Z7 W9 u
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])& D, f/ J. b! S! m4 P7 k# U9 f
  607.         {4 y) Y* r1 v" u0 G
  608.           sztoken[itoken++]=0;
    2 D; ^% i- J# x) t/ i
  609.           sztoken[itoken++]=0;
    % h; R: s( ~, W! @. m" B
  610.           return szRet;. z2 ^2 d+ p0 }  s
  611.         }5 g+ V1 p3 k! v& r; m
  612.       }4 X9 }. O2 ]) z: ?" l7 f" Q
  613.       itoken++;
    ; H* H" c, w% S
  614.     }4 k" |# F% x9 H6 [
  615.   }- j& C4 z" F7 x5 X0 ^7 f. b& Z
  616.   return NULL;
    0 q/ R( {" B4 a9 Y
  617. }* o' O- s" r5 V- z
  618. 5 a) {7 r: I3 B( {) F0 E# v
  619. void ProcessProc(long Total,long Current): L( ]' B7 {# r- g9 |( l
  620. {5 B& B* K9 \- k4 a/ k6 q
  621.         MSG msg;1 @1 t7 j# }/ q2 F% ?: R
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);( m! ~2 [% [  f: H+ G$ ~8 P" ^
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' ?9 q9 x, Z7 A' p6 }
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))' o6 y7 f5 q- q3 \" @/ I; m
  625.         {- F" ?, h) g& {0 U0 l& b
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & c7 f5 q) Q+ ^, f& ~! o( p
  627.                 {
    8 Z# L5 J; o  g. v/ A
  628.                         return;5 c6 R2 `' C8 N7 }# p! S: c
  629.                 }
    ' D6 {, z# d+ F) l' |! G
  630.                 TranslateMessage(&msg);/ e: T5 u& y. S2 i# @" f! o
  631.                 DispatchMessage(&msg);5 E. I7 O8 u6 ^% E
  632.         }       
    ) }' {9 H. K; _+ S/ X
  633. }
    - v) M! P( _5 y2 I* C

  634. 1 ?* q6 B; p9 d  q
  635. BOOL bFirstChar=TRUE;
    6 x  K2 E1 i( W& t
  636. 6 G8 }7 Q6 s0 X
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - }/ t* K3 i8 Y" ^3 a
  638. {
    ! |* S4 q( Z# Q
  639.         // TODO: Add your specialized code here and/or call the base class
    0 M% \) A2 k8 I- b/ F
  640.   switch(dwProgramState)
    * X+ i! s1 W# u/ _7 ^3 q% W
  641.   {
    0 f  v" G1 H2 Y* j* N
  642.   case AP_NOTHING:$ F0 Z; p; V5 M' Z) q. c
  643.     switch(dwStartUpSteps)) h# i# F" F6 m1 Z" O! v" V
  644.     {$ T( [- S8 }! U3 q: ~" F
  645.     case 1:& u$ H3 M8 K( Y
  646.       {
    # y# a* g# J! @& ]) T. C
  647.         int i;
    & o- N; H# [7 }/ A) Q5 n- q& w
  648.         CDC *pCDC=dlg->GetDC();
    3 k5 q! R" T6 t2 H" e4 a2 p
  649.         HDC hdcwnd=pCDC->m_hDC;
    ) Q1 H5 |/ D' o+ f; Z' p& t
  650. //        Graphics graphics(hdcwnd);, j' t3 O1 D( D3 K6 ]; e( ]! I# _; ~
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ; k( u# I$ y5 t4 y
  652. //        INT iWidth=bitmap.GetWidth();; @: ]" v& g& i  b( [9 {
  653. //        INT iHeight=bitmap.GetHeight();" N: g2 `9 f( {/ {( S' A' O; {
  654. //        Color color,colorTemp;
    " d: K6 O3 M5 _/ q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ X" d" U2 {! [3 T+ ]: B5 s. ~
  656. //        {2 s! P! R+ T% d$ l
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)- f- @' z8 t4 A' f4 z( Q/ H5 t
  658. //          {
    , @+ r  L; ?, R& S3 F
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ) ?. a0 q0 [2 o1 Z
  660. //            colorTemp.SetValue(color.MakeARGB(
    / Q7 o8 K" _' I
  661. //              (BYTE)(255*iColumn/iWidth),
    ' g9 Y- M# m+ ]- L  Q. n1 U
  662. //              color.GetRed(),
    7 ?+ f: ]8 R( z
  663. //              color.GetGreen(),
    ) ~. H5 I: F' l* A! D$ _' \
  664. //              color.GetBlue()));. E4 g* O* c1 O6 ^$ {
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);: ?* ~7 t$ f/ q% V2 k7 b% n
  666. //          }
    6 L0 {. Y0 U; R
  667. //        }( o5 U* F- @" _  p! L; l! N
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);- i; i( u; k( A# _, _  _6 ?
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & i! w5 s# j; d6 g" W# c
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
      j7 S) R/ g  N$ X) e$ e
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 m! `' ]9 i. x" [$ G( ]
  672.         for(i=0;i<240;i+=8). _* t4 G4 m8 J/ S" }! d) q. x+ P' S
  673.         {
    " l" x9 l: p- |/ V; x
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);1 E5 K/ A  \! [9 [0 x7 y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);$ ~" D: M9 I6 ~* K! G* j
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - R, w% O/ a8 ^: Q% J; K
  677.           Sleep(33);
    . K0 b2 k  E, i% F
  678.         }! Q* P6 C6 p6 j2 N$ _( D
  679.         Sleep(1000);
    * H: Y2 I  I5 _$ x
  680.         for(i=240;i>0;i-=8)
    $ T! d2 h( h& G% y
  681.         {
    : A( F/ ~  i  h
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 u2 G( j& H% x) s  D- I% c
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: p/ s  ]% I4 _+ [
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* N( m" G$ A# q4 D; Y! b
  685.           Sleep(33);
    ( T3 Y% s, N& x$ g" e5 j
  686.         }1 Z# o, H) m" s% U! a  t' Z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    8 z* d* X* S# O. A: q+ v
  688.         dlg->ReleaseDC(pCDC);
    & ?: _( {' K- p1 Z
  689.         DeleteDC(hdctar);
    0 v5 [1 ~5 O- B) K- v2 F
  690.         DeleteDC(hdcsrc);( N6 h8 v' t6 w6 H! W+ J0 L! C$ E
  691.         DeleteDC(hdcorg);  e- }( z9 h; D1 B& |
  692.       }
    & s7 T+ T, H& A
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
      r7 ]- v- Q, P# v6 Y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    6 k' n" T* K. o& s7 {
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");5 u; Z0 ^7 u  ~9 n2 j
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ! D8 i/ U; {$ \3 E$ }1 V! Y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! E; a  c, n: i3 G. D# d' n6 y; V
  698.       if(!Dn.Connected())+ c, O/ C& k, I8 f* u! P. F' f2 [
  699.       {
    ' _; R' @0 B6 J& p
  700.         dwTotalFiles=1;. s; S2 @0 }0 l0 N; ?6 g
  701.         dwDownLoaded=0;
    & d9 y2 ?, K) |+ K5 M/ a% l
  702.         bSilentStep=TRUE;$ p% F' v) _! \! i7 `
  703.         bCompressed=FALSE;
    : ~* Y+ c( H0 C" [- V& n, C
  704.         strExtLocal.Empty();, I# S+ a* ^# ~. J1 V4 g/ N: F7 N
  705.         strFullName="readme.txt";* w$ g0 o2 k4 r7 v- W7 M' k
  706.         dwProgramState=AP_CONNECT;3 f3 `* E/ f, ]+ Y) h! `
  707.       }# W  k. T! ^) W& y3 ?( t: y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();% [. w* N/ Y% h
  709.       dwStartUpSteps=2;$ J' N4 N/ X+ P. |: Y
  710.       break;4 [# f# k. y4 B! k
  711.     case 2:$ _/ q, [# ]( a2 b/ _
  712.       {
    3 N+ N# K- d# l$ F/ p
  713.         int iEOF;6 D8 l4 U; m, ~" P# U
  714.         FILE *fp;' ]" Z* X; d1 F/ m! f4 R+ ~5 J
  715.         char szString[512];
    : c# n" |) i6 P6 t- |
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    3 ]4 l+ r6 E9 H6 U' x4 V: s
  717.         if(fp)
    0 a/ K! s% p7 K" h' v" M4 L6 ]
  718.         {
    & b: {( l9 g; i4 x4 B
  719.           do
    ! @; v% f; z$ D
  720.           {0 ^+ g4 t8 ~3 d- W* P' N
  721.             iEOF=fscanf(fp,"%s",szString);6 X7 W) W6 p( k' W( u
  722.             if(strlen(szString))
    ' O* ]' @1 I- x, }
  723.             {
    " p" o- W* V, C  s7 y- |8 \' O
  724.               if(bFirstChar)2 a( A* B) |# x* t/ c
  725.               {( }' O6 k8 W8 O3 S  g; E
  726.                 bFirstChar=FALSE;/ n1 Y: A, M& W/ J& |
  727.                 bConnectIsBig5=FALSE;) H6 h3 x5 x+ Y/ O& R
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    7 w+ {. l" @$ y+ p0 \
  729.               }- P8 V5 x8 n  b* e% O; y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));& h. f% y( k; v- A6 n. d1 J
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    7 }; Q' ~' d6 [" w8 e  c8 t  e3 B* ?0 U
  732.               dlg->m_ListText.AddString(szString);
    ; y7 {+ h2 m; _6 ~/ ?
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - ]" Q% R0 f- ]3 v7 @3 J. {9 u
  734.               *szString=0;* I- Z" R% n" ^1 w
  735.             }3 n  D# H; i5 M
  736.           } while(iEOF!=EOF);
    : L" r. N# z0 [, p* M( O8 o
  737.           fclose(fp);
    + m6 E8 o& c( H, E, U4 G
  738.           unlink(".\\DownLoad\\readme.txt");0 C2 X. C; A4 E
  739.           dwStartUpSteps=3;
    3 U+ ?# P9 g+ C; B8 \. F9 Y
  740.         }- X+ u  q$ C9 K0 Y
  741.       }7 i; a# u% O5 d6 V: L# Q' I
  742.       break;) D7 c8 o: M: t) Y7 P! t  X# u6 c' B
  743.     case 3:
    ; d  s# h: n3 y3 l1 d! J% H5 L5 B
  744.       if(!Dn.Connected())
      O1 K- {3 T$ M9 f2 o" q% p
  745.       {- A' X* L  G, l% a
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);$ ]# {8 V- _# v/ l" i0 o% z+ d: P
  747.         dwTotalFiles=1;
    - d+ t* \- b! F& A
  748.         dwDownLoaded=0;
    . q9 [9 F/ {& g1 _5 y
  749.         bSilentStep=TRUE;0 c* ~1 h0 B2 n
  750.         bCompressed=FALSE;- S9 l0 ^/ X7 m6 G- A
  751.         strExtLocal.Empty();! n, [7 ?+ J+ W/ [$ j9 ~, z
  752.         strFullName="checkversion.txt";
    ; J( x& h6 A" s. \
  753.         dwProgramState=AP_CONNECT;
    / @: z# ^* {3 ^4 h% s/ e
  754.       }
    1 B0 G* n+ V% M4 u; ]
  755.       dwStartUpSteps=4;
    : V  l$ _- W0 m- m# q! a& d) n
  756.       break;
    & \: a3 V6 X) n7 W% o4 U
  757.     case 4:
    / Q0 J* h1 |8 G' l: I  _
  758.       {) T( s5 |1 l& p& I* `2 a
  759.         FILE *fp;; i- n7 m6 N8 o
  760.         char szString1[128];6 Y+ d+ |* J6 d3 k8 O7 m
  761.         char szString2[128];+ e$ X" d  J% r* a( C+ f( n
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    - v. F- \4 A0 b0 _
  763.         if(fp)
      j) @4 t. m) O! }4 J. O6 F
  764.         {
    * [# t) [- E2 e3 C
  765.           fscanf(fp,"%s",szString1);
    - h6 ]) O3 u2 n5 X  _' U' v
  766.           fclose(fp);
    9 i# p# O$ Z" ^3 B# e6 ]- M
  767.           fCheckVersion=atof(szString1);2 S/ c! ~0 |0 V6 @4 j8 d
  768.           fp=fopen(".\\checkversion.dat","r");
    , E  c3 I: V2 ~/ D& m& \  u7 Q2 f
  769.           if(fp)
    $ D& @3 t+ U+ A8 d6 y9 L
  770.           {
    $ y* ?+ v, y$ I( U/ ^# [$ R
  771.             fscanf(fp,"%s",szString2);0 O4 h8 i2 d4 C& C+ t% ]. Y% W7 U$ y
  772.             fclose(fp);. N4 q4 l) B, C* ^9 J* H
  773.             if(atof(szString1)!=atof(szString2))+ @/ v/ h% m* q. b; B* V
  774.             {6 f6 J, }9 P# C# K9 Q5 }# j
  775.               if(!Dn.Connected())- p) Y' M: S) k
  776.               {- Y9 A: ?& m5 h, R6 B2 N) B3 I& |2 }
  777.                 bFirstUpdate=TRUE;5 Y6 g$ n0 E; i7 c" X$ y# e
  778.                 dwTotalFiles=1;
    : w& f2 n( e) b
  779.                 dwDownLoaded=0;. ]# P$ n, `7 R- N
  780.                 bSilentStep=FALSE;
    8 i. \; I9 [" }/ m# p) z
  781.                 bCompressed=TRUE;. p: P' r: q  E  \* x1 u
  782.                 strExtLocal=".\\DownLoad\";
    2 l  X9 C, v9 Q0 G* X3 V* ^3 E* g) h: n/ `
  783.                 strFullName="update.txt";
    0 }( o, q$ [% h8 X" ~) |# A/ H
  784.                 dwProgramState=AP_CONNECT;2 c& h. ]9 r6 d" I! @
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , y$ A- N2 v, h
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : O" n5 ]5 u& I/ `- K7 s) Z3 E
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");* ]! ]! V! E4 u; j" ~5 }

  788. 6 B9 ?" ]- C: J7 D
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( g$ T" o& Q3 _* P6 C
  790.                 unlink(".\\DownLoad\\checkversion.txt");6 o. Y2 F. T. J
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)+ p2 M2 f; Y/ `" [0 g0 m# W
  792.                 {$ P9 V, X+ u( z% L
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");3 w: b( T8 e; M7 N
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");7 ^; ^6 h, _( K' x) ]9 B) Z1 r
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");7 n5 r% Z& @1 N8 `: [: L( V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( a; i8 F% @' e- ^
  797. 2 n% Y$ L6 q( a) e5 U0 _1 g
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");0 Y8 F) R* }. z' v6 Y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' p6 q; ?# u6 X
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");* c# d1 K' y# _4 U# L
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, i$ S9 X9 D, A" K
  802.                 }3 U# e4 ?3 `  m
  803.                 dwStartUpSteps=5;
    . w. U/ J7 c, v, B1 {% D  T* o
  804.               }% `8 q& F- J* i
  805.             }
    * d7 V) D! }: d7 @
  806.             else
    ) c9 ]5 }, R) ]
  807.             {  `5 {4 r) i3 `
  808.               unlink(".\\DownLoad\\checkversion.txt");3 j5 a- ^1 r( l* c
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 d: Q% w7 W' B+ v) Q3 F) ^% I
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" B; B0 b5 R. q6 y5 H: [+ P
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");0 {* o7 m# L. \  s! }" o

  812. + r0 Q. Q; r$ J7 u& \
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : G: ]* _5 _9 N1 T
  814.               dwStartUpSteps=99;
    . w: d: x5 A6 L$ q
  815.               bFinishUpdated=TRUE;: z2 L- h! [5 w, d; t
  816.               bCanUpdate=TRUE;. v+ P7 G1 w7 {0 i
  817.             }
    8 |! |1 @3 Y/ J5 h! T
  818.           }& P1 ~! z- |" q  M. M  y" z
  819.           else
    * l- x: r$ D/ F* B+ a
  820.           {
    0 T- Q7 Z" h% O2 d- o! ^* c% V
  821.             if(!Dn.Connected())6 M0 k7 z; [! p2 K# T
  822.             {
    4 J2 F( E. Q- A5 V3 P8 V
  823.               bFirstUpdate=TRUE;9 c0 b9 r" J1 r* l
  824.               dwTotalFiles=1;
    : K: F  H+ J7 z" x8 [( K
  825.               dwDownLoaded=0;: ?# a+ Y6 f% q2 R$ a
  826.               bSilentStep=FALSE;
    4 f- n7 \' \2 u' @2 k& ]% h) `
  827.               bCompressed=TRUE;
    5 U- t. P2 |3 {4 Z& p7 O
  828.               strExtLocal=".\\DownLoad\";. [: Q3 f9 }2 `* x& M
  829.               strFullName="update.txt";" h+ z5 x  T5 C$ I* l9 ?
  830.               dwProgramState=AP_CONNECT;
    0 k# R/ h- j% y  I. O5 f! `
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 V" R% j0 _; w  {
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 S" D3 b! j, J: r. b' c
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 T$ N- H9 h$ b. k  l
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / ?+ t% i; J5 T
  835.               unlink(".\\DownLoad\\checkversion.txt");; e1 ^) S( ~9 X, w( P+ ~9 e  k
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)7 V3 v) Y: w& w! A0 r0 c+ [
  837.               {* W4 G( S3 k( e# [
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    0 L% t- U9 L8 ~8 a, y' L! U
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    3 o3 M; M. ~% C& g5 m
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");& l, V; m4 g3 Z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 G+ y1 S+ C8 Q
  842.                 4 i( {+ R) X) I3 j9 b& u% F
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 n0 d0 Z) |- p" b  A% K7 G4 s: y
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! ?; G6 C, s! v( T6 L
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");1 e' ~6 e& E( d7 P0 Z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 N9 P) W( i4 E+ @
  847.               }. h+ l5 e8 b4 y- Z4 H( n+ j/ c
  848.               dwStartUpSteps=5;
    9 _' X7 ^; l3 Y, v. Q0 B4 l
  849.             }1 e2 ]6 M& F. |& ?, T" o, t
  850.           }1 O0 v( O9 W, t+ L( g' X: |4 b
  851.         }* m/ o0 [. W% f& p: Z
  852.         else
    & \* F; W5 z) _, S; x
  853.         {: Z: l0 h  }4 r. u6 s0 S& z* t
  854.           dwStartUpSteps=3;: X5 u" L% t. j" a* G6 Y' Y
  855.         }
    + s* V9 o7 d/ J- a; E) N$ w2 }' }
  856.       }/ v9 Q/ C2 S+ E1 ~+ |& w8 U( R
  857.       break;
    ! c! P( i4 R% [& \$ E& a
  858.     case 5:. B4 v# ]  x& ^5 _+ @
  859.       {( j  t! q8 R2 u4 p# a1 L8 o5 y
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ' {8 q" g$ O  W5 h( `: M
  861.         {
    ; T: C+ ~2 U, e9 A
  862.           int opt_overwrite=1;2 }3 g2 J  D& S
  863.           int opt_do_extract_withoutpath=0;/ Z7 W" p# _* H( F" Q' Q
  864.           unzFile uf=NULL;
    , l4 ~* O% @* D9 \% |# z1 \; i

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

! M3 N* C  Z8 e% r9 x/ Y' B! o$ N. y! o) u( D4 l, u; e

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-31 03:13

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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