找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
0 A( }5 U. ~, ~
  1. / RevApp.cpp : Defines the class behaviors for the application.
    9 H2 K3 i/ \  j" |
  2. //9 {- k, ^& o5 m5 T! ^4 s( P

  3. ! ], V- M$ v# Y- o+ Y
  4. #include "stdafx.h"1 D  v9 ~% [( ]! W% I  }. g+ d( d

  5. 9 J9 c3 T9 ^5 k4 x
  6. //#define UNICODE# `( b8 L, [5 f4 G/ ]
  7. //#include <gdiplus.h>! t' M! g9 K$ \  K  H4 q0 y, N
  8. //using namespace Gdiplus;
    1 C5 L$ G' \2 Z6 j

  9. " `9 p/ f; J7 Q& L' r1 f
  10. #include "RevApp.h"& X& s3 {1 E% \6 Z& W/ f
  11. #include "RevAppDlg.h": O2 V) l) w/ g5 p- j

  12. ( X. d  u- V9 G! ~# H
  13. #pragma warning(disable:4786)
    2 D- u7 [, `1 s! N6 |3 A0 J
  14. #include <map>
    & F" X$ ]6 Y+ W6 s
  15. #include <list>+ a/ E6 \! ^& ^  }1 h
  16. #include <direct.h>
    * B: N' |9 R6 h2 G( O' T8 }) U

  17. 1 f$ U& X) D5 {2 v, d& a* i6 U
  18. #ifdef _DEBUG  ?" U7 f: u0 ?( i! J
  19. #define new DEBUG_NEW
    + H/ H% u3 l; r1 f# O
  20. #undef THIS_FILE
    1 \  B: v  j0 W( R/ F3 l! ?0 k
  21. static char THIS_FILE[] = __FILE__;' b- q0 v1 D6 q
  22. #endif
    ! c: e1 z% ^2 X  r) V# v& J2 K
  23. #include "SkinResDef.h"
    # L" @9 S8 y. n. h+ a
  24. #include "ChangeBG.h"9 O4 S$ C2 _, C2 @. S
  25. #include "AFXINET.H"& n/ q" {. }9 K" x) a- M
  26. 4 g% X  N! d- A. U
  27. #define TRADITIONAL_CHINESE 0
    1 G& q( l! V5 O9 K
  28. #define SIMPLIFY_CHINESE 1( @9 U3 G% y' u' x" N0 F$ w5 l
  29. #define ENGLISH 2$ N1 b+ O0 w. U: k1 [- G' g* @; i& z
  30. int m_iLanguage = ENGLISH;6 D0 U/ g  m# t
  31. /////////////////////////////////////////////////////////////////////////////
    . H1 P, M; d: ~, Z. }
  32. // CRevAppApp% v# E* K6 Y1 X! x
  33. ) ?% s9 M7 n% k
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)( o1 d! h5 W* |; z2 V
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    4 R/ R0 t& V2 p/ [  s" |* }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    " \3 _# u$ G, Z, B1 v' W6 v
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    , F( t% |* ^6 @+ Z8 N4 `: j
  38.         //}}AFX_MSG
    - p) {' C8 `0 J4 D, h0 A; ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)1 Q* [& t, H- |$ M9 j5 T
  40. END_MESSAGE_MAP()
    ' [3 o7 w/ W0 b# m" v

  41. 1 w) k8 I5 R* |+ }! z
  42. /////////////////////////////////////////////////////////////////////////////
    3 j3 N) ]# W: ]  M2 X% l
  43. // CRevAppApp construction
    % N( x3 [4 v5 D
  44. & Q- q( I! J% F8 V$ `
  45. CRevAppApp::CRevAppApp()
    9 G$ b: E/ Z5 {* s( [
  46. {9 r- q# [" M+ \+ V
  47.         // TODO: add construction code here," X8 O/ o: f: a2 f6 u
  48.         // Place all significant initialization in InitInstance
    . `# ^. V, i) p0 c: W
  49.   bDisplayIsBig5=FALSE;
    2 x9 |1 Y1 I, k
  50.   bRestartUpdater=FALSE;7 l$ Y% S! s5 `) U+ n( Z. C
  51.   bFinishUpdated=FALSE;: j/ V4 G$ `. T+ A! ^) t
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;0 F- [; [6 v9 y! N
  53.   InitChangeDataBig52GBKS();
    " ~5 Q7 }/ Z2 M/ K; a/ u: R
  54.   InitChangeDataGBKS2Big5();
    % X3 m! [3 v5 q: j0 u) C
  55.         //
    5 |1 b0 H/ R4 S0 C
  56.         bClickRunExe = FALSE;
    . b) D' c7 V1 s+ V  e7 W
  57.         //
    $ ^; S8 U2 E, {% M; o6 H; V4 ^
  58. }# `# w* g5 p& w0 m( ^3 K0 X

  59. % g2 n7 D4 U' w/ K1 n; `; }
  60. CRevAppApp::~CRevAppApp()
    / c8 R% g2 |5 G; `
  61. {
    + N9 `+ ~2 \6 T! k
  62.         // TODO: add construction code here,
    , o6 ^# H# d9 F. F: C# |; D
  63.         // Place all significant initialization in InitInstance2 I- h2 U( h$ N* c+ Y
  64.   EndChangeData();
      [: L5 q' M6 [  j7 b7 e
  65. }& r+ Q7 G5 Q6 B

  66. + S  |& `* s8 p+ L2 y" ~7 L
  67. /////////////////////////////////////////////////////////////////////////////* m/ X. V. i5 F+ O% t  `
  68. // The one and only CRevAppApp object9 D7 I; [5 B' D* G$ B4 o  i
  69. # r+ D0 n  G, e
  70. CRevAppApp theApp;% I; N7 O# I3 ]5 o: I- r) ^- [! d
  71. 0 _/ n1 _6 M7 m, T2 n2 c
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    0 x6 U6 o' i% ?* `- X
  73. {
    ! H0 ^. i+ V$ R. q" t
  74.   int iEOF=0;
    8 ]0 y8 k- d# G8 J& O6 v; M
  75.   char szTempName[MAX_PATH];9 Q1 r# v) U- H  p
  76.   *szFileName=0;
    6 b& z# \; L9 o1 m8 W
  77.   iEOF=fscanf(fp,"%s",szTempName);7 Z7 U, c! l; z! p
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    9 a: m( Z6 |% a' C6 Q; q
  79.   {$ i( T2 B& M. O0 Z2 B9 I+ \
  80.     strcpy(szFileName,&szTempName[1]);$ a) @1 ^7 Q; L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ' Z' a3 _# d4 D7 z% u5 t
  82.     {
    ; M* B& L$ \6 o
  83.       iEOF=fscanf(fp,"%s",szTempName);
    4 q. a4 W, o% L& G6 e" G0 h
  84.       strcat(szFileName," ");2 A# }3 I) D2 q3 Y; D- u% _
  85.       strcat(szFileName,szTempName);
    % n2 }! @% B8 @" ~/ [4 h; G
  86.     }) I+ i9 X0 z5 z  B
  87.     if(strlen(szFileName)>=1)
    2 T2 x  }8 B& d& M8 B0 ]
  88.     {  G) s0 }, N% i
  89.       szFileName[strlen(szFileName)-1]=0;) a0 |4 v! X( c3 B( @
  90.     }
    % w7 u/ \7 x. i. C! X/ |
  91.   }
    1 d3 b! z7 {  c1 M8 M
  92.   return szFileName;
    ( _) H* U- f3 |9 b, M+ U
  93. }' s% M/ P9 W# {1 A) P
  94. , r0 V& N' G9 U( c0 C) r
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    # H3 h# K' j/ ~( L% |9 n/ J
  96. {6 a4 t! u6 c4 c; \6 m% G. F
  97.   FILE *fp;* h, K1 T8 U8 ]3 x/ K7 A3 U
  98.   char *key=NULL;
    : [( e8 K+ K3 q9 v( S% y; L
  99.   char version[MAX_PATH];
    6 h; G1 n, D/ E0 g
  100.   LPUPDATEFILE file,olds;
    : X8 m% R+ `' s( s, }! M1 i
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    . z' D* v% v' Z: x/ e" V

  102. 4 u( P$ i; T" R' J& k; P
  103.   UpdateList.clear();
    . j; Z' |7 ?; Y4 y
  104.   UpdateFile.clear();
    , x) ]% B9 r& v# n6 |
  105.   if(GetFileAttributes(filename)==-1) return false;4 m$ B& F& v5 y( G
  106.   if(!(fp=fopen(filename,"r"))) return false;5 b& A* \; e+ D  ]/ \  o
  107.   fscanf(fp,"%s",version);
    1 y8 J5 M# @' z- `
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    8 v+ @! g3 s/ m* ?. v+ h6 O
  109.   while(fscanf(fp,"%s",version)!=EOF)  M5 S5 L* N2 f" J" j" I- Y
  110.   {& j( D5 ?$ }- Y$ q' K% Y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! m& t! Q) \0 I3 l5 v0 ^( O, K; M
  112.     fscanf(fp,"%s",file->path);1 M; Y8 k% Z; }. i- e& }* ]
  113.     ReadFileNames(fp,file->file);
    9 d4 o6 j9 n2 E! x4 ~
  114.     strcpy(file->full,".");
    2 c  @# b: Z3 x9 l2 b" I
  115.     strcat(file->full,file->path);
    : T- i5 A( Q, m3 y/ A! l
  116.     strcat(file->full,file->file);7 E; k9 g" i5 j0 x" v. o2 F( [
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    3 Z8 e' {  D8 [
  118.     {
    3 Y0 j4 A& V! D. |  D4 u$ D; ^
  119.       file->vers=(float)atof(version);& i( l$ c! Y% m2 ^5 c) i2 O
  120.       UpdateList.push_back(file->full);+ m2 Q6 _+ a& X6 J5 a; y% J
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));8 u! b! U. w$ D  p2 y1 }( S9 b
  122.     }0 i( Q4 |+ P0 `$ Q$ K4 g6 `
  123.     else
    ' |: V; Q. f% q2 `2 M; Y2 f5 }
  124.     {7 S  }4 M/ b9 @8 ?$ A
  125.       olds=(*p).second;
    . G5 S. o5 _0 D& `
  126.       if(olds->vers<(float)atof(version))
    & P/ x" w, I+ p0 K
  127.       {1 o% H/ y2 E, ?5 h: f! _' j
  128.         olds->vers=(float)atof(version);; e! p% \3 w/ |, ]! _
  129.       }
    # Q+ ?2 r" l, d
  130.       free(file);
    ' u" w6 `" a2 C6 J9 \, j8 l& R
  131.     }
    " R" |* s' s5 r  [" P6 ^: o- o
  132.   }+ h& g1 ~/ B: T: [8 o
  133.   fclose(fp);. n; a( d  w2 B6 u& \! K: s
  134.   return true;
    $ k3 S0 p: H% `- Q1 l. w9 U2 W
  135. }; j+ ^1 h5 E9 K3 j5 U. Z3 x

  136. 6 e/ B6 M9 C2 i6 H* Q1 a
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)& W1 g0 `, B6 a
  138. {, `; a2 o% K# L# e' @0 Z
  139.   TCHAR  szFull[MAX_PATH];: J& R# R6 w/ `  c: T" U: }
  140.   TCHAR *token,*inter;
    * e$ j4 L& [( P* q1 {
  141.   *szPath=0;
    9 d% e  N: o  N2 }0 I  X7 \
  142.   strcpy(szFull,szFullPath);  c0 d3 h. X0 L0 G7 m- V9 l
  143.   token=strtok(szFull,"\\/");. {6 g+ ~8 t# A5 L. S/ a$ v3 p
  144.   inter=token;
    ; y: l* e+ C  |. T
  145.   while(token=strtok(NULL,"\\/"))1 f0 {4 I; _) n$ v1 o" H* P& R
  146.   {
    : X; j, _5 |, H( @8 q( T
  147.     strcat(szPath,inter);
    # `. X( M7 |- F( q
  148.     strcat(szPath,"\");
    ' V2 h7 {% t- W# [3 i, n
  149.     inter=token;
    . M# {3 ^" F  a! x6 \: i
  150.   }) W: A  b9 E' K. G
  151.   return strlen(szPath);7 I, _8 C: O+ {( m" o5 v0 ~+ W
  152. }
    $ k; ~3 f9 G% _7 r3 O; d

  153. , }$ S  S0 b, P5 b# l4 _
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)3 g% X+ R! _; m: Z: o
  155. {# P" ^$ Q( @7 I' G
  156.   DWORD attrib=GetFileAttributes(Target);) H2 e, f9 V9 M- [# h6 M
  157.   if(attrib!=-1)
    , w9 `+ ?  i/ i: f$ }7 ?0 t  q
  158.   {
    9 }- T+ ^* N( C: ?8 C
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))5 |9 S) D$ X- \! [* N1 `
  160.     {
      ^3 b5 z3 f# A2 a
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ Z3 \% k& u3 S7 r
  162.       SetFileAttributes(Target,attrib);; r$ B% E/ Y) S/ R: E0 R+ c
  163.     }. ]$ I, y- B# _1 T7 u# s: b4 X: G# k3 W
  164.   }7 W1 Y; f5 D7 ~& v. [
  165.   CopyFile(Source,Target,Erase);8 }6 I) m) L* Z9 t3 ~
  166. }
    " `7 S! Q8 K' i, [

  167. - y1 Z) U3 I% N7 f3 N
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)& ^6 ?7 B0 f3 [# `4 k
  169. {2 Z" [8 F3 d1 S0 l+ U" k: {6 X
  170.      FILE *fp;* v+ q/ V: s% b) X) o) h/ T3 @
  171.      char  szBuffer[8192];: a0 R: J- a* ?! p3 u0 q* _3 H
  172.   va_list  argptr;7 g. V+ B- {( k8 u, G
  173. 3 C( L( ~! ^  q' i. L6 j/ Q# m3 @% z
  174.         va_start(argptr,message);  T5 w+ ?, K) [3 \- U0 t7 Q
  175.         vsprintf(szBuffer,message,argptr);5 l5 a* O0 @+ r$ @5 H. Z
  176.         va_end(argptr);. q7 o7 R" N9 o* `( T6 ~* a2 v
  177.   fp=fopen(FileName,"a");
      d1 Y3 Z( l( H' e( h$ }6 c5 o" J
  178.   if(fp)
    * q2 T' I1 L8 I5 ?3 b3 D( P7 a- m
  179.   {
    0 X5 Y  I' U3 @6 ?+ N) N# f
  180.     fprintf(fp,szBuffer);' Y* n3 m/ Y. j3 m* @- X/ }
  181.     fclose(fp);
    % {4 c) p6 X' s
  182.           _flushall();
      y3 q5 c$ n* J. i* h, {7 d
  183.   }
    , b- E; m7 W4 s- ]0 A
  184. }9 B0 k6 ?6 Y8 ^6 P. t

  185. ; |+ G& W+ r! }# o0 Q  g
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    5 }, ^( ^3 }% y9 M
  187. {: j0 s3 X$ |3 t4 i! r
  188.      FILE *fp;/ p, o+ Y% f1 X7 n9 m6 N
  189.     DWORD  attrib;
    9 v1 c% W9 m. {
  190.   attrib=GetFileAttributes(FileName);# k0 [1 S, E- H0 U' B* u3 H
  191.   if(attrib!=-1)
    9 e% w/ D7 {. ]& u: U* r3 |
  192.   {
    ' J7 v! I) _, [# T6 _. s6 O9 R
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      D$ B! f  `, ?5 h" i7 F4 k& }. t  u
  194.     if(!SetFileAttributes(FileName,attrib))3 u+ u/ ^! v8 @& f7 K* w' n6 j
  195.     {5 g' E  l% \3 v6 f, y: @
  196.       return FALSE;  @) ]/ D; N# C# ?, q+ g/ y
  197.     }: q; |7 _8 p$ B* u& O0 O1 [
  198.   }
    4 K9 u) f7 y8 V7 S5 o
  199.   fp=fopen(FileName,"wb");. h3 N8 l( G2 G0 I8 R8 T
  200.   if(fp)
    ! Y$ k; ]: ^; p8 u7 f) ~& W  {5 T0 E/ |
  201.   {# L; T# d/ d! N2 n' T2 |% }# S" V3 y+ ?
  202.     fclose(fp);; u! a9 L  y4 l; E, i) I7 l
  203.   }
      z% r3 Q- l7 b: K! f
  204.   return TRUE;
    5 z! \& N" E+ p+ \% h# Y
  205. }
    - z0 ]6 b$ o1 h+ j" e
  206. - {, J2 ^! H3 U# O9 f% J
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    " N- w# T3 P$ g& ^1 m! p
  208. {# l9 W/ R7 m/ i$ K  O; F
  209.   char filename[MAX_PATH];* L0 r* v, t. ~) K9 v6 ^
  210.   LPUPDATEFILE file,olds;1 }7 W8 Q6 M, U% J# N, V$ f! L7 s
  211.   std::map<int,CString>::iterator i;
    4 |/ m, u7 U, Q8 k# q2 ?2 v; A
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    - d& H$ \. R+ c; p2 r- x  k
  213.   std::list<CString>::iterator l;$ H$ @& \, g" F( R; B- f

  214. 8 J' X, [& [5 V& F
  215.   if(bFirstUpdate)
    * k4 Y; s; L% _0 c
  216.   {% Z* z7 J* d% O+ S, B
  217.     dwCurrFile=0;
    " N& z1 h7 ]# O3 x2 V3 u$ u
  218.     bFirstUpdate=FALSE;- R* |- _% J* I, Q& T6 Q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' r$ c  Q: k2 \- d- h( S
  220.     {
    0 u$ R2 S/ U9 \# b, B, l5 T
  221.       dwTotalFiles=UpdateLocal.size();
    ) Q$ w  _! p' y7 ]% z
  222.       dwDownLoaded=0;# U  @# {8 g9 U! |5 V) L) r# o
  223.       bSilentStep=FALSE;5 q( Y& @8 @, i* [1 |- w
  224.       bCompressed=TRUE;
    + x$ a2 q0 e0 x$ y/ ?
  225.       strExtLocal.Empty();  x& }. \" i8 J
  226.       strFullName=(*i).second;; |7 w" L* y- y$ v) V
  227.       dwProgramState=AP_CONNECT;' k6 m, _8 j. Y, q' g" Z
  228.       return TRUE;! f! p3 z) w1 T: J
  229.     }  B# Z) R1 M  ]1 H, W& C
  230.   }% `# o! [: w) s0 w7 O
  231.   else if(bRestartUpdater==FALSE): E4 I8 }5 `" _
  232.   {# S  E% f' ]5 |$ L1 L0 i
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      T0 }; t! B5 D1 q
  234.     {8 e4 I/ ^! {8 }; _
  235.       file=(*p).second;& h# G& W) Y$ d. C* ~& n7 `9 ?
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    8 w( ^7 _5 D- z1 j* a
  237.       {  N+ f9 y- I# j5 }
  238.         olds=(*p).second;7 V7 F0 G1 j6 k
  239.         olds->vers=file->vers;9 D9 ]$ E3 S9 Y' z- V" C
  240.       }5 v; F8 f! s5 W3 l, D0 W! n! M) D
  241.       else
    3 Y9 p9 G2 f0 }% x
  242.       {) Q/ f3 t1 |+ l" U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 N# D) Y. i5 Z% M6 t
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* x9 I# k$ g& Y6 s9 A3 J
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));9 P& `+ Z2 Y+ [0 t+ s
  246.       }" ~& ~5 ?, F; Q8 t
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    1 L, |! v" Q. P: y4 x1 e' D
  248.       sprintf(filename,"(%s)",file->file);
    ( v1 U$ C# d( L4 U
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 E5 S& a) Y9 C; C; X& i
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }8 }8 P8 `; L: W- M3 r* z5 M
  251.     }
    / q3 ?; \4 N- C5 p$ |+ D9 b( g6 D8 R+ A
  252.     dwCurrFile++;- v2 y- ^0 Q3 q0 i
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 N, b# N4 W0 {: a/ d
  254.     {
    $ O( N# C+ x) Y5 C' ]' p- K1 g* x
  255.       bSilentStep=FALSE;: O7 j* M' b/ c6 t
  256.       bCompressed=TRUE;
    , `% [6 M1 X: K" }
  257.       strExtLocal.Empty();9 l9 f$ {3 I2 }, d- s, K& G
  258.       strFullName=(*i).second;  ]# ]. W# d, [
  259.       dwProgramState=AP_CONNECT;6 d9 r1 |$ M$ N3 n7 }. x
  260.       return TRUE;
    - o+ M6 P0 u, Q0 ]3 ]. C& `
  261.     }
    3 w: e0 N6 {/ a' W- f. u2 t* a4 B: Y' ]5 A
  262.     if(!bRestartUpdater)
    ; P3 X# e" d9 b" Z1 _
  263.     {' i( h+ t* Q2 J+ y& G
  264.       int iCurrSize,iFileSize;
    ' _  D5 J- i" R; R
  265.       iCurrSize=0;! p. [+ v7 S# J2 c  o( d0 q0 z
  266.       iFileSize=UpdateList2.size();& ]! v+ V/ E+ i; p# }5 W; A
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    - r7 I5 u3 w% }# N: Q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    9 A+ q$ s& F% b+ G0 c3 ^4 \
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");  I9 E7 ~3 ]5 w
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ |( s3 [; o8 L7 R
  271.       Fclearf(".\\update.dat");5 h9 t2 o+ T5 ]- @8 k' @! u/ Q& l1 S
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    2 T- I1 d) m% d. S+ b
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++). V% P. F/ E7 D/ d
  274.       {
    ! E! i/ @$ _0 q: ]9 h) ]; d3 y1 h
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()), r2 c8 a* t+ X: {
  276.         {
    2 [# J5 @, m5 w  r0 ~- p0 x) ^9 R
  277.           file=(*p).second;
    - O% N8 E0 s/ C6 l( ]
  278.           sprintf(filename,"(%s)",file->file);8 N3 s! R9 ?( D/ G8 j9 `& N* |
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 i$ w4 |/ W: A. @
  280.           iCurrSize++;
    ) M9 ?5 }, ]- B: {
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    & F8 c, X) O) `* A3 @: v( l( T% C% X
  282.         }3 \+ c7 ~/ R- J
  283.       }
    2 z0 |5 |5 {8 s. b& X1 a1 T5 C
  284.       unlink(".\\update.txt");  m  o/ n6 z5 R% r/ R; ]# C
  285.       unlink(".\\update.tmp");, y. A* U$ `7 ~, U" P$ G/ `9 q
  286.       Fclearf(".\\checkversion.dat");% B" z: u: _$ D( i
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 Q, g3 z& B! {; [8 \9 ^
  288.       if(UpdateLocal.size())
    5 U: [: }1 s0 ]9 A: e' {2 }. P
  289.       {1 Q3 F; ^4 p# a& s, l- l* Y
  290.         UpdateLocal.clear();* V& D! S$ _& k& I# j
  291.       }
    6 C# U( ]3 R/ u  d5 e
  292.       if(UpdateFile3.size())3 W: a- s3 w" V6 h4 a
  293.       {/ J4 ^( G3 L# J2 N: c7 `; N
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 O4 A9 |& d5 P
  295.         {
    ; o. L) n: u4 N- o' e- n
  296.           file=(*p).second;0 o# o5 \6 a" f# y4 `5 u; u
  297.           free(file);; k' F& L+ f6 R( C% i& y8 w
  298.         }
    9 p! D# r' Y2 q/ ]! S7 h
  299.         UpdateFile3.clear();
    & V3 l$ y5 u2 D! N5 F
  300.         UpdateList3.clear();/ m, |8 d& S4 E- I+ f4 J
  301.       }" [4 ^: P* e3 h
  302.       if(UpdateFile2.size())
    8 O/ I- V1 a- F) a& H
  303.       {( C3 t( F: @6 K5 o" _; x4 {
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ ]* C2 N' l" k: }
  305.         {
    / Q( ^  P5 K0 `( v+ c
  306.           file=(*p).second;1 W7 Q( S' }/ U- j+ v
  307.           free(file);
    7 M, c9 A- |0 B, a, ^' K' c
  308.         }# D: R3 H0 u3 t, C7 N( K
  309.         UpdateFile2.clear();# r+ e8 F7 G  k  Z
  310.         UpdateList2.clear();
      M: I- f) [% \* C
  311.       }! A; W+ e! K4 d5 {+ J4 l
  312.       if(UpdateFile1.size())  ?% l4 V) m0 K' {
  313.       {
    . _  x$ W' J# K
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 X# S- w/ o8 ?6 G
  315.         {, Y6 d  S( w( n- e5 h' p
  316.           file=(*p).second;
    . o: C4 t( s, \* ~
  317.           free(file);( F% I/ ~9 M; |$ m0 e
  318.         }
    4 Q9 u+ ?( U8 L, J" D
  319.         UpdateFile1.clear();
    8 o/ `: s: i$ a4 {% A1 w
  320.         UpdateList1.clear();
    5 j( }( a; }1 ]) ]3 o) b# n
  321.       }+ ?- O% j1 a3 h8 I' W$ `- p$ J; c
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    0 @+ K- g1 }+ k( f* M2 u
  323.     }& F, b2 p' X1 i# ]/ E) T0 C
  324.   }
    # r" p& g1 v9 o0 W  P6 J
  325.   return FALSE;+ |' s6 G* Q2 _- u
  326. }5 n( u, J7 d4 u$ f6 w2 H. o

  327. ! D8 P' T, E9 Y
  328. void CRevAppApp::ClearAll(void)6 C0 a( {- I5 Z; f! X
  329. {$ {9 k  X4 I; X7 O) V/ T
  330.   LPUPDATEFILE file;' |9 j! J; w1 _1 r  r
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    . Y) h8 ~. u0 t, ]( ]: Z

  332. 7 d4 F( E8 q: I, [4 K) U
  333.   if(UpdateLocal.size())
    ( _. B$ L. W6 Q3 S5 f' a' D# x
  334.   {
    # R/ j/ w9 q8 M+ m! L, x8 x* F
  335.     UpdateLocal.clear();
    8 n+ m+ m' ^8 x( q* S  j- h7 G: q
  336.   }
    6 U, f0 @, R9 H, V) {, t# r7 \
  337.   if(UpdateFile3.size())
    # R: l; F5 `3 }; s+ J( F
  338.   {
    ! @9 r, @9 ~" Z0 I7 {. j. F% B
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 R( c; h: {  a+ L7 f7 M  t# g
  340.     {
    4 m) _9 c, d6 O% Z# r7 Z+ z* \7 u
  341.       file=(*p).second;
    & @+ j" L) p' S/ L& G7 H% B- f) V
  342.       free(file);
    . I& N# `8 K' a2 U* f1 @
  343.     }
    * }& t- S3 V/ W( c: I3 A: c+ v& T8 l
  344.     UpdateFile3.clear();
    0 B) }5 V, O2 [) j; E  C% s
  345.     UpdateList3.clear();; Q0 q4 L* v: d- s* Z
  346.   }
    ( h; L; k/ A& T' K1 P5 ]4 Q: w
  347.   if(UpdateFile2.size())
    4 G) K& P& C  d/ ^1 K: f% E
  348.   {
    0 l0 H5 ]0 [+ [7 q8 j  C
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 D3 G; Z: ~9 r& ?
  350.     {
    3 n1 I4 K, i1 l9 O$ h5 v/ n1 n8 g
  351.       file=(*p).second;
      X. \! U' `( n3 `$ a6 ^
  352.       free(file);
    0 O1 j8 m% G9 k4 u5 R) S
  353.     }
    : V$ s) ?$ G$ f5 H$ m
  354.     UpdateFile2.clear();
      Y' @0 |/ S, k2 @+ M
  355.     UpdateList2.clear();9 h5 K/ ~, o% f+ _" a
  356.   }3 A6 @5 ?6 L! u+ @
  357.   if(UpdateFile1.size())
    . n5 _2 @6 M) S0 k" Q7 }; e4 h
  358.   {
    # {$ L3 e. I# c. p. N6 n4 X
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% |8 Y4 ?0 B$ `6 Q) M+ _  {- |  n
  360.     {
    / n! m( }: O9 m. ~' R
  361.       file=(*p).second;' P2 {4 g& Q  i6 e
  362.       free(file);
    # a% g* N+ ~' p! [2 p+ I1 g: W6 S
  363.     }
      _1 \* N+ |6 t* W% X7 {
  364.     UpdateFile1.clear();
    / X* G0 D. F6 _* ~; e
  365.     UpdateList1.clear();7 F8 v  t$ Z' h
  366.   }
    ; v4 Q$ k0 A' E/ h5 ]# L
  367. }  3 X* i: [3 t& V/ z1 J8 q$ ?( ?
  368.   * k. g! S7 V- x6 q7 g, [
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    " V; ?& P; q% I$ m7 z
  370. {
    # W: G" M" Y+ u( y6 ]* F
  371.   int c;
    / Z# h; S, _$ E) v* c  C. ^
  372.   LPUPDATEFILE file1,file2;
    . A- B. E( F% ^+ e- g' t* P: k' l
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;3 J& Y; ~$ Z+ Q' W8 d
  374.   std::list<CString>::iterator l;
    ( i. X! Q  ]& l! {( T4 ?' ?

  375. " L" \) ]# [+ l; R! Z+ @; i: ^
  376.   UpdateLocal.clear();
    - j/ a! U' v' ~' d6 A9 t
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);. S! W# N* N. W9 ^; [! H
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    - {) L7 g5 y% G- g( d* u. t
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);8 d9 F/ V/ _, j% ?6 ]! n
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);* s; a/ p) Q. O, U; Y, T+ V3 y
  381.   if(UpdateFile3.size())
    : G/ i! M9 y6 l- V
  382.   {% ?: ~: S$ w/ {" g% Q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    + Z( g. c5 y% Z% {6 ?1 V" a
  384.     {
    # S. H, S; [  h) ]# D0 B5 l- C
  385.       file2=(LPUPDATEFILE)(*i).second;
    , i1 y( |: u; p6 D( U; M! {
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" f& N. m' K* E3 R
  387.       {2 C, {; U% S$ D. e4 U) h# n  U
  388.         file1=(LPUPDATEFILE)(*p).second;, S6 c0 \) y7 S5 T
  389.         file1->vers=file2->vers;
    ( p3 M: S8 J0 t+ `7 O/ i
  390.       }! m. i' ?/ ~' Z: l4 E" f: q
  391.       else8 W# z6 a$ }% y' `
  392.       {9 h1 f, t6 W; t( J: R( i7 g
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 z8 }, [- C  E2 e0 F) W/ T6 T
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    $ A; t: m2 C% `. }. U- _# _0 U7 n: y
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    3 Y& K' K. h0 v. ^' M% E' S
  396.       }
    " J& V/ @: X5 ^9 D+ p
  397.     }' @# G7 \4 x6 N) ?7 i7 N# A
  398.   }
    8 \0 f- [) p' M* _: ]/ E
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / `6 k8 K* ~. g8 s4 }. D9 c# X
  400.   {3 d5 }. U) X6 T+ W
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())5 K" H8 i' f% o! M: y
  402.     {
    7 j  @/ T# J; S, |0 q1 t! ], @9 _
  403.       file2=(LPUPDATEFILE)(*i).second;
    , W! v, c# T& i# F$ U; @
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' q' y4 D2 U1 q( A6 i4 @: h
  405.       {
      M* n) t* I' _7 M+ ~, _* L
  406.         file1=(LPUPDATEFILE)(*p).second;* q" _8 d: T& L: G
  407.         if(file1->vers!=file2->vers)' F2 D1 k) s- g8 M# z$ }; I
  408.         {
    % Z0 B8 F  b7 U7 z8 R
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 S4 A6 K. F5 S7 E8 [
  410.           c++;( N5 o9 S9 U# N" X; a) T/ r/ v
  411.         }$ `# y* s4 P5 ~1 _, X
  412.       }5 m0 S6 q6 {) C( p
  413.       else5 e5 K( z) F  c# @3 d
  414.       {
    * J0 D' O+ p6 L: I( B
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' i0 Q" i6 x9 ]& @$ ~
  416.         c++;
    * q! G1 Q7 @* R& G
  417.       }: V+ K2 X* ?. Q0 x/ U
  418.     }
    . X) h2 u# e2 }
  419.   }$ }) k- ^/ V; y5 h$ ^  J+ y* d
  420.   unlink(".\\DownLoad\\update.txt");
    2 O& M& j% W% G% {, @& j+ |' n; w
  421.   if(UpdateLocal.size()) return TRUE;
    $ y' K' f8 G) W& O+ K# @' ]
  422.   else                   return FALSE;& x+ J1 @( X8 ]( f: s
  423. }  L4 q& n" x# R" i, g, c4 y

  424. 5 \' Z4 V* a) a4 u7 a# V; f0 T: \
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"* z- W- [; ^) |! Y2 T2 S
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") V1 D5 n; J" e+ z

  427. # t" b$ C3 n; Z4 L# I! R9 E7 [; m

  428. + Z7 k2 P9 g$ i" I6 e, H

  429. - Y) y1 T! k- A6 F4 D& G6 }
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" {# @; A. S( i: O
  431. {
    8 d7 X- Z$ z& J% h
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;8 B3 X) i8 K, ]- _
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 W( a1 M; o& t' f' _  [
  434.   {" x5 y) l! ^* a& i
  435.     char szLanguage[50];
    3 ]& T- Z' l8 x( q0 }! v
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' s* V' b! e( n
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% |$ c( `5 I: l' P4 v
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & \  J+ W$ g$ t) `3 S# ^
  439.     else                                   m_iLanguage=ENGLISH;2 D) g  n$ l! X  {, M( I/ a  b$ ]$ {
  440.     char szRegister[100];* \2 y; |- a+ \+ n' z( T
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");2 @) e* [) x* }% [- r" `
  442.     strRegsName=szRegister;+ ~( S9 ~* I) u4 U% J, `3 O* |
  443.     char szPatchURL[100];
    3 c: U# p/ b' U) ]
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : t" y. H$ X, y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 b( z1 m# Z$ h' j
  446.   }
    + r8 Q" F7 ^. Z2 W* j+ ?
  447.   else3 D: n* q7 q6 Y( N) {/ N
  448.   {
    . W/ f4 X1 l: `1 }
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( [7 d& a7 i- f3 X
  450.     strRegsName=DEFAULT_REG_URL;! z' l, S) F% j- ]) ~- j+ `
  451.   }
    / d& Q6 t& E4 N2 g$ M8 z7 Z
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ; T  [0 j& f2 F& o. M; T8 \
  453.   {
    9 ?+ Y% E0 n3 B# w6 f
  454.     char szIP[50];
    ( ?- t4 @" ^9 U7 @5 c
  455.     char szDIR[300];
    ( _* b" {: Y) v4 _% y$ c( V
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))1 i) }6 c8 l& E) v: g1 S2 T7 M
  457.     {
    2 S5 @* ~) i, Z' O% f
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");/ d( n5 \- A' `! G+ A8 J! p
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    4 p4 g; H. l& `
  460.       strHostName=szIP;
    , F. u5 K! ]7 F: o
  461.       strHostPath.Format("/%s",szDIR);
    + A7 n/ Z& K  D
  462.     }, c6 }2 i; p! ~5 \3 {' r4 e5 K
  463.     else
    1 }# V% i- h; i3 c6 G2 U
  464.     {0 o1 O' P7 }1 f/ @. z  v) y2 Q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 r: T6 n3 ]# K8 u
  466.       {
    . @; x1 b; X8 M$ O6 W1 _1 P
  467.         char szLanguage[50];
    ) ]; D# }" r/ G
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" _  m( s" w6 F6 m% j: d
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 y1 i3 @- Q* r
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; N& a8 M3 B  c: ~# o8 E. X. E
  471.         else                                   m_iLanguage=ENGLISH;
    ' o8 ^! I6 h" `, e  }4 Y3 F# [
  472.         char szRegister[100];
    ' F+ V! |* |* B; D8 ?' ]
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + y  Z5 Z/ x) ]$ C. U
  474.         strRegsName=szRegister;. A2 {# _" r9 }5 `9 A, P
  475.         char szPatchURL[100];
    9 ~; p% o! g0 W$ [; z7 y$ j
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 I# z2 u/ Z0 T+ p: S
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# {  C1 f! [0 C! r' _
  478.       }
    - k* o+ \0 T4 {1 V' x% n
  479.       else
    $ h7 z- E% z) {% H) U( B5 i& A
  480.       {# ?' ]& T! N* F: h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 }  }; l$ w/ g8 r
  482.         strRegsName=DEFAULT_REG_URL;
    # W7 b( B8 C: b. J' Z
  483.       }
    ; O* e. H3 l. K  m. u# `8 m% n
  484.     }
    3 e0 w$ k- @1 g) l, |  V; V, s
  485.   }) ~1 d; h) H; H
  486.   return true;* x- r( H% n: E/ j1 ~
  487. }8 S. w5 Q4 f" g# s8 F8 @& C- A
  488. 7 b1 d9 d0 s; B% r
  489. #include ".\ZLib\unzip.h"! @" ~; l) [( g
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);5 ~8 t0 Y5 k0 f8 h# z6 @
  491. /////////////////////////////////////////////////////////////////////////////& @7 I* h7 b5 o5 v1 e. C0 M
  492. // CRevAppApp initialization5 q8 l# f* ?' `  f" }8 ^1 [

  493. ! K* B1 A! P2 c/ V% _. m4 V+ N5 ~
  494. BOOL CRevAppApp::InitInstance()
    ( B; }$ H1 q5 l7 y0 I
  495. {
    # X- a2 F+ E+ l$ x- w. z! m, @# J" U
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    " w: S" q- z, {% M( {

  497. $ S: T8 w% U. Q$ F( h
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ) d: h- G6 M/ x, J2 @: T
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))7 l7 M4 b8 f- b9 v
  500.   {" J3 h" P; E- D. T
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! }7 ]% e: [5 t+ O6 ?  |3 c) L
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    3 @+ U& w# b7 `) F" u
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))- D1 ]; @7 T6 q& \
  504.     {+ F& k$ `& {3 L4 G1 r1 Z5 u' ?, a
  505.       strcpy(szPath,szPathTarget);3 G* H0 l0 f$ K
  506.       SetCurrentDirectory(szPath);* L* D" W; ~- v1 h, [0 W. C) _& ]+ M0 u
  507.     }
    ) {' d+ k4 i8 @1 F! y: @
  508.   }3 f  H: g7 Y3 a
  509. #ifdef _DEBUG
    * S6 _; s8 a  i5 M& S1 D7 l
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 r& p& i) @# M: C1 o: ^
  511. #else- `# |8 d! N+ u4 X; H4 E
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( \+ n( u* x0 c+ y1 p5 k% f
  513. #endif
    2 n" `/ |( A" ]1 Y
  514.   {$ ~3 f: y3 T6 R
  515.     char tempFileName[MAX_PATH];( r2 n' b, z1 E
  516.     strcpy(tempFileName,szPathSource);
    - \3 n# u1 X6 c8 ^9 @9 d- u
  517.     tempFileName[strlen(szPathSource)-12]=0;! O: P) D# O3 x9 ?
  518.     strcat(tempFileName,"\\$CSUpdate.exe");- h6 O- R" b* p: s# i6 ]6 k: \
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    " p5 D, D; Z- b) h
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    # m$ t2 Y$ h, [; P" v
  521.     return TRUE;
      d5 i) O! k' h
  522.   }
    6 X$ O2 h( f( d% `  A
  523.   // Nuke 0118: Delete run.exe+ q' ~7 b+ ~5 X- Y6 y( W0 I/ z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    . L) k( @7 I1 e. @4 s$ V
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    3 ~) f6 C& Z& z. l1 w. v3 o
  526.   if(!ReadCfgFile("Config.ini"))- m* y8 h3 E. x  _6 E" I4 V
  527.   {
    . `3 S8 T  {* S, j( D9 D$ c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);, P" v- S7 ~5 s6 d$ A
  529.     return TRUE;
    - i- M5 U3 X8 B! S* [' }* u
  530.   }
    . r& ]6 ?  ]1 @& Z4 M5 C
  531.   HANDLE mutex;, x8 r% z  `& Y- c. p3 h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))# {+ }; r1 X- u# a. N
  533.   {
    * \7 l1 K9 l% r: E
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    4 f. v2 F4 M% o
  535.     {
    ! C7 x1 X6 V# v
  536.       CloseHandle(mutex);
    9 ]6 Y# U) a& @+ `' ~% r9 s/ p
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);) d% g5 l  l$ k- C% H
  538.       return TRUE;
    ( }9 a' w  R2 l' A' Y
  539.     }& n: L) T! U# K& P" u. n
  540.   }  
    ' H) }( d* ]' F3 G6 m5 r2 m  J7 P9 i
  541.   CloseHandle(mutex);% g- |7 @% U4 B# N! N
  542. ' B' b8 z! F+ r
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);3 O( w, Y" @" c, G& z1 q
  544. 2 W. a7 L- K3 b' S0 e3 Z1 d4 l
  545.         AfxEnableControlContainer();6 t  C9 W" A) @& Q, q" k

  546. # ], }  U& k+ W9 Z2 C9 Y
  547.   bCanUpdate=FALSE;' v$ m" Z/ J6 p% ^
  548.   dwStartUpSteps=1;2 t2 r! c  }" W
  549.   dwProgramState=AP_NOTHING;
    ! J( ~' `! E3 F' `6 M
  550. ' X, \" P. x0 G# c, H5 A- ?) K
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);7 @7 J, i# h5 B  l" K4 m6 H2 a
  552. 3 T2 {; t% d6 a9 Y8 H; A
  553.         // Standard initialization
    . E) c# X4 h# O0 j. c4 B
  554.         // If you are not using these features and wish to reduce the size
    , G7 I3 P- \" B) [( \9 e( Q
  555.         //  of your final executable, you should remove from the following
    & C1 |* P" u1 A
  556.         //  the specific initialization routines you do not need.) @: I2 v1 P$ t$ d$ J4 `
  557. 5 U5 B& e* s+ E/ E6 ~
  558. #ifdef _AFXDLL
    9 ^2 t' M2 k0 G8 }1 g( s
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL6 }/ e- f' Q1 L$ H* H  O
  560. #else# q: C, D5 H$ ?6 C, c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ! S9 s$ M+ ~$ D3 ~3 k  y; ~" d
  562. #endif% \9 m3 A1 g$ e; ^, ?+ ]% a5 Q" p, k

  563. ) i5 q! T+ O8 ^* i1 m. V' Z) ?
  564.   dlg=new CRevAppDlg;# T, r' p7 `0 ?" S# p
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 [5 {: ?  `' k& d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) D1 L$ `7 I7 A, o
  567.   m_pMainWnd=dlg;2 u! e2 y$ Q. |, G% r+ Q
  568. ) W! ^! r4 H. W$ J
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);) j. S# |$ S$ @9 U% z2 M5 d8 M
  570.   R- f9 }! R5 J9 j1 B
  571. //  GdiplusStartupInput gdiplusStartupInput;3 ?& [$ V; _* N6 O. J$ T9 g
  572. //  ULONG_PTR gdiplusToken;
    ; E9 @0 C, L, o( u; x
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 f/ F& C+ a7 N) T

  574. 1 K5 n6 t% `6 f8 t! r8 o. R
  575. //        CRevAppDlg dlg;6 _& D) {& ^' B# U
  576. //        int nResponse = dlg.DoModal();
    . a+ a  e* S3 L' J( H" E( N5 L
  577. //        if (nResponse == IDOK)6 e2 m% o$ U3 G; z; m0 T
  578. //        {1 h: c: K* O& v2 F! ]2 k0 q
  579. //                // TODO: Place code here to handle when the dialog is
    - u, f* ^$ v; U6 n! b$ c) a
  580. //                //  dismissed with OK
    ! G; B* W/ i6 [: o3 b
  581. //        }
    0 C- N" K3 ]3 b" _5 G/ o
  582. //        else if (nResponse == IDCANCEL)- u* E8 \8 U' D3 m8 H6 ^2 B% F6 z, K
  583. //        {3 ?- d  I: J8 ~' w, s
  584. //                // TODO: Place code here to handle when the dialog is) Z, p. R- G; v& H$ [
  585. //                //  dismissed with Cancel
    2 ~' q. i# ?, @2 G1 i: b
  586. //        }
    + k" ~1 O- S) P6 }% r- E
  587. ' V. d9 @: {$ M( Q8 f* v4 r
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    & b' u$ l% ]. o: p. C$ Q
  589.         //  application, rather than start the application's message pump." p( x$ Q1 t' R# `" B% f; e
  590.         return TRUE;5 H0 L1 C7 x$ u! ~: u, O) r
  591. }
      V2 f, S" X# k" U; U: y

  592. 2 K: V' y* u- s; b  I
  593. char *CRevAppApp::strtok3(char *pSource,char *token). M) t& t% v2 s
  594. {" ?3 v5 z; g0 d' P( ^5 w" |: E" g
  595.   int i;
    ' O( D/ T5 ~+ _( \3 w' f
  596.   char *szRet;
    * R+ \( i$ e* t0 L8 R* v  l

  597. 9 D0 Z: K1 b0 S7 Q7 ]
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " a! U. ?) _' T. W
  599.   if(sztoken)
    7 r* E" x! R7 r! o
  600.   {
    7 B- V, `  [1 X3 c- Q; O! b% W
  601.     szRet=&sztoken[itoken];
    5 I( j) b- B$ Q0 I4 _$ H6 P
  602.     while(sztoken[itoken])
    2 V8 d+ y) i3 V# J
  603.     {5 f, e' C- U2 z- X- S8 g
  604.       for(i=0;i<(int)strlen(token);i++)
    7 S" W# `1 D- d
  605.       {6 F. a( f# @+ `$ Z& s) n
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])+ m, N( [5 p5 g9 K7 `7 ]' |
  607.         {
    9 }; U* F: ], |) [# t) [' i. J
  608.           sztoken[itoken++]=0;
    1 j8 G+ Q- \+ ?4 m
  609.           sztoken[itoken++]=0;
    & j# k$ I8 D' g- i  @8 t: ]
  610.           return szRet;
    & y* Y2 U& s/ m8 Y
  611.         }
    # H% m1 J8 N2 z8 s2 T
  612.       }
    * }) O" j3 a8 d6 Z6 d( `" p- X
  613.       itoken++;
    6 T9 X" c. n# u
  614.     }+ R$ v" K7 I# P, ?3 ?7 r: v
  615.   }; _+ r* K: p& l  R, D. ?; w" C6 `9 i
  616.   return NULL;
    0 p0 C4 P* }& B2 i; [3 s. v
  617. }4 b! \" p# G3 e- ]6 ]
  618.   s  i1 n  c6 e: S3 O- @
  619. void ProcessProc(long Total,long Current)
    + R7 l- J: `4 \' C
  620. {' c( w/ |- j) f
  621.         MSG msg;9 L3 w  n5 _: y% I, C% U5 [
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    2 b! }: a4 j# _9 i
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));7 s' N( l7 J6 M( `3 k2 R
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    % _+ b3 @3 v3 K) V
  625.         {
    * ~5 t, ^- Y3 Q( ^- e! z
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ; W! h% `% H/ V9 F8 p7 T
  627.                 {
    ) n8 T- v% c; e
  628.                         return;- O( `' f/ X0 L# n
  629.                 }
    ) t, A0 r: a/ W1 Z
  630.                 TranslateMessage(&msg);
    6 D$ x6 T2 H* {- B3 l7 |
  631.                 DispatchMessage(&msg);# c, B5 S1 q5 _0 x8 e# [
  632.         }        ' Z0 }0 z, t3 B2 _& W" y
  633. }
    5 G3 B' K  n( i% M

  634. + h  ]  ?( D1 f! J% R9 X- Q& U
  635. BOOL bFirstChar=TRUE;
    : w! R7 j7 [: F% e
  636. * G* R1 h+ L0 Y  V' K; e8 M
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    : R  ?4 K+ y2 O4 d$ w
  638. {9 D& U7 X9 V# s) u" n5 C) i* K
  639.         // TODO: Add your specialized code here and/or call the base class
    % z2 @' X+ E: Q% H; |/ D
  640.   switch(dwProgramState)% ]' _. f9 O4 |! C5 z! `  q( O
  641.   {
    6 A% P% L* a+ @. ?$ ^
  642.   case AP_NOTHING:8 ~5 E9 Q, y" P& }& V
  643.     switch(dwStartUpSteps)& ?  u' r: R+ C6 Z- [6 N1 q$ M9 F
  644.     {
    . J3 o! r; u8 H) m" A& B# M4 J
  645.     case 1:. D; [* H. N* E) J0 k& G* y0 _
  646.       {1 o- m3 O. v! K5 r7 R  g) m2 U
  647.         int i;
    ' \5 E7 T$ ~- g% X: W8 a0 ]% r
  648.         CDC *pCDC=dlg->GetDC();
    6 e9 ^8 T* H& x
  649.         HDC hdcwnd=pCDC->m_hDC;7 `+ V9 J3 Y' Y
  650. //        Graphics graphics(hdcwnd);! U7 o& ?+ a# y- j. X  \
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    8 h4 j+ |' i6 }
  652. //        INT iWidth=bitmap.GetWidth();
    ' U/ b) p5 ?. x; j- l, M) s
  653. //        INT iHeight=bitmap.GetHeight();8 D  U. e$ F7 [7 c4 H  y7 I1 K
  654. //        Color color,colorTemp;
    0 g: f6 R1 V9 Y2 M3 |0 w
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ! m0 y: `! w% Q5 u6 N. Z; F/ d# K
  656. //        {
    , z/ O$ f+ N% Z" c1 @
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# ~: p5 d% h! J/ N/ J. @, g
  658. //          {. \9 Q, _9 j$ M6 ~# o  R" r/ W) d
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ! ]& ^7 v/ E# z; C
  660. //            colorTemp.SetValue(color.MakeARGB(0 z) r! f2 v( k# {, {
  661. //              (BYTE)(255*iColumn/iWidth),
    , z+ f3 j# Z, u: Q/ m  u1 v9 r( P/ Q
  662. //              color.GetRed(),* Q; Z4 |" s$ X- {0 l( k
  663. //              color.GetGreen(),
    9 o1 w0 b0 X4 z  |9 C3 D8 H4 m
  664. //              color.GetBlue()));
    : |+ q' t* @4 ~; v6 @0 F
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);, |" P  k0 `4 w
  666. //          }
    ( f6 |- h" o' [
  667. //        }
    6 ~3 N2 q: F. \: j* i
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    3 i. o1 H/ ~" t' z! y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- _& Q4 V0 t6 I
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 L6 }! z& b' |2 \# K7 w9 |0 M
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / \3 A1 K( s& t
  672.         for(i=0;i<240;i+=8); r0 d0 M6 M+ H2 L: ~
  673.         {: A4 D, C3 O. Z- M" o3 n5 P$ [
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( I! b3 F6 Y7 M; ?4 b
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % z( U  }( ~# y2 l6 O) z7 K
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& h6 ?; L* I" Y3 V% d
  677.           Sleep(33);
    5 B$ }5 W  N9 [6 I* z4 U8 f
  678.         }# v* f- f* |7 Z4 [8 o7 n
  679.         Sleep(1000);
    + _3 M' ^( \! b) [& u6 w
  680.         for(i=240;i>0;i-=8)
    : [7 Z  H1 v8 \& M
  681.         {
    ' L* }8 k/ e; X; @2 A, e- b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 q; r4 ?" u1 s* O% r
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ X) j  c- h; E: Q% z2 T
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 _6 p* m- u/ m- Q0 m
  685.           Sleep(33);
    . I, J, f0 H3 t( Z8 E
  686.         }. r. p0 \; M. C( G, {
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    3 h5 |+ k4 n5 c& t5 e$ {% k
  688.         dlg->ReleaseDC(pCDC);( [, m2 ]# {( J% I
  689.         DeleteDC(hdctar);" i7 `! A' D4 b
  690.         DeleteDC(hdcsrc);
    # T5 \9 ^( a0 q% ?5 a7 V# l
  691.         DeleteDC(hdcorg);
    ! y/ w* x5 x; D6 {
  692.       }% N* \& T: x" `4 x' v; g9 K+ ]
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);6 Y4 y3 g, J+ s" e2 I6 N
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ' a- W6 Z: M6 ?0 J5 A; l4 ]
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ( t7 j% x. L* v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    + Z( c4 ]* N6 F' l# W
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / [( p) M- y# }  N4 D# N
  698.       if(!Dn.Connected())
    ) N  R1 q3 V' p
  699.       {. z1 j2 h) ~/ P$ F& m' m- c
  700.         dwTotalFiles=1;
    ! y# c& a6 E5 V! _4 N6 w
  701.         dwDownLoaded=0;
    ( C/ |2 V  _' M! _3 ?! U: R; `- z
  702.         bSilentStep=TRUE;) [, V5 T' Y2 d$ M4 v3 q0 g
  703.         bCompressed=FALSE;
    # \, h5 W) m+ g( ?/ v1 p
  704.         strExtLocal.Empty();" b5 Z+ D3 l% G% X
  705.         strFullName="readme.txt";9 P8 @+ p9 h5 P6 y; K* }
  706.         dwProgramState=AP_CONNECT;
    + i, z0 N5 E+ x3 F0 J- U8 K0 M5 F; D
  707.       }
    # n3 {; m; ?4 I
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    # M' T9 K% s! H  d& Q
  709.       dwStartUpSteps=2;
      t$ A" F$ B2 d. k
  710.       break;
    ! k$ o# a5 b# _
  711.     case 2:
    : ?4 |- q- p" G4 J) f
  712.       {0 j5 g5 ]+ K. B- j7 K9 G% A
  713.         int iEOF;+ X2 i8 y% ]% c
  714.         FILE *fp;
    6 N5 B: i" ?" j% b+ W+ o
  715.         char szString[512];- V9 f7 v0 @1 }: m; V
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    # z. d' C: @4 Q3 O/ t
  717.         if(fp)" {0 z% f3 p% t+ U8 s' W
  718.         {6 s, M! u, V' j5 w
  719.           do
    1 t3 }( F& K3 X& i$ l9 c
  720.           {
    ! i( [+ P' _( O" M. y3 p6 K/ d
  721.             iEOF=fscanf(fp,"%s",szString);
    9 N6 O: j/ X2 _7 b
  722.             if(strlen(szString))
    , T5 ^5 `- i9 K7 T
  723.             {% q2 d# I0 O  }& i( d
  724.               if(bFirstChar)$ y% C* k5 c8 x
  725.               {
    0 k1 j, F* P+ r* S) @
  726.                 bFirstChar=FALSE;
    + ~" l2 ]% S" t" T7 l. A0 o: ]
  727.                 bConnectIsBig5=FALSE;2 ?. f$ r# n5 H
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;& t( r% ?$ t2 N6 K  E
  729.               }
    5 ?6 Q8 E  G: c2 ]7 d! M* l
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    2 m. E$ Q; P0 V1 {, \  X, ~9 w
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    2 _. l- E, x5 t6 ?
  732.               dlg->m_ListText.AddString(szString);7 a2 n( W7 o, p
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ R% a3 X) O! s9 r1 q, K
  734.               *szString=0;; L6 Z  T3 {$ t# e6 I2 _/ |
  735.             }
    ; \6 a6 @& k; R& J8 {0 W$ y( V
  736.           } while(iEOF!=EOF);
    ; V/ T, ?5 H  @/ w
  737.           fclose(fp);
    2 D& u" Q$ K! W$ w9 O& H
  738.           unlink(".\\DownLoad\\readme.txt");( D2 W0 B" ~5 X) c5 p
  739.           dwStartUpSteps=3;' d5 H6 [$ {3 C" H& G
  740.         }- U4 m% D' m+ ~9 r
  741.       }
    + t1 n& g9 T+ w0 X8 I. B* d5 G
  742.       break;
    ( i5 A4 @  X/ [9 P5 B0 z9 C9 z
  743.     case 3:
    5 M3 u: b3 {+ t, E1 Y# [3 ?
  744.       if(!Dn.Connected())5 ~' V# P* `, b& m$ k% ^( l! r
  745.       {; M9 C! @& {4 T$ l- C
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    4 s  y% D, z( R
  747.         dwTotalFiles=1;6 B5 u: h8 w; o# ]% A) u
  748.         dwDownLoaded=0;
      @1 V3 g& }; w+ w9 T
  749.         bSilentStep=TRUE;5 m: |) i% c3 {) s; ^
  750.         bCompressed=FALSE;
    7 {3 z: P6 ~! T7 U9 k( p9 e
  751.         strExtLocal.Empty();
    - n( y6 S8 s; I* J6 s, o6 X
  752.         strFullName="checkversion.txt";+ I/ K, F5 z; N9 m: A
  753.         dwProgramState=AP_CONNECT;
    ) E1 Y! h" z( l
  754.       }/ l5 b: Q/ P5 U9 W  L$ a" V
  755.       dwStartUpSteps=4;5 H8 b" W8 o: P  l, n7 f9 j* @
  756.       break;
    5 R& k& d) X# e3 _; V
  757.     case 4:
    4 U" y8 r+ I; G$ }
  758.       {
    ( b# \. |* s9 g: `1 T. c, r+ k2 |
  759.         FILE *fp;& q) _  f* ?, ~6 _, D' s
  760.         char szString1[128];
      {8 ]: `& n( ]& K7 P5 x$ Z* c2 Z
  761.         char szString2[128];, R: D' Q: e% |. i6 R5 P  q
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    8 q) P" q. y. H( `" O6 [! o1 ]
  763.         if(fp)
    & Z- e: F0 v5 C# q& b
  764.         {
    1 H2 [- V2 L; c6 Y
  765.           fscanf(fp,"%s",szString1);
    ! |! N$ E0 l. v. D1 o
  766.           fclose(fp);9 w/ S& Q: w$ E8 }* p% ]
  767.           fCheckVersion=atof(szString1);  x  A- D% m0 z$ f, {
  768.           fp=fopen(".\\checkversion.dat","r");5 G- Z1 W+ h( k8 C' b
  769.           if(fp), x0 u4 q. W% G3 z
  770.           {
    ; ^! p2 [( U0 g  N0 x
  771.             fscanf(fp,"%s",szString2);! x. s" ^0 j, |/ W; m
  772.             fclose(fp);0 w; p! v9 U( }  l
  773.             if(atof(szString1)!=atof(szString2))
    0 G2 @; N# h4 a, [+ s9 W
  774.             {: ?* ]9 Z' g! K3 K) r( f
  775.               if(!Dn.Connected())& H" j) e6 D4 v1 g
  776.               {
    - O0 k. t3 |: h( R. G  I) ?
  777.                 bFirstUpdate=TRUE;
    % s  R# t" J+ s1 ]9 |2 G
  778.                 dwTotalFiles=1;8 i; \) \/ ?2 Q5 g& U
  779.                 dwDownLoaded=0;4 Q* h4 @. L' \3 N) R
  780.                 bSilentStep=FALSE;
    1 \6 Z) f; z6 L: ?7 S  R4 `
  781.                 bCompressed=TRUE;5 u5 N% |! g' \! B
  782.                 strExtLocal=".\\DownLoad\";
    " {; V# @0 o% ~8 |" X" f) Y5 D
  783.                 strFullName="update.txt";
    : _4 p8 k6 _8 \8 d. @
  784.                 dwProgramState=AP_CONNECT;% W( T' T3 F# \, J% ]& |* c: Q5 [( X
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) }0 [2 K" {1 x1 d: `# v( G
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) _0 I# C5 {$ c1 y( y2 h: i( J) N- F
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) e# t7 _! G) a/ y1 u. t
  788. 4 T9 U1 P% s5 N% o& h8 [8 B
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + a: `1 z% v0 K( w8 C% L& x
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    9 _" G4 e9 v1 g& J7 V; z  G
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)" i# `9 x2 s+ h" i% k
  792.                 {0 K. t# o0 D% y+ f! H; a* m" e- @
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    & O. l& D# a0 `5 z
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");2 Y! e9 t' I* g8 z: Z2 Q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");) q) m% |0 H! l# U
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 v7 O* ^5 }7 x6 ?+ X" M/ q

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

1 o8 e3 r: L8 q" M" p5 B4 o
  R4 v! O2 A0 J6 ^  d9 h

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-26 00:37

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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