CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
0 ?2 b7 d3 I. @; \% Q
  1. / RevApp.cpp : Defines the class behaviors for the application.! R9 L" V0 W9 ^+ y4 x* l
  2. //
    4 X* H! J3 }; [- k% E! m8 G5 O
  3. * k6 ]: c7 n/ X, J0 D& Y
  4. #include "stdafx.h"% [* l. \8 m) j
  5.   }& }& \- ~! a* L1 p
  6. //#define UNICODE$ D" |0 N6 ?; t) M
  7. //#include <gdiplus.h>
    $ Z' V5 W: y1 ?2 q
  8. //using namespace Gdiplus;
    & Z% {1 \9 I5 M7 m( |$ R- @

  9. # U2 w; n, H: B2 O3 a2 d1 F) o
  10. #include "RevApp.h"
    9 C& A7 h4 F" [$ N- Z/ A
  11. #include "RevAppDlg.h"
    9 X' W" d( `4 `6 x; v8 ?& e

  12. 7 B5 @; z$ b) Y* d
  13. #pragma warning(disable:4786)7 h% `6 |. t! ^- w; o. Y
  14. #include <map>+ H8 _" P$ m  q. [. ]& F
  15. #include <list>
    7 k8 S% F/ P( p
  16. #include <direct.h>* l  x3 y7 ^/ ~! z
  17. * Y' ?" t9 Y6 k: D# }3 D8 q+ l
  18. #ifdef _DEBUG
    9 d5 S4 ?; F! l* V
  19. #define new DEBUG_NEW
    + G# m, Y3 ^- g0 I/ K# `
  20. #undef THIS_FILE3 {0 r& h4 S; a8 z$ O) C1 Y
  21. static char THIS_FILE[] = __FILE__;
      `! ^/ p- ~8 H4 H
  22. #endif  t1 B2 {5 m) ~# {) U+ p: I2 G
  23. #include "SkinResDef.h"
    : x" U/ q" v. g. S
  24. #include "ChangeBG.h"
    / y0 C, c+ I3 V" g- ?. ~0 h) _, p
  25. #include "AFXINET.H"+ C. a  d% s) R% i
  26. 6 \# B* a5 m" H% y- K, F
  27. #define TRADITIONAL_CHINESE 0- F3 {3 ]/ N3 e$ Q7 j3 G( |
  28. #define SIMPLIFY_CHINESE 15 F' Z% V+ b5 o9 H" K
  29. #define ENGLISH 28 j# |& C2 ?- z# o, n* N( b1 P  s2 W
  30. int m_iLanguage = ENGLISH;
    3 S8 I+ ]' l/ K  a1 k& u& s; `/ N
  31. /////////////////////////////////////////////////////////////////////////////
    5 L; {* {3 s% D( L/ u
  32. // CRevAppApp( m! e1 M% ~0 ^# c  \. V4 x* ]5 V
  33. ! [6 s) e' T- @
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)/ o" x  @4 I/ v! V& a
  35.         //{{AFX_MSG_MAP(CRevAppApp)3 C) m! P0 W, i
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.( x- `5 H0 o, Y  i, H$ C. ?
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    / J8 g1 s' J% H  A1 }0 a
  38.         //}}AFX_MSG) t6 H# ~4 T; r% C; l% q9 `# ~
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)2 H  F" P; p- A& v
  40. END_MESSAGE_MAP()7 L6 E3 q: h' z8 U% G, i
  41. 2 [- n. D% U& G% l1 v
  42. /////////////////////////////////////////////////////////////////////////////) Y& v) Y% y. }% f0 [7 @' q& y
  43. // CRevAppApp construction/ E9 @3 X; ^+ t: L* H
  44. ( v2 {" A1 F9 H+ l' T
  45. CRevAppApp::CRevAppApp()
    % l/ ]" M9 k7 O, I7 ~- K9 T
  46. {& w4 G4 E# G7 H* ]2 a9 s( ?9 ?
  47.         // TODO: add construction code here,
    & E8 ?' p7 _) C. K& _
  48.         // Place all significant initialization in InitInstance3 }5 C' i$ l. B- W7 g
  49.   bDisplayIsBig5=FALSE;" x8 u8 r# N3 @! M# F
  50.   bRestartUpdater=FALSE;
    . i8 G9 I$ \4 [. i. X# |+ z
  51.   bFinishUpdated=FALSE;/ b  B3 c' ^9 b* N* X( e
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;9 Q9 y; I1 c4 U0 r8 r  J% g7 h  j4 A
  53.   InitChangeDataBig52GBKS();* ], G1 ?/ W  Q/ W* U6 m% I' L( i
  54.   InitChangeDataGBKS2Big5();
    9 s/ q& Q. u. j& P7 i) l6 P* z5 r- v
  55.         //
    4 \* V0 |! n' s+ w6 i1 C1 c
  56.         bClickRunExe = FALSE;* Y9 R* H1 E. a; j, G; P
  57.         //( Z$ C3 p  x3 L$ C" [  u
  58. }  f* R! N( X: [2 e& \4 `+ V! \

  59. / L( D: E2 ^3 w' k
  60. CRevAppApp::~CRevAppApp()- {4 J$ m/ i8 G2 I1 Y! z* w
  61. {
    ! ~+ s0 p/ l( A) Y2 F# a
  62.         // TODO: add construction code here,
    2 W, N2 k) i& D; c* C& X4 x0 }, r5 x' z
  63.         // Place all significant initialization in InitInstance
      a) J+ T( V0 o+ S% k
  64.   EndChangeData();
    , s' p& J& @+ b% p, G: y
  65. }
    # S( u( i* D  x& X' a

  66. 7 C! o1 Q* l, O
  67. /////////////////////////////////////////////////////////////////////////////
    ; B5 R4 B# @! }. W* V, K- U
  68. // The one and only CRevAppApp object  r" U6 p" m4 b6 M* u- Z) b
  69. ; Y6 _" z- g( O/ Z2 ?
  70. CRevAppApp theApp;
    & o2 Y8 h; @- A# N3 j8 g$ Q+ r

  71. & `6 l3 U4 u& p, o
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)! G( X2 W' C! m# q3 t
  73. {! P. i2 R8 i  R) x0 @4 C0 h
  74.   int iEOF=0;
    % f% i2 z/ G( X6 m' F+ ]
  75.   char szTempName[MAX_PATH];
    " \/ V) I/ Z! a% A
  76.   *szFileName=0;( V: b: E/ k6 n: s4 X- X6 s
  77.   iEOF=fscanf(fp,"%s",szTempName);; x; B0 L6 V1 |6 R$ n* U
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')$ l0 }& P! X. M, j8 C- k
  79.   {
    # f& |! H% `; ]8 h+ O0 N
  80.     strcpy(szFileName,&szTempName[1]);( c$ d: m3 g" M; S. k! C0 b6 ]1 t
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ( C9 Z1 n5 w+ g2 d0 ^
  82.     {, e9 r3 `9 G# o$ w# L  K
  83.       iEOF=fscanf(fp,"%s",szTempName);
    / ~( {1 D! N! K0 k
  84.       strcat(szFileName," ");
    5 X! ]* ~. F# t5 m8 S) z! p1 E, d
  85.       strcat(szFileName,szTempName);) ?# L0 j  E! S: _% ?- L, M
  86.     }
    , J1 R3 y/ d; t! t/ T' c* |% T* C
  87.     if(strlen(szFileName)>=1)* m0 S1 a! f7 d. h) Y' C) S
  88.     {& F) c3 U" K, t$ c& A
  89.       szFileName[strlen(szFileName)-1]=0;/ ?# k3 ]  S3 y# {: [
  90.     }  r  k  j6 w: h' c7 d
  91.   }' Z" A  S- _: j: h  k' T7 D* G: W
  92.   return szFileName;. \  w7 j# I: d9 Q9 B
  93. }- F* p+ f7 H7 g7 B6 ]+ G% A7 k

  94. ' b" }# e% r' p9 E& m, z  m
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)& R; n  i) T  R7 T9 ^6 t' k
  96. {
    : |0 ]7 v3 k& _% Q- ~) m
  97.   FILE *fp;
    % k7 P- Q4 {% R9 C
  98.   char *key=NULL;
    * H! P5 I( ~; r6 l  \4 ^
  99.   char version[MAX_PATH];. v2 h& ~5 l  k& \. L: P- O4 ]  Q
  100.   LPUPDATEFILE file,olds;; E% v5 t8 h% x* q# H
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 ~9 }* L8 F; ]8 V

  102. $ Z) C; s! f/ q4 R; a% i( h
  103.   UpdateList.clear();" C4 j4 [" s, y& }. L( ~% P
  104.   UpdateFile.clear();
    0 S4 ^4 k. |7 `; h
  105.   if(GetFileAttributes(filename)==-1) return false;0 D8 ?/ f7 r* L$ a% {
  106.   if(!(fp=fopen(filename,"r"))) return false;
    4 L, H" ~8 S" }5 [
  107.   fscanf(fp,"%s",version);# L; r$ Y. w' ~7 N5 ~
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }. C! z6 ?0 \3 P, U# b  d$ A! F
  109.   while(fscanf(fp,"%s",version)!=EOF)
    & c6 b+ ~' |' R0 D
  110.   {" m+ k- ]5 n3 g+ v# e/ G8 n
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- `5 z1 |) w* g
  112.     fscanf(fp,"%s",file->path);" Z3 P7 K* n2 }% z
  113.     ReadFileNames(fp,file->file);- A% a0 u- h# u! n5 N0 v6 v1 y2 w
  114.     strcpy(file->full,".");. K( \: X. {6 A; B8 c" k& |  o
  115.     strcat(file->full,file->path);3 \7 C  n+ `1 ^( `, i! n3 H
  116.     strcat(file->full,file->file);
    - N1 o- K. H2 `$ W, Y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())" n6 W" ?4 e) p  d& p5 W# d! [, x: g
  118.     {$ u4 f( a- I7 Q) ~
  119.       file->vers=(float)atof(version);! p7 z7 C& ~. x$ o2 D0 Q: b' y
  120.       UpdateList.push_back(file->full);) W/ f& v/ x# P8 L0 i/ x# ^4 D& z
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));7 N' l/ Y/ R' ?0 {/ \' _8 ~6 V
  122.     }
    6 H9 M3 V; p, U# |
  123.     else# w( F2 W2 I, M6 w5 I$ ^" B
  124.     {' |" w( K5 P5 R, K
  125.       olds=(*p).second;
    # Y+ [& z2 w1 n1 o% i$ i" a
  126.       if(olds->vers<(float)atof(version))! D) I' A+ U' N2 |. Y
  127.       {
    " T, C' H# ]/ {; g" I
  128.         olds->vers=(float)atof(version);
    $ Z' n' [" M" |$ b# p5 Z
  129.       }* q  r4 J5 A! r. r% Q! R
  130.       free(file);
    ! J! I. ]  [6 {# Q. k; G2 m
  131.     }
    " @. o6 E" a4 T; ^) g
  132.   }# ]4 w9 U) q* w  K& Y
  133.   fclose(fp);+ P+ [: g8 v( K7 c7 A: L& E
  134.   return true;; p* o  w0 q) j  t6 H* h
  135. }
    4 M* [/ y3 W7 F4 ]) @+ D
  136. . r& [. u3 _; I  @$ q* A0 D  k
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)3 ?7 Z% I6 L# W
  138. {
    3 h8 C! }% ?, J# q$ p& }- m
  139.   TCHAR  szFull[MAX_PATH];3 U; Y5 ?! k; @9 Y* c
  140.   TCHAR *token,*inter;4 O! y6 T& U0 ?" J
  141.   *szPath=0;$ r8 x$ S8 k9 d. _. ~& i
  142.   strcpy(szFull,szFullPath);7 `) J( V. h' y! @: y+ z* f
  143.   token=strtok(szFull,"\\/");
    8 `4 u# c* w" U& m0 o
  144.   inter=token;9 k" w: u# V# i  g, V& j* t
  145.   while(token=strtok(NULL,"\\/"))6 G8 V7 V1 Z/ _/ F6 e
  146.   {
    ) w# q( |8 _' Y6 D7 F) u
  147.     strcat(szPath,inter);: S4 R8 \  f8 b# X5 Q5 O; @- S
  148.     strcat(szPath,"\");
    % B( U' w' z5 ~1 W
  149.     inter=token;
    3 X  E* ]# T! v9 U3 {8 z# m
  150.   }
    $ x7 W. [9 U  F$ ]
  151.   return strlen(szPath);2 x7 h$ d$ F& N; P( m
  152. }
    4 ^/ H$ j: ]9 K

  153. 5 n# t# v9 w/ T/ T/ q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    * Q) g3 u' @; Y, h& o0 o
  155. {2 v% B( \. I+ J6 I* K$ H5 o
  156.   DWORD attrib=GetFileAttributes(Target);- q" O/ o' I: v; Z) Q( o
  157.   if(attrib!=-1)
    4 s. g* X8 b9 y. d9 E3 m
  158.   {
    2 E( e- l6 }1 x) D. B
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))4 R: n4 D. x, J' u
  160.     {, y3 u0 \8 P8 X5 ^9 t  u6 B
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    5 C$ @  Y" d, k
  162.       SetFileAttributes(Target,attrib);
    " @% e7 M4 m) }: P; O
  163.     }
    * Q' T1 ?$ c, m7 R  O% H- E
  164.   }. c& }6 R# N0 X7 z8 [' ^8 x, x
  165.   CopyFile(Source,Target,Erase);. b0 m3 s( _- Y+ j, O9 U: Y
  166. }' W# |+ Z9 I6 @& t/ w, v/ g
  167. + Q+ }) Y( @- K  e$ _8 x
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : X5 X. f( ]. r. @2 L# w
  169. {
    & @& {" [& H& \  [
  170.      FILE *fp;! H  L- \* b8 G& s" w
  171.      char  szBuffer[8192];. g, O& b7 g. Z. ^( W- ~
  172.   va_list  argptr;
    ! P* o& P" Q# S. F3 N
  173.   V6 q0 E5 a+ A
  174.         va_start(argptr,message);
    ! `3 K: G3 F$ x: \% _% ~
  175.         vsprintf(szBuffer,message,argptr);3 P( y& w& r! R, J/ ~* w
  176.         va_end(argptr);
      s2 q- o. H! L2 q# ]+ n
  177.   fp=fopen(FileName,"a");  K. h6 v* J$ W* P
  178.   if(fp)
    + r  B7 S  x! M( e. Z$ B0 D
  179.   {
    : s: W3 N  g! o: ?; p
  180.     fprintf(fp,szBuffer);' Y$ U( Z, q0 y  d
  181.     fclose(fp);9 \. ?5 F" f8 B7 f1 W. z
  182.           _flushall();% K0 o+ t- g% X8 I! \; x, e
  183.   }$ t6 b6 N8 s" o
  184. }- T# S. V: S6 D3 F) J
  185. 0 W1 t* t0 n- ^
  186. BOOL CRevAppApp::Fclearf(char *FileName)7 z4 p! s/ q  N$ w9 m" }0 d
  187. {
    / u8 @& Z2 z1 l1 U: b- u
  188.      FILE *fp;
    1 x* O+ i, ~0 P- c* C( L
  189.     DWORD  attrib;
    ! E* x) V9 L3 c! A
  190.   attrib=GetFileAttributes(FileName);
    7 _2 `# ]; n. ~
  191.   if(attrib!=-1)" V# z  D& l1 Z2 I$ p
  192.   {
    # L* e3 Y4 P  @: L! C% l
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);% Q7 k. \4 Z* d0 ?  ?9 n
  194.     if(!SetFileAttributes(FileName,attrib))% o* X6 P) a4 R6 ^4 ], h  F! m
  195.     {
    ' L5 z% R& N- r5 M- S4 s
  196.       return FALSE;1 Q) I3 e' ]$ E! y; Y6 e" B
  197.     }" E+ l/ \+ x0 w- i& P7 {: y
  198.   }
    " O" C% E' ^  O& i
  199.   fp=fopen(FileName,"wb");% z" Y" u( a  f$ O; L7 p$ B! u
  200.   if(fp)/ y$ r  h9 b/ {' l# E% ]4 w
  201.   {
    8 E8 i  z0 }; r  [6 f7 Q
  202.     fclose(fp);
    ! _! S6 A  c( f+ B' `" O# {
  203.   }
    7 J! l' i1 z: g  O+ A% |9 k
  204.   return TRUE;! |* s9 {! e( j- j5 a7 z3 U8 f
  205. }' K) I6 K) Z: R3 q

  206. 4 f+ k6 m( G1 ]3 N9 h$ n
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    4 d9 A: }3 ~* J* c
  208. {
    9 g6 a- @3 v( i1 \7 |+ {6 y4 z8 [
  209.   char filename[MAX_PATH];7 q2 v9 @7 \( e3 z" F9 r: Z; ]  T
  210.   LPUPDATEFILE file,olds;8 V# J. o2 f& g4 F  i
  211.   std::map<int,CString>::iterator i;6 z- Y# [; q5 p8 ^3 ^7 z# _
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 X0 ~; t0 J  ?9 }, F
  213.   std::list<CString>::iterator l;  B& a6 W( P3 v

  214. 5 a( x+ o: X2 Q3 l1 k4 Y0 b  Q" U
  215.   if(bFirstUpdate)
    2 l% N5 A9 X9 I' l+ a* o
  216.   {5 w; d, s8 K; k9 M5 C4 o% |% f7 h
  217.     dwCurrFile=0;
    ' d' T+ u% N7 F) L6 g5 G( s% u4 P
  218.     bFirstUpdate=FALSE;4 x. H" w4 B* d* a8 p
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% w0 p2 g" z1 m7 |* w6 {
  220.     {  N8 p( e* N% l- u( @4 @1 `: e' F
  221.       dwTotalFiles=UpdateLocal.size();
    8 M% P5 M: I0 f/ C
  222.       dwDownLoaded=0;
    3 u( ~+ J# o( f2 F3 _
  223.       bSilentStep=FALSE;5 c* [% C0 G* Q6 ~. b: f
  224.       bCompressed=TRUE;; d  U- `. E: w& {' u9 F) i- C
  225.       strExtLocal.Empty();, B( {# l5 Y0 h+ s6 N' u
  226.       strFullName=(*i).second;
    ) I% \6 i# o0 m
  227.       dwProgramState=AP_CONNECT;$ M8 j7 D9 h  \/ d( g- @, C
  228.       return TRUE;# c) Z. C. L4 A- l, Z
  229.     }: v3 G5 w. I4 A' `: B/ H& o
  230.   }  c! B1 m4 W: C# @
  231.   else if(bRestartUpdater==FALSE)
    8 |+ b2 g/ o+ |( C
  232.   {" B" u: @/ w; N8 P- W
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 g( v2 c" H7 j2 K
  234.     {6 D$ d: Z: p* b4 q, |
  235.       file=(*p).second;2 U5 X9 L5 Q+ `7 J5 j* h
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    , }" T$ }* S* ?% a$ g1 ]" c
  237.       {  `5 b0 N! n' C  o, [  R& g2 `
  238.         olds=(*p).second;; t0 P( Y: h* _2 c
  239.         olds->vers=file->vers;
    , j" c6 k; e: ~0 |
  240.       }
    9 F* F/ _) p8 D6 ]" m- t. w
  241.       else
    0 c' p' u, ]  @- h) K
  242.       {8 |- Q* E" p" \* o% z: A
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( l. n5 S9 I; t3 M
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    # Z. \  k* Y- ]+ ?
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ' r( ~% O+ X" o4 n
  246.       }3 C6 B' U+ c2 b" M8 s$ q8 a) h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    - `5 n2 C$ O9 T1 Z5 d
  248.       sprintf(filename,"(%s)",file->file);
    / t" T# O; \. F- O( }( T9 x
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 A. k$ F& z) d* b4 H
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }/ g! Q* M7 B; {  K! Z
  251.     }/ T" s+ d' n6 C( R) f3 P
  252.     dwCurrFile++;
    ) m8 k0 j+ c4 L% ^2 P2 f+ v$ l
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ _) M4 H  u1 L" N
  254.     {6 j( K; e, G) I( v2 ^( I4 {
  255.       bSilentStep=FALSE;3 A& I3 i" [# H" X9 y3 b0 h
  256.       bCompressed=TRUE;
    " `3 l8 r( y" {+ Z8 ~
  257.       strExtLocal.Empty();
    0 J$ P2 k# _2 X9 G6 o
  258.       strFullName=(*i).second;
    0 Q, @1 Q8 C; P3 U6 N
  259.       dwProgramState=AP_CONNECT;
    $ ~4 c4 v% K7 h, @" }: h; ^; _6 M1 {
  260.       return TRUE;
    0 j8 ^7 o- _- ~4 [
  261.     }
    9 |2 f1 d/ R; H& v6 v/ x2 _
  262.     if(!bRestartUpdater)- z6 }- |2 @0 |& {
  263.     {8 J+ u+ k7 K) m$ m
  264.       int iCurrSize,iFileSize;
    0 z4 c& x* q# I/ ?# a7 v
  265.       iCurrSize=0;7 q8 H& C" g4 R1 g7 _: p$ @9 o. i
  266.       iFileSize=UpdateList2.size();$ d2 {& l* X3 B+ n( N
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");3 X0 \) G4 I# U7 }' k* n
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ! \# Q( {( p4 ]7 ]( A& P5 @6 Q, ]
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");) ?! o5 x: t' t( |5 }  }
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ Y( N5 P, u, S) K8 _% n
  271.       Fclearf(".\\update.dat");
    5 E2 r. r/ X& d( @: A7 q
  272.       Fprintf(".\\update.dat","Bloodyf\n");4 B+ Q- J; ]3 P
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)/ Z; c; D! l, M4 S, Q
  274.       {4 [7 u1 B. ?, u) M% I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())( C9 r  o* b2 @9 Z7 e6 ~+ q4 h
  276.         {
    5 O2 T- @& ~% q+ e  d8 Z! g
  277.           file=(*p).second;* ^% ?. F- i2 x. \% l
  278.           sprintf(filename,"(%s)",file->file);& q3 E/ A/ d" S4 U  d
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% x5 R% V9 n/ I1 x
  280.           iCurrSize++;
    4 E6 C9 n! g5 m  }' b
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    6 ]) K2 c+ J% H2 s
  282.         }
    $ S% f; q. r  J1 J- {8 S; s' U5 `
  283.       }) J, B! A3 ~$ [0 E, l* _
  284.       unlink(".\\update.txt");
    7 w$ p0 K9 l3 p; |
  285.       unlink(".\\update.tmp");
    # w: X) x. C3 ?; p
  286.       Fclearf(".\\checkversion.dat");1 L' ]8 F- E) t0 g1 v! x1 X. j
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    - Y1 K# M, w, M8 s" p  o( y( H6 [
  288.       if(UpdateLocal.size())
    / J9 S% V7 q+ J1 e  B* M" M
  289.       {* r1 [% {6 }/ ?  ]
  290.         UpdateLocal.clear();5 ?/ ~  m; o4 @6 Z6 ^# m( J+ R+ O
  291.       }
    9 A/ D% U/ K& d
  292.       if(UpdateFile3.size())1 p* |9 P$ k1 c
  293.       {
    0 o* `& s0 g, B3 p: W+ D! e) @
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! w* _5 I5 z6 i1 @) m& q
  295.         {
    0 I8 P) n2 L0 Z
  296.           file=(*p).second;3 N$ j3 [: I  H: @$ E6 e; D* H
  297.           free(file);
    & s4 f, b- O8 h5 ?
  298.         }9 o) X# ^7 w  N7 K5 q
  299.         UpdateFile3.clear();9 w: c3 I2 U5 Y0 |
  300.         UpdateList3.clear();' s2 E; c; F% f
  301.       }: S3 m" S7 K# F' I& q' b
  302.       if(UpdateFile2.size())
    - \/ t) a2 r6 Q
  303.       {0 Q! b. x+ U5 I. i
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 H/ M; w. D! D) i
  305.         {
    $ c- t6 w+ y" E* Z) @8 @2 X
  306.           file=(*p).second;% W! D+ }. ?6 G
  307.           free(file);9 F* q- M' J/ \0 a4 X
  308.         }" E9 U7 a5 x( ?% ~8 H
  309.         UpdateFile2.clear();7 {; U5 T# x, L) ~
  310.         UpdateList2.clear();
    % Y( Q8 \7 B7 |. n, p
  311.       }
    3 ~" g' Z4 g2 I2 Y) ^) @
  312.       if(UpdateFile1.size())* R& h: o/ U1 F" Y6 Z: P9 }" B
  313.       {$ w# `  Y, R! N% c
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 \. [3 s" f! E8 l1 G
  315.         {& O, ]( l3 n5 Q+ S9 E! @- k
  316.           file=(*p).second;
    & M" E5 [1 _+ F! i8 f9 m; h
  317.           free(file);
    : A5 Z1 z' ~; g' S
  318.         }
    % y  G8 a* e( r5 z
  319.         UpdateFile1.clear();! o- Y6 G+ S: ?1 U) R" q! n- L
  320.         UpdateList1.clear();
    9 U: P. a( o3 N2 P1 n  A! Q
  321.       }% E! o0 b* o! O, [4 X7 {# G
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));( V( k- D$ O! I8 H8 u
  323.     }
    8 w) \: H9 A: y$ j  L: C" s
  324.   }
    / |7 N0 M3 U, ]: A! Y( @1 w
  325.   return FALSE;) x+ a2 X2 `  G* `+ c" \2 L
  326. }. m  T, `+ Y; H, A4 Q
  327. " f* v" E2 U! s% |: H- s
  328. void CRevAppApp::ClearAll(void)
    2 {9 n- j3 P5 Z$ a4 A- M5 g5 C) n
  329. {
    ; h" w; o* u( x- |4 u
  330.   LPUPDATEFILE file;
    ! m+ s( ~2 ]$ W& d+ E0 I
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 }* d  w. g3 I7 n

  332. ; n# R% n  W5 N' [8 h
  333.   if(UpdateLocal.size())
      N# L5 x4 s8 v1 l& o4 R1 U
  334.   {
    8 A9 J& i' w* {7 C2 p
  335.     UpdateLocal.clear();; d( e$ m5 |) }% t
  336.   }
    4 H6 f/ d( E9 o! z/ ]/ m
  337.   if(UpdateFile3.size())) s  u, C1 {: ^" u0 u
  338.   {7 U9 @/ q6 ^0 z' ]
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 @- l  F* r; O9 Y+ F7 U' [
  340.     {
    6 [4 ~( p6 R; ^
  341.       file=(*p).second;/ `3 e* M( s* u) }+ p, C. b
  342.       free(file);
    : _" i  I+ c) D  q
  343.     }
    " k5 c  O6 d1 `  I. D# G- X" i
  344.     UpdateFile3.clear();1 e" C: V- o$ O/ d3 [$ [
  345.     UpdateList3.clear();- {% Q. @& r; d3 m+ m1 X3 c/ M
  346.   }1 g+ {7 S% x4 d- }/ c
  347.   if(UpdateFile2.size())
    8 A) `$ G" [! {3 a, m7 j5 ~) e
  348.   {
    , X6 Y0 f) r' W5 B) @
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 A# N: i  x$ `" r5 h$ a! W
  350.     {
    - n6 y. B& [, y" F8 z0 W" `: \
  351.       file=(*p).second;9 q! z9 x3 D6 X  N. b3 [( N# B2 W+ e
  352.       free(file);* P  t; f8 H& P( s  U
  353.     }
    # |5 ]6 I" t" v  Q/ A
  354.     UpdateFile2.clear();
    * _" ]! q9 `/ N# _
  355.     UpdateList2.clear();9 U" _: x! p- I' r" |2 T* O; f
  356.   }. e! _8 A$ D, y  Y
  357.   if(UpdateFile1.size())2 l, ~3 E' k+ j* R
  358.   {6 W0 g8 d. s. x$ b' i5 h+ y) g' \
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & g8 \7 l$ ~4 S/ M1 [
  360.     {3 n( F5 w1 r+ s. \
  361.       file=(*p).second;
    . ?8 Q! H1 @; N
  362.       free(file);% j5 f# _7 m3 i& P' v
  363.     }
    , V" u& V! T/ m
  364.     UpdateFile1.clear();+ a+ M# n" d" |9 ^
  365.     UpdateList1.clear();5 \% t1 n. Y# E
  366.   }4 i: \6 S! r0 B6 v0 }
  367. }  9 O% m6 S. h8 C1 {$ E+ n3 Q+ g  p
  368.   $ [6 A$ g6 N6 ]6 _2 @
  369. BOOL CRevAppApp::CheckLocalVersion(void)# w5 b) I0 X8 F' o5 a! s5 T
  370. {
    9 T- d; D# Q3 l- P3 z) l
  371.   int c;
    , m! y5 @( F# q# ^6 o
  372.   LPUPDATEFILE file1,file2;" ~/ X2 U( F( g# [
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + ]4 M& V% S: O1 T( Y
  374.   std::list<CString>::iterator l;! i( B2 z& ~1 {- e

  375. 9 `6 d5 z( g' |. P
  376.   UpdateLocal.clear();
    . b- |- z0 s: k, r1 R& U
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    , @3 {1 U1 X3 _: y1 ]. m  C
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);1 [, k0 v; i7 |1 Q3 X" i4 P4 ^
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ; v) A% I8 r1 G9 `
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ; k( d, p, @" _2 {% p
  381.   if(UpdateFile3.size())
    4 C% }6 i, i, e: }  p
  382.   {
    : P* F7 h! q3 q; [, D/ O0 Q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    : z. Q' a& y, P3 `. n
  384.     {
    - c( G. D# ~2 e3 v
  385.       file2=(LPUPDATEFILE)(*i).second;4 h4 E# D0 T8 `! @9 ^
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 w0 M/ D4 {+ Z8 M% e
  387.       {
    ; B- U/ N" J+ `& Z( E
  388.         file1=(LPUPDATEFILE)(*p).second;% E( Y+ d. _/ `
  389.         file1->vers=file2->vers;
    8 S9 |8 R5 t8 L( I' c, _
  390.       }* ?) Q4 F: U9 H1 ]4 [
  391.       else
    9 z  h% F- @5 E7 E( l; r' h
  392.       {1 y0 p! H2 g. e6 V. i1 @$ ~
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( K& T) f* y1 O
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));: o. M4 T2 U( r* ?: b; Z2 g
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - G+ y3 S! g, G* x" p: v$ @1 G' S
  396.       }
    6 n, `9 D. e6 v' n
  397.     }: v: y4 |/ b+ ^' g4 c
  398.   }
    9 |* l& P; l  ]/ G
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % R* r* a: Y7 c5 j( ~. o
  400.   {, P7 @+ F% a7 O1 G- @5 o+ `. d
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- A8 l, o; k7 j' Q" c6 o
  402.     {) i: c) }1 W6 `; g* M: F. N
  403.       file2=(LPUPDATEFILE)(*i).second;$ J  |2 C2 Y/ U2 ~/ C$ P
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ {, l) F: E& z
  405.       {( T; t2 A  {8 f9 W% N6 d
  406.         file1=(LPUPDATEFILE)(*p).second;
    ' m. ^2 Y1 B" K5 ]. s
  407.         if(file1->vers!=file2->vers)4 Y0 C( X/ U& x
  408.         {
    ' X2 |& T, m' r' i& i
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + r3 h6 A2 g9 E& K8 K
  410.           c++;
    9 s# g8 U7 r$ k0 D0 W
  411.         }0 h7 W/ r3 }9 }- q7 C# a
  412.       }
    5 n' x1 [/ F9 [# d% i
  413.       else! t7 k: ^6 u: e8 b% M
  414.       {
    0 g: |2 c2 F; w$ b
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" q1 P- \$ @$ V- s# s" K) U
  416.         c++;
    ) W( V  [+ K7 r# ]+ H1 d
  417.       }
    / w/ t3 ^4 w6 E# G, f- O0 [- @
  418.     }+ u* c' ?/ Y5 }2 ~/ t# e
  419.   }
    * ^' k) B) F  ]2 D* M6 _' g
  420.   unlink(".\\DownLoad\\update.txt");
    6 ~2 g8 Q  J' m/ y% z
  421.   if(UpdateLocal.size()) return TRUE;
    / o( S0 m3 [0 Q" f; X" g: F8 P
  422.   else                   return FALSE;
    $ Q! j3 l6 T8 B
  423. }- I* l, H( }$ [1 m: ?- ?! t" \, l
  424. 4 \6 f) A2 l! K$ K; Q3 O/ U# Z( b) t
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"% }2 ]0 c, r0 d0 M% `  {$ X
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
      Y; C1 F+ R" R: E/ n  o

  427. * \. A7 o5 V3 N

  428. / l: e" ^" w4 Q# B5 [# q
  429. ! H# y4 o. y9 i$ p& K4 r  L
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    & r; ~' @3 t; y
  431. {. R# v' ?# S' n, q- L0 i& q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    & L% ], |: c4 D' h$ @; Y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 o$ L4 c! r/ g, w1 R  H
  434.   {
    # }' ]9 w8 w! G/ h# R1 n
  435.     char szLanguage[50];6 g' t& E$ B6 i! I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & Y9 _3 I5 G+ D: p0 \1 [0 a
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * {) \4 Y( p/ D( y' a9 P
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' _# W% y1 X. G+ W' S0 q5 k
  439.     else                                   m_iLanguage=ENGLISH;; j1 P& a9 c5 e) M1 h7 J8 R0 H
  440.     char szRegister[100];$ w! M2 F4 Z# m# O
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ( Y1 V; z7 b8 y" y  L- }" h
  442.     strRegsName=szRegister;
    ' o6 a3 i2 z2 [4 o# E% b
  443.     char szPatchURL[100];$ N+ U) Y( F" H% r9 G1 ?
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 j8 X: G% T) e& L  s- \- r; p, v
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ U2 ~, v( A7 F! Z+ i7 b1 l1 M% I
  446.   }
    & G& w( S: G$ n! L6 a! b1 d
  447.   else
    $ L$ Y+ F) Q6 v7 w& c* n
  448.   {$ f$ V# t7 _+ T5 C" j+ I
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 S! Z% U3 b6 ?1 V
  450.     strRegsName=DEFAULT_REG_URL;
    ; N2 x2 ?+ N8 M7 I$ c
  451.   }
    - W- \. a- _0 C8 q0 N, z
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    8 [# s8 H! A, T5 h
  453.   {
    0 U! s6 w5 O/ y! @6 B* m, U
  454.     char szIP[50];
    3 M0 N- X  m0 i3 c/ f, [. n3 x2 k8 j
  455.     char szDIR[300];
    4 M2 `9 G+ ]& H, n: v4 a2 I6 p1 h! Y
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))8 e, t* Q. T+ ~( n0 q5 |9 ]% D, c
  457.     {: L0 f( P9 O. i$ d" J
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    + r# p! e! f& F- |
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 X" g2 B& {9 M" p  C
  460.       strHostName=szIP;
    ' X$ _* U  X$ p( W# q
  461.       strHostPath.Format("/%s",szDIR);
    ! b- D+ ^8 y; m! {8 A6 `
  462.     }& j- G4 |9 i4 }/ r
  463.     else( I: j9 y. C3 D8 i2 k; I
  464.     {# ?; y+ I: H+ X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( n. Y* p+ N% w5 o$ f# N+ r; F
  466.       {
    " v8 ~7 J) C; H; G4 B8 p
  467.         char szLanguage[50];
    : n: c  k( v" V' k& g4 J
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " ^4 V$ Y0 b: v5 h' s
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; C* l; e1 I% }3 c( k/ @) t
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- B! d  c# p  [+ e# n" k# b
  471.         else                                   m_iLanguage=ENGLISH;+ H* Z5 P6 b5 Y) S! y- |
  472.         char szRegister[100];. Q# a1 @, O) j. S
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. I# {; W# R" M. X1 T9 v) g
  474.         strRegsName=szRegister;- H  d- f& t2 a0 d
  475.         char szPatchURL[100];9 N# c& o' Y( n8 ]( G0 _8 C0 [
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& M* L; d( Y+ w
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# v" z7 y/ ?  @2 X
  478.       }, b+ t7 ?: h: X# ]* f6 T
  479.       else9 P) O+ w6 @3 W' O7 H# k3 |
  480.       {# v/ f1 @, e; W5 n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 V1 e7 I; O% M. S! ~
  482.         strRegsName=DEFAULT_REG_URL;
    ( Z+ R7 f  p) z
  483.       }
    2 T! S! f/ A1 O$ z+ z% ~3 [. u
  484.     }9 p7 r* `4 c  Q& q% g" F# P
  485.   }
      s) p. [0 m5 l" Y2 c
  486.   return true;
    % ~5 L# T2 d0 ~$ q
  487. }1 F3 B/ h5 Z/ F/ e7 e  |9 i

  488. 7 @  V" g, {  c5 K% w
  489. #include ".\ZLib\unzip.h"  M( r5 f/ z1 J: m" m8 `
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    - i# e8 S4 V: l/ [% ]
  491. /////////////////////////////////////////////////////////////////////////////. c+ S; t  J/ t3 ^# T: j7 F) n
  492. // CRevAppApp initialization
    1 X2 d6 b2 j: {+ S& [, C

  493. ' |6 D, y" h) I1 e) m' Y
  494. BOOL CRevAppApp::InitInstance()1 y2 F8 B6 V4 V+ s: m' b
  495. {. h( Y, z! d. D3 `. ?% f
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    6 d. B) P2 Q: \- f, j# Q0 N
  497. 6 H: n+ N9 \! J9 Y8 _6 m* v" ]
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);2 a% h! {4 ?6 }; H4 L
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    $ v8 |$ q- }, Z5 w+ H
  500.   {
    4 ^( h- |0 W5 V$ j5 F: B
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");  b3 ?4 T' a+ y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    4 u/ b: y$ p5 b7 V0 }/ j
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))7 ^, ]% o8 |# u3 d, ?
  504.     {
    0 U" _! c9 c& \9 q' b& [
  505.       strcpy(szPath,szPathTarget);+ ]# O  P' M1 w8 E0 I) d; q
  506.       SetCurrentDirectory(szPath);5 L7 Z2 C% p4 h4 J! [) ]  Z, g
  507.     }
    4 \3 Q" x% L( r  N, p- _9 c; l
  508.   }
    0 @* V, c& H! j3 n$ ^( M
  509. #ifdef _DEBUG
    * B! r9 B& V9 e! w
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) h' y* N* P( Z
  511. #else9 K3 j& C1 R, d0 I& ?
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 P& P- H  c$ o  @. _: }; L2 _
  513. #endif
    5 z' t; k6 H+ x( s* a$ g; ]
  514.   {
    4 L  C2 o7 i" o8 ^9 g0 M' {
  515.     char tempFileName[MAX_PATH];8 X8 T3 K2 f- ]5 ?# f) r
  516.     strcpy(tempFileName,szPathSource);! ?$ H/ _" ~5 E# Z
  517.     tempFileName[strlen(szPathSource)-12]=0;5 }5 e# q8 U3 J. j  g% Z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    - M8 g( S( y( j4 t% n# d' S
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ' |0 }/ P: M/ [
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);- A6 j% @* {- v+ g6 ^* I
  521.     return TRUE;
    9 K& [! R, g' a2 |7 ]1 `% W1 v- i
  522.   }, H- I) U( W0 R$ I
  523.   // Nuke 0118: Delete run.exe
    1 w- G' i" X$ [" J8 b( C  y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );* l+ ^! Q3 V' O9 ^
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + ]/ m5 e( Q- t6 F  O
  526.   if(!ReadCfgFile("Config.ini"))* v9 p' v* i$ K- e! [. m4 U
  527.   {
    0 K) P: B& y+ @& z% G! E& K/ D/ p7 u
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 m- W3 z$ j) h3 c5 I9 l
  529.     return TRUE;
    : K, @/ G* v# O$ N
  530.   }
    , i4 Z2 U+ y5 `2 t
  531.   HANDLE mutex;/ B0 d1 x7 i% ^) ^! `% |  w
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))7 \0 V# W/ |4 |7 y5 K/ d
  533.   {
    5 G( ?* b/ ~! E; k- b" w1 w! ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)  a7 M+ w$ _/ Z" h( [7 |9 G
  535.     {8 V+ e* {9 }) N8 v$ k0 W: s
  536.       CloseHandle(mutex);. ~) e. ?. M" u. Q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);3 N  [6 A$ `- N& l7 B; A
  538.       return TRUE;
    $ `0 e) G) R* f3 [
  539.     }
    ; H: M( a5 ?9 C
  540.   }  ' ?; \! w3 }2 g  j( C& I! k
  541.   CloseHandle(mutex);
    * y; I+ M! w' R
  542. " i2 W- F3 X+ Z, y" U/ |
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);0 D9 Z6 k; l# J3 `- O

  544. 7 G! J5 [% n) O# t% S& @& r' K4 v
  545.         AfxEnableControlContainer();# O- ?* k1 w& G5 J

  546. # `- i7 x) m  o3 F; X8 @
  547.   bCanUpdate=FALSE;" F/ r: o0 L# c; `. f4 R7 H
  548.   dwStartUpSteps=1;) {  ]) W2 I* }% I5 G' v* w( o) L
  549.   dwProgramState=AP_NOTHING;$ Q3 j6 R7 i1 r2 ]
  550. - ?* r# O# K0 x4 F
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    8 O  P2 g4 q" e1 \
  552. , B+ D9 R' b& l  G/ T
  553.         // Standard initialization. b! z7 w2 J( S( n6 C# E
  554.         // If you are not using these features and wish to reduce the size* S; w: R$ e$ |
  555.         //  of your final executable, you should remove from the following
    ; I% U" k* m3 t7 q0 ^- d7 X
  556.         //  the specific initialization routines you do not need.
    $ F7 I! l% t4 p. v
  557. - |! c/ a; A& T2 I, d% j' {
  558. #ifdef _AFXDLL
    . g& C1 T* k+ R* a: S. y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    / B6 @$ G% J/ w/ I  Q" }) X; a. i5 v
  560. #else
    0 c4 P& r9 ?& W% q5 i( I
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically4 L( ~$ L8 G+ ]/ B7 U- P$ |, h  {
  562. #endif% p' W3 u- t* @! b7 Q+ g$ F
  563. ( Z  A0 ?" e& G9 n* B3 R
  564.   dlg=new CRevAppDlg;1 W0 u6 H" A( @. ^/ t
  565.   dlg->Create(IDD_REVAPP_DIALOG);- N  C3 C2 y- f
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    , m2 {2 ~/ L% H, ]
  567.   m_pMainWnd=dlg;
    3 A4 n, N2 w4 A4 n/ I
  568. & K1 Y  o- a: n7 _4 S
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ! [9 e( j. N; K2 O* X

  570. . \" u/ o  G( T4 b' s
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ; B: d, I& Z" y( R5 c; m/ A2 M
  572. //  ULONG_PTR gdiplusToken;
    1 F: G& H3 x* q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ( J/ ~9 e/ E* G$ p$ D/ h4 t3 k$ Q! b
  574. 9 d3 Q  c5 A9 X5 e1 y. X8 O2 Q/ k; S6 Z
  575. //        CRevAppDlg dlg;
    % z, S# @# D. B/ S# G
  576. //        int nResponse = dlg.DoModal();
    2 w+ R& z/ H- k
  577. //        if (nResponse == IDOK); U% W) V; R2 E5 J) n1 i$ K. L
  578. //        {8 F& A* g5 T+ b  D
  579. //                // TODO: Place code here to handle when the dialog is
    1 J  |3 `1 h' `) w& L$ L; k- F; G
  580. //                //  dismissed with OK
    : t" r7 \; l/ O6 y$ o
  581. //        }
    . O" V; n" T  H2 B
  582. //        else if (nResponse == IDCANCEL)
    ( T2 Y% t1 V. T" E
  583. //        {
    # Z4 G* n# g6 \9 L7 A
  584. //                // TODO: Place code here to handle when the dialog is. _8 A0 r" ?+ V& S5 O. M4 F
  585. //                //  dismissed with Cancel, [6 U- k: q3 C5 ?/ E- V* I
  586. //        }2 ^8 J# v2 I+ e8 r0 g8 I0 Q
  587. 5 Y. V: f6 c4 y4 c" Q# C
  588.         // Since the dialog has been closed, return FALSE so that we exit the+ p9 Q1 k: S: N2 q$ S) O
  589.         //  application, rather than start the application's message pump.7 `* J. V: s- V* w. R
  590.         return TRUE;
    ; z( `8 k) @: h5 f# ^+ s
  591. }( O8 a1 a$ Q. p: H& L, Q" h9 E
  592. + Z9 A2 Y. b5 O: q  u
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' s0 i2 x7 [6 t" N
  594. {
    3 z, C9 U; k& i
  595.   int i;
    * p* m; ~0 G8 f* ]  }) X/ q$ t. G
  596.   char *szRet;
    / y" i5 `1 ~. n8 ?* E
  597. / s6 v# B1 @; |9 l) F* m1 E
  598.   if(pSource) { itoken=0; sztoken=pSource; }9 P1 U2 I6 j( V! w, N
  599.   if(sztoken)
    8 [) W3 D' h* y* p# k2 ~0 g7 G
  600.   {: I5 O  B. T! h3 C4 Y- V
  601.     szRet=&sztoken[itoken];9 n0 J* q( o# p/ N! d
  602.     while(sztoken[itoken])
    9 V0 y7 i/ @! l+ @
  603.     {0 Q( C( P( W6 J7 m
  604.       for(i=0;i<(int)strlen(token);i++)
    0 x: A: o% a8 T" ^
  605.       {
    & E' @" r. }7 x
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 R. s8 X/ g! p, ~5 u
  607.         {% y: u) O% @8 Z/ [9 h
  608.           sztoken[itoken++]=0;0 u# ?* b6 J# O% E/ N/ `: i) B9 ~
  609.           sztoken[itoken++]=0;. P" L2 C) F; [4 M2 _. v5 |
  610.           return szRet;
    , J% k0 j. v; S" ~! t
  611.         }: e8 Y. `- H; B. I
  612.       }& X9 B* B0 p2 y9 F
  613.       itoken++;
    2 q* g) ?, v! Q$ W/ @& ?: W- N
  614.     }% n' y) g+ x" r7 e; D
  615.   }
    " W  R* G" J, x) a
  616.   return NULL;- i3 c* F+ q! N
  617. }
    ' x: ^, [9 u, X- y! o" d
  618. ; n/ e4 A! D! e* M/ \# H
  619. void ProcessProc(long Total,long Current)# T7 Q: T6 Z. {% M' `4 V* F
  620. {; @! S, z, a5 L, Q
  621.         MSG msg;
    ( T7 [7 l" b" Q, M& W: T' ]
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ d/ ~1 Y  d& q, n$ z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));) s2 T7 a% C) J( u5 J
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    1 j  @2 M: B8 _, D
  625.         {# @4 Y& x; m3 u0 M1 }: \/ L: t
  626.                 if(!GetMessage(&msg,NULL,0,0))$ N5 B$ |. k# e
  627.                 {; q" G3 y3 r' f( H3 R* p, W
  628.                         return;: x' w$ H  q! V: j- r/ [9 i7 N7 Y
  629.                 }
    # I' H7 V; g! ^8 F9 {# b
  630.                 TranslateMessage(&msg);
    - S" K+ G& t) M
  631.                 DispatchMessage(&msg);
    $ f; N% t$ b' ]: m7 s
  632.         }        * n7 e% E- i$ ?# |; C& g) s' c
  633. }7 }, e8 [2 y6 M& B
  634. : H+ q' x) M& E" @- l0 n# l0 b% ~
  635. BOOL bFirstChar=TRUE;
    ' n* V4 \$ E4 H4 ?9 ^& s
  636. ; G  C, {3 \8 `  B
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    & G$ o& Y- {" `; g# R
  638. {
    - ]9 a& E) q, q: A7 b2 f% I, ?
  639.         // TODO: Add your specialized code here and/or call the base class1 w4 Y' r# I; N* U' u$ P, ]: F" i& t
  640.   switch(dwProgramState)+ g/ R" q: O) c. B2 t" c
  641.   {
    ; T6 D& ~6 |; i5 q3 t4 g
  642.   case AP_NOTHING:- c9 \) ^) L2 h4 ~. G3 A
  643.     switch(dwStartUpSteps)
    # A6 p+ \' D- M+ [. S
  644.     {
    ' w+ s2 w' x3 _1 ]
  645.     case 1:
    8 s" y) R) Q- Z# K# p
  646.       {
    " y3 w9 ~% U6 U1 Z" q" }6 m
  647.         int i;
    1 A  m5 ?4 m: @9 Z( r
  648.         CDC *pCDC=dlg->GetDC();
    0 J3 [; y8 k7 D( R- z
  649.         HDC hdcwnd=pCDC->m_hDC;. a7 D6 e* @6 q, _* o6 {
  650. //        Graphics graphics(hdcwnd);; Q* c, I* t6 L2 U3 ]/ U
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    4 r3 B# |: q, k  W1 B
  652. //        INT iWidth=bitmap.GetWidth();0 L1 h( e! Z: ^" ^+ Y0 }; u
  653. //        INT iHeight=bitmap.GetHeight();
    " K0 L' h1 q% r- U1 g
  654. //        Color color,colorTemp;* G. ^- v: y3 o# t# Z% m
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& g3 g: i$ {8 _7 t& _7 m  \) A
  656. //        {
    ' C$ Y0 x+ I7 [7 B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++); y& Q1 F+ T7 R# \& i
  658. //          {
    , \  d6 K& K% w, [- t3 H
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 ^& _$ Z* R: ?0 H
  660. //            colorTemp.SetValue(color.MakeARGB(8 m3 ^# Y4 O* ^9 j
  661. //              (BYTE)(255*iColumn/iWidth),. E5 [, N& Y7 q5 h/ P8 y0 m
  662. //              color.GetRed(),, s( R+ h8 E% H! \- I" Z! K3 Q
  663. //              color.GetGreen(),9 K3 m* c; k# A3 \
  664. //              color.GetBlue()));4 g8 I4 e: i: A4 H! \
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);; m" h' f2 B2 @' q4 u5 m
  666. //          }# P7 ^0 w$ O; w: @1 [( c. ?
  667. //        }
    & u1 ]3 l# J' Z( J0 r
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);. Z/ [2 F/ Z8 ?: G/ |
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % V" ^/ p4 m: B$ }3 y9 m
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");) @- P7 f8 c2 e2 D* M) D% O) R
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. M9 W+ K" L- Y8 s8 _; n" L
  672.         for(i=0;i<240;i+=8)
    % {. S# W/ J2 N. r/ W/ }! J
  673.         {6 ]8 N# H4 @, c
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 N4 W$ s6 @& E0 D+ e( g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* M6 f+ `5 t  A" B6 C) I$ G
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' p6 _& X* [0 W3 w' u2 p- q
  677.           Sleep(33);
    + f& t2 p& l9 S, I# U6 b* R( G
  678.         }- M9 y5 L. q- D. w, x
  679.         Sleep(1000);: j! x" {# n8 N. f7 a% z1 l
  680.         for(i=240;i>0;i-=8), q! L. i' e6 {0 y
  681.         {4 H& e) n9 Z$ I  J1 v8 V
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / F& y. U- f3 v/ o7 I* q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 p% D+ _7 M" Q- }- f
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) H* L  I6 q6 V# ~! O* ?0 m
  685.           Sleep(33);8 ~% c" Y$ g- ~. r8 d- O/ O1 y
  686.         }
    9 a3 e; u( U. @
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 E" Y0 g9 t. j9 @+ S6 S) ]
  688.         dlg->ReleaseDC(pCDC);3 w, U' V; ]5 D7 P2 o& _% d
  689.         DeleteDC(hdctar);
    + e2 _" f7 }5 E! A: b& O% w
  690.         DeleteDC(hdcsrc);
    ; X4 F( I* `2 Y' D
  691.         DeleteDC(hdcorg);, \; K8 ~/ v& i5 l! m
  692.       }
    - y2 h% B; O3 ]* `$ X' }$ P
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);/ u' n5 h8 {, d& p: g% O9 {( `
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    3 b$ a. F2 d4 C1 l3 n  z) V
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    * S( @1 k' F! V* k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    - [5 O4 i9 J$ X, z# U  l1 d
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. v9 l, C8 a7 d2 c# D0 n
  698.       if(!Dn.Connected())
    % y; y4 W, G4 G6 O% P+ m- |$ q8 R* R
  699.       {% z0 i1 Z9 U7 u
  700.         dwTotalFiles=1;
    0 C4 v9 W0 a5 n
  701.         dwDownLoaded=0;* G! d6 r) E2 [" M- M8 P  X
  702.         bSilentStep=TRUE;
    0 R3 E; l: C' e9 J
  703.         bCompressed=FALSE;
    - {; U- ^: S9 f
  704.         strExtLocal.Empty();
    % v: }" ?! t9 i
  705.         strFullName="readme.txt";# ^+ I1 b+ ?8 b, x- \7 U
  706.         dwProgramState=AP_CONNECT;4 U( c/ u4 g. _% I0 `' t  ?
  707.       }
    % M) ~& E1 y+ Z. H' m( {9 V6 ~
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();5 Z3 @% B$ d: z2 }
  709.       dwStartUpSteps=2;
    9 S4 |7 ^. V: P1 D
  710.       break;! }0 q8 V8 w9 U+ H9 R, f* |; K( D( J
  711.     case 2:6 `& I& R0 F9 v* R+ J6 e
  712.       {' C: D: x' Q- W3 ^4 f" |
  713.         int iEOF;
    7 }$ b; E" B3 N2 ]5 P
  714.         FILE *fp;& Z: v- U  M3 n& }; j* s4 I
  715.         char szString[512];6 ~9 U0 C9 K5 j) \% {
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* V3 t2 t) k! ~# Y. w
  717.         if(fp)
    - ?% [/ F$ {  P$ I9 m" D
  718.         {
    ' a" C& Z* M% u
  719.           do
    1 X) i; t$ E6 C( f
  720.           {
    - I# e4 M& ~+ ]8 P' {
  721.             iEOF=fscanf(fp,"%s",szString);& W# K/ `% {/ s$ n+ M
  722.             if(strlen(szString))% k! I2 g+ ?* v" K: g
  723.             {! N. Z# }/ ^* Q) h( z2 f$ r
  724.               if(bFirstChar): L4 K6 w7 |% X+ H) V+ n0 t. ~% O
  725.               {
    - n, ]4 \8 }. t1 ?- F0 g
  726.                 bFirstChar=FALSE;
    $ p& C; x7 O' e+ D
  727.                 bConnectIsBig5=FALSE;
    ) _3 a1 l6 v8 d0 X7 T  L
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    . d! w# `' z2 u% N9 B
  729.               }  [! r7 }" }. t) F2 E5 {# I& _
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ( M& }( G- h! E. y  a
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));" {5 }' ]* Z1 K
  732.               dlg->m_ListText.AddString(szString);
    4 Z. Y4 |- _* X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ b: q( R( k; C( b+ {: |9 U
  734.               *szString=0;
      y# S3 Q$ K, q2 R+ X
  735.             }
    , Z2 ]7 B& I% p
  736.           } while(iEOF!=EOF);- b- g8 l, F( w7 F  ~3 m
  737.           fclose(fp);
    % W# O- C, L, V$ e
  738.           unlink(".\\DownLoad\\readme.txt");# ^. [# m5 s1 V7 R8 Z, q
  739.           dwStartUpSteps=3;3 h2 V/ ^7 T0 S" p
  740.         }
    2 L6 L5 D, v; @8 t: ]
  741.       }
    # X2 u* s7 S5 h% q- n# z  C; }
  742.       break;
    * p  G' H) r5 p$ v
  743.     case 3:
    1 D; J( L: D5 d" z3 ]: v! x
  744.       if(!Dn.Connected())
    / V9 m- S% p& Y7 P+ F  C/ k
  745.       {
    . A6 B( r& C% F; _/ x6 z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 p8 v9 c) z8 V0 z6 k' l
  747.         dwTotalFiles=1;
    # I: @3 m- [& @& l& J" r
  748.         dwDownLoaded=0;
    - b, {' d! Y0 K8 g1 E( K  K
  749.         bSilentStep=TRUE;
    0 S! q. p  `' p
  750.         bCompressed=FALSE;0 X$ S; q  R1 |, h
  751.         strExtLocal.Empty();
    7 Z2 W& }" U$ @
  752.         strFullName="checkversion.txt";
    5 S( M  }7 K; M) d$ L" W: ]
  753.         dwProgramState=AP_CONNECT;% J9 `2 {1 b* h. n3 e; F
  754.       }- z; c/ U; L+ H3 n  H
  755.       dwStartUpSteps=4;
    ; P' P/ F* i" u6 e: E# d# C
  756.       break;6 M. |4 B+ k- |: t9 R& c
  757.     case 4:8 S4 G6 E- }8 Q3 V/ w
  758.       {, y1 h/ H$ W- l2 S0 _
  759.         FILE *fp;' O' g8 d$ T1 |- N/ o% g5 w
  760.         char szString1[128];
    7 P) k# C. o+ N. V& l
  761.         char szString2[128];
    3 m. i( j/ N' T6 o: ?$ n
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    $ P- f* i1 S; \% M/ `
  763.         if(fp)& B/ Y% `; f8 D0 ^; r7 I  h
  764.         {# b- @7 Y2 M- u, [, k6 h% m0 s/ @
  765.           fscanf(fp,"%s",szString1);. [3 [8 o3 {$ s1 ^- y
  766.           fclose(fp);
    ! g$ F8 K* {  I, \" H1 X: s
  767.           fCheckVersion=atof(szString1);
    ! H+ I* J7 f7 [" ^$ Q8 k* I( e# b
  768.           fp=fopen(".\\checkversion.dat","r");
    * M* i5 n  }6 _2 S
  769.           if(fp)
    # `! `' i1 h+ H
  770.           {
    # |9 K! @* N. J* M/ h) Z3 z7 D
  771.             fscanf(fp,"%s",szString2);
    ( E) w  l0 T, @8 G; H
  772.             fclose(fp);
    , e# m9 X  a! h/ {
  773.             if(atof(szString1)!=atof(szString2))8 g8 _* ~( ]8 ~+ Y- c- d* [
  774.             {6 Y4 {3 c/ q/ E; j& ~
  775.               if(!Dn.Connected())7 h# p' ^( y4 A  H
  776.               {% f1 @8 m3 b2 j! `# l
  777.                 bFirstUpdate=TRUE;
    : S8 {# j; R0 \- ^% k
  778.                 dwTotalFiles=1;
    / s( i! `  v3 {/ x( v3 r( P) w3 H
  779.                 dwDownLoaded=0;
    3 X5 A! k  c6 D0 ^. L3 N/ G
  780.                 bSilentStep=FALSE;
    4 X) a' N" N% r( Q
  781.                 bCompressed=TRUE;# C& y: i) z: z/ U  Z) W
  782.                 strExtLocal=".\\DownLoad\";3 a' s$ ^1 q* ~# B
  783.                 strFullName="update.txt";& |; j9 R1 I% c3 @% q2 \
  784.                 dwProgramState=AP_CONNECT;
    - P6 V& \7 N0 a( w# q  h0 G
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 }5 W" E; F/ w8 O! |. m5 P
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 M0 W. ]9 e/ E; f7 T
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & ~( M" E+ l2 d
  788. % Z( v( h$ E! l' l+ P
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + E4 j) g& E$ {* D2 M$ b
  790.                 unlink(".\\DownLoad\\checkversion.txt");! c9 e4 ]. a# f5 f% Z5 M5 ~
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    . E5 |% }2 w4 ~3 |* H' m/ x
  792.                 {
    8 u3 O: \+ {9 X1 u) s1 l& W2 x1 p
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ! N  O+ p! ^8 y$ t# c* ?+ }$ U' r. f0 I
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");7 |# U3 |( P5 D  h9 W0 u9 D- L
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    * z. B( \' n$ Z- @+ E
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, K+ p# F. h  g; m' Q
  797. 8 J+ b. {* l% V8 }0 L  r
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : M( {) ]- \# t7 S5 R: q% i  q/ I0 ?. W
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    1 h3 u8 N9 w6 G3 m) t, v6 q2 y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");  w# ]8 K$ b, d( ]* z! k
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # \/ b, a* Q# L  ~1 G6 N
  802.                 }
    6 Q$ J/ e* B; M3 V; U+ T
  803.                 dwStartUpSteps=5;
    2 h& e% \( @# B0 y  R
  804.               }5 h' S3 k# Y8 U) B6 |
  805.             }- Q$ R$ h4 y, T; u2 c6 V
  806.             else2 o/ C; M9 x0 I. X- O3 Z
  807.             {: o6 l9 G; u* W, F* N
  808.               unlink(".\\DownLoad\\checkversion.txt");( m& r8 C8 p5 l$ h  J% ~
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ f! M+ v, t5 k! F; B; d" J
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ T2 D, d+ ]: ~& \% X: L
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");3 J+ _* Z0 d/ z; Z, g
  812. ' x! ]5 ?; e9 J% _5 Q$ U' L2 q1 i( n
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % {: d* l3 D. y# {4 K
  814.               dwStartUpSteps=99;
    6 I; V& L' l0 Z, Y# a& {& x
  815.               bFinishUpdated=TRUE;7 a; d5 R0 N8 K- j8 N8 ^
  816.               bCanUpdate=TRUE;3 @) ~) I4 o3 H6 l. ?" r
  817.             }
    8 E. D( ]. g3 O" h  U  N
  818.           }
    ) Z% Q+ O3 V$ s/ p
  819.           else2 l8 o9 k! M" t6 S! k" ^! i& Y  I
  820.           {
    / Z8 f+ b0 s; X; L5 ^
  821.             if(!Dn.Connected())/ {( u( D- {( K& N. L  Q. ~- d; ^
  822.             {8 S2 U& W5 d$ r* c" t; ^9 Q2 P
  823.               bFirstUpdate=TRUE;1 ?1 z7 a9 Y5 d# P9 i
  824.               dwTotalFiles=1;. b% W0 Y$ s5 n( S8 \# Q
  825.               dwDownLoaded=0;
    # ?& f5 i3 \' ?0 b0 h( l. E; Q9 t
  826.               bSilentStep=FALSE;6 }, S4 c' Q9 H
  827.               bCompressed=TRUE;- z; o" h, C# G  E% O, ~0 `
  828.               strExtLocal=".\\DownLoad\";, h9 g8 N* {, D+ ~+ E1 D
  829.               strFullName="update.txt";
    4 H2 A7 y6 D; z- m$ |
  830.               dwProgramState=AP_CONNECT;. f' ?8 B3 l# u; `
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    0 x3 ^8 O4 w6 R: v7 }4 @
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , @9 }  p0 d* _  X
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 m  ]- [& J4 ]$ q4 }$ ~# V
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* t! }! w3 o* X) g( o- G5 a
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 ?  o3 J8 N& h5 E( c: p
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)9 U/ W1 p) J' a4 c9 P
  837.               {7 l" O& @+ V8 g3 f; C3 k
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ! g- A8 ^. m9 o# Z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    - d5 w" T4 p$ \
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");+ J9 t( K+ T' u- y/ X% ~$ w
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! X" Y' q5 R8 I) H
  842.                
    * F1 K+ S1 l9 G8 D( ]# o
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    0 r1 |) g8 M# L1 T9 f
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");( W- ?3 ~% v+ Y0 ]4 c/ J
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");0 t& N' D$ S+ W. a8 b/ X$ P
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # m2 o" ~$ s; p6 ^
  847.               }
    # [: ]* O  y5 E8 h6 F! `4 N
  848.               dwStartUpSteps=5;" Y* U% Q  C# E+ s0 l
  849.             }
      l! P5 Q$ v9 Q' A& d, m# Z- {
  850.           }; a9 C1 L3 \" ^/ q$ p% N$ h8 s
  851.         }0 {( f  S" {* A& a  q+ Q
  852.         else
    5 l  _1 i" n( {8 m! G; M: A
  853.         {
    ' n, ~  \/ A' d
  854.           dwStartUpSteps=3;
    - O8 {5 F7 s: N: Z! {
  855.         }
    * f" a: M( a5 U$ n: A8 D5 r
  856.       }
    ! J6 N: z5 I: ]6 O) j& j* o
  857.       break;$ n$ `" c# N5 K! A' J+ G) j$ G
  858.     case 5:
    % p% h  {% ]; Z" C# v
  859.       {8 X) _, N6 f3 I& z$ F
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)( I3 j7 k" G+ U: @0 q7 M. ^
  861.         {9 Z1 \1 e+ ~' u! B
  862.           int opt_overwrite=1;
    : S# i# t6 m* L- n, x
  863.           int opt_do_extract_withoutpath=0;
    0 m: t* }) Z" e5 G0 V
  864.           unzFile uf=NULL;5 a  h& b" A2 C

  865. ) F/ d+ E/ ]. J& Z. L' X  F/ T
  866.           uf=unzOpen("Wsa.zip");$ n  O. T1 |; g! e5 K8 u
  867.           if(uf)& H1 a6 Y% u' k
  868.           {
    $ A% U, |2 f1 v9 u; ?* [, v: W
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ' ~+ q* P6 l) C( e
  870.             unzClose(uf);2 c6 H4 M% V& e0 A. I9 A
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# J. A" u  @. C3 T# O( W
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");3 H8 ]" q6 Y: Y* v
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    6 N# ~' e( [, K: E* Y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! S1 p1 r' a8 \" \# s8 J! ~! g
  875.           }
    3 Z# E- r6 I/ }/ b7 Q: r: n7 ]
  876.           DeleteFile("Wsa.zip" );
    ; y, [* O) S- h
  877.         }4 j; c3 e& |0 ]/ `9 y$ \* |' w

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

% y# E) o1 N/ ~
) K) X/ b0 x& H' D6 y

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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