CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
3 x- H8 Z& V" B2 U
  1. / RevApp.cpp : Defines the class behaviors for the application.% L4 U3 K/ h! i9 g& \, U
  2. //" K8 h6 b8 Y+ _  I  y3 Q$ }

  3.   x; |2 K4 \2 l" A( |
  4. #include "stdafx.h"
    $ k' R" c! e- n2 V

  5. 3 A2 x4 h) Y" j+ ?( N3 Z" @
  6. //#define UNICODE! ^$ x! O9 G( o$ w" x
  7. //#include <gdiplus.h>
    ! c  J6 i1 W* U5 ^& t
  8. //using namespace Gdiplus;
    1 L  A3 @1 X9 l+ ?

  9. + ?) J1 a7 L, `
  10. #include "RevApp.h"8 q% X8 l6 A  t0 G
  11. #include "RevAppDlg.h"3 |# b1 x% q# I/ z1 J- M* a
  12. 4 F9 B" w3 H! V3 e1 x5 z
  13. #pragma warning(disable:4786)+ s7 g9 x4 O1 m) v( |& R7 w) {7 y
  14. #include <map>4 C. y+ Y/ j3 e, t. t
  15. #include <list>
    8 j) P* x5 c6 v, u8 Z4 l1 F
  16. #include <direct.h>
    * @( s3 V/ u2 b8 V3 E/ H
  17. 0 S: ?3 Q4 c9 T9 Q
  18. #ifdef _DEBUG
    & n% V5 @& F, x
  19. #define new DEBUG_NEW$ K6 P3 D+ j/ a+ [/ e" L3 Z
  20. #undef THIS_FILE
    - b/ k3 Q+ m: e5 d7 R# ?" ^
  21. static char THIS_FILE[] = __FILE__;
    6 e* Z0 j2 i7 m- B9 O% Z  N: q9 u
  22. #endif0 P* J/ C) R( |3 |& F  k  h
  23. #include "SkinResDef.h"! r+ M2 L( n$ l3 [0 s$ T: m7 S
  24. #include "ChangeBG.h"3 F! Z5 p; o8 {
  25. #include "AFXINET.H"5 L$ v" A+ A# v" s8 P
  26. 2 u0 x; W1 j/ Z0 k# a$ `4 a
  27. #define TRADITIONAL_CHINESE 00 Q9 r' X) r8 J/ q
  28. #define SIMPLIFY_CHINESE 1
    / S  @8 ^. r2 f7 D, i$ f  q
  29. #define ENGLISH 2
    # t: B0 r7 {3 y! L
  30. int m_iLanguage = ENGLISH;$ C0 B1 l: x) a" k: V6 ?( d
  31. /////////////////////////////////////////////////////////////////////////////( _# F2 O/ F  A
  32. // CRevAppApp9 s  ?5 M; u; l: Z* u2 V7 v
  33. 9 \5 }( E1 h- ]) L8 k. ]
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    0 J) d3 Y; O2 A# {9 W) ~1 [
  35.         //{{AFX_MSG_MAP(CRevAppApp)2 k$ T* f2 b9 U7 v$ u- ^  D
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.4 F& n4 H( b* N& d$ F, k
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    , I. V5 _3 W6 N3 M0 R* t' [! x0 r- _9 K
  38.         //}}AFX_MSG
    : T- D2 w1 u$ i& ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    9 m( ?9 ^* f5 u4 ?: B0 y2 e+ s: ]
  40. END_MESSAGE_MAP()- A+ M+ D6 s! D- D' E3 W4 U" X0 A- `
  41. - ]$ z5 J; z0 n. e7 t" H* [
  42. /////////////////////////////////////////////////////////////////////////////
    , |# y: W5 V! E4 F
  43. // CRevAppApp construction
    3 ?$ F: l. |" }  \& t/ l
  44. 4 }" I2 R2 k8 l5 @+ z1 X
  45. CRevAppApp::CRevAppApp()
    ' Y- @% j6 ?  I+ r1 ?7 E  U
  46. {
    - B+ `& X* o3 y; d; q3 U6 D
  47.         // TODO: add construction code here,
    ) {& P: G# b1 h9 T
  48.         // Place all significant initialization in InitInstance
    9 N) D# `3 H( G5 F/ n
  49.   bDisplayIsBig5=FALSE;8 b- Y! L, x0 P) ^3 H
  50.   bRestartUpdater=FALSE;
    ; O, [4 ^4 U1 I& C! \
  51.   bFinishUpdated=FALSE;
    / d. x; Q& t! e
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;4 s) z# I, _: i+ k% M/ \
  53.   InitChangeDataBig52GBKS();
      o" D" K4 F+ Y+ E: [: y4 P
  54.   InitChangeDataGBKS2Big5();
    ' H/ g; H0 L6 s+ x: a- w* O& V
  55.         //1 ~$ L& K& b) d5 L  {3 j8 u& N
  56.         bClickRunExe = FALSE;, S9 K/ ~7 U7 @4 j9 y6 J0 f# }+ S
  57.         //
    9 T! e, R' ~0 u! h5 C4 q" T" ?4 Y
  58. }3 ?  ~5 P: y% b  J5 H& k

  59. 7 ^5 x$ S/ D2 P2 _2 A+ z) S
  60. CRevAppApp::~CRevAppApp()7 O2 n6 {( `# h3 W7 ~" p; o
  61. {
    1 w( Q- V5 K/ ]. B
  62.         // TODO: add construction code here,
    5 C, i& O; h  Q* n" _
  63.         // Place all significant initialization in InitInstance" r5 \& r" E# O
  64.   EndChangeData();: j4 G9 V$ L, z: i) f# D* }+ C- [9 m
  65. }& X' j* p) F+ S

  66. ; f8 O. K- \* {' F9 H) R
  67. /////////////////////////////////////////////////////////////////////////////
    + j- A8 p8 ?5 |: t+ f
  68. // The one and only CRevAppApp object
    ) R' `( m2 S/ }4 a' U/ o
  69. ' f2 B. c" d0 x
  70. CRevAppApp theApp;
    2 ~+ [3 w, f1 v1 a$ q
  71. 8 R. f( G0 Z1 C7 t' }
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)1 p: v9 x4 P9 c( p
  73. {
    0 [2 ]& Z0 Z/ `* F
  74.   int iEOF=0;' u# L$ B$ L8 P, X0 @- k8 D% B2 z
  75.   char szTempName[MAX_PATH];
    ! z. s: K' x& X$ y' {7 j
  76.   *szFileName=0;* [( w& `& T, V. w! r* d3 y
  77.   iEOF=fscanf(fp,"%s",szTempName);. `, w1 {1 {( K- P+ K' u' B8 ?
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('); T3 I; E: K6 O, x7 ]6 |2 u
  79.   {  ^$ p8 c4 K( n! b6 s
  80.     strcpy(szFileName,&szTempName[1]);
    ( E. y1 R3 p- ?6 J% t" {+ l4 Q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)+ F6 U3 J; {) j, O% U# _$ j1 x* `
  82.     {
    7 Y  t( y. A  z2 ?
  83.       iEOF=fscanf(fp,"%s",szTempName);
    . t3 P$ ~& {( h/ t' n+ {1 t
  84.       strcat(szFileName," ");
    3 ]0 j/ B' H4 q4 n2 g! H/ n( H
  85.       strcat(szFileName,szTempName);, f- V, A4 Y, z: h5 q2 n
  86.     }, Y) M7 O# _$ ^5 t& C6 O
  87.     if(strlen(szFileName)>=1)  M: Q% J1 \0 I+ b- |
  88.     {; B, S! A8 H  {6 \  g
  89.       szFileName[strlen(szFileName)-1]=0;0 S8 G" ?0 `; t
  90.     }
    $ B9 Z4 y) I& F! {
  91.   }3 l8 h. L* ~% u7 F9 T) c* `
  92.   return szFileName;
    3 D  [8 ]1 F3 \' ^! v( L
  93. }1 e9 f* u1 F: L- ?0 z
  94. 7 q( F' I) v9 u4 r5 f* Y0 }
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)/ T  m1 o+ @9 A: I6 `5 k! U
  96. {
    ) m: @$ K( ^, N7 R' Y& E- r
  97.   FILE *fp;0 T/ X0 p1 e# p$ I# ^1 }+ }2 |% L
  98.   char *key=NULL;: D* j( @) a* T# Q" E6 |  I
  99.   char version[MAX_PATH];6 _5 F/ B/ o5 \) l7 x- @, x
  100.   LPUPDATEFILE file,olds;% E% A3 P/ }( o( O' x( G
  101.   std::map<CString,LPUPDATEFILE>::iterator p;  f$ B+ {' q% {$ u

  102. 5 @. q) W7 \8 U( l1 {# ]
  103.   UpdateList.clear();
    0 n/ K* M# W/ h% ?6 s
  104.   UpdateFile.clear();
    $ e& f" ]' j1 X: u
  105.   if(GetFileAttributes(filename)==-1) return false;" z7 {# g: c- t/ n+ E9 L
  106.   if(!(fp=fopen(filename,"r"))) return false;
    * ?9 l) p# p, J$ [6 B5 j# s- d
  107.   fscanf(fp,"%s",version);1 `, l4 p5 S5 N/ S
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- [+ P* S# f8 y
  109.   while(fscanf(fp,"%s",version)!=EOF)9 j1 B# M7 R* z: L
  110.   {
    ( @: W$ T/ k& ?# Z/ j/ p" n/ ?2 a
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' x! w/ R$ S4 W1 ?# _
  112.     fscanf(fp,"%s",file->path);1 F: d& J4 u& j
  113.     ReadFileNames(fp,file->file);
    / d; g1 ~" G* h$ Z9 x
  114.     strcpy(file->full,".");
    " \% W* h4 F8 W* @% Q( ]
  115.     strcat(file->full,file->path);$ d8 b0 m. ]$ O
  116.     strcat(file->full,file->file);/ F( B: e' `0 X* f& A: K
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())/ y! U6 s& I, v) _9 z! P# u
  118.     {
    ! c7 R9 k4 @7 @2 G- e: {
  119.       file->vers=(float)atof(version);5 Y' c) J- T, k. u- N" F' ^
  120.       UpdateList.push_back(file->full);! n3 P7 W0 m/ O
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));0 `# c9 P" s$ {( h, S
  122.     }/ R8 ]2 S  {$ v. \
  123.     else
    : d6 V$ C+ Z& p9 S1 x3 I
  124.     {- y( f+ y3 r5 d4 L# Y% x
  125.       olds=(*p).second;1 Z  F6 J- K$ z9 n
  126.       if(olds->vers<(float)atof(version))7 @6 B6 |, H8 z  G: n
  127.       {
    $ z) \% h9 U$ A6 D
  128.         olds->vers=(float)atof(version);+ t8 t5 z  \; n6 d
  129.       }
    ) m' U; U% r- y' \
  130.       free(file);
    1 W- [' n7 z5 ~. k# n6 K( j
  131.     }
    5 ^" Q# s9 x/ i( V( ^0 V
  132.   }
    $ F" R: q) n% u
  133.   fclose(fp);2 t! L9 x& v3 o; Q
  134.   return true;
    ( _( Q; }) ]% w, H* c  N' |" |- t
  135. }& m. w  B$ F1 G% [

  136. . w5 n# q' K# ]; @/ e- `
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    3 O! U& U7 r* t6 O' Q$ W, k/ _- a
  138. {
    6 S/ A3 O$ k" u" h
  139.   TCHAR  szFull[MAX_PATH];" a4 e$ X- D- F. Y
  140.   TCHAR *token,*inter;
    % W, ?3 D0 b5 [! I" W$ u) ^
  141.   *szPath=0;
    : ?. s6 _4 a* |, |
  142.   strcpy(szFull,szFullPath);
    : ?, E+ \' t3 N0 T! z
  143.   token=strtok(szFull,"\\/");
    & M9 V( ^( g1 R( Y) l3 p2 @2 S
  144.   inter=token;
    3 H1 _+ t* ~' d' G/ h
  145.   while(token=strtok(NULL,"\\/"))
    % A8 `  V6 X- F5 g3 B
  146.   {
    - t( B/ \# i! Q' K2 i. p5 u5 h8 d
  147.     strcat(szPath,inter);* c0 |* q" _* i. y- p% N7 F3 q' S
  148.     strcat(szPath,"\");
    5 }, v- G) W: h% x
  149.     inter=token;
    ; N4 v" B, a% ^1 y) i6 v5 i+ d
  150.   }
    8 ~5 U( ~% K5 Q5 G. f. o' A
  151.   return strlen(szPath);. `0 \1 ^- f" x1 B. U+ x( o
  152. }
    # l* v5 w+ S6 `, g+ d' M

  153. 1 l& ?; \5 K! R  _+ n6 {( \
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)8 U7 x( X1 l4 X: I4 y9 }
  155. {3 h. M# K7 E: f, X+ @; K0 m/ e
  156.   DWORD attrib=GetFileAttributes(Target);
    / _. K/ V) n% k' e' t8 n' r
  157.   if(attrib!=-1)
    5 v( I8 }0 p6 X# \% V  l: k3 F
  158.   {
    % q1 Q+ V) i4 [$ b) G
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    * e5 I; [4 p! r& `6 w. K
  160.     {) m8 y) o- s7 R4 v7 u' e
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    , _* J5 E2 N. v% A* i' d) I/ Z& k" x
  162.       SetFileAttributes(Target,attrib);
    : \) U, X' u6 e
  163.     }/ k( [' |5 O+ e2 H* H3 [; k
  164.   }
    0 ?  B% ?" ?# ~
  165.   CopyFile(Source,Target,Erase);0 q5 i3 _+ B: E+ b
  166. }
    # F2 `3 k  \# x8 q

  167. 8 S  Q5 C- U8 u- e1 C& ?1 T/ [
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : J, W8 O; k8 X7 d2 a) w
  169. {
    9 n1 I: y" Q% `# k, ^/ \0 w3 O% y# ~
  170.      FILE *fp;
    3 [! U/ L" w/ f% @; G
  171.      char  szBuffer[8192];
    + u( ~0 l+ \# l+ I% f
  172.   va_list  argptr;  \3 k/ o2 d/ Y. r9 l

  173. % z! U4 h! |! I! ^" k4 B. C
  174.         va_start(argptr,message);
      f) ^& r: ]- u# _" ^, L4 O
  175.         vsprintf(szBuffer,message,argptr);
    6 n3 g* w# q$ T
  176.         va_end(argptr);
    . ]7 P- \, K4 m
  177.   fp=fopen(FileName,"a");% C5 e" I2 L$ o4 K* P. g# m# g* p+ G
  178.   if(fp)$ m' y  G+ I" H: }+ v
  179.   {
    % M+ a- H# |3 y1 D! y
  180.     fprintf(fp,szBuffer);: ^. x% K) Z7 [3 l# B- [* E$ \
  181.     fclose(fp);8 M2 S- l1 J% Z: F
  182.           _flushall();
    8 R3 j. F% [6 S$ y. F% ^8 \2 l
  183.   }
    2 @% a, j0 C1 _; Z! J; X
  184. }
    5 o4 s* u, @+ H
  185. " v& J5 V, Q7 k" r% q1 c
  186. BOOL CRevAppApp::Fclearf(char *FileName)8 p8 A* X: [) ~" W
  187. {1 J# I3 o, R, C0 M/ n9 I7 S% z
  188.      FILE *fp;4 V3 p+ F: b3 J' Z
  189.     DWORD  attrib;' b( ]8 f- l. U8 D6 _: ^4 a  |
  190.   attrib=GetFileAttributes(FileName);! B7 Y+ I$ N  a& Z
  191.   if(attrib!=-1)
    1 V, y; e+ `: b9 p
  192.   {
    " M/ S: J4 A" @
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    1 r5 G" h+ B6 W4 C0 J+ Y
  194.     if(!SetFileAttributes(FileName,attrib)). Q0 q4 d5 @+ y5 `# `. Z
  195.     {
    * m4 g8 w/ Y! r! Z. [; R2 J  `
  196.       return FALSE;5 C2 ?. c8 q/ j1 d6 _3 b
  197.     }
    ! p' n* l% A1 ?+ f( \0 ^5 I
  198.   }
    # Z2 J, S7 ~+ e. E1 C1 `
  199.   fp=fopen(FileName,"wb");
    & `4 `  Y8 y) ^8 l3 p) n
  200.   if(fp)
    2 G- w) W' Z, V7 f$ `( J
  201.   {
    + T( N/ N; Z5 M3 X; k. h2 F, d
  202.     fclose(fp);6 H1 m4 C* n0 @" D- v# c
  203.   }
    - x4 b0 j# m; {1 B$ D( G7 p
  204.   return TRUE;0 M3 s' I& J+ f. g
  205. }
    ! ~, Y3 E, X; C# q( F
  206. ! ]; O8 M" h) Y  K4 ]( L
  207. BOOL CRevAppApp::UpdateLocalVersion(void): p" u/ J0 k: H+ ^7 \
  208. {
    $ N* `( k5 \" L- E
  209.   char filename[MAX_PATH];
    : L3 f, E, O: Z0 v* w
  210.   LPUPDATEFILE file,olds;4 ]+ Q1 O' P1 f: D5 ?: P
  211.   std::map<int,CString>::iterator i;% k9 @2 @& q8 o
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 W( _" J' L. X+ m% o
  213.   std::list<CString>::iterator l;
    6 b$ C0 A& n1 q. O8 `: t- O' a* `# `
  214. 2 j5 [" O# K3 R9 Z
  215.   if(bFirstUpdate)
      F3 g. Y, N/ H/ p. Q  g, \& l  q
  216.   {6 B: ~6 q9 t8 |, t
  217.     dwCurrFile=0;
    3 P  @+ q4 t( D  X  u4 h/ B8 E
  218.     bFirstUpdate=FALSE;9 k/ T, e& S/ |0 g! ?
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): [( p! i' J0 K
  220.     {6 @  v7 C6 q: K; O) z
  221.       dwTotalFiles=UpdateLocal.size();* y8 Q0 r4 A1 l% o! i! N$ D5 M
  222.       dwDownLoaded=0;) q, v2 b7 `7 G
  223.       bSilentStep=FALSE;, [  V2 [( B  v8 D& u0 Y
  224.       bCompressed=TRUE;
    9 n* L9 y7 V3 C8 ^# n9 P; g
  225.       strExtLocal.Empty();! D$ q% U. v9 a# W2 d' o; T
  226.       strFullName=(*i).second;
    6 X& R9 B1 G7 Y9 p/ q+ \
  227.       dwProgramState=AP_CONNECT;- i( z( {6 b4 h' l4 B' C
  228.       return TRUE;
    1 q! ~0 Z6 m$ A' c4 E6 s1 ]
  229.     }
    & s: C, `2 X# m( g& |2 w8 Z
  230.   }# R7 `' `) F. A6 f' e6 }" m& q. _
  231.   else if(bRestartUpdater==FALSE)
    6 I/ D, e8 S  v/ W0 p' B+ V
  232.   {% H- a$ P% G1 V5 z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ) z1 @' w, |6 l8 H4 |+ u
  234.     {4 g4 Y9 A& ]) i( D1 y0 y. t, p; g2 i
  235.       file=(*p).second;5 Y5 ]( U' _2 Y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ; r, T- \7 u3 T% t. ]) H: \, E
  237.       {+ T9 V  a. Q  p& p& o
  238.         olds=(*p).second;5 Y) H7 y" A  I
  239.         olds->vers=file->vers;
    4 ]3 H- P2 T; s! v" r
  240.       }
    ; L' t% r# j& J5 }
  241.       else9 o- G! A3 S1 t& F
  242.       {
    9 v2 |# }% _' c9 {8 B/ D' X
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; g5 P1 G+ ?/ R7 V) r
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    / X# I; J: r) L) \+ \2 B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 o' J2 i& l& @9 y$ `8 W& m
  246.       }( g. P7 c* k6 T! e
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    + {1 h3 W) b$ p: P
  248.       sprintf(filename,"(%s)",file->file);5 F9 C: o/ i: P% y" ]9 h0 t6 W; O
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : f% \4 r6 R# \; l
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ( B; l7 ~! F) ^7 |. s' W
  251.     }
    # _7 i  x; l# M
  252.     dwCurrFile++;* N5 @- y) g/ H) f' P4 d- V' Z+ h
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ |8 ]  i/ o$ X( C. B" |+ p& ^  Y/ [
  254.     {$ M8 N4 ~" M" l: V, Y) K/ o* M
  255.       bSilentStep=FALSE;; C- [, \6 S+ r1 ^! E; e
  256.       bCompressed=TRUE;, O0 m3 R% r" v/ v) [: M- o4 h
  257.       strExtLocal.Empty();
    2 B' C! Z! t' Z( U  y
  258.       strFullName=(*i).second;
    ) }( Q* I7 w1 O' z5 [3 Q! d
  259.       dwProgramState=AP_CONNECT;
    4 N" u/ [, _/ U
  260.       return TRUE;
    ( P% W* w  g: j& ?% t8 A' H+ ]
  261.     }
    7 c$ t' I+ B1 Q- j
  262.     if(!bRestartUpdater)- G; |& ^! c5 S- r7 E. E% Y
  263.     {% F2 u1 j) b: Y" V0 W4 Y, E1 ^
  264.       int iCurrSize,iFileSize;$ Y( b  V- [* h- X" c
  265.       iCurrSize=0;! G) {, f0 z* d0 N5 L6 w' [5 R
  266.       iFileSize=UpdateList2.size();
    / f3 t7 F- j5 o! k. B( m) k, \
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ! q& O2 {0 c9 h+ P) r; X3 O
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");2 I! `, |* p& J* [
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    7 O: ^! a4 \5 M
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 v& w# d9 W+ j: O) U4 d, g" _
  271.       Fclearf(".\\update.dat");
    $ w! e1 g% e+ p( M- K
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    . l; _0 |/ r; {, v6 f3 J+ @
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % }% f/ E8 ~/ d& c) y
  274.       {% x* N! T0 S2 S% G' [/ |
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    - h# T8 i# w0 R, h0 f1 d
  276.         {/ K; [2 Y, N' p
  277.           file=(*p).second;
    . g  O9 d  K. g6 V
  278.           sprintf(filename,"(%s)",file->file);
    " |" p% o& a, V
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) a' x+ x. U5 p& ?& f! W; w6 K2 M
  280.           iCurrSize++;
    9 ^' }+ d3 i- i
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));1 ]9 [* P. O' U7 X6 [6 A- t4 {
  282.         }
    3 g' A% J* w% f; f4 ]" |
  283.       }
    % L  F: S% l+ C4 c
  284.       unlink(".\\update.txt");
    ; Z8 |& |- W  g- \
  285.       unlink(".\\update.tmp");/ Y, s  q5 D+ n+ m. r9 ]
  286.       Fclearf(".\\checkversion.dat");, L+ f* `; \' U7 K8 b: C
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);6 h/ \) `4 m: s# d* }7 D+ s( }
  288.       if(UpdateLocal.size())- j1 G; I* x7 N& d
  289.       {: v8 u3 d- s# V0 M& g3 n
  290.         UpdateLocal.clear();
    ) ^$ q7 G8 E- @) M  [
  291.       }3 D1 }2 T7 R$ O2 B& ^# b% g2 p: x
  292.       if(UpdateFile3.size()), {: w2 R: g/ _- K8 d) Q4 |: n
  293.       {, o# Q7 `# l$ u
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), l" P. R+ ]) l/ C: V
  295.         {, K- l+ C, Y7 R; Y. c# K: b
  296.           file=(*p).second;& ?; b& d+ c5 `$ k
  297.           free(file);
    9 H7 W( i0 d# R  f2 l; z5 x
  298.         }
    % x" E$ a2 U0 j4 L5 r3 ^7 c
  299.         UpdateFile3.clear();' y9 T: X( P! v! c7 g! q
  300.         UpdateList3.clear();" {* s& @8 D/ b" d
  301.       }
    ' `0 q1 {, z  a
  302.       if(UpdateFile2.size())
    8 k7 D  F7 p  Y# m8 Z+ s  c
  303.       {# j! Y1 N+ v/ k2 ]+ f1 C7 w' O
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 \! w) o& o, `3 u: ^
  305.         {
    - m0 L5 S) |0 r
  306.           file=(*p).second;' C3 ^/ M# x6 t* D7 _" B
  307.           free(file);/ b( a  f" ^" C: }- w
  308.         }: z' r) `0 ^$ d5 F0 u# U
  309.         UpdateFile2.clear();5 J+ B' |8 G0 P6 v( k
  310.         UpdateList2.clear();0 V5 j7 a' ^  g" X% a
  311.       }# r. \' x; N  `( \1 w' X5 }
  312.       if(UpdateFile1.size())% U: n) {9 Q" b- J8 ^/ V* F6 |
  313.       {
    + ?1 h3 y$ _* Y: Q6 i$ {- V0 E
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 p/ d/ d) G6 N+ I( O2 U% p% r
  315.         {! I0 o# t% `2 l8 t# ]( E
  316.           file=(*p).second;
    / Y! l7 L% f6 ?
  317.           free(file);! y9 u) ]1 N0 {' Q0 e8 t& b
  318.         }  \1 H4 @- ]) Y. @+ a
  319.         UpdateFile1.clear();
    # b' |& t* G' h' Z* g; n( [  q& d
  320.         UpdateList1.clear();
    7 u: J- {: s, T" f) r1 f9 h9 U
  321.       }8 L1 q( w& P% F& l8 [' s; B
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));0 I8 n: n4 B6 V& i' Z: Z
  323.     }
    ) y+ t) \1 j5 M4 a8 E0 x/ d
  324.   }
    5 h' U# [; \- N0 ^" F3 V6 t7 |
  325.   return FALSE;
    0 o+ L! p& y% T% H0 R
  326. }+ z) ^6 H% {3 ?$ G5 \# p! ]# X( \
  327. # b( Z/ X4 R) w6 j( |
  328. void CRevAppApp::ClearAll(void)
    . @1 U6 n: G; S& @0 g5 s- @4 x
  329. {& V+ I2 X8 f! l4 Z: V# b! r3 q
  330.   LPUPDATEFILE file;& L& P5 L0 |$ g& @% s- ]3 C2 [
  331.   std::map<CString,LPUPDATEFILE>::iterator p;0 Z; y# Z( \$ I; X$ v* p% a
  332. 2 [- V0 q: f. {; }+ }8 v
  333.   if(UpdateLocal.size())2 h, P! H. B  g+ t; J. e
  334.   {& L7 [2 M4 ]: b/ x: w- u/ d
  335.     UpdateLocal.clear();
    ; W4 Y/ X0 t& W3 U( d
  336.   }0 ]* {, a6 A. E! N
  337.   if(UpdateFile3.size())0 Q3 x  {) Y# a( {7 Q
  338.   {
    / T, ?4 H3 {5 v& j2 {+ }* Y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! ^2 V: P4 B  {1 {4 p8 L- ^; x
  340.     {
    8 G" B0 [2 c( ?* P( ?8 z' d4 Y
  341.       file=(*p).second;
    & S, R" S' ], u6 W, f% d9 f
  342.       free(file);
    + W% I/ z5 Z& ?/ ~1 ^" U
  343.     }
    1 ~4 [& y/ F3 ?9 [0 @( l
  344.     UpdateFile3.clear();( r8 \  |2 O" j; G
  345.     UpdateList3.clear();
    ' g% C/ {3 ?9 h
  346.   }! J9 c/ q: t* f3 h- e! g: n
  347.   if(UpdateFile2.size())8 |! Y" b( x# Y
  348.   {9 l' c8 z1 P  d! W- s; M8 `
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" W, _8 M; q' Q( Y
  350.     {
    ! Q% j& D8 Z9 M
  351.       file=(*p).second;& Q  K$ l; U. R2 y; J
  352.       free(file);8 Q! x/ Z2 u4 t& e" r4 p
  353.     }
    - }; L& ~/ [+ J/ z
  354.     UpdateFile2.clear();
    5 O3 Q* n1 n5 R: {. ~; a8 S
  355.     UpdateList2.clear();; |5 M# Y1 v% M3 l+ j9 e& {
  356.   }6 x" O2 N' h! }9 E4 Y
  357.   if(UpdateFile1.size())
    ' D# r; c: g6 \% S0 E% |
  358.   {
    ! b" X6 g; A. A  F
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - I) w$ y* ^1 }9 {* E  i+ O
  360.     {4 n: U" ]2 G& A3 ^2 d
  361.       file=(*p).second;
    : d& Z. r  W* z0 y: Y* X- q  [
  362.       free(file);# b8 J2 ?" |5 ?" p4 p
  363.     }
    ( k$ e+ e! f/ A: G5 |! m
  364.     UpdateFile1.clear();
    " E" O2 d1 ~8 F+ o7 [, T
  365.     UpdateList1.clear();
    , U( E. v6 {- t, L% i* T( a
  366.   }
    0 A& p, ~) X/ x2 q. d
  367. }  
    . @% P2 G8 p7 A) S& X8 j
  368.   
    3 i5 c" B* N. a' ^2 Z) @* [
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    , i6 \+ D# E5 j
  370. {- O& }' Q1 X  [/ Z
  371.   int c;
    & z' U; V" j3 u4 v* R2 `$ b
  372.   LPUPDATEFILE file1,file2;
    : V8 x) B7 D+ u* u1 S3 W2 Y) `- ^3 [
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    / e, P8 d5 x% m; Z1 y
  374.   std::list<CString>::iterator l;
    ! @" `+ n7 q# y' {' z( k3 }

  375. . h. v1 ]) U) T  e0 _
  376.   UpdateLocal.clear();
    # S  A0 M6 h8 S# o: `. |5 |
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);8 @, O0 n% I. }+ y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    " @( v9 B& q1 T- J
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : U' _, f1 p4 j
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 n$ F& d( F/ Y8 w+ W7 D8 `
  381.   if(UpdateFile3.size())0 q, s" g8 t; ?1 ?7 E
  382.   {+ W) g2 r8 f6 u
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - {% }7 Y" g1 b
  384.     {
    0 @* o5 I& a5 e& X7 _$ j
  385.       file2=(LPUPDATEFILE)(*i).second;
    3 L6 q3 ^  k( g0 p/ K
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' u! B2 L' g) h& q) x' u$ R1 W
  387.       {
    & z- o$ @$ z/ p* {& t$ d, J' G0 S
  388.         file1=(LPUPDATEFILE)(*p).second;
    % ?( t' j% [; e2 A2 e4 T
  389.         file1->vers=file2->vers;0 ^+ ~$ s/ H0 K; X: P# M0 Y6 S0 X- M5 m
  390.       }, [$ F! ?+ S# C3 s% I% z
  391.       else' i- g) t2 r( d3 Y
  392.       {. V  r$ s9 G0 b. d7 K0 g. ^
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' R  k" e# r3 H5 {2 [
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));+ V( |6 i1 n) v! x4 C) _! c
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));' L" i( Y1 q* d  Q  c* E& H3 j
  396.       }# W! U3 S5 U  P  C
  397.     }
    6 Q, B8 ^. q+ F+ c$ W9 j8 t9 u
  398.   }. ^9 ]! @" P* H& p# a2 \
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)7 l3 x5 C$ x: D& m+ z% ]% }
  400.   {
    9 D/ a  B" _& K% C6 E
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
      ]  K1 E. R$ d4 w
  402.     {8 \  y/ J  L/ |
  403.       file2=(LPUPDATEFILE)(*i).second;0 |' E7 d( n! S; P; e1 I
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    % y# Z, e% {5 L( I! P
  405.       {
    3 _7 v- T$ W5 W
  406.         file1=(LPUPDATEFILE)(*p).second;+ R) y6 a5 t* N% @* }2 D" R! @3 c
  407.         if(file1->vers!=file2->vers)) d& k9 u, A- W, v& Q/ j3 D
  408.         {$ }3 R% k* [# |' u* y! w
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' |2 L) B8 I4 Z# j1 T: ]
  410.           c++;8 D5 y. U  G. P9 |5 q7 H- y
  411.         }
    * Z! T1 q! L. y; N( _/ K5 k
  412.       }/ A; t. b6 W% _  L( W2 u& w" }
  413.       else2 ^8 X' r  e' X, `; Z+ Y
  414.       {" K5 K, Y, `# `- P" {) h" [+ y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 d( }, g1 n( H0 T- R
  416.         c++;, r" B( z" j- [
  417.       }. E* i4 l  m1 v1 O
  418.     }
    # b! _! T6 l7 L/ K9 z- m4 n
  419.   }
    & D% ~3 ^+ `) g; E, M
  420.   unlink(".\\DownLoad\\update.txt");
    2 y- V, @) k2 ?6 G' R0 U0 H3 q/ V
  421.   if(UpdateLocal.size()) return TRUE;; }- G& G! |9 @( ~1 N  _. ~5 l
  422.   else                   return FALSE;
    + A2 M& D/ W0 E9 O
  423. }# a- n- o0 N' ]1 h
  424. ! d) D" ^7 ?5 z- M: j- o- z/ v* `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    : D9 y( b3 k0 g2 P8 j
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"' s* d7 ^$ P, v* v, X

  427. , g- i5 ]. s: [. m
  428. 5 J2 W1 N  {( x* K6 ~# w

  429. ' B; M* C# j' R0 u! T
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; j9 j2 L; T  z
  431. {
    " X' o* W1 K# j) M
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 |* T  C/ m7 Y( v$ k8 Z3 R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & Y( m+ Q/ z: r! B. v* v8 s# x2 A
  434.   {5 f3 `3 \+ ~9 e6 G, ~
  435.     char szLanguage[50];
    6 d2 h! }, n+ U: X3 h+ a! t
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 @$ N+ l4 y$ w; {
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% O6 y+ O% W5 D/ ?2 M4 M$ u1 a2 {
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. V5 e/ J$ E* G
  439.     else                                   m_iLanguage=ENGLISH;
    + {+ c2 [2 k; G
  440.     char szRegister[100];7 C% s7 o' i' b
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");* W1 E# d+ E$ W) q* w
  442.     strRegsName=szRegister;
    ' O2 R" D/ |2 ~2 w* w
  443.     char szPatchURL[100];
    2 S9 X$ j- q1 {" K$ P
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- \0 ?; w1 N  L% U+ r  ^$ U$ e
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' u% R8 F; O3 a" y( _! ]
  446.   }
    7 Q9 ]7 G9 p8 T* ?
  447.   else8 N4 }9 U9 t  D3 j5 J/ X  U
  448.   {
    9 y+ b: T* ^/ s* Q) e
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) W5 k5 D! C# q4 u
  450.     strRegsName=DEFAULT_REG_URL;0 G- a) s' G3 W" G8 \
  451.   }
    # Y5 x$ a, \9 K- i  k
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    8 X: V6 i; t- `
  453.   {0 H& G: O' E: @7 Z
  454.     char szIP[50];; R& K0 T  q5 q' s1 _7 F
  455.     char szDIR[300];
    2 m5 d. u8 W( i2 r3 m% D: S2 v) H; i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))9 {2 i  [  h1 i
  457.     {8 m& a2 a$ T! N* S3 M9 a
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* \8 j4 a+ K* C6 |) D
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");4 C5 e! Z& v  K6 m0 l) o: b+ ~4 q
  460.       strHostName=szIP;5 E# {6 h1 b6 c6 c7 }
  461.       strHostPath.Format("/%s",szDIR);
    ; `9 X1 y0 J4 R
  462.     }
    ) w; P. O5 J7 G( _0 D% d# L* m
  463.     else
    6 m- U" L3 @$ w) p$ @3 d6 F! n
  464.     {2 a2 i+ W( S2 `# ?+ @; r
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 }9 M2 S+ i& c$ a
  466.       {8 [+ v' Y: j$ o/ w% M5 n- _# ]' d
  467.         char szLanguage[50];
    ' |' H4 }7 `! _5 p" b; o" J
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* i' b/ J# O% i' ~
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" |; }& F' L9 E2 {0 S; |+ S9 b
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;% ?7 [1 X) B6 E% S3 h
  471.         else                                   m_iLanguage=ENGLISH;4 p. r, I1 b$ F" H
  472.         char szRegister[100];
    9 L+ [! ]" d7 K( [
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 ^9 z* q, Y# S5 \+ V% c, X
  474.         strRegsName=szRegister;8 \* D  _$ \* f
  475.         char szPatchURL[100];1 ~7 v) o- ?: S0 S
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. Y5 l, _" |+ e; A/ d3 t  G$ r
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' j  \+ q" N9 Y- |4 ~' b3 F
  478.       }' f5 [- i8 f; F- A/ K  M* N7 s5 {
  479.       else
      V  H; t: Y2 c2 s: z/ w
  480.       {
    9 T9 l: N: s" t% f
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 K6 g& @& [1 l6 i* k
  482.         strRegsName=DEFAULT_REG_URL;
    8 h4 o4 {+ [+ p) ~0 y6 Q& {
  483.       }' c9 t( x  o. [+ H
  484.     }
    * X! W8 p/ F# X1 U5 }2 k8 M$ D! k
  485.   }
    ! }+ w. Y1 X# V+ h5 {
  486.   return true;
    8 h) N/ N( v! Y% N: p- S& G
  487. }
    2 T# Q3 }9 |3 y

  488. ( ~6 u3 S) o& {' U0 d- P4 E: o
  489. #include ".\ZLib\unzip.h"* l3 @2 {: K1 r" J
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);9 G- b* U: G% L$ U
  491. /////////////////////////////////////////////////////////////////////////////
    " j& l& i6 C3 r
  492. // CRevAppApp initialization
    " M7 d4 m" W; Z% b/ O

  493. + ~* F# S& Y( b2 I
  494. BOOL CRevAppApp::InitInstance()
    : y1 J. z2 [# {4 q! w* z2 g
  495. {
      v3 F$ q% {) x+ m1 M# h% C
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& G) R$ b  G; ]5 S7 n( f

  497. 9 v3 E6 g4 v7 w5 C- F7 v
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    8 d4 D7 g; i# l- u; v
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))  W' y1 j" P4 ~
  500.   {
    / E1 b& C( m& x+ f
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    : p; X* q' D. L6 X
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    4 K# j) h: Q: t' U! T. r
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    0 e7 d1 y. i$ @( R1 @  h/ ~
  504.     {
    9 i2 d( w; u2 n3 S4 [: ^6 f8 l- V; Z
  505.       strcpy(szPath,szPathTarget);
    . a) V% a! I6 v: Z
  506.       SetCurrentDirectory(szPath);  J2 \5 Y; [: T* U0 ?# ?7 H1 F
  507.     }
    9 F7 X7 V: r9 p1 `
  508.   }/ X$ g% o) I* I# Y) m
  509. #ifdef _DEBUG5 f$ J8 e, g. V5 T" w9 G7 d' n
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 S# N% A2 }+ K7 Z/ G4 ]6 Z
  511. #else! M# q: Y- z! J1 _- k  ^
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 v/ w& W3 ]8 \# Y2 X' k
  513. #endif
    7 `, k- K6 H8 i! |
  514.   {/ G2 N6 J% o3 B/ m$ ]5 x
  515.     char tempFileName[MAX_PATH];
    0 B6 S( A( P" j- x" @) O1 C
  516.     strcpy(tempFileName,szPathSource);. R+ b6 y  G/ z6 w& E
  517.     tempFileName[strlen(szPathSource)-12]=0;: h, n+ x. L9 B; }; b
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    4 M' p' E4 s) `+ ?) |: R( E
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    9 T. l* d, p9 L0 ^% f" L
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);$ y# q9 d. Z# [$ `& b: g
  521.     return TRUE;
    7 W! a' ~! e: n. g# ]/ Q
  522.   }
    " {9 U9 L; H7 r( I9 W
  523.   // Nuke 0118: Delete run.exe
    9 {2 ~* w: i! R' {8 u3 f0 M3 g6 ^
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );) @3 p1 ~% M3 a
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    % |4 o# M% n* T' q& S( ]. a6 P
  526.   if(!ReadCfgFile("Config.ini"))
    ! ?6 f; ~- z0 y) z* T0 M  U
  527.   {
    : u. c% j. Y  P; P" [- n7 X
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    % g9 E2 ?& v0 [! P0 V2 ]. P5 C
  529.     return TRUE;+ E+ _6 E& B' n0 ^/ }4 O
  530.   }
    ; [! l% `7 b3 {( l6 T8 `; C9 s0 @' x
  531.   HANDLE mutex;
      R" x. I4 k( j% p; [6 p" Y/ g" _
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))2 f# X' e% q' w/ Y+ q
  533.   {
    ! i" O; ^; q, r' a' i8 h. e
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    & L! C& U. \. O* ]7 `
  535.     {& p" E" O/ w# |& _
  536.       CloseHandle(mutex);
    + S; G$ \! d5 H' s
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    , M: s' Z1 g' `6 J
  538.       return TRUE;6 q# a" O4 d; G1 \3 C( N
  539.     }
    " i1 C) ?/ t# N2 t
  540.   }  
    8 p1 }/ t4 H) H" o' `. T
  541.   CloseHandle(mutex);
    ) r. ~! Q5 w0 R# p2 b

  542. 3 B, Y2 A: h# ]  q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) s$ v2 u5 F  U
  544. / J% J0 A  _. K
  545.         AfxEnableControlContainer();. k* t! L+ q* Z

  546. % T7 j! V! A2 u, ]
  547.   bCanUpdate=FALSE;- }, ]1 X6 H! j: ]
  548.   dwStartUpSteps=1;* E; C5 o7 R1 t8 N  r3 B
  549.   dwProgramState=AP_NOTHING;
    ; c2 q0 `' o: t3 j, {
  550. # n# O9 T5 C. a- `
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);7 n& |$ X! Y6 S

  552. 4 N" j, M: H1 i4 S, @4 u; u5 `6 T: l
  553.         // Standard initialization
    $ n* r8 {" H8 r
  554.         // If you are not using these features and wish to reduce the size0 G( c3 _6 |; A5 p3 i
  555.         //  of your final executable, you should remove from the following
    0 J2 N2 R. \( G& P" s8 p$ r' T
  556.         //  the specific initialization routines you do not need.. f7 T" t, T1 H$ ]0 \, L/ h5 g
  557. , [, a, c' b. \
  558. #ifdef _AFXDLL) l1 ^, z/ L7 y$ S3 d  C- e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 f8 q. _0 @  l5 M) R
  560. #else
    - q- s1 A9 v, }9 Q4 U. h
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    : u5 v+ j3 G9 N* l: C
  562. #endif
    $ U5 q: q' ?. ]2 U+ C+ A

  563. + i- l& v9 e% [) u! C
  564.   dlg=new CRevAppDlg;
    0 K6 x) s" N% P5 X; J
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    8 q0 l$ `" `! P# y$ d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ; G' F! N1 j. b3 Y. z
  567.   m_pMainWnd=dlg;4 H  E  v+ U0 [/ w* y4 }
  568. 5 p4 k3 g. H$ k
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, ]  w3 x& P" |0 ?
  570. , M, m9 w5 v5 ~4 C
  571. //  GdiplusStartupInput gdiplusStartupInput;' l* F, ]" M3 S: T. d! o, p+ G7 _! f
  572. //  ULONG_PTR gdiplusToken;
    ' d1 A" I  l! A) O5 z  q; H% @4 U
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    # m9 l- l7 M! T+ b1 a, a" ~
  574. 3 U" }2 Q4 R, j
  575. //        CRevAppDlg dlg;
    ) F  J! ?. f0 W; _8 t( H
  576. //        int nResponse = dlg.DoModal();
    4 K+ Z  E" t: s! h, K6 W, J- W) o
  577. //        if (nResponse == IDOK). t9 U* C5 S( a* P# x+ ^
  578. //        {
    / T( C# G3 E* Z# n' j
  579. //                // TODO: Place code here to handle when the dialog is
    , q5 ]: V: n. A8 ^' Y
  580. //                //  dismissed with OK
      E1 v  L0 y- r5 J" u$ {
  581. //        }/ y8 T0 q" `' o) M* M
  582. //        else if (nResponse == IDCANCEL)0 Y. |, o1 k- ?9 k$ e$ ?8 i
  583. //        {
    7 k4 _, c6 O0 p9 ^  {
  584. //                // TODO: Place code here to handle when the dialog is4 F2 u7 h( g4 [- J) W7 ~) K: ?
  585. //                //  dismissed with Cancel
    ! X9 g# I* I* S' G. ~* q3 N9 G
  586. //        }
    . y/ I" a8 I2 h" u6 V. B5 }
  587. 9 x7 X4 j/ ?' w9 g6 i7 _4 O0 D
  588.         // Since the dialog has been closed, return FALSE so that we exit the+ U! |1 a$ c/ ]: B! S4 b8 G& a) U
  589.         //  application, rather than start the application's message pump.8 E3 N& l' G( [: h& _4 \
  590.         return TRUE;
      ?1 p8 K# X  ]5 n3 x  F& X
  591. }
    , g. x7 H9 b2 _* e* w

  592. / l7 H& p& m; U' L* h( `
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    2 H* d+ o1 H7 X
  594. {
    ) O# J2 y3 K0 e  r+ D  I6 B- V+ J
  595.   int i;* }7 s' A4 |: g3 o( x: Q- i
  596.   char *szRet;* E, u$ n( _6 K- o5 H6 ^* F  y

  597.   w" ^% H/ ?. O6 _- v7 o
  598.   if(pSource) { itoken=0; sztoken=pSource; }1 f& D9 K9 M6 p+ B
  599.   if(sztoken)
    & e4 y1 k  M, \3 |+ W$ s; ^0 a! _
  600.   {( |8 ~8 \- K. p6 T
  601.     szRet=&sztoken[itoken];1 T  m' k" M0 B
  602.     while(sztoken[itoken])
    3 a! [* c' r3 Y# Q
  603.     {
    : e* V- G) F4 P3 t" A& T
  604.       for(i=0;i<(int)strlen(token);i++)$ J1 h0 l8 g% M% |3 T
  605.       {6 Q4 A0 z) Z8 D+ F" N! k# N
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    3 t& s& T& [0 n1 p* G) P2 o
  607.         {
    , ~' Q' v# F! L
  608.           sztoken[itoken++]=0;2 c, v9 O1 F6 J# q% s
  609.           sztoken[itoken++]=0;6 C3 {/ _# q7 ?) o/ n& K2 I
  610.           return szRet;/ S+ Q; g! ~4 ]( W+ k" `
  611.         }* w6 `6 y+ c8 V% a* x% ^. c
  612.       }; e2 F: V3 C- G& E1 B
  613.       itoken++;
    3 P/ [7 J9 [. @8 h+ ?
  614.     }
    7 R- w6 R. a+ o
  615.   }
    ' Y9 j9 U" d3 N5 h1 r
  616.   return NULL;% M* ~7 [2 Y3 h+ W2 r
  617. }* L% m, |, k8 I# k
  618. 2 @. L! `( ?( j3 t0 `% V( Y0 g
  619. void ProcessProc(long Total,long Current)
    - ^* O1 f: ^! M$ q
  620. {
    . I3 ]- B# s: R3 [& P" |' p! C1 s
  621.         MSG msg;
    ! o4 D8 F( H8 O( G9 H
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ' N8 U6 j: P, Q( c& u
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));3 j8 _6 P# L9 f
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    - @3 E( v9 ~( {" o/ e5 S6 n! t
  625.         {' E. Z" ?6 K( W' d0 E4 V
  626.                 if(!GetMessage(&msg,NULL,0,0))
    5 h! I! e3 f5 ]  T% L7 s9 R8 u
  627.                 {3 N# N) m* o2 j4 E( ?% b
  628.                         return;3 c$ y$ a: d/ W6 k9 m" @( r/ W0 B
  629.                 }* i& A5 Z8 [8 {* _
  630.                 TranslateMessage(&msg);
    8 l! n$ R3 n, `$ Y6 T0 Y
  631.                 DispatchMessage(&msg);6 L0 O+ R* H8 T( h$ Z. v
  632.         }        / r! S0 S1 d+ ?7 x1 t0 M' f
  633. }% v% t: o' D* ?8 C+ P7 K0 S

  634. + R( g; c# e# Q% _4 g5 _/ o
  635. BOOL bFirstChar=TRUE;; S3 B. n5 v7 k+ N* c% x3 y0 `

  636. 2 ]$ E$ a3 v& i4 E$ j3 W% g5 c
  637. BOOL CRevAppApp::OnIdle(LONG lCount)1 R" H$ Z: |. B* h- B* A  P
  638. {/ j( ?6 u% i2 T& d- j
  639.         // TODO: Add your specialized code here and/or call the base class
    " S( q3 I. P* h" u8 w) Q
  640.   switch(dwProgramState)
    ( c* K) _% r  U* h/ {
  641.   {
    % X( X3 `# B8 d! R$ \5 }: y/ ~
  642.   case AP_NOTHING:' O# _) o* v% S" p
  643.     switch(dwStartUpSteps)0 Q& r& [# A' }
  644.     {
    2 k5 L, }0 S( n: b3 g2 M7 t1 \3 G  y
  645.     case 1:
    9 ^. k& L4 ?. c; \
  646.       {' _7 _( u+ M6 o# [: _7 k/ _9 Y/ n
  647.         int i;; e( v+ R$ O6 h& ]9 v' F9 c
  648.         CDC *pCDC=dlg->GetDC();
    ! v# |8 _1 W* `" l0 I
  649.         HDC hdcwnd=pCDC->m_hDC;" Q+ q- `0 b3 i; G2 h: z" g$ f
  650. //        Graphics graphics(hdcwnd);* e# i' _0 A8 [$ f
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    8 _; ]) w; |6 ^1 q3 M' N; z9 p. G
  652. //        INT iWidth=bitmap.GetWidth();4 x$ c+ \) e# Y0 m
  653. //        INT iHeight=bitmap.GetHeight();& {4 N& ^; k: K2 d" A8 i% L7 d
  654. //        Color color,colorTemp;: D; M) \; T. ?
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)/ q/ C5 U$ o/ ^( U  M8 {
  656. //        {8 J+ ]: z& a) c
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    $ v0 C: L0 s! o1 ?7 Q- x
  658. //          {
    4 K$ S/ J  ~9 x6 a5 V
  659. //            bitmap.GetPixel(iColumn,iRow,&color);+ x$ g$ l$ O/ P
  660. //            colorTemp.SetValue(color.MakeARGB(
    5 N( n- y5 w6 W2 r
  661. //              (BYTE)(255*iColumn/iWidth),& [5 R! ~2 b' D% {: ]
  662. //              color.GetRed(),
    1 ?) O. Z0 n1 e/ q" J
  663. //              color.GetGreen(),% H1 N. B. s; O6 Y
  664. //              color.GetBlue()));5 q/ h# [8 {: d$ N5 M2 j5 Q  D
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);" x( q; E' \8 L1 g6 K( m2 j7 @
  666. //          }" y% a. `% b6 f& H1 y0 k- g9 M
  667. //        }) x1 W! u. i" H) \
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    / A) ~1 b5 S* L% b9 g$ S1 H& c
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 `/ C% [* I& b$ T# q6 @1 Z$ H
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ; j% j" X2 ?( Z* m
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");  ]- G  D# S& D- c0 f5 `
  672.         for(i=0;i<240;i+=8)4 d4 r6 T' h% J, X2 H
  673.         {* `9 X' A) X1 g/ J$ ~' I$ s' A. ^7 \1 o' z
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& S9 _& q6 f( B
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ Q: w& q2 A$ L6 J5 E% `; D9 \
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ ~& Z6 [, Q9 W$ i' @  f
  677.           Sleep(33);
      X, G4 Y2 s# Y  @7 ^
  678.         }
    0 N# W/ T0 a4 n  C! [
  679.         Sleep(1000);  d. N& ^1 f7 Q/ i
  680.         for(i=240;i>0;i-=8)
      Y# G( V* N$ A2 g; D4 F
  681.         {$ @, ^' C  G& C* H" `# x" M
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! K; b) ?2 p1 c- {
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 y  @& Y/ r/ X7 ], A2 w: _, z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ |3 G2 C+ L; E8 A
  685.           Sleep(33);  G& _8 M) y' v: o
  686.         }
    " ^: Y* P! M9 m: c  T, @% X
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
      l" B- V! H* q9 t( p
  688.         dlg->ReleaseDC(pCDC);* L8 }. f8 F. A9 C6 Z
  689.         DeleteDC(hdctar);; l1 P( l# x2 ]
  690.         DeleteDC(hdcsrc);$ T, u% U: j" a; o0 ^
  691.         DeleteDC(hdcorg);
    ) I% s# B) p, u' \6 ^6 ~; o4 L
  692.       }7 R. ^+ n/ p. ]( N' M3 {  c
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    6 C0 q( n# D5 a
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");% i8 D& ]8 [2 S4 v
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ( ^& `! l1 R! z  A& p/ T) r* n! G5 }
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    3 [- R( |8 X  L' ^
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( ~% J' P6 t0 H4 u' U
  698.       if(!Dn.Connected())
    , y* h# R8 j: Y' A4 V$ A1 D
  699.       {
    8 c; @8 ]: ?( ?: s9 Z" z9 F
  700.         dwTotalFiles=1;
    & d7 g$ g. V8 e: \5 ?
  701.         dwDownLoaded=0;+ {) L1 d4 u4 D# \( t. R% `- ]7 Z
  702.         bSilentStep=TRUE;
    , t! s$ d$ J1 K% H( J; ?) M' Q! A
  703.         bCompressed=FALSE;
    . ~0 v) j, S& u" L( ~
  704.         strExtLocal.Empty();
    9 A8 F! z' }' ^3 x! H
  705.         strFullName="readme.txt";/ J6 X$ C1 ?/ u  O9 N8 s
  706.         dwProgramState=AP_CONNECT;
    2 i7 B8 h) b- V
  707.       }* C0 ^9 D0 {- ~: [' n
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();2 [1 \+ r) {) r$ i8 p
  709.       dwStartUpSteps=2;
    # h( {# H2 I* C/ Y: y$ N. b& X) W
  710.       break;+ ^$ F1 e$ N/ z" P' d! @: W6 y
  711.     case 2:% O; q) ?0 t  ?2 p* i1 I
  712.       {
    & [$ W4 N; \" @8 k# d/ K$ Q# O
  713.         int iEOF;
    % {* g" S; W3 o: f* L* Q2 R% l
  714.         FILE *fp;' S2 j# k1 P2 \! t) F
  715.         char szString[512];' k0 h. L+ v* u1 M# r. a" f! a
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    9 V8 D/ I2 B, a6 S7 }
  717.         if(fp)4 y1 H/ t, [9 Y0 }
  718.         {3 N. e% L1 d# U! R3 v2 L* V
  719.           do+ N7 Q0 `1 j) Z0 p
  720.           {
    % X9 N8 _6 a6 G' z( y% {5 i
  721.             iEOF=fscanf(fp,"%s",szString);0 i5 K0 Y8 _% z1 ~( L
  722.             if(strlen(szString))
    . d9 v; M4 Z, J9 e- x" q& g
  723.             {
    0 s  a; c( G# ~6 P  f6 j
  724.               if(bFirstChar)
    - u% [1 {& q( `9 q; S
  725.               {
    ( H. \2 M4 t/ |! T- r' ]+ ~
  726.                 bFirstChar=FALSE;; o9 B" x+ V4 J& ?0 Z
  727.                 bConnectIsBig5=FALSE;
    / M8 w# G7 p7 v) G+ Q- d7 Z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    & N4 B& h: U/ Z/ f9 t* }
  729.               }
    ' Z( U1 z$ v0 Z' [* g, ]* z) y  a
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 ?( y/ |2 O) o; u% r/ Q) Q8 ?0 D
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));6 S, q2 N1 w, T7 O3 O) b
  732.               dlg->m_ListText.AddString(szString);
    8 S; g3 k' z# N9 G7 P& f0 V9 W& G4 I& U
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 o3 \; f9 X! X, V6 d# y
  734.               *szString=0;
    5 q, t/ Y0 _0 |0 M* J# z* ]* f
  735.             }# H8 Q# C9 x1 o
  736.           } while(iEOF!=EOF);
    / R7 p3 L: o' {$ T" z- Z
  737.           fclose(fp);$ Q/ Y: |9 c& L; H+ V9 P# _
  738.           unlink(".\\DownLoad\\readme.txt");! }( h2 f1 q5 s9 W% ^( ]% H+ Z1 E
  739.           dwStartUpSteps=3;3 h. @0 [2 I  P$ H' T  Y
  740.         }1 [6 P2 c* V7 d% p4 r# _6 s. m
  741.       }
    6 K' Y- G7 O! b+ G. u
  742.       break;
    $ V& u9 d4 B  x) R
  743.     case 3:, |  o6 u; X6 L" ]
  744.       if(!Dn.Connected())
    # f0 A5 ?! o8 L. u
  745.       {
      z  U2 r1 Y0 n/ G8 X! Q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  a% U6 \6 l3 u
  747.         dwTotalFiles=1;
    " N- L' B  B5 w$ H* s9 P% m
  748.         dwDownLoaded=0;. t3 I, X( P/ ]) x" V7 m! r% d
  749.         bSilentStep=TRUE;
    + O2 h* |4 w$ m, H
  750.         bCompressed=FALSE;6 l! B  `0 q  V5 e
  751.         strExtLocal.Empty();+ y. @' E: l/ V- N
  752.         strFullName="checkversion.txt";
      r  w- T6 ?% \% z/ L
  753.         dwProgramState=AP_CONNECT;2 C! K7 Y, w, u2 O# G& V, h2 h! }. D
  754.       }
    ' G; T/ L% v: P& z/ M" h" [
  755.       dwStartUpSteps=4;
    . O. h7 }" B$ W5 q
  756.       break;
    ( m' f) m. h+ x" u3 q$ _- I, R
  757.     case 4:
    ) ~- q& G  r  m" q1 L. v
  758.       {
    + r$ a- m  K0 C. ?( L/ @& [
  759.         FILE *fp;+ U) O9 j2 ]6 D* ^% F# \  S' i
  760.         char szString1[128];. C. a! G+ V$ @2 X% T1 Q) Z; D
  761.         char szString2[128];
    6 ^6 [+ D3 G, w2 p
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    5 l6 |& m  A9 h
  763.         if(fp)5 a" b( ~) I0 x1 ^
  764.         {
    1 f! Z; C7 R; b  A: }
  765.           fscanf(fp,"%s",szString1);
    . ~! j, j  G8 i6 S; z
  766.           fclose(fp);
    " w1 o, L8 k5 e8 O+ ]. c
  767.           fCheckVersion=atof(szString1);
    7 C( Z5 Z' I* E! d- Q# h, ^5 P
  768.           fp=fopen(".\\checkversion.dat","r");
    ' V! w. |& T9 R1 @, {3 |
  769.           if(fp)
    2 t" m$ W2 x2 z7 j6 ^
  770.           {
    ) ?* [8 Y3 z- ~( J) d! `; a
  771.             fscanf(fp,"%s",szString2);3 j3 p: A, q. C* h
  772.             fclose(fp);3 r! J) N& O# {& V! d. i
  773.             if(atof(szString1)!=atof(szString2))
    9 T6 J$ k1 ^  Q  Q1 V  I6 W
  774.             {$ Y* Q1 E  a" }+ ^' O5 D" o  |
  775.               if(!Dn.Connected())9 M( f9 {  i% F( o+ A, x
  776.               {
    $ t5 J# v9 f$ l, [) R
  777.                 bFirstUpdate=TRUE;
      z" @* o/ y6 J) @8 t
  778.                 dwTotalFiles=1;
    ( g* f% m# Q7 V! u) O
  779.                 dwDownLoaded=0;+ S+ U9 c  L+ n+ t6 g$ \
  780.                 bSilentStep=FALSE;
    " A3 M5 g& O9 c9 l
  781.                 bCompressed=TRUE;
    ; S& D5 @, H" E, W& U% `* S
  782.                 strExtLocal=".\\DownLoad\";. q- P8 b3 I" @/ y* r/ L
  783.                 strFullName="update.txt";
    8 B- V7 k$ {; u9 d0 _$ Y$ i9 K& z
  784.                 dwProgramState=AP_CONNECT;
    ' T  ^; t4 C3 {
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  `  k$ N8 |/ L% O, v
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 N) X$ D! o8 l$ h
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - O. g) ]4 \* g( H. g
  788. # ~. }" v7 F; Q3 A
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # p7 B3 k* v( ]5 v/ q6 ]
  790.                 unlink(".\\DownLoad\\checkversion.txt");9 k2 u# h, X+ b# Q$ F
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; T9 G/ V9 v6 K, w- }. t
  792.                 {: g* v% {9 i/ b: U$ W1 @
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");) E1 J3 F3 o5 X# M2 |! \
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");! K# r5 D& o# x7 ^& _/ L, Q1 k
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    7 s9 }( _0 C# q* `( R) Y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ h; p; C3 ?6 I7 }
  797.   H6 l; d" O7 ^$ s
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 ~5 f+ ^: b3 y; y1 b1 q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 r- v$ X; `# e5 T
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");- c; a9 c$ U& |# T2 ~( |
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- Y6 }0 y( ]. Y  k7 B2 U% |1 |
  802.                 }
    # p, ]' E  a+ r+ x( R5 ?5 a9 V" n
  803.                 dwStartUpSteps=5;4 A3 F% n' o, }7 y/ x# @$ t8 b: s
  804.               }! ^( s" h. N& z. m" S3 i$ ~
  805.             }% e* d- K  ?% ^! z: X, P" q
  806.             else( {7 f# e, m) Z
  807.             {
    2 H8 z6 R* A' \& u1 P6 h( m6 s
  808.               unlink(".\\DownLoad\\checkversion.txt");7 ?! B$ Z) g. {& r; x( G
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 F0 E/ D* M2 B. T
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) [5 z. u% O: _' M
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    % p. \. L8 L3 u. G/ O

  812.   E; y+ I0 b4 O7 F2 F
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" N0 F) o7 o0 T. g& [' ^1 G, o
  814.               dwStartUpSteps=99;
    5 m7 {. h7 a$ V5 M' \$ K
  815.               bFinishUpdated=TRUE;
    * X% M! U" o" N" {
  816.               bCanUpdate=TRUE;
    6 K: I* a- i9 `2 d7 Z, k8 n9 F( K5 R
  817.             }' K- p8 u% n' B3 q1 }( C
  818.           }
    9 X# D% _) y1 ]6 Q7 g& y- p
  819.           else+ J0 W! ?8 {3 l0 _3 O4 \% R; w& P
  820.           {
    2 }- k7 M3 R3 ^) ]) z4 i
  821.             if(!Dn.Connected())
    2 F" p) P8 c' i; K& k. V
  822.             {* [6 o3 k0 C# {& I' _
  823.               bFirstUpdate=TRUE;/ T* E; G+ _5 j0 T- Y; K
  824.               dwTotalFiles=1;% U+ Q" |, {% x/ Y1 K+ K9 g  i
  825.               dwDownLoaded=0;6 _2 J& ~% j! T1 z0 P! W
  826.               bSilentStep=FALSE;2 H' z9 [: Q- f) q
  827.               bCompressed=TRUE;
    # Z2 I3 {; T" Y
  828.               strExtLocal=".\\DownLoad\";
    " o2 d* G( K; t( _
  829.               strFullName="update.txt";
    8 ?& h1 m& P/ I- B6 ~/ K  t/ D3 C+ W2 Z
  830.               dwProgramState=AP_CONNECT;
    # n9 s: z& p& m: F( c
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 @) N5 F0 k6 u2 u' H) S
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: ^3 }: a0 g" y  s" g9 q3 d$ P
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");! Q4 D0 F. z& g  f8 T
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 E) V3 ~- M/ ?0 w
  835.               unlink(".\\DownLoad\\checkversion.txt");+ `, e' J3 @5 F" {+ I
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . q8 P0 D' O% T) X: W
  837.               {
    & t0 p+ ^1 h" d0 t( Z
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");- s( D5 S) u/ Q- j  u
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    7 p" c' Y6 L9 ~' V: l/ K
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");$ k* T3 [; T" a9 x5 W
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . q1 W; J; n  t4 E4 g2 B1 L
  842.                 ) a) k: [2 l! M! E, e
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 ~' Z. }5 e! V, g/ K' Y5 i2 b
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 v2 y: D" S( q# N: M7 W
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    " T1 F; \. S1 `! a' X7 h
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      T  d+ a* v7 `. y& m
  847.               }* R- n  g4 l; @" k+ t
  848.               dwStartUpSteps=5;6 k! j) y$ }4 X2 M
  849.             }" s$ c$ h& [' P: `8 Z2 j' J
  850.           }7 L8 v2 f# h* w5 B# g
  851.         }
    + g6 R, U6 V8 i) f1 ^
  852.         else8 \/ d# \8 k9 E3 |. ?, A
  853.         {
      d. f4 I; x  j0 ~' W
  854.           dwStartUpSteps=3;
    1 K9 o9 A& K9 p% m; L
  855.         }- Z3 ]- ]  a3 c1 m" B# `
  856.       }# N& ~3 B& k- K4 g. `# O$ |
  857.       break;1 {) m' Z( E" f3 m, ?0 b1 @- i4 F
  858.     case 5:
    . [3 R1 B3 ^3 [8 n# x& O8 q
  859.       {
    " [; o& c- g: I: h0 Z/ f
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)- r% K) U, {& ~! N* O
  861.         {8 h' W8 _% ]  ^+ C  ]% [
  862.           int opt_overwrite=1;  b5 }: Z# L6 [8 C3 h( \* |
  863.           int opt_do_extract_withoutpath=0;, b  i! G0 t6 X8 L2 P: z5 `( o8 T; ^
  864.           unzFile uf=NULL;4 I3 t6 _, r- D3 Z# g9 J! n) X' D

  865. ( A' q4 W* G+ C& X
  866.           uf=unzOpen("Wsa.zip");5 ^& x- |  u/ v6 \4 a7 `
  867.           if(uf)
    " S2 ~. B" _% M5 ?; x- {4 p: ~
  868.           {' }' A4 C5 Q, x, \0 g
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);! l" N# H9 ~+ A5 h7 c/ r
  870.             unzClose(uf);. ~3 z1 v/ G& X1 F# J: u
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# \) M- X; Q; q; x* J, {- G
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");! z) D: V. U; G# e
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ; P3 h  y# y% R5 }; n+ j) Z0 Z9 B
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 V4 _% \0 f' _' V) \
  875.           }
    ! S' G0 |( v" G* K6 D5 W
  876.           DeleteFile("Wsa.zip" );
    $ J8 y' o- E. L( q: ]
  877.         }$ [0 J1 U2 S1 v8 q; |% V( y2 s
  878. 6 @5 a! }5 b3 ]2 `& K- w! Z
  879.         if(CheckLocalVersion())$ P! d0 p2 X* j: A
  880.         {
    & j" D1 O1 x& ~1 t& G6 g  u; f9 z
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");3 w2 C$ n1 ?6 l- _& K' F- R
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ' p8 D- e, Z0 X4 o
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    / y$ P6 ?) Q- B3 I, s( d
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . D& s4 |0 w/ ?7 c  U
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);. J+ M. P# g6 ^0 m! p
  886.           dwStartUpSteps=99;
    & c4 O  z& d* A: c. h, K4 H1 }
  887.         }2 U+ z# X) C7 {6 |
  888.         else' V" Q9 w( k6 u0 ^' u
  889.         {. U1 r$ E, j/ B: V5 K
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    6 S: K2 l8 r5 g2 h
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' Q& T$ G4 d5 S8 {# j0 }, }
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");2 v& l/ M  J6 j$ h. u

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

) j3 i, p. O' p# N) x7 u  a
# e1 ^/ v0 ^: L+ N' n

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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