CSUpdate.exe源代码

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

+ ]) K: K# X; S' U
  1. / RevApp.cpp : Defines the class behaviors for the application.
    / a* u1 E( ?1 Q! L. n' _6 T3 z+ ~
  2. //* Y, _8 @& V' U* |& h! C& k5 L* G' M

  3. # `5 ~5 D* `- A
  4. #include "stdafx.h"
    5 w& a5 g! w! |: P4 C. G& \
  5. 0 z7 J6 o. L2 V! Z4 s
  6. //#define UNICODE$ `8 z  d7 p) j$ Z/ O( L) D! N  X
  7. //#include <gdiplus.h>
    0 M( ]" O! R0 j8 e
  8. //using namespace Gdiplus;
    8 v0 @7 M$ d: z6 R

  9. - E- A$ Y, [/ a) K! `
  10. #include "RevApp.h"
    / z! u# C8 f- l3 N3 h, o! R
  11. #include "RevAppDlg.h"
    / e* b* `0 I7 H
  12. + d7 i' Z0 [2 ]8 H6 [/ E% k
  13. #pragma warning(disable:4786)% [$ n7 |$ _! j6 T. A( B2 Y8 f
  14. #include <map>
    # s9 w- q  g& g& X
  15. #include <list>
    ' v" v8 `. p2 J: _
  16. #include <direct.h>1 C9 q3 u1 z1 e

  17. " c- s6 ]+ s; g# J1 Q; j
  18. #ifdef _DEBUG
    $ y, @. s: Y5 U3 B
  19. #define new DEBUG_NEW) b( X% ]* D4 X
  20. #undef THIS_FILE$ \' M/ }. E' o9 @. l% ]% t9 ~% Y$ `
  21. static char THIS_FILE[] = __FILE__;/ ]; W& m" s1 K' X2 m
  22. #endif) i4 s( |) O7 ^; V( O
  23. #include "SkinResDef.h"2 K4 X+ v9 [) W
  24. #include "ChangeBG.h"
    1 s# H: _" }1 R0 Q; d/ l$ m, b
  25. #include "AFXINET.H"1 {4 `: B+ q* i) Q( V1 _
  26. + l' R& \# m' \- \
  27. #define TRADITIONAL_CHINESE 0& k/ j0 v; J2 S2 ?6 F* H  q
  28. #define SIMPLIFY_CHINESE 14 e4 d6 X5 i, M
  29. #define ENGLISH 2& t* m8 V. D# q2 W
  30. int m_iLanguage = ENGLISH;
    8 v* J' a/ S+ }2 I3 l3 n
  31. /////////////////////////////////////////////////////////////////////////////
    , w$ w* `6 p3 M7 W9 }7 _* {6 ]
  32. // CRevAppApp
    : j, p+ E% D1 k* J
  33. : p% f: o9 e. r
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)9 V& O0 y8 b. S0 }& E
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    . ?5 C5 \8 Y* _
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    # n, [, y3 v6 K4 x  {9 W
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    / M2 b, a  w8 [& \
  38.         //}}AFX_MSG* U/ `3 L# Q  g4 |8 c- T
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)7 `- T" i+ d. X& L; a. N9 m
  40. END_MESSAGE_MAP(). }9 O, k2 t( I+ [1 q9 f

  41. + X' N+ T" {6 C, Y% \
  42. /////////////////////////////////////////////////////////////////////////////
    2 t5 P0 A+ [+ v
  43. // CRevAppApp construction
    0 Y1 X$ h- z% q
  44. 3 j8 p9 s6 I( m: u! B% ?
  45. CRevAppApp::CRevAppApp()
    7 E* ^& R% Y; Q/ o  e
  46. {
    $ T# i% {$ B' Z4 ~3 P2 k7 s
  47.         // TODO: add construction code here,1 c. H: ?# g/ H
  48.         // Place all significant initialization in InitInstance
    ; J7 W2 @8 K- B$ G; Z+ v
  49.   bDisplayIsBig5=FALSE;
    1 h7 i8 }# m5 W
  50.   bRestartUpdater=FALSE;- C5 N$ g$ x; e  l8 ^
  51.   bFinishUpdated=FALSE;2 _6 {7 k1 l6 f1 g( J, ]+ I
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    9 E' b: o: S9 R
  53.   InitChangeDataBig52GBKS();
    ; q) H" u# Z' I7 a: i
  54.   InitChangeDataGBKS2Big5();5 q- t/ ^& x# W( ?  {* f9 P
  55.         /// i! p7 L9 F8 i7 ~1 I3 O% u
  56.         bClickRunExe = FALSE;, r3 q7 V. }) }
  57.         //$ n7 ?8 C, [* j# |" q% M3 G
  58. }
    1 D' z5 b+ k" I

  59. : s0 N% \- T( }6 H- c
  60. CRevAppApp::~CRevAppApp()" o/ J* h: ], e' S9 z( H* d; V6 R
  61. {# l4 B( m  L0 I5 @7 k
  62.         // TODO: add construction code here,
    / n2 Y+ @2 c* j+ M
  63.         // Place all significant initialization in InitInstance
    ' U; H! h9 A% I1 e4 C  k- `& N8 z
  64.   EndChangeData();
    7 r" R; F: ]) Q9 V
  65. }
    ! d* N# y0 c  D+ g- t2 X

  66. + ^9 x) }% X! t8 I0 w+ Q: m. G
  67. /////////////////////////////////////////////////////////////////////////////5 K1 ~6 ?: X) q% x( x( X9 o1 E; `
  68. // The one and only CRevAppApp object
    / g2 P7 [# P# J

  69. $ }# _, {5 @) Y: h0 F- k! l
  70. CRevAppApp theApp;8 c/ n: W4 L( T* u2 D

  71. ' S  A! f3 Z/ `% {7 e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    , W% ?. i& m* ^4 r# o* I, ?/ t
  73. {
    + q7 Z4 D1 o' m
  74.   int iEOF=0;
    " N* a  R+ O  S* e( j3 b
  75.   char szTempName[MAX_PATH];# x" }8 t& y( ^, Q/ l. q6 B9 ]' x
  76.   *szFileName=0;
    " Y  `$ T: s) }% ]" P
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! e+ D$ O: v1 W0 c) t) U8 ?
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    + u  I/ X* E1 T5 L$ d: C
  79.   {  x% D7 R/ M, P+ k, i4 ~6 U
  80.     strcpy(szFileName,&szTempName[1]);
    4 ^1 ?' u" l3 b& l- @" g
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)& Z: ~8 v9 g) J1 A# m
  82.     {
    8 t- `+ r: M7 W6 O+ l% q: s' R
  83.       iEOF=fscanf(fp,"%s",szTempName);
    $ Y& C, [8 n' s1 o' C
  84.       strcat(szFileName," ");! n6 g  G% i3 ]' T5 `2 S7 X' B
  85.       strcat(szFileName,szTempName);( \9 Z- _' H! S. z
  86.     }
    0 C" r. s' z& `3 K
  87.     if(strlen(szFileName)>=1)% S" h$ d+ B% v8 V% `4 F
  88.     {
    ( w5 ]. x0 m2 C
  89.       szFileName[strlen(szFileName)-1]=0;! e# {( E9 G8 {0 j
  90.     }
    6 k* t/ M' j1 j9 L- _& P% j7 u
  91.   }& z7 t. `& p6 E# p
  92.   return szFileName;
    $ q9 Z9 s% B! Z4 r
  93. }
    1 K7 X2 S4 G5 _/ j8 A; S) N
  94. 1 a  \! f3 W9 s
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)$ c: p, w; Q1 E4 V
  96. {2 Q- l0 F+ D9 N3 m
  97.   FILE *fp;
    0 z7 K+ t$ `& J% x2 L7 o
  98.   char *key=NULL;
    7 R$ z3 w0 X" m6 {
  99.   char version[MAX_PATH];- a# \' L+ R6 |6 T- y6 X
  100.   LPUPDATEFILE file,olds;
    ! G5 M/ k, B9 D: V
  101.   std::map<CString,LPUPDATEFILE>::iterator p;8 A3 w: W: X% w" j9 W+ q

  102. % U# c6 a. S& f& C1 O
  103.   UpdateList.clear();6 L  y* [2 r$ z3 ~( [2 k
  104.   UpdateFile.clear();
    , ^! S# ~) [% N9 {# R2 n# ]/ b' Q
  105.   if(GetFileAttributes(filename)==-1) return false;4 c2 c8 T9 Q4 ]5 E5 o8 o
  106.   if(!(fp=fopen(filename,"r"))) return false;- Z$ Y9 j* X3 V, h
  107.   fscanf(fp,"%s",version);/ L! l2 @! Q8 M$ p" B' e
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }0 o2 J' z' ?' c5 e/ e$ G
  109.   while(fscanf(fp,"%s",version)!=EOF): q0 P- Y) s6 N8 t; `! D
  110.   {" H4 [/ `! \$ X: p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  s" ~  }9 A: J
  112.     fscanf(fp,"%s",file->path);8 s( e3 u$ @/ d6 j( M1 D
  113.     ReadFileNames(fp,file->file);
    2 e: T4 y' F& ]% `  V
  114.     strcpy(file->full,".");
    4 f* y9 Y" r: r  X. v( D# K. _
  115.     strcat(file->full,file->path);6 X2 ]/ Y; I6 M7 \9 G# V
  116.     strcat(file->full,file->file);& n/ `; m9 C" U! s5 l2 r7 f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())4 l/ [8 ^( J* z- h
  118.     {
    7 ^- s& V+ m3 \
  119.       file->vers=(float)atof(version);# j0 C. k9 [6 q+ g; s: I4 S7 E. h) k9 _( o
  120.       UpdateList.push_back(file->full);4 L8 B- i! }/ L0 T2 j
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));$ U! u3 x$ {/ s5 S
  122.     }
    9 X" E& F0 ?! v
  123.     else
    3 @) }) J8 i. h% Y) @% W8 `
  124.     {
    % B; s* j/ O5 g9 ^  B
  125.       olds=(*p).second;( F7 f9 u" s, ?$ I
  126.       if(olds->vers<(float)atof(version))5 ?# b0 e3 }; Z  o, i- s: M; U
  127.       {5 F* p- d( s0 Q! K4 I- {
  128.         olds->vers=(float)atof(version);# Q" C0 P* C1 o$ T7 K1 {
  129.       }# y+ t* O. C. q8 [. Z# f1 G$ T2 M
  130.       free(file);/ K% e7 B9 ]0 B& [, u6 v, p
  131.     }
    ) m/ i# {% I/ Z" ?) ^; j% N
  132.   }
    ; t) n( R8 Y- q* o' }- K( j
  133.   fclose(fp);
    ; S2 B2 x' |  C, B5 u: O. p
  134.   return true;
    : \" ^* O. }: p% `8 k. `9 J" k
  135. }5 v$ `4 u3 n0 G+ E$ P

  136. - t0 V- J' ^# v) B/ i% [/ J
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath): n- O8 [$ u$ k* ~
  138. {
    ; F( \) C% B9 I% Z# p% z) [5 I  i( c
  139.   TCHAR  szFull[MAX_PATH];0 J6 E1 X6 a0 Q8 q
  140.   TCHAR *token,*inter;" o1 S7 o1 ^. o: J, _
  141.   *szPath=0;
    2 V% R5 w# v# [3 l' V8 N  G
  142.   strcpy(szFull,szFullPath);
      J$ G, f# f( F: F
  143.   token=strtok(szFull,"\\/");
    : e/ Q, _0 @) E
  144.   inter=token;
    8 ~: z- i5 P4 t6 f( r: r
  145.   while(token=strtok(NULL,"\\/"))9 P7 D% ?# b7 f0 u( R
  146.   {
    $ W! V- \+ K. j, M# s
  147.     strcat(szPath,inter);
    4 H: D4 ]9 `1 P* i" ^1 w$ }
  148.     strcat(szPath,"\");
    ) w: R$ ^. i% X' N, K
  149.     inter=token;  K* i& p1 X) T& s, Q/ b1 D5 m
  150.   }( r/ H1 t3 c1 u* N1 e" G
  151.   return strlen(szPath);8 M; z6 M& a% @( B6 G9 w
  152. }
    ) |/ b- u" k, v- P1 N$ [
  153. " h* Z( N: J& ^0 N1 u0 ~( z5 Z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% _9 K! ~: l' D1 k
  155. {
    0 [$ ]2 g2 Q7 e  z+ @  E
  156.   DWORD attrib=GetFileAttributes(Target);
    " o, i+ B/ H: J1 w% t' a! v
  157.   if(attrib!=-1)
    ' T* @' S5 l6 d  c( L8 p0 @
  158.   {
    ! I, Q- _) [1 z0 _5 X3 `
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' V, f9 L& t4 h  K
  160.     {
      n5 a4 X. g5 j7 i0 r2 K4 C. d
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
      c1 F& w, S$ H* i4 |
  162.       SetFileAttributes(Target,attrib);$ V" t9 A' n6 _! d3 `, [# f
  163.     }
    : x9 Z6 p. D% U5 a; r8 \7 |
  164.   }
    ' F; F* g6 [! a
  165.   CopyFile(Source,Target,Erase);! S1 W. G, D3 O
  166. }$ k1 J' `/ l3 s) w; Z
  167. 5 B( `8 j4 {8 P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ; N+ }$ F- m9 M+ k8 j* c, U- d
  169. {& W  r/ {' J! U6 w
  170.      FILE *fp;
    0 q! M$ j7 S3 S1 q0 C
  171.      char  szBuffer[8192];. C( J) M. e/ g" H; u$ v
  172.   va_list  argptr;
    9 v! {- M4 x  q# u7 g2 h

  173. + q4 B' i, r3 {, c
  174.         va_start(argptr,message);
    # T) ]3 a8 J6 H* A& r3 P
  175.         vsprintf(szBuffer,message,argptr);
    3 b# R6 x+ @. _: W
  176.         va_end(argptr);. H% y4 z% h( M/ d
  177.   fp=fopen(FileName,"a");: _' N! a5 w' |; p5 ~3 w
  178.   if(fp)
    0 S3 ^2 @4 }  [6 w
  179.   {
    ( l0 t, ^, m/ ~7 H# O
  180.     fprintf(fp,szBuffer);
    % g) O+ M5 E6 M3 G. n" [
  181.     fclose(fp);+ A- e% z! ]/ D! X$ ~) t/ R: |
  182.           _flushall();, B. I4 N+ U, K
  183.   }
    / a5 g4 v/ Q) `
  184. }; D# C4 k; ?( {. J. e& [/ f& M

  185. ; `/ J7 K5 `. d0 @
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    " g' }( j! F$ J, g; e
  187. {/ \# k% O9 K' Y8 l
  188.      FILE *fp;
    ( {7 s. P" O! \$ y( x
  189.     DWORD  attrib;
    8 o0 o$ N! x# h! S4 X4 K* |" e
  190.   attrib=GetFileAttributes(FileName);: D# F& `. w  O, d. E' E
  191.   if(attrib!=-1), H3 l1 z. w# J0 }$ Z
  192.   {+ [/ {4 M+ J  `! |5 w  h
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      o) e7 H' ?3 A/ n  [+ b  S5 O( c
  194.     if(!SetFileAttributes(FileName,attrib))
    ' s# b6 F: _, [: a8 \/ T
  195.     {
    - B  B+ K% V. ~9 r! M
  196.       return FALSE;- H2 B/ W* P8 z* S  ?  q
  197.     }1 e/ J8 f! O' b8 @
  198.   }# \& M9 U& X# |, }" ?
  199.   fp=fopen(FileName,"wb");
    0 t7 t0 E- V: G: J. {
  200.   if(fp)
    0 W  D  u/ _3 l7 S9 Y' l% g+ V
  201.   {/ l% B" B/ D# B8 n7 h$ b
  202.     fclose(fp);
    + _: k  F+ g, n; W  N1 Y
  203.   }% [# M* s( M! Z. ]. C
  204.   return TRUE;
    ( p8 j; ~* I' }6 k7 b+ |$ w( A6 [
  205. }
    $ K" i% h6 X" u# {) q
  206. " o% u& M1 T$ ?2 R: {/ M
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ) P( D9 d6 j( \3 B
  208. {
    9 a$ K6 }+ W4 r  V1 ?# I
  209.   char filename[MAX_PATH];, G9 k9 C- t& ]5 K8 g) Y
  210.   LPUPDATEFILE file,olds;
    / R/ U. w( X) S8 m" T
  211.   std::map<int,CString>::iterator i;
    * d# H* |) P3 W* ]
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! l2 T% y6 _1 r" ~  S2 L6 O
  213.   std::list<CString>::iterator l;
    % a" G9 b3 P8 V0 b$ _$ {* O/ f) ?; F

  214. ) J8 J; o- }' j9 k% ^& A
  215.   if(bFirstUpdate)
    0 D) ]' `& b2 y% R* g; j% T
  216.   {9 h) Q) J) ?5 {6 u+ U* \  x% z/ T4 i
  217.     dwCurrFile=0;6 S: B, M, t0 ]3 b: M8 l1 K
  218.     bFirstUpdate=FALSE;$ H3 M% i) @# g0 o/ E
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): t( b5 @8 c% ~
  220.     {5 l( Z2 g2 Z4 U+ X2 p7 r% b
  221.       dwTotalFiles=UpdateLocal.size();
    % l3 d* b+ U. b' U+ t" @
  222.       dwDownLoaded=0;# w/ `6 @. Y* O! Q/ n% ?! j' e
  223.       bSilentStep=FALSE;
    , ^* W$ _( ^; q  a) c
  224.       bCompressed=TRUE;) R4 U2 t' A+ q8 _0 i  _
  225.       strExtLocal.Empty();
    0 }( N4 P& Q) Z: E/ ?
  226.       strFullName=(*i).second;+ K9 w8 Y' {$ O* L
  227.       dwProgramState=AP_CONNECT;  l/ L7 q: T; c% W( c% B' y6 K
  228.       return TRUE;
    . \- w$ }" ~. Q4 P- b1 A4 I
  229.     }
    ) G1 J3 d0 S. g% B/ a$ d0 p5 _
  230.   }+ A& d1 B  F: U( i
  231.   else if(bRestartUpdater==FALSE)' |# a- z! N2 p& A( z0 Q
  232.   {) _3 L  Z& \7 b' j$ q. U% H
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      `. x6 @3 I7 m: {+ k) B
  234.     {
    * ?5 }, j# D% k  h, ?- d4 t
  235.       file=(*p).second;
    7 F* {/ @8 l+ g2 D  g7 U
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())0 _/ U8 n: t' L
  237.       {
    : c7 g+ J( n* F9 G7 e! I# v% v
  238.         olds=(*p).second;
    3 `3 [2 q6 _, _! H% g7 L
  239.         olds->vers=file->vers;3 r) @& `  t" ^+ \
  240.       }+ Z7 M2 `8 P; Q% d! j
  241.       else
      o' b7 ?, f0 ]/ \! j9 t
  242.       {; D/ F% `, p4 @* w: h( Q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: ?# f4 d! W, h! `. ?0 N
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    & N: P8 _1 f- h6 e& `8 B) x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ! O3 Y, x* w7 X) M% e
  246.       }
    # B: B* z; ]! ^6 C9 q0 q" {  o
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");3 c& u! c3 u, K# t  W
  248.       sprintf(filename,"(%s)",file->file);
    ( N8 R8 ~" O3 V9 F. p9 W
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + E, K' e& R. ?9 B% V  ?( ?: v  L
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    & R& g& ]# y' O8 K& h7 J
  251.     }
    7 x% u1 r% a8 _& I$ @8 {) W
  252.     dwCurrFile++;
    3 u5 N8 j" H0 L* c
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ ~9 }; V2 B6 P6 ^  t
  254.     {! E1 P" K2 N0 e' B( E& w6 L
  255.       bSilentStep=FALSE;; }* L* X( J' h1 ~2 ]8 v* k8 F; |
  256.       bCompressed=TRUE;
    3 j, k2 b  s8 N
  257.       strExtLocal.Empty();, ^+ G6 ~3 U% d. f9 d9 p
  258.       strFullName=(*i).second;
    7 x' ?. t$ }# I) A6 V/ k9 O5 Z6 E
  259.       dwProgramState=AP_CONNECT;& B4 {- L, q: h6 C: ?, U8 x: p
  260.       return TRUE;# D' }& K( \& j% ~) w7 N7 y( m
  261.     }
    . o9 c" @: q- j1 j$ d
  262.     if(!bRestartUpdater)
    , Q0 U, i$ [  x0 D/ p
  263.     {
    ) ]% ~; S$ K$ E- ]) A
  264.       int iCurrSize,iFileSize;
    . r) H, c" w- j, A1 i9 G
  265.       iCurrSize=0;
    2 T4 I: r$ h7 T: s2 ]
  266.       iFileSize=UpdateList2.size();
    # y3 D' k1 [% M2 d
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");# V0 V: c7 t9 B# I+ q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    : V6 u) W# b1 e9 m6 K! L8 h
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( m$ t/ q2 M! `0 H
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; R: Y9 M8 p7 {& d  _( o! m* V
  271.       Fclearf(".\\update.dat");& X" E5 C8 X% f( p& P7 K
  272.       Fprintf(".\\update.dat","Bloodyf\n");  O# t4 S4 o2 `2 Y7 l6 E
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)5 @( b  M% ~( b5 i, r! z+ L
  274.       {
    % C5 F  |# {4 y( j
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
      t. a( v2 z: A
  276.         {7 q: R' `9 i) B. V9 b! X
  277.           file=(*p).second;$ [( d$ g, Q) A. s- R
  278.           sprintf(filename,"(%s)",file->file);; B2 o. ?9 J* V1 l' N
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 a3 k9 }+ G5 }0 P+ x9 p: j
  280.           iCurrSize++;
    7 W8 C; ^/ D0 L2 ^' M
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: F8 J; \, c2 r% J7 `4 j/ k
  282.         }9 F" G3 s' V9 B  i* S  g  v
  283.       }
    ! a$ b' P3 Y4 B+ {  Y* D
  284.       unlink(".\\update.txt");
    " k& z# _+ `  m; U9 U: C/ Q7 U
  285.       unlink(".\\update.tmp");  [; A5 z. Y+ X& z# g' ~. _
  286.       Fclearf(".\\checkversion.dat");
    1 ?1 Z1 c% H: Z7 }8 V/ Y. D+ F& k
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);+ s$ J7 w# p( f3 y, f
  288.       if(UpdateLocal.size())
    ; L# j( Q4 w  s; |& @& p+ i7 X' H4 `
  289.       {
    ) @/ g) ]( k" w, Z: u, y9 p
  290.         UpdateLocal.clear();" Z8 ^8 X8 n7 @0 ]; J
  291.       }
    # g/ Y( l* \3 j1 Z$ t
  292.       if(UpdateFile3.size())& C% r' \/ d* l: s/ T
  293.       {) B: w* k) p# a6 X
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 k+ T( B$ l6 L, U
  295.         {3 x1 v) W$ p( G4 \  U
  296.           file=(*p).second;
    : i3 F0 o8 i: U9 b8 G: ~* n' x
  297.           free(file);" J( ]3 i. @1 s' ^7 v+ h4 L& z$ Z4 X
  298.         }
    , ]7 B3 a2 Y1 E! [
  299.         UpdateFile3.clear();
    , l) t. E$ a9 {5 D2 f! {5 R2 F& C
  300.         UpdateList3.clear();& R* R7 m. Z8 o$ p1 T* e+ b) q% K
  301.       }
    0 q5 F! K! h/ W3 @* E4 y
  302.       if(UpdateFile2.size())
    ' [* m( ?% E1 V3 t4 h( S
  303.       {
    * g' |; {# x! E5 [% G. S4 N% |
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++): A* V" v- ^. C3 X" l
  305.         {3 d" ?* Y; W) Y
  306.           file=(*p).second;6 T. d6 r- s' }0 N  v5 E& `9 T
  307.           free(file);
    2 M/ _8 D% K# Z$ @# Q0 A
  308.         }* X  c6 W0 _  {4 y
  309.         UpdateFile2.clear();
    8 x; O3 P2 h7 C6 O0 t# e
  310.         UpdateList2.clear();/ {% m2 e9 ]) T: u
  311.       }, k% p( v, w) l1 N2 w; K- j
  312.       if(UpdateFile1.size())
    . h. v& p) m% b% i9 y
  313.       {( U* D! Z) q5 S9 a2 j6 n
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 }9 a  h' I5 c7 l. K  b; b. v  a
  315.         {
    7 L; \& f1 M- B5 F5 X
  316.           file=(*p).second;
      X. h' h4 W2 ^1 ^3 o8 c( m
  317.           free(file);
    . D6 ^7 h) c# v
  318.         }
    $ z& G+ o. |4 j! ?
  319.         UpdateFile1.clear();
    " ^( i; |: \1 C- r# y; Z
  320.         UpdateList1.clear();
    5 W: S; b9 E' `! r- ~; Y  i
  321.       }
    7 x; v! a: Y& J) t  z; b3 y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));) e; r8 B+ w+ M9 K' Y* M
  323.     }
    7 {. E" w0 D- F9 ]. u8 t
  324.   }% _3 e& z; l6 [9 b# ]& g5 h$ S
  325.   return FALSE;/ r9 }7 C1 v; b5 T: o4 H+ `
  326. }
    : s0 T  U/ f( C3 |0 X/ Z$ U- ~

  327. / y6 Z4 o! K5 z+ `  H; Q
  328. void CRevAppApp::ClearAll(void)' Z5 x  N( Q" n$ e* W  g
  329. {
    ; x& ~6 {1 R. R5 k8 @: Z! L
  330.   LPUPDATEFILE file;& Q1 M6 N! f3 X8 ~' a3 k$ _
  331.   std::map<CString,LPUPDATEFILE>::iterator p;" I+ v1 y+ v. r! y2 Z5 b
  332. ' u$ ]1 \. A7 \  ]( v$ `/ d
  333.   if(UpdateLocal.size())
    % r2 y8 C3 P/ {9 c
  334.   {
    1 u! Z5 n; @& T& L
  335.     UpdateLocal.clear();
    7 B# R8 M0 l3 U' p$ u  k
  336.   }- }. G8 v) l4 s* Q% v
  337.   if(UpdateFile3.size())5 L  y# ?- H+ l7 b
  338.   {
    ( O9 b2 g' U7 r. H( B
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 \" N% r$ l: S. T( @
  340.     {
    * `7 a  i3 b, T% e; p# L* v) p
  341.       file=(*p).second;( H% R8 w: g7 ?
  342.       free(file);9 S) h" o" ?6 j; o; {  V; D
  343.     }) t+ `1 x" a  x! n/ J# `+ ^0 y
  344.     UpdateFile3.clear();
    / n6 P/ P; U7 J/ r8 C) Q& o
  345.     UpdateList3.clear();3 x+ j/ J# |+ G6 G. H
  346.   }5 z  s: F. p# p% A1 u9 Y/ X
  347.   if(UpdateFile2.size())
    3 N$ R2 Z8 ]- U. y1 T8 W
  348.   {
    ' h: f( s& v( m/ K/ Z) g$ D) M
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      N1 F/ E# q2 ?; g+ v: q
  350.     {' l! S6 e& h: B7 F& A5 X7 s5 y$ Y
  351.       file=(*p).second;( X" I  a' w: @9 Y8 ^5 V
  352.       free(file);
    5 \0 r% s( h  U) A; w0 v4 z
  353.     }
    8 Q' v* p  J& f; Q$ d
  354.     UpdateFile2.clear();/ S7 e" r$ C3 R4 B6 u  G
  355.     UpdateList2.clear();4 z: }2 F! L  a7 ]" _; }6 E2 W
  356.   }
    ) Q- s1 m% S$ x6 ?* f; R
  357.   if(UpdateFile1.size())( P0 N" C; ~5 s4 p$ n% m, ]
  358.   {& d& n4 [; S/ ^4 s& t  H
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): O, j/ n$ d1 B# W
  360.     {
    $ a8 w9 M6 D5 c! u- {/ Q. J
  361.       file=(*p).second;
    ( r1 _. T' O2 ^
  362.       free(file);
    " `. k' T* N; H
  363.     }
    . s5 l4 M6 n. {5 b! t
  364.     UpdateFile1.clear();
    , M6 ^6 X: p4 V
  365.     UpdateList1.clear();2 ]! Z; `% J) m& X6 e5 f  ?' ?5 {
  366.   }# g1 z$ p4 z8 }' l
  367. }  
    # f# }( d. O, s& q/ _1 M
  368.   
    4 M( V" I5 K& N$ u' D! ~  ~, _
  369. BOOL CRevAppApp::CheckLocalVersion(void)0 E* @) B6 C7 n: O( u6 M6 h
  370. {2 H+ U9 w/ Z! ]0 g
  371.   int c;1 H* Z+ [6 @4 [) [, O# ?4 g
  372.   LPUPDATEFILE file1,file2;
    ' T* L7 g, G; ^. h8 ~
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;! H& k) H. |+ }9 ]
  374.   std::list<CString>::iterator l;
    1 A, ~7 _9 p+ J5 m- a3 U) a
  375. ( j* X, }$ K6 u- Q/ C
  376.   UpdateLocal.clear();3 U9 }4 {( K* ?  e* O9 \8 c
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);9 t# k# X& j5 ?6 B
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);# J7 V7 f4 }# y. L
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);3 T; b, ~0 |6 W5 V
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    - F. ~. y1 D  y+ X  L0 d  P
  381.   if(UpdateFile3.size())9 z- m2 l3 G* N( c/ E% [% O
  382.   {$ h* b# T2 `! {9 X- _
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)$ x0 Q+ K7 c2 O
  384.     {8 l2 i5 B6 ?0 \$ s' V2 t% v
  385.       file2=(LPUPDATEFILE)(*i).second;% w5 d2 ]0 H5 o1 z( Y7 Z
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( z0 t- H" F  S4 D
  387.       {
    0 ]8 _4 ?# n! |' [) Y! m
  388.         file1=(LPUPDATEFILE)(*p).second;& K2 n" |( u* j; E; c
  389.         file1->vers=file2->vers;
    0 O  A1 t: V; ^/ V8 P4 m" o
  390.       }$ c. n, D3 C. J  B7 ]- K  u
  391.       else
    + S/ ^: X) U$ V+ I
  392.       {
    # \" @9 ], Z! ?5 ?8 d% N6 U: u
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, p) L' E8 l3 e
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 J1 c) z" b' a. Q. {" l
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    0 q, g" C8 B0 S: F- V& N
  396.       }6 l$ k: z2 s# W! D. ]
  397.     }4 `5 ~# _! r9 X6 [$ J- l
  398.   }3 g9 i# [" H0 j- J& [' q
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)' o( {2 i; s; a$ j
  400.   {$ t4 {3 w9 D: \6 w' ^/ R5 e, X
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    & Z! ?  V4 E$ Q" Z) r$ w
  402.     {: d9 n0 t  A8 \, \+ l$ p" M8 z
  403.       file2=(LPUPDATEFILE)(*i).second;- C0 y8 X3 h( f  j5 ^
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 H) ^" J% c9 b" ?1 }6 T) s4 f
  405.       {
    3 [* ^+ c# _( g) S! S5 i; Q
  406.         file1=(LPUPDATEFILE)(*p).second;
    ( Y# h4 O8 {# n1 M" l
  407.         if(file1->vers!=file2->vers)# _( `' c' g3 c8 I4 Z' R
  408.         {+ u, L/ k4 S" L/ e
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # |: D/ F2 d0 m8 @
  410.           c++;* d8 y. F( F5 N# J5 v3 I: @
  411.         }8 g+ R& z( R$ f4 w  s3 g( N
  412.       }& o2 p1 l/ X2 r* U
  413.       else
    - Q, s0 T' p6 u0 j- M
  414.       {7 R  e7 k2 ^- ]% A7 |/ u- ^
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; R8 A/ A( g' W" l; t
  416.         c++;
    " ]$ ?! `. o4 F' B6 U
  417.       }5 t7 H* ~/ X8 Q0 S
  418.     }% k7 [- b) J# y( f$ P
  419.   }
      A  a- R$ Q# b. ?0 Z. z: }, o9 e4 |
  420.   unlink(".\\DownLoad\\update.txt");
    $ H" x. Q' I3 {# a" b- O, f
  421.   if(UpdateLocal.size()) return TRUE;
    % u/ m9 J) Y: h1 L
  422.   else                   return FALSE;8 \* e! z& b) |2 z% [
  423. }
    3 @3 y3 {+ V3 c' v) Q1 B

  424. 5 l; \9 R1 a1 F$ D. f1 ]
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"4 q7 I( ^! V7 Q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"4 L- M7 L: {6 l5 p* v6 l; B
  427. - d6 N  d1 E7 u) A" t, l
  428. , I) b; O$ L2 T

  429. 7 t: w# ]7 K' Z$ G9 _4 M
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ) ?1 n5 `7 ~( q# @
  431. {% z3 z7 z% a  n6 N1 I2 k, K+ h1 F
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    " f2 K$ U( P9 \# C1 u
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# h* c6 N3 R9 S- t3 e
  434.   {
    + {% M- ?, s2 i5 G) S
  435.     char szLanguage[50];7 ]/ v# n$ f3 k
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * i4 Q, Z; J( E& z" \( k) h
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 ~% r! N3 v0 j# t
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 T* V! B% C$ x8 I! D* W: l" g8 {
  439.     else                                   m_iLanguage=ENGLISH;2 ~! G. Y+ `2 u
  440.     char szRegister[100];9 c- S' `" r: r4 W
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 D0 X* k$ ?7 Y9 }1 \( Y# h) l4 M3 x
  442.     strRegsName=szRegister;
    7 W7 u8 R7 d% `; R- P, A! D% \
  443.     char szPatchURL[100];; v9 D9 C1 c4 z" t& {
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% I, z; ]& }1 T6 i$ P6 _
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ; Z2 Y( c5 u: L/ T5 {8 s* [3 J( w
  446.   }7 d) g' h3 Y9 n! e0 d
  447.   else* a" G9 C0 j- E; b# U" l
  448.   {
    2 D- A. I. Q1 o" ]0 O( x
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 m+ E( j" W. }3 }+ j
  450.     strRegsName=DEFAULT_REG_URL;
    ' h2 g" L$ I5 i- M$ Q2 d7 h/ t
  451.   }; J4 }0 e4 r$ |1 s
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 e0 @' s5 z! _2 O+ I
  453.   {
    - J- Z! _, I0 [  c! Y. \
  454.     char szIP[50];
      q9 `$ e, h# C- P; t  a
  455.     char szDIR[300];& Y0 X5 s- O, R' s9 e, j6 |& S
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    : P& }: E+ W- k! e5 ~7 F3 o3 [
  457.     {9 v6 ?! R, j* r0 n
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");0 L1 T; Y+ ]/ h; x% B
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    $ R# a5 j- G- d/ `. M4 K% E, f
  460.       strHostName=szIP;0 t* F/ M" r+ p" b' o+ N% S& }
  461.       strHostPath.Format("/%s",szDIR);
    $ ~4 s. H7 f, Y$ R8 }% h
  462.     }1 w+ Z7 _8 y! h. b$ E; V4 C! F' b3 K
  463.     else
    , N/ z* U/ ~  u3 j# [1 p
  464.     {7 m& Y$ U2 F8 p' k* F5 |* ^4 g
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 @/ T; @; E# M! Z- V
  466.       {
    # o7 x8 M1 E/ k8 a
  467.         char szLanguage[50];, n- h2 {5 |3 p
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 z1 O+ i  E! Z9 W- Y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% T+ D/ ]) i9 C1 U" z
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 v3 \! `- f6 T0 H
  471.         else                                   m_iLanguage=ENGLISH;
    ! V5 P) R% W: p' z* _8 r9 V0 `
  472.         char szRegister[100];0 b$ h- `" j: l# k- ?) T% X2 g
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 V: M$ P: B8 u, E! d& b
  474.         strRegsName=szRegister;* A, N, w& g& w1 @: o
  475.         char szPatchURL[100];: M7 h2 v% ~. x
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 @  J! J" x/ X2 w1 ?- s
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      s% K  d$ |; @# I
  478.       }
    7 ]$ A, z7 P% c; {: d' @
  479.       else) v6 K7 @/ y8 T
  480.       {; f4 M5 p- t: x8 L6 m
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! U9 u) O+ F3 O
  482.         strRegsName=DEFAULT_REG_URL;
    : [7 R% C1 b( _" U2 [" X  q
  483.       }. ?# |, ^. q0 K
  484.     }
    3 ?4 T0 i3 E' ~$ _/ ~1 S( x# P# _
  485.   }
    5 \. b  v, v- f3 l
  486.   return true;
    6 {1 H1 g, [3 e
  487. }, j5 i. @! w0 ]4 j. }( F$ T
  488. " l0 A' n& m. L5 J9 ~
  489. #include ".\ZLib\unzip.h"4 \1 ?* c2 k8 M! J5 p1 g% o$ i
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);5 a4 h# c6 D0 c/ P  I1 u5 w) P  b
  491. /////////////////////////////////////////////////////////////////////////////
    7 i7 Y7 _; i8 q! k+ d; j
  492. // CRevAppApp initialization
    - S6 k! a* g  D$ [9 [. D3 W

  493. 2 B" o; t4 Z! m  \$ J
  494. BOOL CRevAppApp::InitInstance()
    ' n5 v5 e1 c2 D: {% t: P! ?3 p
  495. {
    0 m/ g/ Z, |+ b
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];; A% ~' u+ t, U  }% B

  497. ! l3 S. K& a4 b* c3 U0 t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);6 U" u  I9 }" C" [; O. c8 U  O
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ( D! B+ F: F  D: i4 U4 m$ ~
  500.   {) n/ t9 f2 }9 b' l  G
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    . M% W7 r$ {) B, x4 n
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    8 q9 B+ O6 z( Y( n" e
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
      z& e) I1 E* B5 {
  504.     {# p* J- i7 N$ a( M% k
  505.       strcpy(szPath,szPathTarget);
    & M! r1 C* ~* f- {" s  Q
  506.       SetCurrentDirectory(szPath);2 N, t( u' P& p
  507.     }' ^  ^$ \; C1 I- {# Z
  508.   }
    : R' F* N4 I6 h- K& |
  509. #ifdef _DEBUG
    " O7 M' r! f- H$ U% J) j  a5 _
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 G& Y9 A" D' L: H( h
  511. #else8 @, U8 Q! `% s5 B6 `/ z1 l1 X
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))# T) r% J5 {3 f+ X; Y  X0 Z) s
  513. #endif; e8 x6 |! ]/ X
  514.   {7 A( B+ ?+ x8 F2 Q& f# E
  515.     char tempFileName[MAX_PATH];
    ) w. w( U  x6 ]# \& ]9 p
  516.     strcpy(tempFileName,szPathSource);! `8 T4 Y8 S- [, ~6 {
  517.     tempFileName[strlen(szPathSource)-12]=0;
    : u5 ?) h4 ~$ |5 H, \5 k3 E
  518.     strcat(tempFileName,"\\$CSUpdate.exe");3 ~# J- F# e- [0 A5 q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    5 J: U/ J1 `+ M! F8 }
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    9 K+ ]( l% D5 B8 T
  521.     return TRUE;
    ! Z9 j. E1 c0 R  @3 ?8 q; l" p
  522.   }
    , e6 M% a8 i8 R* F4 t2 i
  523.   // Nuke 0118: Delete run.exe
    0 @7 ~: D: v7 u3 e' }0 T& x- H; r
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ; i) Z6 y# P' `. I% v
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");' Q+ U$ \) F- P" n! n, Z
  526.   if(!ReadCfgFile("Config.ini"))2 g, p6 r8 T1 C7 y; s
  527.   {( P8 B# H! J. l) }, k" s
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: T/ ~3 v# S8 a: d6 ^/ k; b
  529.     return TRUE;
    3 S8 p, r  D7 p( B7 J; |
  530.   }
    4 B& B4 d9 c& q( L
  531.   HANDLE mutex;
    9 K; A3 v2 N; ?% x" j
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 \1 X: K4 [1 `6 L9 r5 v
  533.   {
    + U: S  `5 D; d$ Q# E$ j
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    $ ]* C/ w% M* L8 K) w- B% k( ^( J: v
  535.     {
    / b5 i" F% G9 x9 i/ P$ _
  536.       CloseHandle(mutex);# y2 k! E9 |: A, W) i- E
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    2 S. T9 X% a) Z( `
  538.       return TRUE;
    , r: z* A& d* n# |  f% \# Z$ ^; X
  539.     }
    ; E$ V- M* n* I5 x8 L
  540.   }  
    $ I+ g# J: S, \
  541.   CloseHandle(mutex);
    ; `6 k7 M0 W+ ^3 k, r2 F  X5 E
  542. " L2 A2 M5 w  [( O: T' F
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    , j$ K, P6 V( u  P6 m5 l: _
  544. : j: t- o! q0 B2 M( I
  545.         AfxEnableControlContainer();
    % g  j4 s8 _* E) G
  546. 9 _& M3 |6 l, R
  547.   bCanUpdate=FALSE;- m/ l) \3 `2 X  j9 R! b) j" {1 G% Y( f, Q
  548.   dwStartUpSteps=1;
    0 b9 t. [. t$ T5 _- k
  549.   dwProgramState=AP_NOTHING;
    / N. J5 C$ g- w- E5 m& |/ f

  550. 2 K" c) A$ i9 v& K2 O: Y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    " h3 q' {" A+ W! C/ P5 @

  552. 2 q6 F7 F+ Y( K: v
  553.         // Standard initialization6 S- h/ T* Q$ W4 G
  554.         // If you are not using these features and wish to reduce the size
      h5 s# B, A3 u% X
  555.         //  of your final executable, you should remove from the following: u) [: Y" X4 y! q
  556.         //  the specific initialization routines you do not need.
    * `. T! ^+ u  K# z) X( f0 e
  557. ! o0 v1 ]- d5 j
  558. #ifdef _AFXDLL4 ^$ P! `; F1 y% r" P
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL% \; t6 W1 ^; U% U7 V. D
  560. #else( k* `4 W# L* e2 c2 a7 W6 v
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    * o  V+ C. W3 ]6 i
  562. #endif
    1 {: U) D9 {. U7 Y( c

  563. $ C, g% J. ~, S7 l
  564.   dlg=new CRevAppDlg;
    0 g2 ]( U* B) `
  565.   dlg->Create(IDD_REVAPP_DIALOG);+ m2 [+ E6 i! J0 X  B
  566.   dlg->ShowWindow(SW_SHOWNORMAL);5 h+ y- ~; m( t3 a3 |
  567.   m_pMainWnd=dlg;1 T7 {$ J. K1 X' i2 g/ h" m
  568. : M. O) m; B+ K* D
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 U2 |) E, o. N  p. f) V
  570. 7 M3 `& J6 w. i( k
  571. //  GdiplusStartupInput gdiplusStartupInput;/ s5 \: }3 q9 K: M/ U" M& G
  572. //  ULONG_PTR gdiplusToken;; Z1 d( e7 Z; v3 `" v5 D6 W
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    : s0 u; T7 x; F; }
  574. " Q$ n8 @, e# E& ~6 l+ L" O
  575. //        CRevAppDlg dlg;
    7 @2 _# z: o, h# n
  576. //        int nResponse = dlg.DoModal();
    * r3 Y/ c! s6 Z* m  w: @: g. c, K3 |
  577. //        if (nResponse == IDOK)
    ' T- y. ^: X* t4 `$ }1 X1 o' |
  578. //        {
    ( l6 \( G& k. E( C- x# E
  579. //                // TODO: Place code here to handle when the dialog is/ l6 r$ B7 x, D
  580. //                //  dismissed with OK
    * U+ x3 g1 {' M" D
  581. //        }
    , H6 n7 l" N2 T" p
  582. //        else if (nResponse == IDCANCEL), X/ c: Z/ D1 P% {
  583. //        {
    / v: G8 z7 ?8 i) G& a; R4 [
  584. //                // TODO: Place code here to handle when the dialog is) H& N; ~. E$ p' |3 L
  585. //                //  dismissed with Cancel+ \8 I- W- {5 x$ @) r) H
  586. //        }# t; c2 f5 d8 }2 i1 B2 P
  587. 8 {) r3 }1 |5 R  }3 L
  588.         // Since the dialog has been closed, return FALSE so that we exit the! S0 M6 {# f4 j
  589.         //  application, rather than start the application's message pump.1 g) m9 c0 Q7 S( P# L( t
  590.         return TRUE;. M1 C! H. y& k
  591. }) i9 g, ~) y4 l& f

  592. 4 T3 S5 T: I! V# ^7 o2 r
  593. char *CRevAppApp::strtok3(char *pSource,char *token)& u0 i; l; M2 Y" q' d! p
  594. {
    9 v4 T' T7 X. d) b% f9 q% Z# j+ C0 i
  595.   int i;
    + `5 n& f: w7 z6 I
  596.   char *szRet;9 H+ @: y$ |' a/ J* Z6 ~6 G: [

  597.   S# z) i  c; B! i  V( t
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # u, L/ p& _7 r$ g8 d' \) `
  599.   if(sztoken)) _" f, b2 k& ~& ~
  600.   {( C% y5 k! _4 e% R* @
  601.     szRet=&sztoken[itoken];
    8 e& q2 q5 f8 v" Y9 ?; g
  602.     while(sztoken[itoken])4 q" H! w: b2 i1 K2 q0 Z$ L, y
  603.     {+ o/ s+ g+ O. N& T
  604.       for(i=0;i<(int)strlen(token);i++)* c$ J$ f; Z5 t$ l
  605.       {& d3 @* E2 o+ c% |- d. K6 I% L8 _- c
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    / F" @6 R7 }! \* C; Q5 k
  607.         {8 t: Q% B3 W% R# C
  608.           sztoken[itoken++]=0;
    % J  P/ S( V. z3 _" ?
  609.           sztoken[itoken++]=0;0 Y+ l3 j; d& ~+ O- _7 q/ Z' A
  610.           return szRet;: N4 U8 J; |4 Y! Y
  611.         }
    * j) H4 K+ e9 a
  612.       }
    & v: O, M4 K' r3 X7 O: M' _+ z& x
  613.       itoken++;
    % e! W. q" g* h5 d, [
  614.     }) p1 f# K# l5 D! J6 }
  615.   }8 q5 C, Z8 s4 p! g( p; n
  616.   return NULL;
    3 a( r* Y1 f, ?& h
  617. }
    + S* X( ^, R+ [1 H
  618. ' [1 o4 l& ?1 i7 |+ o& m
  619. void ProcessProc(long Total,long Current)4 Y( Y3 C; ?* ?' @" T3 Y
  620. {4 r+ {7 @% ?: G+ ~8 M2 h& i( S
  621.         MSG msg;7 _& ]( c' i- @$ O3 ?
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);" ]( t! B* Q! f2 d( z( k2 D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));0 H8 o  Z* r1 [, k5 \; O# T1 _5 E
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)). _1 h5 |* I0 ~* u
  625.         {
    ( i5 U' D/ B3 ^7 Z$ d+ s
  626.                 if(!GetMessage(&msg,NULL,0,0))
    9 W( O  H8 `$ I, k- R6 j1 @
  627.                 {5 k+ g! U6 \0 _5 c( g, u
  628.                         return;1 l8 x' Z) b! o) t. F* X8 c4 y
  629.                 }
    / w( p; j( ]* g7 w; l" b
  630.                 TranslateMessage(&msg);' O8 u' L( K4 B: w) Y
  631.                 DispatchMessage(&msg);4 c1 s2 m4 [2 B, p( X
  632.         }        $ G! M" r/ w& o: W1 |
  633. }0 |( d& V/ a- C1 i% g# T
  634. 3 N8 o( S4 u4 y( m
  635. BOOL bFirstChar=TRUE;
    " V2 n, n' v: e7 s3 l4 r% V

  636. ; q  w  F7 U& I( n/ E9 q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    3 c6 `1 L  c1 z8 Z4 f: P
  638. {
    " j8 j& M1 [3 `
  639.         // TODO: Add your specialized code here and/or call the base class
    9 ^9 S% ^3 A" L
  640.   switch(dwProgramState)+ z' Q9 R! C0 e# ?8 C9 A
  641.   {) u& H0 W7 W( r% X! c2 T/ k
  642.   case AP_NOTHING:( i+ c8 N5 t5 V; @' A/ d
  643.     switch(dwStartUpSteps)& ^, L. v) @" |* i/ m! T
  644.     {: p& D) Q+ r1 c' s
  645.     case 1:1 v3 k7 q% C8 V
  646.       {
    8 C5 w. l0 n6 X. D2 ]3 u& {( e
  647.         int i;: A; G( A. k1 I  t+ k. s
  648.         CDC *pCDC=dlg->GetDC();8 T# y; E  V1 _$ |  E0 `
  649.         HDC hdcwnd=pCDC->m_hDC;
    ) W# |+ e2 `/ }# ?
  650. //        Graphics graphics(hdcwnd);
      V3 _. G1 \! e; d
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    , c$ h% S4 u$ y: d6 F
  652. //        INT iWidth=bitmap.GetWidth();5 h" c3 j' l' v6 \( A: R
  653. //        INT iHeight=bitmap.GetHeight();# }( a9 A9 v4 C/ w6 Y3 e/ j# e
  654. //        Color color,colorTemp;
    $ J% Q+ C+ t$ h" f2 r
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)2 g" n, a" u% s% b2 d- J
  656. //        {
    & ]* E4 d4 f4 Z4 r5 _
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)% L4 a5 q. h3 ]
  658. //          {) m# r5 h  ^) P  e6 r
  659. //            bitmap.GetPixel(iColumn,iRow,&color);) \( T8 l0 R; _. {! C1 p
  660. //            colorTemp.SetValue(color.MakeARGB(3 g) S. P; d9 z
  661. //              (BYTE)(255*iColumn/iWidth),, B/ m( W5 P( H2 _) U8 F6 ?
  662. //              color.GetRed(),1 c  x6 L* T7 ^3 d
  663. //              color.GetGreen(),) \5 d( K# ], G, h' G
  664. //              color.GetBlue()));7 N& _1 C+ G0 L/ t: \
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) D; s1 Z+ I; {
  666. //          }" R$ h) D; ]1 E$ _( O: p- l
  667. //        }( V! j# x8 g$ `. `% \
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);, K, b1 P8 o% j+ g
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 B& G; H4 d: @! ?( Y  X
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");) X. j2 m6 Q0 z3 V
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 w, {/ u7 \& o8 t
  672.         for(i=0;i<240;i+=8)
    8 F+ n, h: u4 z9 J
  673.         {
    . q& x: X3 m6 y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % I  T6 g# L, u# w/ h" G3 q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" n: W6 v1 G0 T) t- a  I
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' s, K) j. M- e) ]( f% J8 D2 G" ^
  677.           Sleep(33);
    0 @5 [2 j9 p0 s2 @( p' c
  678.         }0 t4 z) Q8 T3 O! H2 n" x3 y; I
  679.         Sleep(1000);2 `% U4 T+ }  K
  680.         for(i=240;i>0;i-=8)
    * L* }. T. }# z6 E0 {# o* U! T
  681.         {
    $ X( T3 I" s% U" b4 }3 i
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! K& _& f6 ~. }# q* c0 k- Y
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 t* L5 `2 d- V( S( P
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 G( O# l' S! I# I  ^% e2 o! p
  685.           Sleep(33);- V. g6 B3 ]7 i
  686.         }
    5 b' A8 V1 N' m0 }7 y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    & Y% I/ p2 v' f: V
  688.         dlg->ReleaseDC(pCDC);
    . y! l- K- e% M
  689.         DeleteDC(hdctar);
    6 i; e% y! z5 N8 V" ^
  690.         DeleteDC(hdcsrc);
    - y0 a. X( S/ v6 h1 i
  691.         DeleteDC(hdcorg);/ S) v. C$ V) C" H
  692.       }
    0 n6 F- U& Y+ S6 W) h: Y: c
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);5 c/ H1 U9 ^2 ~2 h$ U0 S1 h
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");, _  z, {7 v  L# X6 s  ^9 l
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    0 j  J+ y! {9 N# s$ B
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    $ t& g# D4 q0 h
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - B  Y# x8 R0 n# l* T: p
  698.       if(!Dn.Connected())
    : ?2 X$ f6 M* z7 {' D& p
  699.       {
    5 a6 Z7 S8 I8 m/ v" B3 N* Z
  700.         dwTotalFiles=1;, U$ ^) ?8 O- ^& e: D2 E$ I
  701.         dwDownLoaded=0;# ?) O  a7 f8 U; Z' v
  702.         bSilentStep=TRUE;* P" g: @0 A6 b# L" a  m
  703.         bCompressed=FALSE;3 m9 U" x: n& E9 r; C7 V! `3 f
  704.         strExtLocal.Empty();
    / K8 o" X: ?! W1 Q& l
  705.         strFullName="readme.txt";( i4 a8 v; y2 T7 ?
  706.         dwProgramState=AP_CONNECT;
    7 O$ m; i8 m$ x1 M- A
  707.       }+ u) o+ V0 G1 s: O! p9 f1 ~) _
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();2 D' t; l+ u. f- r, r+ ?
  709.       dwStartUpSteps=2;
    - d6 a: T; y4 B# C
  710.       break;* D  z$ \2 Q6 Y) f- T: i
  711.     case 2:& s7 t* _. n3 ?8 F) J6 n3 P
  712.       {7 T8 T% [6 I& B% d2 `
  713.         int iEOF;
      G* \$ d# z9 m  S+ F
  714.         FILE *fp;. f$ a7 p* z2 |" @2 e# I$ X
  715.         char szString[512];* [$ z8 g4 D$ D! l  c
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");# o$ {1 U/ V  Y+ S/ q4 b; D0 X
  717.         if(fp)- z7 ?. y" O; {$ ^) g; c5 O7 K' K
  718.         {, o5 X  X! w' `1 S) s4 a
  719.           do
    ; r2 ]5 L! {  a6 L# R" h4 U* Z  D
  720.           {' c5 O) U8 A5 Q5 s$ \
  721.             iEOF=fscanf(fp,"%s",szString);
    & r6 H3 m- q, c7 ?; G* l& z, h/ D
  722.             if(strlen(szString))
    * E7 U6 F& [+ Q6 G9 C3 W3 i
  723.             {
    * @2 }2 @* |$ r# Y$ ^
  724.               if(bFirstChar)
    , i- a( f9 h6 m  Z
  725.               {
    4 r2 Q  X2 _9 A  _( A
  726.                 bFirstChar=FALSE;9 s# r& q5 }+ c1 D
  727.                 bConnectIsBig5=FALSE;; F8 u0 d. ~2 @9 m
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    : `- g: w1 G# i9 `- n) S0 K
  729.               }0 F! _* X' y9 G6 h! B8 b
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 f5 z4 X! j* \6 v# L0 I' O
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    / {& H$ W& k/ h% `0 p- S
  732.               dlg->m_ListText.AddString(szString);
    , q3 y6 }5 q- t9 u2 K7 y2 L: s: u$ H; r
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 `) N& @. {8 j/ X- u% {% O* W
  734.               *szString=0;
    & d  x$ J- F3 n( ^' L# G9 k
  735.             }; b7 O) ]# |) l8 m% I- N3 I
  736.           } while(iEOF!=EOF);
    5 F8 i5 _! _4 P; c( U
  737.           fclose(fp);
    3 O' u0 e9 s: J
  738.           unlink(".\\DownLoad\\readme.txt");
    0 b$ O  _1 d  c& G
  739.           dwStartUpSteps=3;
    3 e/ C- F( D! ~( ?
  740.         }
    3 k8 i* E6 |% P
  741.       }
    8 p5 \; a7 Z! \: [, |# v0 r9 R/ f% l7 j
  742.       break;, ^8 D( c  U8 Q+ x3 {4 X, G
  743.     case 3:
    + v$ G$ }0 b: r; D0 i8 U
  744.       if(!Dn.Connected())
    . P. {6 N4 u/ d
  745.       {2 D3 q% }' o& ]% \
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 h0 I2 h. |5 V; r
  747.         dwTotalFiles=1;2 v- _1 R. L4 K# h! m, ?
  748.         dwDownLoaded=0;
    # P$ z7 x6 W+ Z8 F/ J
  749.         bSilentStep=TRUE;
    : A: T, g' S2 ^! x
  750.         bCompressed=FALSE;
    1 d  p2 M  @9 ^5 J  f+ G  G  ?
  751.         strExtLocal.Empty();
    % A, Q* |7 F2 x# R0 W8 T
  752.         strFullName="checkversion.txt";
    / b  V5 Q$ {9 a) v5 F7 X6 }
  753.         dwProgramState=AP_CONNECT;
    0 ]1 O. l! Z. l: Q/ k2 N
  754.       }2 v+ s# l& p2 U! X
  755.       dwStartUpSteps=4;+ f: r3 B/ b+ G4 Z1 y  P) P
  756.       break;* ]8 [3 s7 m4 M, [
  757.     case 4:
    - ]; Y4 s7 B& w: c: e2 W: O7 I. I9 P8 ^
  758.       {* T1 T9 n* |( d: [
  759.         FILE *fp;6 {) }4 w- h# |5 m4 M: [
  760.         char szString1[128];+ b+ W" c4 L& y* z0 P
  761.         char szString2[128];2 t1 R5 H$ ~* p2 [' ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");, H' F6 {9 d0 t, r% ^+ |4 w
  763.         if(fp)
    / o; s+ `; n! R- h  |
  764.         {2 V/ E2 h2 \% s; Q
  765.           fscanf(fp,"%s",szString1);, `& C* a. S: J% Z' T' O6 Y
  766.           fclose(fp);
    0 a. N) I+ {5 V" s
  767.           fCheckVersion=atof(szString1);/ \7 [+ n2 K6 ]
  768.           fp=fopen(".\\checkversion.dat","r");( I7 W2 W9 t$ l' O5 D
  769.           if(fp)0 E. w$ _( f5 r7 I+ G
  770.           {" d$ p5 R/ U0 c, V, E
  771.             fscanf(fp,"%s",szString2);
      A6 D  A8 E+ b$ _1 g
  772.             fclose(fp);3 k: T8 g, e5 @* O, f0 ]: Z
  773.             if(atof(szString1)!=atof(szString2))
    , V* k! D. [$ ?% l3 E) U
  774.             {
    5 |) v- X  o( _/ x! z0 x; i; f
  775.               if(!Dn.Connected())
    ; O4 s, T3 {# Q
  776.               {! T2 [' J3 [5 G- h) m* @
  777.                 bFirstUpdate=TRUE;! E5 e; T/ a1 V
  778.                 dwTotalFiles=1;
    8 n4 R' M$ F8 c1 ]$ `
  779.                 dwDownLoaded=0;
    4 W2 C3 `9 o' c! u9 O
  780.                 bSilentStep=FALSE;
    ' a4 {+ }2 D/ T' x4 Y& p) B# Y# @
  781.                 bCompressed=TRUE;
    6 ^1 ]3 v, I% {
  782.                 strExtLocal=".\\DownLoad\";9 r/ [! t8 P, G- p7 u
  783.                 strFullName="update.txt";( _9 l1 ?5 _) B$ q
  784.                 dwProgramState=AP_CONNECT;
    / K! k6 C2 O! _5 C& k0 G/ X
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! x% V2 I7 ~# ^  `
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 f1 E: m8 u5 W, Q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");4 w  T% p4 L( Z' C6 \

  788. & x, s" i7 e. e" d- A4 e
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 D% \* m0 o- }& n$ v
  790.                 unlink(".\\DownLoad\\checkversion.txt");& W& `+ p1 X9 P5 O- Q- G
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' z: J8 I! y  q/ k" \
  792.                 {) E* ]  H8 M2 M/ |7 A
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");( s8 q7 W) I$ t; k
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    4 \9 x3 @1 ?' D2 Z" K
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");( u7 c5 n- `8 i7 v
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      g/ I( v0 L; O8 C+ H
  797. . Q6 l* W3 `8 T9 |
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % q" G4 ~8 ~  ?4 q/ w
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ e! \. {# W: {
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    . a* a9 t1 B: d6 Z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! o0 r3 K+ V3 Y6 ^+ s1 N3 r& k) |
  802.                 }
    9 ]" E- L5 P+ Z. q$ Z0 _9 l' M# X
  803.                 dwStartUpSteps=5;
    9 _; S6 t. q  H$ y  Q9 ~
  804.               }: I/ ~2 {; }! c
  805.             }
    5 O. y9 I5 F' F1 g% B- N% m+ |+ @
  806.             else
    ; I! X. @0 @3 v) d! z, W
  807.             {
    * l+ v9 g' t/ b$ e; e4 H
  808.               unlink(".\\DownLoad\\checkversion.txt");! E9 t" i! I& {: G
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");0 F5 I; X" ]' q% ]0 \9 H" K
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' \5 `1 _3 N5 G6 s
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    7 O7 g/ q* u& z, o# }9 K
  812. $ E+ ^- b) P. c
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 M% q6 Q8 Z1 }4 R
  814.               dwStartUpSteps=99;$ Y$ p  w# ~3 {; A- W
  815.               bFinishUpdated=TRUE;9 ?4 E/ I! I# N- B" r. W$ C
  816.               bCanUpdate=TRUE;
    3 o& `* q) @7 ~. \" T! Q
  817.             }
    9 S5 C0 q9 i5 D
  818.           }) o" C: a" q) m
  819.           else, J' d1 Q/ K: w' s+ ^  N
  820.           {2 u2 O( d8 ~5 {
  821.             if(!Dn.Connected())) {! P6 Y: z, s
  822.             {5 W* B4 V9 |4 n( e! V5 ], w. O
  823.               bFirstUpdate=TRUE;
    7 a; P) |) ]$ O) W
  824.               dwTotalFiles=1;
    & `7 B% `% X( S( c6 [8 U7 S
  825.               dwDownLoaded=0;
    + Q& O- A- e9 n9 N2 C6 A8 Q
  826.               bSilentStep=FALSE;5 J3 F+ y$ w! X# @0 A
  827.               bCompressed=TRUE;6 b+ s, c) e$ [9 }$ d: j# i. ~* P
  828.               strExtLocal=".\\DownLoad\";
    - t4 `& H' Y% |# n0 N
  829.               strFullName="update.txt";
    9 t: Z& v3 C7 Z8 z# P- H
  830.               dwProgramState=AP_CONNECT;" C7 x$ o6 W4 ]. J4 D' o. j* y
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ F& k) s) g# h! K) l$ w2 s7 W$ }, w
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    * ^, S% W3 P- Z6 b: c
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");/ V5 Y" Z8 w. S: h' `6 A
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) ~7 b9 u7 I6 }7 C
  835.               unlink(".\\DownLoad\\checkversion.txt");7 l0 E. R! j) @8 V* e, k3 Q
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . I3 J7 o9 k. P$ _2 g
  837.               {' F8 J$ q3 {  }3 m. I* ^; ?) k1 c
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    + R1 l+ H  Z! Y) ~$ v
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");& E9 X0 M& e7 X' [! K
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    7 K2 c& F1 s1 V) e6 \
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 |# ]' F. X- D+ S! v$ _6 D$ T$ I; a
  842.                
    + @* a7 h" J3 d: c
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . S7 E0 h% \8 \7 T
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 [# q+ U/ s+ K  c$ L. w. t( Y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    . ]' W- P9 A0 }/ P4 n% s* D3 `
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 V# s  }1 A, V; h. i8 s$ C
  847.               }% ~' v4 t$ N: o$ o; _% b
  848.               dwStartUpSteps=5;
    * g" a+ u/ z# Q
  849.             }
    3 v1 \" g. D$ q: u9 E# B* e" T  k6 x
  850.           }* s( I5 X$ d6 L* A* v
  851.         }
    . q8 }3 _" O8 J5 H" j
  852.         else
    7 u& T" d$ L4 k
  853.         {: {+ S$ ?* u- X! a
  854.           dwStartUpSteps=3;8 u, ~0 S7 x6 q  W9 i( Z
  855.         }8 C, {; o+ h- C9 x+ v: D( [+ v
  856.       }* n4 [% q8 a, S% D) T! K
  857.       break;- B7 J8 Q: H& k- M* o# o0 W/ E8 F
  858.     case 5:+ l; C/ Z+ p" d" G2 V" R1 Y& F+ O
  859.       {
    $ n9 j' p4 Y6 `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): m2 h3 h6 ?+ [& {  S) U3 G! i. x
  861.         {
    ' w& D/ x2 S" _9 h% \
  862.           int opt_overwrite=1;- U  `: K* E8 |- ?
  863.           int opt_do_extract_withoutpath=0;
    2 m2 {3 c& G7 i. J1 s+ ~
  864.           unzFile uf=NULL;4 e+ w) \/ Y6 L

  865. 2 W4 v; v9 K3 F4 l+ }  W
  866.           uf=unzOpen("Wsa.zip");
    % S7 g) t3 }& k
  867.           if(uf)
    " g2 y; @7 ]4 v/ `7 [7 v
  868.           {
    ! i9 b3 ~# r7 H. ~% i4 h
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    4 k5 p. T' U' M7 H; b# d& ^
  870.             unzClose(uf);+ s" p) d) _4 A8 |( e- K8 f
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ! c; U, u( {* ~
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");1 C0 ]( f$ `# w. |6 K( z3 T- ]
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");% e# Z, E& q7 c' R/ Z* N; C
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - X; T; @% L* e
  875.           }
    % U, y9 K: J$ I4 p7 H) f2 J+ Z
  876.           DeleteFile("Wsa.zip" );
    , i7 C! Z6 v6 a
  877.         }, O0 g$ i1 C: e, `& ]5 v; b

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

$ ?& Q5 H% c/ I6 }9 ^9 t; ?9 ~- z' d
+ m0 d7 ^( j- m9 b0 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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