找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
) M# v/ e' I! Y! V
  1. / RevApp.cpp : Defines the class behaviors for the application.4 ~4 F3 ~, w% G; V5 c7 R& L# ~
  2. //0 T- \- N+ [' }9 }6 v$ n9 Z
  3. 0 P! }& c4 K& B( B7 q' \3 z
  4. #include "stdafx.h"8 `  d$ g/ L2 ^; c; M$ z

  5. 8 P6 `5 g: J' c; k, f, S8 I. {* U) M
  6. //#define UNICODE% m- U' ^$ P% [* @$ I1 A" `
  7. //#include <gdiplus.h>3 u" d8 V# w4 ~+ y% {" ?
  8. //using namespace Gdiplus;
    0 J: Z( |3 G1 W" `0 D+ P1 C
  9. 4 F% D9 Q, A( _! ^: H  E" B
  10. #include "RevApp.h"9 R! D( s5 c2 v. M# B) d5 Q
  11. #include "RevAppDlg.h"
    : Q" W0 R5 s& V) q  r" f
  12. 0 m4 r% T" c# V
  13. #pragma warning(disable:4786)
    / k; }/ m: v8 |) h1 c
  14. #include <map>
    ( t- E6 c% }" H3 c% }
  15. #include <list>
    2 j. ~2 g; o; u5 u! H
  16. #include <direct.h>& W! {- |$ t8 @* f0 V4 Y/ N$ N

  17. / Y6 h  d- N+ g3 `0 w
  18. #ifdef _DEBUG
    : {5 J* H1 c; q$ g% v) A; M1 `: k9 n
  19. #define new DEBUG_NEW
    , ~+ j) K4 e. p
  20. #undef THIS_FILE
      Z; U" `5 I, n" ?4 w
  21. static char THIS_FILE[] = __FILE__;, \* S- z7 ?" k; U& e
  22. #endif
    % |. \% D4 F2 Y: `. V) [0 r$ z
  23. #include "SkinResDef.h"
    5 v0 ?! m3 P) Y5 ?" e0 _+ r- k$ e
  24. #include "ChangeBG.h"
    9 _! O* e9 T! P: i2 r8 C
  25. #include "AFXINET.H"
    - a+ P; w$ x) e0 e* P9 Q) c

  26. : A- Y% Q+ @  x- Y- \
  27. #define TRADITIONAL_CHINESE 0/ A7 e0 `, U0 e' ~/ T& T
  28. #define SIMPLIFY_CHINESE 1
    * z  n( N& ~8 p& e, D
  29. #define ENGLISH 2& D: T" I1 M# O3 s  c
  30. int m_iLanguage = ENGLISH;7 M. ?4 w1 y& [! C! J
  31. /////////////////////////////////////////////////////////////////////////////) @' N7 d/ Y) t8 _1 p( G
  32. // CRevAppApp
    8 c' f# F( A6 c/ F4 C/ T5 W6 `
  33. 5 m1 k& d5 u( o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ' m( d/ l3 u& f. Q  U% Q
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    9 ^7 i0 c' Q4 H  k% p7 W- `9 u: Z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here., v2 g9 r  p8 B6 k& z6 ~1 M7 v' W
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    1 ^3 P( w9 j: T$ u
  38.         //}}AFX_MSG
    , l6 [8 u  ]( e3 ?* j; T
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . @3 }6 j; D' _7 o6 N5 D
  40. END_MESSAGE_MAP(): E. p  Z7 T0 @2 Z  l& i9 {/ q' p

  41. ) h$ f& _, t; Y' `
  42. /////////////////////////////////////////////////////////////////////////////9 B5 ~, L- a( w: h) k
  43. // CRevAppApp construction$ w0 U% D1 }8 V1 t

  44. ! U$ X! A( P( w/ B  r# A5 n+ K! Z8 D
  45. CRevAppApp::CRevAppApp()
    % y6 x: v0 p, y: i
  46. {
    1 j4 @9 N& a) T
  47.         // TODO: add construction code here,
    ' ~- }4 f3 }) M, l% H! |: b2 y; P
  48.         // Place all significant initialization in InitInstance
    / E: t- s  q( k: u. q& a
  49.   bDisplayIsBig5=FALSE;
    $ O  H) N7 e8 L6 T/ c8 b' w
  50.   bRestartUpdater=FALSE;+ V  a5 }+ K& y% Y( v
  51.   bFinishUpdated=FALSE;5 m1 n/ o+ l) q- Z8 L) c8 r. i3 N
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;1 O/ H% y/ \: i9 h% u9 d
  53.   InitChangeDataBig52GBKS();3 O, B& L6 n4 n" k. u. y# ^
  54.   InitChangeDataGBKS2Big5();0 M/ L; S2 K2 Z9 k; f, S9 P
  55.         //" p$ n  k' {: t  a5 g" g2 ^( U
  56.         bClickRunExe = FALSE;
    ( G7 `6 W  I/ }
  57.         //
    ' E. k; E, t0 K" r. i& R
  58. }
    & K( H& \  ]3 b+ w8 D" S9 @* s7 K6 u
  59. 7 e# t3 Y! j1 C1 d4 u  p4 B
  60. CRevAppApp::~CRevAppApp()% s! B8 }  T# c4 O. I6 W6 r
  61. {
    2 T7 w! l9 t& _6 ~$ A7 n
  62.         // TODO: add construction code here,
    6 [& q  A5 i: ?' k! y
  63.         // Place all significant initialization in InitInstance
    " f. y& t. c5 v
  64.   EndChangeData();$ N4 a3 [- }2 v; y7 t# w: l, j; b
  65. }
    5 E9 i* `- _' @" t' x3 p, [* V3 O

  66. % J$ }; V  p5 q: I' s1 q, s
  67. /////////////////////////////////////////////////////////////////////////////
    + i  p% h% [) U
  68. // The one and only CRevAppApp object; ^# k" S7 G/ J

  69. ' A  P9 L6 ^7 ^- X! b" v
  70. CRevAppApp theApp;
    " `6 A) t# V7 b
  71. " r& o4 z2 C: H" x! L
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)" W( {: R: E- \+ X% }6 |
  73. {
    5 t5 K" w+ l. u$ s$ g, Y/ v( Y2 W
  74.   int iEOF=0;; t- r0 {9 T1 P
  75.   char szTempName[MAX_PATH];
    % ^8 I; J7 v& t1 B% ~3 _& f9 S
  76.   *szFileName=0;
    ! m- |8 T. ]4 v6 ~0 T' s$ W* }# j5 S: \
  77.   iEOF=fscanf(fp,"%s",szTempName);
    " z* o7 s2 S) C* C, a
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')" [# E) c# R( N+ E% K: G) j
  79.   {8 H3 |( ^8 l7 _" r2 \% S
  80.     strcpy(szFileName,&szTempName[1]);3 Y4 `- R# k* E% s  D, Z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    0 s( y) A  b4 V0 P! h8 ^
  82.     {/ }# ]: C0 [' W% f
  83.       iEOF=fscanf(fp,"%s",szTempName);
    * Z# n6 d9 [0 P
  84.       strcat(szFileName," ");2 j1 P1 Z$ p  {
  85.       strcat(szFileName,szTempName);
    ; i1 M8 r. g* ^7 d% b: v
  86.     }
    2 n& U. H! h1 {6 n, K
  87.     if(strlen(szFileName)>=1)
    , Q6 C5 M( A7 T! o- M! Y' P, d
  88.     {& h  z: x$ q2 B5 v' g
  89.       szFileName[strlen(szFileName)-1]=0;
    1 _) b5 J5 z6 F# S" R1 V( U! C
  90.     }5 d1 U& x1 v. e9 d8 ~
  91.   }
    - a7 w& k# q" K* q: X: I
  92.   return szFileName;
    3 h8 X& `  U; w
  93. }
    6 J# y! L6 ~3 H5 b

  94. 6 a1 O8 y5 E7 B" ]9 B# E$ f
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile), q8 ]& k# M: a& z8 {
  96. {
    8 _, i, P4 i% A9 d0 D1 A
  97.   FILE *fp;
    # I+ @7 `. r* G! K
  98.   char *key=NULL;+ u; G. H, f# |- D" F8 P5 t
  99.   char version[MAX_PATH];
    ) z" y" C8 d6 a& h5 ], s
  100.   LPUPDATEFILE file,olds;
    ( K& {, n. L9 n1 v5 p/ W' \
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 O" U4 m6 M# @, _( O3 b3 @5 V

  102. - y. M" o6 \9 z! Z6 W/ i, A  A  x
  103.   UpdateList.clear();
      P# E, u0 _0 ~  s+ q6 D
  104.   UpdateFile.clear();
    $ l( f. m6 d6 {6 a& S9 T- N/ e
  105.   if(GetFileAttributes(filename)==-1) return false;' R9 v2 d& \2 O6 S) }
  106.   if(!(fp=fopen(filename,"r"))) return false;" I" y! h% p' H& k
  107.   fscanf(fp,"%s",version);
    3 \0 K! W. A- ~  v9 F$ N# |) n# O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }* p" P1 C) }: Y; m5 }5 n
  109.   while(fscanf(fp,"%s",version)!=EOF)( D% W( q4 z. J5 Q8 k/ K$ f! W
  110.   {- d1 l7 {# [' e* L. q( E/ }1 V
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: @  ?( F4 x8 v: X3 i
  112.     fscanf(fp,"%s",file->path);
    ! r) x3 u# `# i. h- Q$ ~( L
  113.     ReadFileNames(fp,file->file);0 ^! u6 v* g; o9 Z0 M7 e
  114.     strcpy(file->full,".");0 w! O8 H8 \# I, F- x! H
  115.     strcat(file->full,file->path);
    , }5 b! x5 P1 }4 b" j7 ?
  116.     strcat(file->full,file->file);
    : f6 l( J) L4 z7 k
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())  I& T2 M$ m8 k3 Q/ n* l/ q! q
  118.     {
    , {" Y4 F/ p4 l* y7 Y$ D
  119.       file->vers=(float)atof(version);6 P; @: S; l7 P1 I) a( d; t
  120.       UpdateList.push_back(file->full);& c: [6 B* h$ z( h: k- _+ q
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));( h4 N4 w  J% s
  122.     }2 U7 y$ K# u: R8 u: N
  123.     else& d0 t$ L! Y! @5 r9 v
  124.     {
    2 }1 N0 Z6 [* g( T) c
  125.       olds=(*p).second;2 T) Y5 \! ?" c( l: m5 a/ F# A
  126.       if(olds->vers<(float)atof(version))
    3 r# e# y: s( E: |+ o
  127.       {; I$ o# Q, {# u# N
  128.         olds->vers=(float)atof(version);
    - y* g9 D- [/ D; l3 ?
  129.       }% X+ x- k. T6 P
  130.       free(file);7 M  v& `- \  ^5 r- u& Y1 m
  131.     }
    ! X6 x# f; l9 \: X, Z3 g
  132.   }
    # |7 y0 V& h9 v" C
  133.   fclose(fp);
    4 E: ?3 O( {- ~: Z
  134.   return true;
    : p+ g( ~8 {- f
  135. }4 D5 o. P" H* C; ?' y% R0 ?1 f
  136. 9 M- n- M- Z. n, f( B
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)2 d) q4 F2 X% \# y) b' [4 ^
  138. {) ^9 o; E8 F( m
  139.   TCHAR  szFull[MAX_PATH];
    . H5 q* Z6 }  y/ V" ?3 z5 v
  140.   TCHAR *token,*inter;" z% T% h+ l* h  _* ?
  141.   *szPath=0;
    ! @" V  r8 j- t  t
  142.   strcpy(szFull,szFullPath);
    5 D. A! S* f! F
  143.   token=strtok(szFull,"\\/");, P/ A: e; c  @0 @# E; [4 C) T
  144.   inter=token;
    7 [# b/ K. H  B; _
  145.   while(token=strtok(NULL,"\\/"))
    ( e! W8 s  f; g; G
  146.   {
    4 h/ ?* }/ a4 N/ `7 v4 {
  147.     strcat(szPath,inter);- W4 o( R) K/ q
  148.     strcat(szPath,"\");
    4 B" Q- ?, A8 w# U: C, e
  149.     inter=token;
    " M2 [  E6 g% ^0 X- u- U/ x) i5 d
  150.   }& p8 Z! E! Q5 y4 u
  151.   return strlen(szPath);
    " }  @! V0 i6 m$ X7 V
  152. }
    * R  N  _, t& {' M- Q# _

  153. " R$ J- X- r8 a# z+ M
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ! {* ^4 ?+ J& n& X! M6 S
  155. {( W, o% C0 o8 e# t
  156.   DWORD attrib=GetFileAttributes(Target);1 D" ?" k- P" U, b: l1 s% \, @
  157.   if(attrib!=-1)9 j# k2 ]) w; s2 u3 P
  158.   {& p6 c, B; u4 v0 I
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    2 @) a* H1 I" q. X3 Y- J& v
  160.     {$ v6 B" f$ @; W, |8 t- C! {$ |
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);( }% G$ o6 X9 g5 M$ R: E' J
  162.       SetFileAttributes(Target,attrib);
    ' i: |" b6 `6 P9 \
  163.     }- g' Y2 B2 X6 d0 m. `$ K1 {
  164.   }% j, b, ^$ Q7 C9 p1 f) s
  165.   CopyFile(Source,Target,Erase);+ Q/ F+ Z) P1 t
  166. }; \  P2 a, G* v& e) q
  167. ; h" C' d0 `! i5 K, L! S: R; c, J
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)4 m( R  F3 n9 k. j# A
  169. {
    ' O0 d- r5 w8 d
  170.      FILE *fp;
    $ Y+ ^% w& w" r$ \' \5 v3 M2 s
  171.      char  szBuffer[8192];
    + y3 {, J" }# v5 W/ h  Z8 a3 C
  172.   va_list  argptr;# U3 m- t1 R/ K8 r& x) X

  173. ! k( W( t. ~4 H' t4 p( I& a
  174.         va_start(argptr,message);3 H" T$ n' k5 n0 A. J5 u
  175.         vsprintf(szBuffer,message,argptr);$ `* p7 [  l/ \9 x* n% l; S! c( x
  176.         va_end(argptr);' @+ Z1 I8 Z6 E, L' k
  177.   fp=fopen(FileName,"a");  J" W$ @! O8 l% |% l" u2 N/ R
  178.   if(fp)7 C7 c$ ]& x$ T+ k1 f
  179.   {
    " e# H7 k  r. E! c6 z2 R4 R5 t
  180.     fprintf(fp,szBuffer);7 R' S7 ^" B4 Z1 i$ |
  181.     fclose(fp);
      s' y0 T0 B7 Q, x; X
  182.           _flushall();
    & a9 @! Z- q& [8 ^, L
  183.   }& Q; ]7 }6 _! u, z8 B7 m3 i
  184. }
    * V0 F* u9 t5 U5 p1 |# J: ?

  185. 3 o; C2 z1 a& Y! ~
  186. BOOL CRevAppApp::Fclearf(char *FileName)6 c1 K- |$ N6 {. D
  187. {
    & w6 r, A  h4 u  @% S5 v
  188.      FILE *fp;
    9 {+ Q9 p# [/ `0 e+ e
  189.     DWORD  attrib;
    ; T$ K2 }9 n8 k7 j' ]: D; ^. @
  190.   attrib=GetFileAttributes(FileName);6 q! E8 Q* m$ Y5 Z) A6 a
  191.   if(attrib!=-1)
    # ]' O8 h  v3 O9 K
  192.   {
    $ z2 Q3 I# C% p. X, }7 [( p1 |
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);) s* a* m1 h& B5 G5 w
  194.     if(!SetFileAttributes(FileName,attrib))3 y7 K$ ?  K' j7 p7 X  z
  195.     {
    ) p2 E' I+ |2 A- c6 d2 @$ {, Y
  196.       return FALSE;
    ) Y2 y6 x7 u& X* J1 F, O4 K
  197.     }
    - @0 O4 N6 t$ v& @, z/ d; Q
  198.   }
    $ w9 J" s6 {  ^& D* Z
  199.   fp=fopen(FileName,"wb");
    . c1 U0 x8 P: T+ L, G( `& J6 V- v
  200.   if(fp)* I- S+ A6 C4 Y4 S- |0 |7 d- ]
  201.   {! I9 j7 H6 T  h5 i/ N1 n
  202.     fclose(fp);9 z9 Q" G: `; W3 D) a+ |3 I
  203.   }
    9 a6 G+ E$ j6 ?4 a7 i
  204.   return TRUE;8 ~( N4 ]  s+ c  Q" \: t+ @
  205. }
    ! _8 O; H& Y, v! b: G. `: I- G
  206. # m8 V- z; {6 b* e0 Q6 p2 X
  207. BOOL CRevAppApp::UpdateLocalVersion(void)0 O+ H/ A7 W* G- _
  208. {) }" P: x7 {" A$ l% Z. \4 C
  209.   char filename[MAX_PATH];
    4 f- g* [3 m5 O8 k* d0 L
  210.   LPUPDATEFILE file,olds;' `) X( E* W( H0 ^
  211.   std::map<int,CString>::iterator i;: h- n2 k6 t7 R( `5 n
  212.   std::map<CString,LPUPDATEFILE>::iterator p;2 Q" a1 u2 g) F, H) b6 t4 B
  213.   std::list<CString>::iterator l;
    , }0 u  w& O+ j2 N( i

  214. * Y' U0 X8 m$ z
  215.   if(bFirstUpdate). `0 [/ y& k& ~& G+ g' D) c- ^: R
  216.   {* w2 ]7 D# x+ B) n! Z7 [# f
  217.     dwCurrFile=0;
    ; M5 S3 s0 p) r! r( O
  218.     bFirstUpdate=FALSE;  m$ E7 ?% r3 G
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 }! C% h, _& E) j1 |
  220.     {5 q0 e4 o, V5 g$ n; V
  221.       dwTotalFiles=UpdateLocal.size();
    0 c. h) o: B& O4 D8 f
  222.       dwDownLoaded=0;# q2 g1 P4 i8 U
  223.       bSilentStep=FALSE;. n5 A1 x, V5 o
  224.       bCompressed=TRUE;' L& _# Y1 l5 A1 n2 ~; B: @
  225.       strExtLocal.Empty();: ~9 S6 ]4 J. b( s2 M
  226.       strFullName=(*i).second;3 O& U4 ^) m  e" `
  227.       dwProgramState=AP_CONNECT;  R0 t* N; @0 L3 O& n
  228.       return TRUE;
    3 O3 t. N7 l- S- E1 \, v" B; [, w
  229.     }3 E' C4 k+ k- _" C
  230.   }
    3 r. L5 `" c- j( U% J  f
  231.   else if(bRestartUpdater==FALSE)% q2 @$ h' X+ {( `+ \5 D
  232.   {2 q& i7 p, b" T8 a& t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()); t% V# X& |4 T+ K) P! L0 g; |) w
  234.     {
    4 r- q: N6 {) {! k6 X6 D7 p
  235.       file=(*p).second;
    $ i4 G' I' V/ x) v
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()); M0 Y, ]) t  l( d# C
  237.       {
    + e- V1 C- K6 m+ b' w6 `
  238.         olds=(*p).second;
    ( e5 e# {5 Q" L/ d) s5 M6 R
  239.         olds->vers=file->vers;+ ~  G, ^% z# O3 U+ z
  240.       }
    5 D6 T3 `0 r5 J% y- t- M
  241.       else+ E1 W/ e) Y4 q8 R1 I7 D6 t
  242.       {$ T. i) x$ z+ f' }( _" j, e
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % n2 T% g# z* y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ S" m5 K; z3 [) \
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    + E' Z5 C' t: w* Y. Q
  246.       }
    , V0 P7 ~* D/ K3 [- ]
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");, X& o: o* J* M7 P$ W( M; o* z
  248.       sprintf(filename,"(%s)",file->file);% q; T- ?3 A) T& d1 l1 N
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 x+ @- h% W9 @  P+ ^
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }0 g+ k5 z; R( k; c. u! k! Y" P& L
  251.     }$ m0 f' C& N9 v" |8 e
  252.     dwCurrFile++;# y2 B; o+ z" W' L) I: G
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 `0 c" f% ]% [  J, t' S
  254.     {
    1 p2 A( g  n2 {4 U2 G% a9 X
  255.       bSilentStep=FALSE;
    " L- _0 w( w0 W) X, X9 T: |, l
  256.       bCompressed=TRUE;
    6 R, B) Y# C' F
  257.       strExtLocal.Empty();( {7 B, J3 s/ x% P, N
  258.       strFullName=(*i).second;
    + ~* l, t# H1 x/ o3 P
  259.       dwProgramState=AP_CONNECT;
    - Z% V  Z( z7 R, U% Y
  260.       return TRUE;
      ]2 d6 L5 O7 B, {* {
  261.     }
    2 E* X: S6 m: W& W4 M3 w' v7 g
  262.     if(!bRestartUpdater)5 j. `9 o( f) c
  263.     {
    5 T% t8 \" s  w5 a4 p6 x  o
  264.       int iCurrSize,iFileSize;
    & G6 R: V' Z' n" a4 P
  265.       iCurrSize=0;
    & D6 R+ r9 j* Z' Y
  266.       iFileSize=UpdateList2.size();# ]8 @5 z7 y5 p- X8 B' ]4 {
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    " J* N' }/ ^, O( N( d: o
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    2 a2 \" q) s  j( ~4 U
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    . g" B& @1 d1 o+ [# @; M& d% y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( j! {% e; r/ e/ N. o
  271.       Fclearf(".\\update.dat");: |  J; h$ F2 Q7 L+ ]+ V! v
  272.       Fprintf(".\\update.dat","Bloodyf\n");4 ]2 O5 W+ ]2 p% H
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    - E; h1 h0 d' K6 `
  274.       {4 l% a: T' e$ h" |
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    % R3 F, _/ Q+ c3 _1 T" T
  276.         {
    . Q/ t% _- U+ B6 ]' L& Z
  277.           file=(*p).second;5 h1 k6 T) r" H) w# w
  278.           sprintf(filename,"(%s)",file->file);
    + X& _! l% e7 ^" }8 C: b9 O# M- @
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 O$ s5 o" }( b4 b
  280.           iCurrSize++;0 l3 r* n+ O5 ?) L( R
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));/ J9 z9 K5 ^) t7 K& e
  282.         }
    . r3 @: _) Z& f9 a1 k
  283.       }/ A# X9 |6 A; e
  284.       unlink(".\\update.txt");- t. y& S2 U+ R
  285.       unlink(".\\update.tmp");
    ) V  ~1 ~% t8 Y/ x
  286.       Fclearf(".\\checkversion.dat");: c# M" ^! U* I/ E0 b3 G2 x
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);/ k) w) P8 @/ i2 E" q& O+ R' a: n
  288.       if(UpdateLocal.size())9 |( r% V' y* f# i! P/ f- y; P
  289.       {
    $ }, v7 K0 U3 c: n
  290.         UpdateLocal.clear();+ ]6 ~% e: V9 f* c8 `) s$ Y& e4 o
  291.       }
    & V5 i9 K! e( S; z( p0 u4 S
  292.       if(UpdateFile3.size())# H8 K& u9 G& Z7 G1 ^9 p# Y
  293.       {  ~2 L) Q% B- L0 u
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 N' X0 f  O6 J4 k' U  e9 O% _2 `. I
  295.         {& q9 U$ |, @6 j4 I. V
  296.           file=(*p).second;
      s; y9 z" G; Z: q- {7 C
  297.           free(file);
    2 S( v* F# I; Z( k/ c$ @' K$ m) w
  298.         }) q! b0 p) m. Q$ T- W
  299.         UpdateFile3.clear();
    1 g! d* G, }/ L% I. t
  300.         UpdateList3.clear();
    : J+ r% i+ u& k; }
  301.       }8 n7 v9 s) G, B7 r4 ]8 [! y# o, Y! a% ?
  302.       if(UpdateFile2.size()): s, b+ h) j/ h
  303.       {& `3 I" }) y; s" T0 n* Q3 H
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 p. c0 @& G2 l# Y
  305.         {4 ^3 J3 m4 V- m8 ]5 {* {
  306.           file=(*p).second;
    , \# U" {  ~4 r4 a% c  s2 g
  307.           free(file);
    1 Z$ s# l9 o! P, X- r  N
  308.         }
    / i2 t/ k. V/ _) A7 `
  309.         UpdateFile2.clear();
    . _, {6 m- m8 A$ w
  310.         UpdateList2.clear();8 p* b% q2 d) T, f4 R  z! h
  311.       }
    0 p* M/ L/ h7 B1 v0 Y# F& ~" k
  312.       if(UpdateFile1.size())
    $ a1 @, F( s/ \5 `
  313.       {8 l/ O1 c0 N# C# w: y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    % w5 f% c$ S4 @6 Q! Y3 @( H5 g
  315.         {& c6 f9 D: q0 U  c! R. x
  316.           file=(*p).second;
    , m* v* l. m  _
  317.           free(file);( `0 A0 z" X9 g- C2 C4 W! N, m
  318.         }
    9 F8 M  j( e. S+ i! Q) O! ?
  319.         UpdateFile1.clear();" O6 ^( K6 Y! _; A# h5 }
  320.         UpdateList1.clear();# |6 A. f/ d  J8 d* B
  321.       }5 v' A0 v+ |3 o# \4 [% S
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));. Q6 V/ e. t) O5 ]* j. x) J! B
  323.     }
    * e  Q. l: M4 `: T6 X2 f4 q# I
  324.   }
    . y& m! g3 g, u
  325.   return FALSE;
    * ^. Z$ P, s& M  A5 ]
  326. }
    4 L' W3 R9 d- O2 Z: u0 V

  327. 7 A- |4 k  K- C1 v$ z
  328. void CRevAppApp::ClearAll(void)! F7 p0 e3 x8 o7 `
  329. {* b8 T5 t5 e+ j: `0 I( n1 y5 v7 z
  330.   LPUPDATEFILE file;) _# F3 K8 w) D$ y# W/ F
  331.   std::map<CString,LPUPDATEFILE>::iterator p;- W# q- P" k" \0 Z% u9 M

  332. . p9 T7 d& W9 D4 m; \, P
  333.   if(UpdateLocal.size())% K% |8 D' _( f
  334.   {7 E# v3 |: Z# }$ L) e
  335.     UpdateLocal.clear();
    $ G) x1 `- B" e! x: ]
  336.   }+ A5 A, V- D* d) ]: @
  337.   if(UpdateFile3.size())
    + l  u/ e0 w' u
  338.   {8 Z) ?) G. B1 h- j# n
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & q' h, L( ?- `
  340.     {
    1 i& \8 F+ k0 K  Q4 \9 p" d: K
  341.       file=(*p).second;, n+ ?6 |$ v2 T# `5 |7 u& s
  342.       free(file);
    ) V) D* D, g$ e/ x& O- ?  A! z
  343.     }
    4 _+ P4 |6 K# w1 W
  344.     UpdateFile3.clear();" t$ D0 }% \1 F" Z5 j% O7 Y8 i
  345.     UpdateList3.clear();/ T% n' c$ |/ x
  346.   }
    $ }  ^1 v+ Z4 v! z& i. z
  347.   if(UpdateFile2.size())
    5 p! ]3 ?6 T0 K( V, `) h
  348.   {* P% ~% B' x, I! x, l5 b; T! w7 l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & u) p0 S# i# v  M
  350.     {
    : p# v  ^( e2 g
  351.       file=(*p).second;
    5 D% R0 X; c" @- }& g
  352.       free(file);& O' n! h+ d2 F' N1 v6 c0 Z/ w
  353.     }4 G4 K. e4 X/ [- X! t% p
  354.     UpdateFile2.clear();  l$ u4 K3 Y9 Y6 g& f( L' `/ p' y
  355.     UpdateList2.clear();/ `2 |! F6 m* K  c
  356.   }: L7 k) U9 \, z5 C  g& N8 |
  357.   if(UpdateFile1.size())
    3 o* M+ }& s  |% O. o# c
  358.   {& U2 z; j" M& \, d& ~( e
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    3 O4 \) q$ U# {5 a; X
  360.     {3 Z, X" f3 R% }
  361.       file=(*p).second;4 b/ @+ q- V  W* z
  362.       free(file);
    # d! H& ?4 B  q" J
  363.     }
    1 {  _0 m& x6 j' `" s- c+ O
  364.     UpdateFile1.clear();
    8 k3 l+ u/ X/ K( F0 {; }1 y6 U2 O
  365.     UpdateList1.clear();& X: H* _+ n- t; E1 q2 s# U
  366.   }2 M/ H' g" W& i# _
  367. }  8 a: V: n0 H8 U) _: v
  368.   2 m9 _* |# C3 l$ g* U: K) r
  369. BOOL CRevAppApp::CheckLocalVersion(void)% `4 y3 c, P8 a! U( M8 L
  370. {
      P0 V* H5 |, W1 n' ?( b) j; C2 X
  371.   int c;% f/ W5 H& C( ?! o1 m* s
  372.   LPUPDATEFILE file1,file2;
    ! Q5 ~/ A) O- v0 U( G0 W
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;2 g" l! L. A. C
  374.   std::list<CString>::iterator l;
    & g9 U1 N3 Q1 z+ ]7 Y  P

  375. $ c. ?3 T, l5 p3 c! {( j2 u
  376.   UpdateLocal.clear();
    ( P/ g0 D# E) f8 u
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; H* T1 s$ f' A8 `
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    2 E8 e0 }1 z! o, z* [& v2 \8 B
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 E- _, _1 b# J  c$ H- S3 f
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
      s$ i9 J" q1 H6 U+ y
  381.   if(UpdateFile3.size())8 D5 x" D: \& o: y. N
  382.   {* V+ F& g4 R' a$ \7 R, @
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)* ]9 }" r8 z3 z- @& Y
  384.     {0 `/ b" }! H" s5 n1 P
  385.       file2=(LPUPDATEFILE)(*i).second;  [6 k8 E' J( W
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / {: I  J. t6 N) \
  387.       {+ R! ]. B! \2 s& D8 f# }
  388.         file1=(LPUPDATEFILE)(*p).second;
    # i. x# i: j) m& w6 `8 L0 e
  389.         file1->vers=file2->vers;
    & e; L0 e8 j. ^( a# r
  390.       }/ G' G( k( u7 R
  391.       else) R2 {7 A1 b! {2 Y7 f6 K1 l- G# d
  392.       {. Q" }+ X& ^' l2 V/ ~: ^+ A
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! R! Y& W% l2 S2 B
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    % o& f/ S- D& b# Q$ z3 T+ \0 l. l
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));( A# g5 p* ?" V) K. H
  396.       }
    2 {6 M8 u1 n! V# r* H# \
  397.     }) V2 Y- k* B* f. @4 `
  398.   }3 {, h7 _' q3 h3 c# g# U
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 @; u; L" p1 M9 t5 h# w/ T! d  Z
  400.   {: @9 X# s7 p$ Q! b: S$ I+ r
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    + N4 B* {  Z$ _
  402.     {: k5 w$ s' K1 d9 i  {. [/ ~/ O4 I6 O
  403.       file2=(LPUPDATEFILE)(*i).second;& r, y# O& c" i
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 J7 V: j0 s3 i& d/ ~; |! ]% O
  405.       {
    ( j6 \" X& ?+ e2 U
  406.         file1=(LPUPDATEFILE)(*p).second;
    % ?/ o+ D6 y4 ?5 W
  407.         if(file1->vers!=file2->vers)! i% I. M! A* ~9 n" L( A/ X
  408.         {9 g4 O: q' g9 k7 U% u3 P8 V
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * T8 W. q( v& L1 }7 Q' N
  410.           c++;
    9 z. |5 x  f* {! E3 {
  411.         }, f) j+ N& l9 A# ?  A& X/ |7 ~; a# W
  412.       }
    & o& ~$ ^3 v& K; ~) U
  413.       else$ S% d& u. S; m* A, x0 b
  414.       {
    & g7 }5 a; p; W
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 l9 ]* G; b: J+ m
  416.         c++;
    : \  _& e: }3 u' W
  417.       }
    , U9 N$ z# |$ s* o
  418.     }
    0 ?' x9 s7 o, p$ D" |# Y3 U
  419.   }
    ! \5 ?5 Z5 [& _8 b; d) I% W9 M
  420.   unlink(".\\DownLoad\\update.txt");
    , e# O( X( G) g3 I6 g2 i- i
  421.   if(UpdateLocal.size()) return TRUE;
    , v% O9 G" T7 G# J5 @7 @
  422.   else                   return FALSE;2 o: S( H2 S( q
  423. }% V( P1 u4 U, M8 ]+ F8 \/ l3 |
  424. " Z* E& }) s' p, b3 H* J* c
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    4 j( y# Z. s3 u9 b# r
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"; Y! M9 a1 }' {7 X
  427. 7 {- g' z( o4 S, x
  428. : Q2 p- `1 ~9 ~
  429. 5 P" r8 a- I! F, l; E/ m
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)4 A! z8 D0 E2 Y
  431. {. \. e* r- @$ @2 V( V  z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    $ ^1 v9 x, K' w, P+ I; p. @
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' S7 a! F& p, `3 S
  434.   {/ j# K* \0 ~) y5 ?
  435.     char szLanguage[50];
    ' `8 V4 g9 u# J4 ~$ u# s
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & `+ o& ]! y/ n( ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- d( P' x8 ?1 L2 x4 Q' _- o* v
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " _! F! h+ H& I$ @) G  h6 v6 `
  439.     else                                   m_iLanguage=ENGLISH;* D2 }. C  ]2 d; H& G  N
  440.     char szRegister[100];. j' v" Y* p1 }; O5 C5 C8 F
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : v" G) u( n- d6 H3 ], w: i
  442.     strRegsName=szRegister;* |$ A: ~! C1 m% x- x
  443.     char szPatchURL[100];
    $ ^7 }" ^; C" u9 s
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 Q, {7 M9 u9 t) G
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # C* X0 k# v* `1 Z+ s+ x
  446.   }+ N5 k% C$ Y# F
  447.   else
    / h! M) @. F3 R2 y: ]" v/ i
  448.   {
    : J3 h" }, Z% E; \6 l
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" Y& m$ n. e) O# G# I
  450.     strRegsName=DEFAULT_REG_URL;
    - Q; R  G( F( P# \
  451.   }) Y" O7 K. Z) t! p/ Y. W
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * v  T; h9 K5 c6 @) X1 X
  453.   {
    8 b3 S1 d4 m9 ^& T8 |: |
  454.     char szIP[50];& G9 p- i  W/ t% T" ~2 V8 P  @
  455.     char szDIR[300];. ?* [6 Y1 ~5 U
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 z0 S' e) u# r/ G5 f
  457.     {  X* z7 s+ H) @7 C
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & |! O% J7 t+ c" I; P4 a
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");% w2 M: i1 }+ {1 ^, v% Q1 i3 G
  460.       strHostName=szIP;. d5 t  r( I4 R
  461.       strHostPath.Format("/%s",szDIR);+ E  _9 k2 m2 ]' |& l4 p: S4 i
  462.     }1 R+ t6 W4 d5 t9 `
  463.     else8 Y8 |  F) Y8 s6 p
  464.     {
    ' g3 I6 ^) N5 k# W4 k9 \3 p6 V$ E
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1). U- a6 ^+ B7 B5 L7 k
  466.       {. U6 Q) N: l" G5 T: y
  467.         char szLanguage[50];7 j0 p" Y: h0 w6 ]
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");. Z* a, i! ~6 O7 z. p" s
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) Q) ~6 ]( a3 y% p
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# B4 q1 E, x1 T! V0 `4 n4 Q
  471.         else                                   m_iLanguage=ENGLISH;
    . x% {' s2 T0 @- ~; L5 l3 d
  472.         char szRegister[100];
    1 Z7 @& e- Y# }
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 J; q0 |+ r" b. t
  474.         strRegsName=szRegister;
    & p7 K5 `3 n, {/ X- C
  475.         char szPatchURL[100];+ w) ]" k: P  ?1 ^$ [
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 _2 L$ }; ]' i% T4 w
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 X; L: Y5 ~" }# I4 k; Y5 K7 m1 c
  478.       }
    8 u0 \0 U, Z" E% J# k! S
  479.       else
    * x4 ]4 L2 c# O" ?
  480.       {3 f1 N( |; ?9 x% U
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" I1 x5 z) q0 J3 g
  482.         strRegsName=DEFAULT_REG_URL;- A% e) t. ^$ D8 q' p+ I/ \1 w
  483.       }" N  n3 L; j/ ~& y" O
  484.     }
    6 I& Q* k' n! t) o
  485.   }3 q* v9 H2 ~* C; w3 n0 [
  486.   return true;7 R/ H0 J$ I- U# |5 ~6 Q' {
  487. }4 h3 ^) [* }9 p
  488. 8 A  i* R  F. I' g$ n$ d; f) g, }6 [
  489. #include ".\ZLib\unzip.h"8 p  X' {9 p! @; C+ N( }
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 T8 j, m# L3 m  f$ O& H3 _2 Z
  491. ////////////////////////////////////////////////////////////////////////////// [5 h/ G+ i% z2 L' E( l$ J
  492. // CRevAppApp initialization
    8 K; f% r+ \8 A

  493. " x( w/ e" A. V8 n3 r
  494. BOOL CRevAppApp::InitInstance()
    ' f0 j' c% X+ ]
  495. {
    ' q5 h3 s7 I/ O! [. @" i; a
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    & b: X" c/ ^" [$ G- m$ B0 ?& Z
  497. * B' H! V3 O3 Z8 ^8 }: h
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ( k5 P# V. t  {
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    * m- l! K" r3 Q, ^: D
  500.   {0 j! N5 l% }' w
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");' `5 }/ @0 E$ M% N
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    0 H/ W% n# o  g
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))' e9 K' G0 v6 |% c# j& z8 g
  504.     {
    8 W( R& g0 ?* ?+ U& q
  505.       strcpy(szPath,szPathTarget);; L& d2 A- h- k2 m3 ^
  506.       SetCurrentDirectory(szPath);
    7 u" e; s2 D1 j- X0 @2 ^4 s! ^
  507.     }0 e3 R6 _. Y+ ?8 h
  508.   }
    0 a/ Z- r0 g1 d$ D' k
  509. #ifdef _DEBUG& @( w) u, F$ [6 z4 f6 b% |
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % T! R$ h) g4 ~% a" g8 {
  511. #else$ [' H, u3 z, p1 w- v0 B5 H3 E
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 q& d9 Y& q- T& i! v
  513. #endif
    , }; X; i5 M9 t- \" z) D
  514.   {( G! ~2 n3 ]& H- e* D
  515.     char tempFileName[MAX_PATH];; c0 ]1 K( K+ L8 h& a: N
  516.     strcpy(tempFileName,szPathSource);/ Q/ _# o& W/ O2 i. W
  517.     tempFileName[strlen(szPathSource)-12]=0;
    $ V4 A  j+ j! Y2 r
  518.     strcat(tempFileName,"\\$CSUpdate.exe");; _6 j, I# t1 i2 z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);6 r+ A# ]0 y9 L  P/ \/ g
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ; k8 X' N3 Z  [/ {# m
  521.     return TRUE;0 b* G1 s' V1 g# I7 R& V
  522.   }. v: I9 H+ l  q, ~0 K; _% n
  523.   // Nuke 0118: Delete run.exe
    8 V6 ?4 V0 A1 D: \, L" f( V
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );! U9 Z& I' z4 f9 j9 Y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    # J+ r8 ]# U7 b7 l
  526.   if(!ReadCfgFile("Config.ini"))  I" z, {' _2 J0 t3 r8 Z% [* Y! E0 `! ]
  527.   {$ u: x' P( E, y  B
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    & @+ T* G* s5 l
  529.     return TRUE;0 Y  P5 q% I2 `! s; r
  530.   }" v& G. {5 z8 a
  531.   HANDLE mutex;
    # [# [9 P- V1 _8 b
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))1 M1 _9 w( K8 l0 v9 s
  533.   {
      R' Y8 O3 Y. M  n7 Z! u3 u
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)& V6 Q" C9 T$ I+ B2 p+ F1 w2 [
  535.     {: K; o+ C% Z( ?% T9 l* |* C
  536.       CloseHandle(mutex);! ]' v; k5 X$ s
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);+ _) b1 j) {3 U" B3 G/ Z
  538.       return TRUE;  b* u* q/ ~3 ~9 ?9 U! d: W! C* z/ |) @' w
  539.     }
    # Q* P- G. J- |2 R( Z0 |
  540.   }  3 w; S% B/ l. p& P* V$ A8 F
  541.   CloseHandle(mutex);
    - y& ]* L+ N& I7 u6 P; Z* v

  542. * F6 Z! n9 t! k$ x+ f3 @
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; S" M/ D$ v! j; |
  544. 0 S0 i: _; a& P: m! f- F
  545.         AfxEnableControlContainer();7 ]; a% x5 p( O% y5 t; v
  546. ( b0 m. J6 v+ n+ H" [  Q8 j. m
  547.   bCanUpdate=FALSE;. j/ K9 k3 E& X% X
  548.   dwStartUpSteps=1;# m9 [* s9 k7 u2 d
  549.   dwProgramState=AP_NOTHING;
    7 M7 d+ c$ d! |$ N: h' ?

  550. 6 J2 p6 i- C( r8 a; e( }0 U6 W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    # X9 _$ S3 Y. C% G) K& I' I

  552. ! s; ^+ M7 \% H+ Z  }- \
  553.         // Standard initialization
    1 M* Q1 `/ n/ c& ~5 t
  554.         // If you are not using these features and wish to reduce the size
    * Q$ E" I% R. ?
  555.         //  of your final executable, you should remove from the following
    9 Q  o! ?: ?. J' o7 _7 f
  556.         //  the specific initialization routines you do not need.5 _1 W5 y& t* A/ |
  557. 5 n: k) X: W0 {7 ^" Q
  558. #ifdef _AFXDLL& H1 ]. Z- g: d7 \
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    , d; `, Z+ D+ c% t2 y/ m( I
  560. #else/ a; P& b8 x6 q0 U3 F! ]
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically3 C5 _: a% k8 d
  562. #endif  I# ~3 w) x' q0 S

  563. 8 h. S2 X! l/ M5 g
  564.   dlg=new CRevAppDlg;
    : g5 I# w) Q& U& q: C! `- P, D
  565.   dlg->Create(IDD_REVAPP_DIALOG);# `: |4 b5 D7 W9 N
  566.   dlg->ShowWindow(SW_SHOWNORMAL);2 i7 I. b3 U& h
  567.   m_pMainWnd=dlg;% `/ B9 R6 D+ v, j. t4 [

  568. " M3 M" H! Y+ R4 r1 P% Q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);3 g. }" R$ L! g8 q2 \
  570. 6 ^; x* a6 Q. @
  571. //  GdiplusStartupInput gdiplusStartupInput;* G5 o: h/ P: W; m4 O
  572. //  ULONG_PTR gdiplusToken;0 ~0 Y- t4 g4 T, q" M
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    " B7 _1 Z  p" J' g" z( A
  574. # j, S# Y2 B( N! y( L
  575. //        CRevAppDlg dlg;
    * {1 ^+ `3 c% V' K, t
  576. //        int nResponse = dlg.DoModal();
    % ^6 C9 y# D5 Z+ Q# i3 I7 h6 T! T6 W
  577. //        if (nResponse == IDOK)
    ' c9 D4 Q. X# w) E. j! U
  578. //        {
    ' p) {0 E3 d1 K) x  v; Z: y
  579. //                // TODO: Place code here to handle when the dialog is8 n9 d+ Z9 I" q0 A
  580. //                //  dismissed with OK" r; {! |4 j' Y7 R7 T; {/ v" f1 ~1 J
  581. //        }1 l6 A8 ~2 X; p* G
  582. //        else if (nResponse == IDCANCEL)
    / c% J4 Y6 Q) R5 \; J' p! @3 [2 X
  583. //        {' u, ^+ l( K4 O& Z( G& Q) G
  584. //                // TODO: Place code here to handle when the dialog is9 w8 H8 M, E+ F# Z4 \3 U6 d1 f9 q
  585. //                //  dismissed with Cancel
    & v7 b/ T) Z4 l" i
  586. //        }
    3 I2 |$ i* E+ S0 x; `
  587. 0 E0 O% A! k6 ?4 k
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    & U  {4 _# m: j. i4 A6 n3 h
  589.         //  application, rather than start the application's message pump.  T1 O9 o- n0 q7 M' C) L$ C' a5 f
  590.         return TRUE;
    & r# t3 u' X1 P& d" F! L# O- f
  591. }. ^/ j5 W8 |' c* e
  592. ! j* b1 D7 P! [
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 V5 e6 v: n2 X; {& D
  594. {; {2 O2 U4 @# ]0 W% e7 L2 `
  595.   int i;
    + B8 r$ ], p* z$ B% z
  596.   char *szRet;
    ' P! `8 u8 ?# l2 @7 P2 m8 J3 e, F

  597. + P4 \. E' b+ F
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    % E, h, ^" D6 H) P
  599.   if(sztoken)# O! y2 z4 t& Q# ?
  600.   {" v& A$ B* i8 f% S$ B- }
  601.     szRet=&sztoken[itoken];2 z7 I- P: @$ U8 \( L7 X9 X
  602.     while(sztoken[itoken])
    + s7 n: B, a/ n5 g
  603.     {
    8 N: N, X7 p3 _8 `/ M
  604.       for(i=0;i<(int)strlen(token);i++)7 B- W5 D3 ?8 X. c9 @% \
  605.       {8 U8 {+ i. x! G$ g* l. i- v# O
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    - d/ o# p  @" y& V/ s/ e, z
  607.         {
    4 ], R, K0 Y+ [
  608.           sztoken[itoken++]=0;; r4 ]9 D$ H' a! I) g3 ~5 Y
  609.           sztoken[itoken++]=0;- s# E  o( [; P  f$ o( R
  610.           return szRet;
    5 @% h; I4 p5 f( f& \
  611.         }* V  @: h3 L, t+ H; a
  612.       }& d8 P2 B- J6 T4 H( ~
  613.       itoken++;
    ; r+ c; N4 @% M6 S  Z8 W* K" E2 d: U
  614.     }1 _! r& n  `7 y$ z
  615.   }6 J/ {( {& c0 m- z' Q7 u& x# O3 D2 o
  616.   return NULL;
    7 `  z2 z6 C" p( ]) T' [
  617. }
    0 h3 e. [2 V6 z- n+ D$ k

  618. * f3 Y' l$ U, v
  619. void ProcessProc(long Total,long Current)
    - _  @, ?: B9 O6 e$ U" C5 B: t$ d
  620. {/ X" q8 M. p* k4 v7 H% n
  621.         MSG msg;9 S* b" k+ r7 J: r6 p
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);  Y) ]* c- q/ ?2 J; a- m
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    * T( Z- J/ e0 Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    , |4 @" G5 U( j5 o- \3 x6 K
  625.         {# f# S: ?  v9 U8 ]
  626.                 if(!GetMessage(&msg,NULL,0,0))+ a/ q, |: U; R7 A
  627.                 {3 ~8 Q4 U/ j5 \4 R0 o4 t5 v8 z2 Q( V
  628.                         return;
    ( ?5 P* e5 k3 Z' I0 M
  629.                 }
    - C5 A: N% H) e9 k
  630.                 TranslateMessage(&msg);3 m/ i* `- z2 w# `9 S! M
  631.                 DispatchMessage(&msg);
    . l; |" P& _0 o& U8 {& c, J* G# e0 S5 r
  632.         }        % ^" C% d# N6 H5 B# c) o: c
  633. }
    ' p- N/ F  A8 @3 ~# ?5 }+ t

  634. " A/ B' O& }. r: F+ z+ F
  635. BOOL bFirstChar=TRUE;
    . R; d& }0 i2 n8 C+ \. Z* P
  636. # s) b5 j# Y  U# p
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; q8 c, ]9 H& @- u% T: k7 Y
  638. {! q  q% v' `2 y: ]' u
  639.         // TODO: Add your specialized code here and/or call the base class
    7 n/ c% [/ I0 C9 s+ s# d; [  _
  640.   switch(dwProgramState). G) b$ [1 x: j2 j! P1 \
  641.   {, T0 w6 N. ]) z& C7 c7 e
  642.   case AP_NOTHING:
    ' L, x! [0 H9 T6 Z0 B/ e
  643.     switch(dwStartUpSteps)
    6 a; d$ V' p# s  j- B' [
  644.     {
    , H' W3 D0 b+ P7 c8 W2 [" \: y# ^
  645.     case 1:
    ; ~$ b& s) \% |: I4 B/ y5 T$ ~
  646.       {
    ) J4 u* I+ G) l/ B' _) n( f. m
  647.         int i;
    0 Q! d# k' G$ F/ v' S/ F% z
  648.         CDC *pCDC=dlg->GetDC();( t* X. @' t3 W) u, S. i* m
  649.         HDC hdcwnd=pCDC->m_hDC;
    5 j1 t9 R: C9 j0 k, a1 z# A
  650. //        Graphics graphics(hdcwnd);
    ! r# Q6 D5 n( W
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    # K2 G! v. l. A: S: o$ H) K6 B
  652. //        INT iWidth=bitmap.GetWidth();' O2 Z& X8 u8 ~8 m/ b3 R6 J
  653. //        INT iHeight=bitmap.GetHeight();
    ) G% B# b; V6 r. H, D$ I) J( O/ I
  654. //        Color color,colorTemp;
    7 g, s' Q6 H1 j4 Y  s3 Y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)! ^1 }4 m6 {6 m# k3 |1 k. p
  656. //        {) S! y" P6 k% Y
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    " {. f4 t/ O" s+ `! ]% Y. y
  658. //          {
    ! E7 n0 v, c( p# [7 O7 x, x  c/ }" C
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    / N8 N6 B( ~2 q. j
  660. //            colorTemp.SetValue(color.MakeARGB(4 E/ b1 N$ [$ n) \
  661. //              (BYTE)(255*iColumn/iWidth),
    . C; x. Q) B5 Z" _2 r# X
  662. //              color.GetRed(),# E4 e- O4 ^5 Q4 {9 S: ~' e8 \
  663. //              color.GetGreen(),/ d" Z3 w$ K9 \2 p; S/ u0 I, e3 R2 U. k
  664. //              color.GetBlue()));2 M1 y8 g6 i  e+ M  M' ~" Z; Q
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # r2 u1 l+ t: k5 e
  666. //          }" U: h# f9 r# @0 R1 K. t) n6 r
  667. //        }- y6 j& l4 U5 L5 L
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    . d3 n  a/ a. Z9 Y% T; q% g
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. ?" C3 n: |0 c: o$ d- b
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");) h: j% L  q0 M" b' o2 }9 S& @
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / _) e. q: u/ }# k" H
  672.         for(i=0;i<240;i+=8)* C3 t- D1 `: a1 @2 }8 ?6 A6 j
  673.         {% m  F- J4 r' [, [
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) n8 p2 r0 |8 k  L% I
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. k" `3 `/ W$ y, p/ t4 A& }, u
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 L: Z: S$ l. ]: D
  677.           Sleep(33);8 Q* ^5 @/ h- M! z# Z  N7 c% p
  678.         }  C5 N; t  F3 j7 k
  679.         Sleep(1000);
    / J* Q0 v  F9 y
  680.         for(i=240;i>0;i-=8)
    9 U$ b2 M; E' l8 d! J" |1 F
  681.         {
    + a3 c! j2 a! i; I+ v! K, g! t
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ( y; s- o6 Q; }$ E- I
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' ~0 r7 v, B% H- g
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* V4 p0 h6 i8 ^4 W
  685.           Sleep(33);. x/ _1 L3 H5 W2 t9 X+ T% X
  686.         }
    & E; A" P6 y  X1 C7 p, }
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    . _" U: b2 p; x/ _
  688.         dlg->ReleaseDC(pCDC);
    9 N0 [4 a) ^6 a* k* U2 _
  689.         DeleteDC(hdctar);
    ; P6 ^+ R9 ^6 W: [/ J. S$ h
  690.         DeleteDC(hdcsrc);
    # O7 S$ H2 m( ]1 ?& K8 G6 c5 o' A
  691.         DeleteDC(hdcorg);
    / F3 d6 M3 O6 f. Y
  692.       }
    ! R- N. ~2 c) ^, Z( q) S$ x5 n
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);' x* g7 @# u. v, @
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");9 O2 J- O7 {5 L% q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ; T8 T9 F3 T# {' U
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");" O7 O. T$ H/ I7 Q; {+ x
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 j7 Q* F8 V5 x7 _' `
  698.       if(!Dn.Connected())
    5 ]* p# K7 ^$ G6 i8 Y
  699.       {
    7 `- {6 F5 z$ y& D3 `- J
  700.         dwTotalFiles=1;" E1 b) T% L9 P, {1 V
  701.         dwDownLoaded=0;
    - h$ [& a3 D% H! _! j
  702.         bSilentStep=TRUE;: h: p- E( h# Y4 C+ r) [
  703.         bCompressed=FALSE;
    ) ]9 q. v+ N9 h1 s1 @
  704.         strExtLocal.Empty();2 y5 p6 L- W8 }
  705.         strFullName="readme.txt";! \1 w) @) t% P0 h9 R! d+ X
  706.         dwProgramState=AP_CONNECT;
    # r6 H9 d' P1 T; h
  707.       }
    " D  f; R$ B6 U" s
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();# C7 v1 T6 _% D3 X, R
  709.       dwStartUpSteps=2;4 I0 Q; Q5 g: r! O( y/ d
  710.       break;$ q8 q: ?  Z" D8 x- O& S5 W
  711.     case 2:
    : L9 E8 ^$ B+ m9 J: e# V7 c
  712.       {
    5 T7 s- v) h2 r, ~+ [  t
  713.         int iEOF;4 s1 y* \- y! `/ b+ G3 o
  714.         FILE *fp;
    . U5 f+ b6 V" A" {" A1 f% i9 r
  715.         char szString[512];
    1 ]7 l4 K6 Q3 j5 T
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    8 F' o1 `+ M* e+ S9 t" U4 I" @
  717.         if(fp)" M0 i6 l: E6 D9 r
  718.         {- Q4 ~9 F0 z+ D  R
  719.           do
    ! _; S& Z9 U- @6 t/ r0 V
  720.           {
    : S: B( @5 ~5 V# d$ E3 W. C
  721.             iEOF=fscanf(fp,"%s",szString);. R  B7 u. \% w% w/ v/ V
  722.             if(strlen(szString))- ^, j7 R% F9 M3 ]
  723.             {! L* @1 z) f. j+ ]6 Y$ y, ]) m
  724.               if(bFirstChar)
    + ~5 w* P- j3 s
  725.               {6 L8 G, M; r. d- N# H
  726.                 bFirstChar=FALSE;7 _2 g4 B/ U' |  P1 O* L
  727.                 bConnectIsBig5=FALSE;
    ) U7 ?/ k3 X6 ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;0 g$ R8 i% X1 `
  729.               }
    0 u2 R6 ^" ]5 ~  Q0 ?
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ! H. k! B1 C, b9 b3 H& J& M3 J$ k
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));( S8 P' C9 u3 R/ L  X
  732.               dlg->m_ListText.AddString(szString);
    % o* m  V! ?+ H) ^
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 J/ W# m+ y* v) q8 M
  734.               *szString=0;% Y, y( f" J. \/ i/ ^' w$ p
  735.             }3 [' C$ H5 t* V2 Y3 F
  736.           } while(iEOF!=EOF);
    8 ]( V# q0 C' C. O
  737.           fclose(fp);
    * f+ B- I8 R& y" l- W. C" o
  738.           unlink(".\\DownLoad\\readme.txt");
    - e! @0 k; S& x. ~9 \! m
  739.           dwStartUpSteps=3;
    . u' W  W7 T% b' u! }. K
  740.         }+ V* y% ]. I! a3 j! R" z
  741.       }
    ( ^4 u) U& G' A! o
  742.       break;
    ! M" g' \4 l$ ]8 |: T9 n
  743.     case 3:
    5 d. c; Z% ]4 u
  744.       if(!Dn.Connected())
    ; I9 p5 v4 r: W
  745.       {
    - G+ W1 q. h% \2 R
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);. @5 o7 S8 f2 q8 x
  747.         dwTotalFiles=1;8 U9 x3 O+ ^$ r5 O, e, P
  748.         dwDownLoaded=0;; S/ P' G5 @5 O
  749.         bSilentStep=TRUE;$ J# V5 H5 A6 u* N" P
  750.         bCompressed=FALSE;
    2 O% L) e. P8 D# y8 F* U
  751.         strExtLocal.Empty();
    9 x1 _( ?% M2 |# ]& n
  752.         strFullName="checkversion.txt";
    & X" j& a/ P7 Y! D9 I! m
  753.         dwProgramState=AP_CONNECT;% b  R) t8 w$ A6 v" {$ w, W
  754.       }
    7 C, v7 N( t& G
  755.       dwStartUpSteps=4;+ F3 |9 d: _6 f4 ]$ T$ c1 Y
  756.       break;
    . b7 e% M0 q  Z1 Y# y
  757.     case 4:
    ) H% k4 ^% ]. @. G+ i( }/ t  r( e
  758.       {1 C- ]3 Q) H. |4 k( Y
  759.         FILE *fp;  l4 [3 G- p$ E, t9 |
  760.         char szString1[128];, s( _' V; L( x" N1 L, Q' g3 c6 X' L
  761.         char szString2[128];. q$ X$ G; C; H) W, c& n
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ( p9 k1 _+ t! G$ v: g0 }; t4 }
  763.         if(fp)
    5 ~, w; P5 W! |1 n4 g6 @7 i- J
  764.         {) a* \2 }/ J9 ~. ^# S2 U( w
  765.           fscanf(fp,"%s",szString1);
    6 B3 Z7 K  K- m' v$ R
  766.           fclose(fp);
    . O/ T  P( F5 j2 C7 `4 L7 v% F1 Z
  767.           fCheckVersion=atof(szString1);
    , R, m& _) k* @) S' o
  768.           fp=fopen(".\\checkversion.dat","r");, J9 g8 N. a! s2 m$ H% Y9 k
  769.           if(fp)
    3 ]3 P# m# \6 \! n7 r' A
  770.           {
    % F9 a& V0 M" u6 N& }
  771.             fscanf(fp,"%s",szString2);, T. b- q  S1 C* s7 R
  772.             fclose(fp);9 N- t5 h- R$ X1 m0 w: z2 C; O0 Z
  773.             if(atof(szString1)!=atof(szString2))
    7 a1 K; x' W) f+ E
  774.             {
    1 L; a+ K2 w" f& K. s, J" u* e
  775.               if(!Dn.Connected())
    $ f. \2 e+ A! H) L
  776.               {
    1 U6 f0 N" v& _( X& h$ k( l* |* }4 I$ t
  777.                 bFirstUpdate=TRUE;4 k; W4 P! L# ~* w4 [
  778.                 dwTotalFiles=1;
    ( n1 t2 B6 a* L0 L* b* ?/ f
  779.                 dwDownLoaded=0;
    7 k6 @5 e% i. \# d8 Y
  780.                 bSilentStep=FALSE;
    , V8 [3 u4 g) T: m: T; I3 p
  781.                 bCompressed=TRUE;
    ( j9 X+ k5 j9 k5 I3 N4 V' |- b
  782.                 strExtLocal=".\\DownLoad\";+ o' b  L) a, s
  783.                 strFullName="update.txt";) z9 c2 v" P7 V' C6 r4 |
  784.                 dwProgramState=AP_CONNECT;
    4 K1 L, r0 ~* }" d8 S, W6 f* u6 {
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  `& p: J" c$ p
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 k6 L- i1 W+ G  ^$ d- @9 `
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # U  P% _- T+ V8 O; [. b' h
  788. 3 ]1 h: Y# ^4 ^
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % t- h# O- j1 n4 B) u
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ) i2 `) R* g! B. c1 J! @5 i: {( m
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    % l) A9 y2 L% r, z# @1 e# j
  792.                 {+ L* I( Q0 ^7 U8 k/ p9 `6 |% p
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    % Y5 i, e/ \2 ^! h/ X
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    + M4 h& w: `4 C. c: `8 y  @
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    - H/ F' K1 y! c
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 n4 a8 Z- f& W0 I) q/ `
  797. ( A) f1 m/ y  H. m/ a4 i8 U
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : Y) h* c$ K7 V) q4 b" n* P
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' O& h& [6 ]4 I* U
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 }, V# J+ G1 V/ r! g; F+ ]( E
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# ]0 e1 H/ Z5 R% U) \
  802.                 }
      K/ d* P5 N# R1 D
  803.                 dwStartUpSteps=5;
    % e3 h. L2 N  D+ O7 L
  804.               }
    $ n0 f5 g* C5 w* z/ A
  805.             }+ I6 |. F1 Z1 O5 S
  806.             else
    $ R0 ]) Q3 B/ y
  807.             {
    5 y& ^) q( I/ Z' |" G0 ^' C) d7 W! n
  808.               unlink(".\\DownLoad\\checkversion.txt");
    0 j$ ?  z7 F; r2 k; N8 Y* H
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    9 L1 M, c; T1 A8 [0 p7 Y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
      H% M- H" h1 i1 b+ ^6 Y
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" S# s! i6 D2 K- T
  812. 0 E3 @# x2 G  m0 D
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + L" T$ p! @9 l+ R
  814.               dwStartUpSteps=99;9 t5 ~; F% _" e) b. E' E
  815.               bFinishUpdated=TRUE;
      e7 M% Z( {& M8 X
  816.               bCanUpdate=TRUE;6 M! ~8 `! i% d7 {8 Q- d6 W
  817.             }
    ' @. H  M- Q% X0 d" G1 ]0 v& J$ k
  818.           }
      b) P4 C. w% H" |: f8 G- A& f& H
  819.           else
    1 N6 y: g% r/ m: i9 M4 w
  820.           {% D2 ?" X9 Z- a( v& [" \
  821.             if(!Dn.Connected())
    1 k( m& T% x' Q1 a) K. H
  822.             {
    . q1 _( v8 o$ b  S
  823.               bFirstUpdate=TRUE;- \7 [- A) {* c) K
  824.               dwTotalFiles=1;4 l& J" h9 I# W( N8 {( s
  825.               dwDownLoaded=0;0 v& h, L$ ~' K9 R9 s. I
  826.               bSilentStep=FALSE;
    $ g1 V7 R. J/ i2 _' e$ }  K
  827.               bCompressed=TRUE;
    , w) Z) ~; L% x; `
  828.               strExtLocal=".\\DownLoad\";4 _) @2 f3 i! c& e1 [
  829.               strFullName="update.txt";7 {1 B+ B2 d6 `0 `
  830.               dwProgramState=AP_CONNECT;
    7 y1 N7 n9 I! V& i1 n- @6 d
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & c2 M7 v3 ~: l7 G" l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " v+ W9 m5 b# r* x% _
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");9 u# F2 S; A. |; P9 L) i- c' V
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 Z: |5 p0 e7 U- ]! C
  835.               unlink(".\\DownLoad\\checkversion.txt");
    - a+ t; A6 R3 u7 K: |9 c
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)9 X' C7 I) |1 E' d8 `$ [: J
  837.               {
    ( L  I9 Q& x1 s9 J# t# ~2 i
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");3 y9 x0 d7 G, r. c4 |) Z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    5 q3 o1 M3 u7 A% Z: w
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    # h: p+ f) ^: o( f
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, |$ r* M# v: d+ G  M% q
  842.                
    , x8 X3 R+ |# g8 d" X; c& J
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - E2 n! B6 g! M* G, L/ c4 m
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ) S+ ?. ^* H" U9 @+ d. _
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");7 w' B$ _9 n* a2 p! T& r% d1 w
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 ?/ f1 o0 B8 f$ U2 ^* I9 d0 [
  847.               }, u  X" m1 T, V2 ?
  848.               dwStartUpSteps=5;
    % K5 J# G, @9 ]6 Z8 C: @! U
  849.             }
    2 P8 a9 @9 y+ a# w" ^% `
  850.           }- h4 z! v- Y! S$ z4 [2 w3 {
  851.         }; g2 I9 X/ T0 ~$ T4 s3 h9 P' a
  852.         else
    ! q) [/ P8 N# V. ]" X
  853.         {7 t0 k- Y+ [2 p
  854.           dwStartUpSteps=3;
    : r' V/ q7 h* k1 ~" h6 |
  855.         }
    2 B1 H( a( t6 u" C( q0 Q% G% M% G
  856.       }
    . N+ k' q6 o! q. H  T! N8 Q
  857.       break;% P' l! Y5 {6 t
  858.     case 5:
    $ ^9 e# P6 \- H9 {! w
  859.       {
    $ l1 X0 H: ~# [, r+ J
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)  a4 h6 G/ m- a: S8 k, P; K
  861.         {
    # B0 E& w( |& B. Z
  862.           int opt_overwrite=1;
    ( F/ e- K  J" l8 u9 V0 g* v
  863.           int opt_do_extract_withoutpath=0;
    " k# L3 v: {" G
  864.           unzFile uf=NULL;, B: \8 l1 i+ w2 A

  865. 2 \0 n+ p! j% N4 d) j* H
  866.           uf=unzOpen("Wsa.zip");" C1 A6 h' ~6 P) ~) w
  867.           if(uf)3 }7 `8 s: Q9 h
  868.           {" w( P9 T* I! h  x- u( D5 @
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    & z6 C' }) H; q
  870.             unzClose(uf);
    ! @9 e* j$ e& u* v* g8 O) O
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");( s9 w0 t* [) S. I
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");+ o) Y* Z: U$ W4 s5 [4 I
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ( @! _/ W1 {* R) ?# b7 }, ?
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 I* W% W& Q) ~8 q
  875.           }
    ! \3 H: F8 u8 L% z1 W+ p. V
  876.           DeleteFile("Wsa.zip" );
    - u$ u5 R$ ~1 N$ }8 @7 h' a
  877.         }
    1 K0 s5 y: G. g2 e- w
  878. 3 T* [' ^! J. ?" g6 P$ I4 G: X
  879.         if(CheckLocalVersion())0 F' F1 y1 J$ ~$ C/ L! \
  880.         {' Z  c! V0 I: A# x5 q+ @# K
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");) O2 Z0 |5 E( N  ~. o5 L
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");3 U; L8 F& \; _0 g) t6 B; U7 L& e
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    / {' l  q  B0 g& Z: [
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; u$ j0 b4 L+ _# ^+ ?$ e( ]) E. V
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);( \6 _4 y5 V0 o# r6 ?
  886.           dwStartUpSteps=99;
    6 ?4 v5 T( z! ~9 v9 A3 R  D& H! F
  887.         }
      a# Y$ s4 M. ^( J  M/ L* X7 B4 F
  888.         else
    * a  P7 H' b# K% I; O. ~( i4 `
  889.         {0 i) h5 s4 d2 ?
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! x. O1 b8 T; ~* X+ F6 }6 Z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. ^" L  d3 F' V& g" h! y6 s' I
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");: s2 A3 f/ O! d, o+ o& O7 f' z

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

2 v" `; B' |, F, F

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-20 04:37

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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