CSUpdate.exe源代码

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

/ \, H2 w' ~5 p9 q  E
  1. / RevApp.cpp : Defines the class behaviors for the application.$ F4 q4 V0 u4 C- _, R/ ~
  2. //
    3 D6 g! g0 G$ [
  3. , G2 c' b! Q; q" Z: C; S
  4. #include "stdafx.h"
    " d7 N9 W, ?" U9 S5 j4 l7 K/ Y
  5. : @. G, ]% R+ A2 [( p; M$ D
  6. //#define UNICODE: A! B, y. n/ w9 N2 G6 [; \' T
  7. //#include <gdiplus.h>
    ( }& B, f+ w( Z) H+ C) h% o2 ~
  8. //using namespace Gdiplus;
      Z  m, n2 w' x/ `$ p# u

  9. ; g  |4 f6 N( a) |( F( H
  10. #include "RevApp.h"+ T! N7 N) v9 Z! @( e3 t5 g
  11. #include "RevAppDlg.h"
    ' K8 h$ P5 j8 f% h! r6 h
  12. : R- [4 {+ V& V; x& N
  13. #pragma warning(disable:4786)7 v  s& a  Z7 o1 K
  14. #include <map>6 U# [8 F' I+ M/ {8 s: B
  15. #include <list>9 S4 C" {9 p/ U. r. N' P+ \; ^& q
  16. #include <direct.h># S; v8 O4 r, j3 ]7 p

  17. " n' o( p- o# T. t$ a
  18. #ifdef _DEBUG4 o! s5 d  }0 M) ]
  19. #define new DEBUG_NEW
    6 q$ G" A# E" i# m
  20. #undef THIS_FILE
    / C; V; l" I! h8 u! a
  21. static char THIS_FILE[] = __FILE__;
    8 N" c  D5 A! o% P7 Q4 v, g
  22. #endif
    ( |3 l( K5 x" [+ P# `
  23. #include "SkinResDef.h"9 B4 X3 Q1 P  V5 t: z
  24. #include "ChangeBG.h"
    1 m+ `  s* [9 }  a
  25. #include "AFXINET.H"6 ?& n( t$ d8 n( Y5 V  |) A

  26. * E/ d3 u1 F/ O6 d
  27. #define TRADITIONAL_CHINESE 0
    0 y" o5 z! {+ {1 w" E
  28. #define SIMPLIFY_CHINESE 1. m: K3 c) z% I  T9 z: z- M; ?: f
  29. #define ENGLISH 2! {, Q) h5 d- ?; K) v" s
  30. int m_iLanguage = ENGLISH;
    / Z1 V1 p7 M; M- Y. X9 I% k4 n4 w  p
  31. /////////////////////////////////////////////////////////////////////////////
    % ~$ F. t" `, o. r# E* R# I* o/ @% `
  32. // CRevAppApp
    . E* f' _: h7 ]! q9 u! }) [
  33. ! \5 y! _% O1 F/ \- E* ?2 d
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    0 N1 n/ h  i3 h  t$ }
  35.         //{{AFX_MSG_MAP(CRevAppApp)% H4 j% n# x: p2 V
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here., o4 k8 R& V4 y
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    . u; d2 U6 |5 A, V! K
  38.         //}}AFX_MSG% a, L* g, ?* W, {9 ~
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    8 `  ?( ~& i( h9 F0 x+ Y, U7 T. k3 g
  40. END_MESSAGE_MAP()* `8 ]1 p! a& n4 l
  41. % y" {6 n+ ~" E6 u
  42. /////////////////////////////////////////////////////////////////////////////
    3 W- B9 C* k  |: S/ y7 A9 x  x# d
  43. // CRevAppApp construction
    3 x& n  L1 y; G/ h% ^

  44. ! a1 L4 Z0 d) B. I3 j: G
  45. CRevAppApp::CRevAppApp()
      |9 t% W9 f; Z$ P3 g+ p. ]
  46. {: G: I: r2 J1 y- S# D
  47.         // TODO: add construction code here,
    / i. k1 r0 R: _, T' B# D- ?
  48.         // Place all significant initialization in InitInstance, P2 M7 O+ N% I; z2 [! m
  49.   bDisplayIsBig5=FALSE;
    0 \- \2 s7 ^) R% |
  50.   bRestartUpdater=FALSE;
    % F/ t, f6 J( v7 c( }5 [( V
  51.   bFinishUpdated=FALSE;0 {) c3 `! ?/ D( ^$ S, D! G* d
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ! f/ V  L9 ?3 A, l
  53.   InitChangeDataBig52GBKS();
    2 o! d1 `. |( ^
  54.   InitChangeDataGBKS2Big5();
    9 `  `& R: |8 J, W! V
  55.         //
    & L5 t: y( M. }- A2 k4 K
  56.         bClickRunExe = FALSE;* ^* M8 l& b4 l1 w- R7 G
  57.         //
    , |4 h9 F  U. k/ P0 z/ L& `
  58. }
    4 N0 a. b; x$ v3 Q5 T
  59. - h; M2 @$ k/ H' R2 n) l5 @
  60. CRevAppApp::~CRevAppApp()
    9 l2 `! M, N/ _5 y4 a! l
  61. {% D7 e+ W; T3 E8 Q/ V
  62.         // TODO: add construction code here,
    8 d' v5 Q  Y% m& T1 ]. t) C
  63.         // Place all significant initialization in InitInstance9 ^  G. Z, D* g8 _7 x
  64.   EndChangeData();
    0 h3 Y7 u+ x/ G% t, R
  65. }  g: R9 C0 L- ^6 U

  66.   A+ ^7 t( e" u! k& w
  67. /////////////////////////////////////////////////////////////////////////////
    7 _% y) o5 P) g* \) N& C) y/ E
  68. // The one and only CRevAppApp object
    0 k! n0 F0 D) P, T. v: `# A7 v5 Z
  69. ) ?2 z9 |8 |' {! ], \$ r
  70. CRevAppApp theApp;! P& b7 i& I' ?; n! M

  71. % k- c, j; O' M
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 x: G* q0 c' _
  73. {# J, |  C! e- ?4 s& }3 l9 Q
  74.   int iEOF=0;
    7 A1 z6 w) v' A6 I) B
  75.   char szTempName[MAX_PATH];
    + y7 {1 n  T( u/ T/ K& A$ O
  76.   *szFileName=0;
    " }5 d0 k! r6 p- S* S
  77.   iEOF=fscanf(fp,"%s",szTempName);# g# ?# {5 z$ m$ e( F
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')% L3 {2 m6 x6 Z4 s3 o' X& r! P- F
  79.   {2 i3 I# V9 W3 v
  80.     strcpy(szFileName,&szTempName[1]);" q2 ^# M: d3 X, @3 x& }. Q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)# O+ T- X# H; S+ [5 F- S" K6 F
  82.     {
    / h1 H+ w. P  m8 K  Z) K. s
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ' G$ T8 q' ?" Q
  84.       strcat(szFileName," ");4 {" S2 q/ F, z& {* g5 T* M1 I/ G
  85.       strcat(szFileName,szTempName);* G  I, P, ^, ~. l% {
  86.     }
    4 {4 ^: ]! b* I; |, n$ P6 U$ ]! m
  87.     if(strlen(szFileName)>=1)
    8 t# G$ h3 @% z4 [9 \& F
  88.     {
    " [- p; e* g- t) \
  89.       szFileName[strlen(szFileName)-1]=0;, ^" B9 l' C- p6 S
  90.     }. C, i' G2 k8 K/ Q
  91.   }' L, ~$ Y, u- K5 p+ y
  92.   return szFileName;8 s( d9 S; H7 ~8 T. }3 c, U# `
  93. }
    5 n! S, L+ x+ H- M3 u
  94. $ E# b" C- D4 T0 G) u
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    & m2 t/ o3 P0 L
  96. {, t3 G, J$ e( g- ~5 m8 i
  97.   FILE *fp;6 Z( F0 r- x3 E' D9 t
  98.   char *key=NULL;
    " d( t, P# i8 c' D8 V
  99.   char version[MAX_PATH];7 [  @/ l7 @; j0 O( H: |
  100.   LPUPDATEFILE file,olds;
    % j5 a. X1 j! v3 P) F( @
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & s5 Y8 U9 M0 a7 c$ r, I7 \8 A

  102. 0 B( H( a* J3 [, @+ S9 F8 |: s
  103.   UpdateList.clear();
    & [: |1 `0 i1 H6 j% A6 y
  104.   UpdateFile.clear();
    5 ?+ q2 i$ V5 Q
  105.   if(GetFileAttributes(filename)==-1) return false;
    * q5 F0 _" D0 j: Z5 Z- M7 ~$ @
  106.   if(!(fp=fopen(filename,"r"))) return false;& P" A! W8 g0 C+ F1 U% ]
  107.   fscanf(fp,"%s",version);
    # f2 c3 x+ C/ W; g) a0 J
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    6 W/ _1 S0 {& |9 h2 x
  109.   while(fscanf(fp,"%s",version)!=EOF)
    1 U' b! M1 }; E, }$ f
  110.   {
    0 K6 J, Y- R, o
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      c, |2 I* [+ n) z
  112.     fscanf(fp,"%s",file->path);1 I  W. d8 e) s* |$ _  K
  113.     ReadFileNames(fp,file->file);" M9 C! y; ?  c
  114.     strcpy(file->full,".");
    + O8 V) s# P; p8 ^7 K7 D+ ?
  115.     strcat(file->full,file->path);
    $ i: ?' f- x1 N! p- C" j
  116.     strcat(file->full,file->file);
    " x$ I/ k3 A; K3 \2 D
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    # @' z1 ?: n% N( T
  118.     {8 y+ r# p$ Z! ~. p3 X
  119.       file->vers=(float)atof(version);! c" e' Q! {/ N5 [; e
  120.       UpdateList.push_back(file->full);, p3 u* d. h9 p+ t! m2 }0 u2 ^1 c
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , q0 A7 C2 M1 Z+ i( _
  122.     }
    2 U9 |7 b% S6 w4 ^- r1 y. }# e
  123.     else
    " b2 [$ d5 a0 v/ [2 ?% H
  124.     {
    4 d- I% E% Y/ e2 N3 `
  125.       olds=(*p).second;8 a& a1 [( i6 q2 o* Y7 E
  126.       if(olds->vers<(float)atof(version))0 p% }1 w$ A# F1 z, C' _
  127.       {
    / l9 g/ n! W, P8 `' l( P# K& y( W
  128.         olds->vers=(float)atof(version);! d1 w6 G. k% v0 J1 K+ n/ B
  129.       }. t' S) x1 e* E* N3 K4 H
  130.       free(file);
    9 @( z- m" P  @/ |
  131.     }" _# H- K$ p/ P" e
  132.   }
    1 t- p- \/ l9 P' U
  133.   fclose(fp);( g) f/ ~9 k$ ?  x# H; k
  134.   return true;8 G- l8 q: P1 ~6 _/ f0 W: h+ Y" W
  135. }0 c0 h, x0 q5 n& {, B6 H
  136. ' {8 W: y: {1 b( f
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath). t, ~" V+ F* V" ~* L
  138. {
    % e/ H& v; _: ]8 B
  139.   TCHAR  szFull[MAX_PATH];+ Z% s4 ]* z7 v  ^4 Z$ M5 n& \" M- x
  140.   TCHAR *token,*inter;
    5 q4 Y1 S0 E; |2 s5 G; A5 _
  141.   *szPath=0;
    # }6 {2 ~8 [! ]3 T7 s
  142.   strcpy(szFull,szFullPath);
    ! M, j- L: D$ R
  143.   token=strtok(szFull,"\\/");
    & G3 U0 {  ]: ?0 A$ ?! D
  144.   inter=token;9 y8 L5 b* u4 ~
  145.   while(token=strtok(NULL,"\\/"))
    $ {* [. h2 Z5 w- ^/ J2 ~
  146.   {
    . |; Q3 ]3 I: F2 B. G
  147.     strcat(szPath,inter);
    . H* f2 e8 Q* D3 h
  148.     strcat(szPath,"\");$ R! l! N( D8 r! l
  149.     inter=token;
    . k- E0 O9 Q7 V. \* [3 e
  150.   }0 w8 J/ o/ m7 A( S1 R0 G
  151.   return strlen(szPath);5 R2 X3 V% a* g  x% s0 d* B
  152. }) u2 _: P' {! {! e9 G
  153. 7 G' m# J. G. Y5 T' |) X) j  a
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) w7 \) N9 z( j6 A. n
  155. {4 r7 H) T9 E* z) s- Y2 N. L& ~
  156.   DWORD attrib=GetFileAttributes(Target);
    4 ~% c7 k+ {: C1 c) T3 X7 k
  157.   if(attrib!=-1)+ N- o- G8 M8 @4 y! Q
  158.   {
    1 H4 |- t9 b! u; A* y  N$ w
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ H5 x3 r8 s2 R
  160.     {+ ~2 U& d6 L3 h) v+ V3 ]7 [) A
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);3 O7 a0 ^7 R5 h% a# b: N9 D
  162.       SetFileAttributes(Target,attrib);
    8 d) S( _  j' [2 h0 K  S7 I
  163.     }
    3 l9 i, E) |2 [3 r/ \
  164.   }
    & i9 i$ [5 B% |* Y2 ~
  165.   CopyFile(Source,Target,Erase);
    & d3 G. t6 e/ T3 W
  166. }" G) X) L7 ?" L+ V1 r& P
  167. 1 H" A4 @: u& l2 Y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)! P6 u7 I, x) ?
  169. {* w9 ], G5 I# B( U) D) \. s0 U3 f
  170.      FILE *fp;
    , m! |6 o' G- H/ j
  171.      char  szBuffer[8192];
    " N& C+ M9 W% u
  172.   va_list  argptr;
    $ B$ r; m: v, i

  173. 4 y) C0 |0 g$ v* I
  174.         va_start(argptr,message);" m. Q7 j; D3 q( B
  175.         vsprintf(szBuffer,message,argptr);  j0 l1 N4 @. C! E4 E0 `3 L' a3 o+ S
  176.         va_end(argptr);& j' O& k. c: `, U8 F7 X; Q
  177.   fp=fopen(FileName,"a");# n0 T' z7 z" y5 U1 `9 }
  178.   if(fp)
    3 D* ?; c! ?% g0 S3 j
  179.   {
    3 X- A8 j% [, B% o# E' b
  180.     fprintf(fp,szBuffer);9 ]9 H2 q1 D& `" d5 M
  181.     fclose(fp);
    : ~& f* `  h/ e. D
  182.           _flushall();
    ; f/ o3 i, k4 `* \5 L
  183.   }# B- {# t( s/ ~/ s  {
  184. }2 k1 z/ ]" i' D& Y# y3 t5 e

  185. ; ~# V5 ?' Q% \+ I; t
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ; W3 r# B7 y( K- M$ Z  K
  187. {$ h; f$ q- S5 D: E7 F
  188.      FILE *fp;( e" `4 ?6 Q1 P2 g* l2 r  @
  189.     DWORD  attrib;+ q% }9 S9 o& C: d; Y) l
  190.   attrib=GetFileAttributes(FileName);
    : ?; u$ C3 C& U1 s; L# F) V) \
  191.   if(attrib!=-1)4 |0 }  _/ g1 C: A/ o; |
  192.   {7 Q( x: a% @3 f! k1 h$ K
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 \& y+ _9 I2 f- g) r2 o; z! l' R
  194.     if(!SetFileAttributes(FileName,attrib)): t! z$ o+ l4 G, A! K8 x
  195.     {
    8 a( @% H% D5 u' x( H! I
  196.       return FALSE;( [8 N6 g: C) ]: u! r4 H6 R' ~  O
  197.     }9 ~* C  v; L0 P, T# P1 n$ [4 C
  198.   }
    9 I7 z7 _% ?( A" T
  199.   fp=fopen(FileName,"wb");
    . G' J1 z' R. `/ y
  200.   if(fp)8 Z) P  ?2 C/ e0 H. F
  201.   {
    * r! z9 J' b1 `, G" I
  202.     fclose(fp);
    7 h6 }) l/ Z) B4 T$ H
  203.   }
    9 q( p3 }/ e2 l- {0 u  C! ?4 z
  204.   return TRUE;, T8 i# G  ?2 W6 u
  205. }1 G& j( I  y: @4 x1 N* {8 X! P7 u

  206. 1 ^* L3 Z9 y* O
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + |, r2 A* F" P( l2 N
  208. {
    / j% {1 k0 M8 W& U' d9 r- a( f
  209.   char filename[MAX_PATH];
    + j9 O4 B0 c# ~) O! S+ J
  210.   LPUPDATEFILE file,olds;$ r( {* k: h- \
  211.   std::map<int,CString>::iterator i;( A1 l- }, A8 U4 |! c, R
  212.   std::map<CString,LPUPDATEFILE>::iterator p;8 e6 _+ B6 F8 r
  213.   std::list<CString>::iterator l;
    3 U; O* H. z) L2 W6 l  {6 g, R

  214. ' p" W2 j! I# p/ [
  215.   if(bFirstUpdate)$ ]" \& N# }6 X" K' I
  216.   {
    * G, [- C' k9 M: r* A0 z5 F
  217.     dwCurrFile=0;
    & p9 p! ?* a! f! B5 A/ d
  218.     bFirstUpdate=FALSE;
    0 y6 o5 Y& [0 N* n
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 v- j( O2 K$ Q3 `* C1 E( D8 k  J" B
  220.     {
    : s1 g- D0 \/ H+ K" G
  221.       dwTotalFiles=UpdateLocal.size();7 z% b" ~5 k& y# `5 s: B& z
  222.       dwDownLoaded=0;
    : g( m6 k7 Y0 V* Q1 c
  223.       bSilentStep=FALSE;- ]: c; D% t) ^, J9 ^& k4 `* P
  224.       bCompressed=TRUE;
    ( F: ?0 r6 U1 W0 _& Z) b3 {4 H
  225.       strExtLocal.Empty();; {4 [; P0 E3 t- p3 W' y0 b
  226.       strFullName=(*i).second;( @1 A2 J2 r: o( \8 n  Y
  227.       dwProgramState=AP_CONNECT;+ e9 X, Z+ c/ b3 Z
  228.       return TRUE;
    5 _) m& t% Y$ \9 G' ?
  229.     }
      [3 B) T0 Z: J7 R8 t# x8 g
  230.   }, }& Q5 ~3 v0 e, b9 L5 c$ s. c, @$ w
  231.   else if(bRestartUpdater==FALSE)
    8 |0 ]" d. g& d- L$ D* c! L/ `
  232.   {" q7 q" Y' _" r7 x  `% C- h
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())% [: U5 |7 x4 r. f3 v, B9 K
  234.     {
    # U; f. j5 `- }& a
  235.       file=(*p).second;; U/ H2 o! l' k4 K* u) L6 {
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()); e2 S2 u: O9 Q
  237.       {
    3 S0 \. x( U% r2 s( c  y
  238.         olds=(*p).second;
    : \; h- I) m: m. b2 N2 v, ^
  239.         olds->vers=file->vers;
    0 N6 X/ T5 a/ W, o4 y8 a3 a2 V% L% Y
  240.       }4 y/ P8 A. e( V( U2 Z/ i$ v, Z" H
  241.       else6 C% Z. p3 B( U8 P+ D% y: p
  242.       {
    6 J. O7 A2 h. T# w5 r9 F, z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      _2 r" l5 c* r
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* W- z0 I* [# T3 j8 Z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));; o2 z0 T6 ?1 [
  246.       }
      M* ~; S+ J; Y( X5 @& M. X
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");$ ?. t" v6 {) o, w( Y3 @. x: k( d
  248.       sprintf(filename,"(%s)",file->file);5 j, c- x9 f$ u9 K
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - f$ @) n* I; }" x4 c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    0 J) S; g6 N4 L2 m2 J5 x  i6 Y  e& K
  251.     }6 B6 f. n8 t/ m. m
  252.     dwCurrFile++;
    % D: i2 g4 P# J  M" P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 b) e% j) e; m/ P1 v* Y! j
  254.     {
    * l3 Y0 X0 D- @
  255.       bSilentStep=FALSE;: k, w9 m/ O5 ?& s  }( R- R5 f
  256.       bCompressed=TRUE;% |3 H) d3 `: x) o! f
  257.       strExtLocal.Empty();
    ( t8 K8 b9 A/ Y5 |2 m
  258.       strFullName=(*i).second;
    ' I" ^. W9 X. {  x) {
  259.       dwProgramState=AP_CONNECT;
    ! ~) C/ E' l6 M- L7 f% G* e0 v
  260.       return TRUE;
    ' E+ o9 h  l8 c
  261.     }2 X6 v7 z* F9 z# p+ l) q
  262.     if(!bRestartUpdater)
    4 i, }* i" T4 C% A5 |
  263.     {' W" v4 o% M& ^3 U/ Y5 ]
  264.       int iCurrSize,iFileSize;
    ; S6 `& y( X6 A! f5 p/ l3 H( e
  265.       iCurrSize=0;
    : w' x  o) U% J6 w; N7 T
  266.       iFileSize=UpdateList2.size();  N% K2 N) k1 Y4 w. U/ p" @
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");# V- {; ~) C0 [& Y0 G; H
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    5 B; ~  s& G% N# R* j6 ]
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");6 r9 p9 \9 B, J2 a8 [
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 w5 n) C* _/ |. Y# t
  271.       Fclearf(".\\update.dat");# F- J2 C% m; n- l$ T& z
  272.       Fprintf(".\\update.dat","Bloodyf\n");6 g: g8 B7 s; O
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* T, R2 l( K5 n
  274.       {' j2 Q3 k( y* I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    $ m: L3 ?, D$ |
  276.         {
    2 e- u7 n6 _+ Z1 W5 f+ x
  277.           file=(*p).second;
    0 k$ L  b0 O% i4 D" [6 A
  278.           sprintf(filename,"(%s)",file->file);
    2 c2 [0 D1 U+ |0 p6 `( ?
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ X; N% @9 o  T( |  v3 @. X+ M% g
  280.           iCurrSize++;( p; u" O7 o( }' r' V: ]
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: d" f) R$ V; @6 p3 J! u
  282.         }# P. r, G4 k8 R2 j
  283.       }
    6 ?5 S8 Q- _5 u4 P& T
  284.       unlink(".\\update.txt");
    . p+ K& X5 I' m  C; V7 L! K% U7 @
  285.       unlink(".\\update.tmp");
      c7 c( l/ k3 K8 ?/ U/ t
  286.       Fclearf(".\\checkversion.dat");
    + K: B3 |3 F' S* P( v
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);" S/ y; P. r* W+ S" q
  288.       if(UpdateLocal.size())- C$ L; g5 W5 @2 H4 m( i/ c1 `
  289.       {+ k+ w3 \7 G) H" p0 t$ L
  290.         UpdateLocal.clear();
    $ l# ~) p3 L1 w! u6 z4 W5 c
  291.       }% M+ p2 E7 y+ d8 B4 H/ C
  292.       if(UpdateFile3.size())
    $ x- C* U" ?# c5 T9 x' i% ?6 S( o
  293.       {
    . p7 q, y9 f4 Q  E7 g" x
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 s3 D9 G1 p$ Z2 ^' f
  295.         {% r* r. j2 o2 K7 h- k8 p& l
  296.           file=(*p).second;
    ; T+ t7 T: r' c$ t$ C
  297.           free(file);7 p9 S& D  Q) P, ?, @
  298.         }
    + q% @. E5 F7 Y. s! V) `1 b
  299.         UpdateFile3.clear();
    5 ]- Z# t3 R7 l2 j  |  R% |! Z- i+ v
  300.         UpdateList3.clear();
    6 r- J: S) ]. I/ p0 N
  301.       }& Y$ ]% d# ~6 B3 \  r$ @
  302.       if(UpdateFile2.size())3 ?5 v4 v2 K8 L" t' i7 B1 z. I( B
  303.       {
    : [7 Z/ w2 B# c2 M4 f; ~6 ^, F
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  i' j" H& m% I8 t% \# p
  305.         {7 U5 J1 s9 D8 C  [9 r
  306.           file=(*p).second;" \1 X6 O$ c5 _0 e
  307.           free(file);
    8 V& Y/ |  C7 u2 J
  308.         }9 ?8 c5 R. j2 Z# ~( h& \1 [! E8 f
  309.         UpdateFile2.clear();
    ; [" h) G0 `6 D! l
  310.         UpdateList2.clear();1 E+ s. |" k$ B' `/ H- _- G
  311.       }
    + G2 ]" H) C' L8 e1 m4 M
  312.       if(UpdateFile1.size()). q: i# a  Z5 y1 y3 u/ r
  313.       {
    / H) N6 g6 D1 N  ~9 f" [1 n  ?
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) [0 T- a. s% P0 X- |6 @
  315.         {" v0 Z& f6 [" i  d" i- G
  316.           file=(*p).second;
    & a: Z/ l( ?/ O4 ~2 @, h; {
  317.           free(file);
    . p) J4 ~1 u. a1 `4 I4 X" {
  318.         }& f) H# L5 m5 j
  319.         UpdateFile1.clear();
    1 R* C& S4 Q$ D1 g$ f/ y3 @! B
  320.         UpdateList1.clear();
    1 B9 m# v0 C/ w. A9 Z$ A7 d8 f
  321.       }
    0 E$ A' Z4 m$ `' N% [4 W5 B
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));" p# f: O$ T, s* i) P& Z+ {
  323.     }* F0 b6 i5 v0 e; N, f
  324.   }4 ^1 b& E" X1 L5 f
  325.   return FALSE;
    $ M; x( p' S" N' Q
  326. }
    : Z( m/ P4 ]0 n* U. r* e# w! k
  327.   P# I- |# N7 b7 ~' p3 U9 ]
  328. void CRevAppApp::ClearAll(void)
    + F; y; G  B0 t5 A9 e
  329. {* G4 H3 }! I" G4 s" O
  330.   LPUPDATEFILE file;
    6 D+ k/ l( J6 P1 v2 F
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( t& I2 K0 h9 ^1 s

  332. 6 O# j: E) U* V) ]- g' l0 F+ |
  333.   if(UpdateLocal.size()), u0 }. F0 b6 T9 k* @. w
  334.   {
    ) |3 [: ?, |' T4 P
  335.     UpdateLocal.clear();
    ; ~& L  y9 v2 u/ F; K% u( W8 T
  336.   }
    , |( d& S5 o. r5 |+ P/ k3 u8 k
  337.   if(UpdateFile3.size()), M4 N" F* U/ a
  338.   {
    ! t2 X/ y7 i8 X8 H3 S
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 R. N0 F: u, Q
  340.     {2 X4 y9 p" k/ l7 V& Q9 m8 W
  341.       file=(*p).second;& u( [, C. L( h4 u( T
  342.       free(file);
    4 y' P6 S8 [9 r' l: G
  343.     }4 @, s9 i4 \4 `" J) a8 |
  344.     UpdateFile3.clear();
    . U# i- ^2 e5 w' k
  345.     UpdateList3.clear();$ A/ o9 a; Z8 }) z' u
  346.   }
    0 N7 h# V/ ]/ _" v1 i
  347.   if(UpdateFile2.size())
    8 e2 I$ B3 l8 G, d$ }
  348.   {
    4 t# Y8 O. ~4 x+ k3 F; B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). Z9 v9 {: y  j$ b- v; |
  350.     {3 ?. }2 D  |  X
  351.       file=(*p).second;1 v" a9 ~, e& W- S- ?
  352.       free(file);
    & M% X/ J' p4 R; E% k( N# Q3 k
  353.     }
    , @: W2 s0 o4 q( Q' q% c; g  F6 z
  354.     UpdateFile2.clear();
    6 [  l; [1 J" u3 H8 J. L: A
  355.     UpdateList2.clear();
    6 ]3 N! D% _4 S* Y0 ?2 d) }
  356.   }5 B/ `+ R! o$ E" k" k2 }! \
  357.   if(UpdateFile1.size())
    5 H% F6 y9 U0 Q* [% R1 y+ \8 v
  358.   {
    . W% G1 }+ R, A
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ! M% D8 C0 Q5 ^) d. h
  360.     {" W7 J7 z- W' K' j: W( I5 R& j( {2 F
  361.       file=(*p).second;2 h' Y& h4 x, ~! T
  362.       free(file);
    ( M* I4 x8 C  i! a7 I; p9 D, F
  363.     }& N! h9 `6 u" H) @
  364.     UpdateFile1.clear();; n( x1 T0 i! k& j
  365.     UpdateList1.clear();$ O4 A+ a9 }5 \7 D; t
  366.   }
    * V& C7 ^' |8 w: Y) r& Y2 v
  367. }  
    5 B# r& Y8 ^1 ?
  368.     C  S+ ]4 [% c& u* C& q* ~- f
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    2 a% A& H7 w4 l# e, g/ d
  370. {
    - S0 y& Z# c" a5 Q# v0 e
  371.   int c;. Z! O- G. H5 z
  372.   LPUPDATEFILE file1,file2;
    ' s- }6 H- q  j
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;/ Q: t2 O- N0 d" \/ |
  374.   std::list<CString>::iterator l;+ ?0 m7 z, }& j9 ^* a0 u3 [

  375. 1 W+ d" ?. o% C
  376.   UpdateLocal.clear();
    # j+ C. L' \7 A$ E* J8 r$ B
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);8 z  r5 G7 }' l
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);8 R% ]' q: g% z# H+ t
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    5 g4 B* \5 N; h3 z: J
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);* P, z  j0 q/ l) \, d  D
  381.   if(UpdateFile3.size())
    ! @( i* b1 o' q; A7 i
  382.   {% o! _( ]) x* Z4 ~# t+ `
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    1 Z4 ?& Z7 p$ l1 e' i
  384.     {
    / Q% I+ z2 R; v' n# A8 o
  385.       file2=(LPUPDATEFILE)(*i).second;
    2 l  m2 `* j. O3 V) l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). v) x' u- |; @! j5 C
  387.       {
      ]! s# D! d! |( I8 f+ B2 ~% X
  388.         file1=(LPUPDATEFILE)(*p).second;+ J8 J. }1 v4 k, ~% t# `+ q4 ?
  389.         file1->vers=file2->vers;
      h9 Q* g( ?6 P) `  l' @. q$ q
  390.       }- r- v9 c5 c& i( |4 x7 _
  391.       else; g6 s" K, m1 W# r9 t; y& J# E, |5 V
  392.       {
    / W& M; R8 G. v4 o4 ^
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / |) i$ h8 o) Z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));2 n: b' L( F( z8 [2 C; [! B! M
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    3 _1 y: k3 r/ v# `& ]8 f; T
  396.       }- e! j# b7 }; ?
  397.     }
    3 ~* G7 M& d+ ]$ j# R. q
  398.   }
    , h3 K* _3 u7 N8 Q/ }- e* @+ c
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)/ v2 f  w4 w6 H7 U5 |3 @) x- M( X
  400.   {
    $ i& g. R% g2 [7 u# |' h# T
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! e8 g" d% ]; i
  402.     {% f# @8 O" L% f5 `& U
  403.       file2=(LPUPDATEFILE)(*i).second;
    $ Q% l3 A! b0 X, W( \9 V! y
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! L9 G" C; q3 s! x6 v2 z/ ?
  405.       {
    0 @! F" Q4 [5 ~1 l- d
  406.         file1=(LPUPDATEFILE)(*p).second;9 _" r/ B$ H/ M
  407.         if(file1->vers!=file2->vers)
    % ]4 b; E' M4 n- f+ y1 S2 E
  408.         {0 J  Z# P( W' z5 h' S
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( ?( Y* o0 ]3 Y2 y
  410.           c++;4 K) r  H9 g4 w
  411.         }( S" q" ~5 p% X1 x
  412.       }" b2 ^0 V* a( u0 ^6 J7 Y- p( i
  413.       else0 z7 }5 ^* z, n  J
  414.       {% E& ~3 e- ~5 h  e- C. J
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' l* v( ]  M9 e# v) U
  416.         c++;" Q, ]/ m% F* o) N4 Z8 P7 @
  417.       }! ?& ^0 g- i3 f, V" d
  418.     }+ R: q8 p2 E. G; }( U0 r+ m: J
  419.   }
    $ \5 z: L+ \2 y3 @3 d$ r, Y5 m
  420.   unlink(".\\DownLoad\\update.txt");
    % c% ^5 ~' \7 U% w
  421.   if(UpdateLocal.size()) return TRUE;! A% Z( I$ w' E$ ~- s& O5 M
  422.   else                   return FALSE;6 _8 r# _% H9 R/ F
  423. }# ^" @3 l( Y! p$ t- C+ L0 f) l
  424. " [1 x$ ]' u, D) q, S( u
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"3 `/ M/ ?; O- U( e; k/ ~  U! B$ J% q- N
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn": n6 Y% E! M. R, r

  427. 4 R$ z3 H; V$ F4 Z# g8 _. L1 ?

  428. " K) Q$ \8 B# }- M

  429. 5 c5 F+ ?7 J0 M& H. K# B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)) f3 [; a+ Y, {- I- A0 D+ a$ z
  431. {- P$ E* _5 D8 o) [% Q) y4 o
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    / I) R3 f! A8 p. k
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 ?; B* k* E0 Q" o! o+ i% o# C+ u9 x
  434.   {. P- s" Q. m- ?) [4 y7 l' r
  435.     char szLanguage[50];
    7 a4 y+ i* b& u5 G+ O$ y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    7 _- V0 a* e: H  p/ C7 C1 `1 g
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 Q2 @) y3 t7 f/ {* _
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 v  R7 q4 u, f# _" L+ H
  439.     else                                   m_iLanguage=ENGLISH;
    ! Z8 p5 {! ]' f% T7 H
  440.     char szRegister[100];9 ?$ B* }' I. b) q0 X6 T8 H
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 J6 N# o( v  `8 J6 {
  442.     strRegsName=szRegister;
    0 h! |* f0 B  Z
  443.     char szPatchURL[100];6 o% P% C: ]4 H/ v2 L/ T
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");, q+ K% H4 g* ?  B( R3 A
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 ]4 H( L9 O! N% D' Z# [/ v
  446.   }
    6 D! u3 d8 [* @: E" {9 i, M4 f
  447.   else
    " S& S5 i& g7 ]& z. a; O
  448.   {
    % M  z! h6 I* U1 ^7 B% X
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& o  _5 P2 j7 l$ p9 z  R
  450.     strRegsName=DEFAULT_REG_URL;
    5 M! r: S3 _% H
  451.   }! x7 n- s9 I/ f8 i! K- z: @9 T2 ]/ ~$ a
  452.   if(GetFileAttributes("hosts.ini")!=-1)/ f0 d* I* w1 ]; v
  453.   {' V2 Z) K% E1 ?5 f! ^
  454.     char szIP[50];/ Z' X( n: i6 V$ ~2 q6 ~
  455.     char szDIR[300];( H2 G2 m. a9 p( T
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")), f+ b* N: N" P. M7 `# x! F
  457.     {( M- E7 q# Q( u2 d3 \) c
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    7 w; {8 K9 |3 g6 ]3 K
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    8 P1 _# w* m: ^8 w4 r! P+ Y; _
  460.       strHostName=szIP;
    - N  }" O* Q9 z  H. e6 H- E! c
  461.       strHostPath.Format("/%s",szDIR);, w8 a" G8 O: R* x3 k2 ^* t  T) s
  462.     }
    7 Q* K6 B7 L( v5 L
  463.     else
    3 f4 W& Z# V9 z. a, b% Q9 `- X
  464.     {: }& O  L1 g" x
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , |8 R; x5 b. z$ D+ D5 i7 Y
  466.       {7 L% X7 E2 d' ^
  467.         char szLanguage[50];
    * l6 L9 E$ Z) i; D3 ?( `3 V; Z8 U
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : M9 r; y# q6 E, |+ {
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) v- ^# ]1 I# J0 a  P
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;% b6 B: y6 z0 |) y/ g- A- Z% }
  471.         else                                   m_iLanguage=ENGLISH;. `" L/ a( _4 s3 I
  472.         char szRegister[100];
    * T: f2 V. G3 i9 O8 W. A
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 K- I/ Z, X* c7 F: F' M- c
  474.         strRegsName=szRegister;. [5 w1 s* e, q, O% I
  475.         char szPatchURL[100];
    2 `# I1 b2 ~( R! J8 l
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" S7 `1 l3 S) ~1 f: o
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      x' I9 s7 G# ]) ?: e0 x* F
  478.       }# e* h/ ^2 l, @% e4 R7 E/ e
  479.       else- K4 S7 R& f% K0 z, L5 r- s
  480.       {
    : L4 e! m4 B% q
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. c! Z+ [- j% ]4 D* {0 Q& L) a+ N
  482.         strRegsName=DEFAULT_REG_URL;' x; `' L- G9 q
  483.       }4 H9 E7 J5 n8 A6 }9 F
  484.     }( ^" }* E  e9 f
  485.   }
    2 Q* A8 l+ i$ P( _2 f) a
  486.   return true;! e" H! w% ?2 V' ^5 S1 R' D5 E: K8 a
  487. }* h2 W$ e1 T9 u% }: ?$ h

  488.   P; J% K) A# K$ ~# p
  489. #include ".\ZLib\unzip.h"' A0 C# Q" D, I$ U
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 j6 ]3 N2 b- `; _6 d0 ^- d( y2 D
  491. /////////////////////////////////////////////////////////////////////////////
    . k% t4 Z6 O+ k2 [  \& R8 m' K, {
  492. // CRevAppApp initialization5 `: n# m) k' a0 x" W
  493. ' F' p9 Y8 O% J4 o, H8 g& }
  494. BOOL CRevAppApp::InitInstance()
    / c* N) b4 `+ o2 M
  495. {
    7 {; {4 u  l% V" X! h
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ( E" R  N. }. K- N* i$ }) q. h
  497. 7 w8 i5 q9 S1 W
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    . W1 w6 _/ ]# x+ T, Y# S5 z0 c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" L3 i. K8 R% D! L
  500.   {
    ! }2 b( ~0 ~4 C$ n2 m" {0 e4 O
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    3 _7 Z+ ]$ l# H- S* D+ [3 M% O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& p- }, w( b  {. e) I2 Q3 _
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" N' d! E6 O4 D; L9 l
  504.     {& z. ?4 e  |" o  F" L5 [4 L
  505.       strcpy(szPath,szPathTarget);
    $ }. V' Z1 T6 p1 ]5 i" K) \7 g+ e
  506.       SetCurrentDirectory(szPath);
    4 O+ s# {: f( j# U; p- b
  507.     }$ y( j, q# v% z1 t& {( \0 z* `) M1 l
  508.   }
    $ l" S9 t. ]" m7 w. C' V# F
  509. #ifdef _DEBUG
    " @( J- N; E: d- S& i
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! e% t: D2 \9 u* ^# ]
  511. #else. S7 Z' t$ A# W
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), l% v( G, M: J) Z6 m7 I
  513. #endif
    . E' R1 O  v+ D& [
  514.   {
    8 i7 Z: m+ D1 T( k( c& G* o
  515.     char tempFileName[MAX_PATH];, k# @% K& d# F5 }# U
  516.     strcpy(tempFileName,szPathSource);! c3 R) X6 f- w9 v- F7 }* f$ T6 T
  517.     tempFileName[strlen(szPathSource)-12]=0;) ^# n2 X) B9 I- O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ! x, V8 I$ @+ N8 T2 A$ O
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    5 l6 T$ j3 K4 \
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    & l  X+ Z1 `8 C1 }8 N3 A! s. G
  521.     return TRUE;
    : h/ E" A: Q2 E! I, o
  522.   }
    # N( `9 i! A0 m  f
  523.   // Nuke 0118: Delete run.exe
    ( Q& f9 ~7 k& L' n4 p4 d! e
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );& h* y$ V9 W0 V
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");0 f8 S( j1 O0 c) m
  526.   if(!ReadCfgFile("Config.ini"))# I- l; V0 P# g- W# [6 @% X
  527.   {
    . [& b2 x' u7 S% S) ]
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 {+ l" m- j3 O! J$ ]8 Q
  529.     return TRUE;
    ( a% s7 \& i4 K* x" ^
  530.   }
    ( z# n0 X7 C3 p, \
  531.   HANDLE mutex;
    3 s6 n" p4 b! n' t' v
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    $ r$ B, i9 X4 ~
  533.   {
    8 ]3 X, H. N5 J6 V" ]9 }
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)4 E) j0 O9 ^  a! x) s
  535.     {7 s- ?  @' q6 a" y
  536.       CloseHandle(mutex);
    8 e' D' a  k* N3 G4 S# J
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    5 k0 \; |8 x' R/ \9 I
  538.       return TRUE;
    2 r2 f- b! F: Y  P8 j
  539.     }, K5 X% {1 t& |
  540.   }  
    0 ~4 e# L+ U& k+ v. B
  541.   CloseHandle(mutex);
    " Y' t; T9 U. }, `; T6 I

  542. 0 s/ F/ m9 G6 y3 v- d! o" h
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);  B# l; ^/ t: w  E5 q1 Z3 K, \- B
  544. - U; E9 q8 w1 l8 D( X0 |+ H
  545.         AfxEnableControlContainer();- J" ?5 B6 P, q9 o
  546. 9 }, `, e: U  v; S
  547.   bCanUpdate=FALSE;% S) o: ^- B# u
  548.   dwStartUpSteps=1;
    $ R8 h3 S  d) z( O% A4 H7 c5 E
  549.   dwProgramState=AP_NOTHING;; m& _6 m- [) v& ]

  550. ( Q; P# Q$ w) A! L) R
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    * V5 z* Z& V; I8 ^" }9 ?$ j# W

  552. ( e( \. k# {1 n- g  m  y
  553.         // Standard initialization- G' N  [  x/ h, Z$ p
  554.         // If you are not using these features and wish to reduce the size! g2 v6 ^; L3 y
  555.         //  of your final executable, you should remove from the following
    ; h2 w! i9 H) m! p
  556.         //  the specific initialization routines you do not need.
    ' L! _! {3 P2 I6 W" s

  557. 9 M+ U1 I7 l- @$ r
  558. #ifdef _AFXDLL6 ?, V# U/ O! w; A% T5 \$ n7 [
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL- d; h1 R- M& l$ v: v' `2 T
  560. #else$ ]  C: k! W3 K" E, \6 u
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically! [+ ]7 ^/ E. S% Z" f& _
  562. #endif
    2 {+ j4 b. _! R' Q$ q/ I6 A) R; W

  563. 2 Z' f, c; ^# z! v# P8 H. V
  564.   dlg=new CRevAppDlg;
    7 }6 h6 N# a/ s0 q1 n' t" L
  565.   dlg->Create(IDD_REVAPP_DIALOG);. C) K8 {; x3 {! d1 M( u9 f9 ~
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    . Y3 x& ^, z/ L7 |* B6 C
  567.   m_pMainWnd=dlg;- Q9 B& H/ R: o# x/ C8 i
  568. $ N+ Z8 X" y8 N; p% F& E  W. I" F
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ n1 C" b1 N7 A" i; E& K) d0 A, B

  570. : E; J$ N+ [) \& _+ K& D4 z, Z
  571. //  GdiplusStartupInput gdiplusStartupInput;. b9 y, [# H' D; I3 t
  572. //  ULONG_PTR gdiplusToken;
    % x0 _3 h, L, {( }6 V6 A( C6 P
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);! [+ Z9 E$ h  F! M. Y* q

  574. 1 W& V$ o8 d( X8 p2 c) H$ d
  575. //        CRevAppDlg dlg;8 [& Z) B# k8 h2 `& x" M$ Y
  576. //        int nResponse = dlg.DoModal();
    8 F& U5 J  k5 Y8 Q& d% Y
  577. //        if (nResponse == IDOK)4 f2 f5 P0 c  ~4 ~2 X6 i% \1 S
  578. //        {# s- M9 d( n' F8 s
  579. //                // TODO: Place code here to handle when the dialog is
    4 v, ]& ?1 _5 |5 }5 h7 E1 c
  580. //                //  dismissed with OK
      I' Z2 _1 Y5 l* R
  581. //        }/ X. n# S4 }3 {
  582. //        else if (nResponse == IDCANCEL)* m3 i1 L( K% U
  583. //        {
    $ ~5 v5 _2 ^0 n3 J2 D1 J
  584. //                // TODO: Place code here to handle when the dialog is
    0 ~( V) ]% {2 S3 h
  585. //                //  dismissed with Cancel1 Y( n0 b  j4 q/ \+ ?
  586. //        }
    % Z7 w2 O+ N6 J

  587. $ w9 s8 ^, Z: u% V: J
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    : V. }7 A/ }+ v+ Y# z" |7 o
  589.         //  application, rather than start the application's message pump.' A7 \; I; c2 u0 V/ {
  590.         return TRUE;
    # e: f7 o0 H+ S3 V
  591. }7 J6 H/ s6 W  j$ W
  592. 0 w5 @: ?0 Q- t: z- g! o, C
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
      j! n  B, t$ w4 B5 X, J( H
  594. {
    $ l; f6 E& w# V( N+ ?
  595.   int i;9 N$ u9 q0 {5 |* K' v
  596.   char *szRet;; S9 G) W. ?7 i" L/ m
  597. ! E8 S, H1 S. G3 G! i
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ) B. p8 ~. ~. c. ]
  599.   if(sztoken)
    ) o# p+ q% d: p3 z# }4 V* l
  600.   {( F: f- o5 j9 L4 s5 j
  601.     szRet=&sztoken[itoken];. q" A, x" T: D2 ^% W- }
  602.     while(sztoken[itoken]), t6 a$ Z' |( u' w
  603.     {6 R) ^' o# t& h/ c9 l' P6 X. ~
  604.       for(i=0;i<(int)strlen(token);i++)% j/ w+ Y: p5 B0 ]8 k
  605.       {
    & r9 f1 x, q( E/ O8 n
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])' N; m" N  b* |* O" ?+ g$ B
  607.         {% |/ a2 d! _% [9 J% o& k. V
  608.           sztoken[itoken++]=0;
    " D$ {# D7 I5 {3 d
  609.           sztoken[itoken++]=0;
    ; P0 t% S! g  D) X! z' y' C- E
  610.           return szRet;
    : m' F1 S$ a. r$ h0 K/ _6 V
  611.         }
    / P) c4 b( T  a) x; `
  612.       }( T0 V+ u. w7 R8 y. {, J7 e1 x
  613.       itoken++;+ W, O! D% O3 Q; \, a1 j2 C
  614.     }- X2 }- W$ {' t- o
  615.   }* z: O* o+ E- I6 D8 L8 v$ w
  616.   return NULL;" o; B- P' s- k# o( @
  617. }
    * x9 R' C4 |# u- s6 O1 O

  618. 2 R2 R# O* P1 B! `& u
  619. void ProcessProc(long Total,long Current)
    / h5 U8 b. Q( t- j" ^5 D0 S. n
  620. {/ J4 V- b2 W  v) k
  621.         MSG msg;) i! |+ t' T. n( [' G" L* m. G
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);9 j' o( U( x# p1 h! G6 |+ E; I
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    8 Q, n. d- E3 X( x+ W# x
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))- g  n9 Z( n+ i( c! m4 Q
  625.         {
    & q% J# s/ D) w1 K
  626.                 if(!GetMessage(&msg,NULL,0,0))
    3 g6 Y# [# b2 ~: L+ ^  ~2 r0 X! w
  627.                 {! p( F7 X: ]% x. E* z
  628.                         return;
    ; J1 T, k, O4 _* B$ O9 P
  629.                 }
    4 U3 f7 E0 d' v/ V+ H7 D8 N4 d
  630.                 TranslateMessage(&msg);8 t. T6 L  c1 I- J# U1 h7 [8 L+ U
  631.                 DispatchMessage(&msg);
    ( E+ n0 `) B9 g, y
  632.         }       
    7 @8 C$ P; s7 w- W
  633. }
    . ]9 Z$ S  Q0 Y* b; o, h/ `/ c
  634. 0 N9 [" t& K. x
  635. BOOL bFirstChar=TRUE;
    4 w( i& g& q4 V) ~; @
  636. : d' p6 {1 Y6 [$ S
  637. BOOL CRevAppApp::OnIdle(LONG lCount), ?8 H6 H6 o/ d4 b- w: b4 d( W
  638. {) l+ {8 Z8 O, s& S8 b1 V4 m
  639.         // TODO: Add your specialized code here and/or call the base class
    $ Q' z5 g" H) R/ c* @: m) L
  640.   switch(dwProgramState). {0 r9 Z: L$ a3 Y- Y# m
  641.   {* z' r$ ?# N" z  U; {, ?# h
  642.   case AP_NOTHING:
    0 a, I/ ?7 [( \9 C
  643.     switch(dwStartUpSteps)
    ! A- `% y, X- z" Z9 _
  644.     {' J9 y0 K' |/ X$ U
  645.     case 1:! j7 |6 c: z, V* d8 B: D) k
  646.       {( p/ y7 A4 {' s
  647.         int i;3 W* [$ f6 E! ~% Q6 K
  648.         CDC *pCDC=dlg->GetDC();7 V. X% o, Q1 u4 T! I
  649.         HDC hdcwnd=pCDC->m_hDC;0 X4 f4 Z# w1 w
  650. //        Graphics graphics(hdcwnd);
    2 h3 X  R& ^1 A) U
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    5 Z2 C$ w  h+ G  Y
  652. //        INT iWidth=bitmap.GetWidth();
    - u8 k' c% v8 H8 P; U
  653. //        INT iHeight=bitmap.GetHeight();/ g) ^0 r" L+ I4 d5 z. J5 p
  654. //        Color color,colorTemp;
    ) N# k, p8 Y) a# E! t
  655. //        for(INT iRow=0;iRow<iHeight;iRow++); H% w  o- ^. ?; o
  656. //        {: s, l! l4 R( A6 N1 ^) b. ?7 S
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)2 k5 h7 l3 @0 x4 N4 J' i
  658. //          {
    8 i5 C' d8 o/ s: b+ r
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    & b  U+ @9 z0 r5 J& ~
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 x- m- }) x! o/ k+ e
  661. //              (BYTE)(255*iColumn/iWidth),1 {3 j1 v5 @. z  i' C9 b
  662. //              color.GetRed(),, M% I/ R2 c4 R) ]3 T
  663. //              color.GetGreen(),
    6 x$ S1 d3 l' r& ]$ w  U) }
  664. //              color.GetBlue()));$ g% G0 s: H" ~2 t* ]" l1 o- x
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);/ z$ k6 {5 ~3 e/ G' r
  666. //          }
    6 h4 g+ Y* l$ o) i5 i# \2 y! L# y
  667. //        }
    2 a3 L9 n) C5 d2 Z0 R! [$ S5 ~
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + W$ k7 s3 I% @8 A2 J0 I/ `) ^$ [! H
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& }3 B5 ^9 |$ n. c2 ]
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");# Z, X$ w% r5 g' q6 s) S4 U' h
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( q; a" E9 g6 q6 w2 L) g3 r
  672.         for(i=0;i<240;i+=8)
    2 n2 q7 u) S3 k! \6 J- `# N3 @
  673.         {0 b% [- S/ |6 r  L
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" D+ l1 W/ s$ F  F# Y5 M
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- W, Z0 K, E$ C) N# b7 ]$ C
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ l' j/ w0 @" x1 X8 m
  677.           Sleep(33);  i+ r! \/ r; {( ]
  678.         }  W) Q8 P7 E" z: z" _1 z3 W% O) }
  679.         Sleep(1000);
    9 b8 z/ T# o6 q/ C9 N; W
  680.         for(i=240;i>0;i-=8)3 a/ S8 M, y3 s7 ^7 s
  681.         {
    4 e' @" d1 A+ r* w
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : [6 D$ ]( O/ k+ ]( C
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 W  X# G$ P1 W+ `! \# N6 A
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " T& y. Y  W/ ~) h2 n/ o. p6 I
  685.           Sleep(33);
    ! }+ n4 a$ N/ R& c* [3 f# Y$ ?9 x- _8 b
  686.         }
    , X, `* _. }# Y/ ~2 S
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);9 {  S: P6 U5 i
  688.         dlg->ReleaseDC(pCDC);- L' x+ t: x/ G# p+ h5 g
  689.         DeleteDC(hdctar);. g0 `- L0 O% p" ^+ B2 j6 ^3 m, P
  690.         DeleteDC(hdcsrc);6 S! p# v) `( v6 d
  691.         DeleteDC(hdcorg);5 ~) u- i; I- P; J6 ?" Y* F& o
  692.       }
    " Q6 k* ^& _! [- p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ) ^$ M3 |/ u, C3 Q0 F# b
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    6 u0 W. p# f* ~) Y! b
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    % h  H% h+ ?+ K* ]2 W
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 c% D) ^% E9 u# ?$ ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 w$ D$ c# D/ y* ?; M. v5 J
  698.       if(!Dn.Connected())8 p+ b; x. t  A+ ?2 f5 |2 m
  699.       {
    3 c6 Q9 w0 S2 x! u
  700.         dwTotalFiles=1;5 Q. d0 A5 [# i* T( l6 f4 c# j
  701.         dwDownLoaded=0;
    . `4 S! _, y. ?: E/ H
  702.         bSilentStep=TRUE;
    " j" c% v3 X; F$ u, C$ Q
  703.         bCompressed=FALSE;
    + ]+ @0 z+ }8 Q0 Y4 e7 R  ?  B9 \
  704.         strExtLocal.Empty();3 M- L$ W6 }# z8 g  E5 X' x
  705.         strFullName="readme.txt";" _# ~+ a  X. R$ T  s8 K3 u
  706.         dwProgramState=AP_CONNECT;
    / w6 g! |, h: u' W7 x  X( {
  707.       }
    " z9 H. P' R2 \
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    2 F* C8 Z* n( s6 |" k% |" `
  709.       dwStartUpSteps=2;
    0 I0 m6 n' F& D
  710.       break;
    6 R7 \7 y0 ~1 _  c9 `+ ]' f7 n- d. X
  711.     case 2:
    9 y2 R- Y) ]/ s# x" v
  712.       {
    + U& w3 }3 l7 Z& R
  713.         int iEOF;
    / P9 ^* {( g3 b6 e" q+ K
  714.         FILE *fp;0 V; _/ T1 v- t
  715.         char szString[512];
    4 u$ D; r% b5 x! ]4 R/ L# ^( q  U
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");7 n+ {9 u0 n% b: V
  717.         if(fp)
    ( T4 ], y) V8 z* w
  718.         {" d# L5 R9 d* |0 G2 ?: t- Y  |
  719.           do1 i; @4 R0 R# ?) e& l4 k( ?
  720.           {
    $ C/ B" ~7 G1 a/ d) I- W0 U
  721.             iEOF=fscanf(fp,"%s",szString);0 d& y1 b" N# j. f
  722.             if(strlen(szString))
    7 U- L& D, O7 m1 B" O
  723.             {
    * d( x9 s4 R3 ^2 ]4 u! x
  724.               if(bFirstChar)
    4 K% w' e0 I" r1 R: P% l. d* p$ p
  725.               {. |: g9 n2 t; L2 ?
  726.                 bFirstChar=FALSE;% B; Q$ D" n$ ?8 c' Q, e% j
  727.                 bConnectIsBig5=FALSE;+ b6 K1 d; @  w6 V* v; u4 T) z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;: W/ Y6 [% F2 K7 k/ v
  729.               }" t' b9 j2 H5 S/ B: X3 |! ?
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    # y- U2 M# {7 j9 k5 V: Q( R
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));8 ?% [8 B! K# P" h' t, r, f' M- b
  732.               dlg->m_ListText.AddString(szString);
    3 f: T! w$ t2 x) Q4 D
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 C1 W# C" }0 [2 y& D
  734.               *szString=0;
    , i; y3 i1 e7 F4 ^, E' |
  735.             }! n! H. F% ~0 b0 l0 S& n8 C& ?
  736.           } while(iEOF!=EOF);7 b' J% s" L7 a- |
  737.           fclose(fp);# o4 l) f! f' G) u* U$ l! v
  738.           unlink(".\\DownLoad\\readme.txt");& k3 e! A/ r1 _  B8 E
  739.           dwStartUpSteps=3;8 w4 u' W( g* }% ?3 }, Q& Q2 T
  740.         }) M. }' [: w! @4 S5 N2 n/ `
  741.       }
    8 }- y9 y! a- h. Z* _
  742.       break;
    $ I. l6 q! u$ X2 C! [/ M
  743.     case 3:$ V, J9 A  v1 Y! k2 T* f* P6 A
  744.       if(!Dn.Connected())
    8 b& l: \4 o0 p; b* t* x; {8 M
  745.       {" F# B; p# E: |0 w- {  N' l
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);+ J9 x+ L4 J% \
  747.         dwTotalFiles=1;
    : F( _) s* C7 k5 b
  748.         dwDownLoaded=0;5 X- C. W5 B& S
  749.         bSilentStep=TRUE;" g( X0 o3 w! P- F- x! d3 O) _
  750.         bCompressed=FALSE;
    : q! f; `! l! \3 v, l. ?
  751.         strExtLocal.Empty();
    ' I" U4 g- {. B  k, H! h9 u( z* D: l
  752.         strFullName="checkversion.txt";
    , b' m5 }4 R) m( q5 m. w
  753.         dwProgramState=AP_CONNECT;3 O* V: _1 M4 P" v$ j6 X
  754.       }
    ! B. e( q, M2 s+ P  S
  755.       dwStartUpSteps=4;
      v) r$ I' y1 Z# ]% k( x* x7 N
  756.       break;
    1 q% v7 x% N8 ~, d  p: V; |
  757.     case 4:
    ' d* x0 g4 }# v; ^
  758.       {( q% E& L4 \; ~  K6 }
  759.         FILE *fp;! O+ S1 m2 `' T  k9 I& c
  760.         char szString1[128];
    5 u0 f: v9 K/ K
  761.         char szString2[128];$ D6 P) |  e. c" ^4 y4 i- B
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");0 `9 [7 D6 M. A
  763.         if(fp)' Z& g7 H+ _& \  X- o+ @3 `% F( w
  764.         {
    * G* K* `, ?7 G7 N6 I
  765.           fscanf(fp,"%s",szString1);/ r# w5 R! v) s
  766.           fclose(fp);/ l# f+ a0 }" u" c' l6 I
  767.           fCheckVersion=atof(szString1);
    6 z1 h1 G7 ^; s  V& |: e+ d* ~
  768.           fp=fopen(".\\checkversion.dat","r");
    ; r  o& E! P: A' `4 p; y
  769.           if(fp)
    3 k, T4 `9 l/ y$ G7 Q. D. `+ k$ Y
  770.           {
    & v8 B( u7 |* r$ n
  771.             fscanf(fp,"%s",szString2);7 `5 n( O, @2 X/ K4 J7 O
  772.             fclose(fp);5 \5 f! g! b: F
  773.             if(atof(szString1)!=atof(szString2))
    2 x1 t% N; ]6 E5 @5 N
  774.             {8 W- J, G" _5 c& n( A8 g, g* G5 x
  775.               if(!Dn.Connected())) p. A6 o( w, ]. \& T: ?
  776.               {
    # t4 J8 z2 G# a
  777.                 bFirstUpdate=TRUE;  N6 n% V% \4 X% K) C$ |
  778.                 dwTotalFiles=1;5 n" e* O, ^" A; ~' |* T9 q
  779.                 dwDownLoaded=0;/ Y3 O( S8 Z* {# w. A( A0 _  ~
  780.                 bSilentStep=FALSE;' z5 Z' N( g4 e" u* Q8 J* Z
  781.                 bCompressed=TRUE;# G- i+ x- n; |# o. K' q/ M* {
  782.                 strExtLocal=".\\DownLoad\";. v4 e' P" X+ o9 c" E5 }
  783.                 strFullName="update.txt";" S) [' U4 z" {0 J' b( z
  784.                 dwProgramState=AP_CONNECT;
    1 }7 w( B# x$ d
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 j9 p. b" ^) J/ t4 \; v4 [: F  h
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 U9 a. s8 j; W8 F/ l! @! C+ H
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 L) m: O8 E( v% H5 B

  788. ! J1 G- K2 z( D1 t5 ]- c
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + \, I# Z# h4 h% P
  790.                 unlink(".\\DownLoad\\checkversion.txt");! L  j, m) l) [4 \  F
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    : U# d0 \) r% j4 [; r6 P
  792.                 {
    * L+ m- U6 R5 U" g' B
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    . z- o* D: M$ r; {4 G, u" P
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* l$ @# w& p5 c
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    + r/ }# x, {2 e' A0 R7 _* R; S
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- n0 `/ q* J" m: l

  797. - O1 |2 S4 h9 p+ `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : b: q2 Z4 V/ t) Y# o: B4 U
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 n1 s1 w$ m& e3 `* R
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ R5 I- N& j/ e! N, U
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 R# \: @, `" s$ {1 g9 H
  802.                 }
    ( f  Y0 o$ X3 P; w+ y
  803.                 dwStartUpSteps=5;
    + z( C* W! c) B) l
  804.               }
    ! l- d( s  Z. [6 ~
  805.             }
    ; t/ m3 |! e# ?, H+ D9 F+ M
  806.             else" l5 C8 o: W1 y0 V  ^
  807.             {) N1 p- j7 @& h  }" S4 t- b" K
  808.               unlink(".\\DownLoad\\checkversion.txt");
    3 a8 W; z+ U/ q. a* }8 }
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + e- n! u! F* O6 L8 Q3 e
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");: G( R' _8 m% ^% S+ C! R6 q1 m6 F) H
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");9 J; K2 ]& m, V) A! Z  l8 A' b* I( M

  812. 0 J, }; k; I5 |7 `& j" b
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 Y2 k* |( r4 T4 c
  814.               dwStartUpSteps=99;
    % Z4 t7 |" R' ~. c$ D9 F( c! P9 h- l5 Q
  815.               bFinishUpdated=TRUE;/ o) P7 o" c: ^7 `% }% Y) m$ M
  816.               bCanUpdate=TRUE;
    8 J9 I+ r% ~9 U  l% N6 c
  817.             }( U* @1 a  D' ^+ B
  818.           }
    " [' a' P2 N/ R) a1 R; p2 a
  819.           else- z$ v* G1 k/ K+ c  N* r
  820.           {2 k5 ^8 k, O6 v  q+ W& U+ f
  821.             if(!Dn.Connected())7 r$ a) |) C" C/ D7 q; @2 v5 z
  822.             {. T# {- j* c1 R0 z+ {2 w
  823.               bFirstUpdate=TRUE;2 y# ?' K9 Q, Y7 s- G  r1 o
  824.               dwTotalFiles=1;! n5 G# J) Q7 V0 G; P4 W2 X: L
  825.               dwDownLoaded=0;) m. l& r/ }/ a
  826.               bSilentStep=FALSE;
    : M1 ~4 u- t& w, Z: I6 n3 u  ~' {
  827.               bCompressed=TRUE;
    ; p7 h* {+ P' A: V# |
  828.               strExtLocal=".\\DownLoad\";- f1 Q( @4 |3 i/ T
  829.               strFullName="update.txt";
    7 S: w. i( e& A$ o; L2 E
  830.               dwProgramState=AP_CONNECT;
    5 T, J: W/ [. X! C
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; f4 y$ i1 l6 s& r+ \, ~; C, l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , r$ }  k' ?- h$ K: _9 L
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");1 O5 w+ |8 M3 q: T& f! j8 B
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 v  N% e5 q2 E" ~
  835.               unlink(".\\DownLoad\\checkversion.txt");6 d: g& t! D  g7 X* m
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)  I# W3 s5 `- h/ `) W
  837.               {
      p+ X) C0 U. a% s
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    * _4 S! ~  [# u* U$ d
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ( x* L! E8 C: j7 B- l& I
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    / ~' w0 \5 ]$ x
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' k' C1 u" \  [" z0 I3 O  ^; k/ `
  842.                 2 n! v+ {* s4 D" P' c
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! O4 N# t1 `# e  l5 Q  L4 z: L
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 A7 v5 J+ Q( _: q; Q
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");+ t$ v  S0 T2 p5 X  Y
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , {, b) n3 C5 S( i7 g4 i8 ]+ R
  847.               }, j9 a) T* K' Y  ^$ f% O
  848.               dwStartUpSteps=5;
    ( g2 }6 t5 W7 Z' m; R
  849.             }3 I# A8 a* K& s& e5 a
  850.           }# q4 j8 C- M- F" T' z% n
  851.         }* W) M( N0 w2 r
  852.         else8 n; T2 @5 o; t' w3 m/ \2 K+ F
  853.         {
    3 S' U$ V) j7 h6 c" c9 v
  854.           dwStartUpSteps=3;  D0 `. A+ Y  E1 w, |
  855.         }
    ) m& ]8 D0 F# l0 m( D( I3 ]3 j
  856.       }, c0 p$ U. t+ V2 _: ^, g+ z
  857.       break;( T2 L6 I" w1 j
  858.     case 5:! P; X2 O+ `2 o  y4 P$ R$ N3 E5 e
  859.       {6 ~3 @1 o4 H8 F4 l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    2 N( Q6 ?, }7 t6 I
  861.         {
    1 S9 T1 ?4 ~  E' j( _+ \
  862.           int opt_overwrite=1;4 g9 V4 b" V; y+ m2 {, S
  863.           int opt_do_extract_withoutpath=0;
    ' |2 x# t8 B1 w# Y7 V
  864.           unzFile uf=NULL;3 l# s( O" _, P2 u* l

  865. 2 g: p+ n. q( t6 d4 j
  866.           uf=unzOpen("Wsa.zip");8 @& h) r7 `3 u" T! ^
  867.           if(uf)& y$ ?6 W, s: F3 G* E& \& `
  868.           {6 Q2 m1 j) @! k3 Z* |
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    6 M$ f: Y9 C3 M; l" x6 f
  870.             unzClose(uf);
    : y* j8 `( r5 }) D; X; b. t
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 D. h* j. n) l: r1 M
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ) p& a. Y! K3 r- Q% d3 F
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");1 B0 K1 p% X+ R! M
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' ~. N$ K% K3 c
  875.           }  G# r4 s5 t+ B% b9 k, ?
  876.           DeleteFile("Wsa.zip" );
    % a, X3 O4 G1 w; }
  877.         }" ^, C8 m) c- ~! I. K& h

  878. # z, L, n) w" D
  879.         if(CheckLocalVersion())
    % ?; x& o2 ]( _6 X
  880.         {
    , k5 I5 g, K6 }/ K1 t& D
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");$ \# g; |/ k: l0 X& z+ P: I5 ^
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");. b$ u" i3 C! N* k0 P# c
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    , U& C8 y4 H% X, |# Q2 d
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. G; c2 U% q) e$ Z7 r
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    4 X# p6 f" a* d3 b
  886.           dwStartUpSteps=99;* v; _/ V9 b" t
  887.         }
    : S$ p9 F5 v+ t9 g
  888.         else
    , k1 G, S2 X9 Q" f. C, O
  889.         {& \6 G8 P- }3 q7 s% }# q& P
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    7 B% ?7 q% S. L, N' ~2 v# w
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    6 B: O& }8 k# {4 ~6 ]& J9 R
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");# {7 T; o! X6 V. C

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

( E7 M: a! @2 u% i3 _/ a5 N, G9 e% f4 J, E# I7 q( U2 {

評分

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