CSUpdate.exe源代码

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

. T2 }" s  k' e" k
  1. / RevApp.cpp : Defines the class behaviors for the application.3 w1 x+ R- K  c# Y
  2. //
    , V; g# m: ]4 z4 l$ }# u
  3. $ Z. Q: j$ @% }: F: ?, N+ S" Q  f
  4. #include "stdafx.h"
    5 Y, J9 M. S8 o' v1 r8 Z# B$ e! Z

  5. , d% S' k  q* F9 }# o
  6. //#define UNICODE
    . ~4 h+ G- K3 R2 J! B3 |
  7. //#include <gdiplus.h>$ Q2 D( X6 T) H
  8. //using namespace Gdiplus;8 [& H/ n- p: W% H' C- s

  9. # Z7 [- k& R! d; j# \# a4 j
  10. #include "RevApp.h"& a* e  s  T: c& N: `' r6 D
  11. #include "RevAppDlg.h"
    6 p- [( S; c: t7 x3 R! x0 G
  12.   j4 ?4 \/ j4 o3 y- n
  13. #pragma warning(disable:4786): v$ }( A9 r2 K9 m0 m: _2 T
  14. #include <map>
    , I3 P  `$ E1 L' O' d
  15. #include <list>" k2 P8 \2 S9 l  `3 M6 R& w
  16. #include <direct.h>
    5 d' J, S4 @. _, q1 [0 M3 U( N

  17. : A" M) B9 _& A
  18. #ifdef _DEBUG( B: o6 l2 H1 G* a) Q- }
  19. #define new DEBUG_NEW
    8 a. }% G. t# N" d
  20. #undef THIS_FILE
    2 y2 g8 v( U7 u5 {0 \
  21. static char THIS_FILE[] = __FILE__;
    5 P6 ?& G9 u4 D6 n, x
  22. #endif
      d, H/ C* D. k
  23. #include "SkinResDef.h"6 R) h7 q2 o. o) E  W( }' E* B
  24. #include "ChangeBG.h"# L' n9 T/ Q1 |6 W8 x' `
  25. #include "AFXINET.H"
    $ V8 A4 C- W, R

  26. . I& S( ]. d3 R
  27. #define TRADITIONAL_CHINESE 0
    2 a7 S4 X( T* L$ n- S
  28. #define SIMPLIFY_CHINESE 1, Z1 k- [* Y, u' h7 C# w' j
  29. #define ENGLISH 2
    2 l5 D7 Q2 B# d& ^9 u0 ]
  30. int m_iLanguage = ENGLISH;
    8 M- O" y( |% k2 [2 L3 E# J
  31. /////////////////////////////////////////////////////////////////////////////; I: a1 `9 a7 p0 a) C2 R
  32. // CRevAppApp
    . M; x1 Z' K+ y7 _& M3 w- J/ U

  33. # |$ P3 ^0 r. r# o6 j
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    0 Y4 _" @1 o* \3 ?) K
  35.         //{{AFX_MSG_MAP(CRevAppApp)- f4 n! B, F5 l1 v9 v# i
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    $ K% K5 X4 c( s" i4 |4 P9 ?1 b3 [6 Q: I
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    * G$ z  b; Q% C% r( Q( K
  38.         //}}AFX_MSG
    ! ?* R4 Z4 e. b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    % D- v: D% @* w8 N
  40. END_MESSAGE_MAP()/ C1 v$ I! N0 Y8 H* ^) k. |

  41. 9 o- ]. E, h% p% B9 O
  42. /////////////////////////////////////////////////////////////////////////////
    & @. {, ?# P2 `8 z) d  H: U. G
  43. // CRevAppApp construction
    " T* U4 o# S# r9 X* W+ q
  44. 4 z! w! ]+ m, W( Z
  45. CRevAppApp::CRevAppApp()  H+ i1 @, ?* P5 r0 v
  46. {
    ! t0 E# E' D9 E: Z8 t
  47.         // TODO: add construction code here,
    ( t7 s0 F# g6 W/ i
  48.         // Place all significant initialization in InitInstance
    6 a7 o- L* Y0 A. u+ ?  s: L
  49.   bDisplayIsBig5=FALSE;
    ( V! w6 u) X* F. H+ f9 B9 R- g
  50.   bRestartUpdater=FALSE;
      V& ~6 N/ c3 @- u
  51.   bFinishUpdated=FALSE;1 y& T0 J: D% ]( ^# M0 h" V/ }
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    : N- }1 h/ X$ y# g3 c: e: ^
  53.   InitChangeDataBig52GBKS();
    * T) T5 u; @1 d! E  F3 W' ?" ?. r
  54.   InitChangeDataGBKS2Big5();
    - v% \. g; b* E+ e* c
  55.         //
    3 S" z# a, p- [4 U6 C
  56.         bClickRunExe = FALSE;, j# T$ a0 P7 \0 p6 U' u5 E2 O3 G1 Y
  57.         //
    2 w: j* A3 ?; @" Z: q
  58. }
    ; Z, @! e% v, {. n# Z
  59. ) H. r3 H/ m$ N3 Y" I& ?
  60. CRevAppApp::~CRevAppApp()3 L6 }& k% D. _
  61. {
    5 h5 E6 U+ S" G. `7 I$ E
  62.         // TODO: add construction code here,2 ~8 {( G5 w! w" P6 p
  63.         // Place all significant initialization in InitInstance
    6 K* A/ a0 \! d% w$ s7 y5 P# [
  64.   EndChangeData();
    7 K& S' N7 g: r0 |( d
  65. }5 u, z2 U! n; Y7 r- a

  66. , E, b. d! U. h/ W! P& V2 u; ^9 g
  67. /////////////////////////////////////////////////////////////////////////////
    , n: y5 i5 `# \  H$ x$ l* T
  68. // The one and only CRevAppApp object
    3 z" E' ^% G1 X; S* g3 `1 L9 l
  69. 0 i( d- U+ c8 G& a: y- C
  70. CRevAppApp theApp;' l& |- N7 |, R5 b6 B( s; s  j7 q: h% U
  71. 5 }  M% u) ~3 i
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    - J1 s* k0 M0 S: s# ~, N
  73. {; J0 z6 P+ F2 ]& E. h, u& ?" d
  74.   int iEOF=0;, ^& ]/ z4 U9 b- ?+ q
  75.   char szTempName[MAX_PATH];. v. A- C' N8 S& n- [; `- b$ E2 k' P
  76.   *szFileName=0;' }- L4 C+ P3 x( ?- n2 N* `
  77.   iEOF=fscanf(fp,"%s",szTempName);
    0 z8 f# `% L1 ?" S
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ) J9 d" f+ S0 f" }# N& d4 T$ g3 r
  79.   {4 l) n, i: o8 \3 V; k& f  k
  80.     strcpy(szFileName,&szTempName[1]);' @2 C* }6 Z$ L- s6 w3 A5 b
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 G& P; S6 c0 d! u+ a+ C% ~
  82.     {5 v$ q- ~3 {& `: e! E' a0 V
  83.       iEOF=fscanf(fp,"%s",szTempName);
    + y2 c* z, Y! W  s9 a; _/ _
  84.       strcat(szFileName," ");
    6 g( \" P9 D% V: f
  85.       strcat(szFileName,szTempName);! W4 l3 _' X0 W+ }: U# {6 _
  86.     }/ I% ^  X9 d& v# s- O
  87.     if(strlen(szFileName)>=1)5 Y& Q, V7 A' h; d# X% o' {
  88.     {
    ( h0 o& o' T* u$ S
  89.       szFileName[strlen(szFileName)-1]=0;) c2 o4 s+ h. c& C0 K) K! l) g
  90.     }: E2 o4 N- D& n4 {  |% a
  91.   }9 n( P0 H/ n9 Q. x& }% d4 f4 i% Q
  92.   return szFileName;
    ! c' n/ n( l% @. r+ _9 c1 J6 f- O
  93. }
    0 c- \$ c" u2 C$ O, @
  94. , y4 P6 N/ {9 e
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)* g  O8 ^3 B; n* F6 `+ ?6 {
  96. {
    . W$ y0 M4 d- N( E6 g4 P
  97.   FILE *fp;
    2 Y$ A( M9 Q8 P; c* c  J
  98.   char *key=NULL;
    / k2 }5 b. W+ h
  99.   char version[MAX_PATH];0 g' H1 g# A6 K
  100.   LPUPDATEFILE file,olds;* v3 p+ F6 F0 R* R9 Z# \
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / f. b# F  _  Q3 i% u

  102. ; [2 s5 p$ Z& t9 A. s) {3 d# N
  103.   UpdateList.clear();
    7 R, v; z& h  W: T; m  [5 i# J
  104.   UpdateFile.clear();" B2 \) m, w2 S2 J+ l0 X+ U$ ^- ?
  105.   if(GetFileAttributes(filename)==-1) return false;
    : O8 E; C6 x" |/ W5 Q7 z
  106.   if(!(fp=fopen(filename,"r"))) return false;# P: `# ^* P0 K" K
  107.   fscanf(fp,"%s",version);7 e# U& x3 ^5 v) y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }* |9 U4 i8 c( Q8 Z! p8 |
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ; B5 O& P6 b- g5 F
  110.   {
    , \. K9 X: _5 Q2 ^
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ f5 G/ t- W# {8 x6 @
  112.     fscanf(fp,"%s",file->path);% h$ p# n7 U# E! C
  113.     ReadFileNames(fp,file->file);5 z! G3 z. l: d' B
  114.     strcpy(file->full,".");
    1 M- P, E, e0 ~5 O0 ^8 H: z* D% B9 X- ?
  115.     strcat(file->full,file->path);
      k6 n% t: o5 K) m, P2 z# [
  116.     strcat(file->full,file->file);: d5 q; G3 ]1 |+ j: w: C/ P. w
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    : {' F4 K# |1 H1 V* w
  118.     {- w% h4 r) m. U2 `' m$ N+ Z! `( M8 `
  119.       file->vers=(float)atof(version);
    $ ]3 F( ~, p( p( Z# N
  120.       UpdateList.push_back(file->full);2 c# Y9 w9 ~0 b# o
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));, n3 Y1 \; ?* R1 X. p4 ?
  122.     }) K8 X* Y" d6 I. _
  123.     else% k5 E/ E- f9 L
  124.     {
    1 `) P& h5 q6 `
  125.       olds=(*p).second;
    + @4 z$ W- P, Y9 Y% F. A
  126.       if(olds->vers<(float)atof(version)); s, d% I+ h+ G* C& X
  127.       {, ^( x% R; S9 x/ i3 K
  128.         olds->vers=(float)atof(version);$ Q$ @3 ], f6 V
  129.       }* @: @( W, G! K- C5 A
  130.       free(file);3 v# c4 D1 [& L1 j& T
  131.     }
    4 m' A* q: R# ?6 t
  132.   }
      L1 {$ v$ p+ E5 u% T/ C
  133.   fclose(fp);( b9 C( e+ r# f! G& |' C2 `
  134.   return true;
    , v; _* b0 e6 e" K1 d- O
  135. }
    / x8 g2 g2 t. N. x# i" d6 F
  136. # p0 ~4 n! |- m* X  e
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)% c/ Z: e. a5 t1 R* L) R
  138. {* D/ |5 e+ B" h- T
  139.   TCHAR  szFull[MAX_PATH];& Q: h. ?" Z* X1 \
  140.   TCHAR *token,*inter;
    # Y& @; c2 S& G! B) V' t2 j: M
  141.   *szPath=0;; L+ Y. H2 c) k  Z
  142.   strcpy(szFull,szFullPath);
    : L( e: ?4 W( k' f- ]. N
  143.   token=strtok(szFull,"\\/");
    : h# q: o+ a' X/ M9 q, H
  144.   inter=token;
    8 k$ j) T* i8 e/ D1 p: @: J
  145.   while(token=strtok(NULL,"\\/"))* z% ]% E* S7 M$ A
  146.   {) k/ X# @+ C. V) n
  147.     strcat(szPath,inter);
    8 [1 N9 ?' I1 J
  148.     strcat(szPath,"\");
    . W* D/ \1 _7 |
  149.     inter=token;
    ' y/ c& d  r2 f* ?, v
  150.   }5 f: ^8 K; s/ ]' a5 s7 p
  151.   return strlen(szPath);3 l. q1 W6 E3 `2 q$ e* L. V3 `
  152. }
    7 o4 o" K- K) ~3 F( D& ~* \
  153. ) r4 r' k1 j+ u7 ~* {
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ! p4 L; u/ m' i0 s+ I
  155. {! R/ ~5 S# d8 H$ z' P6 i
  156.   DWORD attrib=GetFileAttributes(Target);
    3 f& C' q) d' E& j3 _0 v
  157.   if(attrib!=-1)
    5 u% [. y+ n. I  \% Q9 A0 ?  @& L
  158.   {
    , g  k7 \& m' U4 H( s" h8 I8 C8 F
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    0 z  I, l, D& p) O1 d1 O+ _$ _
  160.     {3 s" r# l2 H! _. X1 A
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    * z3 E) {" ?/ u' \8 \; y* M# i
  162.       SetFileAttributes(Target,attrib);' G1 f; B) t+ }) q% h, e3 `  s
  163.     }
    ! m) A, O1 b# z7 Q
  164.   }
    # I0 M# k( Z' e1 O  N/ R$ o( b
  165.   CopyFile(Source,Target,Erase);
    3 Z& {2 Y  J8 B& k
  166. }
      A# x/ p$ D8 k5 E% {, M3 H' G
  167. * a6 |) h# Q2 h
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)& Z: V3 i+ k4 N
  169. {
    * `2 B2 Q% o- g( j! |% S+ O, e8 m
  170.      FILE *fp;
    # s$ ]$ G  ~) F
  171.      char  szBuffer[8192];
    4 K+ z! Q1 M: d* e2 V  v' T
  172.   va_list  argptr;
    . R* |9 ]7 t* X" ^  V& {9 O
  173. ) R! b$ w: T! Q( S/ K
  174.         va_start(argptr,message);
    8 R6 @5 `7 E' w- k5 \- H7 ^9 Y
  175.         vsprintf(szBuffer,message,argptr);  {( m9 b0 ?' u' p) H1 Y9 k
  176.         va_end(argptr);  t6 x$ x9 }* b: F1 j
  177.   fp=fopen(FileName,"a");
    ; X0 y, O. w& z0 o1 P8 g
  178.   if(fp)
    7 L2 l9 u% g9 {& j
  179.   {
    # S& Y, T; ^  }0 S' o$ h1 x
  180.     fprintf(fp,szBuffer);' P6 K7 m4 b( H. L/ d1 n
  181.     fclose(fp);4 d$ I. e$ \+ M  B
  182.           _flushall();
    6 [% v, L9 v/ e2 r
  183.   }
    6 m4 Q+ M2 }+ D/ f7 G
  184. }, R! f4 [& |6 c7 ^6 G( C# k/ z
  185. 3 a2 @9 z, Q: `0 j" D
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / A( v% e4 F# I0 x/ A0 w
  187. {' B! P0 ^" U  j0 w5 |' V$ D
  188.      FILE *fp;
    8 [' t$ ]% W$ N; s
  189.     DWORD  attrib;* P# x6 G9 \4 a+ b; U
  190.   attrib=GetFileAttributes(FileName);5 [9 {: I+ z' {% l# |' K
  191.   if(attrib!=-1)
    ; d9 U( J1 N1 k% F9 D6 x
  192.   {1 t& ?2 I2 Y4 w( ?4 ~# F) k2 F3 U
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: L6 P! ~6 A- e  e! k: j% Y/ q
  194.     if(!SetFileAttributes(FileName,attrib))8 M( w6 [; S, u2 l' d- ~0 u% [
  195.     {
    0 k6 v9 u" Q+ ^  _. h0 j
  196.       return FALSE;' \: K, J% B4 k3 A5 B# r4 ^
  197.     }) S- J" F: e% ^3 q2 e
  198.   }
      c  `( Q1 g- {, }1 Q* W
  199.   fp=fopen(FileName,"wb");9 U7 y+ k( Q4 @' y$ f2 e. n0 R! E8 e
  200.   if(fp)% J2 h: A. O5 T, I/ S6 \% v; ^
  201.   {0 d- O( ]) z6 H9 b3 _5 x3 r
  202.     fclose(fp);0 G" k% R8 V! Z$ P3 Q
  203.   }
    . z$ I# p; M7 N$ y, O+ @- T
  204.   return TRUE;
    % t' F4 L! d# R, Z
  205. }
    " h/ X' g# {* V; U) `: e

  206. ; U7 ?0 C8 ^& B1 e( p# z3 M4 o
  207. BOOL CRevAppApp::UpdateLocalVersion(void)0 E! k5 q6 k; z8 K* j, q' \
  208. {. n- r8 j! v6 r
  209.   char filename[MAX_PATH];
    9 |* g8 G. Z7 P
  210.   LPUPDATEFILE file,olds;
    - h/ `! s0 E1 ]5 P  x9 Z) ~. n' Z
  211.   std::map<int,CString>::iterator i;7 ?# a! h2 A0 p+ x) }& u
  212.   std::map<CString,LPUPDATEFILE>::iterator p;% W" R- ~% t; f, @5 U! q7 J
  213.   std::list<CString>::iterator l;
    " L8 W& o2 c* i/ v/ y9 O

  214. 2 S) @9 B* X# L/ A8 e4 T: {
  215.   if(bFirstUpdate)
    * `' d$ L# j5 r0 K
  216.   {$ l- \* w5 d+ M
  217.     dwCurrFile=0;6 U# e& w% w, ^0 D4 Y* P
  218.     bFirstUpdate=FALSE;/ D3 F, f) ]+ Z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 U' r" |+ a! X
  220.     {
    6 v+ u. C, h- l7 Z# y/ z
  221.       dwTotalFiles=UpdateLocal.size();
    1 N4 K2 T2 C  n! E+ S
  222.       dwDownLoaded=0;
    . i0 C) B* k, k1 F, a
  223.       bSilentStep=FALSE;
    + `0 ~# \# ?8 w) c7 z3 `
  224.       bCompressed=TRUE;
    * \# G: ?# R- x' D  y+ a! |7 m
  225.       strExtLocal.Empty();
    $ B. ?. u; V- D: J
  226.       strFullName=(*i).second;6 ?$ ^5 F: ]% _7 _9 a0 W
  227.       dwProgramState=AP_CONNECT;
    3 i5 ~0 o  g3 l. P, a. f' m
  228.       return TRUE;
    & x1 G! z7 i$ v% w# F/ q6 d) G* X
  229.     }
    4 t) u0 r: R* Y0 l% I* l: r: r
  230.   }% A" l- k7 O( m( h
  231.   else if(bRestartUpdater==FALSE)' y6 T3 c6 h/ U8 {
  232.   {8 R$ I& A2 I% ^
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    # G! ^2 y1 |5 k" [8 X( D: w" R# v
  234.     {9 w1 p# |( w2 w
  235.       file=(*p).second;" y6 b* y$ x: o/ d& l, p9 d
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())" {6 ^& `/ n' F$ z, K8 s
  237.       {
      f* k4 O# m( M) M& f3 R
  238.         olds=(*p).second;
    ; L; H) W! ^% j$ g6 @5 J
  239.         olds->vers=file->vers;# X( Q' B( F2 x3 G3 q% J
  240.       }
    ' b0 b' Q( n/ Y$ X
  241.       else
    ! M& \; R( k# j7 s2 A4 p4 \" J/ c
  242.       {  V1 Q; S3 ?; c& j
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 E% V# |# k$ ?5 [9 u; B
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ; K3 w/ ^, Y2 i$ H, d; l; M* w
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));  r/ @1 H$ U! ^  j" I) y# N
  246.       }6 O7 b8 O/ R& D# ^. D" ?
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    . K( Y+ m9 Q3 M2 D
  248.       sprintf(filename,"(%s)",file->file);& w; r2 O0 @( _. ~; F
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* Y( _7 s2 \: w
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    $ y! ]+ I+ B  W2 l9 f7 x  j
  251.     }1 H) x  @; t. s8 ~% ^. b1 k+ y/ }1 }
  252.     dwCurrFile++;: R, \( ~; C! h) m, G6 [- g* Y0 H
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  y, g8 L: h: \) U$ D# m2 S
  254.     {
    + ^$ G, ]& J- F3 Y; l; J
  255.       bSilentStep=FALSE;: D& n( Z( I6 p  t
  256.       bCompressed=TRUE;
    5 C- P2 H) B9 g, @
  257.       strExtLocal.Empty();
    ' D* ~! c3 X  b3 H. k3 b
  258.       strFullName=(*i).second;
    - ~. W2 i: P# f; a2 _# K  @9 t
  259.       dwProgramState=AP_CONNECT;7 F9 ]- Q1 `5 l1 S+ H
  260.       return TRUE;
    2 S- H6 @# k( ~
  261.     }
    ( u/ F) ?( {0 m1 _- V5 e; E
  262.     if(!bRestartUpdater)9 ], T; f, \3 j* y: R  L" y5 F
  263.     {
    8 {8 X1 h2 ?( n5 Z& Z2 |% N
  264.       int iCurrSize,iFileSize;
    / d0 L. U, T1 @; W7 |$ `
  265.       iCurrSize=0;+ u5 v% `3 c* y8 D
  266.       iFileSize=UpdateList2.size();! {3 o3 d0 ?7 o$ I5 g
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    " @# ?- O7 A0 k
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");1 G: U7 `4 B2 O6 W& t$ w( K4 j4 _/ t) g
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    , R; J2 B. {1 ^& W8 y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + x9 w' {5 N0 n2 Q0 X
  271.       Fclearf(".\\update.dat");( V) `) g; }2 N! S  V
  272.       Fprintf(".\\update.dat","Bloodyf\n");) Y- t# e) r, H) G6 k0 l& F8 l
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! R: c+ n. N. c; y
  274.       {! B1 W7 E- p. \/ a; s& R$ \
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())- _! C( y( r/ [$ b! A; f- d
  276.         {
    " r& o: v! C5 u/ V" K+ e
  277.           file=(*p).second;( H# j+ y1 }$ W* W; R
  278.           sprintf(filename,"(%s)",file->file);: o1 `7 P: H- S, [
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , X4 u% ^* l, t2 _0 |* |+ G( A) W
  280.           iCurrSize++;7 e. a* `6 [. V
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));% b. l$ L% @% v2 ]3 ~. U
  282.         }( z* F8 N) H, d
  283.       }7 L% ?' m: b+ H4 P: Y3 e2 k. H4 j- B
  284.       unlink(".\\update.txt");
    1 d( P) P: i0 J) u, O7 w0 n
  285.       unlink(".\\update.tmp");7 a# {  d# v3 g" }4 y
  286.       Fclearf(".\\checkversion.dat");
    0 `4 n9 w5 A) x/ L  I/ k' o
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);6 G; U8 ]# F; _- o6 J
  288.       if(UpdateLocal.size())
    7 E, }% ~: A. U
  289.       {* k) K% ?) Z5 H, {' I7 X% k
  290.         UpdateLocal.clear();
    % Y% J! X  |/ S8 y/ x
  291.       }
    . X: t: R) w2 I
  292.       if(UpdateFile3.size())  i6 @7 K+ X4 _# `. ^! H
  293.       {
    3 m$ {0 k3 i. d# N/ }
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 {" u9 T! V7 s& [
  295.         {
    4 `4 A3 g% O* u/ N- i
  296.           file=(*p).second;
    0 F: M) \2 r; N3 q3 I0 L
  297.           free(file);
      ]- b6 J5 q( c* V4 e
  298.         }
    . w; Z% e( T7 i5 f) H$ k2 o" _
  299.         UpdateFile3.clear();
    8 Q8 I/ C/ C3 V- K$ S
  300.         UpdateList3.clear();
    ( Z) o1 R6 I8 n1 t$ ?+ m
  301.       }
    ; @6 n9 P6 x* Z" D* f
  302.       if(UpdateFile2.size())
    1 w7 p" O# ^9 s$ o  q7 T, W" i, {. U
  303.       {4 K! M1 e! S4 v' l; j2 F6 m/ X+ N
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    2 n/ k# J% s7 v9 d4 V5 O
  305.         {
    + ?5 n6 J2 h3 }' f! q  K; q
  306.           file=(*p).second;: J( a2 I! b6 |( C) ~
  307.           free(file);1 E2 o6 g, z! S: `5 [4 A
  308.         }- n# a+ u7 h3 c2 B
  309.         UpdateFile2.clear();9 W* v- d* H) c+ Y$ [  m5 V
  310.         UpdateList2.clear();
    $ B5 ^3 q# j. H/ u& ]: T
  311.       }* e/ ^, P! m# x5 A( e8 O1 E
  312.       if(UpdateFile1.size())
    $ N) r2 B, Q3 L+ |; I
  313.       {
    * z4 y+ x0 `( ~6 i0 k2 H0 f5 D: R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    3 g- N+ X) A5 g' ]% B! _& s
  315.         {
    6 f  |9 |  x/ O& K2 M+ P% n
  316.           file=(*p).second;) S- G! j; ~' O2 N
  317.           free(file);
    / Q) m! B, `; b& V( n( o# t
  318.         }& W: R4 q3 V7 \( {( w8 `
  319.         UpdateFile1.clear();
    9 b- X  V4 F5 T, j  ?5 i1 r
  320.         UpdateList1.clear();$ h4 {. B# z, x5 X5 F& B( F
  321.       }( q3 f! U" K. ?
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));# ]7 r* ~; j8 I. E( W9 N" ]
  323.     }" W7 O. X" [/ x# j% B2 ]
  324.   }# i( x) ^/ K! z) m4 T
  325.   return FALSE;
    5 i3 O* c: l, C1 [
  326. }
    % X6 ]1 Y0 g! d% V2 P, w
  327.   s2 l" L3 a. v5 D; C
  328. void CRevAppApp::ClearAll(void)
    ( ]4 t# p+ E& M* b5 f
  329. {$ ?; t/ X6 i9 ]
  330.   LPUPDATEFILE file;3 k# i0 C: u6 X
  331.   std::map<CString,LPUPDATEFILE>::iterator p;/ x" @. r/ h  Q; s# A  @" f- D
  332. + z2 H. D2 ~1 i$ g" k
  333.   if(UpdateLocal.size())8 S/ y/ H" s4 t8 c- _; z, J# G" f
  334.   {
    ! E' N' x) G4 ~  u6 H
  335.     UpdateLocal.clear();+ d* P7 I* a2 i6 x+ B8 n
  336.   }
    7 G' Y" I/ H) Q. v. N' @- e
  337.   if(UpdateFile3.size())
    2 j0 H1 E4 I8 D- L+ G7 _
  338.   {
    2 p- ?1 b% g! f& }3 ^
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- f' x( i0 V. p
  340.     {
    1 d# a5 {1 G( Z1 E: ?
  341.       file=(*p).second;$ I3 ]1 \8 o" k: Z
  342.       free(file);3 R: z, X, q1 [% l% ~' J( l, q  I
  343.     }  E- O; I, ]  A/ J6 c3 [; I8 k
  344.     UpdateFile3.clear();
    5 X9 w- R  I, J
  345.     UpdateList3.clear();* y8 y2 ^  m/ C
  346.   }& r- a( v; v0 |7 g* X
  347.   if(UpdateFile2.size())- N1 w. k) w2 a: A
  348.   {
    4 I' L! u6 J: X3 ~  I: W0 e# E# j
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - c. s" w& r# _
  350.     {, {/ a7 @0 j, D/ k/ b
  351.       file=(*p).second;
    2 h: e: U$ N' @: S/ {
  352.       free(file);( p+ }" X9 D+ ]( a
  353.     }# p6 L; D5 |- q( I
  354.     UpdateFile2.clear();
    1 p2 b+ }' N$ W" q7 j& @+ M" R* K
  355.     UpdateList2.clear();3 U" z1 O1 `) u& P- p( J* x
  356.   }
    - z7 C: i: R' _0 C  w
  357.   if(UpdateFile1.size())7 \# m9 D* q% F( T
  358.   {/ P& C8 l; E0 G1 j
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& F. \! P: D+ c6 g$ I
  360.     {
    8 ]5 [$ B7 d3 q& ]# p3 {
  361.       file=(*p).second;
    % p8 S) B4 c  k9 e
  362.       free(file);
    8 V6 y. F; \6 J  G  c1 c# t
  363.     }, F! ]+ x% ~$ Z# o1 f
  364.     UpdateFile1.clear();. x4 A& E% G4 v
  365.     UpdateList1.clear();
    ' }+ Q: P; [  E+ M
  366.   }" r0 G1 Q  E  ~
  367. }  
    - Y+ G: D/ [( p8 }9 m/ o5 I
  368.   
    , ]  K5 H! [5 f& s& h8 g
  369. BOOL CRevAppApp::CheckLocalVersion(void)* k1 U, m# Q4 u
  370. {  z# J8 O9 e3 D$ L! i
  371.   int c;
    ' A  {4 Z) W5 E# s
  372.   LPUPDATEFILE file1,file2;
    , X4 A  Z* d4 [# I8 J/ l
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ! d. @: n! g, r* Q& Y& S
  374.   std::list<CString>::iterator l;' Y6 I7 z8 s! g- _3 l

  375. 1 Y: m" p7 l* P  g+ \0 U
  376.   UpdateLocal.clear();6 E2 k) n7 [& Z) w4 p
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);3 F$ a* K6 S3 d/ z+ \# a8 \
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);0 ~$ j# d$ T5 R0 r1 a
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);$ D* ]: g& `& {+ a
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);/ O2 {' A( c+ j/ }
  381.   if(UpdateFile3.size())
    ( ?1 ^/ `, D6 H; e1 [" X; V
  382.   {* z( _9 J3 E% {& x( K
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    2 j$ i% U! ^" w% c
  384.     {1 G) g' y/ p! ^! Y
  385.       file2=(LPUPDATEFILE)(*i).second;3 [) W/ b7 w! y4 K
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ n) Z+ E% M* T2 }- m6 ?
  387.       {' Q+ Q% A. g0 g1 o
  388.         file1=(LPUPDATEFILE)(*p).second;6 e' H2 w2 _; `$ d" ?" p1 h" h
  389.         file1->vers=file2->vers;
    ( ^9 b, F& J1 E* b! D& D9 q
  390.       }9 e% t9 J6 X! v
  391.       else* G5 g3 f  p$ ?/ D
  392.       {  f  S. B# M& J4 J2 \! \
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% i* p/ V- B3 A7 l( e. G- x$ [
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! w- p3 k: T& d# n6 n* A
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));7 Q) y: F3 f  D2 L+ r- }7 ]' A- O
  396.       }* P1 x* e+ O. n" n. ^
  397.     }! P' U5 h. c: e5 C5 F0 K
  398.   }: z7 k9 W( E/ P) H( b: s
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 I$ A  B4 z( E# @) O  y5 R+ ?
  400.   {
    # K$ ^) O, p$ P% q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ( a# V- L7 O) T& O- e
  402.     {
    * P6 U* D% Z. K- k8 @8 y: h) c
  403.       file2=(LPUPDATEFILE)(*i).second;
    - P) C( I5 F1 t+ N# E' }' @
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 T/ U6 [. i. w* g# J2 B
  405.       {
    ; {# O/ S2 ~% r8 T7 w
  406.         file1=(LPUPDATEFILE)(*p).second;: h1 L" j0 b, @  u0 C
  407.         if(file1->vers!=file2->vers)9 p0 l. n( p# j: _4 g
  408.         {
    , r: Y1 j# G) c( ~7 V
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" Q7 Q- f; q8 _; H
  410.           c++;
    7 u% I: E( F. h) P6 N
  411.         }/ [4 V  B9 _/ D7 ]. B
  412.       }
    0 u1 G1 w4 P- k+ D
  413.       else6 E: C1 M8 u2 k2 W2 S* D
  414.       {
    + }# S% f( I0 O
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) L; ^# ?5 y! y& O
  416.         c++;
    & ?* B( l/ T, X( S& W  B
  417.       }
    : T/ q1 Y% j% E) D
  418.     }; M0 j5 ?* A3 ^) T$ i7 O& B
  419.   }
    4 ~0 ^1 x7 ^4 Y3 {4 g$ i. f  C7 W# g
  420.   unlink(".\\DownLoad\\update.txt");
    " ]; N0 Z  v7 t- g' J
  421.   if(UpdateLocal.size()) return TRUE;
    1 b6 F# T% b0 t- p7 t
  422.   else                   return FALSE;
    7 \( |5 ?2 A2 S! W
  423. }- K6 x, [2 L3 Q: ^3 r* O. Y

  424. ( _' X1 D  D1 v# f
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/". X1 o2 e* Z3 k6 L
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    : G: x6 {% m0 B* `1 i' T0 Z# ?3 O

  427. ; H  ?/ l- G- a1 y
  428. $ C6 Q, s" p  E& I# }
  429. 2 x- _$ r8 b0 _: j+ x7 B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile), a# d' v7 @# J6 L0 C" a8 g7 ]9 A
  431. {
    % G& a* y; }1 d2 Q' @
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    1 m" n5 B( T" e2 L
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * J5 K. g, D6 w. ?3 S9 H
  434.   {
    0 R; D& _2 w, u- ?  y2 U
  435.     char szLanguage[50];
    6 |# L* [; g- U# W  {
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 _8 c$ a( ?7 ]  a" |
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 i+ G6 `6 c$ z$ \) L. a& T
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- e/ Z9 g2 h% i) }* U) K, C
  439.     else                                   m_iLanguage=ENGLISH;
    7 u- y4 f* W2 T  g1 J# F
  440.     char szRegister[100];
    / b# o( W; |7 O. ]$ E
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    0 I8 z0 r  o# _+ h* I- }
  442.     strRegsName=szRegister;
    % y' q' f" L% i& \- i+ @" x
  443.     char szPatchURL[100];
    , i' l; U( G0 a3 w
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 s( m* t0 q' G/ k$ v' ?
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 m1 Q' o2 U2 M
  446.   }
    1 H* |( Z! t, V6 r% f) e/ _
  447.   else8 j! e8 Z9 I; ^
  448.   {! \3 ~' c/ s0 d3 H$ \! ~7 F
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . v# j1 |3 A$ n3 L8 h! _
  450.     strRegsName=DEFAULT_REG_URL;
    , E1 J6 S3 P3 u) k) {9 _" a5 S
  451.   }& [& o: G, @; k
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    : E  w  Z( q# Z& K
  453.   {; m+ T$ f3 L/ ?* J
  454.     char szIP[50];
    3 b. Y8 D7 x3 f
  455.     char szDIR[300];! ]$ |  }3 i5 w. D/ H# a5 N
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))' u6 I6 `: d8 ~
  457.     {
    ( P9 n5 T( \- B3 e$ w0 I' |) s- T
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");2 q1 w, P2 }- H
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");' d6 w1 D' x: j# h5 P
  460.       strHostName=szIP;
    ' Z5 H2 Z" p; L
  461.       strHostPath.Format("/%s",szDIR);/ I9 l* x! K8 O7 ]- L2 f* `& ~& S
  462.     }4 w/ ]# C( u8 R8 w* |- a8 L
  463.     else
    5 O. Q  U; i/ I9 z- o0 N' Y
  464.     {
    ' O& L, k5 _: i; N4 Y7 a: I
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* B7 V0 K3 k# X  f* h& D# t( j
  466.       {
    3 d" ]3 _2 t5 h% }
  467.         char szLanguage[50];
    . u) p# f  b7 ^! A) ~
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 I0 |! `6 b  y! `' n
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # z" Y5 x) k, z8 U3 J
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 W6 `+ N& x9 H8 |! h8 |* U- m
  471.         else                                   m_iLanguage=ENGLISH;! F4 o% d( V& l* n- S+ g0 F3 F8 z& X
  472.         char szRegister[100];2 _: Z1 e) L7 p7 V. n9 c: b0 p( B2 T
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" E) r: u) ^5 N1 Y) R; e
  474.         strRegsName=szRegister;
    ! z/ a. Q5 \2 a
  475.         char szPatchURL[100];$ m3 d. f- e& q: f% X+ `; R3 l# Q
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) H# o. H$ `% W0 `
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 r1 {- X7 T" M3 X5 L2 i( a, r1 t
  478.       }
    9 @! |8 O/ E" F! j2 ~4 i, D
  479.       else' Q. W9 x- G  Q$ Q
  480.       {( C2 h: d1 l( D5 q* U) ^0 L3 r
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 R8 z1 Q& i+ n0 c8 B; X/ B
  482.         strRegsName=DEFAULT_REG_URL;" U* ~% `% G% _# U# y* N, u
  483.       }
    8 X* J: Z! h* {# U
  484.     }  S! o% j1 h& M, E$ a* C
  485.   }
    $ L3 `4 x$ ~: Z* ]  J8 m
  486.   return true;! l+ X. p8 G/ ^& f/ U; I
  487. }2 C! {4 U6 u* R# G! R3 ~

  488. 9 T4 r2 o. l" L( h' `) C: l
  489. #include ".\ZLib\unzip.h"
    $ v% @% x, ]' j2 W; r
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( o! Q3 D( @& t8 I% C. g
  491. /////////////////////////////////////////////////////////////////////////////, T& q  P: p: F# S4 I: S% F, A
  492. // CRevAppApp initialization# f0 `4 E! V/ L! F: D9 M' K+ \4 t

  493. # O$ e, Z8 R% T  b- L  Q( f' ]
  494. BOOL CRevAppApp::InitInstance()
    ) h: c& t3 Q+ U( O' k
  495. {
    & L' J- L1 _0 z8 L. i+ E5 q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];' Z: _2 n5 x* A/ i$ c+ t  ]

  497. 1 |4 m- f: E# I( j9 t2 i0 y# g
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);( A0 }" g+ u/ u- P, u  a
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))- V7 P( c" g0 E# ^% X2 [
  500.   {$ e- [# N0 s& z9 R# d3 ]8 d2 T0 {
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    6 ]. W1 B% u' y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);1 F7 g! @  e  X- ?6 y/ ~2 @9 y( i, d
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    " {: J4 n' h5 Y1 I& M$ [8 a
  504.     {
    : Z; X/ C- o! `, J/ e
  505.       strcpy(szPath,szPathTarget);9 A2 G7 i6 L& F# e1 O
  506.       SetCurrentDirectory(szPath);
    - q& U4 V/ |8 j3 P) L3 S5 s0 m* E
  507.     }
    ! h2 ]) f5 }2 m
  508.   }
    $ s* M. B& B; O9 f: v! ~( F$ Q
  509. #ifdef _DEBUG
    . I4 d  ]; x, \, O. [3 B5 M9 f
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 K0 y) q7 p. H5 X2 J3 w
  511. #else
    8 v  c: ~. [/ `. k9 q4 Y. u
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 c, e4 Y; b2 u+ h, X! I: s! o7 t
  513. #endif
      ^9 A3 @  F) H, X5 V8 c7 w
  514.   {( E7 H$ `! R! K0 r: T; N
  515.     char tempFileName[MAX_PATH];
    # b) H2 ?1 O9 V5 c/ G
  516.     strcpy(tempFileName,szPathSource);
    % X" z1 D5 }: P: @
  517.     tempFileName[strlen(szPathSource)-12]=0;/ E+ b: P0 H: E  y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    6 D  q  r# `9 Q. T4 o" q- w" n# `; d
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    $ \" h5 J9 |% Y& N- n8 s; O
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    $ a9 Y  g9 B8 c: r( |
  521.     return TRUE;
    8 G- z; O# r, j% R# X. Q" b9 N0 F$ s
  522.   }
    - Y7 [$ T! S# U0 X9 ]
  523.   // Nuke 0118: Delete run.exe( d% N5 z! e# C. E' v) x
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    - r5 X2 R! w/ @
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");9 s* t  u6 C3 E0 q( j$ n) M. b
  526.   if(!ReadCfgFile("Config.ini"))
    5 Y7 t7 l& w& i
  527.   {, L" X2 s. `' X; ^/ K
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);$ O6 \0 \; R: [4 x& z7 P
  529.     return TRUE;
    ; r0 }8 k: M9 t% C8 O- q
  530.   }' N, k4 K3 D% d) w
  531.   HANDLE mutex;
    ) O. Q# T; a# `% h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    8 f& q: ^! U0 n6 S& d
  533.   {
    1 m: m* q, }5 b& L3 ]8 c8 r
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    $ ?+ x. Q% _% r7 A0 }# h
  535.     {
    1 M4 |* F6 U! B/ Q. p0 g0 u. O. q
  536.       CloseHandle(mutex);
    ' C- G5 o0 L0 f5 l  e; R, r  f
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    6 P7 L: i& N9 \! L" q, w7 x, K" y
  538.       return TRUE;
    / V" F$ t) r! P  O" f
  539.     }. O% O1 Q8 K' r3 {! r
  540.   }  ' ?4 M$ E- q+ \  x) h5 I8 J
  541.   CloseHandle(mutex);
    . P( ~) q. |! h+ N( {7 K
  542. " l6 f+ ?) N7 y3 C5 G+ Q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    , }5 d4 ?) b3 e* L! J

  544.   O, o- U2 G  O! w) _
  545.         AfxEnableControlContainer();
    ) T6 I  e% j- H' s# X7 p/ p, J
  546. 9 w' s8 F2 E5 m9 \: S7 Q+ g# ^# |) c
  547.   bCanUpdate=FALSE;
    ! V/ b' J5 _* C" }7 a/ I, P
  548.   dwStartUpSteps=1;
    ( s% |/ p! {, j
  549.   dwProgramState=AP_NOTHING;/ }7 k0 H. v7 l

  550. 1 f4 M$ d; x% ?0 q
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);& j  U  k4 }9 r' z+ b% y+ \" c: a
  552. 0 d# O8 I+ O' G% i
  553.         // Standard initialization
    0 Z2 A6 Z  G+ H8 J+ T' v. I
  554.         // If you are not using these features and wish to reduce the size
    " D* U/ G7 `) }5 z1 p- \1 W+ N: {
  555.         //  of your final executable, you should remove from the following
    " e) B% e% z/ @- l& u& h3 D
  556.         //  the specific initialization routines you do not need.
    ; d0 j! C, {* V+ k5 }3 V' M

  557. ) [) M* P9 F+ o. v( K$ K
  558. #ifdef _AFXDLL
    3 Y/ d, e* j: z, M4 m6 m, l
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL! S8 u$ g3 o8 ~. G( S5 |% y
  560. #else
    + g: {; s+ Z5 _! J6 O. I
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically% f, L$ V( i: C) {2 |
  562. #endif/ `) D/ X! @; G" i' u7 o' L" t

  563. 5 Y6 @0 X$ l3 ~* r
  564.   dlg=new CRevAppDlg;
    % I6 I5 r) q( W; e% e( _3 l7 }
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ( ~$ G, q7 T+ }' m* V" V
  566.   dlg->ShowWindow(SW_SHOWNORMAL);9 ~# V  S9 L+ t. O
  567.   m_pMainWnd=dlg;
    % ]4 r" q; R; c! S
  568. 4 d& c1 z4 v6 n- U! E$ U9 J) I
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    / }. y8 l+ b& E( D( a' W
  570. . v* K5 V) |6 c) M
  571. //  GdiplusStartupInput gdiplusStartupInput;
    $ j" l; {7 A& N+ b& [; _- c. v
  572. //  ULONG_PTR gdiplusToken;4 j+ J# U; @9 ~/ I3 S- W
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);1 b6 f( ~% g2 Q" c- C

  574. # J* Q" D2 w" X! O% s
  575. //        CRevAppDlg dlg;( ~$ I$ p. j* W( v1 h" s  }+ M) ]
  576. //        int nResponse = dlg.DoModal();
    : K) ]: ]. V. {: P0 }$ U
  577. //        if (nResponse == IDOK)
    : B% _3 N! S+ J* N6 `  e
  578. //        {
    9 u; D; Z$ q* T, \8 j$ t
  579. //                // TODO: Place code here to handle when the dialog is
    $ b* \# l2 i- `# v8 A0 {
  580. //                //  dismissed with OK/ g( e/ P0 e8 M- X: a- ]: T
  581. //        }
    & T/ X: T" s/ R4 y, p2 G* {
  582. //        else if (nResponse == IDCANCEL)* S, L8 m, v  I" d8 a0 ~0 ?
  583. //        {6 E! A% d$ E0 \* K
  584. //                // TODO: Place code here to handle when the dialog is0 q% W  s9 i- g( ]8 B" r
  585. //                //  dismissed with Cancel
    ! x( j; T# }5 D( ]
  586. //        }) d! t+ x" w8 N3 w% V) U

  587. ) H3 T& J* O; S6 W! t4 L! @
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    # ^& u; k, Y3 O# F4 m, `( H" X8 H: _
  589.         //  application, rather than start the application's message pump.
    / R* k- G1 S5 T0 S5 p. t4 A
  590.         return TRUE;
    % w5 w% }0 q0 s5 c3 `9 h# Z; U
  591. }
    8 k, r7 }* ?* `4 @
  592. 6 a- o  H' d+ u% f2 z8 s
  593. char *CRevAppApp::strtok3(char *pSource,char *token)3 A' ]8 A. w0 u5 @& E9 J
  594. {# r$ [( J0 P& |! N
  595.   int i;2 g: w( k# C# V. R: x/ _1 b, ~/ @
  596.   char *szRet;
    : j$ b6 Q- a" C

  597. " M( t3 [$ D! z6 `1 b
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    9 x0 j9 o# [% t) \. ?
  599.   if(sztoken)$ L+ Z, b  @, H( I' y. H, _
  600.   {
    % _5 [- F6 z$ E( D! P: L
  601.     szRet=&sztoken[itoken];1 r( p6 q( b2 ]# c# n. r
  602.     while(sztoken[itoken])" D& D8 {( B& r2 T* b
  603.     {
    & a6 ^' J. M, i- ~( E
  604.       for(i=0;i<(int)strlen(token);i++)
    / @- k- M- J4 n
  605.       {
    9 M, z7 M$ ]9 l
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' P; m) i3 O0 u, N
  607.         {
    ( V9 ~7 S) N' D/ m8 G# _: d
  608.           sztoken[itoken++]=0;! V5 j, I4 l/ S0 y+ L# [
  609.           sztoken[itoken++]=0;! i( j! |+ @% h, h" L! a
  610.           return szRet;; u$ h" Z8 z. V4 n
  611.         }0 L1 K* [. W2 m' b6 [
  612.       }
    9 L: ~8 ?* ^2 \: O
  613.       itoken++;
    6 V/ z6 z7 U9 d# D9 C
  614.     }
    3 k+ G0 S$ [3 @% S- K. s* m* `
  615.   }& k! Q5 M; w5 C! P7 Q
  616.   return NULL;- L* Y+ @" O. `. V- k6 O: y
  617. }
    ' d: G  t/ u# E

  618. # I& D2 B2 x7 L' h7 ]1 |7 C5 l
  619. void ProcessProc(long Total,long Current)
    6 q1 w3 [: f+ E0 M
  620. {/ W9 u; V( o0 I2 O$ |- H$ F
  621.         MSG msg;1 z# \; q6 v& R6 y
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    6 k) U# ]# C' i2 T. f
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));7 H$ j3 G8 |: s* z" p" e
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ' R6 W+ n- C1 ?; p
  625.         {
    ! l# J  a8 m9 }& s9 e0 @
  626.                 if(!GetMessage(&msg,NULL,0,0))
    % Y: [$ |7 w# j9 u% @& d; L
  627.                 {
    0 C) Z0 C/ w* ]
  628.                         return;
    3 \7 ~2 J4 @7 G  Q! g9 u
  629.                 }
    , N+ n9 C/ R# h. r. m
  630.                 TranslateMessage(&msg);
    ; o& U: G! ]* f1 h: e# [8 r) G6 V3 L9 p
  631.                 DispatchMessage(&msg);# E# D" ]/ U& R! m8 q8 G; C
  632.         }        6 @) v6 B- ~7 w+ \
  633. }6 {5 j' X. A  m: N: c! n
  634. 9 f% {* ^5 G4 S( b5 E$ ^+ _0 B
  635. BOOL bFirstChar=TRUE;
    + r0 W) r( y. E8 |+ H$ b

  636. 1 |5 g# M6 ]% D/ o! \
  637. BOOL CRevAppApp::OnIdle(LONG lCount); e  V5 L: P( b& S
  638. {: W8 }' q& J  Q
  639.         // TODO: Add your specialized code here and/or call the base class
    0 c4 u# k( r+ }* G9 V) h2 ]. C
  640.   switch(dwProgramState)4 ~) K' v$ S9 z1 L! k& Y; x' b* F
  641.   {
    " I( L3 p" K0 s4 t8 k8 h$ C3 a
  642.   case AP_NOTHING:
    + {- @, v0 @) z
  643.     switch(dwStartUpSteps)
    $ o( Z/ q2 v+ y( o
  644.     {
    , u6 {6 r2 }: H  T( S
  645.     case 1:
    6 h3 C& E: l) d& Q  T
  646.       {1 W) @5 _1 k% L/ G  |6 h
  647.         int i;* p$ I. P# c( r5 Z+ E
  648.         CDC *pCDC=dlg->GetDC();
    ) }% O. ~1 R% l: e
  649.         HDC hdcwnd=pCDC->m_hDC;
    " j; t( E/ A8 w7 \  W: B2 g
  650. //        Graphics graphics(hdcwnd);
    ' F% X" x# B& I
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ! S1 Z% h: Z; h6 i5 w
  652. //        INT iWidth=bitmap.GetWidth();
    / {7 o$ I; I) X* l
  653. //        INT iHeight=bitmap.GetHeight();
    4 M4 [3 P+ ~: O* c+ \6 b
  654. //        Color color,colorTemp;- K4 r% O; g3 _( _" j# D
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & o0 U' ]0 @2 u. |( K. q! T
  656. //        {
    3 r) `+ s- Q: w0 e: Q& c( M6 H
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    1 L2 I. L( c( R" s7 D
  658. //          {
    2 O+ k( Z% {9 y; v9 Q" f
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    + A8 e" b) P3 i: ^- h
  660. //            colorTemp.SetValue(color.MakeARGB(% u: c' h% |& Z% m
  661. //              (BYTE)(255*iColumn/iWidth),: L1 n! z* V9 a$ ~6 m& |
  662. //              color.GetRed(),3 g8 g4 Q! g0 g! a9 G4 T0 \* ^
  663. //              color.GetGreen(),5 J+ P- d" _/ I3 i
  664. //              color.GetBlue()));
      u0 s3 m' P  O$ f& e
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);$ m# J2 U& u  m* X
  666. //          }
    + Q" `& D* Z( |. p, P
  667. //        }
    ) b3 _+ f% J' N% u& D/ r
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);" t/ t; m* f& r8 j$ ]% s
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& a7 Q9 N  }8 |" i$ g2 b
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    4 v2 m. t, P- r# g$ ]4 A+ N/ Y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: ~6 v' M! |" D  ]% {! y. t: C8 R
  672.         for(i=0;i<240;i+=8)
    # e2 _5 s% g4 M) J* H
  673.         {2 J; e; n0 M& A; k5 E
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);, R: Y# _( a( D7 b9 Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 Z! q  r3 S2 u; C- _) R
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 p2 `$ d0 U' s5 j
  677.           Sleep(33);" c) `2 n3 q6 h" ?0 C& N
  678.         }
    * ^: v3 V0 ?/ H8 ~% o
  679.         Sleep(1000);
    6 Z7 A1 W- C# t4 f7 P
  680.         for(i=240;i>0;i-=8)
    4 D0 V7 K6 \: H
  681.         {
    4 k7 B  c) T; g# v
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 q6 C) ?$ h1 Q' R- n/ q2 H
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 h/ g; q: |. ]: }0 L' G. v
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + Q; ?/ c# E& q" S7 e0 ^
  685.           Sleep(33);
    " C& b5 I. g8 I1 [
  686.         }
    " B7 D& J* v& F: R
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( B; }( x0 |+ e, ^. {/ ]+ N0 \. q
  688.         dlg->ReleaseDC(pCDC);
    & W3 m, N, S0 g9 [- ^% R5 W4 c
  689.         DeleteDC(hdctar);% z' H$ D, ~1 Y
  690.         DeleteDC(hdcsrc);# M1 e3 R+ u) A) U0 F
  691.         DeleteDC(hdcorg);
    3 T) s$ P, d* u  H  a0 `9 J
  692.       }0 G! b/ j- w7 m; |3 u) [
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);( T, R% d0 m) k9 f; {5 ?" A
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 e; H& Z/ `8 K3 P- S; b
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    8 l+ B0 f: j+ W" x$ ?
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");# R- s: j" ~4 w. a, e
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 w' `' J+ y7 U" Q1 i' \7 |1 W
  698.       if(!Dn.Connected())& m; V' E7 q  g! L* p
  699.       {
    ' x4 r$ j! }4 r6 b
  700.         dwTotalFiles=1;
    9 U7 t# m, ?0 ~
  701.         dwDownLoaded=0;
    1 I+ t- F/ |5 G% C/ u& n9 K
  702.         bSilentStep=TRUE;" R) E. o: P: k" O% }
  703.         bCompressed=FALSE;4 h: Z, y4 ]% B5 R. j
  704.         strExtLocal.Empty();
    " R* t2 L+ ^0 j7 _4 N0 h5 d
  705.         strFullName="readme.txt";
    . g- f: B, f% c+ V' m" s4 l
  706.         dwProgramState=AP_CONNECT;
    4 F. j- E& h/ E. ?9 s8 V, c" U
  707.       }
    4 e2 B* v. ]8 B: g! D5 b# x
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    : ^* _8 n: ]- l. C0 C9 t% c
  709.       dwStartUpSteps=2;
    5 a: T: e  f) R5 V
  710.       break;* L. A! i( e. X: X, v) p
  711.     case 2:9 ~+ w: a: ]" C% q4 Y
  712.       {: m% Z# W; ]3 j! ], |
  713.         int iEOF;, F3 e- b$ C+ F! O, C0 }/ e
  714.         FILE *fp;# Q2 l1 J  x5 z8 m6 a
  715.         char szString[512];5 i9 Q: A" E/ J+ [5 t( K2 a
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");2 K' Q. z' ^' x% X" {. `
  717.         if(fp)
    0 \+ \7 Y. ~5 {# s- {% Z5 r7 l
  718.         {! V5 r( i: O( s3 {+ ?
  719.           do9 O0 Q+ s6 I( y4 k2 r, R: {
  720.           {
    : M2 ~3 B4 I- U& J- e1 A3 m1 H& k
  721.             iEOF=fscanf(fp,"%s",szString);. N5 Y! g# Y7 s0 t5 \- y+ e
  722.             if(strlen(szString))+ g1 O8 t$ g' s( m
  723.             {/ }4 W' p7 T) P, Q# |, B( O
  724.               if(bFirstChar)
    & F. U, h, q! b
  725.               {: a. m  G" c9 A
  726.                 bFirstChar=FALSE;7 N* X- C; P5 O2 C" T- k1 \6 ^
  727.                 bConnectIsBig5=FALSE;
    # T8 w. H' k, ?2 s# B
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;* |/ z: N! d5 R
  729.               }9 V1 T' K! R& ?2 h# _# V% S
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));+ z- L3 u9 n2 d3 q$ V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));- M* @% S( a! j& }9 g
  732.               dlg->m_ListText.AddString(szString);" ~- t. S7 L$ d9 C# V* U
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 e9 {+ y- _; K. F. \
  734.               *szString=0;
    : f* l  V% j  L. {
  735.             }1 x* A! f0 u( Q" ~
  736.           } while(iEOF!=EOF);* T" F5 S$ P& a# I, S% f: X% Z
  737.           fclose(fp);2 d1 j" {, @1 }3 _5 F
  738.           unlink(".\\DownLoad\\readme.txt");8 K5 ?+ Y' {$ x: b- c: L: k% c9 d% S
  739.           dwStartUpSteps=3;
    * e1 S7 P" B3 r
  740.         }
    * M% W! l! w7 @
  741.       }; h# `9 s4 w- ~3 D0 A( G9 C0 q5 h
  742.       break;
    7 i8 x  ~$ _2 L! {  B, P& N
  743.     case 3:
    % P0 k2 p- \! `- d
  744.       if(!Dn.Connected())1 z8 C! ^6 d( _* b
  745.       {3 c4 r; D+ F; U# T; e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);: x9 v' f9 e5 W0 k& \
  747.         dwTotalFiles=1;' ]$ h3 Y! r) H& @8 v
  748.         dwDownLoaded=0;% \4 `2 z7 ?/ Z9 R0 K$ Z  V6 q* B- S, s
  749.         bSilentStep=TRUE;
      T3 `+ u) O: d+ T
  750.         bCompressed=FALSE;
    5 l+ v. W+ [/ @! r9 L
  751.         strExtLocal.Empty();! v/ B2 ^& V/ @  H, l
  752.         strFullName="checkversion.txt";
    4 Q4 v5 J5 I3 h1 v& F( J2 b
  753.         dwProgramState=AP_CONNECT;  E) R5 [: u5 Y; q4 s# ~* n
  754.       }
    ' V0 h4 y9 s  B* d. j
  755.       dwStartUpSteps=4;/ L7 Q/ U; G9 J2 u3 l8 T1 ?" [4 e
  756.       break;
    . b" A" s- _8 M! ?1 n. Z
  757.     case 4:$ ]3 U; g3 J2 e* m0 P& d$ P
  758.       {
    & T$ K# f$ y6 k7 a
  759.         FILE *fp;
    $ I4 j  L! L+ I, Y) s; D3 _. K, A6 C
  760.         char szString1[128];
    ; G* G: t2 p% D. z: j
  761.         char szString2[128];
    ! B  p/ J/ U! @
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");3 q/ p$ q. ~3 s* g' X  u
  763.         if(fp)
    # s, `3 u8 ~  m: S- ~! h) Z* V
  764.         {
    % I! o2 w/ Y/ n% D
  765.           fscanf(fp,"%s",szString1);9 `  ?: V% _* c2 _2 y
  766.           fclose(fp);& {) j' r. a# n! H4 |# r( o
  767.           fCheckVersion=atof(szString1);6 Q7 K0 v" x- c7 N4 t: {
  768.           fp=fopen(".\\checkversion.dat","r");
    : b7 L3 m5 t; w" U, Y& o- S- G- c
  769.           if(fp)
    0 [& [9 K. K! c: O7 v
  770.           {
    ) B0 Q% S: J7 I  h* }
  771.             fscanf(fp,"%s",szString2);4 B5 X" o& E0 [& s$ f' ~
  772.             fclose(fp);
    + T" h9 J' P9 R. i
  773.             if(atof(szString1)!=atof(szString2))
    ; C: X5 c- Y" M2 ?6 `/ ?# {
  774.             {
    1 c( Q! }! b) w* |
  775.               if(!Dn.Connected())% @5 L% f7 ^8 |1 v& ?
  776.               {' K8 q) ~* H8 V( H/ u+ Q' w" ^" j
  777.                 bFirstUpdate=TRUE;7 g5 C+ G' h4 R& z  i
  778.                 dwTotalFiles=1;
    9 V/ b) Z. e! n' Y, f6 E& X) W0 S
  779.                 dwDownLoaded=0;
      a, b0 e1 a9 R: v6 K$ G* S" S+ V
  780.                 bSilentStep=FALSE;
    7 p5 _% V0 q3 t: k2 |" u( c6 G
  781.                 bCompressed=TRUE;
    + u2 P# ^( r, g: Y
  782.                 strExtLocal=".\\DownLoad\";  Q) U* }, O1 O' n8 y  z
  783.                 strFullName="update.txt";/ N; d% O4 X) K' w6 G
  784.                 dwProgramState=AP_CONNECT;
    / b7 H( G% C3 ?: ?1 @8 K" {; X
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ i! i$ g  L# M1 r" h% A" O
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( c8 ], O5 Z: u, e! P$ @
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");9 m% n6 H% G8 H. m; ~6 ^( V6 S$ e

  788. * |4 ], z+ N( `
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 ]& r$ N) D5 ~. |' j- W
  790.                 unlink(".\\DownLoad\\checkversion.txt");% u6 e% z0 j: M5 C9 A: L
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    6 A( C" X* Q5 Z: F) W
  792.                 {8 R7 {2 ^8 S6 m6 j0 p% q0 \
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    / T. `# V- I% ~
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");/ ^- x9 d5 W$ W& r6 }5 R& G3 v
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
      H- L0 R# s- t5 m& J( ~. u. x; |/ p
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 y5 C7 r9 G. V, V

  797. 2 r1 M+ J! {+ ^0 N/ f/ O
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( n0 y* ^, x+ R* J- L8 M
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! P0 t& x. Q+ N1 Z# J8 c
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' e' J+ X: J, m/ ^: g  T( x
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 [% {4 D0 N) y& I5 a6 @  ?2 q" z( h
  802.                 }
    6 {7 \& Q% r0 _
  803.                 dwStartUpSteps=5;
    : a1 M( u7 a  _) w
  804.               }5 \+ L9 i8 t5 E# L& X5 @- n4 A
  805.             }
    8 @* q- j- b+ ]5 a& t& j) O
  806.             else+ v7 |/ n! n, `! ^- `; T
  807.             {2 Y8 |7 ?: g5 o( J& s+ _& D0 b4 \
  808.               unlink(".\\DownLoad\\checkversion.txt");
    , T6 n9 I- C- [' v6 X
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& N/ p0 {3 G2 y4 d; B" G  R$ O' @
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + ^" _. [* ^- V0 k4 y! c4 s  z2 f
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");5 [2 _  F3 {$ k7 t; e9 s' ^+ w

  812. ' L2 M, r' C. d2 ^* h1 g7 ^
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 Z' `2 L+ G6 _" z+ o: _1 G
  814.               dwStartUpSteps=99;
    % P# L4 C8 u# b6 X
  815.               bFinishUpdated=TRUE;; s* j' u* x% |. w5 Q) n
  816.               bCanUpdate=TRUE;! ^( F6 t, V9 ^5 |/ ?" d
  817.             }
    # O. C2 L9 Z, V* s2 e+ K
  818.           }( Y! X4 y& ]: U+ S) C0 _4 O2 A
  819.           else! p' d$ i5 y& j# w8 F, Y
  820.           {9 S3 i$ a( f+ n. E9 f# Y
  821.             if(!Dn.Connected())
    1 |" ~6 d- i% C, h
  822.             {# T$ S, q: M; x/ F
  823.               bFirstUpdate=TRUE;
    7 E/ h- Y, P: }& s! q
  824.               dwTotalFiles=1;
    ( X$ Z7 }3 e6 [/ t8 n9 A- v
  825.               dwDownLoaded=0;' ?5 Q1 T! J* |- \
  826.               bSilentStep=FALSE;
    8 e4 [1 }" L3 _( [# K
  827.               bCompressed=TRUE;2 k$ e. G( o0 S9 p! n7 L, V
  828.               strExtLocal=".\\DownLoad\";
    3 e2 U# c( g! ~5 G9 g1 I7 q
  829.               strFullName="update.txt";
    8 t/ s2 k8 K- w! U3 \! h: \
  830.               dwProgramState=AP_CONNECT;
      S9 S9 z- V' e$ H# r/ S9 t+ G
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / n# S) I* E5 J: f1 w
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 H4 I6 V1 E/ j+ V, j
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");  \: G6 b! n- A6 O  s
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 C5 {+ x" ?7 e% `
  835.               unlink(".\\DownLoad\\checkversion.txt");
    % d4 b$ f# H4 z4 Q- {9 Q: L" R- r
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)) N  A2 D8 E$ ?  o' E( D/ f
  837.               {
    1 F1 o, m1 p3 W) }$ _3 d# s
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    7 Z& c1 u: l/ g4 H" v8 y( e2 G
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ) Y) y2 S% F/ |: w- u, B' r0 W' f
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    # u) L7 R3 @* K5 ~6 v; |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* }' C7 `8 D/ ~9 K  f
  842.                
    : P- y. ~$ f3 m( {! d  s" g7 V1 a
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    8 |; [+ z7 y; q; }- J
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 Y1 x. [9 q' D% K6 Z+ Y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    9 ?( Q! z: V0 F. Q  a/ U3 p, H( N, `
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / I  ^! b9 F, o  W6 a
  847.               }* w: ?8 j9 p* u" F9 f7 {
  848.               dwStartUpSteps=5;- ~7 q' Q' O8 `
  849.             }( P7 h. u' g: j1 L
  850.           }
    ) n% P! B8 v  ]+ d% x3 Q
  851.         }
    & @1 _0 i. W" d& ]1 `6 b+ b
  852.         else2 R9 I" N! [, |, u" a
  853.         {) x: m" Y$ m2 F: V+ ?; n% b
  854.           dwStartUpSteps=3;( Q3 ^) r7 X, H+ g' `: _5 B- e
  855.         }) E" j+ |0 n8 j: I- f5 C
  856.       }9 N& H) _- @- }" h/ p
  857.       break;
    1 T. j2 v% a. g5 B+ ?& X& s; O
  858.     case 5:
    0 P# W0 P4 r7 s  I( R: ~
  859.       {
    ' }" @( x: l6 F- R/ ^
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) v8 s- w! A) y
  861.         {- f& {2 z4 a& `, Q' I0 H3 t
  862.           int opt_overwrite=1;4 B0 @# K, Y2 X$ n5 Z2 l0 ~
  863.           int opt_do_extract_withoutpath=0;
    3 x; \% Q& R6 e- ^5 D0 o6 L6 c4 f/ W
  864.           unzFile uf=NULL;
    , s: P7 R* D/ P8 O

  865. : z- b+ y# \, P$ Y% r
  866.           uf=unzOpen("Wsa.zip");4 U. O1 b& M; I" U8 b! S
  867.           if(uf)0 Z  }2 m  }* U% n
  868.           {" ]2 |& S& o' C$ X+ ~
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);$ Q9 H: p1 ]' b3 M
  870.             unzClose(uf);
    ' W7 u( V4 _7 P
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    % L0 E6 H. q7 G
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");" m4 l& x* |7 \: u
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    3 D& u0 L0 s) \, c: n( U
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ x, f9 f% N/ b% I) |. e
  875.           }
    % {/ G1 y6 O: d$ c7 b6 w# ^* E, r
  876.           DeleteFile("Wsa.zip" );5 b4 R7 e5 U7 E& u, ?
  877.         }
    ; ^$ p- Y# \  x
  878. , M1 i% X' R8 t" h: L' ^" b, J' q
  879.         if(CheckLocalVersion())( C: W& D( P) |3 p
  880.         {
    8 O& T; d8 B1 Q( Y! o
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");+ w# D8 c0 C) T7 Z. v! Y5 j5 }: i- B
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    : n- N" Q8 Q9 h6 E
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    5 o6 A& I1 \9 [0 u# D* h1 E* _5 U
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 W3 g1 b  A; D* X/ D
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);3 R; P+ M2 V+ p" W7 b& e: n
  886.           dwStartUpSteps=99;# v# Z! {8 z, S" j) ^( h) S
  887.         }9 A3 ^: U/ U; ~: p7 O/ @8 n
  888.         else
    % G/ H! K5 W8 k) k8 r
  889.         {
    % H7 Y) U1 W7 L( r# ]! a
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");( o9 V$ o% Q3 d* M6 Q+ P" y' e, Y
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 J% z- s6 Z, o6 L# y" D/ h3 R
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ |/ ]  s8 k+ e, }

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

* ]8 `4 b/ ~2 X: o# y' S

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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