找回密碼
 立即注册

CSUpdate.exe源代码

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

; q3 T+ N0 j' L. `
  1. / RevApp.cpp : Defines the class behaviors for the application.5 i0 a$ v1 g3 J, ~
  2. //# r0 Q$ }. a5 _

  3. . k9 S- R% e; o! @/ X; x) }
  4. #include "stdafx.h"
    ) ]$ N3 v" U9 X% D; z$ @. X7 P3 g0 ]
  5. & F  d) n3 q7 z. @6 _) x$ Q+ i% X
  6. //#define UNICODE" a. t* j$ c/ L7 s2 E; r
  7. //#include <gdiplus.h>2 s6 q# H6 T- z0 ]6 ?4 l
  8. //using namespace Gdiplus;
    3 t; ]- g5 D! }( L7 u( M
  9. # p& i7 P. f) L0 o( S$ c
  10. #include "RevApp.h"0 {8 C. |) @2 L( _& |7 a
  11. #include "RevAppDlg.h"
    % W: C. d* H4 s+ y

  12. 2 @5 E# ]4 s( o( B" S7 e
  13. #pragma warning(disable:4786)! w. k- n7 s. v- r/ c
  14. #include <map>. m1 n( u8 H- z
  15. #include <list>' M' q7 Z2 n/ O5 P5 X4 o6 H( x
  16. #include <direct.h>
    " b6 L2 P/ A7 U2 D7 P
  17. ! T% a3 ~# b8 u5 a; a! g
  18. #ifdef _DEBUG1 H7 M8 [8 C: U! f7 ]
  19. #define new DEBUG_NEW
    - S& l  J* c6 S5 X
  20. #undef THIS_FILE, k. Q1 z, e9 S  T7 d+ ^' G
  21. static char THIS_FILE[] = __FILE__;2 N/ X9 u) ^1 }  H' m
  22. #endif
    ) [5 h9 ^" t6 m# g8 s
  23. #include "SkinResDef.h"
    ' ~6 I0 z- d% B$ a3 y" m
  24. #include "ChangeBG.h"
    $ \: l5 \9 [9 }3 a
  25. #include "AFXINET.H"
    ( c/ Y) I! n* U" b7 L2 ^
  26. 9 n0 x, r+ v% P! u7 k3 Q8 q6 U& v8 W
  27. #define TRADITIONAL_CHINESE 0/ W# h* @5 U3 U% n. b$ R' p' ?; I3 [
  28. #define SIMPLIFY_CHINESE 1. \+ _1 X: s4 Y) Q8 d
  29. #define ENGLISH 2- F  A# e, f5 u  {
  30. int m_iLanguage = ENGLISH;9 G0 |7 O& Y7 v0 o" _) S4 |7 y
  31. /////////////////////////////////////////////////////////////////////////////! ~; c2 O* s9 f3 C. |5 y
  32. // CRevAppApp8 ?! r7 i" @; f
  33. 2 p* q  _, X; q. l4 S% C% m+ ~
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)* Y1 I  E+ V( W  Q- p  K) k
  35.         //{{AFX_MSG_MAP(CRevAppApp)/ M6 Z7 _) z* H; I. E
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 m) i7 V* ]& ^$ h: d; E( m2 o
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!* w0 D9 h7 G; S' T7 k
  38.         //}}AFX_MSG/ U% ~$ l" K4 o' {2 I* c6 o7 G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    % W. b2 `0 Z3 s) o5 Q5 k6 z/ m1 w
  40. END_MESSAGE_MAP()
    & n/ m  T  ?' m+ ?6 I  g1 o
  41. # `9 D0 \0 |8 l
  42. /////////////////////////////////////////////////////////////////////////////
    % G& l3 R5 I" S! v7 k8 ]2 F5 @
  43. // CRevAppApp construction
    : `$ q# J# V7 B5 o+ o
  44. 1 Z; u: a3 G: j( D$ E3 z+ c! W
  45. CRevAppApp::CRevAppApp()" F8 Z- V4 ^$ H  m
  46. {
    4 ]$ `. O0 \! `$ r) T3 {
  47.         // TODO: add construction code here,2 P& |3 C. f( B: X/ {% E" r* \
  48.         // Place all significant initialization in InitInstance
    % L/ |( L0 q3 K+ t' l
  49.   bDisplayIsBig5=FALSE;5 k/ c* n$ Q! K2 H! p
  50.   bRestartUpdater=FALSE;. w) ?8 i$ I0 i9 S- V# c/ C  R: @
  51.   bFinishUpdated=FALSE;
    % o- u: V$ o) J* K" _! V1 _8 r
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    , n( h9 N* q* c
  53.   InitChangeDataBig52GBKS();. c& R9 N2 t2 v" F+ x& {7 o1 z
  54.   InitChangeDataGBKS2Big5();
    1 L- Z8 e2 T- C
  55.         //
    9 K9 a: i7 `' [
  56.         bClickRunExe = FALSE;% k6 @8 c! z% W3 ?9 i: B
  57.         //6 V5 g$ u6 @( X' ?
  58. }
      t! e- N3 f( ?$ q) ^) w3 K# D: G
  59.   }: h- B% o, T& \! x1 Q
  60. CRevAppApp::~CRevAppApp()
    8 V2 G: O2 U, [4 p9 O3 X
  61. {% t" H: G& m) k! s
  62.         // TODO: add construction code here,
    ) G) R- X" H) `9 M  }
  63.         // Place all significant initialization in InitInstance
    8 N6 C1 u$ u. z2 H9 N3 ~. I
  64.   EndChangeData();
    ) b6 z6 t( }/ v* `5 I/ |( A
  65. }4 r3 U: H6 B# b" y1 I
  66. ' q! ~9 o& k$ {8 E
  67. /////////////////////////////////////////////////////////////////////////////! J9 {& [4 m! D% I; B" z# ^
  68. // The one and only CRevAppApp object, ?( ^' t% y8 H4 N
  69. & d) k" u# n$ Y: a( j
  70. CRevAppApp theApp;
    0 z/ Z# y* A4 l) C7 @

  71. ) K( Q) p3 y& E! W  ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)$ r$ ?" t" b+ ?% r+ x
  73. {
    . i# _) w6 Z) U; q0 Z
  74.   int iEOF=0;1 m! t, l+ L5 M- F. P- l
  75.   char szTempName[MAX_PATH];
    " B5 }9 ~0 ~- |
  76.   *szFileName=0;
    2 ]( h7 ~0 q8 y; `
  77.   iEOF=fscanf(fp,"%s",szTempName);
    # F* S! `6 [  R, \. |; F
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ( ?3 z" h- _  Y3 m  [. J9 o2 `5 M( @
  79.   {! o) k% Q9 R- ^! E" a3 b, r3 W- [
  80.     strcpy(szFileName,&szTempName[1]);6 j+ M3 N! @) W9 R) @
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    3 W/ a, k3 N4 i# Y
  82.     {! P" V% z+ u/ \7 z: ]  z- n. l
  83.       iEOF=fscanf(fp,"%s",szTempName);
    9 g6 e0 d% X; s2 q" i
  84.       strcat(szFileName," ");% v# Z- e& S* [
  85.       strcat(szFileName,szTempName);
    $ P9 l; l) @) _% H  y
  86.     }
    & g: K- I: ?9 q
  87.     if(strlen(szFileName)>=1)9 z: ^! Z: R7 W1 O5 F( Y. I
  88.     {8 P* _# R' Z* A+ h9 z% t+ [
  89.       szFileName[strlen(szFileName)-1]=0;
    & W2 ~, L% t5 f3 X) P: o% R
  90.     }1 M" T" M# s9 z( j% v+ h8 A
  91.   }' w6 |' e! h, p1 q% E+ p
  92.   return szFileName;
    4 `# d$ l! i% B: p. [7 `  {5 y
  93. }
    ' \/ `' h1 M, [
  94. * H  O5 `+ v( b5 b: q, P+ S, v
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)+ B& m0 l1 Z; W
  96. {" k. w: k+ E2 o; n! Y4 m
  97.   FILE *fp;' |2 K8 U6 O- Q3 o6 {& l
  98.   char *key=NULL;
    7 Z( e, E+ l2 P8 [4 B9 u- A1 D
  99.   char version[MAX_PATH];
    ) y4 B/ l/ p4 S  x" V& |
  100.   LPUPDATEFILE file,olds;- O5 w# h9 Y/ U; ]
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
      U# Y( l2 s$ s, w% M1 ^

  102. . O( t' i3 n6 G  f+ k( r
  103.   UpdateList.clear();9 i0 {- d$ d; q. w6 ^7 s
  104.   UpdateFile.clear();
    0 b) ~" W- P% m4 B1 F
  105.   if(GetFileAttributes(filename)==-1) return false;
    . K, q+ i$ X) |5 m( K+ V% s
  106.   if(!(fp=fopen(filename,"r"))) return false;+ x% g6 F0 z$ @
  107.   fscanf(fp,"%s",version);, t4 c  u+ m4 n6 G0 d- D% O) P8 h  _
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . h# N/ k& S! \! \" g& `7 K/ K
  109.   while(fscanf(fp,"%s",version)!=EOF)
    2 o. Y' E: a9 W0 d# E2 J3 e9 p
  110.   {$ Q1 m; X# B' ]1 e/ h5 i4 v" E
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! [' Z8 F/ ], O! e
  112.     fscanf(fp,"%s",file->path);" ]; ?, a1 K+ j, R. y- F/ k
  113.     ReadFileNames(fp,file->file);
    6 f$ G: |9 r7 J# u4 X+ {
  114.     strcpy(file->full,".");
    ) w% @7 @; {. U; z
  115.     strcat(file->full,file->path);
    0 S/ E( J  q9 d( y; U+ O1 M
  116.     strcat(file->full,file->file);7 K( r+ L9 ?9 l( ^. d. p
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())+ @0 h* ?" Q' F, H5 }# B0 r
  118.     {" F; O. Y, q2 g$ s9 M6 Y! D
  119.       file->vers=(float)atof(version);
    2 J0 d0 R5 ~& R- ?( R# f7 m$ V
  120.       UpdateList.push_back(file->full);4 L  N" g! A" ^7 Z
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    9 X7 C- M( q: V% G0 i
  122.     }
    9 ^( C0 ?6 A' @
  123.     else
    5 o3 v# [  f# z# G3 g: `
  124.     {
    1 z" a$ Q, `4 d5 _2 C
  125.       olds=(*p).second;5 A3 M6 K4 f  N8 `* B8 X
  126.       if(olds->vers<(float)atof(version))
    6 f3 ~$ E5 O1 q  j6 z3 h+ `& r1 u
  127.       {4 W2 v, a! c9 B  e
  128.         olds->vers=(float)atof(version);. o- b8 j" T: U) u( ?9 S0 ~. w1 b
  129.       }
    $ |- R. e/ X2 v* H( p- s$ ^
  130.       free(file);1 B' g1 z, D' Y6 Z
  131.     }8 c) s$ r! [, e$ o2 r4 A) ]2 Q! x
  132.   }
    & u! ^6 X) a& R* i
  133.   fclose(fp);
    / P! a9 P; ^& m( c% l# c
  134.   return true;( I# i7 c: X. G; I! c, x
  135. }0 T# v0 x8 _! Q# D9 y  ^
  136. + [) ]0 e* R$ [5 h( q! b5 A$ C
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    # d8 F& I: s- C1 P6 q% A
  138. {
    0 ^0 ?0 x: m8 K! l. t2 l* P
  139.   TCHAR  szFull[MAX_PATH];
    + }5 ^; {8 _% M
  140.   TCHAR *token,*inter;) e% Q0 P" G, I
  141.   *szPath=0;* }. l. Z, S# H- z9 g+ R' q2 H
  142.   strcpy(szFull,szFullPath);! s1 e% q! N: d8 ]- A
  143.   token=strtok(szFull,"\\/");
    2 T- \) H" K( |% Q$ Q
  144.   inter=token;+ z  n: p) ~# V4 D# b) w
  145.   while(token=strtok(NULL,"\\/"))+ E+ m! O0 p, p$ w. S' |  b0 T
  146.   {
    # h: M0 R: v% W
  147.     strcat(szPath,inter);
    , p6 @! }: _: t* B; Z
  148.     strcat(szPath,"\");2 [8 u0 O8 A4 B9 H$ J5 L$ i/ ~
  149.     inter=token;+ W. t0 X" @0 P. g
  150.   }
    : l% C, v" z" i4 }
  151.   return strlen(szPath);
    ' }% S2 T* ?8 x2 _* A
  152. }) ~$ ^6 d: W: I% `; m: n

  153. ( J, V( I# a# B% c0 L
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)  j- q. L. p2 ^  v: c
  155. {. B% U% l1 j8 p1 ^) x
  156.   DWORD attrib=GetFileAttributes(Target);1 ?9 w2 `! K! K/ i* J- [5 R3 d4 a
  157.   if(attrib!=-1)8 Q6 B# ]) T2 u" D7 Z
  158.   {! n7 P  f- t0 j8 q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))) w2 J* H4 d8 @7 {! V
  160.     {/ B8 J; S" N% t+ I
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    1 z0 A+ r# h/ U6 b# c; H+ z: Z0 s
  162.       SetFileAttributes(Target,attrib);2 u- L5 V0 L6 L% Q) n% c6 S
  163.     }: Z2 V) f% t" ~0 _9 v8 N( P4 h
  164.   }
    , a4 r( Y0 V* N" }& y* V* O
  165.   CopyFile(Source,Target,Erase);. y* p% P6 |, m8 _/ t
  166. }: f7 W* y2 P4 A+ Q+ [
  167. 0 K% ~7 J6 `) F% I- l$ n3 m6 m& }
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)  D( y+ G* t5 V! B
  169. {
    $ r! h' Z, n' Y& T5 ]% \
  170.      FILE *fp;% P2 [% r& \( X% p9 S. E3 r/ J
  171.      char  szBuffer[8192];
    * W6 M+ v; U. j; G7 u' n: E: c
  172.   va_list  argptr;
    7 ?6 J' M: V4 e2 {# P% K

  173. , g2 }2 N4 p1 ?' @6 m9 G- Y; ~* I
  174.         va_start(argptr,message);1 c3 _: g  y; A  R# M' `8 j! K
  175.         vsprintf(szBuffer,message,argptr);
    6 U6 D9 F5 Q. I, t
  176.         va_end(argptr);, Q5 J% w4 X5 B" Y
  177.   fp=fopen(FileName,"a");( y: z( O5 b0 {; Y; U
  178.   if(fp)
    / q# p1 Q8 l- t+ A
  179.   {) e, X6 y5 i" V
  180.     fprintf(fp,szBuffer);
    ( K" }8 W. r- U* z3 U' R: t3 b
  181.     fclose(fp);" {" t8 U. _, u5 r5 b, z
  182.           _flushall();
    / H1 s; j; }% ]+ q/ t% |: N6 [
  183.   }
    2 r/ \6 o9 p4 g: v0 Y9 \( }% y
  184. }
    / _9 A7 ^# U1 b) v5 b; }& H
  185. . ~% \) f  ~. M
  186. BOOL CRevAppApp::Fclearf(char *FileName)9 ^, ^$ l! U: |0 i; T* W6 R
  187. {5 r' ~2 Z, J2 n4 |' H' r4 i# P3 }
  188.      FILE *fp;  s( M1 P3 X! T  W0 G& c
  189.     DWORD  attrib;
    3 k$ ?9 o9 p, [, ]- t# X$ Y6 ^
  190.   attrib=GetFileAttributes(FileName);
    6 ~. V  n2 e0 M  c3 i  a0 P; ~2 K
  191.   if(attrib!=-1)
    # ~- @2 x' ?; m* w2 P6 _+ D- t
  192.   {
    : W) s% i! c6 V1 n( v; t
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      ~" N/ p' }- z
  194.     if(!SetFileAttributes(FileName,attrib))
    9 s5 N& \& ]" M6 z1 y5 m: v
  195.     {
    4 e. \  h, r5 S. \
  196.       return FALSE;
    0 B: Y; E: L& e9 S# `1 b! t  P
  197.     }
    1 S' W- D7 c6 U0 h( u1 d
  198.   }- H" o5 c! J# j  a  [
  199.   fp=fopen(FileName,"wb");- {# a& E. G$ Q: \( K
  200.   if(fp)- G' O+ }9 O& a' A7 X, u
  201.   {
    ' ]( |8 n. h; @; ~3 i, }  J
  202.     fclose(fp);
    1 t2 O2 D: O8 D& w$ a
  203.   }
    # X4 D6 F3 c1 [
  204.   return TRUE;
    - i' ], P8 x# @
  205. }$ Z# e; }0 ]! w" k. c3 N. r; r% I

  206. ) _. E% e" S( E- z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)4 M, d% M) p8 x4 Y- z4 T
  208. {
    5 {  c$ m2 F* d1 S! p3 h
  209.   char filename[MAX_PATH];3 i. c+ a- y- g/ ?) R* m
  210.   LPUPDATEFILE file,olds;3 g5 h" y  I' f. J0 O
  211.   std::map<int,CString>::iterator i;. m' Z* S4 j3 B0 b' L  d$ \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 e- B- T  B* P  `/ f" I# K
  213.   std::list<CString>::iterator l;1 g1 [( G! n% O: f) \

  214. ) O% C3 j& y3 I% ~+ i
  215.   if(bFirstUpdate)0 `$ q# G3 X4 e2 |( h3 l
  216.   {* |, |' l9 `' c2 D$ R$ M
  217.     dwCurrFile=0;; M! a: S$ E& u! U) s0 Z" T4 A
  218.     bFirstUpdate=FALSE;1 l7 S1 g/ x% |2 Z9 N
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; P( Z. m% D2 B" }- [
  220.     {2 a7 |+ I6 j! T1 w
  221.       dwTotalFiles=UpdateLocal.size();
    ) _8 z9 x$ S9 Z" `- e8 e4 ~# K
  222.       dwDownLoaded=0;
    ! v: ?8 z, |- W$ b4 R
  223.       bSilentStep=FALSE;
    3 F" H% w3 y# S. O; \
  224.       bCompressed=TRUE;
    " c& R, m8 o: M$ W& u4 X" ^
  225.       strExtLocal.Empty();
    9 e, H3 q$ {0 q
  226.       strFullName=(*i).second;
    6 p8 A: p  E: y" ~# `
  227.       dwProgramState=AP_CONNECT;5 {) j7 V/ e$ N2 A
  228.       return TRUE;0 D# J: x  N6 [" O
  229.     }6 E- @! S- g  L& M1 u2 L+ H1 V
  230.   }
    6 k; D8 T* U! A. T' Q
  231.   else if(bRestartUpdater==FALSE)& F- j0 S5 w& g( N4 g, Z7 ]
  232.   {7 B! W- l0 o  c5 f6 ?
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    * X7 n2 D2 ]) g( O  x+ d
  234.     {% m: X5 z7 O2 P
  235.       file=(*p).second;$ m9 I' W* X! @& n( a! i' A
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())( B& |+ p# }6 v) G" x
  237.       {3 |2 L, O+ }- A5 z* q+ K1 X
  238.         olds=(*p).second;
    " `9 t9 y) z; y  @7 F& Z; b
  239.         olds->vers=file->vers;5 x, a" ?- L9 s9 Y
  240.       }
    : I. H1 R0 v8 h" O% h! ~. f
  241.       else
    2 u& U9 b0 Z% A3 e" o, ^* K
  242.       {' [4 K& H2 O1 }3 S/ J: v8 v
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ n5 e6 [, I, m" Y9 A7 }
  244.         memcpy(olds,file,sizeof(UPDATEFILE));% _" i% k) N: }' V
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));6 ?: v' }9 p7 `1 u' ~
  246.       }4 O3 d1 O0 K8 h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    & S( e8 R! ~# A: m+ W
  248.       sprintf(filename,"(%s)",file->file);" X, p6 L6 M5 n# Y! w) ]
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 @# k% Z! R5 _+ t: r& G/ l0 m
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }7 a' n# j% U" R' L
  251.     }
    $ P1 B% V5 j: I9 |/ o
  252.     dwCurrFile++;
    % k- e$ x8 p: w* D, H6 P7 l1 \. S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& A7 L+ p+ o$ B4 L: m
  254.     {
    5 x. R6 _8 V% u3 Q9 Q9 F; B
  255.       bSilentStep=FALSE;" X4 R' u" ^1 ^" M
  256.       bCompressed=TRUE;4 m6 w1 _+ `; u* j7 b1 a% w
  257.       strExtLocal.Empty();
    * y) X, ?' D: B) O  A& ?
  258.       strFullName=(*i).second;
    / H4 F3 X4 o3 l, d! F  Q: n
  259.       dwProgramState=AP_CONNECT;) c. {. ], @0 F3 t
  260.       return TRUE;2 I& v& A: ~( m  n9 }7 p, m
  261.     }6 o  `# b, p$ z
  262.     if(!bRestartUpdater)4 f3 Y; g3 [" \6 n
  263.     {
    ( e7 G3 `  ^+ X$ I% J5 T
  264.       int iCurrSize,iFileSize;
    ; f/ Y. C& ]* I
  265.       iCurrSize=0;! p4 B, r& y) x( E- O5 l
  266.       iFileSize=UpdateList2.size();" T5 q. F, B% j4 X
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ; J" q' u( J- ?6 T+ b8 \
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ! I& T. g9 R# D# ~8 ?
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");1 a% Z" {  r2 f: |
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 w2 `. b; q: s, p
  271.       Fclearf(".\\update.dat");
    + I6 u( S! ?# t, z4 e. t0 Y( g) [) @
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    5 w! X6 m3 m# X' @3 {: H
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) n& ~1 B; L, z+ n: p7 s3 F
  274.       {
    ' g6 r) s' x& J& D
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    + M9 c  m0 l) ]0 Z
  276.         {
    : ^( \. L* N3 M' i9 ?
  277.           file=(*p).second;) h; x/ T& t- m& h! {8 r& Q: c
  278.           sprintf(filename,"(%s)",file->file);7 X0 {1 u, d3 \# @1 h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- g' v' a0 b6 h0 ]
  280.           iCurrSize++;  J& h( |$ f" v( M/ g1 N
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ( a% s0 B1 _8 N9 _) N( l: `
  282.         }
    % p; B: X2 |( g& R9 L
  283.       }
    6 G7 ?7 K" F+ W. ]# ^
  284.       unlink(".\\update.txt");) T1 N2 s: l) y+ t* A& K
  285.       unlink(".\\update.tmp");2 y1 I9 i/ @( M- J( W
  286.       Fclearf(".\\checkversion.dat");2 i* R: [0 k* z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ ~! q8 I( B3 g% \* K0 g/ E
  288.       if(UpdateLocal.size())
      W3 A. @3 \: g# E
  289.       {
    + g7 x% ^: E: e1 D
  290.         UpdateLocal.clear();
    + }0 h( U3 b- _# E8 Q
  291.       }
    $ ?& E- K1 C4 U! D) n- [
  292.       if(UpdateFile3.size())- x! g8 V, I" h1 j
  293.       {
    1 k" Z0 T: u% N6 Y9 a2 g! G
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! `2 ], i5 g& @0 d$ R: l$ K7 U. l
  295.         {
    ! t$ ~9 _& t/ U$ P6 {  _# ^$ p3 y
  296.           file=(*p).second;
    " @7 N+ d: O+ [8 n" D
  297.           free(file);
    - ]( T8 e$ L+ P; L" J
  298.         }$ p, r, e  X# |2 S  Q
  299.         UpdateFile3.clear();
    # X0 o! B0 r; m+ ~' {
  300.         UpdateList3.clear();: T# g, M  \, f: H/ r
  301.       }$ [3 C: Y0 n5 p7 a( p$ j; C
  302.       if(UpdateFile2.size())) Y; D5 j- A9 X0 y
  303.       {! n" Q8 A9 Y- H, Q3 o) f. M3 {
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    2 @* Z4 {" H/ Q' B$ B2 k0 C6 v8 q
  305.         {. P6 L" I8 ]3 l& o
  306.           file=(*p).second;- E8 [) N. d: V( @9 @0 c
  307.           free(file);
      I& K! q: W$ A7 I4 }( B
  308.         }' j) _' w! e# t, V. V( t9 P" |
  309.         UpdateFile2.clear();2 j5 i" C9 C9 I# `
  310.         UpdateList2.clear();' Y. w' U& y2 B6 v2 h) [( q
  311.       }
    % e2 W; z( I; u1 O9 {, K6 X6 \
  312.       if(UpdateFile1.size())
    + w$ x! a0 {7 x6 u" z
  313.       {
    , K, `* O( P0 A, `; y0 z2 d
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) g  T9 g4 k# @" _& _
  315.         {& V# s6 r1 y, d% G4 K
  316.           file=(*p).second;2 ]9 i5 n( A1 |0 h/ F( t) o" S
  317.           free(file);
    # V4 J$ Y8 O% c. V' C5 c
  318.         }0 u2 [2 {1 o" N9 o( J2 b2 F
  319.         UpdateFile1.clear();
    - y  A& e' p& J+ F  }2 B
  320.         UpdateList1.clear();
    $ ^5 k8 n2 U$ F( V
  321.       }+ Y: y. Y" U! N2 ]8 G4 s
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ d! e& V5 l$ Q8 M: q' }
  323.     }
    2 q  `# v- f; o
  324.   }
    + K1 ~% B$ r+ I) J* s3 h
  325.   return FALSE;
      h/ z/ e6 a. m5 h/ D* p
  326. }# d6 H( X. G  \( z8 j6 P! D7 E

  327. ) C) \, T# }) m% \- Q4 F" ~
  328. void CRevAppApp::ClearAll(void)
    # e6 s, J% \0 [% C5 ~6 \0 |
  329. {
    * [# J) g+ _& Y' f5 ~
  330.   LPUPDATEFILE file;+ f2 U" z1 e# F% w
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    % B* z+ u) z" b7 ]- v! c
  332. 8 S( D! e' G; [0 F, L; `. Z
  333.   if(UpdateLocal.size())
    * k/ W- r$ [3 }, @/ i
  334.   {
    0 E' g, u; v1 e/ w" I' c+ J/ R
  335.     UpdateLocal.clear();
    % s2 m4 y6 m7 A# N$ V& Z- t
  336.   }1 k+ V) r. {. K% d- e% ?5 E5 Y
  337.   if(UpdateFile3.size())
    # P9 v9 y9 Z* h) ^7 v; {* ^# Q: m
  338.   {
    - k2 X- _" k% F3 w
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) k" j/ N. ~( ?6 Y0 P' q& }
  340.     {; }( }. e' a+ k, M2 R
  341.       file=(*p).second;  E$ e. i4 g" y2 L$ ]: K
  342.       free(file);7 W4 |7 @7 S" L
  343.     }/ k8 s3 m. ~- C( `% O  U( r1 d6 v
  344.     UpdateFile3.clear();( ?1 H; D0 p7 c. c7 D7 Q
  345.     UpdateList3.clear();
    ( g  G! d, @/ m- t
  346.   }5 r) N: B1 _4 O! p. b
  347.   if(UpdateFile2.size())4 t  b1 e: p+ M7 ~3 p  q
  348.   {4 V( t  a$ y1 k3 V- P) j' }- d
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). U  u8 l3 ?0 f/ K, {
  350.     {. I7 c6 K8 D' x+ I% T
  351.       file=(*p).second;
    - D! _. ]3 H: W  \
  352.       free(file);! H1 e* K+ w% V1 ]1 q
  353.     }
    2 @: q: }: r$ X: j7 H
  354.     UpdateFile2.clear();
    . D1 v! s! W* r) l. m% ~1 Y
  355.     UpdateList2.clear();
    & h0 b: X: }) v2 ?7 D. K
  356.   }
    . F. X0 Y6 @3 T/ ^5 h: G7 ^3 h5 _
  357.   if(UpdateFile1.size())
    ) m  J( I) M. r
  358.   {
    % @0 |5 G: r) Y
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 c4 u7 S2 `+ H0 s& U$ H6 q
  360.     {
    . _$ }. ]5 ^. E/ s; b
  361.       file=(*p).second;
    - U5 |, y5 C: D& {% n6 Y8 C/ c. Q: E
  362.       free(file);
    ; W. R4 c9 e$ I& T9 p& C
  363.     }1 {" M4 r2 K0 }+ V' t! x& L4 \( O% t
  364.     UpdateFile1.clear();0 k, z" p+ E5 ]' I0 A
  365.     UpdateList1.clear();
    1 [0 U/ O# G8 k
  366.   }3 S& T- u5 ?. r9 \* l
  367. }  ' W5 Z; M) S. q# S3 g' d2 f: x
  368.   - P. [" f+ l  A
  369. BOOL CRevAppApp::CheckLocalVersion(void)/ `) r4 [& s# h6 i) u4 `2 S+ B
  370. {
    7 n9 A; M/ T9 w: c* ^8 c8 o
  371.   int c;$ c; G: \/ |  m- {
  372.   LPUPDATEFILE file1,file2;" V+ u/ h+ |! I+ ~; H! Q7 p
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;7 M6 Z$ a' v7 k8 S  V( [
  374.   std::list<CString>::iterator l;/ W0 w; |: A1 R/ U3 B
  375. . D: j6 l! p) \9 R$ j0 u( h
  376.   UpdateLocal.clear();
    # Q; g( o/ ?! f8 O$ S( @) K
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);/ Y. z3 C( ~4 @" q, M7 j
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ' `2 M' k3 o1 R4 @% r4 a
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 S/ I3 z+ _' Q3 O3 s
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);- r% O. L. u6 m2 v# m4 i  X3 B, O
  381.   if(UpdateFile3.size())
    ' T* z& e: b9 h. y2 [8 G- V
  382.   {
    ' f# V" R) Q* E! e3 z0 H4 e0 d( ]
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    8 X' {) |0 M; N6 w
  384.     {
    7 m2 R% Y$ B% \
  385.       file2=(LPUPDATEFILE)(*i).second;7 }* n, r" F+ n' z' ^+ A  N
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / B, v) l. c% ^9 j7 I! i" F
  387.       {# {) J& ]# M5 e; c- T* N* [" R+ \& Z
  388.         file1=(LPUPDATEFILE)(*p).second;
    ( G: K# J' @, J* W5 y( f
  389.         file1->vers=file2->vers;
    9 J1 |& |* n% o' }! ]8 c+ i5 R
  390.       }! ]6 c" T% N6 D
  391.       else
    : I; i+ e9 o0 x2 X
  392.       {
    8 `" o: N$ C9 X3 t  u
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 {  R( w, |3 T  a( A
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ) ^( F8 l# V: r
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    9 v. N  @2 h! ]" O  _) Y. k
  396.       }' M/ p+ @& y/ }8 I: J
  397.     }
    0 u8 o; u& M  V+ K. n- U* W$ V
  398.   }7 s/ c- ]4 e9 l2 \
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)$ L* W5 F9 Q. o7 F
  400.   {. Y1 D3 r* ]: p* l; R) L
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())1 ~# O3 t  `+ d. s. v4 C
  402.     {
    ; Q" x0 ^% e+ H0 `4 G, W+ C7 b
  403.       file2=(LPUPDATEFILE)(*i).second;+ A: d3 u1 s2 w; [  B% Q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ j/ u$ l- O, N- a. r
  405.       {
    ' N1 g% m. C3 X. [9 Z# R
  406.         file1=(LPUPDATEFILE)(*p).second;. h1 s! ~; F: F3 ~1 @0 \' r
  407.         if(file1->vers!=file2->vers)
    ; x" m, U5 N+ U$ `4 e" j
  408.         {
    ' N4 C" K+ c4 f$ |' l. u0 u- P  f
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! s& t  h0 L1 _8 Z3 S
  410.           c++;
    8 o* y! G; h  {, q" B  F
  411.         }
    ' _' A9 W0 C; C# I" i
  412.       }) v% ?9 X9 F" q2 p3 w
  413.       else! N# }+ H" J$ v5 M# r
  414.       {
    , k# ^7 h& r* N* S4 p, {. E
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : ]1 Z8 I8 t" Z+ S% E/ M
  416.         c++;
    6 O8 R) v/ ^$ H8 x  e
  417.       }. I' P0 n8 g( s
  418.     }/ S6 l1 f1 v1 X; J) E
  419.   }
    # |6 v2 U* ^. m
  420.   unlink(".\\DownLoad\\update.txt");
    & o$ I& r% w- m* z& ~1 x7 C
  421.   if(UpdateLocal.size()) return TRUE;
    ( A! L( P  L* r3 G0 T! o- R
  422.   else                   return FALSE;
    7 n4 P* E, ?  ]! r) Q
  423. }' U: I% H4 l. f; j; f6 m# S8 L
  424. 4 z: ~) k, K. d/ l$ ~6 B
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    4 M3 N4 e+ `- _
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"" |' H* C/ u  p: @3 L3 j" N+ K
  427. ; E0 x; {# E, n% K$ S8 S

  428. * o' |4 ?2 w. \9 `$ v9 ?2 @! j! z" Y
  429. + {) m7 T/ O6 x5 k3 L
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    / X! ]- {: V# I: ]& z5 K
  431. {6 H9 F/ X4 t7 C' O4 v, A
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;# N$ r, L6 K1 M+ q0 q: ^
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 ?' Y8 b- R) ?" L2 ^8 l4 M$ \
  434.   {! B, j8 ^; r: u+ A6 n1 ]6 Y. I
  435.     char szLanguage[50];2 ?/ Z+ M" i8 x. z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 v% g2 S7 h+ y2 W. m
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 X: W2 h+ a! Q$ T  d2 g/ A
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- ]) h8 a+ }  T8 I" Y, ]9 d
  439.     else                                   m_iLanguage=ENGLISH;
    - D( M* q: k  v, Q2 w( L, O4 M3 P$ N
  440.     char szRegister[100];" g' N) p" ^# L8 Z% `+ A7 P+ N6 |: D" {( N
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 E% }: d4 s) p. y, x5 P7 G. E
  442.     strRegsName=szRegister;
    ( m6 P2 w: i, R7 P
  443.     char szPatchURL[100];: {- H9 J' c+ O) i
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; E" g' e$ Q7 s$ G! Q3 x; W
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ; E: N" ~- v3 W7 P
  446.   }
    7 L/ ~# Q8 D$ w/ _- ?" r( P
  447.   else
    6 e. k& O1 `7 b
  448.   {0 Z$ ^0 j  F0 A+ \& k; F$ C- m# f" k
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 _3 P5 b% k& e" Z# m: O" T
  450.     strRegsName=DEFAULT_REG_URL;4 C1 h2 C2 H+ P2 J% c& \6 f
  451.   }" R, ^4 H- L) ?" u. j; F, e
  452.   if(GetFileAttributes("hosts.ini")!=-1)  t1 Q' y+ N2 _9 |9 A
  453.   {
    8 H, g5 Z( g: m, y; W. W! M
  454.     char szIP[50];# K3 ^4 G# e/ U  d
  455.     char szDIR[300];
    ; H& [( @* G2 _  e2 Q
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; {9 F7 E5 U! B/ F& V  f* k/ D  p
  457.     {
    4 I! [" b  \0 t2 h/ e% c" L
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : p2 d! z0 I9 P6 F5 [
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
      r; }# h: k# T; o( \& E# P
  460.       strHostName=szIP;; d6 o$ s- ]5 n5 ~" L, U
  461.       strHostPath.Format("/%s",szDIR);" ]/ d& `5 ^* L, [" {
  462.     }
    ) V7 f( e5 K! s' |& U
  463.     else& P0 ?' n. G$ q5 G. O! Q
  464.     {* v; J1 p0 x. r$ E( [% _# K( q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* E) x: h8 X+ k! t0 s
  466.       {
    8 a2 y; l% ~/ g7 P, l  \
  467.         char szLanguage[50];4 ?7 B- n& x$ m0 n9 G/ j4 T  [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - c8 m: O2 m7 H0 o* L6 |
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 u2 n3 w/ x$ A/ i# M4 h/ @. t
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + u/ D2 y& g: g% B# E, H9 p% w+ c! D
  471.         else                                   m_iLanguage=ENGLISH;
    4 g5 E/ F( X9 u, v$ }( h6 ^
  472.         char szRegister[100];1 c" ^! |$ X2 A" X
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # D1 m) S* {  x$ R; x/ [0 b% K
  474.         strRegsName=szRegister;
    8 f) G" h& L  F$ f9 {! ^
  475.         char szPatchURL[100];8 r" E+ k7 F$ ~# ~& C
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 d# }5 J2 L. r# ^  d$ h6 m
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: ?+ ?# i7 {( e$ [5 N5 [# ~/ H
  478.       }
    # {+ n" [' b* H* U3 F
  479.       else
    3 J7 X6 S* N  a  h3 d$ R- Y
  480.       {
    % _- z$ Y4 R5 _: }, Z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 X5 Q% H3 c! F; F! b) @
  482.         strRegsName=DEFAULT_REG_URL;
    * c2 f. X% q: s% {$ r- x
  483.       }! ~9 V6 U. ]- q. H
  484.     }
    - q( o& ]! q, G) `! Z
  485.   }
    5 `/ [0 [* b, v' [7 l( _* n
  486.   return true;- ^& M2 s% }1 N; U8 v9 W# c
  487. }
    + r: X  h+ G9 d) ?# b! u7 m' R
  488.   G6 Y( ~; X8 I/ f! o0 M4 e) c
  489. #include ".\ZLib\unzip.h"
    8 i9 ^0 s5 v& N4 q+ ^8 q
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);! ^% P8 \/ D: C  u* C
  491. /////////////////////////////////////////////////////////////////////////////8 v) g. @" R6 W5 k4 {: V
  492. // CRevAppApp initialization1 m6 U! A. V1 _% i+ C- ]  |" b. H
  493. 5 q+ f/ C) n" ?: f
  494. BOOL CRevAppApp::InitInstance()) N# [  \% B) d* A
  495. {" M4 O, ^/ W2 E8 ~3 ~: L2 U, l
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];% Y8 h4 X: P/ u9 S
  497. . @9 Z- n: @  }7 Q! ]! n
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);/ O4 J" q2 p! T% O! T, L
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    2 Y* Y0 D+ S+ ^
  500.   {
    3 r  E; s8 Y8 Z9 p
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ' T$ j% G' |3 f1 P0 Q
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    3 ]! [4 X, E+ A4 X8 v8 H
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))/ D2 ^( E' z1 b7 C
  504.     {
    ! R9 x+ O8 `1 {0 {* w0 S
  505.       strcpy(szPath,szPathTarget);3 d' F3 `* Q! w+ r
  506.       SetCurrentDirectory(szPath);6 Z; J9 ]5 e+ r; z. E
  507.     }
    & g: g0 P1 t! x6 X5 y. W0 O4 w
  508.   }
    4 s; L# O' M0 x% L" t1 v. s2 `# Q
  509. #ifdef _DEBUG+ F5 a4 \5 V1 N; u
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  V+ p  j. n2 p$ {/ G0 n. b- Y+ c/ [6 d
  511. #else
    # p& h- J  P. H/ }
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ L( x% t& Y# O, h
  513. #endif
    " A& W6 A+ G( e& j
  514.   {1 V' u, I7 L0 S6 s
  515.     char tempFileName[MAX_PATH];6 h/ d" K  T) r( O
  516.     strcpy(tempFileName,szPathSource);
    0 @2 {% I0 P( D# h" a
  517.     tempFileName[strlen(szPathSource)-12]=0;1 Y6 n6 X$ L. {' q5 R- E
  518.     strcat(tempFileName,"\\$CSUpdate.exe");8 \# X+ [" e% W6 I* u& C& ?
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 y9 q1 H# s5 d: K! ?7 W" G- c
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);$ Z! M& t# `! x- C5 O& V9 P
  521.     return TRUE;
    * b0 A+ k0 Q- @! x" B' d
  522.   }8 N7 e/ R( E  [: u
  523.   // Nuke 0118: Delete run.exe0 o. {0 S0 w/ x2 t/ A5 ]
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );+ D3 E4 D1 b  }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    9 |/ }" n1 g7 {9 c, C; K* L
  526.   if(!ReadCfgFile("Config.ini"))
    + ?$ r; Q; h7 H; y" V0 b. r
  527.   {" f) [; ]. R* ?& F( ~
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    5 P2 N. B1 d0 Q
  529.     return TRUE;
    + ~" ~) n2 R: G
  530.   }
    - y4 g" m0 t) h' S: O+ j! w* p& ?. I
  531.   HANDLE mutex;1 t8 B( i6 j, g4 g' }2 j4 q7 c
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))& }+ M! ~  X1 L5 B4 i7 x4 c
  533.   {
    & q7 f, ~5 G: ?0 _) a
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    - \* f0 i" B& Q; I
  535.     {
    2 c5 W5 M( X+ F4 k; q& R
  536.       CloseHandle(mutex);0 _$ f9 r% k8 _1 _2 \
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * _; }1 @- g  t4 b6 o6 L. c! \
  538.       return TRUE;! X; [: e. p, Y( ~7 Y+ j7 T
  539.     }
    9 W: E- ]% }0 n' d
  540.   }  1 |) Q2 k  S: [0 R2 S( s
  541.   CloseHandle(mutex);
    + @, a% y( d7 [. m3 I! G

  542. 9 W3 s" A- T! g4 v& \- Z1 v. C9 ?( U
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);6 X7 _  j8 t% ]

  544. " t6 Y! U: L5 b
  545.         AfxEnableControlContainer();7 o8 e; u3 M) B

  546. ) w- B7 y  m  B4 N( M# s
  547.   bCanUpdate=FALSE;
    2 E( L, }: }+ f; s& @9 C+ w% Q
  548.   dwStartUpSteps=1;) O/ b* c0 ^, z8 p) c2 b$ g
  549.   dwProgramState=AP_NOTHING;
    ; ]. T9 ^9 F8 R" E: i; r+ b- u

  550. $ `: O- V: G5 ?
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    % l# ]6 C- z) m9 ]/ S9 f
  552. & l+ k4 v+ s; x9 X9 P+ M
  553.         // Standard initialization
    2 }7 o7 u! q' _" ~5 ]% {8 |
  554.         // If you are not using these features and wish to reduce the size
    ) B7 S) y# b: a- n0 K5 Z
  555.         //  of your final executable, you should remove from the following
    3 i1 H$ V" e& O9 u
  556.         //  the specific initialization routines you do not need.# k6 k- y: c+ B8 [

  557. 6 m/ @! G9 }  D% Z$ e* J2 p
  558. #ifdef _AFXDLL
    ( T0 n. G" s1 O. h1 o
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL4 ^, ^. J2 z/ ^' L/ m
  560. #else' h, M# Q  H' _. X( a
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    . Q5 e4 Q7 W7 M" O. [5 f8 @
  562. #endif
    5 e: A1 k$ j6 r" |2 b7 _- k: @% N

  563. . ]- U& l$ F+ P* Q: T  L: P1 x: l
  564.   dlg=new CRevAppDlg;$ v: f8 c. O' B" J6 b9 Y
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    7 a& P1 |' l! k& g( O2 z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);3 h; M% d$ t2 ~, B/ E  M" b
  567.   m_pMainWnd=dlg;
    2 N& c9 D' C3 I) J' l

  568. % v: z; Z4 Q8 E0 e% {. `
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    2 Q6 ^$ G9 F  Z; c* i9 {# P

  570. 5 H) M6 G; w$ s0 r$ d; u
  571. //  GdiplusStartupInput gdiplusStartupInput;
    6 Q6 e1 F2 a, w
  572. //  ULONG_PTR gdiplusToken;
    1 }. s* `1 ?0 Y; V
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 c! H: a8 l. Y8 I, T2 O

  574. / v4 S' J5 F3 K( r9 Z
  575. //        CRevAppDlg dlg;
    / E6 z# x/ z6 p2 l
  576. //        int nResponse = dlg.DoModal();
    " m* C7 ]2 G5 w6 |: v
  577. //        if (nResponse == IDOK)
    + [, d* }" p2 o; l8 \6 V) U
  578. //        {; X1 O9 y5 [/ Q  b; d' g+ Q1 }
  579. //                // TODO: Place code here to handle when the dialog is
    : i% c( k1 M! Z# i, g
  580. //                //  dismissed with OK* i1 F: Q; h9 F, D  g2 X) P
  581. //        }, Z1 @' F: j' P
  582. //        else if (nResponse == IDCANCEL)
    : K# Y7 H& R+ V6 D
  583. //        {! F2 }3 j1 A; z; N" T
  584. //                // TODO: Place code here to handle when the dialog is
    ( b4 i; w( S6 D- s
  585. //                //  dismissed with Cancel: Q  T+ x/ B, M* n9 k
  586. //        }! S( {. Q3 a7 ~3 D$ {" @1 ]
  587. . S( d" c0 Z4 S8 w% O; L
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    7 i( H7 g, t5 O* j  @2 z' X
  589.         //  application, rather than start the application's message pump.
    # w1 g1 S8 k* k- {" t/ ]# V1 R8 g
  590.         return TRUE;
    : b- K: R' r+ T4 c
  591. }. t/ y; L' d3 ^
  592. * }' W" F# n: ~- k
  593. char *CRevAppApp::strtok3(char *pSource,char *token)- }- R+ Z+ N; [! r& l7 D- c7 T
  594. {# j/ Y: e( d1 N2 u6 l- h8 a
  595.   int i;
    ! ?' w# B7 C6 a8 n& O+ O
  596.   char *szRet;  @% x. V5 f% H
  597. ! u+ I& I) t7 z7 a3 ~: U: ?
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    / O- Q2 o# |# T+ x6 n! O
  599.   if(sztoken)
    ) @2 s, i# M& s8 c, W, u
  600.   {- ]. {5 s6 s" w! Y/ [( d5 P& z; [
  601.     szRet=&sztoken[itoken];
    / x2 d0 s8 C6 o6 S8 S0 t
  602.     while(sztoken[itoken])( r2 j0 r0 |7 W
  603.     {
    ! l  Z' k8 G3 b# t5 ?4 t
  604.       for(i=0;i<(int)strlen(token);i++)1 ]# S) C; ?9 h/ `/ L9 d9 R: E
  605.       {, m4 ]4 _+ G: ~8 v% h
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    3 n7 J8 X" C# n7 P) ^( Q
  607.         {1 ]0 U9 {' |+ l# h
  608.           sztoken[itoken++]=0;+ f7 d$ x& ]( J6 l% U
  609.           sztoken[itoken++]=0;
    1 ?* r: L- u, S( a/ L2 q
  610.           return szRet;
    5 F& m% r5 H' K
  611.         }& f0 k# w8 T% J; n$ `: ?+ }/ v" d
  612.       }2 [1 I0 r6 ?% @( w# r
  613.       itoken++;. i& y2 r) q* ~, i4 `
  614.     }
    & X2 F) l5 i/ w; Y
  615.   }
    0 B# w  r( u7 N6 [: x2 b
  616.   return NULL;
    + Q; q+ `! e' G6 z2 o
  617. }+ u. p1 ?6 ~1 ^# Z2 X9 l: @

  618. ! w& v. {, d# f8 Q2 ]
  619. void ProcessProc(long Total,long Current)9 u! J1 R( Z5 w6 v6 R
  620. {9 |+ w9 w; T3 {# M7 N7 m. a
  621.         MSG msg;
    # G5 e  n+ W8 X7 r8 e
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);9 z4 X; \- h, G
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    0 C& {3 N" e1 n) B4 l
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    1 a: F2 k) ~% o: g3 y
  625.         {9 s% Q: p/ P1 ^/ |# s; X; q
  626.                 if(!GetMessage(&msg,NULL,0,0))
    $ o% @5 r6 Z& ?
  627.                 {, y, R4 M, x" O( V$ `
  628.                         return;% h% _! Y: V; G6 D9 M* V6 P, a/ ^
  629.                 }& B( g1 v4 O% d( w/ Z9 D
  630.                 TranslateMessage(&msg);
    8 d9 `" z/ T' ~
  631.                 DispatchMessage(&msg);& J4 Y( H7 s- ^+ Z& B
  632.         }       
    ! _9 K. d; k  \9 J$ o% i! |
  633. }8 h4 O6 L9 B* G. D8 B, |# G; v
  634. 2 w0 M6 y5 m- Y) ^# m
  635. BOOL bFirstChar=TRUE;% s, d" Y2 Q  F: A. i$ g8 A% d

  636. ( d- ]; K8 F$ v) C# d
  637. BOOL CRevAppApp::OnIdle(LONG lCount)( N' W7 O& j$ R6 Z6 x! g
  638. {/ |% v7 j, c# w6 K7 \
  639.         // TODO: Add your specialized code here and/or call the base class+ \7 h6 Q' X/ v8 e/ _; X0 V2 D: I
  640.   switch(dwProgramState)
    0 b" U- K* d" b9 [$ ~$ C4 C
  641.   {
    3 B2 k- t2 K  j- N' T+ ]1 n
  642.   case AP_NOTHING:
    $ b: m5 l5 d& C5 |
  643.     switch(dwStartUpSteps)$ @9 K% h1 q7 o# u
  644.     {
    2 o9 T, c% ?' _  O: n, U5 e
  645.     case 1:' c; f: z- D3 S" `0 S  y
  646.       {, {& o, }! z9 r# m: r7 {$ C
  647.         int i;7 ^4 L; l% W5 U6 T1 [5 S( Q
  648.         CDC *pCDC=dlg->GetDC();
    / \% m: D5 k, ~8 b  A* u6 v
  649.         HDC hdcwnd=pCDC->m_hDC;
    ) t/ Q/ c( q! Z$ I( F& ]; Z
  650. //        Graphics graphics(hdcwnd);1 z4 }- O# [" o7 Z* R; s
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");9 o' \7 Y7 Q: _
  652. //        INT iWidth=bitmap.GetWidth();
    5 X5 }. \8 w1 Q, v
  653. //        INT iHeight=bitmap.GetHeight();& [$ L" ?0 b, o( h( D+ {4 s
  654. //        Color color,colorTemp;" |+ Q  `4 e& i- G* Y1 O
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)) U( p! u0 {* H* N+ N2 z$ H
  656. //        {% D7 z+ |# Q  m1 P7 r3 x
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ' h  i. ^; Q& V( Q
  658. //          {
    : n. I: ^) Y( Q  T, _7 z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);$ K$ e% u8 \5 ^
  660. //            colorTemp.SetValue(color.MakeARGB(
    6 n3 p3 l8 q; a! n- K
  661. //              (BYTE)(255*iColumn/iWidth),' i) j  A9 b, a6 y5 R4 c
  662. //              color.GetRed(),7 l5 h0 L6 S! S1 r: D
  663. //              color.GetGreen(),
    3 @8 H4 }* \2 ^$ P8 c" L: ^
  664. //              color.GetBlue()));
    4 J  W" z. p# [1 |* _
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ! ^7 X% _, a$ n3 P0 ~
  666. //          }9 ~  Z0 @  |/ B- }
  667. //        }
    ; b, r2 [9 R+ W& m
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + C0 S4 Y% j  r/ w: j
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' K4 P" L  g+ s8 a1 I6 J
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");) {& [: g6 _- x
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , d7 F* u: T0 w$ L
  672.         for(i=0;i<240;i+=8)
    1 v3 U+ B/ A9 R! a  @7 T5 l
  673.         {) F/ }. v8 }3 I( b* _3 \+ l  N2 C# P
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. Y$ ~  t- _9 V4 N# w
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ W$ a( ?( t7 e3 l: H
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # J0 x+ C* F" a9 r, T& q
  677.           Sleep(33);
    $ R! A5 E$ O/ u! {
  678.         }# q, ^* q/ f  K/ q
  679.         Sleep(1000);5 F# \+ x' G) X! {5 G0 M1 A
  680.         for(i=240;i>0;i-=8)
    ( @# ~4 f3 F2 r4 Q! `6 _3 r4 T2 i- A
  681.         {- z4 Y: |- q6 B- ^; V' {* P  e' k
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) M6 V" q4 L+ g3 a4 P( J
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% J6 E( W/ b/ r* H, L  a
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 ?* w( f3 G3 M6 l/ [+ s$ J
  685.           Sleep(33);/ `8 ^, k! w# ?; ]# D+ ~
  686.         }
    . j+ |/ f, ?. }2 e
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);; O6 q" n9 p; m/ J
  688.         dlg->ReleaseDC(pCDC);
    . d0 P) t  \5 |6 w3 {' j; x
  689.         DeleteDC(hdctar);7 k5 M7 q8 v0 T1 Z5 p
  690.         DeleteDC(hdcsrc);4 a$ Y5 }: g4 t4 F% o3 D
  691.         DeleteDC(hdcorg);
    ' d0 Y4 O" t" \. Y2 Q
  692.       }
    : I: V4 E; E/ Z& `
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);6 ~# b$ F( l2 r( k( u9 ]
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" M: n- r, [, Y7 o6 M+ u3 q" k
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    $ ?; G- r( e( {
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");6 G6 n# T$ ~6 ~0 @0 ~6 D
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* Z+ |2 `/ F6 o1 X* o5 w, r. J
  698.       if(!Dn.Connected())
    & i) ?* q/ Z( q% O0 b) X1 ]  l/ @
  699.       {
    7 T/ h# U' a, \# D% G" P, c) }
  700.         dwTotalFiles=1;% g" W/ B) N' u+ S  a6 Y* j. W# _% a
  701.         dwDownLoaded=0;
    ( S: k( G; P: Y: O
  702.         bSilentStep=TRUE;
    4 H9 A) P8 z) y$ P3 s8 e3 A
  703.         bCompressed=FALSE;: K7 {* E: h7 s% q
  704.         strExtLocal.Empty();/ k* ~4 M1 }4 p( ^8 M6 ]
  705.         strFullName="readme.txt";
    0 m+ N4 P' d) Q, i/ R) \, M. ^
  706.         dwProgramState=AP_CONNECT;
    * ~! l7 u/ Y: k6 `/ U6 R
  707.       }% ?0 f% l' S# M& N
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();$ |- I. G2 P' X; f
  709.       dwStartUpSteps=2;
    7 b( M, m/ p3 {4 K/ [# e
  710.       break;
    + c$ s6 V& o! H. Z9 G: x! ~
  711.     case 2:
    3 g2 m8 s) O' i, O- o4 v
  712.       {
    ' f. C, h: b, |! v5 e. w* V
  713.         int iEOF;+ V  g# u( ]1 C1 N% x
  714.         FILE *fp;
    3 F/ P1 K# m7 F+ F  C! C3 a/ B
  715.         char szString[512];! r. A! s3 N, C" e  ^: R( h
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    . _! `  G0 i/ X" t4 h
  717.         if(fp), [1 O* s- `! \' ^- |) i
  718.         {& P8 `) V( A3 v' C
  719.           do
    / k+ C& p# g' T
  720.           {
    7 C, b% _/ _/ H6 w( x. m
  721.             iEOF=fscanf(fp,"%s",szString);( o9 J. U' u4 }: O( j% e
  722.             if(strlen(szString))
    / W8 ^' l) _- ^% R* `! t4 |* ]
  723.             {
      F  W* q8 U* f! s) P
  724.               if(bFirstChar)
    0 }2 A7 a1 @1 [- M2 j/ g
  725.               {
    ; q& z" n7 Y0 A0 w2 y+ @, ^# W
  726.                 bFirstChar=FALSE;7 Q3 U6 C# J. H4 J
  727.                 bConnectIsBig5=FALSE;
    ! h: e! a3 m2 L9 N
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    1 K4 I& e, I7 x/ e2 Q  v# F% Z
  729.               }% A( y6 I6 |9 N+ K3 b! H) X
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    $ d5 @# W: Y, g* B
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    6 _# m  s5 H1 w' j% F6 I
  732.               dlg->m_ListText.AddString(szString);
    . g  q, ?% N0 y6 }
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( t* Y# }4 ~# I
  734.               *szString=0;6 _" w* J; o, h0 g% J' o4 Y
  735.             }
    6 t! D0 `7 k5 m! G9 r1 C% t7 Y) {7 Q
  736.           } while(iEOF!=EOF);
    ' ^) w7 A' e' U! e
  737.           fclose(fp);
    4 H8 w( l' ~) f4 O+ h8 i
  738.           unlink(".\\DownLoad\\readme.txt");* e- t" s: F; B2 U  h1 v
  739.           dwStartUpSteps=3;! a! p- N6 W4 M5 C' m& W- e
  740.         }
    ' @" j3 ], D. x/ O. w
  741.       }
    ' s) v- j- D3 l$ C/ P
  742.       break;9 v  Y$ _! }( Z3 V
  743.     case 3:7 |2 v: ?) K" l8 b
  744.       if(!Dn.Connected())% f. i3 q2 j" `! z" {
  745.       {
    , D2 C. r9 q/ t
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);( A% J0 M0 H% L0 ~/ [- N9 z+ [* o
  747.         dwTotalFiles=1;
    ' @- h& |* L5 G! _* h: v) u. ?5 m
  748.         dwDownLoaded=0;2 ]2 E: Y8 C: q' o6 S  h
  749.         bSilentStep=TRUE;
    + [* i7 a! }, y* p2 v
  750.         bCompressed=FALSE;
    * ]6 l$ f( ^1 c( A% m; z6 J
  751.         strExtLocal.Empty();% E) g3 s2 N$ A- s+ R4 {7 N! o3 c
  752.         strFullName="checkversion.txt";
    ; u+ u/ k6 J; l3 Q0 ^% V# ]
  753.         dwProgramState=AP_CONNECT;
    6 G2 f* T; f% g0 U; g7 E1 `* T; f
  754.       }
    0 V( U4 y$ |" \4 z; `* e* A
  755.       dwStartUpSteps=4;  n: }' i: l* l# x9 }
  756.       break;3 V5 w# i( H, v0 I/ J
  757.     case 4:
    ( y8 L4 o: `8 N2 ]6 j
  758.       {
    ) s& ]5 L: B; X" ^+ i1 s  }. ]
  759.         FILE *fp;% ]2 _* W& r/ t- B% {
  760.         char szString1[128];
    3 Y. i! P. G6 e7 p- D. S
  761.         char szString2[128];. `; V* V( ^, U* C' K
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
      o% m, W& C  m' ?
  763.         if(fp)
      A; c6 `* s+ l1 \
  764.         {4 y* V3 N% S/ T' O5 ]+ F
  765.           fscanf(fp,"%s",szString1);
    - o  o% V& g& z' w% c  d
  766.           fclose(fp);1 S- e3 t, p- C, [; V/ Q' J& E! }
  767.           fCheckVersion=atof(szString1);
    1 s. X/ k( f  W( {& I  i
  768.           fp=fopen(".\\checkversion.dat","r");6 ~5 |/ N  T* p$ ~3 `" O
  769.           if(fp)! v7 X" `: @, [+ r: d  I
  770.           {
    + L) p& v3 p' `" Y8 J4 r) d1 Y
  771.             fscanf(fp,"%s",szString2);4 o3 \. ?2 B; L- r' N1 x
  772.             fclose(fp);/ d* ^# j+ [; ?& P- H
  773.             if(atof(szString1)!=atof(szString2))
    3 x4 i  b2 V4 h4 a$ O0 K
  774.             {
    & E  a' d0 R0 j2 I; b$ {
  775.               if(!Dn.Connected())
    ; \9 ?- M4 n/ X& f. q
  776.               {
    . U3 F3 u7 W9 U1 A$ K
  777.                 bFirstUpdate=TRUE;  Q2 o+ f. a- M
  778.                 dwTotalFiles=1;
    4 u8 z5 B+ r  E4 H( z8 E
  779.                 dwDownLoaded=0;- {" L1 m) s: ?3 F+ `' K
  780.                 bSilentStep=FALSE;1 Q+ k1 u% m: q  f' I
  781.                 bCompressed=TRUE;
    . ^* q" o/ `; u( A5 @% n
  782.                 strExtLocal=".\\DownLoad\";
    4 u% s$ Q& J) Q$ {6 v
  783.                 strFullName="update.txt";2 X' ]: `) U5 X: g  W2 |6 i
  784.                 dwProgramState=AP_CONNECT;- M$ P4 w( L0 q2 z; k$ f
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, z5 ]- X$ F5 N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 c) _$ B+ t1 f' I2 s! w" W
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    9 n6 n) i8 O7 [' K# i. o: ?# M) e  L
  788. 3 b+ n9 k6 H- c9 o! K- v
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " l2 f9 I9 m' B9 z9 k5 [
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    9 a; w; v& K' c9 p) G4 i3 H% _) L
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)% z% r. u: ?  e% }) d0 \
  792.                 {
    , `6 E* C1 f8 m+ M4 B+ J6 X
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 u' ]8 X5 j" Q3 X% x+ R
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    2 g6 [; k' a' r8 l; n, a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 C* e  Z2 c  x; j" ^
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 E6 Y7 D+ Y; X) G/ O5 W+ y% Y
  797. & O5 I( I; b& d. `% g3 P3 g
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# Z: q$ t2 j" Y' \
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 U8 O* W* W: r+ ?- v* A
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");* \6 P0 K- c, ~0 ^! u  Q. h  M6 _
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) q/ f) K8 c' ?0 s" i
  802.                 }9 R% I2 O- ?% X
  803.                 dwStartUpSteps=5;- K# A' X  p0 t  q8 ]! G$ C
  804.               }! [* f/ P8 n, Q* Z% g3 x
  805.             }
    / J9 P9 ?0 v) Q" a
  806.             else, r6 S; R( Y7 n" m7 \& B; }
  807.             {2 D& t7 U( ^" m: y& N9 ]; w  T
  808.               unlink(".\\DownLoad\\checkversion.txt");( L7 `6 `+ X1 ]* ^7 D1 M* ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: c3 |5 s% I( V! Y( N$ `
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# t( x4 O# z8 S
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    5 p3 `/ l. c8 y7 t/ r; C

  812.   ?) T% g, S6 q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / b0 m( K: Y4 C4 g- _7 p
  814.               dwStartUpSteps=99;/ s* J4 G. Z" Y+ s- l
  815.               bFinishUpdated=TRUE;
    ' r+ ?( v% O2 g- @6 W; b
  816.               bCanUpdate=TRUE;
    - i4 H2 l  k2 U& C% @/ p3 H" P
  817.             }
    , E4 K/ Q8 D! O' Z
  818.           }
    0 c. ^& M. T, `# c; t7 R7 |
  819.           else
      T' i; c. X: U  \
  820.           {2 r- ]  @! p( S# z8 l
  821.             if(!Dn.Connected())
    6 v0 q: @4 g2 X
  822.             {
    - {$ g. H6 N+ {+ P9 ]
  823.               bFirstUpdate=TRUE;
      A+ O; i# V0 ?; p* F
  824.               dwTotalFiles=1;
    * R% ~: N; s* b1 x* S
  825.               dwDownLoaded=0;
    9 |: x: w& Q$ b: U
  826.               bSilentStep=FALSE;
    7 a! f* S$ s# y( c( l; d
  827.               bCompressed=TRUE;8 X& C8 \: |; b* a: u
  828.               strExtLocal=".\\DownLoad\";
    8 j# w% o  x2 T3 r
  829.               strFullName="update.txt";- I( \6 @. y* I6 f. V$ t$ v
  830.               dwProgramState=AP_CONNECT;
    ! P- \( U  k. U- t7 T5 E
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");( A+ g* L3 z  I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 Y& v4 d1 K2 B# t! G) w; D2 g" l3 p
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 D$ O/ |" X: D' T
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" k+ o0 {) I: P5 ^* p$ L
  835.               unlink(".\\DownLoad\\checkversion.txt");" ^% q" `5 l( ]
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ( g7 f2 e" f4 y" Q$ f$ ~: e
  837.               {
    & Z/ U2 J* ?' T+ y& I1 R$ W, T5 m: I
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
      @2 m7 h4 E4 t+ \+ y; u
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");" y( n. X5 }& ]+ V8 j
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    / }9 q- L/ W7 t' T0 D1 X7 l4 F9 s
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! O. M' n7 W: K+ A
  842.                 & [" o) Q8 [  b3 j; E) t6 r. U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# [3 t1 a& a4 o4 P
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ x% q. y% A2 Q
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");5 {2 X7 e2 p3 e" Y8 l
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & h# @  A0 E9 x7 i9 }1 S' I
  847.               }
      A& G$ [- W2 z) D, b
  848.               dwStartUpSteps=5;
    ! C" }5 c* B5 Z  A* q- ]8 \- M
  849.             }" Z1 b6 i! R0 @, s2 S" d
  850.           }
    / |6 V! a) B" }2 ^6 z6 Z! b
  851.         }
    1 Y" V! X- S: Z* A( M& _- m# |7 V3 C/ J
  852.         else
    1 H" @5 O) b% ~7 d& C% b, Q
  853.         {
    / y. P" f7 Z0 o% V& s: P
  854.           dwStartUpSteps=3;9 ^8 e; _5 y- `: {5 q% `* T, A
  855.         }
    + g& |1 \6 f0 }" ]) ~
  856.       }
    8 b, y7 a+ r& `0 ^+ I- l
  857.       break;3 l  A: j# ?+ l
  858.     case 5:  W5 N1 _% v8 R+ e: W; l
  859.       {
    $ x) ]% F* h3 Q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)' {8 Y3 f, O* D- O, X. M
  861.         {
    $ Y+ T6 t; p' M. Z# X4 w
  862.           int opt_overwrite=1;
    ' B6 {" n. w) |: ?5 m$ R& j. p
  863.           int opt_do_extract_withoutpath=0;$ n* g! y8 a8 |! n0 ^/ x
  864.           unzFile uf=NULL;
    9 s" u  y' j# {

  865. ! Q% B8 A# W3 w, w! t. F
  866.           uf=unzOpen("Wsa.zip");- z% Q5 S  O' M( q8 u! o% z
  867.           if(uf)
    ) O3 {6 _' q0 W. |3 w
  868.           {
    % h5 W; W9 L, k" A0 X4 c
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    + w) R. O. M% L6 n6 q+ m/ S+ z
  870.             unzClose(uf);
    ) z( e; X8 O% s9 w. l2 E8 ~
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# U8 b- L- y, q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");/ W6 y  S7 L& u3 _- ]8 Y1 Q/ t
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    / K$ z5 A# q1 o; }
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 C$ d' e3 k  |; L  E! }- j
  875.           }
    6 ]9 o4 L7 [* j7 [( M
  876.           DeleteFile("Wsa.zip" );
    : ~; [% c! l  m, u4 I0 L' T
  877.         }
    8 B7 T" y) Q( w$ H. y8 u/ p  ?
  878. ' I& P7 X, ?3 k! ]
  879.         if(CheckLocalVersion())9 [8 ]- k8 z, c3 g' {
  880.         {/ X8 t; j) F; m! u
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");$ n! ]* ^) k4 O) N+ P" ]) b
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    4 V$ A  G  X' {3 ]
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    % [- R& q/ C7 e6 F' _+ P
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) J! h* A" Q1 l5 k
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);$ K  N! L: I+ ~7 E# g7 x' H3 v& q
  886.           dwStartUpSteps=99;/ t; X  [$ I( v" \, _* u
  887.         }
    : C7 W! H4 u$ k! a) a8 ^# L# F
  888.         else4 [5 r; G! T# Y/ X" @2 o
  889.         {
    4 i0 p* Z* w: @/ ^8 a; A2 E
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    2 e8 i6 w0 M& {/ m3 n) j" G
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 m. ?8 c! y7 i" f) j5 u
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    . W+ l- x/ {0 A5 I: {; V; @

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

! v$ W; a/ v" R( o' F# q2 t) {$ B0 H7 w, q6 h

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-4 04:44

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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