找回密碼
 立即注册

CSUpdate.exe源代码

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

% q, f+ i8 u0 R2 C) k
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , g  n5 P: a& ~2 m% T8 F
  2. //
    # ^/ ^, T  p7 ~* f( e  N% R) Y
  3. . V. x0 ]* b7 Y; T+ w
  4. #include "stdafx.h"
    9 _* ]" D; j2 Z: @5 \

  5. : i# X" D: p+ t5 n1 |
  6. //#define UNICODE
    & K4 k' z. a: E7 B
  7. //#include <gdiplus.h>8 S7 E7 Y" f" y) z! @' d
  8. //using namespace Gdiplus;3 Q$ f+ z7 O0 u6 N
  9. ) f% A1 {# s6 @$ D- {. B
  10. #include "RevApp.h"1 ?1 w+ q$ k- O7 ~( Y( j
  11. #include "RevAppDlg.h"
    % S+ i" g5 p2 y  l! P( N

  12. / ^1 B' o# `% b
  13. #pragma warning(disable:4786)
    0 O* f4 g: \* p
  14. #include <map>4 p1 V/ F% u2 e$ h1 N& ~
  15. #include <list>0 v/ J2 _/ n% L5 S$ _6 w
  16. #include <direct.h>" V4 c! Q/ u9 G+ K9 O2 C: }4 M. q8 [/ l: b

  17. , P. z: w/ N: H! S, O0 e1 |
  18. #ifdef _DEBUG; S5 Y% f$ i9 F) I" o& Q3 a3 F
  19. #define new DEBUG_NEW3 |! A/ n: G0 G) H* {6 |! \/ ~2 P
  20. #undef THIS_FILE
    3 Q9 [8 [/ l; R3 u! G# I
  21. static char THIS_FILE[] = __FILE__;
    , p" z) w2 e& v# m  t
  22. #endif- v$ V; C. x' q4 u: x% R+ O
  23. #include "SkinResDef.h"
    ; T( o! A$ |% f2 E4 g7 B8 j) ^2 m
  24. #include "ChangeBG.h"# Y" I- b7 v; |
  25. #include "AFXINET.H"( k0 h1 p2 R4 i; b( C
  26. : c0 j$ [4 g% W4 c0 D3 K7 y
  27. #define TRADITIONAL_CHINESE 0
    * ], Q$ u+ }6 j, [7 u0 \& I% M% K2 T
  28. #define SIMPLIFY_CHINESE 15 N- L( `6 |7 r# O
  29. #define ENGLISH 2- k1 ^2 D. g  T9 D: x- [: F
  30. int m_iLanguage = ENGLISH;$ C# m. J+ h: d# K& ?4 j
  31. /////////////////////////////////////////////////////////////////////////////
    & _5 }6 ~) _1 b8 `  `4 S
  32. // CRevAppApp( z+ e0 H# j; q) I- n2 @
  33. & y8 o* ?1 G; C, x! ?0 j' x
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! T/ i, y3 F1 V# {
  35.         //{{AFX_MSG_MAP(CRevAppApp)( b8 V$ J. r, S( O7 m% S: i! F% c
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.; c: c( r/ z* c! d
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ' Z3 X) z! d# r# F: g
  38.         //}}AFX_MSG1 A6 a8 Z& z* E- x6 h' Y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
      Y( z2 }5 j( T! j3 i2 M" r6 N
  40. END_MESSAGE_MAP()
    6 X$ V% Z, G$ H, m) Q1 f6 c' d

  41. $ s2 {) {/ Y8 V% z+ {+ \
  42. /////////////////////////////////////////////////////////////////////////////% `: A/ D) ^: d2 _, X4 G% M+ j% p8 B
  43. // CRevAppApp construction
    5 b; l1 P5 m1 Y* a& B) F
  44. - a* e3 ?: l. p3 J$ M
  45. CRevAppApp::CRevAppApp()
    & r" P6 p0 `( F" f, ?
  46. {
    0 m& X* W, V3 r6 F* W. }
  47.         // TODO: add construction code here,
    % \8 a0 b' m+ c4 q, `9 s! O+ V
  48.         // Place all significant initialization in InitInstance' G+ P" {, e) v+ T5 g
  49.   bDisplayIsBig5=FALSE;
    9 m- L* `8 z+ X
  50.   bRestartUpdater=FALSE;  a  z, a0 n  R1 |% P
  51.   bFinishUpdated=FALSE;
    $ k" N! S- ^* R1 B4 I- K
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;5 G+ `- @7 }% V5 p5 y/ Q* V
  53.   InitChangeDataBig52GBKS();
    + t9 A6 a1 j5 \$ `: S& T
  54.   InitChangeDataGBKS2Big5();
    - u' t% e6 `8 x  a1 `; M8 t
  55.         //
    1 T" _: V7 v) T1 {# u$ V- W2 o
  56.         bClickRunExe = FALSE;
    * d' q! I* X- H3 E/ z
  57.         //
    6 W1 c, P, O9 l: g1 }9 D
  58. }
    : m! z6 ^. A) v7 i

  59. $ b: r0 `% |) B
  60. CRevAppApp::~CRevAppApp()1 A, b1 }+ m' c4 Q" G- O! D
  61. {$ B( N! i9 \5 |5 O/ a
  62.         // TODO: add construction code here,' G" a: E% O0 H% C# n
  63.         // Place all significant initialization in InitInstance9 }3 b# P+ n5 W, V! f1 ~6 J
  64.   EndChangeData();5 l, q% m+ x5 t3 M+ j
  65. }
    0 o( K( {3 J7 C3 I- b0 r
  66. 3 o9 _: |9 y8 v" E
  67. /////////////////////////////////////////////////////////////////////////////4 K/ v* O$ M$ h: b8 [+ E
  68. // The one and only CRevAppApp object
    5 y- P) o. n+ o' V0 ^' |& u6 M9 X- I

  69. ' i9 V, S" x" h1 s
  70. CRevAppApp theApp;
    0 J1 u4 Z* n1 D/ p! I
  71. % L: l( [) [% B. h9 j% k
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    2 y" M/ L) c+ s: {
  73. {
    * n( [% f3 O5 m) |
  74.   int iEOF=0;
    $ {* b7 a5 B4 B  i
  75.   char szTempName[MAX_PATH];
    % ?+ S% n- o6 c& G' N! v9 D
  76.   *szFileName=0;
    ' e2 g( y' q8 l$ F
  77.   iEOF=fscanf(fp,"%s",szTempName);
    5 ?3 r$ Y, O: ?
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& Q* J, T5 ]$ u1 k& J, w( o' @
  79.   {
    7 _6 P) r" _/ J) i  p
  80.     strcpy(szFileName,&szTempName[1]);) S/ W9 M/ e  k; X5 W
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)5 {" _. w9 Z" @9 K& h
  82.     {
    . b  C; D5 `0 V, _
  83.       iEOF=fscanf(fp,"%s",szTempName);
    # f: h+ S) m1 n5 |5 O% t
  84.       strcat(szFileName," ");4 X$ u& T" _0 Y6 W
  85.       strcat(szFileName,szTempName);; d: t( V3 I6 B2 p0 q! v6 j% ^! E
  86.     }* N% d3 S0 w! P2 M" j5 I; ?  @
  87.     if(strlen(szFileName)>=1)
    9 X) T1 @* G% C7 ?+ i* M
  88.     {
    # d' n! S2 V- U2 e0 `: X; p
  89.       szFileName[strlen(szFileName)-1]=0;
    , n+ B* j( {: ~6 c# {- \4 j2 D
  90.     }. f% ?2 |( p' P; Y9 n
  91.   }& a, }$ T9 Y( C- i. r2 N
  92.   return szFileName;
    * h6 `; l8 Q: e' P3 w" A8 `
  93. }/ l: A4 x0 F8 y( U
  94. # e# \5 g( J$ x
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)! g) a) y: w. S; H  ?5 X8 u
  96. {6 T1 l( l! u+ H1 A% Y: O: R
  97.   FILE *fp;
    4 o( [& i; a6 C! p6 S0 `9 l+ B6 T; Z
  98.   char *key=NULL;  m, U4 e- J7 z3 B9 O
  99.   char version[MAX_PATH];
    1 F- y; C  D" X* U( n% Q5 m* N
  100.   LPUPDATEFILE file,olds;' P3 j. @6 v; ~* s
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 y" P! B9 E5 d7 Q  u# u
  102. / o' ?9 q7 w- t" z
  103.   UpdateList.clear();
    5 C) Y6 \/ R, Z# a3 }/ b
  104.   UpdateFile.clear();
    & l9 Q$ H% R+ Y1 [
  105.   if(GetFileAttributes(filename)==-1) return false;
    : p  ]$ S9 N; [7 q7 Q8 y& m: A" {
  106.   if(!(fp=fopen(filename,"r"))) return false;
    8 W5 u% N" J8 t
  107.   fscanf(fp,"%s",version);
    ; d& j2 W" `, w8 M
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }. V. H( g: @9 `; [+ G: X
  109.   while(fscanf(fp,"%s",version)!=EOF)- _0 S  \* s% m2 Q
  110.   {
    3 X% C  r  a$ K* P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; t4 `* Q/ {- K
  112.     fscanf(fp,"%s",file->path);3 }& r! b( |# a( `
  113.     ReadFileNames(fp,file->file);
    ! J! U( ~3 O1 I) H, X: N
  114.     strcpy(file->full,".");9 k) t- T- R4 p# }9 H
  115.     strcat(file->full,file->path);" Z  Z- n# O0 r+ W/ H0 }5 v
  116.     strcat(file->full,file->file);( `+ ~) L) {9 _5 o# J
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()). c* K9 e6 G; L( r! m& j& _
  118.     {  W4 ?$ J* i( ]0 P. }7 z) V
  119.       file->vers=(float)atof(version);5 j% ^% K. b4 H7 T: G5 x( g9 z9 f) n
  120.       UpdateList.push_back(file->full);
    ; p2 B+ N. ^6 Q$ b
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));7 B4 R& I1 u' ]- k# s
  122.     }
    ) h0 P5 N' u- l
  123.     else
    # ?7 \9 D2 [- [- r7 h8 E# F
  124.     {
    $ \! [; j3 c: `+ x
  125.       olds=(*p).second;
    ! g% Z; U1 X- Z1 V
  126.       if(olds->vers<(float)atof(version))
    5 b' ]$ s; `; E; [
  127.       {
    " |6 p$ m' U$ Y2 E  Q! J% }
  128.         olds->vers=(float)atof(version);  q- P2 G$ s7 R9 ~# S) `2 Y
  129.       }# J& P  ~, z% o; b
  130.       free(file);* ~  Q: n. E! V6 f
  131.     }
    % i, d% M% @  K, W/ M
  132.   }
    0 Q2 G6 F, w6 k7 [! |
  133.   fclose(fp);! w: L* @4 c" S& r6 v
  134.   return true;
    : X- t  F  a$ A: m
  135. }. r. _, A+ N+ z! i
  136. + L; a0 N/ i; w3 T
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ' X0 |& w- b4 k  p+ g
  138. {( F: y6 D# f8 [2 J* Z, b
  139.   TCHAR  szFull[MAX_PATH];
    - U, t; c/ F8 a5 E
  140.   TCHAR *token,*inter;
    9 u* g0 u2 m, ?8 b
  141.   *szPath=0;
    & _! O+ l. e8 K) @
  142.   strcpy(szFull,szFullPath);1 a9 O: [- o8 ?  g- r6 W2 `8 g4 f9 a
  143.   token=strtok(szFull,"\\/");% \! V$ }6 O) J5 d% H, e
  144.   inter=token;. k- e9 B: |/ C0 w. f
  145.   while(token=strtok(NULL,"\\/"))
    ( x/ U+ o9 y$ R9 y* Y& o- O
  146.   {8 w7 [7 j2 I8 M% [, d  J" R  ~0 @5 g
  147.     strcat(szPath,inter);: n9 W; X( j- j$ ~: z
  148.     strcat(szPath,"\");: ^6 G) p) h" y4 q
  149.     inter=token;! j' ?( p1 `" Y5 F
  150.   }7 T0 ?9 E3 z& M. v2 W$ y
  151.   return strlen(szPath);8 [  o9 v* i- p  f! B  G
  152. }
    ( @7 C2 _6 t& _# C6 Y

  153. * S6 B# h2 P; ^9 z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    - |/ r  T5 B& k
  155. {
    ! u% J$ M2 b. \9 ?2 D4 ~. l" t
  156.   DWORD attrib=GetFileAttributes(Target);  I, ~* d! D5 a+ f8 o# U; E
  157.   if(attrib!=-1)
    3 I+ z5 U  @  z3 b6 U) F
  158.   {
    5 a4 E* H$ s# p/ f  ?  Y2 A
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    4 a6 p0 l+ t; g( q8 A
  160.     {2 u2 ~/ J' u5 Z0 T! ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    . r, n# L* V  b+ d6 u, x& _7 `) a
  162.       SetFileAttributes(Target,attrib);
    2 p; i8 ~) x+ I
  163.     }
    # K& I/ B6 g: B  N' T( v
  164.   }
    0 v2 a4 {; a2 v4 c
  165.   CopyFile(Source,Target,Erase);
    4 Q" [% p' j: R3 c
  166. }2 X# G* H8 ]0 K- z! p( w
  167. / l1 ~0 H, B6 I" T/ F
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    4 ?/ i0 V! `8 k- i, s+ S. i3 h# x
  169. {
    * x- }+ v; ^8 L# J. e# K/ o
  170.      FILE *fp;
    + A3 x- ]! w9 M7 [2 X9 b
  171.      char  szBuffer[8192];
    ( i. ^+ Q$ e; W) j  o+ ?8 u
  172.   va_list  argptr;% I) ]% [1 \+ K, c. ]
  173. + H2 ^8 [, w6 V" G% b
  174.         va_start(argptr,message);, q! U/ ]9 a: J5 s# k: S4 s
  175.         vsprintf(szBuffer,message,argptr);
      e8 G/ w) V2 A
  176.         va_end(argptr);
      N' _( D# ]& _, \: f
  177.   fp=fopen(FileName,"a");
    , z# O& f( G. q, ]5 y: Q# v, B
  178.   if(fp)
    2 ^8 M: q$ E8 [+ c
  179.   {- h; R+ e3 ^2 x. N4 ]! u8 ]& V7 C
  180.     fprintf(fp,szBuffer);
    3 H9 C5 K) ~- y  T. b5 B
  181.     fclose(fp);
    6 D2 [6 O& Y# }4 P7 `8 P& f8 D. Q
  182.           _flushall();  T1 k/ [1 a1 D9 u
  183.   }
    4 y4 \, n+ q# a8 m% v/ l% e* v$ b# @
  184. }
    ! C- p/ M" v3 \$ d; N! @- l

  185. ) `4 \1 Q8 N5 W: l$ F7 d/ E
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ( |, X9 G0 i4 E9 ?5 \3 n
  187. {
    7 Z8 I8 n0 i$ F1 n7 a* s9 [% c
  188.      FILE *fp;
    6 Y- z) X5 _6 ?! _
  189.     DWORD  attrib;
    ) z# l- S. ?! q
  190.   attrib=GetFileAttributes(FileName);
    * U2 k/ A5 U, t$ b9 L( V' b* @
  191.   if(attrib!=-1)
    # V- Z5 R, f* |# H0 T( N7 f
  192.   {
    7 G4 b+ u$ ^. b' V. Z) N& j! R
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    - c( i, i2 h* i: m  Q
  194.     if(!SetFileAttributes(FileName,attrib))
    / C( Y1 [& y- S# o( T) s
  195.     {
    # r' d5 u1 A/ S' R
  196.       return FALSE;, l; Z) Y/ H; U( _' K
  197.     }- I4 W" a5 a/ C* [. Z0 x5 Z
  198.   }4 U7 }: F6 M  J/ L7 N& h4 V
  199.   fp=fopen(FileName,"wb");
    . D" s$ g1 O: V9 G0 Q8 N/ b: s
  200.   if(fp)
    8 [" A$ I. i+ W. ^6 a6 I! m
  201.   {
    ! \: T. H3 Z# h4 D8 }
  202.     fclose(fp);
    0 y8 v) k) X; [7 P2 j4 p* c9 p% u
  203.   }0 t6 n' p( @% E# s8 {
  204.   return TRUE;, ^& h4 \1 o. @+ f: d
  205. }3 M* C3 {9 B3 W$ R
  206. , [- J3 d, T0 Q* c0 N
  207. BOOL CRevAppApp::UpdateLocalVersion(void)2 P2 K+ `. r5 R& g* m/ B2 z
  208. {
    ' ^  J9 M# P, R3 A  f
  209.   char filename[MAX_PATH];
    $ P3 y1 N; G8 n8 J) P
  210.   LPUPDATEFILE file,olds;6 M& I5 b" T* g
  211.   std::map<int,CString>::iterator i;- P1 f$ |* y7 ]# V; g/ M/ F0 S
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ c1 J5 b9 v5 k7 K8 X6 d8 H) v" {
  213.   std::list<CString>::iterator l;/ [5 T+ J- D' \& O
  214. & K8 r/ ?) v/ d8 q2 Z5 H% {
  215.   if(bFirstUpdate)( b/ t+ a( C" H1 h0 Q8 C) R
  216.   {
    * c. M% x# J5 Z1 @+ H
  217.     dwCurrFile=0;
    : y; H2 x/ _* }4 \* O* I
  218.     bFirstUpdate=FALSE;0 u) Q; f/ W1 G' m
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% c- D2 `, j- {6 _- L- I6 Q
  220.     {
    2 K$ ?( \& C& o9 t( s3 U
  221.       dwTotalFiles=UpdateLocal.size();
    2 J7 d2 j" d* w# x2 l% l
  222.       dwDownLoaded=0;1 {, O& U2 k5 O
  223.       bSilentStep=FALSE;
    - ?3 r- O. f7 p8 [' @" @, _. m
  224.       bCompressed=TRUE;* k% r' q* f1 u8 Q' a& F( l+ Z& B
  225.       strExtLocal.Empty();3 Z: z4 f: ^# c+ b
  226.       strFullName=(*i).second;# v: n  p; R+ v* U( S
  227.       dwProgramState=AP_CONNECT;+ x0 R, |. T7 |9 B3 G4 u( ^
  228.       return TRUE;
    $ ?7 p0 Z: P; K  C; W! f
  229.     }
    % L$ a6 H& e. Z- I: W+ ?
  230.   }" B1 k0 o7 a  i0 d. v3 ~/ [5 Q
  231.   else if(bRestartUpdater==FALSE)$ C' z6 f. U3 q* v/ L
  232.   {9 W! p' r: {& o
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())9 a, Y& B  B& u6 K% Q. V. i% @! N
  234.     {
    & f/ \1 ?" x* I1 v0 y0 `1 A, i
  235.       file=(*p).second;" r& K3 q2 }& ?* J) `, ?
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    0 `; W  E* d7 f
  237.       {7 k$ j* ~# G' G% Q( v0 j6 |9 h% H
  238.         olds=(*p).second;
    & l( k. m# R/ Z3 c! Y( S' F0 u& Q
  239.         olds->vers=file->vers;' C! ?. N5 f& q, L' I( |
  240.       }
    % @1 B" |  {4 P5 V4 i
  241.       else7 G9 x. f* l- @) I- C. p% f
  242.       {
    6 E% k7 |2 D5 \
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; e3 T+ D3 d+ D: N) Y, ?. O
  244.         memcpy(olds,file,sizeof(UPDATEFILE));7 r, X5 K! V, O. L1 t& }
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    + ?" Y, K, W5 Z4 [2 U
  246.       }5 V& N% g3 c/ ^8 o- _+ p: q5 L2 U/ ?
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    8 f. W6 o2 D& R
  248.       sprintf(filename,"(%s)",file->file);
    ) \. b- o( T. b( @2 m! s0 N+ D
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 Q0 j: E* t& Y; E8 c' S+ J
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: P4 T. G# i+ f, P- @! [' z4 P$ M
  251.     }# s$ ]3 @' s3 C* r  I  ~
  252.     dwCurrFile++;+ t1 {7 O+ m' ]6 w  I
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 j0 P4 h4 {7 a) s6 {- _
  254.     {
    . f( T# e& h# c- e# M& ]  q
  255.       bSilentStep=FALSE;
    * a4 q( e3 K1 p( b
  256.       bCompressed=TRUE;& T' e5 |: d9 r
  257.       strExtLocal.Empty();( t" r' C6 e2 s
  258.       strFullName=(*i).second;
    ( _! L) q' Y+ ^( @% e$ d
  259.       dwProgramState=AP_CONNECT;
    # B6 f' W6 G. E
  260.       return TRUE;
    9 r+ V- ~6 I9 Y4 I: T
  261.     }
    5 \3 j- P8 c: k" R8 a2 C3 I6 v6 ]
  262.     if(!bRestartUpdater)
    * t% D: z+ Z8 G1 ?0 t
  263.     {
    8 s% N: R* F/ i
  264.       int iCurrSize,iFileSize;. n' B  y2 s% T' S% W7 G; s
  265.       iCurrSize=0;
    , U8 w- I' d, {2 J
  266.       iFileSize=UpdateList2.size();# x. \/ l* H# @: r6 W; r! R% u
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . U3 J) C. p0 t
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");/ I( P  L2 f: W! S# U6 v
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    / O9 K; r, {, y! a
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 q7 j7 @, H6 K0 |% \9 x
  271.       Fclearf(".\\update.dat");
    4 N2 j. M. `. @& V/ z- |$ ]7 g& J
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    : L2 p4 y7 Y0 X7 s
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)" C' C2 l& G) a! p
  274.       {
    ! q0 }/ ?1 E5 ~7 |, g+ N) @4 l
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    / w# k5 ]# k+ s! F% Y
  276.         {2 @9 w$ Q' u' \1 y
  277.           file=(*p).second;. X: A2 s4 z+ Z% X4 @
  278.           sprintf(filename,"(%s)",file->file);
    $ |* I$ g' d' n6 q/ y+ H/ c
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * x( u' M  A' p! G+ _% ~
  280.           iCurrSize++;
    ) Z8 v6 E4 B2 q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    * g- C  P, L" n8 r: }
  282.         }2 B- d$ ~' J* n
  283.       }
    & d0 }6 P+ ^( D+ j
  284.       unlink(".\\update.txt");
    - J8 g# R/ T+ d* h
  285.       unlink(".\\update.tmp");
      g9 N& {  `- a$ e; q
  286.       Fclearf(".\\checkversion.dat");
    5 ?# u1 k2 W' L  E
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# {! Q, g$ }9 e) s7 X
  288.       if(UpdateLocal.size())
    " I/ l# {% {  w. S! p: l4 G/ ?
  289.       {& b. M- Y  d  g6 m0 I9 b/ ]
  290.         UpdateLocal.clear();
    / h3 [2 |5 V8 p# c$ d; L
  291.       }
    1 x. {) |0 y! ^7 W
  292.       if(UpdateFile3.size()): b, B: ~6 `# N" r5 w
  293.       {
    1 h. B( Z1 p5 C  _' w5 |
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) I9 i) `% i; u7 H' d) g6 @& q
  295.         {
    ) C- q4 ?, k% U+ ~' |1 T  [0 o
  296.           file=(*p).second;
    9 d. b- e+ S9 ~: T, n; |8 N- c
  297.           free(file);
    9 e0 |8 O8 ~, Q) G0 U  @
  298.         }) [: f  u& B2 @" Y3 B& E3 s
  299.         UpdateFile3.clear();7 m/ n: r  M* y) J: [' |* D, {
  300.         UpdateList3.clear();  ?7 F6 [# p0 [/ a0 U0 [
  301.       }$ Q; t3 p& O. ]5 C$ F
  302.       if(UpdateFile2.size())
    - L& c2 V0 D2 F( t0 f; a# T1 ?  D
  303.       {) R- [/ H; |( {4 p4 ~9 t- u4 A
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# m, f$ n$ m$ W; F/ e5 c# X
  305.         {
    2 S1 f! k+ c6 r) j
  306.           file=(*p).second;
    4 \. Z# K; D( R2 e5 f
  307.           free(file);
    # O; ?- Z( L) W& y/ s' o( q; r
  308.         }4 N# ?! E. h. V7 q2 @
  309.         UpdateFile2.clear();6 S- \. a4 \9 j
  310.         UpdateList2.clear();2 z" I, ?, w) Q$ E
  311.       }
    3 s& ~/ Y7 }6 w( C
  312.       if(UpdateFile1.size())
    - @; \* S  |3 U* e6 {2 z5 p6 k( v& S
  313.       {# K- a$ U, h7 i* ~1 _
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      T6 ?( n2 t$ w6 L) U7 d
  315.         {7 ]6 |0 N" [) I/ w0 h
  316.           file=(*p).second;* s! @& {9 b  n5 R6 \) r1 B  x8 }1 g' q
  317.           free(file);
    , G7 e5 ]% X# i. n) _; v" u
  318.         }6 |" R( _7 z! Z1 y+ A9 G3 _
  319.         UpdateFile1.clear();
    1 R+ l5 g: N: `( I, M. F
  320.         UpdateList1.clear();
    / U3 Z8 d4 B3 n% Z
  321.       }
    % S& K* T* t9 \3 G/ o) c
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    6 Q+ `, d; ~. o! n" @
  323.     }0 I" X/ P5 x1 l1 ^/ y
  324.   }
    ! d# B) z) p7 m
  325.   return FALSE;* }. h2 ]- |& b$ |+ d3 v2 @
  326. }' F& \7 C$ {; W9 Q& E% S

  327. 3 d* p: R' E/ {$ ~* ~+ ~, }
  328. void CRevAppApp::ClearAll(void)
    1 m$ Z7 k  W. B+ m* P$ L
  329. {
    8 c: c. d9 X. M2 S& z
  330.   LPUPDATEFILE file;' b/ J* q: \8 a+ ]8 Q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) J. l. J3 f. i4 `$ E0 y1 M' [
  332. + W, l& {8 n  Z9 M( K& o
  333.   if(UpdateLocal.size())
      q& b- ^9 U6 _2 w" m
  334.   {/ T0 d) P9 C# ^1 v
  335.     UpdateLocal.clear();
    6 G6 P/ N4 M: A- n- \
  336.   }  c. p  \. e! l5 i
  337.   if(UpdateFile3.size())6 C9 K0 F! ~& S! S2 G
  338.   {3 `% _& G' _  ~% B, g
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" L! ^+ N: v4 w, k6 j( K2 f
  340.     {
    * ~! F, ^+ y6 Q, z: a
  341.       file=(*p).second;
    5 J$ ~; q% @: G5 _: ^9 F$ e0 G
  342.       free(file);; E# q7 A7 c4 e) x# f
  343.     }- {, s; w6 G3 p. A6 R- M4 N. p  ~3 K
  344.     UpdateFile3.clear();; U- P5 X8 Q* j( }! [* M; x
  345.     UpdateList3.clear();
    : C8 a$ m) _, L- r$ R) I
  346.   }' A9 ?9 \" }! T7 s$ p' s3 h; r
  347.   if(UpdateFile2.size())
      D2 P- N- v+ F8 f
  348.   {/ K% w) q' F* U' p' n( u
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : n* \4 U: }" P: `& p9 ~& k- F
  350.     {( p5 @# t+ t5 _; m( R6 P4 f# S7 ]( i
  351.       file=(*p).second;$ q" z% M% z: g2 d! Q. m) R6 @
  352.       free(file);: Z( B" Z4 h% V0 `- b- Z5 B
  353.     }8 l& @3 R$ d1 @
  354.     UpdateFile2.clear();
    # Z6 B4 c& I/ X
  355.     UpdateList2.clear();
    6 l2 K& E; Z9 p
  356.   }0 B- E8 P1 R: q& A/ j, i1 H
  357.   if(UpdateFile1.size())9 {$ H, ]& D* E. Y1 m, i* q& r
  358.   {
    : U6 T) v/ d1 d( Q4 z. |8 U  R  f# Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- r3 r7 F" f2 q, N
  360.     {
    , i& ]0 D5 W6 o8 G; L" {
  361.       file=(*p).second;% w% R% {% ^, O* Q5 ~
  362.       free(file);
    " r$ v8 y+ X9 w5 ~0 K8 j! {. r8 m
  363.     }
    & K0 ~* N+ c: Y- }2 |. M6 L7 j
  364.     UpdateFile1.clear();
    6 N, s: y) U, Q5 Q: b+ t* e5 d5 t
  365.     UpdateList1.clear();
    * h; n! O& W; I; B* ?' m
  366.   }8 p# J# h# [. Q# a8 }- u3 B
  367. }  
    & `! T  x7 o% X, O) @5 T/ O) A* `8 y
  368.   & n7 w( Y! J- ?
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    / y8 w) x& I+ C8 y# {
  370. {& o4 R/ m: @+ L9 i1 b" |* _1 z
  371.   int c;6 V: e/ h" q6 ?
  372.   LPUPDATEFILE file1,file2;7 }+ d; g0 g! z7 c# K& W  y; L. _
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    : }! O/ }! q& s- i5 ?6 f
  374.   std::list<CString>::iterator l;. L' ~2 b+ a7 A

  375. ; ^! O4 o0 g4 q6 `% I4 p
  376.   UpdateLocal.clear();) M) b6 j: f2 T& k  A
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);* u( F  S0 _& \
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);# Q& k' v# F) Q* X5 q' n! N
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);$ m. B+ p, Y% \. T. J' h$ X
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' _) z2 F" `8 d
  381.   if(UpdateFile3.size())
    ! r# f) _5 y; P( D6 [
  382.   {! R' X1 e. h. _0 v; H" Y+ _9 J; d
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    3 o( X1 _/ N' F3 p) n- C
  384.     {
    - j, {# R) O. `8 A/ T+ ]+ }8 z' [2 z
  385.       file2=(LPUPDATEFILE)(*i).second;
    1 K3 C" Y6 M4 U& e1 u6 ~) p
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' B7 h* K" t" `' d# k
  387.       {* J  `$ A8 H% S% z
  388.         file1=(LPUPDATEFILE)(*p).second;% j  i2 Z7 q# I& f0 z/ c9 b
  389.         file1->vers=file2->vers;# u6 |/ ]' \, {' @1 {
  390.       }) ]( `) c' b8 A" _
  391.       else1 u, _8 M2 Q+ n, H
  392.       {
    ) t: n* [4 [# F+ [3 O
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) ?% f& W8 S4 e; F* B2 r, S( X
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));- T- p0 y- E# B, ]0 G" l
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    5 ~8 W9 K3 F9 u6 b1 c
  396.       }
    ) R: }7 z8 L+ Z: {" A. U4 f) q4 X
  397.     }
    , j8 x$ {1 H! F! F
  398.   }
    4 P8 F$ ?$ E, h( c9 Z* I
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 ^2 k! T- ^5 G8 l1 p/ a
  400.   {, w3 M4 o, w& g* I, u5 e- T
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ) b0 ]$ {0 |/ L
  402.     {
    0 v- Q2 {4 I: @) [' I
  403.       file2=(LPUPDATEFILE)(*i).second;
      `3 R/ l' E/ X# e
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): L: m. }  |3 b* p' u
  405.       {
    / C  ?; C# s8 J, z
  406.         file1=(LPUPDATEFILE)(*p).second;
    ( K2 @1 _3 {3 d
  407.         if(file1->vers!=file2->vers)9 z( i& I6 `1 n$ _6 X# c
  408.         {* J" d9 m. ?, ~# w7 r1 B0 U- T
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 Q+ b  b% z; m0 I
  410.           c++;# a7 Z5 v, w6 d: f
  411.         }0 f3 {8 z- B' C, B: c3 s5 t( o% Z
  412.       }
    4 v, |& H/ J- O$ a# C/ h: G
  413.       else" f. y7 D0 V* r% |
  414.       {. r8 {8 l; z& h: C
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & b3 o0 W3 {" l6 B& }
  416.         c++;1 p. R- @& T5 e0 x/ A
  417.       }% V/ s2 j" h0 ~0 O- ^, k
  418.     }& Q/ B4 G8 f' n' Q1 E# i; Z  W9 e
  419.   }
    7 \" w  g" c. q
  420.   unlink(".\\DownLoad\\update.txt");0 R2 r9 ^$ ]6 }3 p1 o  G* F
  421.   if(UpdateLocal.size()) return TRUE;
    " P/ E6 @4 U0 y' X* o- w, ^
  422.   else                   return FALSE;+ K) w- r8 c1 ]. z# G
  423. }) ]* [. ^2 x* \9 B- T1 V) I
  424. - ?' x9 M, h" m
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"$ ]) L! @; L7 V1 h& a* g% f
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    . \) V6 [' H9 C9 {( A# e
  427. , y; }' h. e: h
  428. 2 j% Y8 ~6 c7 G' n8 w- [

  429. 0 A7 ]3 i7 o2 m2 b2 j
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 I; P# |* K; F# M( O, a
  431. {
    8 W+ m  g5 G. t+ W5 C0 A8 L
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    % \! Q/ Z0 \9 P
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / V. ?/ h; t& x9 B" P. m
  434.   {
    8 T" E# L- q2 c0 R3 ?% b8 _
  435.     char szLanguage[50];
    4 R3 `4 B- U2 g0 ~. e4 [
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* z# }% i" j, f/ v
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 h  ^3 S+ e1 L7 @9 M
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ M7 F; {' @' c7 k* u
  439.     else                                   m_iLanguage=ENGLISH;- U. H. h: r: y" d9 c3 L
  440.     char szRegister[100];. t) E; f0 w, k8 p% H6 {+ u
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : q2 |3 K' J) ^2 D% D
  442.     strRegsName=szRegister;
    , D6 @4 U  d5 P$ F; `
  443.     char szPatchURL[100];
    : d" P3 C, h. H7 C6 q6 L! N8 E7 }
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 e3 Y& K! P' H- A- @8 n+ g4 v
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" s6 ?3 o/ F0 H7 G1 D* T! i* A( s
  446.   }
    * l7 X  Z! h* J% P  a# z
  447.   else
    : ^0 e; V2 z1 ^. i: V/ m
  448.   {
      I# O$ a% z, o$ P0 X( C
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 h0 ?8 a: G' |7 J1 c
  450.     strRegsName=DEFAULT_REG_URL;
    ' a) U3 x* F) A" \" S" y8 a7 w6 m
  451.   }
    9 d3 l! I" }* c
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 h) k$ t. ]/ K0 Q  L
  453.   {3 s1 y% L! z8 D; A8 p2 J1 x
  454.     char szIP[50];
    ( ~9 [3 y8 Q+ ?, q9 ]
  455.     char szDIR[300];( ^: Z) _( |; X0 R# c# m7 g) t
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 p  ^! \9 g1 M; T4 d" F  h+ I
  457.     {
    + {3 M: Q* C7 a9 ^6 H; a2 h
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ) R7 O7 T8 W: @, O9 ~$ r/ C
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    % f( [1 _1 k/ c) a, z* I3 s
  460.       strHostName=szIP;
    8 [" p3 H% b8 ^7 p$ Z. u
  461.       strHostPath.Format("/%s",szDIR);
    4 a3 E. K5 f; n
  462.     }
    ; T2 r  a' S  i) x
  463.     else) B/ f3 Y) o( M* W+ v8 g, {6 {. j/ b
  464.     {
    : e+ `; d0 c  ?$ d7 j4 ]" S4 }- N
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( w" q9 @3 i' J0 N
  466.       {$ g3 z  D6 m8 R2 R1 h
  467.         char szLanguage[50];
    5 n5 b6 u# n- R; V
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  e) P: _. u! W* q' L2 j
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* F% O; Q, w% l+ K! _
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      o6 }* ]% _+ L2 t$ ]# I6 b3 f
  471.         else                                   m_iLanguage=ENGLISH;5 r- l7 k+ u7 l& B* [# L! y
  472.         char szRegister[100];
    ( |; L9 r! v" @: i9 a- ^; a
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ H, b+ ?  b; U  A- p2 E
  474.         strRegsName=szRegister;- c9 M) x( b: i& S! [
  475.         char szPatchURL[100];
    " R. o2 O- L; V1 K7 ], e
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 o  Y1 }9 _$ [  ~% F1 v- Q. C: p
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# l2 H! D4 }  l; P& k/ H! u
  478.       }4 O8 L+ Z& [- h& s% W/ O( E( P% V
  479.       else+ C4 L: T. j( {2 Y
  480.       {
    5 ^0 |0 n* B2 ^/ g/ p' u3 M% E! C8 k
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 g5 D! R1 [% @' P
  482.         strRegsName=DEFAULT_REG_URL;; D/ z& b& H% C7 N
  483.       }
    . g0 C0 _1 I2 U: K4 s
  484.     }  C  _" K- ^; F9 y7 k, L
  485.   }/ k9 f/ A5 R5 e
  486.   return true;
    % ]; R7 n' z( L) l* n7 r8 N
  487. }
    - i+ w  z' [7 i# d! P! o% b
  488. " L9 i, w6 m8 F! S: F7 e
  489. #include ".\ZLib\unzip.h"8 n# ?8 p- `: y9 w3 V3 W" T% g8 ^: L
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);, n! Z0 b' V5 e+ x
  491. /////////////////////////////////////////////////////////////////////////////
    3 g! Z0 F9 P/ X. ^) z
  492. // CRevAppApp initialization
    2 [( k2 R' U( t

  493. . x2 |' J/ |" q# ~6 ?
  494. BOOL CRevAppApp::InitInstance()
    1 u3 E; ^8 p$ e: g
  495. {; Y, A, m9 k0 l6 `. }7 V1 R
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    4 L. N) `, X* _5 ^/ c' c. S. K

  497. . d' c0 H6 r5 \7 a- q* K0 T
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 w& h& R) R1 ^
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . W- w7 x# i, y5 H* ~
  500.   {
    7 n1 q9 i6 @/ |9 U. s
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");' k5 G( U  x/ \5 k6 P
  502.     GetPathFromFullPath(szPathTarget,szPathSource);3 G3 U$ Z7 y3 a
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    / g& ], m5 d/ y$ ?/ N/ g/ r
  504.     {
    % D. n* L7 K9 R' j9 J$ b" b
  505.       strcpy(szPath,szPathTarget);
    + c  k; N* c3 g0 v( |
  506.       SetCurrentDirectory(szPath);; f& ?  M+ ?# l  w8 L& a
  507.     }; n8 z1 s) B( f  \
  508.   }
    7 [+ v, M4 @) U! L1 b
  509. #ifdef _DEBUG
    % `& _& [7 M2 [$ |! U* ~
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 X5 l- |5 ~7 I2 e* h3 C8 v2 o: \
  511. #else0 s4 M  a" o: ?4 u5 K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& m& q0 m# N, }. G- m) P9 W
  513. #endif) Q" I' U' a9 N/ W
  514.   {$ J- K3 L& U" ?0 ^) \6 B
  515.     char tempFileName[MAX_PATH];% h  T5 b) l& P- L- b6 i* m
  516.     strcpy(tempFileName,szPathSource);
    + n' h2 y0 h8 e$ y
  517.     tempFileName[strlen(szPathSource)-12]=0;. t( M# q2 i9 S) [! o+ e5 k
  518.     strcat(tempFileName,"\\$CSUpdate.exe");6 p' Y( c8 G9 r
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    $ M9 h- S" M' N, q2 Q% ^; i$ L
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + |- m( {' s: m2 Q! s- X$ o
  521.     return TRUE;
    # h2 X& m& C- \5 f
  522.   }: Q* S# E/ a+ I, y. X$ X
  523.   // Nuke 0118: Delete run.exe
    ' V" N# M0 a2 _9 a: F7 c
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    4 a' }9 r# t) L
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / a0 \1 q; x# j7 c, h  E- M
  526.   if(!ReadCfgFile("Config.ini"))/ i! E. y2 i3 P
  527.   {
      j( [: o/ R  R; F; n4 H1 d
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    2 ]3 {: O, |9 H: ?/ d# z
  529.     return TRUE;& Q/ O. a! ^5 I% R3 `6 J
  530.   }, v) s% [1 T5 U1 J9 [0 R9 d7 Q  w
  531.   HANDLE mutex;
    & S# H3 t  b8 J- ]/ Y: s2 r' _
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    . k! W7 U6 ]2 i2 h
  533.   {
    3 A$ p0 w. E. n+ D' N5 t7 }
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    / _% Q9 I) ]9 o. T
  535.     {$ S7 B( J9 P/ p. m  r: A0 U
  536.       CloseHandle(mutex);
    / \# \5 G( R; w7 E+ `3 Q0 Y- ^# b" J
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " r9 z  f4 Y+ m! T
  538.       return TRUE;2 y3 t/ r4 e# m8 P' B6 A) J/ o1 w
  539.     }5 h2 ~# g4 a- p) Y
  540.   }  
    2 G( f" |. M% P9 `4 C. ^: U
  541.   CloseHandle(mutex);
    / Y9 U. Z! g/ M, L2 L8 r$ Y
  542. # g; B9 f* S, }: s
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);* j2 @: k% ~' @3 W7 T
  544. + k/ j$ _( u2 {$ o0 Q
  545.         AfxEnableControlContainer();9 B6 E% U) ^; G8 Y2 }; m6 N: P
  546. 1 V- }! p, s1 U9 k
  547.   bCanUpdate=FALSE;* f; G% G  g& U
  548.   dwStartUpSteps=1;$ ^0 E' \  L! ?: m- ^0 Z* k2 j# [, s" Y
  549.   dwProgramState=AP_NOTHING;
    " ?0 O7 ?3 \$ N1 P: a6 \

  550. - L% J  F& H/ _: w' R/ j
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    6 U+ V1 E: j: y7 b! d4 H; E
  552. ! c! i" P  v" e! I" `
  553.         // Standard initialization9 f" E" m6 P' G8 D- x6 ]1 z  g
  554.         // If you are not using these features and wish to reduce the size  A% |! d5 X  {1 t: u4 F
  555.         //  of your final executable, you should remove from the following# e1 Z. D  C2 D- b0 h9 W
  556.         //  the specific initialization routines you do not need.& G; S3 x# Q) e; {* j2 ^7 F) y
  557. - a1 e+ `" s' h) B: R# f
  558. #ifdef _AFXDLL& I. V9 R* t2 P! ?" t/ o
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL2 `5 e6 |& j! @( v' F
  560. #else, Y  n3 K, d  I: B6 c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically. }; S: \2 e; J/ n- |
  562. #endif. v4 n( T0 C4 k" S% g/ O
  563. : R2 O& e: b! O; D
  564.   dlg=new CRevAppDlg;# A8 ~+ ^% ?5 ?* @
  565.   dlg->Create(IDD_REVAPP_DIALOG);4 A; y; R0 e( {$ @! Z$ E5 A
  566.   dlg->ShowWindow(SW_SHOWNORMAL);( r% a% H! E1 @/ u
  567.   m_pMainWnd=dlg;
    1 N# i' a) N3 z# D  r4 t+ ]
  568.   g6 R; m+ c: n
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);: `# ^: q. E- H* J

  570. ) V, o. \: d4 O1 P$ a
  571. //  GdiplusStartupInput gdiplusStartupInput;  b/ Y& }. W2 A! p6 e
  572. //  ULONG_PTR gdiplusToken;  ]0 e3 E3 |, Q# J+ K# o
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);; a* H% u+ P3 s) K
  574. ; A+ z5 r" O* S" |, X1 u, j- Q
  575. //        CRevAppDlg dlg;  k0 C& w9 v: n
  576. //        int nResponse = dlg.DoModal();( Y# u: L5 g- _* m7 v0 L( ?+ M  m
  577. //        if (nResponse == IDOK)5 N! \+ l7 D1 G( g7 a0 v9 D
  578. //        {
    7 Y$ d5 W6 j2 q8 l7 G" _9 C9 s, Y
  579. //                // TODO: Place code here to handle when the dialog is& c8 W0 g, y# n; q; ~) X
  580. //                //  dismissed with OK+ H# v' S# q1 n8 d! S$ E. l% M
  581. //        }% z0 @  S6 K+ I; ?0 |
  582. //        else if (nResponse == IDCANCEL)
    $ i$ m+ B) I, U
  583. //        {6 H( @! v0 i0 F0 a8 ^9 S
  584. //                // TODO: Place code here to handle when the dialog is; y  H5 ?, A8 o0 ?  |
  585. //                //  dismissed with Cancel2 B4 E4 q3 S  F1 s7 H
  586. //        }. N% p9 W2 m) h+ V. M

  587. , g. A. q' E; ~) T; y  U
  588.         // Since the dialog has been closed, return FALSE so that we exit the- ^! j. H: Z3 K0 e$ l; }
  589.         //  application, rather than start the application's message pump.4 k0 @2 P  E4 m* d
  590.         return TRUE;2 c5 ^& `& Z1 e+ H* Z5 l$ A- [
  591. }8 j5 _# t  u$ K5 ~( Z# v7 G) m$ t5 z! s
  592. 1 F' K) ~; i, Q8 a4 b
  593. char *CRevAppApp::strtok3(char *pSource,char *token)( L1 i7 q) B, Y( q- [" [
  594. {
    + T9 f+ r, Z9 d4 _
  595.   int i;( N' s5 ]5 w( J3 R7 H: p
  596.   char *szRet;; d, C$ n1 I, s- v7 t: l2 a% i* j2 E) C6 D

  597. 9 ~" g# M* N- x7 K/ L
  598.   if(pSource) { itoken=0; sztoken=pSource; }/ g5 o* E/ F% \' p
  599.   if(sztoken)2 L- D+ a0 m" P. O
  600.   {
    ) F$ y/ s, d# X# I/ s
  601.     szRet=&sztoken[itoken];
    0 w+ F! f, Z0 N% c# v
  602.     while(sztoken[itoken])' w6 X! P) r3 T: ^( n# u
  603.     {
    " d7 V# Q  U% V0 X$ t3 X
  604.       for(i=0;i<(int)strlen(token);i++)
    ' s2 C6 p, J9 g! g2 C
  605.       {( S7 C! _& L* W! u: h/ ?4 A
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])1 ]: Y7 o: \# U9 }, s
  607.         {
    5 w. i0 M1 t' b3 S5 ]
  608.           sztoken[itoken++]=0;  A* x% q  r6 c* M4 ?4 A
  609.           sztoken[itoken++]=0;; t8 b3 F  y$ {- k; ]: \/ z8 D
  610.           return szRet;
    9 \6 P: p* r$ U# P* i
  611.         }. J4 u3 f1 [; }7 w. j* D; ?4 b
  612.       }. N+ J3 h( S+ [" g
  613.       itoken++;6 D' G- l1 X0 p- N5 N6 u
  614.     }
    ' n: @9 t8 _9 o1 |
  615.   }
    % u5 ?2 E8 c  x) u, {% H3 g
  616.   return NULL;
    ; m% o; e7 C$ A6 {
  617. }# V1 z. W! k3 {

  618. : N* [, |3 m/ d+ R+ a
  619. void ProcessProc(long Total,long Current)* u. n  p3 w2 W# q, @% ^
  620. {
    " B% n( L) K! U7 j$ ~" C
  621.         MSG msg;
    ) [- l( u# F' I: _4 a' M
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    - n& q' {% ~6 j& ~8 H
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ( c8 s- r# b+ G' w( F( Y7 T' F, O
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    1 m9 f, A% U5 n) l& X
  625.         {: B# ?  w) u, f  Z: w, P9 Y' j+ V' z
  626.                 if(!GetMessage(&msg,NULL,0,0))
      c3 z1 _+ N" C# s# N+ [7 R* k' I
  627.                 {3 ~# W' ^/ t8 ?+ b9 w% t- v& A8 k" M  f
  628.                         return;* ~4 Y, `5 V8 ~0 E
  629.                 }
    1 u: l+ W2 J& v2 e
  630.                 TranslateMessage(&msg);! R4 O6 @) n7 D4 b: q
  631.                 DispatchMessage(&msg);7 y7 U  g& s% ~" {
  632.         }        & C: R. W2 D7 X  T( H
  633. }
    : q& z9 i/ Y/ I7 F, A
  634. $ w: r* {+ l) q8 g0 k" P0 r- ^! q
  635. BOOL bFirstChar=TRUE;
    ( P7 l% T( H4 P' w  }5 {5 x

  636. + D6 |7 {( R5 M7 M; s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; M7 P, m1 O( \
  638. {
    : {  U9 p6 o7 g; [/ c
  639.         // TODO: Add your specialized code here and/or call the base class* d; z% h7 n: X
  640.   switch(dwProgramState)! q+ t) r# S" V3 d$ o( U1 K" N
  641.   {
    ' M% W/ U+ @# }8 P4 H. r
  642.   case AP_NOTHING:) `3 l1 ]2 ]( v
  643.     switch(dwStartUpSteps)
    / k. z% o$ S3 s0 r. [) {6 `
  644.     {
    . m) j4 x: M( f; n( B
  645.     case 1:" k4 k! r- j; s0 [/ L' l3 b& r
  646.       {3 v3 n# |, n, p% h$ N- p+ j
  647.         int i;! J. |  O/ ~  \3 Z. i
  648.         CDC *pCDC=dlg->GetDC();
    6 P/ H' v) O3 p0 O; F4 b
  649.         HDC hdcwnd=pCDC->m_hDC;' _" j2 q5 f' ?  T
  650. //        Graphics graphics(hdcwnd);
    0 A+ [2 @( _" r4 G; F
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");$ n6 J, o4 @- ?& v" Y
  652. //        INT iWidth=bitmap.GetWidth();
    + Q% G0 ]4 H7 k) P* e
  653. //        INT iHeight=bitmap.GetHeight();' o6 M# F2 x8 A( d) y0 K6 e
  654. //        Color color,colorTemp;
    . Q- M7 A0 [# v, v# w( P
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)! P' A' t0 X% ~6 U6 V  `
  656. //        {; W  |# \+ x6 q, L) |
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - I6 M3 X) }& l2 w0 k
  658. //          {
    ! f+ V' ~+ \7 A
  659. //            bitmap.GetPixel(iColumn,iRow,&color);" x3 ^  J: P9 F0 L: ]# ~
  660. //            colorTemp.SetValue(color.MakeARGB(
    * e+ B% P5 [4 z% h% z
  661. //              (BYTE)(255*iColumn/iWidth),
    0 w# _) }5 p" r. q, @
  662. //              color.GetRed(),0 w1 G8 S$ J& ~( w) H; Z% N
  663. //              color.GetGreen(),
    + U, |, U- c# q- o6 {) [5 g" C: J
  664. //              color.GetBlue()));* k% u. j, \# H
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    . X5 ^. q7 r) e5 Y
  666. //          }; w! y) r9 m1 |: U
  667. //        }
    ' z" g2 b) h5 W! i0 l
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    2 D9 u$ \, \, w& a7 T/ C, w: w
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ ?4 n0 _) i3 r3 a+ B4 T- W: U6 I
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 M2 B+ r8 t8 G/ S, `; K
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' y: y7 n7 J( y4 b) N# r6 X
  672.         for(i=0;i<240;i+=8), @' q- @& ?( q. _  X
  673.         {
    9 h& w; P# O9 r. u: C
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ \- |0 ~! c5 B5 M) l, m% h* A
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 Q/ p+ R  I& `) P. E4 @8 y( p
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 @$ h% k* `/ o
  677.           Sleep(33);
      Q2 w8 J8 h+ l) f4 N
  678.         }" N1 O! i2 q! ~4 |3 k: H
  679.         Sleep(1000);' E) b7 X( d: e4 e; T# M8 q
  680.         for(i=240;i>0;i-=8)+ m5 ?/ z2 p/ R( b4 x
  681.         {
    ! t( o7 w& a2 D7 s
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' @3 t9 s5 W* s+ h: _* r% g
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      H  v( z% V- I% e- o6 v
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / G) j) l3 k" c+ q
  685.           Sleep(33);
    " g- k" T# c6 w$ D" D
  686.         }! L: {2 P# n: r5 C
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);/ q& J" H9 w' _$ v) \
  688.         dlg->ReleaseDC(pCDC);
    ' G% \$ [& c. U( S
  689.         DeleteDC(hdctar);
    & _; Q- @( G( T/ j% P5 L4 y6 K
  690.         DeleteDC(hdcsrc);3 j' I2 }3 m! T9 l1 W$ }% c- D
  691.         DeleteDC(hdcorg);
    4 Q3 ~) k- w0 C+ ^
  692.       }
    / K4 I+ T- Z: e8 ~
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ; }% A6 ~3 f( ^% e4 I: u7 U: i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    - ]" S8 V! ^" E/ v; x4 g& K4 z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    & p& H4 _( f+ Y) [# ^. b! e! T
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");; T* }% \& d. _2 Q1 p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ k- }9 @7 F8 {* n' l
  698.       if(!Dn.Connected())
    4 P. Y7 o4 q* B" C2 N4 Q
  699.       {& X  Z) M1 Y" Z7 Z( k+ r1 H0 \
  700.         dwTotalFiles=1;
    4 \" ?9 e6 y$ ?
  701.         dwDownLoaded=0;, ^. W1 D' n2 m3 ^/ v8 z  Y
  702.         bSilentStep=TRUE;
    ( p( _" ]3 O6 \, b) |$ F- _
  703.         bCompressed=FALSE;" a6 y3 k2 J# m( k$ S
  704.         strExtLocal.Empty();6 F# ~0 p0 w- g2 }) N# E
  705.         strFullName="readme.txt";
    . \) i# ^( P' b, V5 q3 M
  706.         dwProgramState=AP_CONNECT;
    / ^0 S$ c; `8 x* Z
  707.       }
    ; f) S9 l: t; G9 F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    0 u, g" m. c7 o. x* r3 S% A- O6 y. c6 |
  709.       dwStartUpSteps=2;
    % Q7 J) @* i. y. @% M
  710.       break;9 i5 z) s* s5 ^8 X5 f
  711.     case 2:
    : K! S) R- `9 r& T& }1 e% j
  712.       {: S4 M$ ?, ?! {3 f: D
  713.         int iEOF;
    9 ^7 C% a+ u/ }" J9 G; X
  714.         FILE *fp;# S, F$ V, T! h% t& e
  715.         char szString[512];, @9 f$ ~, b0 v/ o+ m
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");6 b  H1 l8 f4 G7 O5 \# V
  717.         if(fp)
    3 f' |# K! q6 L) M' b, A
  718.         {3 h) q7 j- h9 o' I
  719.           do$ L3 [8 \$ }- y, a% U# r, [% E, x
  720.           {
    2 z7 [% @7 `. [2 Y) g
  721.             iEOF=fscanf(fp,"%s",szString);. i; j2 v: a* ?8 V7 ?* P/ ?6 L4 y
  722.             if(strlen(szString))
    1 T2 ~) ?/ u2 u4 Y. o, V0 W
  723.             {
    9 W; L8 m+ [2 l& Z; b+ [
  724.               if(bFirstChar)4 W0 }! V4 `' s& b  z2 X
  725.               {
    # }9 B4 Y* _6 j
  726.                 bFirstChar=FALSE;' f) f2 Q& B+ H0 t; {
  727.                 bConnectIsBig5=FALSE;, d2 w* f8 q" z9 `6 d# \$ z# L# k7 _
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    9 ?+ i: f4 ?" n
  729.               }+ u& z# Z* k: z$ C8 ?8 f
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 o7 L5 |/ t# Y  L, F. E) _$ }
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    5 c8 V7 d9 l6 C7 ?
  732.               dlg->m_ListText.AddString(szString);/ S2 T5 p2 U8 l9 D
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( s+ {7 l/ O3 n% I. Q2 x
  734.               *szString=0;" m! d0 x0 `6 j: O
  735.             }
    * I% H) k9 G$ }6 G" B
  736.           } while(iEOF!=EOF);3 [  c' g& ^9 [  y; Z/ l
  737.           fclose(fp);- [1 x" L6 [/ l
  738.           unlink(".\\DownLoad\\readme.txt");
    & B5 R1 f5 h; V. i. `4 {, x
  739.           dwStartUpSteps=3;) J- d1 O; q/ i& ~& Z
  740.         }9 g* L0 L- H4 ]
  741.       }
    6 N& I! i; H" @/ T- ]
  742.       break;) p+ W7 J5 i9 E4 ^7 A) F5 U: K( Z
  743.     case 3:/ ?9 Q! _. C" Z
  744.       if(!Dn.Connected())3 K  c0 R" w( J" d2 n: U( a5 Y4 Q( q
  745.       {+ i1 S" t+ |: ]& k- D, K. ]! D
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ( m  C' l$ s8 v5 ]. U- p
  747.         dwTotalFiles=1;
    ( ?5 p0 D; z3 Z/ ?. h$ i
  748.         dwDownLoaded=0;
    : C  h$ n4 h6 a2 c
  749.         bSilentStep=TRUE;6 s3 B! D8 A5 L% o  j" L9 h+ c- O
  750.         bCompressed=FALSE;9 D! z8 E* s, y; |4 g" h; b3 @
  751.         strExtLocal.Empty();+ n9 d* s5 A5 ?4 F- [
  752.         strFullName="checkversion.txt";2 C7 J4 `- J; h0 u( O- |; W
  753.         dwProgramState=AP_CONNECT;; ~1 X. H/ y  _/ w
  754.       }
    , u' H, Y% |# c+ l% q1 s
  755.       dwStartUpSteps=4;7 ?6 V7 i4 p2 m* j6 E4 `
  756.       break;& D( I- v$ D: d) m9 O' ^
  757.     case 4:0 v# N0 c& r3 u
  758.       {
    0 F* _4 ]* y: r( C
  759.         FILE *fp;
    6 v! {% @, P) _3 y9 X% P  V
  760.         char szString1[128];
      g9 b# ]- d+ \9 B# Q' n
  761.         char szString2[128];
    ! f7 m) r2 }/ z" q0 g" Z) o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; E+ x2 X' @0 _
  763.         if(fp)
    6 g/ g! j4 z, R: M9 `  v3 l! s; Z
  764.         {. Z* u* y2 q3 w+ Z1 [3 |" v
  765.           fscanf(fp,"%s",szString1);
    & R) s5 ?* p6 a
  766.           fclose(fp);/ {& m+ ]) U  M  b% v: \5 E
  767.           fCheckVersion=atof(szString1);7 l3 I" Q6 {8 `; T; H/ T# ^- P
  768.           fp=fopen(".\\checkversion.dat","r");
    + }  Y2 X- ~6 ^- \# ~1 R
  769.           if(fp)
    / J$ {  V/ @" y# h7 i( E* T
  770.           {
    ' |, y5 G, U$ M; o& p7 z/ _
  771.             fscanf(fp,"%s",szString2);/ a* |$ {" C0 j. S
  772.             fclose(fp);0 c* h, w4 n2 U0 _2 y8 v! d8 e
  773.             if(atof(szString1)!=atof(szString2))
    , D/ [. O. j8 n$ I, g$ V9 _5 a
  774.             {
    1 W6 b$ I0 y; n* p0 s0 n- G
  775.               if(!Dn.Connected())1 k; i4 P& ~2 g- k: {- g) }
  776.               {
    $ z# F5 l( W; [! T3 V7 @, M
  777.                 bFirstUpdate=TRUE;; A# k: L# A) d7 l2 C
  778.                 dwTotalFiles=1;
    & E/ e9 d" d' ~: J5 C' Z7 I) V
  779.                 dwDownLoaded=0;5 r/ T, a* R3 b9 ~2 [
  780.                 bSilentStep=FALSE;
    1 {' ]# m: i% G" j
  781.                 bCompressed=TRUE;. m. \# D1 q( i% E6 z2 b" I/ k
  782.                 strExtLocal=".\\DownLoad\";
    , c; w) P2 V/ p% d" s
  783.                 strFullName="update.txt";
    # Y- ^4 Y* X" [, K7 w7 k
  784.                 dwProgramState=AP_CONNECT;6 D* M3 Q) p6 G0 ]2 S
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * d6 j$ U, N0 A! @
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      T4 u! J1 p3 Q+ W
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # k5 z* ?( ]. o3 h/ Q- i: k

  788. - s# z  M: M/ ^
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 a, @5 @: |2 h, t+ I
  790.                 unlink(".\\DownLoad\\checkversion.txt");  Q# l* O/ O3 E" \
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)  V/ v7 z: g5 y8 b
  792.                 {
    ( P; v  g6 G: c$ x9 }
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ' j( \  T5 r$ k+ R5 N
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % ^/ g8 W) v( ?5 R2 o
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");- c. }/ ]1 O" i. }4 ?
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 k! M3 h6 A* X$ w3 ^

  797. 1 @3 \5 j" Z) G- Z' C0 ], Q1 Y6 `) D! D
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 R+ s5 {% Y- x( p, k' R9 f
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + g- }4 L: Z0 |
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' V, i3 v; \/ Z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 p/ s2 `" ^8 ]8 `
  802.                 }
    9 D% i$ Z: c$ P" V2 f1 M) B4 M
  803.                 dwStartUpSteps=5;9 L7 T0 b8 l, f! O  v1 K  C4 `4 S
  804.               }
    , e! [+ ^, O4 X* d) n( ^$ Z) H3 H
  805.             }  F) b. ], u( H) p6 @
  806.             else: r: g4 O2 Z6 D2 d6 r3 w
  807.             {+ [! R6 E2 W3 U$ ?/ H$ Q
  808.               unlink(".\\DownLoad\\checkversion.txt");8 Z1 k) K+ o2 z: b7 \
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    4 Y5 i: v; u: r# K* n/ U- v$ P
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / S) @' g# k7 a* p
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ( @7 a4 j+ P* y  y4 `! T
  812. % ~- I, ~- V6 c
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ E8 Q6 H, t1 J" }) n- ~2 R! T  x
  814.               dwStartUpSteps=99;2 L$ T) q6 S: L9 ^( U" r3 w
  815.               bFinishUpdated=TRUE;( z) N0 D7 P: O
  816.               bCanUpdate=TRUE;) L: g5 A) ~2 L! w' `( n
  817.             }
    1 v) M7 v; U7 p& ~
  818.           }
    ! B/ N. t- }# p3 A" y( E4 S
  819.           else
    5 h$ T& j; m7 U1 P: z- u! r
  820.           {' D5 e+ J& Y- v, {. a7 o2 D4 T' P
  821.             if(!Dn.Connected())
    5 h: r! ]+ X2 S8 K. Z
  822.             {5 M- ?2 O! ~  q) T' h
  823.               bFirstUpdate=TRUE;( L$ E& m% o- Y1 |" p% F
  824.               dwTotalFiles=1;
    2 ~9 |4 X6 u8 J# d0 ~- z% \
  825.               dwDownLoaded=0;. e+ M' u. Q3 {/ f; [
  826.               bSilentStep=FALSE;  H+ v2 L$ c+ o8 @: ?+ ?
  827.               bCompressed=TRUE;
    ! e' m% T4 i+ v5 E( w$ G" n" j
  828.               strExtLocal=".\\DownLoad\";! w, X* Z' m. g2 o2 Q0 u8 T
  829.               strFullName="update.txt";
    / g: X! _; o, N3 h
  830.               dwProgramState=AP_CONNECT;
    9 k  e3 {8 S0 G) a/ h
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 ?. I2 e, M7 o5 l( ?# L
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 y7 z+ B4 d3 n1 S
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");8 R2 F! N  D# a
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 Z' k& ~( X/ Q5 f
  835.               unlink(".\\DownLoad\\checkversion.txt");4 [$ _2 T( _. i" K- u% c3 g5 v
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)7 Z# O: d% s1 f8 _
  837.               {: E6 [' l/ c% S4 a; x6 R+ j
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");" H4 ]. ?& t& X  R* P+ I: E$ r1 y
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    & k4 n% G/ |. K5 @
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    5 i: c# ?) |6 F: {; \9 {) w% K
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% b4 q" t" `2 F. Y# R( Y$ m8 B8 V
  842.                
    # Z) Z0 \6 F+ ]7 `5 ]: _! {: x4 H! m
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , }# Q+ x! Y" Y7 ~
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    8 Q6 n3 G7 f* V! d
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; W+ p" `" n- M* W2 U; T* ]' k* h, r0 i
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ D( g* y! a, O( `# I3 ?  |6 D. F
  847.               }
    1 Y+ w2 `0 f2 b; E3 U5 `
  848.               dwStartUpSteps=5;
    , i' K" X4 _) V# S8 A; g
  849.             }1 |! f& P$ }% q
  850.           }7 J' t( y/ Y! t& l  v
  851.         }+ |7 H; h7 A( ?8 D5 P! o+ |+ F
  852.         else
    " a9 O' |8 x* q# c, _
  853.         {/ V( c: `3 [+ g' |9 A& l
  854.           dwStartUpSteps=3;+ {1 [7 V- s, }5 I# V% k2 L3 N
  855.         }
    6 l. @: o4 e2 D; t
  856.       }
    8 z2 k! B# w1 `2 V2 j
  857.       break;
    . f% x1 O- ^8 X) A
  858.     case 5:
    3 C9 Z: f2 N& Z, `2 q# @" }# f+ A
  859.       {" C- j0 I: j! q/ w; ]# w% j/ l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    5 e: u; _  Q/ |9 [# Q  v
  861.         {
    6 Q! j. p- y! b
  862.           int opt_overwrite=1;  W6 [9 L- [; R3 _# k/ f9 K/ o
  863.           int opt_do_extract_withoutpath=0;- Y- d! S  K  z2 `# o
  864.           unzFile uf=NULL;
    1 m1 s/ F( g* y: a0 E4 {

  865. + `0 j# [6 `6 X7 R
  866.           uf=unzOpen("Wsa.zip");
    5 e1 K" f; D8 a3 \/ D2 Z
  867.           if(uf)0 }8 G7 C! F* i+ e, M
  868.           {
    - b- U) V* x9 M, P) f4 v
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    / ?" B$ r9 h+ G
  870.             unzClose(uf);
    1 ?! q/ X$ t& U- f" l6 S
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    , A6 g7 ^! w( z! u7 m, r
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    - S3 q8 Z, S1 a! [& S$ U
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    1 d! G  [' |# G/ ]
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! J+ R0 Y: C2 `+ W7 H
  875.           }; W8 `- T( O. k0 c* y
  876.           DeleteFile("Wsa.zip" );
    : o8 i2 s! F, m/ U' c
  877.         }
    / S  g$ g* {# k

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

% Z9 B: @- d$ `. p& v5 X

評分

參與人數 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-28 12:54

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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