找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
/ I/ Y' B6 q( n  @, W7 _
  1. / RevApp.cpp : Defines the class behaviors for the application.$ \7 n" j9 d3 E- r9 o$ B4 A+ C
  2. //0 [5 O$ U. \* P; z2 h7 @
  3. ) i, T+ r5 h7 P% T( k
  4. #include "stdafx.h"
    + Y5 S& v5 i; d: `3 \5 \/ o
  5. % b) K2 |. P! `! ~
  6. //#define UNICODE% x+ k  B- |* b  d* Z
  7. //#include <gdiplus.h>
    # i& T' J7 a# _' E
  8. //using namespace Gdiplus;- M( o* ?' y% w5 I3 a
  9. $ p/ n- R7 t& E$ H' p' ^) W
  10. #include "RevApp.h"
    / H  O! X* o! b, e! u
  11. #include "RevAppDlg.h"& v: `( x: U/ i  ^  y

  12. : [$ H* T; L, @5 B
  13. #pragma warning(disable:4786)$ y) K9 p+ C# |
  14. #include <map>  H4 D5 E3 E2 S; X7 K6 V, K5 h
  15. #include <list>8 M+ Z. F8 t1 ]6 W
  16. #include <direct.h>1 t2 i8 L* ~/ g' K7 t
  17. ' H* `. u/ X  G3 b& N7 T+ [* d
  18. #ifdef _DEBUG
    3 x& O: M' e; v1 n' ^
  19. #define new DEBUG_NEW
    7 V. b3 s+ Z5 h7 d4 _4 y+ D2 b
  20. #undef THIS_FILE
    1 K! z( ?& f0 ~) L  q4 R* `3 r
  21. static char THIS_FILE[] = __FILE__;
    2 ]( T) i: B4 E. {7 F, a
  22. #endif
    5 A$ P$ v2 g: K& A1 `, m1 ]$ X
  23. #include "SkinResDef.h"
    , h# m$ y$ l" g4 A7 x
  24. #include "ChangeBG.h"
    / \4 a! W4 n8 u
  25. #include "AFXINET.H"
    ; X7 A' s" a& B- ~  Q

  26. ( n9 r0 W4 h. n
  27. #define TRADITIONAL_CHINESE 0
    " r0 W* Q  d4 r3 _0 r, e
  28. #define SIMPLIFY_CHINESE 1) Y: k8 c  F) d# j
  29. #define ENGLISH 2
    : ~# R/ o9 Y' E/ [! H
  30. int m_iLanguage = ENGLISH;
    2 r( ^& Z$ K4 s6 U# n: Z3 k' i: \
  31. /////////////////////////////////////////////////////////////////////////////% S+ h3 R! l9 D2 U2 U
  32. // CRevAppApp
    & p- a5 d* R1 t# j) l

  33. ' }9 j- e! [1 p6 V
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)9 V9 i4 J5 W5 q2 {( c" b) |( O& |
  35.         //{{AFX_MSG_MAP(CRevAppApp)) A3 }+ g9 _# L7 `  S* h$ y, _
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    / q3 k3 v8 s- ^3 f
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!5 S; _3 t# h" U) |4 ~) T
  38.         //}}AFX_MSG+ y* e, X( V* u: R' T5 @
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . A( V: t9 Y( O! |. Q
  40. END_MESSAGE_MAP()
    0 |& ^. f5 I9 H5 p" A5 h2 @6 n% h
  41. , Q( Q+ {* `5 w4 ~
  42. /////////////////////////////////////////////////////////////////////////////
    ) P& T3 [$ p9 b# e( e' ]- ~% w
  43. // CRevAppApp construction
    - l7 U8 k  p7 \$ x5 j  A
  44. & C4 ?; o$ q/ L& ]' h' K% s" i
  45. CRevAppApp::CRevAppApp()
    ; l( ^% c+ h& V1 w+ ~
  46. {/ I; q8 N; v( j+ R/ y' z
  47.         // TODO: add construction code here,
    6 w9 x; H6 A; C; W
  48.         // Place all significant initialization in InitInstance5 X- ~: }% e4 T8 J6 x4 f
  49.   bDisplayIsBig5=FALSE;0 |% r  b2 d& j0 \& D* e
  50.   bRestartUpdater=FALSE;, m$ J2 _! W' g
  51.   bFinishUpdated=FALSE;
    # ~# H, v3 o8 U8 P0 I' C/ f
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    " ^! R1 p: G* r" I
  53.   InitChangeDataBig52GBKS();3 |. j! M9 G/ r* c/ e- j" G
  54.   InitChangeDataGBKS2Big5();1 V7 d0 i8 V) b- {7 W' G/ C5 v
  55.         //# s; r* k* @2 d
  56.         bClickRunExe = FALSE;
    ' E8 k* H' r+ X0 [
  57.         //7 ]# k/ H( H' G6 i/ m
  58. }) l, X5 M4 o& ^9 y, T4 e8 O

  59. $ i* E& z% T/ {2 I8 d: |
  60. CRevAppApp::~CRevAppApp()
    ' W: b: W% E2 [+ D
  61. {* ^( }$ d  c% W0 N
  62.         // TODO: add construction code here,' q! g9 C$ M, i  g" C" Z' ?) }
  63.         // Place all significant initialization in InitInstance
    * t9 Q6 t& A4 h- ?: p; p: E' |
  64.   EndChangeData();  {, P% _$ K. H: E6 O  h5 O
  65. }2 t9 \. L$ ~4 j5 Z' Y" G

  66. ! U0 i5 G9 P* b7 e+ v* A) a4 e5 y3 c
  67. /////////////////////////////////////////////////////////////////////////////
    8 I5 `  }8 @( S. g$ q' h+ ]
  68. // The one and only CRevAppApp object
    % g( [2 j6 J$ J4 ?3 N& K
  69. ( l& G. L( W/ n) Q$ {+ K+ T
  70. CRevAppApp theApp;
    " L) R3 A9 z2 \9 A9 Y  `0 g3 |
  71. # R+ F7 s6 V1 A# O
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)4 X4 ~9 d% J! ^
  73. {
    1 O: x# H- J( ~
  74.   int iEOF=0;
    1 ?; @0 y: ~" f* I4 ^9 j; {, ^! r
  75.   char szTempName[MAX_PATH];; `* g1 A& x$ V4 A* J
  76.   *szFileName=0;6 I4 P/ {& q9 F  w' p5 u4 O; |
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 R. T# r/ x& G; }
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('). L0 g) Z1 j0 G5 @+ |
  79.   {
      U( t7 I/ b% f. X3 A
  80.     strcpy(szFileName,&szTempName[1]);, o: ~. l) ?) V# Y; v9 k: X4 q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ) @$ Y6 v9 ?; }3 y) i$ M
  82.     {
    ' I6 ?( c1 [% W2 d3 m) Z7 w
  83.       iEOF=fscanf(fp,"%s",szTempName);. x" [2 j5 H. H; f2 a
  84.       strcat(szFileName," ");
    ! v& `  r  Y  H6 S* R+ N2 c" P. V5 M
  85.       strcat(szFileName,szTempName);3 ~/ i( ^  A  T* y6 V0 @
  86.     }% ~5 `7 }5 o! B4 i- D* @
  87.     if(strlen(szFileName)>=1)
    # ]( C: E" J/ y0 |9 S4 G' X
  88.     {
    . x7 {# @  v9 B1 A- L
  89.       szFileName[strlen(szFileName)-1]=0;. u0 ~" [0 x( d% O: ]4 ~: @# d( Y
  90.     }" K. E/ f* @$ n4 s- r
  91.   }
    8 Z" H) W) q# x& q
  92.   return szFileName;0 _% J6 B5 H' p# p9 g& ~+ T
  93. }
    % E7 i! V. k6 \

  94. 1 S6 s) z- U; b& E. L
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    1 w, l3 s  n, C' k0 z% Z! m2 ]: f
  96. {5 `$ F  g2 c# {; Y
  97.   FILE *fp;! [5 {1 {/ x  x+ `# p) p& C
  98.   char *key=NULL;6 H7 m. \2 x; {* g9 L- B- |2 k
  99.   char version[MAX_PATH];
    # ]: |3 i7 }, ^, g
  100.   LPUPDATEFILE file,olds;1 [: \" o7 V% D: c  X2 \" f6 m) r
  101.   std::map<CString,LPUPDATEFILE>::iterator p;  X! h, ~& ?! B% f3 K: Y2 z* c$ v
  102. " s4 B' w9 P' P5 j
  103.   UpdateList.clear();) b5 ~, i# s) z. v$ u
  104.   UpdateFile.clear();
    4 y' A& n- W) m4 l% t# s
  105.   if(GetFileAttributes(filename)==-1) return false;
    4 d0 o; U% P4 _4 S
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ; q* _1 S8 c8 E1 @
  107.   fscanf(fp,"%s",version);6 j' S. u; x& F0 \
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }$ x: R) h9 c  C. G8 c( D
  109.   while(fscanf(fp,"%s",version)!=EOF)
    & K+ C( v4 Y9 ?" _
  110.   {* r5 [/ F1 q0 g. O
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; d% j5 ?' Q9 `
  112.     fscanf(fp,"%s",file->path);
    9 y2 ?2 l4 B! i/ @* o
  113.     ReadFileNames(fp,file->file);/ l  C. N( M: x' [4 n* |/ m4 U
  114.     strcpy(file->full,".");
    # B, e: x3 g  [. s/ f
  115.     strcat(file->full,file->path);/ l. @: f' K  n# N5 l
  116.     strcat(file->full,file->file);
    # R$ _' N# J; f; A7 i' V2 p
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; O. ?! h' {$ q+ `: U
  118.     {
      V6 l, ?$ F# b& O, N
  119.       file->vers=(float)atof(version);" l+ n9 f  x& ^  E5 h
  120.       UpdateList.push_back(file->full);% L9 v; B9 m, x0 n5 y. s0 Z' V
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
      A- q4 M7 J' t, F) l! o$ u/ p3 ]6 B8 t/ r
  122.     }
    ! B& i: `- M% x1 ?) O# J
  123.     else
    ( f6 A' e2 R% M/ \$ q! ~6 T5 a
  124.     {# M/ {, i" m5 e' r7 q. k
  125.       olds=(*p).second;
    : U: H4 ?% |. @# I) \- x" ^  m
  126.       if(olds->vers<(float)atof(version))
    # v, `5 y; \) d: Y
  127.       {
    + Y- ^: t- D3 I1 j/ g/ H8 @/ U, {* F
  128.         olds->vers=(float)atof(version);( \: T# E5 ]1 n0 t% b4 c
  129.       }6 O+ d# S4 S* t6 C! Q
  130.       free(file);
    2 }0 @4 @# ]2 I% X6 n: f( @
  131.     }
    0 I9 y* h4 M( v
  132.   }
    $ ^, {, @" `0 i/ A4 a/ W' P- q
  133.   fclose(fp);
    7 J& P& f$ `- J; J
  134.   return true;+ }( T- i3 }& S) t
  135. }! J; E, U' y1 x% y6 x; S, z

  136.   k- b! i( w9 x% \& G8 \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    & e& i$ z  |" ~
  138. {' i3 X% H1 G. ]' ?0 x
  139.   TCHAR  szFull[MAX_PATH];, P, _' Z9 S: F$ D; ?# U7 }+ Q3 A
  140.   TCHAR *token,*inter;; N) ]- p/ A  h. u5 f, e* ]" I
  141.   *szPath=0;4 `) X1 }0 {' F2 b$ C4 q! b
  142.   strcpy(szFull,szFullPath);% Y6 r& q& b& A
  143.   token=strtok(szFull,"\\/");
    2 R0 w/ |3 ^# F9 i7 H3 v
  144.   inter=token;
    - e0 k) J: |. u( }# a! e; o
  145.   while(token=strtok(NULL,"\\/"))
    ; B- b# s" H* K6 ^9 w" D9 O
  146.   {0 Q" W: h5 E% U* I) j: K
  147.     strcat(szPath,inter);( G6 _! G# c4 j& b, f
  148.     strcat(szPath,"\");* m7 x4 Y% ]+ K
  149.     inter=token;7 b6 @# R$ ]+ U
  150.   }
    % C6 `- E2 g* `" r1 l8 e
  151.   return strlen(szPath);
    7 y5 h  S0 P4 X: \5 \' }
  152. }8 R& K9 u1 `9 v
  153. * V& T+ {5 Q. q2 T
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    . w9 M, R% W3 v
  155. {* m; h' Q; h( g+ p# Q  D
  156.   DWORD attrib=GetFileAttributes(Target);! p* P% a# H6 ~! ]
  157.   if(attrib!=-1)7 Y# G1 B7 D( A# m3 l# \
  158.   {
    / m, N4 ?& u# K9 l& K7 u
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    & Q: i( v7 W1 P' B# L
  160.     {
    * r. S5 E# e% G/ G9 Q4 n( g) s
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    1 ~  a. Q& |3 _% g7 d- X9 Q
  162.       SetFileAttributes(Target,attrib);( w6 L4 V6 i8 p3 x, s( u" o- A
  163.     }8 ?0 w, i; o- u: J% @) k  }
  164.   }
    7 d* q  h! z0 v
  165.   CopyFile(Source,Target,Erase);+ d0 c- a+ _- [- [' l- t" B
  166. }9 g* S, ^9 A( N* O/ |) c; G

  167. + I1 J/ C  {' ^3 \7 Z) j
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ X9 N2 l. q4 [9 Y7 o, c
  169. {; K* I7 S2 p6 ~% k' @- ^
  170.      FILE *fp;" ~7 T2 p7 C0 w+ o- e4 Z; q
  171.      char  szBuffer[8192];
    - ^% G1 E, O* h6 \) h) ~
  172.   va_list  argptr;" f7 A) G3 [! w# _/ W$ @
  173. ; V/ Z5 n5 N  l0 E5 s
  174.         va_start(argptr,message);
    6 j0 f& ~  M! s2 d' l; a* _
  175.         vsprintf(szBuffer,message,argptr);
    4 [& {3 B! ^9 R
  176.         va_end(argptr);, I6 l' G7 W3 K% A! h
  177.   fp=fopen(FileName,"a");, P' I: |. I/ ~6 I) `
  178.   if(fp)+ x1 ~# v( X. h' L1 g& J+ U
  179.   {1 z  U3 c  @1 t% G
  180.     fprintf(fp,szBuffer);
    / t# I0 l6 \6 E  g. @. f( N7 c
  181.     fclose(fp);3 o: X1 Q2 S( F% I
  182.           _flushall();  [& Z2 b1 _  P+ Z) }
  183.   }
    3 ~  \6 {5 T1 ~, L5 p5 L
  184. }+ X% ]+ Z+ q. n
  185. 9 x5 r' ]. i  u1 R
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    . j9 [. p, e$ ~6 `, K+ h% H6 V
  187. {$ b. X4 l6 j2 P- G+ |# s3 j% Q
  188.      FILE *fp;" Y8 a# U& @9 F4 z
  189.     DWORD  attrib;
    ( C; j6 ?7 C7 D7 g( d, C- S9 i
  190.   attrib=GetFileAttributes(FileName);; ]( s. g# x2 c/ }7 ]
  191.   if(attrib!=-1)  U0 h: Z* W6 |& |' _
  192.   {7 T( P7 S( j; d; b* x/ Y6 D
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);% [) W6 G$ K% i
  194.     if(!SetFileAttributes(FileName,attrib))
    4 J+ b# e9 Q5 M& e$ B; [! ~6 U1 w: [+ ?; w
  195.     {
    8 D- q" {5 ?: M! w  F; k% A
  196.       return FALSE;
    % s5 a/ z- [, P" G
  197.     }' X3 t# u2 a' y0 A
  198.   }- j+ H( E& }! G! N# T. b
  199.   fp=fopen(FileName,"wb");/ P; \! K; y( z) E
  200.   if(fp)  q5 X" N& w6 N" r( c6 j+ Q
  201.   {8 B2 Y+ r  E* }, w
  202.     fclose(fp);
    , \9 G) j. ?$ L
  203.   }
    , v% I0 I2 L; U! Y, y
  204.   return TRUE;
    4 b6 D# @( B1 j& N) P$ {
  205. }
    3 Y: C4 z  J+ p* u2 b
  206.   A+ }1 M4 W, C* L6 w# Q: q
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ; u+ `; ?6 Z+ Y9 q$ e7 i6 b
  208. {- P1 A% ~2 v$ c3 V1 R" P
  209.   char filename[MAX_PATH];
    : H* ^8 T! x* ^3 q, P, W
  210.   LPUPDATEFILE file,olds;
    ( O. u. @3 r0 N2 D4 n. h( `
  211.   std::map<int,CString>::iterator i;( H% ~) A2 K0 n. Y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 K% ]; ], v- _8 L5 v$ M* n0 j5 O
  213.   std::list<CString>::iterator l;3 H( C4 X6 r, T6 u: E( a

  214. , `! l$ y4 y: I/ j
  215.   if(bFirstUpdate)
    6 l5 z* |. a0 r2 b3 h% [- Q
  216.   {
    2 [' i- k- Z3 R3 E3 F
  217.     dwCurrFile=0;, J8 _# h! f2 {) y  |
  218.     bFirstUpdate=FALSE;9 P) \' `6 s- w* q- u3 i
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  ?- w# P# m& U
  220.     {  G4 b1 M, {# b/ V; ?( ~$ {
  221.       dwTotalFiles=UpdateLocal.size();6 v+ k- Z# F4 w( h& \0 U
  222.       dwDownLoaded=0;
    $ E$ J5 I  Y6 B. s: o# j8 E# Q
  223.       bSilentStep=FALSE;  `* I# H4 W, O6 ]
  224.       bCompressed=TRUE;* ~- f, D8 P$ Q; f  B5 E
  225.       strExtLocal.Empty();
    5 I! S/ C- u6 a2 P% W6 N
  226.       strFullName=(*i).second;: U( }- q. `5 G  R
  227.       dwProgramState=AP_CONNECT;2 o0 u- u8 j( B% d9 Q3 `
  228.       return TRUE;
    $ y) u4 s, ]- _/ }: L( H
  229.     }
    * j8 S  \" r7 E
  230.   }
    ) ~/ I4 R3 J8 E0 n
  231.   else if(bRestartUpdater==FALSE)
    % K0 e! ~# m; X! p/ \1 c
  232.   {
    : c, [3 V! N3 C* Y+ J1 L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ' d' I# ]# M  a% I
  234.     {
    6 s8 X7 w: }8 F3 J
  235.       file=(*p).second;
    , f/ W) q: Z& b4 K3 c' K9 j
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    0 Z, N% a; N( G, {
  237.       {" m* f) n( o% P5 h- w
  238.         olds=(*p).second;3 ^* S2 L; i, L  y5 A0 z+ a, d# K; `
  239.         olds->vers=file->vers;* L, }6 Z8 s$ N) P
  240.       }; G, O8 A1 k# o+ z9 A8 @% f
  241.       else
    ! u' l# W( B- N" B/ G' J7 F
  242.       {
    & h% i. Q; t! D. I& f6 I
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 U# Q/ m/ n" w# Y1 x7 B7 O% G( D. |
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ; ]# B9 x% Y7 ~8 w# N& K: C
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));. r) M$ O- g0 k: ~
  246.       }. k. ^$ m% P- j9 ~2 i
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- E# Q+ V% S: k& V# B# s
  248.       sprintf(filename,"(%s)",file->file);
    1 G: Q+ H4 D8 K* O8 x# Y  X
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 u; G2 E! |5 o" h" R( b; Z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }( g, a/ z" S% t% K# j  W( l* }1 l2 y
  251.     }
      i2 i; M2 j/ \2 {! A1 U4 [
  252.     dwCurrFile++;
    # x& e9 ]1 A: ?$ O; E
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 a5 R; c6 E& `0 s- K4 K
  254.     {! b- L9 I+ @+ Z2 Y  `
  255.       bSilentStep=FALSE;: ?2 v0 O) Q$ ~
  256.       bCompressed=TRUE;& x, ]5 u7 h! k0 Z
  257.       strExtLocal.Empty();6 p! ?. Z3 E/ J; Y  D8 Y5 d& d
  258.       strFullName=(*i).second;
    # r) \% v( S" e: o( y  n
  259.       dwProgramState=AP_CONNECT;
    4 [3 U" }7 W5 }: ]; G
  260.       return TRUE;1 E. m& K# P1 j. n" ~$ J+ A
  261.     }
    , g$ r$ Y! B. c% Q
  262.     if(!bRestartUpdater)8 p; M2 Y1 ]; t" @  @' p4 D* `* y9 B
  263.     {
    3 ~7 H# C- q/ d4 P/ T8 ]
  264.       int iCurrSize,iFileSize;
    % s' B, F- y/ q5 m+ O- U
  265.       iCurrSize=0;# u5 }' r2 U, S  Y5 c" ]. Q
  266.       iFileSize=UpdateList2.size();7 V% _( W" J5 H: }. f- ?/ w
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    1 T+ n+ n6 p1 I6 j( K+ k9 Y& n
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");) }( ^6 H5 D' E+ j" X$ i
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 m5 R9 A  w5 R/ M
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 w- r. i, C+ q/ U, d( N6 x
  271.       Fclearf(".\\update.dat");+ k' `& H( T2 t- h5 Y- A9 I
  272.       Fprintf(".\\update.dat","Bloodyf\n");1 a, }* Q5 H, `4 v
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)7 Q) L6 P' P+ A$ X
  274.       {/ B" o. p% \  l4 i# `6 E
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())' j1 f+ K5 H  T8 v6 o" Q# F& `
  276.         {: C. A- p; Y8 A/ e) f7 t9 c
  277.           file=(*p).second;8 o" ?, |- j: v- x9 J
  278.           sprintf(filename,"(%s)",file->file);
    % m  k3 t+ Z5 }5 a* y' I) a
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - e4 j9 c  `3 {, n) f0 q: T
  280.           iCurrSize++;
    & ^# d0 f6 O" x& P& z8 r
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    1 _. f! P5 R( f& `4 D" q
  282.         }3 o+ k5 x: h# e$ z7 S
  283.       }
    : X, b. t' k2 j
  284.       unlink(".\\update.txt");; {+ a! N% K5 x" _+ [# F( w
  285.       unlink(".\\update.tmp");2 q8 ]: q+ Q6 j
  286.       Fclearf(".\\checkversion.dat");6 T8 X/ W5 g; T, ]+ Y
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    - W' c5 x1 ]0 d
  288.       if(UpdateLocal.size()): D$ C8 h. s/ A. r' d5 y
  289.       {
    + ]; @9 j5 k8 B
  290.         UpdateLocal.clear();
    2 g' h3 o5 q  x& g
  291.       }  F' R1 ^  l% {' T- c3 P0 |
  292.       if(UpdateFile3.size())
    " d2 {3 ~4 }) L# _; `3 w5 l
  293.       {  ^; O8 J  J1 `6 y# I
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 i2 m1 P: n* Q! Y, `! `9 G
  295.         {2 `6 Q9 }. L- w4 [/ f5 K( P, F4 l! U
  296.           file=(*p).second;
    ; q$ D3 }( n. x
  297.           free(file);
    : {, J# P0 P0 ]  Y  c5 y) X/ d
  298.         }
    ; V5 v! w0 J7 r( R
  299.         UpdateFile3.clear();
    ; _  Y8 R) O0 m; f
  300.         UpdateList3.clear();
    9 m& P" N; {& L
  301.       }& T" d- |& D4 O2 G
  302.       if(UpdateFile2.size())
    7 h0 x1 }% m$ H5 G# D" W
  303.       {/ d( a, n( U+ ?% q$ K
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). U0 y4 b" C1 F+ u
  305.         {* t/ K+ D* d+ @
  306.           file=(*p).second;
    2 b% a9 Q  e1 i3 N+ T
  307.           free(file);7 U1 w5 h9 C. d- J
  308.         }
    9 n& O7 O$ O, f7 h
  309.         UpdateFile2.clear();
    : v, `1 |! X( [
  310.         UpdateList2.clear();
    % |; b' S0 r: J9 ~3 T% U
  311.       }
    1 N: C+ @1 p3 {# {# `1 g' U
  312.       if(UpdateFile1.size())
    0 t  G* M. ]8 d) Y  N/ y1 g" ]
  313.       {  w# s$ P" d' L& p! z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    3 b& w) u- R3 I( ]% `
  315.         {
    ( Z0 ^  `$ d3 `" v+ L
  316.           file=(*p).second;
    ' l/ O. y3 s" N3 }2 X6 @- j( }7 e
  317.           free(file);( E8 K' U  Q$ w
  318.         }: U1 r% g# i" \! y, \
  319.         UpdateFile1.clear();
    / F3 ]6 M7 N7 g( Y$ l# e# k# d
  320.         UpdateList1.clear();
    7 j/ d) @3 _' n4 L! a3 B; |
  321.       }: M0 i# h/ [- ]1 `
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; O% I$ X# S* A+ F
  323.     }3 M( _+ x+ i) Q6 L+ w( D) H
  324.   }2 v" J! n) Y  V
  325.   return FALSE;
    ) H. V! H$ J/ A3 Y/ x$ M0 m  M
  326. }
    8 \. l1 x7 P' M$ q4 p9 K
  327. 0 G8 X) ?0 `5 ^- p
  328. void CRevAppApp::ClearAll(void)
      a1 A0 V6 K9 v+ S' M& ~
  329. {' T2 l0 Z; s9 h# h
  330.   LPUPDATEFILE file;4 k4 E% j. a/ E4 R2 U. j9 i
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 w2 o5 y5 m8 X  V0 G
  332. ; {2 }9 I1 M* p9 R! m
  333.   if(UpdateLocal.size())4 r! W) Y! \2 ?" z
  334.   {
    8 K9 P" ]9 e) A* E
  335.     UpdateLocal.clear();$ [4 E) |7 h$ `5 t1 I* R
  336.   }
    4 B, G& m* \+ o3 ?. g
  337.   if(UpdateFile3.size())+ Y1 o* O2 g: g9 R! s9 L% Z9 D
  338.   {
    * Q" U( A! N0 S* ~+ |+ P
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) Q$ g1 f2 A: [3 W& h
  340.     {3 s# S" b4 l+ h3 s4 _4 }
  341.       file=(*p).second;9 S% g) l; ]( v  d- B0 }
  342.       free(file);3 B' C5 o0 l% q' A0 j5 Z
  343.     }
    4 d2 A6 {4 B$ x) k; r
  344.     UpdateFile3.clear();, K- l1 R) H  y; L
  345.     UpdateList3.clear();
    % @! S& k8 O" E( x; P( O) t
  346.   }* Z( I/ _2 Q) G3 D  t5 a- k3 u
  347.   if(UpdateFile2.size())
    " ]5 {1 L+ Z; Z, u: }! p
  348.   {
    . Q0 Z1 w; Y& Z* Z3 p/ N
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ B; V2 q  p6 b" D
  350.     {3 t% s1 ^6 B; E, @5 B$ @
  351.       file=(*p).second;( ^% I) s( h1 T8 X
  352.       free(file);- Y8 x# }6 _' C3 l
  353.     }
    . T# R  G' N9 o3 P, f
  354.     UpdateFile2.clear();
    ; e$ a& i% o8 ]8 j* |0 q
  355.     UpdateList2.clear();( ]2 u# ?7 B8 R+ f8 p7 _( Y
  356.   }
    , N1 l% @9 k* J8 u
  357.   if(UpdateFile1.size())) L4 s/ U- b% N& R4 B) e0 l2 a  k
  358.   {
    0 z. P2 l5 b0 `: [8 D5 B; h
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & z# U  t2 @1 {
  360.     {7 G6 j1 O# I( k* H
  361.       file=(*p).second;7 _6 r* {1 W% O3 t; b9 @: ]
  362.       free(file);9 N$ v1 Z; L% T
  363.     }. V" _+ Z/ j0 P5 N; y& g
  364.     UpdateFile1.clear();+ F# x2 U' G! U2 J! ^
  365.     UpdateList1.clear();
    + I2 y9 d# z3 W
  366.   }  i6 D5 _$ P1 j
  367. }  8 [; K3 ]8 d; `( i
  368.   2 T1 g" @  [% {; I  l9 b0 P+ v) I
  369. BOOL CRevAppApp::CheckLocalVersion(void)' {, c7 u. e0 J5 P0 |
  370. {( E; G) \2 ?; H2 u
  371.   int c;
    4 u/ o* d1 M) H% }" m% x( o
  372.   LPUPDATEFILE file1,file2;
    0 m& o, J7 Q! y' m7 \% n3 |; S
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    8 L/ C$ v$ K: g6 i% y
  374.   std::list<CString>::iterator l;9 k7 c0 X8 {, O! A! F

  375. ) O2 Z& x: R4 i- ^0 u4 z  g- l
  376.   UpdateLocal.clear();; b  P* H& n7 t; _4 |, N
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    8 n5 h# v$ p# R7 t/ W: ]$ B: d
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);9 M/ t3 v; ]% d, p
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    . x3 ]! S: x8 C1 f5 x( D
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);: c. E' G" Q/ ]; G
  381.   if(UpdateFile3.size())
      u: F) B/ q! n. @4 m
  382.   {7 @& J4 g5 M$ h! }4 \  `, {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)5 u* ^& b& s' e( X0 U) S  O' K7 J
  384.     {* H! J  Z: }6 J) {% g3 H  i
  385.       file2=(LPUPDATEFILE)(*i).second;8 l$ B6 k$ }0 P$ k2 [
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) s. ^# s$ D. ?  l4 w# \
  387.       {0 a4 f' y9 A2 N6 \4 i) F7 W  P+ o
  388.         file1=(LPUPDATEFILE)(*p).second;
    2 `' s7 b- y2 P' t6 w& l
  389.         file1->vers=file2->vers;- w1 ~6 G# s* V; D6 O
  390.       }
    ; G9 b) G& Y/ r) `7 ~1 u; ?- j
  391.       else, E" \0 K& w4 m
  392.       {# B: [/ C1 \$ r& ?/ R
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 u0 e" O0 q) g5 d# G  ?
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' T$ e) h: b. Z* R. S  B5 b
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& N5 d# C6 ^( k% ~* b0 P( q
  396.       }
    ) O* ?  B- V) z
  397.     }7 D/ Q8 e/ z7 I% i8 s4 Y
  398.   }
    ( Q9 G1 D. X7 A; A! I8 }  [, l
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 g. J7 k. ]9 Y. V
  400.   {& w; W' t$ k1 ]6 B6 N4 Y( F/ M* B+ E- ~
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    7 |) Y5 d- P' g
  402.     {
    0 S: C1 h0 V) x( ^) T
  403.       file2=(LPUPDATEFILE)(*i).second;6 B. N/ }, l/ q. t4 m! O
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# u* ?, W  A" R+ V4 s
  405.       {
    ! d, ]9 X' V: U( M; z9 Y+ N) k& @
  406.         file1=(LPUPDATEFILE)(*p).second;
    4 y5 N9 h1 n& o
  407.         if(file1->vers!=file2->vers)8 |  O  ~: S9 Y) D( v0 [) x
  408.         {/ S, s" Y- D! F
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( e/ U+ b: ~- g) `4 N
  410.           c++;
    & p' r, ~- l. r- |1 w
  411.         }& |' H, \2 c/ u8 I/ r9 f1 t
  412.       }2 g) \( S0 x! f. g
  413.       else9 m9 G. ]5 s- C7 O8 F' ^9 |* H7 W
  414.       {
    ! C5 _3 o0 Q0 I
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! ~* k0 k; x8 J
  416.         c++;3 f# Z- ~" V6 ~& h. O2 H
  417.       }& x9 V% a# E7 {- T1 `( H: ^
  418.     }2 w$ F+ g) X6 _8 d
  419.   }
    / S* m9 Y% L7 T1 }5 X( N# X% ]
  420.   unlink(".\\DownLoad\\update.txt");6 T( d6 G2 n) G% ]
  421.   if(UpdateLocal.size()) return TRUE;
    3 x3 _1 T# K+ s& P' M* Y, v
  422.   else                   return FALSE;" M3 g5 A* p$ Z. d' ^( ?
  423. }
    $ p. L; q  L# i  c
  424. $ _" `# u3 \: v( k8 Z/ e6 |7 @
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"6 I. e$ m/ T" x; K9 y) N# o
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ) T1 E+ s: y6 \1 [, [) l2 E1 p$ u

  427. 5 F! `) ]1 V$ l$ S) h7 ?& ]( e' Q
  428. # C9 m" T6 p9 i1 N
  429. , _1 q9 o3 R& F  N6 ~6 \
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( `# r, g2 e( p4 C: W) U9 N
  431. {9 }" k0 v" U1 a& ?
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    9 s+ k( `6 x8 ?
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! o  q1 h5 K, G0 A0 B' y9 m9 g2 K2 H: T
  434.   {
    5 Y, p5 ^2 C- e2 s* ^& c% N
  435.     char szLanguage[50];+ y6 F: V2 N% G* C5 W. x
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! i7 Q& X) \) C8 A
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ w* [, }# E, V7 y0 G: e
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) {' C! k3 |% j
  439.     else                                   m_iLanguage=ENGLISH;
    # m' W& @3 Z# E
  440.     char szRegister[100];- [" I& _( U; G( v7 m' P
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; F6 A/ m' M+ x! R% r
  442.     strRegsName=szRegister;/ E2 a( e$ A! p% B
  443.     char szPatchURL[100];- {, _0 m( H0 V: Y. h& B4 l( n
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + c5 V4 [6 n0 s- Y% p8 `8 }4 o
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! _5 r1 q: K( ~* H2 [; u( d6 g
  446.   }
    5 j1 s. F% S( z( ^1 C" w' S* T
  447.   else6 ?* A8 v0 ~7 v
  448.   {
    1 r( `1 k- }  n6 J8 P
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : t" o7 B+ D# {  m
  450.     strRegsName=DEFAULT_REG_URL;# |7 u6 ^- r, b" v) r1 T$ U5 x
  451.   }$ s8 s. H8 A9 n5 f
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ; u% @" O( l/ T8 R/ M" v
  453.   {. ]4 T: Q3 `9 u# a
  454.     char szIP[50];
    : e; |5 y6 D3 K$ O+ _: {
  455.     char szDIR[300];4 t, V0 T/ t, S$ c
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    * ~6 k3 Y# _* r! h
  457.     {
    ) W- F2 ?0 P9 U9 o/ S# a  k
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");7 e: T, {' z: W4 p% [6 b; b
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 d7 K& ?6 u( d+ g' p: r4 V
  460.       strHostName=szIP;
    , x7 |7 Z& f* D6 Z/ n) d! e' r
  461.       strHostPath.Format("/%s",szDIR);
    , e3 E# y1 m# i0 ?8 {& }5 d. G3 k
  462.     }
    & \) H) r1 `, Q  }, a0 j* c
  463.     else
    ! [7 x% y. w/ [4 i0 M5 O+ T: \) Z
  464.     {) H0 a7 g0 W  Y( ?4 Z+ b0 t
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# N1 q5 `1 B" n) ]
  466.       {3 X1 O- k( Y( S  e  q% H/ X
  467.         char szLanguage[50];
      n( A( C6 t$ ?* Q) s, `( \
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 V4 {3 j7 \' V( H$ [$ c# S5 J# {
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;5 p6 k& u  v" F: h
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; s2 r5 N* f4 x& K1 f
  471.         else                                   m_iLanguage=ENGLISH;- U' g5 p0 H3 s2 V3 D6 {
  472.         char szRegister[100];
    ! ~6 A+ a4 F% L( P( @. m  |
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% ^2 p6 e- i3 C$ B
  474.         strRegsName=szRegister;
    # L! s+ f$ T7 [7 g7 s& Z, l. d$ ]
  475.         char szPatchURL[100];. i2 v2 \% g1 B- s* s5 q
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - V. T: _* j, W5 T) I" {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 Y2 \' O' a3 c; S7 u; P! `
  478.       }# ?- q) i8 X/ P2 O% w1 |  b
  479.       else1 B" Q- M; s1 x+ z7 M6 p& l5 G
  480.       {$ Q( a& Q, c4 P+ X/ F
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 K$ s5 T0 M0 x6 k  _. V; k) Q
  482.         strRegsName=DEFAULT_REG_URL;
    5 \1 V5 J$ C, u
  483.       }
    3 B2 k* T% d3 B- n: V$ s( X. S* X
  484.     }
    0 b) K; _) V3 }- H6 J" A2 \* h; r
  485.   }
    7 X9 }3 T+ [- h
  486.   return true;/ y9 l2 ]6 y7 p9 {- ?, N
  487. }
    - E- o. K  I& ~6 J6 O' n5 d4 R

  488. ( T& q7 y& P  M. z9 t4 A  U" v( u
  489. #include ".\ZLib\unzip.h"
    5 y+ m+ e: }' p
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    , c) m% {, K7 F( i6 V
  491. /////////////////////////////////////////////////////////////////////////////
    / R: n2 q/ J8 v6 b2 E; M
  492. // CRevAppApp initialization6 e: ^' Y$ E, V! F: q

  493. 8 B# ]4 y. K$ n% J; B
  494. BOOL CRevAppApp::InitInstance()
    6 ^5 g$ S; S$ V, D2 K
  495. {" Z0 m$ ~1 T9 M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    # d7 `) a4 \+ [3 o1 M% ~! f

  497. 5 U; V- u/ O2 N9 U0 ^
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);# B" D3 t) h5 W. a) E
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))3 R; v; H, T# c+ T' I
  500.   {" I+ B/ Z) n% K! o6 y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    - g- T4 ~) t( n) a
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ( W3 e* N$ ?; k
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    0 q- }  t) m% {1 z6 S
  504.     {
    $ }7 S4 B2 W' ?
  505.       strcpy(szPath,szPathTarget);
    + J) N7 f3 K1 |
  506.       SetCurrentDirectory(szPath);% V( U  x* @$ q1 @7 C
  507.     }+ G% r: z  f* G
  508.   }
    5 s+ l3 Q! y) j# M. R
  509. #ifdef _DEBUG
    1 X; w1 D3 e: t; m) @# N) {# c$ Q
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& p8 e+ M5 k$ h& [
  511. #else: S: o% a9 I. s
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 t/ r3 @) n" }. k$ R) G
  513. #endif
    0 p1 n% n" ^% l0 f- u
  514.   {  `/ h! `8 l  e, ^
  515.     char tempFileName[MAX_PATH];$ P2 }! E% S( m
  516.     strcpy(tempFileName,szPathSource);$ i& U  p/ Y% R& z1 i" V% c( K1 Z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    6 R' N: c3 V+ H. b) [
  518.     strcat(tempFileName,"\\$CSUpdate.exe");4 o0 d* M! V& b: n0 [7 J* L
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);& l1 m: ?+ G6 Y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    , V) n+ A  I+ \8 R6 I' h( F- m
  521.     return TRUE;+ t0 `. R4 N' A; h6 P/ L
  522.   }
    ( s. R4 S: {4 \, A! y; _  \' q& w
  523.   // Nuke 0118: Delete run.exe8 r. C2 h" G3 y+ z+ g" i1 S
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    / s1 M2 r; B" Y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    " t' I- _1 d5 t
  526.   if(!ReadCfgFile("Config.ini"))
    3 |5 |+ }9 _' R; o, L
  527.   {6 T# M- C7 T+ ]9 m3 t) r# ?, A
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);( l8 a/ A1 \- k  S! ?! u
  529.     return TRUE;; E' \/ A7 g9 S- J& a+ M' [
  530.   }. }5 h* L0 W+ g
  531.   HANDLE mutex;2 Z9 R2 e( l5 e: a7 ^6 J* E
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ( {% ]: W6 H- l: h- D5 s( [9 _, `
  533.   {+ [( h" p- ?) D
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)4 i( H, H5 ]; q  i: ]
  535.     {
    / Y" A6 O! f; h( ?# B
  536.       CloseHandle(mutex);4 q8 }+ Q" h, ]( c
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! W+ F; l/ q3 t( C5 l9 R
  538.       return TRUE;
    * ], H8 S  x. w; n' A+ b9 x
  539.     }
    , a) G' e' c7 A4 J/ a  ^& b
  540.   }  6 a' y( p- E* h2 y$ o4 ]( M2 R9 A
  541.   CloseHandle(mutex);
    8 @& B. {- h" G0 w; d+ v3 g
  542. " j! \* [& E- a# F3 F- F
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);- t) X1 H6 e' K
  544. 2 M' }2 y+ b- n) c+ V
  545.         AfxEnableControlContainer();
    - t& h  ~4 F, Q- ]  U" q
  546. ' j: B5 X7 ?5 x& z
  547.   bCanUpdate=FALSE;
    % E% _' }2 b- S- g" j: l5 L- x
  548.   dwStartUpSteps=1;
    ; R6 |  P5 s& i6 L. P/ T' {0 z
  549.   dwProgramState=AP_NOTHING;& V! a  W+ v/ j* z, E! X
  550. 4 B3 y' a% r( d' D: E: [
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);+ e, d- K7 d2 M$ f

  552. - q4 D% y1 B, z4 j3 n3 E# L8 k
  553.         // Standard initialization
    ( _+ k( S$ i: s# A4 G9 C5 [- `5 y, O
  554.         // If you are not using these features and wish to reduce the size: N# @9 N$ V/ D* y1 d  }2 g" _6 W
  555.         //  of your final executable, you should remove from the following/ s# K6 a& {& a5 V6 l, K  i
  556.         //  the specific initialization routines you do not need.0 N: H! c0 [! B$ I+ q  H
  557. ) Y  p# J$ _2 G0 g3 O/ K5 d
  558. #ifdef _AFXDLL
    " {) a: G2 z! O: P
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 h5 C' s% d& L9 j; J, Q
  560. #else: N+ X+ w* x2 |7 M  U
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ) M% f& V: V, u) Y  r
  562. #endif, Y8 y+ ]9 N1 X* A7 T& s
  563. 7 y% V9 P0 z. T" u" N
  564.   dlg=new CRevAppDlg;7 D% j$ i! p7 }* w
  565.   dlg->Create(IDD_REVAPP_DIALOG);+ O: a( U3 e% L! b+ L8 r
  566.   dlg->ShowWindow(SW_SHOWNORMAL);. a' G1 h  L. I* e4 f% H' O
  567.   m_pMainWnd=dlg;# V6 M) C6 M; A2 y6 c+ V
  568. $ I, w8 N* @8 G, n, d0 a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);; \7 S1 y. I0 O: p

  570. $ F7 X" b- \! y! o/ {$ p7 B; x
  571. //  GdiplusStartupInput gdiplusStartupInput;
    - V+ F5 B( N# s. I2 j9 j$ u
  572. //  ULONG_PTR gdiplusToken;
    : m; L' i  w7 M
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);: H% Y: J9 B: E$ q' K  x/ `' Y

  574. . a' r1 B6 i1 @! s2 l- l, [. {
  575. //        CRevAppDlg dlg;
    $ M& o. y- U. r" G% z' [  ~
  576. //        int nResponse = dlg.DoModal();& h# f% ^8 ?" m7 [1 v7 s
  577. //        if (nResponse == IDOK)6 K. H0 z7 g5 v6 y& U. s# m( X. v/ c
  578. //        {& _0 u- ^( z5 X$ L
  579. //                // TODO: Place code here to handle when the dialog is
    1 {' G) ?) V% q/ B
  580. //                //  dismissed with OK
    * {; u' v# {, y; r" H4 R
  581. //        }7 b9 W6 C: l$ ~* l7 H3 r
  582. //        else if (nResponse == IDCANCEL)8 T& _" d! d% a: g& [, f
  583. //        {
    4 N. r( T* }/ x5 ]1 I$ }2 W# F( s0 n: f
  584. //                // TODO: Place code here to handle when the dialog is
    4 `! i$ C6 o  A* a9 F( o: p* p$ H, V
  585. //                //  dismissed with Cancel$ f) V& Q9 x/ g) t
  586. //        }! ?0 u: b1 w3 r

  587. : Y8 N- N4 U" S" r* t  e
  588.         // Since the dialog has been closed, return FALSE so that we exit the, {8 N; Z8 j' K8 A/ j1 g1 P
  589.         //  application, rather than start the application's message pump.
    5 T! S% Y& W( @6 l0 R$ K% `/ J1 {
  590.         return TRUE;
    6 e: j) u8 K% r* k( n, k7 Q
  591. }
    6 {7 L: w9 G8 K6 H% ]5 @1 m6 z

  592. 3 i' q0 d7 }8 D/ T+ n. c
  593. char *CRevAppApp::strtok3(char *pSource,char *token), ^0 \7 X1 m+ d( Z3 S
  594. {
    ; k# z# w" q- X2 [& t% l2 T
  595.   int i;/ v0 L! u% j0 f# m& l6 B" C: L) U
  596.   char *szRet;4 Z; W' x7 Y5 ], t
  597. 5 A" Y/ m+ k2 I  d4 z, y# D
  598.   if(pSource) { itoken=0; sztoken=pSource; }5 r* ^6 H$ r! s, ^( E. U: O
  599.   if(sztoken)* K; V; f; _7 R, Q. b+ T3 Y. O
  600.   {
    ) r) \' w" @2 @- a8 z1 y  E, i
  601.     szRet=&sztoken[itoken];
    ) b" i( s8 y' x9 K- U" }
  602.     while(sztoken[itoken])/ p  W0 y( d( l% s0 Q  D
  603.     {5 v9 P5 w+ E0 B0 u
  604.       for(i=0;i<(int)strlen(token);i++)/ L$ H) a+ @+ i" l+ R
  605.       {
    / l/ ^9 h+ j! m/ l9 `% p
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])7 _! `: }0 F- b: }$ G% l# Q* @1 g
  607.         {' ]! W! _; q) I5 `
  608.           sztoken[itoken++]=0;
    # Q+ r6 c# h% S- J' N" V
  609.           sztoken[itoken++]=0;8 o9 R, Z7 V! b: Q( D$ D
  610.           return szRet;
    ! ?! U6 M- H* m' J5 \
  611.         }
    9 m# O3 K! w& c7 _* z3 Z
  612.       }' a! j8 z* |* ?" J2 A
  613.       itoken++;
    : V, V% k5 J3 m/ y
  614.     }
    : M% B. i) Z2 Y' G
  615.   }3 o: ~5 ]1 K2 s  ?
  616.   return NULL;: k& G; c' D4 o$ v
  617. }
    1 n5 C2 {0 u0 q! ~+ s
  618. 1 H5 `# L$ H% m6 j
  619. void ProcessProc(long Total,long Current)& e1 ~& a1 j5 K2 G4 z' t1 `
  620. {! u  M/ ?  z+ C! t5 m
  621.         MSG msg;- n+ v% W* Z7 ~9 }* P$ b
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);1 L; z' M' f; _- Q. |
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ; v6 U" Q' f: P! |( e$ ]
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    # s  V! w- |1 j- V# J& h
  625.         {
    ) o# t) b3 A/ R% `9 |
  626.                 if(!GetMessage(&msg,NULL,0,0))6 r, U- R# {# k% q- k
  627.                 {
    5 w4 n/ I; N7 Z, ^) b
  628.                         return;" `* B$ e! f* {1 g
  629.                 }
    7 {3 }8 G/ j1 y3 Z- X  r' z
  630.                 TranslateMessage(&msg);" t. F/ l4 O6 n7 z# O
  631.                 DispatchMessage(&msg);7 w. X; O; T; m9 K& K
  632.         }       
    . \6 a$ g; X+ ^- w
  633. }$ c+ x9 a4 |: ?

  634. # r9 _1 b7 O+ |
  635. BOOL bFirstChar=TRUE;
    * L! m0 `, }) B8 E- h1 l) ?. N/ S
  636. 2 z/ M3 B: _! ~3 A1 J4 @  `  v
  637. BOOL CRevAppApp::OnIdle(LONG lCount)7 |1 T% i: ]/ g! Z
  638. {; v4 @9 q  P+ k5 ^
  639.         // TODO: Add your specialized code here and/or call the base class8 \; m- A8 H0 G, I1 k. z4 h
  640.   switch(dwProgramState); u  E! D5 l5 Y/ O, ~- u
  641.   {
    6 @/ ]  u- ?2 V( J0 W4 _4 k
  642.   case AP_NOTHING:
    " u" u' k4 v7 i& ]+ Z
  643.     switch(dwStartUpSteps)
    ! W% ^& J) f0 a/ p" K+ `
  644.     {+ _. Q3 [4 i! F0 ?( G  _
  645.     case 1:
    # y/ P$ R- u& @1 S
  646.       {, k, J7 K8 j6 ?% d1 R# b
  647.         int i;# ^& C7 C" y* V
  648.         CDC *pCDC=dlg->GetDC();$ K6 e. b2 M, d+ b! d* ]
  649.         HDC hdcwnd=pCDC->m_hDC;* B) y7 c6 i6 q, {
  650. //        Graphics graphics(hdcwnd);0 V2 q  b9 i) Q4 q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    , v/ v$ E% E5 X. K- ~) ]
  652. //        INT iWidth=bitmap.GetWidth();) X: V1 l* ~8 i
  653. //        INT iHeight=bitmap.GetHeight();% {+ Q0 Z& O; x% E
  654. //        Color color,colorTemp;* \# |9 `! i5 [! x% c$ b/ M
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)4 F( [6 ?: ]- ]. q+ u
  656. //        {
    6 _0 i" d8 J5 j1 K" L9 \" ?% W2 [9 h
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)9 @; N( ]/ l6 F! i( S1 p' ^1 n7 n
  658. //          {
    ) \* r/ N! F- Z7 c6 V' j( H: d: x
  659. //            bitmap.GetPixel(iColumn,iRow,&color);0 S( q. t, W! P. A" j1 X
  660. //            colorTemp.SetValue(color.MakeARGB(
    ( h$ D# `: G* u; f5 I
  661. //              (BYTE)(255*iColumn/iWidth),
      t4 l& N. y# x2 K( V+ T
  662. //              color.GetRed(),4 q9 ]' p; j5 I0 i& K& y
  663. //              color.GetGreen(),
    1 D. t" i- A$ T: A9 K3 Q
  664. //              color.GetBlue()));
    + R) ~& d7 d6 r8 u7 r1 R; m9 x
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # {+ e! k0 ?5 X: K6 b1 c2 M+ J. _( @
  666. //          }
    , x9 [7 q) O0 w) ^+ D
  667. //        }" V5 w0 }" e& g
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    1 w0 T/ x4 J5 W7 n
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 Y  Q8 d; n, O5 f( n
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");4 o4 ^2 Z/ _/ h! q# @) ]8 y' F4 j5 u3 O
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 Y. Z5 L( ], e  T2 g$ R
  672.         for(i=0;i<240;i+=8)
    0 O7 b4 E/ X0 K) g, D/ d
  673.         {8 K; p/ K  E7 }- M0 V) t# p
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 j: [% E) x! `$ U5 _) M; \
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ O4 i7 w& A" L9 p' C
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; r; p. W3 M. b8 j1 o
  677.           Sleep(33);# Q9 q; q1 e- `: P2 w: o: d
  678.         }/ f; X. o; L) |
  679.         Sleep(1000);$ T* b& n. x$ I: c5 B" M( ]
  680.         for(i=240;i>0;i-=8)
    7 L( K. b7 S# i5 Y
  681.         {) Z! u" m. q4 |' t
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 G" f7 m6 V8 A4 X- _/ o" P7 q" h
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 Y# k' ?" h+ K. c9 z, x% @
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ ]* B1 G0 h5 C/ O
  685.           Sleep(33);
    0 D5 U3 H  G2 Z; b
  686.         }
      p: f; d: C4 e$ M. T; s% m  Q0 B9 u
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);5 v' o" P+ {! ~. F, [
  688.         dlg->ReleaseDC(pCDC);
    . e3 J, W* y& @
  689.         DeleteDC(hdctar);6 g1 _8 Q. p+ E# z
  690.         DeleteDC(hdcsrc);
    2 W/ }+ {9 N, i2 Q7 A: D
  691.         DeleteDC(hdcorg);1 u5 N/ ~6 [5 _5 V- P9 T
  692.       }
    ( ~5 s/ C* r& H9 Z! J
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    8 D+ B" y! z) J& H$ j
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' ?3 }) h) Q' |, ^0 G# T
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    7 a9 F, t% S2 y# h( ?4 X; g9 `
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' l0 v* I5 F  d* l6 ]* V3 ]2 _; t( {$ P
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 e* b6 g' X2 o, A2 G
  698.       if(!Dn.Connected())0 M. r& I6 a% N0 _6 |7 O3 L$ N
  699.       {( O0 C- u) [! n% F+ L8 d
  700.         dwTotalFiles=1;4 d" ]9 C6 D% k: P! T
  701.         dwDownLoaded=0;: l; x+ P" b1 Y; L' x2 m, }9 x
  702.         bSilentStep=TRUE;/ ~: E$ N- e" m5 X9 N8 k8 i2 C
  703.         bCompressed=FALSE;
    5 o( r! m% \8 E0 x: P
  704.         strExtLocal.Empty();" n5 J% }& }0 t" F7 E, }
  705.         strFullName="readme.txt";6 q( f' N% }- M. W
  706.         dwProgramState=AP_CONNECT;
    * n0 P4 R4 I, W& C- I$ g3 e3 U: ]
  707.       }6 k: E- J! s; e- x6 G, n' L' S' l
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    4 @9 l6 Z$ n6 |
  709.       dwStartUpSteps=2;
    , i$ t" r/ e' W4 p  Z
  710.       break;
    * m0 C0 @' r4 p
  711.     case 2:2 c; F- p, n5 N7 o4 ^
  712.       {/ b7 R( ~% e% {8 ~. S2 m
  713.         int iEOF;
    1 x! d7 _8 u; O/ s6 s" F0 E
  714.         FILE *fp;+ g/ f( ?5 s( G; @. w, V0 x% |3 ~
  715.         char szString[512];
    ' }, ]- r4 b$ m
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");- O8 d1 W8 X7 q7 L0 j$ Q" @" i
  717.         if(fp)
    # s& K+ h' L( ]
  718.         {
      |/ V( [! B2 H5 |- U
  719.           do1 M0 {; [0 i0 o6 Z4 S( q' y; x4 @1 D  P
  720.           {
    * M9 D8 U% ^2 V: V$ E- C
  721.             iEOF=fscanf(fp,"%s",szString);( H$ ^- w) x6 @* ]. p4 Q0 q; q* H
  722.             if(strlen(szString))$ H. H" z/ X; F) H1 g
  723.             {, f5 S9 w9 ~& [# y4 E) o+ K
  724.               if(bFirstChar)! F- T/ K* J. G& r4 l$ K$ J) p2 k
  725.               {* ^# \$ b, f; t7 p0 h
  726.                 bFirstChar=FALSE;3 P# Y) U* G3 O7 o  O  H
  727.                 bConnectIsBig5=FALSE;" Q, D2 S, E7 |5 ]+ C
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;* V4 S6 H5 I4 s& f0 Q$ v
  729.               }
    9 V0 K/ ?' C6 b9 p4 F/ M
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . d, j* a2 e9 M: l" a
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ( z' g; v$ a7 U0 g: g
  732.               dlg->m_ListText.AddString(szString);) R# X$ D4 d' s6 v/ x' I
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 I. J1 P, O7 I' l6 C4 ~
  734.               *szString=0;$ [/ h5 o/ p6 l3 ~- A( x! h
  735.             }* o' N' [) _$ \# e) K9 t' u
  736.           } while(iEOF!=EOF);9 ?: Y# K0 R9 e$ h
  737.           fclose(fp);: j+ f1 Y6 ^9 |" s8 j' Y, ?
  738.           unlink(".\\DownLoad\\readme.txt");
    ' d: k+ {- V$ R3 Y& _( {
  739.           dwStartUpSteps=3;
      V# `7 `! o! }2 T' o! N) h% ?
  740.         }
    5 \& c5 n; \- ?; Q
  741.       }
    ( N: y2 j. B! c( F$ Q9 p
  742.       break;$ Z3 {8 n# n, y6 W
  743.     case 3:3 R% Q$ w. q0 I" b$ E, i# g
  744.       if(!Dn.Connected())
    + j* t8 d2 d0 b& f- m1 D
  745.       {
    9 o/ O4 ^! Y- h1 f# w$ ?9 W- \
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);+ u0 Z% R' g" G8 ~& a1 g7 A
  747.         dwTotalFiles=1;0 `" i! d% ~8 m9 s! Q
  748.         dwDownLoaded=0;) d2 F/ I0 w# W4 O! |+ ^( G
  749.         bSilentStep=TRUE;
    1 p! J2 x; i, x8 W, X8 P
  750.         bCompressed=FALSE;, S8 t' w- h1 @& x, w
  751.         strExtLocal.Empty();" `0 K: w- s" `0 t' P6 P
  752.         strFullName="checkversion.txt";
    3 i1 p$ }4 F0 \" b$ S% o
  753.         dwProgramState=AP_CONNECT;
    / m2 y1 S( o; y5 ^0 `
  754.       }
    # j  O  g! s9 j& m
  755.       dwStartUpSteps=4;! S1 w' j6 [, F2 \8 j
  756.       break;7 a0 e- D0 A' i/ `6 L; b5 S
  757.     case 4:
    . M% a9 V& T/ a2 W
  758.       {2 C/ ]  k0 Y/ o# \( f. H, r
  759.         FILE *fp;( p7 b) L, T% z$ W( N
  760.         char szString1[128];
    0 t" R/ F9 d) `
  761.         char szString2[128];
    2 V) }& {9 s9 Y1 V
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");8 e1 R( v& z0 l# B
  763.         if(fp)
    # e; w4 t- E! }* M
  764.         {
    . s" @1 G* H9 K
  765.           fscanf(fp,"%s",szString1);
    # |6 J, _/ G0 {" a
  766.           fclose(fp);% Y+ ^/ G$ \6 f0 L4 W: [2 x. m
  767.           fCheckVersion=atof(szString1);
    . [& l% P( u+ W6 [
  768.           fp=fopen(".\\checkversion.dat","r");: s* U. z  c* D% j5 W9 z7 B! j" @
  769.           if(fp)
    . K0 o- C' F4 r5 q% y4 l7 D
  770.           {& ^7 t. ^9 H+ n6 m
  771.             fscanf(fp,"%s",szString2);
    7 [7 j, f: t) Q, k! V3 |) g
  772.             fclose(fp);
    ) f$ T7 r  H) P+ p3 K3 c
  773.             if(atof(szString1)!=atof(szString2))
    4 n- {7 t6 j: y5 L6 }% K
  774.             {1 X4 Z: B) y$ O
  775.               if(!Dn.Connected()); `: t3 F8 n; j8 `
  776.               {8 q- h' Z4 _- S! w6 b
  777.                 bFirstUpdate=TRUE;
    2 H9 y2 P) d$ x4 U& {9 E9 k. p6 D: V
  778.                 dwTotalFiles=1;
    ) M; \$ z1 m- }
  779.                 dwDownLoaded=0;1 [& Z# S* z  x) W- ^# g
  780.                 bSilentStep=FALSE;
    + n/ o+ T. ^- f* z
  781.                 bCompressed=TRUE;
    # g  r2 U/ o0 [
  782.                 strExtLocal=".\\DownLoad\";" n, ^+ z/ x" h' ]0 {
  783.                 strFullName="update.txt";, m: Q- E2 t6 c* J  b" ^; }
  784.                 dwProgramState=AP_CONNECT;+ s, \% _$ i% T2 {2 Z8 O; V0 t
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 a5 f2 ~. U; Z2 ]% x# q1 d# I3 @; t! Q
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, A5 e: b; P, J9 d9 a
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! N8 F5 W/ z! q/ k& h0 O. @
  788. 5 `( M# W6 x4 S: s) c, @
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      q, i' {3 ^  H- N( p
  790.                 unlink(".\\DownLoad\\checkversion.txt");; ^% S1 S) E5 E" p
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)! L9 u5 F. t& X9 L
  792.                 {$ Z1 n2 z8 O4 T9 \
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");8 t8 [0 [5 w2 K& V% s7 o0 v8 B
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");& S: r2 U7 z& ]! J+ [/ M. f
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");$ d" y9 k! G/ }6 ^3 M
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, e4 ]' f9 Y2 d  R  I9 n

  797. % O+ ^+ S5 U; Y1 [4 I+ Y; ]
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 \! @( ~- ^; M4 Q% {. B+ ~
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 g# n/ d) H- N. `4 Z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");0 i0 h3 R* ~" T
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! H/ ^9 c& h/ Q# n6 }/ K
  802.                 }. I% S, K" g2 w6 ~' B
  803.                 dwStartUpSteps=5;& }: u1 u, `4 I5 [6 ^  @, N
  804.               }' Q$ n0 z/ U4 ?6 W2 r
  805.             }8 W9 ~8 g/ V9 B2 N4 v
  806.             else
    # a1 J9 H2 h( K; C4 n
  807.             {
    , A# f, L/ M5 g3 b- s
  808.               unlink(".\\DownLoad\\checkversion.txt");
    2 i% k! q. {5 ?% @5 S, L; r
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / A' l. H$ F8 b  J  ^
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");( C! \. m& B/ x6 z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");. n  _% l. x: [& u% R5 H
  812. 5 ~4 S4 y; w, c# b$ a* _* I
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 {1 a/ u+ ~! r. u
  814.               dwStartUpSteps=99;( b. W, ]; }1 M8 A/ ~0 [; g
  815.               bFinishUpdated=TRUE;
      ~' ]( a# k! M. t
  816.               bCanUpdate=TRUE;( F0 M: _! H2 H0 L+ S: s0 M- V# i
  817.             }
    ! p) d+ [# N$ ]5 n  ?
  818.           }5 O. d7 L( j' p9 h2 W& f
  819.           else5 I* v8 z- U( a& f4 {
  820.           {
    , J  y/ C  [# m2 a+ o4 N* E
  821.             if(!Dn.Connected())) |: |8 J% I0 [
  822.             {
    3 P# A, a0 D% n. Z: O. h( x
  823.               bFirstUpdate=TRUE;/ I9 E8 k9 y) p
  824.               dwTotalFiles=1;
    % Q8 ?3 V; k4 l' H3 G: E
  825.               dwDownLoaded=0;
    3 x2 |, b  r, @# V2 J9 C
  826.               bSilentStep=FALSE;
    8 Y# U. a# x5 e. D: f6 \9 D8 s
  827.               bCompressed=TRUE;; d0 J6 K( }$ [* a+ w' s+ G. ?
  828.               strExtLocal=".\\DownLoad\";9 t( r$ I/ h8 L& z+ ~2 d
  829.               strFullName="update.txt";8 y& j8 i; C: o: ?( _. w
  830.               dwProgramState=AP_CONNECT;
    " l/ i4 P/ I% `3 B! s5 m
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 L: v5 r. S  o9 o
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% T4 Q3 @  y1 G) |
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * r" I; K9 P+ u( f( q. o6 e
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- U- g  s' U3 ?) Q
  835.               unlink(".\\DownLoad\\checkversion.txt");
    4 D  ^/ j: a- [! B6 G3 t. @1 `
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    3 d3 K/ Z9 M1 [: s
  837.               {# S  m" I; Y, O; t1 B2 t+ K- _
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");3 j8 {2 c( T4 b7 p1 S7 o8 W; ?
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");0 P; R! y" [/ j$ u$ `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");6 j" v7 H" l4 }: J: X
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # p. d& U4 [' G; @9 c) u; a8 |- r
  842.                 0 v7 e/ ^, W/ C! W
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) f1 ~: \3 \, n7 B6 i: a
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - [6 C( Y& F9 l- I3 r
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 `1 p, n3 h. y* x# ^
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . H/ j) u. t  Y$ ]: p( l
  847.               }6 A- Z" [2 F3 z' W+ S* x( u
  848.               dwStartUpSteps=5;
    3 J8 a; v9 Z, N& F6 Z% F% V
  849.             }
    ! b: S; U" w5 e/ N) V* ?
  850.           }9 l  ]! p* Z4 c$ E/ W
  851.         }/ g0 u& Q# D3 }: r; q/ V1 c9 Q
  852.         else
    : n2 d3 B% z4 l; S2 c. o+ r+ g
  853.         {
    . f% t  s% O4 m# n( R/ y
  854.           dwStartUpSteps=3;
    ! L& O1 o, T; h0 ]! J
  855.         }
    6 o: q5 o, A0 p$ G' l7 O
  856.       }
    " G$ F" ]  y7 N& ~0 V3 v
  857.       break;6 ?4 P  z, D+ ?1 R5 D3 R
  858.     case 5:
    / N0 f) r, `$ s( |
  859.       {
    # z" [8 E, x' E% s" u6 Z
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)  u1 X; ?& b2 F
  861.         {# N6 b- Z3 M5 ?, `; b+ @4 K/ f
  862.           int opt_overwrite=1;
    % a0 E3 N+ s3 R+ I' u" ]9 G' S
  863.           int opt_do_extract_withoutpath=0;
    / g, |- O; N6 h$ t2 o+ N0 s
  864.           unzFile uf=NULL;
    " {; Q; i; |" C9 C5 l% O  x

  865. - p% S. R1 t2 g9 O
  866.           uf=unzOpen("Wsa.zip");
    3 |0 o# e+ D5 K
  867.           if(uf)- b5 P0 D: e$ T. B7 n
  868.           {3 W9 _. n3 M- E1 U: `# D
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);  _8 Y) I5 v. `2 j$ U# ]% `" ]
  870.             unzClose(uf);( a/ l% t8 [0 H; s7 M; f
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");3 c$ F8 z2 |' Z( j+ W; M
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");5 c# V2 m# k& `9 a3 v
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");* z- A  b+ ^& A- X+ E
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! j6 u% q9 N- \
  875.           }; a% Z# A8 [5 V5 T+ V' {- s+ C. `
  876.           DeleteFile("Wsa.zip" );
    & Q* z- A0 C# S( Z& z9 i- ^* }
  877.         }
    ; N3 D4 b' R" M' }" T, y- k
  878. $ E' e0 ]) K0 C
  879.         if(CheckLocalVersion())2 b* V, H! D( U$ G; }
  880.         {9 ]! U; }* V, t1 x
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    8 R# W8 I* @; w& P
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");' R0 H* j- g" f) a) h. U
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    & F( F; t' g6 M" y+ Y8 Q. d" e0 e
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; d4 V; }! o9 N  V  W0 S
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);( B9 A, a6 [6 o7 q8 F
  886.           dwStartUpSteps=99;( Y, i( C* X/ `+ c+ m+ r/ m
  887.         }' b  K# l) q9 D, h; ?% G5 R
  888.         else
    ! p& a5 ^1 r+ d0 D
  889.         {
    1 ~! W! [- r4 |# N; }1 G
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- {  w1 _" R$ p
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! I6 B* R& W" @
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; W7 X5 @" T5 E; Z  ]

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-20 21:26

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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