CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
4 a$ a; U) R& W; F
  1. / RevApp.cpp : Defines the class behaviors for the application./ k- S# v% ^) S- w! T3 O
  2. //: {* F% p! L9 l$ g. V& N! L5 T0 W

  3. " c% S6 K5 W4 K
  4. #include "stdafx.h"* f) j  n5 z8 L
  5. 0 H) R6 v& \( ]( @5 \5 ^
  6. //#define UNICODE
    0 B+ I  S' o' K
  7. //#include <gdiplus.h>
    6 Q1 {! s- T4 P8 m  N; D. T2 D
  8. //using namespace Gdiplus;  H% x- z# b) d$ I2 n1 U, E

  9. ( r( ~4 W: x8 e  m( Z; E2 Q
  10. #include "RevApp.h"
    ' v7 ]  W) l& w* S
  11. #include "RevAppDlg.h"+ Y- B" j0 M9 Q$ z' b2 y
  12. ' Z/ N- J# `, A; {; [6 N
  13. #pragma warning(disable:4786)
    ; T: h  |0 a- N  W# }4 W* w
  14. #include <map>( |, ?/ E# g8 x; e2 |" [+ d% M0 F9 d
  15. #include <list>
    1 P6 Z; H9 Y) ~# x5 s
  16. #include <direct.h>! K7 w3 b  t; w( Z
  17. 5 u  S/ Y( o* V' |
  18. #ifdef _DEBUG- P$ z5 x7 ^: o& b5 l  W. X3 S
  19. #define new DEBUG_NEW; U: O1 Z3 u. x# @5 }- ?0 W; r
  20. #undef THIS_FILE' J# K) p5 z3 h! Y. ^0 Q, g6 C
  21. static char THIS_FILE[] = __FILE__;
    3 l! D: ~; S+ @' Y0 X+ B
  22. #endif
    ! M" ]4 i3 p1 h% c( w& ]' {
  23. #include "SkinResDef.h"
    7 w: I- v% z6 r3 O
  24. #include "ChangeBG.h"
    " Q' C$ r+ b& Q# s; w
  25. #include "AFXINET.H"' f/ W* {0 [/ J# j5 \

  26. % ^7 j# K2 @* g; x3 [; S( H% K" v
  27. #define TRADITIONAL_CHINESE 0
    9 |0 T: a# ]7 I5 p
  28. #define SIMPLIFY_CHINESE 1
    9 ~3 j4 _" J3 a: `3 e+ C
  29. #define ENGLISH 26 ^& I) T- w/ N9 j& Y% W5 A
  30. int m_iLanguage = ENGLISH;
    ' x! K3 P4 q- f' O9 q0 F6 V- U
  31. /////////////////////////////////////////////////////////////////////////////
    / v- T0 V, p; P. e+ n
  32. // CRevAppApp
    2 S3 Y0 b4 j! b* W! Z

  33. + a1 b: o( w5 c% ^# z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ( w# g( @# k6 f. r% T
  35.         //{{AFX_MSG_MAP(CRevAppApp)8 l% c! B% o7 C$ C" S& ~
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    . P8 Q$ u+ ^- L8 A7 p
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    $ Z; I5 t. W% }" c
  38.         //}}AFX_MSG
    : z& Z4 g5 d& u1 d1 z1 Z% S* U( I
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    8 Y( z5 v- q5 S* n* u
  40. END_MESSAGE_MAP()
    1 s! D( z; G# x4 p$ o/ `) _; t
  41. 4 F' {  ^! _& ^* k; C7 n
  42. /////////////////////////////////////////////////////////////////////////////
    # q  a8 v7 b, I$ ^4 Z) C% a
  43. // CRevAppApp construction
    & d2 |3 q3 w8 _+ F+ O

  44. ( O" f  Y0 j$ N. R5 v
  45. CRevAppApp::CRevAppApp()# w! t% V2 k9 b4 h; [' I& s
  46. {
    $ ?3 O/ T8 t* G% C4 ^
  47.         // TODO: add construction code here,* [4 `: ?/ t8 u- M  X7 p
  48.         // Place all significant initialization in InitInstance
    & w( T5 t- N; t. Z# W# ]3 Z
  49.   bDisplayIsBig5=FALSE;
    & M& s- ?0 F  X6 Y
  50.   bRestartUpdater=FALSE;
    9 y4 S: j, _4 Q3 w( X' N& m
  51.   bFinishUpdated=FALSE;
    + U- Y4 W' [" B3 m6 \
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;$ z- y. v! G3 y& f/ a
  53.   InitChangeDataBig52GBKS();: m, n" I( u' s7 v0 Q1 y+ l
  54.   InitChangeDataGBKS2Big5();
    - O( L4 i# F* x4 B
  55.         //2 o, T0 b; w* Z( `. b5 E# x
  56.         bClickRunExe = FALSE;
    * X8 r) m5 }3 q$ S2 f+ y9 {4 J
  57.         //
    ' g* L! z6 i) C5 M7 H
  58. }
    ( f1 ?3 j; |7 w2 D9 E1 J

  59. 9 i$ N- ]6 E2 L# v6 C6 f! v  ]" N
  60. CRevAppApp::~CRevAppApp()
    ) ~. ?2 @2 I: o; p3 Y0 C
  61. {
    1 M" c6 m; E3 u" H8 Z5 E
  62.         // TODO: add construction code here,7 Y+ J5 _# v$ Z. P% I- W4 N
  63.         // Place all significant initialization in InitInstance
    9 |) c! {* \9 L& v% c
  64.   EndChangeData();: Q4 P4 V/ U5 q+ c: B. E1 f- C
  65. }
    5 w" ]* R& \9 @$ g; i
  66. ; ~: H9 x& |3 K1 ~
  67. /////////////////////////////////////////////////////////////////////////////
    8 r) \, y& n7 L# X1 o
  68. // The one and only CRevAppApp object" i' C+ u/ o. F/ ?" a
  69. + a2 y* G" M( J9 E- C. M4 E
  70. CRevAppApp theApp;
    6 u& D/ u' N! F2 U

  71.   ^- Y8 w$ }  m# u
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)2 W- N) p$ H" M1 l
  73. {4 v% f+ b+ w7 O' Z: A
  74.   int iEOF=0;
    2 h3 B" v9 W! J- L0 a# Y  m7 _
  75.   char szTempName[MAX_PATH];1 ]3 `; d4 G; S  {0 ^
  76.   *szFileName=0;- @* l4 A# ?: l% ~# h. b
  77.   iEOF=fscanf(fp,"%s",szTempName);6 T7 T" S9 R. m: o
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('). j4 B# ?$ V5 F* h8 n1 o) l2 W! g' S
  79.   {
    ! B/ m# T" J2 O* A
  80.     strcpy(szFileName,&szTempName[1]);
    * Q: t4 ]8 V9 u4 U0 ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    " ?1 P, G- R$ g
  82.     {; _+ M( F  P+ u
  83.       iEOF=fscanf(fp,"%s",szTempName);. ]& k, U) u' d% ?* `
  84.       strcat(szFileName," ");1 n0 }4 y8 b5 K0 e6 j  a  y
  85.       strcat(szFileName,szTempName);
    2 J. s7 ]3 r' m2 e( r4 G
  86.     }
    3 j$ d3 O6 s) F' Q& g& c6 ?( \
  87.     if(strlen(szFileName)>=1)  g6 K+ g* W' _: T
  88.     {3 D/ E' k3 o% e4 _9 J) r7 Y) j, L; [" Q
  89.       szFileName[strlen(szFileName)-1]=0;
    7 Q( y8 W9 I# [; y9 q
  90.     }7 w2 Y6 Y. p" n/ a7 J7 F5 i
  91.   }& m/ m+ s# R6 V; Y" T" c
  92.   return szFileName;* e! p) M; C2 K
  93. }. T1 }* H! x( e" B5 ?+ \) j+ y

  94. ; ]4 h- O3 }+ r
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)3 I+ Y9 H( X  ]/ _$ A0 G  a- }
  96. {, \. }. `. R6 Q) E( T  F' Z0 \
  97.   FILE *fp;# `7 i$ U; A1 v" K, c) `" P" Z
  98.   char *key=NULL;
    6 ?) T6 ]1 }$ H8 z4 W
  99.   char version[MAX_PATH];
    3 H$ {, h' j9 B, B
  100.   LPUPDATEFILE file,olds;+ B6 O, L9 i' z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 y1 ^' k6 [4 I# E

  102. - O- ~: M# R$ C% |. j4 v
  103.   UpdateList.clear();- `' Y4 E( R3 r$ R. h
  104.   UpdateFile.clear();
    ! p) _) _8 F3 Z
  105.   if(GetFileAttributes(filename)==-1) return false;
    * m+ f9 q  }6 u1 g+ x% B
  106.   if(!(fp=fopen(filename,"r"))) return false;8 [- j% l3 g: ~  m6 }$ s& t
  107.   fscanf(fp,"%s",version);# L& k9 K! q. ]& M- T' W
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }: x8 z8 T) k. A2 H5 y
  109.   while(fscanf(fp,"%s",version)!=EOF)' i7 ^: C2 N% X
  110.   {' L: B& o; _* M3 i
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 y8 D! d  `1 b% C% s+ u
  112.     fscanf(fp,"%s",file->path);
    + _1 a; Q$ A8 |* p! U& w
  113.     ReadFileNames(fp,file->file);4 z: l3 `( ?7 a; f6 |" D" d" @. y
  114.     strcpy(file->full,".");
      c0 G  E, J4 [' N& e; B) `5 ~, L
  115.     strcat(file->full,file->path);
    $ `: ?' F4 F% G  {: W1 `
  116.     strcat(file->full,file->file);
    9 H3 @1 X& h7 o  Y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()): m3 E7 v( O5 m8 {4 v
  118.     {. u7 a' V; w: \6 ~. j" A
  119.       file->vers=(float)atof(version);5 D" p4 M+ l- |. a: [
  120.       UpdateList.push_back(file->full);" c, J: ^! c, m0 F+ R5 h" m
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    & {) N5 w# d# m) V/ H% \
  122.     }: ~0 L& Y5 l7 R- M- U$ W
  123.     else
    2 F' W* D5 k- d$ D5 ]' f* S8 E2 t
  124.     {4 `- X0 e8 s1 @. t
  125.       olds=(*p).second;; C4 e0 N! B5 N) I- ~9 m
  126.       if(olds->vers<(float)atof(version))
    ) y3 v& z) p( l$ |7 s3 j
  127.       {
    ( {$ ]0 r4 u1 M( S/ |
  128.         olds->vers=(float)atof(version);
    0 @/ m  z! d* F4 V7 G0 {+ b1 W# r
  129.       }
    ! ], v3 U3 P  D6 B) q3 V
  130.       free(file);
    4 |$ o7 q# X  ]  }; u2 G' |
  131.     }- v0 {: o2 g# U" Z
  132.   }
    ( f! j. t  Z1 W/ U" G7 O
  133.   fclose(fp);
    5 H: B- O3 n2 F3 p+ D3 `2 H5 b
  134.   return true;
    ( l8 t& r/ d5 }
  135. }- s$ p( p; I2 h

  136. + Z! r2 E8 c" W% b7 a$ T, y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)7 r1 q2 H1 F) }- f4 Q9 D8 X2 @
  138. {
    . ]* a8 z: x" `0 Z0 r
  139.   TCHAR  szFull[MAX_PATH];" f, Z, ?  z8 M/ H3 s
  140.   TCHAR *token,*inter;* _3 Z; ~3 M, s3 x% G" e
  141.   *szPath=0;2 G) F& _/ K8 C* F
  142.   strcpy(szFull,szFullPath);1 C2 b9 \. z3 L* c
  143.   token=strtok(szFull,"\\/");
    ( v' [( f! P/ E. e1 Z' N, `
  144.   inter=token;
    - i0 l8 i2 D3 l  U$ ?. |% z- @
  145.   while(token=strtok(NULL,"\\/"))
    " x! e& f2 y2 j2 v0 ]( t0 ]; S: v
  146.   {8 y! E1 }6 `6 D& G  \- Q: T' p
  147.     strcat(szPath,inter);% W& u% n# T3 o
  148.     strcat(szPath,"\");
    1 T1 y. P: p2 i
  149.     inter=token;
    2 W7 F$ W9 [' M0 B/ l$ U
  150.   }  ?$ G2 Q: I" X- j
  151.   return strlen(szPath);) {( @$ a& G* G0 L) v
  152. }% L, Y# z" f$ `) \; c: |0 P  }8 Y
  153. 2 P; {3 t% v' m' A& c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); X, B4 X6 V* v5 F" h! {* {
  155. {
    3 ^6 l2 l8 N( i
  156.   DWORD attrib=GetFileAttributes(Target);3 v, D" [$ E/ U& T
  157.   if(attrib!=-1)
    ! l( B3 c# r. B  s; B# a+ E
  158.   {- \. n: `0 d$ z5 e7 r
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    8 O. R0 a0 M1 d
  160.     {  r6 V( o& h2 f
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    6 K+ w) v' P7 Y$ N/ B, H
  162.       SetFileAttributes(Target,attrib);1 y9 t3 V9 y! D5 H* `) b' ?8 a% t
  163.     }+ A' e; E$ N3 V* j! K5 K
  164.   }- F& e9 s+ C3 m" {
  165.   CopyFile(Source,Target,Erase);
    3 u/ Z+ S6 k+ T- n  J2 K' U% A  L- n; G
  166. }
    8 M2 H! X' }) T
  167. 9 m1 F' `/ ]3 j3 s: T$ P) V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! ?9 h0 q. u! m& K, s8 \+ l: u
  169. {; |5 x5 |5 C- I, j  K0 \
  170.      FILE *fp;$ ]1 r3 p0 F0 p8 ~& u( M
  171.      char  szBuffer[8192];) X8 S0 x8 v) H1 {; B6 \+ t! E: `
  172.   va_list  argptr;% V) J8 p2 w; F! j
  173. 4 Z8 `" O: \( e% A2 G+ L
  174.         va_start(argptr,message);! S7 s0 p' Q( Q/ k% [+ D* Q% i8 i
  175.         vsprintf(szBuffer,message,argptr);; W. _' m, F" F6 Y$ g  e
  176.         va_end(argptr);( \/ b9 H- C! |3 T* Q; u7 v8 a
  177.   fp=fopen(FileName,"a");
    * m3 K+ m& U5 m8 C! X  F  i4 {
  178.   if(fp)
    ' k2 t, V: [' @) @8 U) l
  179.   {  ~0 p7 r. j! R( n! w
  180.     fprintf(fp,szBuffer);% ~  d, h) I, D/ C$ C
  181.     fclose(fp);* E% Y5 n) T; N& K* z3 [
  182.           _flushall();
    ' }) n6 E  S- O
  183.   }# `8 U2 u' w7 J3 b6 ?5 s- @
  184. }( @+ ^7 o( v. Z* k& V7 q) j5 e: B% ^$ W2 M
  185. " A: j/ H4 D3 S( h' j
  186. BOOL CRevAppApp::Fclearf(char *FileName)7 J6 q7 n) ~. M4 t- G! A
  187. {
    , Y+ f  ~2 c! h$ C& B
  188.      FILE *fp;
    2 O. y' a+ E2 Z8 Z" Z/ t1 ]
  189.     DWORD  attrib;
    7 S" ]$ b8 M( ?0 T3 q
  190.   attrib=GetFileAttributes(FileName);
    6 o$ N, x; T' q; ]
  191.   if(attrib!=-1)
    ' {$ w/ r* H' g/ S( g% w- w
  192.   {
    + D2 A7 }' ]2 J  _1 [! A. r
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    9 [) G) Y9 ?% n7 D, f
  194.     if(!SetFileAttributes(FileName,attrib))9 ?' W/ W2 s6 }. K1 h
  195.     {
    # V( |# f% y9 ]& V% @
  196.       return FALSE;1 d! d' V' @0 ^3 ^  O) Y
  197.     }, a0 w, [: W3 y( [
  198.   }
    3 K1 P6 A% }; s( J) r
  199.   fp=fopen(FileName,"wb");, n( C+ n0 K. W
  200.   if(fp)( B+ [# @$ K  H& Z3 i3 [1 ~
  201.   {
    % `7 y9 C! w' Q1 F/ i; h
  202.     fclose(fp);( e! `' m2 d# ~( I9 m/ h) _
  203.   }( L3 {0 T7 H* ]) G# ]1 h
  204.   return TRUE;! r6 s; _' I0 a% N( \2 ~6 m
  205. }3 ^; W! g  |$ ]* p; F) c# L$ d

  206. 6 }# X" G1 M% F( e% u$ {
  207. BOOL CRevAppApp::UpdateLocalVersion(void). o3 M, \0 T( ^6 M2 L0 j0 m
  208. {
    0 p! Y- \) s& q# e4 V
  209.   char filename[MAX_PATH];
    : N, C5 x! [( e
  210.   LPUPDATEFILE file,olds;
    # T3 r4 y5 X& ^# U+ j, T
  211.   std::map<int,CString>::iterator i;
    ) m, G. Y! E$ C
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    + l% x: J" R8 l9 W' `
  213.   std::list<CString>::iterator l;
      B$ K, t0 S& U5 X

  214. 1 v' ]7 ?! ~0 g$ a$ w
  215.   if(bFirstUpdate)
    4 N, y4 _  `5 f1 Z
  216.   {9 F- ~3 I1 r  W5 D) X' T
  217.     dwCurrFile=0;. ~) a" j2 b+ ~) t6 O  f
  218.     bFirstUpdate=FALSE;( _2 J, s- x$ @& E& ^/ |) d
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) D9 f! v2 t2 w0 o. I6 R1 W
  220.     {
    ) t3 u. z4 d+ l
  221.       dwTotalFiles=UpdateLocal.size();0 L( z0 Q7 p, ]7 D$ ]3 h
  222.       dwDownLoaded=0;
    . Z" ~& h) u  N5 i
  223.       bSilentStep=FALSE;
      s" f2 I3 u* L; l" w
  224.       bCompressed=TRUE;) G* W6 d6 ?2 N' {+ F" V
  225.       strExtLocal.Empty();+ W0 j4 }# i5 X* @- R
  226.       strFullName=(*i).second;
    0 }1 G" L. O; _, @. O$ x4 r" c
  227.       dwProgramState=AP_CONNECT;
    * f/ y0 @5 G/ s6 A  G( s7 B
  228.       return TRUE;2 ~) Z& w, p) }  \1 F2 s2 h
  229.     }6 V* j1 B8 T4 u* G
  230.   }
    $ C1 [/ n# k* d% Y6 ?
  231.   else if(bRestartUpdater==FALSE)
    " C( q& H% i9 P% {1 ^
  232.   {/ p7 L; ^+ v! U7 y* @9 B3 K$ Q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())1 n- d, k& d: \4 r* V
  234.     {
    6 Y9 L% U3 _1 l
  235.       file=(*p).second;
    & d3 s. l5 C2 Q  y" v' L
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())/ E( z4 x1 V, v9 Q; S. I; T
  237.       {
    7 X* C2 U' A' J. g+ a7 Q# G. z
  238.         olds=(*p).second;
    : J0 d* j3 c" L, U
  239.         olds->vers=file->vers;
    9 m+ {" k8 w3 o. \; H
  240.       }. f* L/ p: m6 I7 r; x. L
  241.       else: f: Z7 i% {# X% ^9 j* E) k7 r- o0 I
  242.       {
    - y8 m- O9 A& K% @4 |
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 W1 H1 n, _  X0 A& @( z
  244.         memcpy(olds,file,sizeof(UPDATEFILE));" W- x. k. z: I7 x% n' d
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));7 G8 ]5 |1 {) D, {
  246.       }  R- ^! E; k9 F* K
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    . M4 s5 H- k: n4 ~
  248.       sprintf(filename,"(%s)",file->file);; s% j" \+ G) h' E, T5 |
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- x  i$ @2 [4 i$ \; u# l
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }& U3 {5 a: i" z% c, `& E. K" h7 P
  251.     }# [8 K: j! b. c& }
  252.     dwCurrFile++;
    + l, r% K; n1 X* m) N
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    1 b4 x4 g: i2 v
  254.     {& K+ j' ^+ Q. \1 R2 F% g( m" T6 G
  255.       bSilentStep=FALSE;' R4 m% \1 C: l( f9 ~* {
  256.       bCompressed=TRUE;. @5 m( h" j! J: a) Y4 y# P. r* E
  257.       strExtLocal.Empty();3 E5 D7 X' V# |
  258.       strFullName=(*i).second;
    . x: G5 W( V  ]8 x9 a
  259.       dwProgramState=AP_CONNECT;
    6 d7 x( h+ ^/ E$ z; v6 ^" E
  260.       return TRUE;
    4 H8 k) |) O$ @
  261.     }
    ( E0 e6 d2 F* l, B6 }
  262.     if(!bRestartUpdater)# {3 X1 o+ o0 b) t; D$ Q( [  }- y
  263.     {
    $ c( L* \$ E, f3 R" [1 M5 L" G# c
  264.       int iCurrSize,iFileSize;' K$ r9 i0 X% G- _5 X& v  d
  265.       iCurrSize=0;* J( N" ]5 _5 P- L5 K  A/ E9 ]; \
  266.       iFileSize=UpdateList2.size();
    + o% {! R" u+ Q/ n
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");' e3 u2 J4 \. _6 m
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");/ h& ~; F- ]6 G% z- v3 C, [
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");" j1 `: |: P4 x% L
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ c) R# s( w4 t: K
  271.       Fclearf(".\\update.dat");
    . z8 e, S8 e' d6 H
  272.       Fprintf(".\\update.dat","Bloodyf\n");9 j1 `- Z* f: z& H) g. A
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % {% _8 s8 D5 i0 O# v" a
  274.       {
    7 s0 `& Y( h  L5 X" {: [
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())5 ]# t0 e7 z4 f
  276.         {
    ; k2 F  f4 n5 z& X# a7 c
  277.           file=(*p).second;
    ) ^+ @' g6 R- C0 h. j
  278.           sprintf(filename,"(%s)",file->file);. r' n0 k5 G$ Y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , D2 J* W- m: F
  280.           iCurrSize++;
    - R6 j1 G# O$ v. g4 @+ K9 [
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));8 H; T. b1 X4 ?, V& h& L
  282.         }
    $ r! @) d, Q( m( C
  283.       }# J' Q1 c' Y' a# Y3 N& D
  284.       unlink(".\\update.txt");' ?$ j! I, O' f. ?- ]$ ]
  285.       unlink(".\\update.tmp");1 ~* V, O8 `* f+ T. j9 A5 h! U) |- `
  286.       Fclearf(".\\checkversion.dat");
    % Q% ^9 F' K) s6 K+ t
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ; u: R( u6 _+ S/ h1 o
  288.       if(UpdateLocal.size())3 n# \9 ^/ ]9 I- @# f
  289.       {8 b8 o. n* \; L5 J: `
  290.         UpdateLocal.clear();/ u* p5 R( @% s
  291.       }
    5 {, G$ E/ V/ G, E
  292.       if(UpdateFile3.size())
    ' a, J: S. s+ _7 ]) k4 G8 s
  293.       {+ O& ~9 [/ J4 S* W& t9 r5 c
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 k) k3 Y' f; Q6 t6 N" {+ W
  295.         {+ ^( C/ T( f9 @5 h
  296.           file=(*p).second;
    ! I& w# r5 [# {- B, q) {
  297.           free(file);
    4 `: |, G6 G& |7 U
  298.         }
    $ w0 ]+ o' h+ c, f8 q+ K8 p' }
  299.         UpdateFile3.clear();
    9 |% J3 P, E9 z7 F% Q
  300.         UpdateList3.clear();
    9 i+ A9 K9 M% {% }' {2 D
  301.       }6 t' H  `. X/ F! D+ i5 x# C
  302.       if(UpdateFile2.size())$ E2 F5 G; N% F; _' u+ w$ ^& D
  303.       {
    ; t' E/ z2 z9 l/ w3 l
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 @' M) a5 S# |( t+ y: I) j
  305.         {* M! ]- Y2 T; Y; j1 y& E5 [$ f- |6 N
  306.           file=(*p).second;
    : {9 x) _# b% |* L5 D
  307.           free(file);* T0 B$ u9 Q$ O1 `
  308.         }
    2 U: x: g& w' Z1 U  Y3 T
  309.         UpdateFile2.clear();
    % t" F) `. \( z; A. e
  310.         UpdateList2.clear();
    ( m! q5 s$ [' S3 r
  311.       }
    + X) N- ^- m8 Y5 c, Z7 f; T2 N2 W
  312.       if(UpdateFile1.size())
    6 x4 r9 \" z# A
  313.       {
    6 A& O  @, l6 z$ D6 {) B
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ b+ F/ s8 @! ]7 v
  315.         {
    1 \; e" R9 k9 J3 y+ f& C9 h# s+ L: \1 l; E
  316.           file=(*p).second;
    7 j4 Q2 h$ Y( c* J; ?3 t8 B' \
  317.           free(file);
    & Z9 H: O: l; j* e" B+ Y. u8 R
  318.         }2 `3 _; `2 v# V/ r4 D7 ?% b8 D/ x
  319.         UpdateFile1.clear();
    9 ^7 X  g+ Q; W0 X* J2 [
  320.         UpdateList1.clear();
    6 _8 Z, |& B9 o0 T) l4 S
  321.       }
    / S- P: l* Y" e6 k! x
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));+ Z: I' u0 F  e9 n: y
  323.     }, p/ U0 m; H$ K- q+ b) f
  324.   }
    ! c/ `0 }; ~" d3 K) s* s5 O! s
  325.   return FALSE;
    ; |% j# k3 R/ t, D) i3 E: l+ n& C
  326. }4 h: Y  x) v+ K( |/ q4 I- x; q
  327. # O0 {3 w, J' U. o' N" i& c- U
  328. void CRevAppApp::ClearAll(void)" x4 `. H6 l0 U; x* X0 R
  329. {' _" d  l4 G! y, W2 v- S
  330.   LPUPDATEFILE file;
    8 {* m7 i1 X6 n# F  r: f
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 f# [* h( _  i
  332. 9 p- ]8 z; N7 u* [! a! b$ n
  333.   if(UpdateLocal.size())
    6 ~! X7 q3 ~5 a9 v3 C  ]
  334.   {! d& {5 ~- |' T( v
  335.     UpdateLocal.clear();) ~! f% W+ j% Q3 A) R8 ?
  336.   }: G- h; z; G& W& f0 d. f& `. g" I
  337.   if(UpdateFile3.size()). ]* r$ k  ~  O# Y$ Q
  338.   {
    % ~6 p3 C+ }& `, |) |. }
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; _0 P! y; y4 x! w
  340.     {
    2 c( X3 R1 ~- G% [7 d, |9 E+ |3 x7 H
  341.       file=(*p).second;
    ! c; `% A+ j8 H- @: @0 V
  342.       free(file);  ^4 B$ B& ]. I  G/ U
  343.     }, E! Q: G/ j2 ]& x% u$ ?
  344.     UpdateFile3.clear();
    , J) N# m8 }% f, O+ w" j
  345.     UpdateList3.clear();
      N3 ]; I. B! j+ A* S3 p# S
  346.   }4 \% ]  `! \: [" k
  347.   if(UpdateFile2.size())/ j- @" F6 M& t0 u
  348.   {
    ( ^0 f/ J0 F- a: l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% D: Y  o, R: y8 A" n
  350.     {
      W  W. \' T- G3 M+ j& ~# _
  351.       file=(*p).second;5 Q8 Z% d4 S8 G6 p9 Z8 D
  352.       free(file);
    9 x! o9 G1 [! u, d' V2 S
  353.     }
    , h4 T0 h* P& T; t7 f2 t
  354.     UpdateFile2.clear();6 X5 Z0 i% i3 I9 f: l; h
  355.     UpdateList2.clear();
    / l0 k8 z$ N% Y, W- s& G/ S1 x
  356.   }
    & N9 H2 G. [0 U, W' v
  357.   if(UpdateFile1.size())5 D; A8 K" y& O+ W5 C/ Y" ^, t
  358.   {0 g8 z. Z6 z4 w
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( x* h, J3 c% G, L% X
  360.     {: @2 C: i4 v4 E
  361.       file=(*p).second;' G* x( F# p/ E' x7 j4 F* o
  362.       free(file);( m# n! q. Y$ t9 p- q/ R
  363.     }
    $ U: ^; ~. ]* Y" R/ m8 e" C
  364.     UpdateFile1.clear();/ B1 O) b" [. [( ^2 z1 Q! `
  365.     UpdateList1.clear();, [( p# \# {# g# Q) R+ h2 v0 a
  366.   }
    . u5 Q; f' f4 e. V- w  }
  367. }  
    2 h  y! Y  ]* K1 \: e: |
  368.   
    : A5 S" A; n9 N% [$ x) d. ]$ u
  369. BOOL CRevAppApp::CheckLocalVersion(void)6 o; f0 H, S1 ~
  370. {/ v7 P' {& b. ^8 {
  371.   int c;0 ]* A  k7 n/ A/ m, y9 i; p# s3 f& ?
  372.   LPUPDATEFILE file1,file2;' I; k8 f. V* o4 M* T. d' I# H
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;" g! E  ?$ h/ G# d7 ]6 @* a) ?, O. ~
  374.   std::list<CString>::iterator l;
    5 }# B3 l/ ?  b5 L5 x  u( |5 k8 d
  375. 8 a! {" f( d" t5 f# C
  376.   UpdateLocal.clear();  f# J+ s0 V- x
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ( U7 y7 |, u3 ]7 q' }6 h
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);* h% S% Y0 A) j0 N; _4 ^# m* {. C" x- `
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    & q* P: i! }8 D6 ]( a( a% J
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);: p/ Y3 i$ ~" ]( ^
  381.   if(UpdateFile3.size())
    3 `8 I* @+ v5 }8 i/ c+ ^8 d
  382.   {
    7 @. |8 {- D/ @! E# ]0 T
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); z2 [# i# s0 d$ J) Q
  384.     {
    * H! P/ r9 a9 I1 F4 Q$ W
  385.       file2=(LPUPDATEFILE)(*i).second;; P0 q% M5 ~) k' s$ E, R
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : h4 i5 r$ n: Q4 e  I5 a1 A1 W
  387.       {
    % x6 ]8 `9 o: a( o. r
  388.         file1=(LPUPDATEFILE)(*p).second;
    % I2 D, n0 Z# }
  389.         file1->vers=file2->vers;
    * Y* P4 z- N+ e
  390.       }, {8 I* [. D1 T6 r" D# V, p
  391.       else' M+ q0 F8 j1 T% D
  392.       {
    5 i6 g6 I6 B) M' ^! T8 @
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # u+ ~* d7 b0 c' y8 \! W
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));# {* Z# k& Q3 E; _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));) o- e' c$ D$ J! y$ z
  396.       }
    2 T+ f3 B+ C& W7 j3 `* O5 D( G2 y- H: m
  397.     }
    6 b" D! R2 v4 ^, F: }" I
  398.   }
    1 R2 E* P! _1 J" }+ r1 M
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% l, i+ ~+ k. J1 \' u2 d
  400.   {
    8 ~# c5 ?0 v3 T& G& g# i) |& b
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    # y* Z4 z- ?1 G4 Z7 v8 J0 {; R: Z
  402.     {
    4 s) y& q2 u% ^# E; o4 U" |" O
  403.       file2=(LPUPDATEFILE)(*i).second;5 T3 @9 P: z4 ^- X7 L; N& R
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# m- M' i- E8 K) {6 z
  405.       {
    * O. k/ c9 g9 t& [% s+ h
  406.         file1=(LPUPDATEFILE)(*p).second;
    # F( |5 O: G3 z( x: L3 U( I
  407.         if(file1->vers!=file2->vers)1 @$ h; \3 M* j1 I3 z5 D. m+ p
  408.         {
    % [  z) }3 q+ c7 r
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % @: `" j" L! O8 G6 f; m
  410.           c++;
    + ?$ O5 o: G6 I& P# J+ C
  411.         }* U$ h; @; D2 c% ^$ I$ Y6 y
  412.       }
    # D6 z+ m6 l# o
  413.       else; w0 a1 o" x: T3 W8 H8 V) z
  414.       {& g$ n! X( K- b- G+ H$ W! I4 h
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, A5 ?" D* ~, Z! V2 t
  416.         c++;2 U6 d" G( c& b
  417.       }
    / m3 S# c' V# L/ a
  418.     }# D: A. l2 \2 c
  419.   }9 q! J3 T1 J4 l; P# p; Z" c
  420.   unlink(".\\DownLoad\\update.txt");
    9 Q/ n% w% H4 J
  421.   if(UpdateLocal.size()) return TRUE;
    ) j3 L. F' K- K; C
  422.   else                   return FALSE;* P, e, ~9 y5 e: t
  423. }3 s, l  o1 h0 W" n0 h
  424. 0 c- `3 H( R4 h
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"1 K9 w* P! m2 O6 x7 m* i) G; Q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"/ q( D( l. R, G8 s% |
  427. ) e2 l! `3 Q& P4 L

  428. $ P2 r! T, @# W6 O* E

  429. # q9 e" M" s$ R, S) d
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    6 \6 }) }/ d) }; x7 U. n7 l
  431. {5 H( `( I- I# S( N& O0 \2 Z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;( `1 e4 ?' p) n3 n. E
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , F$ ~& w& S. j, D( j+ W- ]
  434.   {
    * j. D6 n4 y, c0 ~9 N1 S( Q8 {
  435.     char szLanguage[50];5 Q, g, P5 j' {/ K
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% ~% {* ~2 P) w$ ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % ?7 J% s; e- V  ~1 G' O
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# [. L( m5 b7 Z+ Z! U( E% @
  439.     else                                   m_iLanguage=ENGLISH;
    : k" i, _+ f/ ^. P5 e
  440.     char szRegister[100];/ S5 V* D/ C; o7 V) m
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 U. `1 e( v/ {' A
  442.     strRegsName=szRegister;( N# B8 W) H0 I; p) ?2 p
  443.     char szPatchURL[100];$ b( V/ ?+ ~1 M0 e. v  A
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , T" I8 h  @/ {3 {4 `. U' G$ ^; p
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 ], X# A5 m# c5 m, w/ }
  446.   }
    2 o' P; o3 O+ V
  447.   else5 m" _& k, q% |
  448.   {$ y0 l" Y5 }( `9 Z. x; r
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % d8 h/ X- E; R" E7 Y) c
  450.     strRegsName=DEFAULT_REG_URL;
    5 t3 p0 |9 Y8 E! V; U
  451.   }! F6 b, P. M1 h
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 M" p4 X+ i" l! U; u3 ]! y
  453.   {+ _7 F! ?4 Q% o1 N
  454.     char szIP[50];
    7 u4 X9 d4 G# x0 v/ `4 ~! @
  455.     char szDIR[300];6 f- `. M3 R) o9 f
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 c, M" |$ G. s, H( Y7 w2 L) V
  457.     {# S9 o  y7 q; u& L1 z; B) U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    . P1 E# t: [, T. `
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    " Q* x# M) v; x
  460.       strHostName=szIP;( }& Y+ H( O  F2 y1 c9 s
  461.       strHostPath.Format("/%s",szDIR);
    8 R% ~/ V& ]- f8 C/ ?* l+ t8 ?4 T
  462.     }
    # e, o6 B$ w$ X' t- {
  463.     else
    ' \( Y* h6 r+ f: G1 f0 O8 z1 `* c! k$ l
  464.     {! Q/ i% f$ J/ x" b- h
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 s. H+ G% T+ ^- E6 d5 u% q4 R
  466.       {
    9 p6 o8 U( n- W8 s8 ]
  467.         char szLanguage[50];- P3 i* s7 x9 A7 ]
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ j& E3 T% C7 `# O
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' a+ Q" c/ B  \& q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" h6 u" Q, N, P3 R, z
  471.         else                                   m_iLanguage=ENGLISH;
    & ?+ Q! }3 p( r, S) S9 g# H
  472.         char szRegister[100];- C& i: L) r  I$ j' o: A& Z: e2 l
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' F- ?, p7 _" d# z0 e5 C
  474.         strRegsName=szRegister;4 z3 R: \4 @5 ?8 [
  475.         char szPatchURL[100];
      V1 A, r9 E9 H/ F: P1 p3 j
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 Q8 A/ G" F$ C( A* K3 M1 ?, ^
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    . f& M0 O7 d) w" r: N+ ~6 r
  478.       }8 @6 z2 f: w! l1 {5 {3 G5 E: L8 I, S3 @
  479.       else
    % N4 R2 f  R! F  C/ Q
  480.       {! e4 K9 ?2 [" K( h+ f& S8 h! A9 V
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / i$ F5 D( a8 H1 u. @+ D/ D4 i
  482.         strRegsName=DEFAULT_REG_URL;0 z* s6 ?- Z' u' ~; Q, [
  483.       }
    8 @2 H7 k8 ]7 j7 g8 p2 @  p" M
  484.     }$ ?7 s# f1 ]# D. q* O( _" s
  485.   }/ d! Z4 N5 y+ D" `1 _
  486.   return true;) r' P+ P0 `, V- t, n; [. d0 {
  487. }
    0 I* }3 Q! x9 M2 [, o8 F
  488. $ z( E/ a+ k1 U+ z
  489. #include ".\ZLib\unzip.h"7 _: V1 p+ Z  C
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" ]9 p/ H+ o0 q. s& v
  491. /////////////////////////////////////////////////////////////////////////////
    6 d2 L5 f. ^: g
  492. // CRevAppApp initialization
    * O' u" L" Y& q! W0 Q8 j) t
  493. 1 c5 W4 N- C- G9 y% m
  494. BOOL CRevAppApp::InitInstance()4 f5 b5 a8 @+ c* \( R
  495. {
    2 c) i4 V4 P" B
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];, D* t3 J( W- Y. i
  497. : e; R  U$ h/ X/ e/ W
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);1 `& L$ \" T6 L3 x
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)), z1 R* D, X0 k& n+ E& @% q
  500.   {
    # X3 d* Z( {  p* S
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");* }& E: A  W/ p
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    4 o/ E3 ^+ A% g
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))! h, A: @9 P* w2 O- j+ y
  504.     {
    / A! K, L' y. i, o/ e9 o4 {. w
  505.       strcpy(szPath,szPathTarget);
      b& e) ^; s- O  ?) a& ]
  506.       SetCurrentDirectory(szPath);8 m8 g; s/ Z# ~% t. m
  507.     }
    - a+ x) Y' D* [; R2 A; g' C7 f
  508.   }
    : u- a% |2 g9 O
  509. #ifdef _DEBUG6 ]" u4 g5 q$ b$ |: i- K
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  k4 @- L- k; V) y- d9 d
  511. #else: r: ~2 f/ L) n5 `% w. g, ~$ s2 l
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . t  U- m8 k. v9 N( K
  513. #endif' E+ y8 U+ c. c$ W. B/ Q: L' m' K& O
  514.   {# F/ a- `4 X( A; I: }  Z4 L
  515.     char tempFileName[MAX_PATH];
    9 o, {, v! |; w; Q' u
  516.     strcpy(tempFileName,szPathSource);6 `3 ^) j' _1 m- j% S" E7 ~0 r/ u* @
  517.     tempFileName[strlen(szPathSource)-12]=0;& s& I9 Z! e& u  w6 n% }; o
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    9 W: m+ h- N9 P7 I2 d
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);  I* V% g! [' r& L; Q8 A# W( |0 q/ {0 H
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);# ~, S9 ?( Q+ F0 c$ J
  521.     return TRUE;
    % ^! ]9 m" X" G5 H& B1 {
  522.   }2 ^" ^7 ^# R% w9 b& S8 x
  523.   // Nuke 0118: Delete run.exe4 ~# t, R! W% M. |) y" e& \! `
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );) i% y8 k* X9 p$ y" D1 L* {% Y, H9 _/ x
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");; u6 |8 K) i+ L3 p' u3 B7 }4 x
  526.   if(!ReadCfgFile("Config.ini"))
    - M' f5 t( h4 X4 Z
  527.   {: j: H; r' D5 n5 p3 z' _0 l+ p
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    9 P3 E: M" j8 `) P9 F1 D
  529.     return TRUE;
    9 l  T0 a+ V* p$ A3 g, Q
  530.   }
    9 `; ^2 M7 g/ O+ s! U, j
  531.   HANDLE mutex;
    " R, F& |+ @' m# ~  ]
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; w5 @# m* ^4 f% \5 x1 y( N: _) T
  533.   {- `- ^* ?: C: _6 M" _7 S, f+ p
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    + K( }, `5 H4 }
  535.     {0 O1 R" U' K( L2 u9 }9 w" F+ J
  536.       CloseHandle(mutex);6 g# t. R9 ]0 Q! t
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ' \; q, h7 _. j: i: X& C- O) Q
  538.       return TRUE;' {8 g" [) s+ r% \6 J3 `
  539.     }
    7 u! X& C3 Y8 W. s+ }
  540.   }  4 O9 Z6 |& ~8 n# }: H" Q6 f2 I8 C
  541.   CloseHandle(mutex);
    # R9 N. I7 b  B4 C7 o2 D' T( K( d& h
  542. 6 }$ J% f: R5 o  x; b9 o  ]; S' g
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);* A/ J- j+ K9 c5 F6 [

  544. 7 {( x) x3 Q% T
  545.         AfxEnableControlContainer();
    ! G; }# N7 D6 M4 e3 ~

  546.   r2 U* O( S" t
  547.   bCanUpdate=FALSE;
    . L7 r* Z$ z6 Z. A2 T, n3 J/ _6 h
  548.   dwStartUpSteps=1;
    4 C4 ~+ X$ C0 {& H
  549.   dwProgramState=AP_NOTHING;
    % G) N, J/ v. ]& E4 |/ d
  550. + K1 L' \$ d: C5 o' d' s+ f
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & V# w+ k8 H9 x: e# Q
  552. $ r, p- T* f& m$ \) N/ I+ C. Z
  553.         // Standard initialization
    6 Q$ u9 N9 p! i
  554.         // If you are not using these features and wish to reduce the size, \7 i! X8 ?) k
  555.         //  of your final executable, you should remove from the following
    ! N! L' E" S/ g  r8 J% w
  556.         //  the specific initialization routines you do not need.
    : Z" r& E. \% j* R5 X
  557. 0 f6 e* U# {) }# ?+ \
  558. #ifdef _AFXDLL
    , E+ W- O2 W3 |$ n
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    , u7 ]% \! \- J2 v
  560. #else
    0 ]5 }# w  l7 ^1 h' n. m0 n
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically3 a6 N: @2 `# z0 v7 Z0 X3 G/ D
  562. #endif7 h) l/ i- a+ p2 d" Q( a& Z

  563. $ C' J- E: O0 F; r; C$ q
  564.   dlg=new CRevAppDlg;. Z8 z! r: j3 [3 Q
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    # Y8 q/ c+ C+ ]) A5 W3 b! m  J
  566.   dlg->ShowWindow(SW_SHOWNORMAL);" X  o0 V7 P2 S$ G6 }2 Y1 N
  567.   m_pMainWnd=dlg;
    ( C9 @' j: Z' b8 k0 p4 h
  568. - M  w4 _1 k9 B+ r2 Q* f
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ; p! A! R2 U  {( [/ x( L: ~2 `
  570. $ }3 ~# A; j, g
  571. //  GdiplusStartupInput gdiplusStartupInput;8 |# H+ Y2 C; a7 C+ E
  572. //  ULONG_PTR gdiplusToken;: e, l8 r) C# }3 }
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    : S6 ]# O% N8 u4 L! h& n2 P
  574. ' f/ Y  K5 [8 d' r
  575. //        CRevAppDlg dlg;
    7 a- h; s5 K' \
  576. //        int nResponse = dlg.DoModal();+ f: U/ n; s# e5 g/ ^+ V( s
  577. //        if (nResponse == IDOK)
    + g% f" l% F9 j
  578. //        {
    5 X* ~/ Z& t& g5 k6 y# h+ z+ m6 T
  579. //                // TODO: Place code here to handle when the dialog is+ T7 D4 P, b! |; X7 H
  580. //                //  dismissed with OK
    ( Y5 E1 S  R* ~/ z
  581. //        }& `; ^$ }" W0 b! i, s+ `
  582. //        else if (nResponse == IDCANCEL)# U2 R" }  D- n( l' D; t" ?
  583. //        {
      w/ u. w& j, [# _* G- g/ a
  584. //                // TODO: Place code here to handle when the dialog is; x4 p, \6 F7 _( `2 E, V+ ~
  585. //                //  dismissed with Cancel# R# k8 A, O& T6 w4 `
  586. //        }$ C- |  F3 o4 U% I" P# P

  587. * d8 l- h5 R9 ^: c4 M
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    7 J1 L1 Z, m: g, Z+ z% S! O
  589.         //  application, rather than start the application's message pump.
    8 ]* S. `3 z" j9 J8 Z% W& a* p
  590.         return TRUE;
    + T, {3 ^% {- {# G: n
  591. }) Z6 @5 c5 ]3 h. S  z% s  A& f6 z( H
  592. 2 ]7 {  W$ m0 j0 B9 Q! h, q, |4 [0 Q" k
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / h5 R/ v5 h& `7 M2 Y
  594. {, X& v, I7 c; v$ r3 U" a
  595.   int i;1 J; h: d8 g8 i2 t
  596.   char *szRet;9 z( D4 s& Y7 w

  597. ( ^2 q$ f) E/ x* W4 v
  598.   if(pSource) { itoken=0; sztoken=pSource; }5 L4 f  w& q9 k* L) ^' X- s3 ]$ I
  599.   if(sztoken)8 r2 c5 \, a9 \
  600.   {
    # n. i* g/ ~9 @; }, t5 e
  601.     szRet=&sztoken[itoken];
    $ z- S7 @0 Q9 c' s# q; P) X
  602.     while(sztoken[itoken])
    8 T8 _. Q% s" Q9 J, \; O) N
  603.     {
    2 c7 I$ v0 d6 S! I' B9 W
  604.       for(i=0;i<(int)strlen(token);i++)6 z) c$ z3 F8 \6 p$ u% z; |
  605.       {. j- W, I/ ]* t% P- i" \$ L
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])9 H% _2 p% M' ~  U# Q
  607.         {' P* G; q- o, V- i* n3 k! {
  608.           sztoken[itoken++]=0;
    ) }- [3 j% G9 u& m* S5 ?
  609.           sztoken[itoken++]=0;
    / x' x4 I2 K; K/ a. e
  610.           return szRet;* w* I4 _( i6 y+ j# c4 G/ e3 Z+ T
  611.         }+ y2 F+ M4 I+ o' U! \& c; P
  612.       }
    ) ?( {7 X# z/ q
  613.       itoken++;* E) Q0 t' [% J5 h) U" b# R
  614.     }
    . N/ C$ X+ c; e! r7 e7 ]' g
  615.   }1 L6 |$ F/ m4 ~* V# m/ |
  616.   return NULL;
    7 N+ c; `: U7 n; P  g/ F. B/ S  \3 B+ \
  617. }: d. L9 b# k/ W1 F

  618. # u7 i: d% C9 m* t  |
  619. void ProcessProc(long Total,long Current)
    : e6 N( B% h+ z- Q  g2 s% w7 _# ]5 d
  620. {# X4 ?% e& i3 P( P
  621.         MSG msg;) J+ i' A2 E" p
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);- w* ~; C* f/ Y+ L3 X) J' A. X1 K
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    7 S& r8 O, v- n. ?
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    . w$ [* }/ [2 z. s( [- D! U2 |
  625.         {
    0 `/ g( R; S$ ]" f3 V5 {
  626.                 if(!GetMessage(&msg,NULL,0,0))6 j0 S4 X$ @  w3 f- ?( K9 c
  627.                 {: M2 h. f2 G2 A& f8 `
  628.                         return;
    / C1 ~3 r. O! G4 L" b
  629.                 }
    $ U1 W- l; q3 c# t* h
  630.                 TranslateMessage(&msg);, l( l" R1 X0 R5 C
  631.                 DispatchMessage(&msg);
    4 R( u! ]2 J1 ?- Y9 t! w
  632.         }        3 I  z  I. _3 f; b: D" o% U
  633. }
    8 {2 V0 m1 g4 x+ ?# o- l, W
  634. * m8 r( n8 F9 Y! ?. W+ k3 e
  635. BOOL bFirstChar=TRUE;. ]) F( E  @" f! B- _2 J
  636. 5 w& R* Y: U2 m. `8 C
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    2 k9 M5 t% a5 r1 u7 O4 n; C
  638. {% N" W6 Y: k! b
  639.         // TODO: Add your specialized code here and/or call the base class7 O; C- \% D2 l; Q! i
  640.   switch(dwProgramState)
      i  S. c/ f* D& l' |
  641.   {' y4 _8 R6 L; E! u/ F/ J
  642.   case AP_NOTHING:
    ' n' n* ]2 F0 Y9 |* t2 f; J! d2 {) _, x
  643.     switch(dwStartUpSteps)# w3 l% H7 [" L6 @  B6 n
  644.     {. s( {- p7 i3 `6 j
  645.     case 1:8 Y& X) f6 w! U+ |$ \
  646.       {" w* b$ u8 r7 ?" H3 s
  647.         int i;7 p' Y5 R( p2 @+ C# S! d
  648.         CDC *pCDC=dlg->GetDC();$ ?" L- t2 n* ^9 R' G$ k: \: q; H
  649.         HDC hdcwnd=pCDC->m_hDC;
    9 v. Q9 F5 g6 D7 {8 h; V0 O
  650. //        Graphics graphics(hdcwnd);
    ! w9 F+ J" G4 S' `5 E
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 f; Z# ?- ?" D/ J7 i7 j" A
  652. //        INT iWidth=bitmap.GetWidth();
    ' u3 e' H+ \6 n( e3 V* n- \
  653. //        INT iHeight=bitmap.GetHeight();
    ! T5 c2 {  O4 I/ J7 m9 s
  654. //        Color color,colorTemp;! G# @- R" a) u) A7 y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ) X+ K: ~$ K. ?  R' C
  656. //        {
    ( z, b5 b* ]- W  U
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)5 V5 l( W, u) R& @: s. Q
  658. //          {
    * a. Q8 O/ B3 ?4 ]) g- `7 \
  659. //            bitmap.GetPixel(iColumn,iRow,&color);- T1 T; E! l" w' Y" I7 x3 d7 b5 |
  660. //            colorTemp.SetValue(color.MakeARGB(
    : T5 W- V4 Q5 K; \/ G3 h3 j
  661. //              (BYTE)(255*iColumn/iWidth),
    ! p% r7 V$ I7 J( X+ ]
  662. //              color.GetRed(),7 k) c- Y- \" {; t% g
  663. //              color.GetGreen(),4 Q$ L6 n/ C% O* Y. G) D! W& q
  664. //              color.GetBlue()));
    4 `- d, l9 M! W0 @# m5 p( v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);" V8 B( g7 E0 @. P* ^7 V
  666. //          }
    % E5 j. O- u& Z
  667. //        }+ m3 O* R- y+ {( J2 h1 ~
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);, E" c' N$ J9 K& ?$ j
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 A7 I! L( g0 \" H
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");# H6 q) \* N! i( w
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 I9 H  d4 G1 u  L- d* Q
  672.         for(i=0;i<240;i+=8)
    1 q+ h) {/ A& C, p
  673.         {
    3 U! Y3 z4 U- n8 @
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # c% Z. C  Z8 r, A/ ~: D8 a2 @
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # d% g% w/ G, `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + ~4 ?. [- A( b' K0 [
  677.           Sleep(33);
    + z0 y: {, S! A# e
  678.         }
    ! L- K5 n& m1 i, T8 v3 \4 C* f7 s8 G! w
  679.         Sleep(1000);) ^, O; y: ^: _' E" r! u
  680.         for(i=240;i>0;i-=8)
    - c0 x1 h. |) a$ F3 Y6 N+ q
  681.         {% M, ?4 c. Z( U6 a
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 X! b& S$ X6 }" d
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. m9 G8 u  n% J" g, ]. J' p
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 x4 o$ s9 D5 w& Z0 \
  685.           Sleep(33);/ d7 e. H: |6 x
  686.         }9 ]- D+ S. j2 y3 d
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( w: N0 q  _# e8 K
  688.         dlg->ReleaseDC(pCDC);
    0 i7 ]! K. x# ~+ u/ L! M; L+ r
  689.         DeleteDC(hdctar);
    . m) @) ^6 h6 s, g  I: J- J; ^# m$ w
  690.         DeleteDC(hdcsrc);2 l. v) i9 c5 J/ N0 E' S% M+ C
  691.         DeleteDC(hdcorg);
    * ^8 p( q* E1 B& x
  692.       }6 v/ f5 x2 e! [' @- w+ k) N
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    7 j% ~; P+ s% N+ I3 F% [, m! W2 ^
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 B, K/ F2 W# }2 R9 Q9 n8 }# `
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");2 j5 l" O, k; W$ M3 H9 i% W
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");. V% S4 o  Z" i2 a7 a
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& d) e, L6 R, y( J# y4 c, x
  698.       if(!Dn.Connected())
    6 m0 w, Z. ]+ N8 G, ?) W! ]
  699.       {/ h9 x( a2 W) c+ ?  M7 G
  700.         dwTotalFiles=1;4 G' \/ D3 W9 e8 Y3 L- R$ n
  701.         dwDownLoaded=0;! W4 x# t# x4 ]; u  h* W7 A, [
  702.         bSilentStep=TRUE;% G) H9 _. R0 w$ V
  703.         bCompressed=FALSE;
    : Y( n! [8 j: t+ w) y- p
  704.         strExtLocal.Empty();6 R0 B+ m" N% ?$ w: r' g
  705.         strFullName="readme.txt";# n) q. r' r2 `3 y4 o2 J
  706.         dwProgramState=AP_CONNECT;2 H2 ]0 J: P7 H6 H" R- ^1 I
  707.       }# v1 r* I7 z; g, g& T" F- j
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    & X* }$ F+ f! x4 o
  709.       dwStartUpSteps=2;# j- |  X1 l2 ]: @# f& l2 e' X
  710.       break;
    ; B* [4 N  b) L( p) Z  H6 Y1 ?* a
  711.     case 2:
    * `; s4 `) y$ Z) b. ^. C
  712.       {
    % a- q: S4 [, E, h( T
  713.         int iEOF;
    5 e# F' A$ O( s2 T; r9 S
  714.         FILE *fp;
    5 x3 Q' R2 H8 l) `* Q* c1 M5 }# ]
  715.         char szString[512];7 d) X( k2 U6 n' O
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    " p% W0 k! x* D* T  m( G5 }3 P7 U( I
  717.         if(fp)5 [8 s. j/ U4 `8 e& Y' |
  718.         {% q" ?6 \1 I. B0 J7 G* ^$ n
  719.           do$ N: R$ P/ I0 G# E4 s0 g8 f' E
  720.           {: T* l. X7 e) R! c) H$ [, X! l' @
  721.             iEOF=fscanf(fp,"%s",szString);
    4 u/ ^% D" t- C' \  _+ j' O6 k
  722.             if(strlen(szString))3 g6 g) D0 v8 h- \- r# W
  723.             {
    0 R3 C" P$ t# U
  724.               if(bFirstChar)
    5 E! Z" k2 q! z$ O+ D( C
  725.               {+ d  Q! L' h8 }! F& Z
  726.                 bFirstChar=FALSE;6 M4 G* o/ j& n! |( ~
  727.                 bConnectIsBig5=FALSE;
    ) F. i1 w3 _& C' [; u
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; O) S5 V3 `2 r6 g1 u+ W! W' v
  729.               }. v1 F7 G. Q/ ^* ?# u5 f
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));7 I; t* ]: t, j9 O' ^) b) p
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));/ \1 F  k8 z6 v. P7 p
  732.               dlg->m_ListText.AddString(szString);
    " B5 x, s9 m: m0 `+ f" F& U  a) {
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  J( i! f! H8 ~' w
  734.               *szString=0;; E4 J6 l3 R  u' ~, @2 z$ x/ z
  735.             }& `! _5 s1 B( m$ |6 j7 q% B
  736.           } while(iEOF!=EOF);
    . F4 c: c2 z7 A; d4 R" e
  737.           fclose(fp);
    5 Q( _3 t" c% u
  738.           unlink(".\\DownLoad\\readme.txt");  d  }/ J0 k: q: m' S
  739.           dwStartUpSteps=3;
    # F5 _* j( k& Z4 \7 I
  740.         }
    + W5 j% t' |, Q
  741.       }. x  B; G$ k3 S4 k
  742.       break;( F2 \5 ?5 R( u9 v
  743.     case 3:4 E4 E) U+ W" @" h% N
  744.       if(!Dn.Connected())" J7 m) g0 `9 g9 B9 u
  745.       {
    ' C9 Y) k5 n+ ]+ B: g" Y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);9 x8 Z1 F+ I0 [4 o
  747.         dwTotalFiles=1;9 l: i0 ~9 R2 X  d; ^
  748.         dwDownLoaded=0;2 r1 b# \' l* F  t& u4 ^
  749.         bSilentStep=TRUE;8 |% w/ U. w& i6 W
  750.         bCompressed=FALSE;
    1 |7 q. c/ I$ j! V) b
  751.         strExtLocal.Empty();4 m1 p1 [, k# l
  752.         strFullName="checkversion.txt";0 ?: d# J5 a9 T6 q5 K3 M
  753.         dwProgramState=AP_CONNECT;- M* h8 O( |) Y6 \
  754.       }; p' N1 m9 Z" f
  755.       dwStartUpSteps=4;2 f, w6 q5 l) k; [, }# t
  756.       break;
    ' z* \5 G( p5 `% c$ }, C9 w
  757.     case 4:
    2 H# Y) N5 G. c- M
  758.       {
    5 u# J: F3 }, l1 p
  759.         FILE *fp;
    * a1 a; Z# }" L  T  a
  760.         char szString1[128];- j; O# C2 g% K- t: W( i
  761.         char szString2[128];
    . A) R" H2 p9 K( r( r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    5 G6 m- r* s; u6 H
  763.         if(fp)
    ; N1 W2 U- I- v' K* j
  764.         {/ b- S, d% ]+ `* O0 G% o
  765.           fscanf(fp,"%s",szString1);' q) ]" C7 v0 w; q3 I- V$ ?
  766.           fclose(fp);
    1 V' q4 H* c) O6 x" z
  767.           fCheckVersion=atof(szString1);  _: Z1 w# r, ]  x5 |/ R. r1 _
  768.           fp=fopen(".\\checkversion.dat","r");  A+ P7 a( n! t( V* O
  769.           if(fp)' {' |" q* J; P& Y
  770.           {: J0 U% i$ X- J3 h, H
  771.             fscanf(fp,"%s",szString2);
    1 S1 u, K/ D/ D; Q! q. `  g
  772.             fclose(fp);
    & [1 F0 c5 ]5 N  J. ^) ?
  773.             if(atof(szString1)!=atof(szString2))+ C+ |+ k3 K6 K6 s' l
  774.             {8 s, B1 V5 K/ H! ^$ r
  775.               if(!Dn.Connected())
    5 r7 Z# x6 z3 I$ F
  776.               {( g( F* M9 X) V5 a( d
  777.                 bFirstUpdate=TRUE;
    # l8 k! ]+ |  w- e( U7 X
  778.                 dwTotalFiles=1;+ z" ~3 ?* _- W+ Q6 C% f4 A7 R
  779.                 dwDownLoaded=0;  q( w' O0 d& Y7 {& g
  780.                 bSilentStep=FALSE;
    8 Y# L2 ?- o9 o1 Q8 x8 h
  781.                 bCompressed=TRUE;+ x/ G4 G" ~/ ?1 O0 X% g
  782.                 strExtLocal=".\\DownLoad\";
    2 k: |, {& ]" I9 }9 b* f+ d
  783.                 strFullName="update.txt";/ c# V( a# h4 e+ g: h1 ?
  784.                 dwProgramState=AP_CONNECT;  ~7 `& R/ m0 K5 a8 V7 h& a
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + K, r+ f; Q8 `0 H4 `" k+ q+ K6 K
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 \1 a/ S8 b  U7 Y. Q, U; r
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");& s# ], b1 W7 m6 G7 |/ o
  788. + x) |+ g3 |- ?  r
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % K. U. g; O# j
  790.                 unlink(".\\DownLoad\\checkversion.txt");& _2 A! n+ \2 Y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 e1 p3 D% T8 R- ~; N0 V* d
  792.                 {* C3 q$ ^  M  T1 v1 a
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    6 @+ X! S3 _0 `1 n3 D7 _
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ! F6 ~" }8 [; D8 }" @. U' o
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ' p/ ~/ o/ L6 f7 |
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* Z$ I& K& Y0 X( }
  797. 2 [2 F& C8 k- i. I9 @
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - x$ `2 B% N; l8 x7 Z, [9 G1 \* G
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 b/ z2 m! p9 A3 }
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 Y, D4 y- q; S0 {7 _& O$ ]* w
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # W" H' v9 F6 ?. N; @' x! R5 F4 [1 ]
  802.                 }
    . Q: a9 ^0 r' ^& s: m
  803.                 dwStartUpSteps=5;, d: K/ N9 a1 U+ M/ A/ ]
  804.               }/ y$ I% `8 u) W& `
  805.             }
    1 ?$ P' T) N4 ]" t
  806.             else
    0 q  t& y" J& i9 r4 w* R
  807.             {' A1 ?5 S1 @, _# X
  808.               unlink(".\\DownLoad\\checkversion.txt");' I# y# x+ j9 ~1 q" C/ [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    3 W# c; b( }, j
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" H3 g( w1 K4 {- E0 T
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");( E2 S* i* H% o

  812. 5 a4 J( w( o3 {; J0 k5 @
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; \: ?( u# R$ j
  814.               dwStartUpSteps=99;
    5 N7 k  f5 M* m! d) E
  815.               bFinishUpdated=TRUE;
    ) ?5 I0 _. s6 D* @# H( _
  816.               bCanUpdate=TRUE;  m9 h8 |8 T7 w$ Q# L; y* i
  817.             }! C$ \: [7 \) J; u% C1 V( i
  818.           }8 ^3 C3 v* Y; h, K% p  H
  819.           else
    / u. n( {1 u  _7 ^9 E
  820.           {  K3 P! Z+ I# A$ p. j7 U
  821.             if(!Dn.Connected())2 x4 H  }/ n: Z& x/ o
  822.             {
    3 ^) J9 N8 G4 Q9 X# w
  823.               bFirstUpdate=TRUE;3 v+ f" U  X, U
  824.               dwTotalFiles=1;- D! I5 g6 D2 d0 I
  825.               dwDownLoaded=0;
    + o  M2 j9 S! G
  826.               bSilentStep=FALSE;
    8 s& ^9 j! v5 v/ b" w) {
  827.               bCompressed=TRUE;
    9 o& ^& w/ r2 W0 a* a
  828.               strExtLocal=".\\DownLoad\";
    3 _9 P* S! V% z
  829.               strFullName="update.txt";
    ( ]* V+ Y6 |8 G$ L
  830.               dwProgramState=AP_CONNECT;
    5 c* D( _) m  ~/ l
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- X' ~2 i& I: P# F3 P/ v
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 _% j, D& U5 [/ D
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 x/ J  [8 v% D+ C0 ]+ |6 `: f' {- t
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " _/ R% ~; {& D& L
  835.               unlink(".\\DownLoad\\checkversion.txt");  X; [' J% V1 ?
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    7 ^7 Y" c/ O4 g0 Q1 z
  837.               {4 h! f; t8 K2 L1 k2 g% W
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    " F, f$ L8 p7 U! U6 i5 f) p1 p
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");' m. ^5 Y! A; l7 K! d4 }; G! r  `: z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");! C( T2 \& @& w8 O$ y
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* R. T; e3 l# b( k; F$ _
  842.                 3 v+ l* ~8 G/ ^6 ^* R6 x: `2 }
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 S. I+ y, Y, F/ k. j0 V. V
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 F6 W$ F" ]% V( I) c
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");  @9 i6 k( {9 d" D: y
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + ^& h6 B8 ^+ R, [- Z% ~& ^3 e* C6 [
  847.               }
    9 J5 Q" j9 Z( G' J' c  c
  848.               dwStartUpSteps=5;
    8 [% W% ]6 W/ ?5 S/ j$ X2 o* s: w
  849.             }
    ; `2 y) L  [4 o) i
  850.           }
    / j2 u7 T3 B, a6 I
  851.         }
    - {4 G. ]4 j- \3 h! U; H
  852.         else
    : r' d) F6 h- t" L- S
  853.         {& A; g) L! ?1 i. ~& _
  854.           dwStartUpSteps=3;
    2 C* Q% ~5 \2 A3 d) |
  855.         }* o1 O6 z+ h: J1 K7 U
  856.       }, l9 q2 q7 S7 |
  857.       break;: Z+ @; ?0 \9 U6 h7 [  V  c
  858.     case 5:
    9 |/ z" L. ~& o$ y+ d' h% v
  859.       {  L( Z0 d1 N, e2 D. }8 s
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    , f. Z1 D' T  y( [# y2 Q# p
  861.         {
    ; ~$ V. a4 G3 T1 @! s, d7 O8 C1 _
  862.           int opt_overwrite=1;
    0 j0 u/ J: Y1 N* x5 {* Y3 Y
  863.           int opt_do_extract_withoutpath=0;
    6 C/ L4 i7 {+ ?9 O
  864.           unzFile uf=NULL;
    9 W5 d* N7 y$ h6 u- `
  865. 4 L. N9 ~3 A! p/ J. f# w$ D3 L
  866.           uf=unzOpen("Wsa.zip");- R5 N) k/ _9 o
  867.           if(uf); Z/ D" h' Z- E8 T( t
  868.           {; P9 \4 s# }' |7 z! R; h5 z: l  b
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);4 \& B8 _, M1 V% d% E
  870.             unzClose(uf);% U- l; K; e7 c' o( H- f+ B
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    & t) k' G- x9 \- v# [9 y
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    / @0 w0 c% v" H) U4 \- j
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ! y9 j0 K' k. B3 O6 d, V
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 o1 n; _' _  Q% o6 ^
  875.           }$ @& Q6 D# D# R
  876.           DeleteFile("Wsa.zip" );9 \* c( m+ x" h; u# p1 i. ?- c
  877.         }7 j1 h- Y  s0 [9 I* f5 w& F

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

評分

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