CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
$ ]& w) G, {- {8 r1 b
  1. / RevApp.cpp : Defines the class behaviors for the application.: y: Y5 b& ?; H/ ?) ]( R7 k2 V
  2. //
    % o6 m" {, Y- a

  3. 6 M) C6 y5 ~' B1 v0 x6 P( g
  4. #include "stdafx.h"0 m' q5 z; U0 J- ^) }
  5. 7 j: K) P9 y5 b! ~8 m
  6. //#define UNICODE7 l( L3 J+ o) Q
  7. //#include <gdiplus.h>4 S2 y9 Y3 C4 {3 K8 I
  8. //using namespace Gdiplus;; [, o7 y: N  M& F# X  M2 n6 c

  9. 6 O$ `5 m9 r( u' ~+ `! R, A3 w
  10. #include "RevApp.h"0 m( b: ]" J, m
  11. #include "RevAppDlg.h"
      T& s' O& E; V  i: U9 Y

  12. $ q) q% H/ V4 [1 A2 f( y
  13. #pragma warning(disable:4786)
    5 Q6 p9 X/ R! M+ u, X
  14. #include <map>" o+ m( ^6 ]" q: @
  15. #include <list>
    " g1 d0 M3 c# V( c
  16. #include <direct.h>
    3 k! `2 Q- O) z. A4 ]& H) v
  17. + ^9 S3 `- q5 v* n4 L
  18. #ifdef _DEBUG4 d1 B1 d& X2 ^0 G
  19. #define new DEBUG_NEW
    / ?8 o6 t" s, |
  20. #undef THIS_FILE
    2 e, W8 j0 f) Q
  21. static char THIS_FILE[] = __FILE__;
    ; n+ b- F, L# g. Q/ |2 [' c% o
  22. #endif6 Z+ g$ y; s3 q0 ]  f
  23. #include "SkinResDef.h"
    7 }7 v3 N1 E& b9 `5 q! f) w
  24. #include "ChangeBG.h"' I7 p7 l8 Z: I% j& F% f
  25. #include "AFXINET.H"1 H  T8 x5 R( s9 P! x+ l* i) ~

  26. $ T# y$ b/ H# ^. m( _4 y
  27. #define TRADITIONAL_CHINESE 00 a% c# e$ ]+ U* v5 l! w, P2 w- A; \
  28. #define SIMPLIFY_CHINESE 1
    ! G$ f; b7 B+ I! a+ @" m- x2 h: h5 F
  29. #define ENGLISH 28 H. A% b- b# c
  30. int m_iLanguage = ENGLISH;
    ( z# O2 ^9 w. |1 E9 A8 m
  31. /////////////////////////////////////////////////////////////////////////////% e: }# h0 ?- n  |
  32. // CRevAppApp
    2 u# C7 C: N' _, m/ u! K8 _
  33. / |8 s+ p5 `( v7 b, M1 m  g6 M
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    * ]3 ?# T7 A) \0 i% x- U
  35.         //{{AFX_MSG_MAP(CRevAppApp)2 @3 Q8 @& W8 b! v0 O
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.* U8 m3 y/ X  x
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ) F; q4 j9 N4 l% k( J
  38.         //}}AFX_MSG) i! A$ o7 k$ O) U
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)7 o' C; O  b0 L3 `1 Q
  40. END_MESSAGE_MAP()
    0 Y# N& N; |  H$ ?' }

  41. 8 H( e) N: K3 {  _
  42. /////////////////////////////////////////////////////////////////////////////4 a5 F/ ~0 `3 s# n
  43. // CRevAppApp construction& f- h" R+ r& l
  44.   y3 ^0 h# u: l7 M1 [$ \
  45. CRevAppApp::CRevAppApp()
    3 K: Y+ E# x: R* }
  46. {
    9 _, g# a! g) H6 L+ v% N0 S
  47.         // TODO: add construction code here,
    $ V6 ?. ^/ `0 b
  48.         // Place all significant initialization in InitInstance9 ?3 A; |! P5 Z+ h' J0 j  K; d
  49.   bDisplayIsBig5=FALSE;
    ! U0 P4 k8 O$ ^2 L
  50.   bRestartUpdater=FALSE;$ @# z5 W" y, G- i4 f' _/ w. r
  51.   bFinishUpdated=FALSE;% P0 \0 H; ]* z9 O) m4 h2 C
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;; L, j/ Z0 U2 ~  z  p* J# e
  53.   InitChangeDataBig52GBKS();
    ' m7 r# h, J) w# Z
  54.   InitChangeDataGBKS2Big5();4 `: A5 i9 @/ W4 P+ x* V- G
  55.         //
    / W7 \6 K, }4 G1 n2 p
  56.         bClickRunExe = FALSE;# c( ~: C8 I, n" C$ q; V" c
  57.         //$ S2 K- X3 V1 s
  58. }# q- M, M$ d9 _8 g1 X0 |3 p

  59. ' e8 R0 {$ f* S1 M1 n0 S, A
  60. CRevAppApp::~CRevAppApp()
    % s$ N$ R$ E7 I  \! w
  61. {
    / I  F: W4 d$ G  D. j5 |
  62.         // TODO: add construction code here,
    * D! l/ U7 e. H/ ^; F8 v+ V
  63.         // Place all significant initialization in InitInstance
    / e5 y6 m) H! f' i, R
  64.   EndChangeData();
    5 P* H6 v  R# F2 [
  65. }
    3 d2 U! ]2 \2 P
  66. 8 {7 G' \& U$ {; ~2 u
  67. /////////////////////////////////////////////////////////////////////////////
    ! e; s/ }+ P0 ?. ?1 Z
  68. // The one and only CRevAppApp object
    3 k, k5 s; e  Q6 a
  69. + L. N+ p7 v6 ~9 g9 F. q
  70. CRevAppApp theApp;1 F2 z) E. S; |3 A& v

  71. : {8 H/ K# z: l9 R' g( R
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)+ x" a8 D0 C$ ~& T1 k% K3 [5 _
  73. {7 @! ^8 g/ Z# Y) a2 t4 b' p1 B% P& \5 e
  74.   int iEOF=0;
    - i7 H9 r1 S; R8 a5 y
  75.   char szTempName[MAX_PATH];* z, t) e' W7 k" \' L) v4 E& f
  76.   *szFileName=0;2 t2 `+ A, y$ [$ w
  77.   iEOF=fscanf(fp,"%s",szTempName);
    % \8 a" u& x" k
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')! @7 M' j' c% r9 {
  79.   {0 `# Y1 _5 ?  F+ h( l
  80.     strcpy(szFileName,&szTempName[1]);- q( r. f+ S$ i3 I1 c. ^$ a
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & q) t! c: W" b( M" \! e# `* w% S' a
  82.     {3 ]) o" @7 F, u4 y* C! g. `" T
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ! b1 z. c1 [7 J8 g% k
  84.       strcat(szFileName," ");
    ! J0 v0 s- F# E6 Z, Z% U% Q
  85.       strcat(szFileName,szTempName);
    ) I/ T6 {! ~, Z0 J1 r8 u& H8 g$ h
  86.     }0 R6 v1 H- _6 w  d
  87.     if(strlen(szFileName)>=1)% h$ N9 B9 L3 l7 K: d8 E$ m* ]
  88.     {4 j; x; y( O" \
  89.       szFileName[strlen(szFileName)-1]=0;
    . B1 o% d5 }- S: q1 m5 {& g
  90.     }
    & \4 \4 T8 L. V# X: g! S0 ~. w% W
  91.   }
    . N! [0 T* A5 a* l8 P" `! h! Y  h
  92.   return szFileName;
    ; N1 [5 ^( @+ M% b& o2 t: k
  93. }
    / O! X2 ], H  B( V- g2 s' q
  94. # K+ F( V2 H( Z' `4 o0 y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    . f  K$ d8 \. P! N( k* H5 _
  96. {, p) c' a' x! W- ]
  97.   FILE *fp;+ o3 W) a1 t, V' D8 D/ B
  98.   char *key=NULL;
    2 k3 x2 _( X2 B7 ]" p& a
  99.   char version[MAX_PATH];- [  N( n) X- V7 g/ J  P
  100.   LPUPDATEFILE file,olds;# f3 w5 q, F2 g& H% {/ v
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) e$ a  D! L$ v

  102. 4 T2 ?; I0 T3 N; j/ n4 \
  103.   UpdateList.clear();
      S) C; l7 Z: O& C3 b
  104.   UpdateFile.clear();
    % F2 Q, f) _0 n( {4 k6 h6 c) |# A
  105.   if(GetFileAttributes(filename)==-1) return false;5 t1 t% i- y" v2 e' V
  106.   if(!(fp=fopen(filename,"r"))) return false;
    0 T( [/ ?2 `2 ^( t! p/ W
  107.   fscanf(fp,"%s",version);8 X" @* e2 p, d9 w9 _2 @  i, ?
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    8 k6 c# L% |( n* t9 m
  109.   while(fscanf(fp,"%s",version)!=EOF)
    : P% _) X$ W3 @2 z  i8 L& j
  110.   {
    # x$ n# }; [" s7 _
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 H. N6 J9 R, W6 @( U6 o' B" a4 A/ i
  112.     fscanf(fp,"%s",file->path);
    : _/ g# M% u6 T
  113.     ReadFileNames(fp,file->file);
      F: }" \- ?% a5 ?
  114.     strcpy(file->full,".");
    ! A0 s/ i8 K7 E" S% L- {5 x# E/ @
  115.     strcat(file->full,file->path);3 f- \( P5 f0 J7 D' H9 |+ e$ z7 L% L
  116.     strcat(file->full,file->file);9 s/ j% l1 O1 Z7 f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    * g$ k$ w6 G# p# F- ]0 V' g
  118.     {- M9 b& v8 ^9 D
  119.       file->vers=(float)atof(version);3 W# r+ m$ r8 R- z- o  l
  120.       UpdateList.push_back(file->full);
    + W9 \* V9 W. W& x9 T! j( M$ H
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , a! m" f( e  @( S) R( x7 J# A
  122.     }$ v7 ?, t6 n. s+ w5 l1 e
  123.     else
    1 H) [( C0 }2 Z- j5 P5 R: l0 o3 W
  124.     {, ~% [5 G% p; s" W3 x' [
  125.       olds=(*p).second;/ N' T, x% }% c/ n8 k
  126.       if(olds->vers<(float)atof(version))
    " I8 G9 }" i8 B! ]) |  R
  127.       {
    & g2 H% b: i1 v5 w( [3 I& W
  128.         olds->vers=(float)atof(version);
    ' Y' |  Q% ~2 w8 |1 z- i
  129.       }
    6 E, ^- d) x' F  w
  130.       free(file);7 a2 h- l; q) J2 ]4 i+ ~1 X
  131.     }; B3 Z# l; T) z
  132.   }
    ' C4 W" @- ^, l4 |' U- k
  133.   fclose(fp);
    5 _# R+ G% }% |" I7 E/ q6 j
  134.   return true;
    3 V2 ~! B) ?, P, R
  135. }. S6 I2 _& u& {
  136. ( n3 G% Y2 Q) k# S0 w
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)0 B% g. q# y# ]# I& J% c1 l# t
  138. {
    8 ]0 W, D- n# [3 d0 c0 x( P
  139.   TCHAR  szFull[MAX_PATH];5 x  j4 @" Q6 `* W
  140.   TCHAR *token,*inter;* ?  @+ ~, @! o& Y
  141.   *szPath=0;
    / ]4 t( x" W& ]/ b# W
  142.   strcpy(szFull,szFullPath);
    + T8 I0 R# ^0 r# l0 i8 d7 ^
  143.   token=strtok(szFull,"\\/");
    ) |  t4 C. x8 t) m. U) J- b
  144.   inter=token;2 r; o& j$ h" N; _  m+ ?% Z
  145.   while(token=strtok(NULL,"\\/"))$ V; S, V2 T% Q" w
  146.   {1 q, ^/ X6 C. O0 \
  147.     strcat(szPath,inter);
    / K, q$ Z% z) W6 C
  148.     strcat(szPath,"\");
    " @5 H8 s2 P. q. }, @
  149.     inter=token;$ \. R2 S0 E' I% S  s
  150.   }* W; z3 w" z+ j; k. B6 |* h
  151.   return strlen(szPath);- O( u( C& U, d( M2 g( t( B
  152. }
    6 y6 K5 w/ h) e) c" B  D# M' }
  153. & ~8 a0 U3 w$ v) `  H$ V
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    8 W4 R& F: S* L: r/ A$ ?
  155. {3 z. z4 S4 N, `. [8 l/ d
  156.   DWORD attrib=GetFileAttributes(Target);% Y; O8 ]- a- y- u
  157.   if(attrib!=-1)
    3 ]- A2 ^( U% L  o! H; ~
  158.   {
    $ {7 l8 P) f& o! L. i2 f
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))0 d' C: a- h! w+ u' y' ^
  160.     {+ Q. q5 X1 _  E8 F9 q, k
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    8 Q& l5 g3 E) o4 s) E* p% ^3 e" f
  162.       SetFileAttributes(Target,attrib);
    3 U, l- J8 V0 R& F
  163.     }; A* v& g4 {) S0 y
  164.   }
    ! ?2 n) p4 r; |
  165.   CopyFile(Source,Target,Erase);* h  a% |. l4 }' x% h$ E: Z6 U
  166. }+ c9 o" v% n0 B" j! p

  167. - b: m0 }: w! ]1 L9 b
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    4 x: K9 j: h$ G2 R' D+ o1 D
  169. {
    . B5 }& B2 f. ^
  170.      FILE *fp;
    * A, _7 |/ f* H* R3 L: X% \, V
  171.      char  szBuffer[8192];! {* G) e4 D4 S! }5 c" Q, p
  172.   va_list  argptr;
    0 z+ c' j7 B3 y; p+ n2 Y4 q2 \" Q6 T

  173.   w; W) l0 {5 t7 s6 }- J1 w+ H
  174.         va_start(argptr,message);
    - j" M  D5 a; F& `8 R1 P9 e
  175.         vsprintf(szBuffer,message,argptr);2 G0 ]2 v0 ?" H5 l' B2 {. S
  176.         va_end(argptr);
    , T# G" W! J' U( j& L1 r3 u: R
  177.   fp=fopen(FileName,"a");1 D* r. c  u8 S; P: Y# y
  178.   if(fp)5 ~4 V* x7 l' H+ Q9 D
  179.   {
    / u& S& t5 B, ?4 c
  180.     fprintf(fp,szBuffer);; X$ [9 O5 y# v0 G6 h
  181.     fclose(fp);5 O# f/ _' a2 {7 |# l
  182.           _flushall();# e' L+ b6 P6 F3 e
  183.   }# o! Q' m% \+ |& F* `6 H
  184. }
    . W: ]2 E, ?9 A! S& C  d

  185. , Y" R+ `+ _- {. J  r' J
  186. BOOL CRevAppApp::Fclearf(char *FileName)& M" N; {# \7 r# m  ~6 H% P- C4 q
  187. {/ |: p7 B8 h( y% s
  188.      FILE *fp;
    ' U6 Z" _3 s0 H! H4 T* q
  189.     DWORD  attrib;8 J& i6 P2 Y: F1 v5 ]; u' p* M
  190.   attrib=GetFileAttributes(FileName);
    + F  c& N; Q7 y% \* E
  191.   if(attrib!=-1)
    + S6 ]  u( P7 m4 L$ z: i
  192.   {# G  K/ n9 ^; K9 p7 Z; S0 }# K. A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);; a! o8 F+ e# P" v7 C) t
  194.     if(!SetFileAttributes(FileName,attrib))
    ) W0 @' ^  K% F: a
  195.     {* Q8 ]6 y3 y5 @. l7 {' l0 B
  196.       return FALSE;/ P% c$ u1 }6 d6 l
  197.     }; i% |7 m7 F: C0 Q* K9 J
  198.   }) V% E8 X$ u3 g
  199.   fp=fopen(FileName,"wb");& t) ^# `  @/ F
  200.   if(fp)( b, Z0 ~, U0 k0 h$ H! y" o. k
  201.   {
    & T$ q- U. \9 y# E; W  Q
  202.     fclose(fp);
    : n+ g+ y. ~" \, ~2 z7 {! I
  203.   }2 N* ]  A. Y7 j, k* u
  204.   return TRUE;
    ' o& c$ ~0 X/ Z. t; x2 S* W, _
  205. }
    ! r! G: f- C# A; ~* a
  206. 6 C, R' G) I( C2 ]( K4 I5 `
  207. BOOL CRevAppApp::UpdateLocalVersion(void)1 X: s$ S8 T; Q% ]; f: ]6 s& I
  208. {, W5 b$ j: f! l6 l: a
  209.   char filename[MAX_PATH];
    8 X, _" ]- n5 Z( [
  210.   LPUPDATEFILE file,olds;
    8 y. O9 e7 J# s- b" `
  211.   std::map<int,CString>::iterator i;8 M% i) Y# `4 q% n- G! T
  212.   std::map<CString,LPUPDATEFILE>::iterator p;/ L, W5 q2 s* f. i* ~$ b* I
  213.   std::list<CString>::iterator l;& b  `7 G) N- _/ O8 y

  214. 6 k; W# L4 w$ P0 J. \1 F! u, B
  215.   if(bFirstUpdate)4 Q8 i4 Q: z1 m# i7 k
  216.   {
    9 U: R$ V. \. B5 k; J4 u2 x/ s6 h
  217.     dwCurrFile=0;9 r# r# [. f0 \. H% v2 \' ^
  218.     bFirstUpdate=FALSE;
    ! v0 [. p, g$ ?2 G* C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# p  q# w3 h- l
  220.     {
    - M0 U& F3 h! j1 k% Y
  221.       dwTotalFiles=UpdateLocal.size();
    & c* D( ?' w0 t. u$ {
  222.       dwDownLoaded=0;
    " A/ N  K+ B' w+ k/ e2 }
  223.       bSilentStep=FALSE;
    8 x! `5 P$ Z) |. Z7 ]7 G: e9 @  e
  224.       bCompressed=TRUE;
    . v; c- n) Z1 M0 Z/ G; Z
  225.       strExtLocal.Empty();
    ; u3 m4 E, m: W
  226.       strFullName=(*i).second;2 {8 f9 \' S9 t# n$ n. W
  227.       dwProgramState=AP_CONNECT;. G2 T, h$ s0 o3 c7 x, S, K
  228.       return TRUE;" x% R: _1 }9 X- r- {2 B( A
  229.     }' f, C/ C1 ?. d4 h" o: n( o
  230.   }
    / |5 x. b1 q% }: u4 n
  231.   else if(bRestartUpdater==FALSE)% N0 ]& |) c+ X( L  y/ T3 ~1 h
  232.   {# d( x- `# k* N# k) e! e0 [
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())% F4 `. t. ^/ v, ^; X  Z; M
  234.     {  X# \/ S- r1 Z5 W* \1 W
  235.       file=(*p).second;6 H" a2 R! o+ g  s* E6 {3 u" `
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ; x6 H; s! u  @! r. ~
  237.       {
    6 L" G$ q9 R3 t9 A& H" E
  238.         olds=(*p).second;
    6 O' b1 W9 C, b
  239.         olds->vers=file->vers;' L8 {. I% u& l8 K7 c2 E
  240.       }% d# T2 f1 L1 g, e5 z
  241.       else9 j- x$ h4 g/ V
  242.       {
    - i; w4 u) o0 y  ?1 T* K. q7 N
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 E: T; ~3 ]+ r
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    4 m5 }4 d; Q: j& e" a  L
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));  X, N3 w7 r4 |0 R, l  m
  246.       }0 B+ m. ]* ^. }$ P4 b
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");8 p: g; e  g6 Z% O
  248.       sprintf(filename,"(%s)",file->file);$ {, N' d( T( e! [: `
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ) \3 ~5 d$ ~, l" E
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }; o! e& D+ e" V; V$ M& b
  251.     }  A! q6 s2 O# j! O& y3 `/ a, \  {
  252.     dwCurrFile++;" R% ^4 K/ ]/ f) V
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! b* d- \4 F9 |( X! X
  254.     {' q) N7 e: w# p7 ]( ?, A' m# k, H
  255.       bSilentStep=FALSE;
    6 b5 _2 |6 _. X* j! D, \- f" M
  256.       bCompressed=TRUE;8 c, k1 J. I( D' W  \8 H8 G/ j
  257.       strExtLocal.Empty();/ p# l% |; ~+ W1 w6 f; h, a2 l
  258.       strFullName=(*i).second;3 i' ?  d& f; W9 x3 N  p
  259.       dwProgramState=AP_CONNECT;
    5 d, X/ B! K: P& T: E( J
  260.       return TRUE;( \; a  `7 b6 T) G
  261.     }
    4 _1 j5 ]' Y0 h" S9 Y; F1 H
  262.     if(!bRestartUpdater), O8 O; b9 _/ J- R" S
  263.     {
    . n1 g) p+ f3 s, U+ s8 m1 e) c
  264.       int iCurrSize,iFileSize;- e4 w# C. ?: C; l
  265.       iCurrSize=0;3 P/ W+ w) A7 [8 K1 X: |( D
  266.       iFileSize=UpdateList2.size();1 r9 \% Z! \  z+ m  a8 G0 A
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");# @5 {6 B0 z' R
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    8 ~/ a! F% O( r+ y3 ?( `$ C
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    4 U. {/ y" f8 ]1 Q6 E" z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 b- b) e" g# }/ c( U  X# i7 u
  271.       Fclearf(".\\update.dat");+ _" u/ t, U- A1 U+ [3 V: M5 f
  272.       Fprintf(".\\update.dat","Bloodyf\n");! k; a" c) P+ x
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . G0 `+ W1 u' Z7 O" }/ V
  274.       {
    0 c. }* E4 V- L! W! c
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())! T- g1 {  r0 F( T! h1 l, t4 }
  276.         {3 E6 T' K( }1 v% `& J8 R& m
  277.           file=(*p).second;
    - u- H3 D9 }% U* o) n1 a9 ]- N7 n' H
  278.           sprintf(filename,"(%s)",file->file);
    % i+ Z# I: ?0 [, s$ v6 h% U/ Q7 c
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* [  l6 ~" Q. l# {1 X, E
  280.           iCurrSize++;, Y" h6 ?3 Z/ z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));% t+ d/ v8 t; o4 _" Y
  282.         }, q$ m: P$ T1 |8 J2 n
  283.       }8 F3 N2 B/ M# }
  284.       unlink(".\\update.txt");: Y3 j1 }% H- N1 r# k7 z
  285.       unlink(".\\update.tmp");
    & ?8 A6 I! B/ v" N; G
  286.       Fclearf(".\\checkversion.dat");- Q0 ~" w- G; z6 [
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    , }# B4 k  N3 W- w) G% Q( ?
  288.       if(UpdateLocal.size())
    " Q. V# x2 ]6 N
  289.       {& Q1 O' V" Z, A, x
  290.         UpdateLocal.clear();
    5 d# c  e9 k0 ]" o1 V. \1 \  ~$ e/ J
  291.       }% p5 j' Z; a. S; U" {% V& A
  292.       if(UpdateFile3.size())
    ' `9 h) `: N& ^/ K* S- \- a$ V9 a
  293.       {1 Q+ U, e+ t. a0 B4 D0 Y) J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)7 I4 T1 L7 p% Q  ]7 g6 o
  295.         {
    " R! c% c9 ^! B% |
  296.           file=(*p).second;
    * ^# f1 P  T, e- Y
  297.           free(file);+ `2 F# k9 b+ R, L3 y: D' x% G% O
  298.         }
    4 p4 N7 e0 `  l
  299.         UpdateFile3.clear();3 t1 ~9 ^+ ~( x8 m3 S
  300.         UpdateList3.clear();
    ! e# G4 b/ L: q( w! a: e  u
  301.       }
    . p7 \, b8 w" y# C% q: y' M
  302.       if(UpdateFile2.size())
    / t$ h" R' q" }$ X- `
  303.       {
    ; \  ^. w0 ~9 B+ R+ w+ q2 L9 W, K+ L
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 T$ V/ R  Z! O2 y$ z! P  C
  305.         {+ f" r4 _! J' P0 K! d
  306.           file=(*p).second;
    $ D+ P' s+ z' m9 o% O$ w/ p4 s  r
  307.           free(file);
    ( @2 Z5 i& Q& S. L! d7 G
  308.         }0 `; u, T% N& q3 U9 y! t
  309.         UpdateFile2.clear();* Q, D7 @9 s8 P& w
  310.         UpdateList2.clear();, h, i- `9 E4 _1 O
  311.       }6 Q2 E4 _1 u+ Q9 a
  312.       if(UpdateFile1.size()): a6 l) [2 }2 Q8 y4 [- w) p& ?
  313.       {" f' S0 X1 h5 Y% l/ @
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / }) ~) {0 \% b, v$ G( ?; @
  315.         {8 f: v* M+ o8 w& B. v. ~
  316.           file=(*p).second;
    1 D6 {1 |8 v( ~; J( J4 i* _) R+ F( g# v
  317.           free(file);8 K# z( x- `& `3 I: g1 y
  318.         }4 r' `* X( `+ g6 x
  319.         UpdateFile1.clear();; v  H; F9 k7 X' j! A
  320.         UpdateList1.clear();2 |: p% f  b" Y. \
  321.       }
    6 U  B4 V0 E* }
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; h+ k, K4 Z- l+ ^( _4 Z' E( ]
  323.     }
    7 \6 c: @5 |7 n& R- f& @, V# z0 O/ P
  324.   }
    * \4 w  D; H# f6 c
  325.   return FALSE;
    2 F0 X0 I  ~# x. p1 b/ V* G
  326. }
    $ A2 G+ I& z, I0 `: M/ i/ p5 v% S

  327. 0 o# g3 R, }7 j/ n
  328. void CRevAppApp::ClearAll(void)" h2 M# m" E- |, d& J
  329. {  J; `& }& L9 z5 Y4 }+ z
  330.   LPUPDATEFILE file;( `4 z- j! |2 N6 B* p% F" q6 }
  331.   std::map<CString,LPUPDATEFILE>::iterator p;& X) }: @8 u0 _. l) O

  332. ; f) R1 g- b, ], p$ n4 M
  333.   if(UpdateLocal.size())
    ' D' @! U# \0 r" u! J
  334.   {
    9 O8 [( B$ g) _# h) Q0 m" Q
  335.     UpdateLocal.clear();" }& h2 t( M' G: r+ G
  336.   }
    + f# \, S# s0 \+ B
  337.   if(UpdateFile3.size()); ~( x: L- E3 w3 X6 C2 ?+ Z* ~* l
  338.   {
    & r9 k& f! {: R
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); r: C' r4 F( V. `: z
  340.     {# A- c/ |: {; U/ c: G) `
  341.       file=(*p).second;
    8 c% `7 u; P1 Q# f( m$ Y0 z. o
  342.       free(file);
    7 f, O) G9 s7 T- [% l9 n2 q1 Q% i5 |
  343.     }" u) S# g' t- j$ z
  344.     UpdateFile3.clear();
    4 c2 _4 q: K5 S
  345.     UpdateList3.clear();4 j, ?! c3 V+ |# [3 A, ?
  346.   }
    1 m* I# ^8 d9 S* o8 I
  347.   if(UpdateFile2.size())
    ; G( _! F) c1 K' t- b* k# q$ d2 h
  348.   {* j! K" E6 S: u* H  O9 V
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)0 |. n$ [; Z1 v
  350.     {, A; U2 ], ~. b6 [! O4 D# Y
  351.       file=(*p).second;
    . i+ u; G5 S) `7 @; q# x6 \
  352.       free(file);
    ! J9 Q. G) H/ o1 c
  353.     }9 w0 Y- q4 B/ O$ Q: `5 k7 s. j% a: D
  354.     UpdateFile2.clear();9 ?3 [: ^% o! }' u. h
  355.     UpdateList2.clear();
    5 k- |: q8 y# _# c& ~# o  f# I' W
  356.   }
    & @8 M# I5 R2 S+ l" i
  357.   if(UpdateFile1.size())
      H  z2 f# t* G1 u
  358.   {
    8 l9 n. d" a6 a+ ~
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ m# |0 j  L2 W$ ?$ B2 ]* I
  360.     {
    : _+ v  B# C7 F8 F" z
  361.       file=(*p).second;
    5 i9 G. g0 D$ u- }, k; @: w
  362.       free(file);
    + `) C) U9 d; b% E& r5 B0 d& X  @& f
  363.     }6 f, @2 t6 W# T0 k$ q
  364.     UpdateFile1.clear();
    % F0 K" }3 i0 C% K' r
  365.     UpdateList1.clear();
    , m" B6 b5 I+ P
  366.   }' n% H$ u" h1 Z4 V! x) D
  367. }  4 x2 i; ]9 x% x( n
  368.   
    & D( `7 F: X2 y. s8 H
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    1 j, n0 S! G1 j# n! }
  370. {0 o0 l2 t4 \+ Z& R/ c- w
  371.   int c;( n' P4 W+ _, p# `9 K1 T
  372.   LPUPDATEFILE file1,file2;! G5 e: s' ~, p+ h: C9 }9 t
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ! w# k4 ^* i$ B
  374.   std::list<CString>::iterator l;7 y+ d1 S4 S  s2 j
  375. - t5 ~9 u- G8 Y, ~
  376.   UpdateLocal.clear();
    9 y% f9 B; Q( |1 y' }
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    : L# j: C( V1 a/ l) _) c' Z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    % Y9 ]. Q$ R4 ~
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ; C% P  t. {9 {$ w6 \
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    + [: D3 }& R% E- b2 b- a3 d, A
  381.   if(UpdateFile3.size())5 E3 W% Q$ ~$ ^* W+ w2 j, P0 Q1 p
  382.   {
    3 E/ E4 F( s$ D; N- ^
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - M) k! g3 X' M8 l1 I& o; l- H$ j
  384.     {
    6 Z% Y0 Q0 C( h$ z% [4 r4 F1 o" A
  385.       file2=(LPUPDATEFILE)(*i).second;4 X2 f* ]. m# o  R+ |& h
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 p4 \* N1 |3 P; s& O8 T
  387.       {0 F/ ?- M- R. X* d
  388.         file1=(LPUPDATEFILE)(*p).second;  V  E! J' k* C/ J
  389.         file1->vers=file2->vers;3 [+ g' C! a1 N0 D! y! n: s
  390.       }5 X# A1 |5 A0 }4 n
  391.       else
    # H% w' k, X( k! n
  392.       {9 J( ^( \2 F" [# l) _" [
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 |8 B6 k- z- L( ]1 H
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    / X) I, I- I% I8 `
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    0 J5 e% J4 F- M8 F, c4 u
  396.       }( q1 @5 D3 m  K6 u! \+ n  c
  397.     }1 j) C: q# C" Y5 u+ f) w# W' Q  _
  398.   }
    + K' Y" [! _4 k" Y" ~
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , b5 W+ O6 N- `8 M2 V
  400.   {$ Y% {) K8 B# G( b: p8 h/ Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ( t$ _, w. Q6 Y7 C
  402.     {
    8 E7 l9 J: L8 @- P% _
  403.       file2=(LPUPDATEFILE)(*i).second;
    + e' ]4 }: u- ?5 f6 Z
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' B" Z  m! N! N" N& p/ G3 ^; E4 Y  G
  405.       {
    ; ?( T. M3 s/ S! ]5 |) I
  406.         file1=(LPUPDATEFILE)(*p).second;, `7 C4 k  k( J9 w9 G* c2 z* E
  407.         if(file1->vers!=file2->vers)
    % U" P3 D) _# q7 m  G9 j* l0 y
  408.         {
    3 N- O% z" m! q  F
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  r0 I; B/ }7 E
  410.           c++;
    , _% ~0 A. I  o
  411.         }/ V- F+ X$ w9 c) i
  412.       }
    + M# \& N; ^  k+ n
  413.       else: i+ W$ ^- f( l) R. |
  414.       {
    % I2 B, z3 r( ?
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ; v" c6 D) Y' m% a0 s
  416.         c++;0 M/ k+ s$ L6 x& d2 V
  417.       }6 j. x' E' V  F6 O/ _8 Y/ X, j
  418.     }8 [9 q/ m+ Y" y% E- ?" C9 M
  419.   }' P3 q* T3 b+ H" Z/ Q# m1 m
  420.   unlink(".\\DownLoad\\update.txt");' \" _9 Z/ y3 X0 k3 R
  421.   if(UpdateLocal.size()) return TRUE;# A: }& P, K4 E
  422.   else                   return FALSE;1 f6 i( p! d7 G, _% H, Z
  423. }
    7 G( w4 Z7 f1 n4 X
  424. , t; \& T: y; i9 r9 w. `: m1 ~
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 q3 Q, Z. u7 v7 m* {; h0 T1 q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    6 v# V+ J% j# w

  427. # b8 H5 [3 a5 u( H
  428. - u/ f* o$ [1 [- \, w

  429. 9 @0 z1 k9 I/ x! C( s
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)/ X1 d2 j, Q. z- l! _6 M
  431. {/ K/ g. V# j9 i* b, W" C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;6 A( Y5 U6 _% Y: w
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 q6 n) \0 g/ |5 y- l
  434.   {0 U9 B! H7 z, p" L6 A$ Z
  435.     char szLanguage[50];2 p5 P% v$ i! x# Q) F
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 `1 r4 i) ^. m* p) n+ _! k/ F5 a
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;1 J2 @# T5 Q9 G& d
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ F. t8 K2 D6 H. w/ w
  439.     else                                   m_iLanguage=ENGLISH;* L: f1 E' [$ k+ t6 T9 E1 t, ~8 c& ~
  440.     char szRegister[100];/ b: R% H- k9 B
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % Q6 d  {. Q2 ]: b7 b7 L! ]
  442.     strRegsName=szRegister;
    0 H0 ]+ f9 g' F/ k! J
  443.     char szPatchURL[100];" a) C2 i. i% Z' y6 u6 u
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; v4 v4 l0 ?. B& ~
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) m4 e/ k5 N- p2 n7 ^* z
  446.   }/ S) T: s, ]' y
  447.   else
    & T. ?/ C. i' q' ]
  448.   {
    0 {" ?( ^4 n% `4 \
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % N5 D& R$ f2 d8 ], y
  450.     strRegsName=DEFAULT_REG_URL;
    " a8 S2 O0 P3 N, U1 E, h% |' P
  451.   }1 M! c9 I. [- \. r: |
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    1 Y/ b. \8 R8 D! Q
  453.   {
    - w5 T% M1 b  V) l  K1 @* v
  454.     char szIP[50];
    % @  K7 s, w! N7 w6 z* e
  455.     char szDIR[300];
    8 F' N$ k! A0 ~4 \2 w
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    / A, x- T! q* j. v) @0 ~& k
  457.     {
      X" l5 ]5 s' }$ o% q- }- ], \  `  F+ x
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");  r- G( q# U& X4 i1 |0 Q4 H% c/ S
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");! a$ v( R/ C1 w3 \/ j% ^
  460.       strHostName=szIP;
    " ~8 C, f7 H1 h
  461.       strHostPath.Format("/%s",szDIR);
    0 y! J3 x9 \/ j7 P$ M# c1 ?
  462.     }
    $ U, ~8 \, P4 a1 @
  463.     else
    7 U+ @1 m: T9 S9 Y; n  D0 i
  464.     {( a1 v/ e) o, `* x& I) H3 F
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 I7 z! L- c4 f& Q2 Y: ^1 y" V
  466.       {) [9 o# m: n) t4 t
  467.         char szLanguage[50];
    7 m. `2 G0 d: l  o. m5 p
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : Z# F9 P- q6 ?- ~; L
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# v+ M% ~- C# M3 `  F. D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - m1 t. m- U0 q6 Q* }
  471.         else                                   m_iLanguage=ENGLISH;1 `8 W5 p$ w' \, u* E0 `, ?
  472.         char szRegister[100];
    & Y1 H5 ?2 A6 J
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - W4 b1 w; i# g1 ^" v
  474.         strRegsName=szRegister;$ J4 n* u& o/ x. j8 \0 N
  475.         char szPatchURL[100];3 @7 s' y* T1 |, Y5 D+ c
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! g) g( Y# k) v$ C( E3 d( L' X
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 q, |9 |$ f1 `) e6 d( F4 |/ p" h
  478.       }
    ! o' `2 Z, ^- B( c1 w3 E
  479.       else( }- J. w- H# H* c+ M' U3 f5 a
  480.       {
    ' j" ?- |5 u! s) b2 q- n  M
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) s3 Y3 j& V. B, y* I) `' j$ m
  482.         strRegsName=DEFAULT_REG_URL;) p% z7 W8 A: J0 V8 j1 Y
  483.       }
    5 ?0 e+ Q9 k. j; m* ?
  484.     }7 ~; Y% o4 X$ c: L) \
  485.   }
    . u$ q3 S: W$ {4 E( h& s& f2 ^- I
  486.   return true;; O  y0 J( E7 Z% j
  487. }
    . h9 M6 `! X2 i; z1 S3 Y$ ^

  488. 9 J9 Q- f7 }, @8 }( d
  489. #include ".\ZLib\unzip.h"
    : r- U3 I$ v. p+ n0 j
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    1 c0 a; d6 L9 d; t2 H8 X0 W
  491. /////////////////////////////////////////////////////////////////////////////# _5 ]& Q7 T, H4 Q) c
  492. // CRevAppApp initialization
    : s2 _/ V, _5 d2 \

  493. . l  }3 Q, R, r7 }# ]3 q
  494. BOOL CRevAppApp::InitInstance()
    3 E$ p% A* I* o( E" ?
  495. {
    7 n2 s4 ?* D- z) m/ W( b7 `
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];" W0 t- h( x6 M

  497. ! r, V6 r5 p7 e! s3 e, [# Z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);/ d& z; O2 G0 b% _: Z+ q+ ~
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)); y1 \. v2 g0 B2 P; m8 m; X9 }' e
  500.   {
    3 `7 V2 P% i% U- e$ w9 `& H& W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    5 Q! F4 E8 ~  \1 D' r$ `, [5 p* h
  502.     GetPathFromFullPath(szPathTarget,szPathSource);5 u4 {  v+ {) V) ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" C8 \, S& i2 }+ ]0 J0 X# J
  504.     {3 k' o$ b% J3 J, y% Y0 R
  505.       strcpy(szPath,szPathTarget);7 ]% D6 V- V$ j6 C: {. n" ?& Y
  506.       SetCurrentDirectory(szPath);
    2 ?* O: \: c! [3 }
  507.     }
    - L- ]) P3 x) y" I7 B
  508.   }& S2 d9 ^5 ?8 S
  509. #ifdef _DEBUG
    7 P1 Q# D/ T' }( F; E
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 W2 e6 \, E3 r
  511. #else" U7 |6 h4 B3 H  B
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! o, T" M5 E, [, e% t& ~( ~3 {
  513. #endif
    - B$ \6 b% j, z' j& ]# s: K
  514.   {6 K! |6 k7 n2 v# h& G
  515.     char tempFileName[MAX_PATH];
    ; X) a- v: A, _4 N& a
  516.     strcpy(tempFileName,szPathSource);" S+ }% k2 l2 f) O- [( @8 q
  517.     tempFileName[strlen(szPathSource)-12]=0;' L; A2 ~; ^" E0 K
  518.     strcat(tempFileName,"\\$CSUpdate.exe");+ y: U  F. Z: }4 i6 O4 U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);- c$ D6 q+ \: _
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    # X2 u3 A) _: \  N9 T
  521.     return TRUE;5 @) d# v0 j! x+ `
  522.   }  I$ a8 D! _( G: u& ?5 ~% q. \
  523.   // Nuke 0118: Delete run.exe
      ]% B& c# @  }; R( n8 f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    4 g$ `. e/ Z# o+ Q* H
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");% L" `- S2 u; N) v1 G1 n
  526.   if(!ReadCfgFile("Config.ini"))
    3 }( L& B( B1 e  s/ Y% y9 v
  527.   {
    7 c8 l# f  s% _; \
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);" Z$ |8 a! J% Y1 G' D
  529.     return TRUE;
    ! S% T, Y) L; y. G, j/ j+ `
  530.   }
    ' E# t8 |7 a1 P9 U; ~9 `% ]
  531.   HANDLE mutex;
    ' Y: @% l9 ^6 T; N( n2 U: V
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 C5 ?1 |- y* v$ l* |# L
  533.   {6 C6 L2 G/ g0 c( G' P; q5 @
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ' I  \. i: P/ j  ~
  535.     {
    ! J: F; p1 J! F( T* l: n
  536.       CloseHandle(mutex);8 {6 E- m5 p6 }
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);2 R/ d9 ~6 v1 `! n0 N9 i" c/ A
  538.       return TRUE;( A, @/ }( ~# {6 x( t* |
  539.     }$ d0 E) a/ h6 _. K- o
  540.   }  ( {( e2 r0 F8 J5 m- b4 f
  541.   CloseHandle(mutex);% `, D5 h3 G7 `& q+ }& _

  542. ' Y) p% K+ c5 E+ \$ v- P  m+ U
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);/ g8 J8 R0 o+ W' W' p8 D

  544. 9 |8 A4 z( k  d  L# t
  545.         AfxEnableControlContainer();: T& h  p  q+ s. |
  546. * U$ W" U; O' j
  547.   bCanUpdate=FALSE;
    " R1 _" Q6 U" A( j! Z! u( T" G
  548.   dwStartUpSteps=1;
    7 @/ n% m- J' i! ], t
  549.   dwProgramState=AP_NOTHING;
    " l. s6 Z0 O' ^" a1 x- Q
  550. ' W5 i, |1 u9 @: R) C
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    9 f. N' B* f- h( J! O; z+ Y
  552. ) Z* L( d) m# T! w
  553.         // Standard initialization) {( r- r( y- j
  554.         // If you are not using these features and wish to reduce the size# T: q$ j0 l6 E% G9 `5 v
  555.         //  of your final executable, you should remove from the following
    8 q) F- E) N4 o/ r+ j
  556.         //  the specific initialization routines you do not need.
    7 M/ K- @/ f% ~% X4 G& A
  557. , N& e* S$ w0 G6 L# {4 Z' Q
  558. #ifdef _AFXDLL
    ' K) F& @/ a  L: _: B  h5 K% E8 E
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    6 I) B8 M1 m# }
  560. #else& a6 W! `- b! S. }% Z: A
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically& l+ Z, u$ S  a9 J9 H: `% u( a
  562. #endif
      Z. g1 P) l3 I6 }. b; Z
  563. % F- s$ m- P2 q+ _4 \* e0 F
  564.   dlg=new CRevAppDlg;- b4 s* n6 `( }* g( B  w
  565.   dlg->Create(IDD_REVAPP_DIALOG);8 Z% j8 W) V6 o9 \- _' F
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* I: ^$ P4 d$ I% ~6 z8 s
  567.   m_pMainWnd=dlg;
    + v/ w6 k! W! K. [" o* |+ _! M

  568. ( l6 d: V9 h8 y( \3 F- c- B
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 L- p7 V# h5 @
  570. 5 w! A- f' A3 b8 D) q. W4 _5 Z
  571. //  GdiplusStartupInput gdiplusStartupInput;
    " P- ]) u4 A3 U8 U% T5 |5 R! r7 f
  572. //  ULONG_PTR gdiplusToken;
      G' D5 L0 O9 o* j# t- }: p8 P
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    + ?- x5 A1 c8 p$ M3 T9 P$ _
  574. 1 k- ?5 n; j2 E) S/ q
  575. //        CRevAppDlg dlg;0 w; k; D6 |; e
  576. //        int nResponse = dlg.DoModal();
    . K9 W5 g2 M' r! g! S
  577. //        if (nResponse == IDOK)( y; V( _! B7 E: g. f' z
  578. //        {" Q: N9 K0 L  \2 ^$ H* R
  579. //                // TODO: Place code here to handle when the dialog is( n, r# U1 e# w! c( X3 c  E" v
  580. //                //  dismissed with OK5 M  z( @" t  Q5 e. Z
  581. //        }- M. ]* t! l; T2 o4 ~# D
  582. //        else if (nResponse == IDCANCEL)
    8 L0 d( G9 X0 W, {: x% @2 Y5 _
  583. //        {
    3 ?5 m+ `: e3 q6 l
  584. //                // TODO: Place code here to handle when the dialog is; y1 F  S8 e1 N+ G; X) c8 z6 z0 I& P! `
  585. //                //  dismissed with Cancel  }9 S5 R1 }6 y
  586. //        }6 h$ y& A  k( N+ {( a- B
  587. 5 {( W9 A7 M1 ~' @3 }+ ]  h
  588.         // Since the dialog has been closed, return FALSE so that we exit the& p1 n* u% T2 c9 R
  589.         //  application, rather than start the application's message pump.
    9 h, p' C# o: U$ c( j/ x
  590.         return TRUE;( `, O- y6 g( g; H/ n8 L
  591. }
    7 r0 U! O% w. X6 M9 D
  592. 0 r( e: V) I5 I
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    % T! @9 V* h2 C, n5 a5 O
  594. {2 z8 i& X; j; [0 z& \
  595.   int i;' {9 H$ l. l8 N+ f: q
  596.   char *szRet;
    * A( e2 p6 m1 l6 l8 J
  597. % Z# x8 B" j+ X  x  N7 p: u
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    3 E6 d/ h/ ^4 d2 I6 z) l9 O
  599.   if(sztoken)
      I1 j3 X0 R/ d: f5 q; S
  600.   {
    ! ^  Y: W+ {6 Q& S* Y) U8 d, B& S
  601.     szRet=&sztoken[itoken];, u7 w- L% A( @( v- @
  602.     while(sztoken[itoken])
    1 L6 g* M0 q& e. P: z
  603.     {
    - b4 A( m! W/ r" e
  604.       for(i=0;i<(int)strlen(token);i++)- B4 P: \" ~* t5 e; c
  605.       {9 ~" p# O; M! W  o0 j& {3 g3 g
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    6 ~+ a1 r' c: Y1 g
  607.         {
    * ?' ?  A3 h9 W5 Y
  608.           sztoken[itoken++]=0;
    # Y! t& T# t) V- C, s
  609.           sztoken[itoken++]=0;
    " w5 Y- d5 _: x4 a
  610.           return szRet;7 q6 @& Q* ~9 p, H  v
  611.         }6 R2 l2 b1 w6 b% h
  612.       }/ w9 q% M% V9 u( K+ k
  613.       itoken++;
    6 _! z; O! ]( U' S1 u( _  l# W8 Q
  614.     }
    6 B& P4 S: S  X$ K7 J, Y# `& V
  615.   }/ n5 s) o4 K9 ^. F2 l
  616.   return NULL;
    4 r6 k2 U" {( a6 e' b' h6 E
  617. }
    ( {) C8 @' q9 ~& M9 }; c3 u) a
  618. # W. j7 K; x  `! k7 n
  619. void ProcessProc(long Total,long Current), l6 Y* q; i3 Z# p; Z" `: h+ i
  620. {
    7 k- i* x4 E$ H. X' j
  621.         MSG msg;% O' S8 j3 R+ U* M/ J+ y
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);4 A7 W3 J3 J+ V3 q$ Q& W4 g: e
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));9 S  `7 j- ?4 n
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))' c0 l2 r. q+ v( X
  625.         {
    + ]8 j, q6 U2 F  E# k; g6 P9 k2 m% a
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ( P" x& p, A9 R( c% ?+ K+ }
  627.                 {# t2 G7 B; }; p3 P
  628.                         return;
    1 V) I( c' c# }! G- x+ I
  629.                 }9 i- R* x' T+ }+ h
  630.                 TranslateMessage(&msg);
    ( `0 q) c5 F# [
  631.                 DispatchMessage(&msg);
    , H- c2 ~8 _, k4 y! w
  632.         }        # v9 Q* O5 v1 [3 W; S0 X' w( {
  633. }- p" W2 _+ \" R% _* @. l
  634. 4 l2 r& V& n1 o. b' d
  635. BOOL bFirstChar=TRUE;
    ' W; Q3 z- @# e" C* E7 s+ X

  636. , J4 d9 `& S0 \0 u+ j
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    * d" u/ X0 y5 u) e6 V0 B. y! j: n
  638. {' ]# \& f6 h9 ]7 |. H3 T  P( M
  639.         // TODO: Add your specialized code here and/or call the base class
    ; B4 h) Y, ]2 q8 L" j0 n
  640.   switch(dwProgramState)
    8 f" p" U6 M* x4 L+ ~
  641.   {! ]$ R% h6 x% a% R+ p
  642.   case AP_NOTHING:
    ; ]1 U5 [+ _) G
  643.     switch(dwStartUpSteps)
    9 i" X0 V$ p7 W, K4 Z# L5 P, m1 ^
  644.     {8 T6 I0 h( \7 N  G
  645.     case 1:3 p7 r% k$ n4 o5 i' s, y
  646.       {" @8 u. r9 o& u4 \1 K7 M
  647.         int i;# M, `7 n" B* G. h" A+ c
  648.         CDC *pCDC=dlg->GetDC();+ k. m; R/ e0 N' X% C2 r
  649.         HDC hdcwnd=pCDC->m_hDC;
    + ?6 p4 @4 f# n3 B
  650. //        Graphics graphics(hdcwnd);
    9 \- `0 t( W3 m5 M/ l8 N5 W$ E6 W
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");; R/ o/ C" N9 V0 n8 B
  652. //        INT iWidth=bitmap.GetWidth();3 s7 K# X1 _+ `/ I; p0 ^2 h' p
  653. //        INT iHeight=bitmap.GetHeight();
    3 r/ g* w6 q1 d
  654. //        Color color,colorTemp;$ _" w( _5 A. e" c" v% Q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)9 g# A7 C$ z/ X2 Q' v
  656. //        {
    # E9 H7 C- c# M8 F" x
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ) |3 J# Q8 J, n) N6 Q0 q. C
  658. //          {7 V5 R! p4 v0 m4 Q. D8 z0 K
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    # D; i- x7 R1 A& _7 k" h
  660. //            colorTemp.SetValue(color.MakeARGB(
    3 ?% ^2 ?! o/ o$ \
  661. //              (BYTE)(255*iColumn/iWidth),0 H& O4 t% l2 b  |0 Q$ Z# z8 _. n
  662. //              color.GetRed(),
    6 x2 d: J! V+ \) Q. m8 J: B
  663. //              color.GetGreen(),% I$ R4 t- i* w: V2 b# E  T( t
  664. //              color.GetBlue()));4 Y7 i8 w9 s2 ?. B4 b% z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);) M1 j9 V  h; c( P- X
  666. //          }9 Z5 z3 W8 w8 ~/ S3 U8 x
  667. //        }. E& [" G2 u( K- }8 a! L, ^
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);8 [: C1 h1 D: c" z$ K3 {) s2 w% ]0 [
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' z2 z2 R4 m5 g" u
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    6 K" |& M5 C- I; j. E
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - l8 i. R/ D' W* A
  672.         for(i=0;i<240;i+=8): a9 S$ u1 h; R; V, a( Q
  673.         {; H. D2 g! u* i
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ N  P' V. ]9 z) {
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# O- j7 M7 X+ y; V/ H% Q4 w
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 _; A, E( c# G. l# M' m8 R
  677.           Sleep(33);
    3 h8 e4 U# k+ S; R  \* k
  678.         }* k2 ^# V; e0 S" ~, [/ Y# F
  679.         Sleep(1000);
    ! [; }: P; E: u; e" s6 l9 f
  680.         for(i=240;i>0;i-=8)
    . j4 w# U' x4 L* X; G
  681.         {( [3 p# z! r6 {2 A" I( @
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);+ `* x' {" b, E- L/ ]
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& x! X; P& B/ ^' N* t( q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 c( E+ N7 x% b4 r8 d7 d* m0 L, f
  685.           Sleep(33);: }: ?3 @* T: V/ d2 X: ]
  686.         }7 ~3 T# }6 p5 q# S( E! L
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( K" w+ @& @! C" _/ H" g+ a. w" I3 J
  688.         dlg->ReleaseDC(pCDC);6 q9 f+ P) x" g6 d- u" y
  689.         DeleteDC(hdctar);/ d; L% k& h% v# t
  690.         DeleteDC(hdcsrc);9 e) B& I8 [- q2 d  P$ g" }
  691.         DeleteDC(hdcorg);% [  T; E6 p$ e6 r0 i; a  N
  692.       }; Y& ?! }! s  ~! a2 ], `3 }2 n
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    : b/ x% [9 [& x# i; t
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ; _' C$ _4 z% {1 [# a. J1 M* w
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ; B, t+ \. u) V4 d
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    " a( X3 L8 b9 X! g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! [9 k7 W8 g/ B4 {4 h8 u
  698.       if(!Dn.Connected())  m6 Q# j) y, K
  699.       {
    - x) K! N5 r7 y' v+ O& h
  700.         dwTotalFiles=1;/ Q3 L- I. |7 u1 a. K! g" ?- q! }
  701.         dwDownLoaded=0;) g1 S7 c3 I0 d6 S* r
  702.         bSilentStep=TRUE;
    2 V+ M- r, d" o' y& |: P
  703.         bCompressed=FALSE;' r. d+ W( t# D" h& M- g
  704.         strExtLocal.Empty();
    7 M+ Z8 b, `; X' u" q, v9 q2 S
  705.         strFullName="readme.txt";
    * x* s3 p; }$ c  C& O0 ]- k
  706.         dwProgramState=AP_CONNECT;% I" ^  Z+ d. F3 |0 N; ?( W
  707.       }
    & {# {+ u$ M3 y, o" `5 x
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();! O7 o9 v5 ^2 Q( c' D( ~
  709.       dwStartUpSteps=2;  l% u# ~5 B% J9 O
  710.       break;
    6 y: C/ z0 U  K( B; Z
  711.     case 2:
    # l2 Y  I6 y. {
  712.       {
    5 {! {! {- F& d( T, m8 o6 w% i1 p
  713.         int iEOF;$ t% {0 m( \$ M- U
  714.         FILE *fp;
    - z0 I' |: @+ e- L; }) i# ?
  715.         char szString[512];8 u- c7 Z. N" W! }9 \, B3 T
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");1 A2 ^+ I9 N* W& P( o
  717.         if(fp)
    / E% S- h/ U/ ~. A8 H4 }/ D
  718.         {1 O9 M3 h4 h; @3 y
  719.           do4 G9 e. D) e8 {3 M  z% q
  720.           {( E/ l9 V( s( ?) V6 p! Z: l
  721.             iEOF=fscanf(fp,"%s",szString);) F0 M% L" q( O) L$ Z) M
  722.             if(strlen(szString))+ `9 Q. X" R% x1 k
  723.             {
    ( z9 a  [& v' Z+ n+ ]
  724.               if(bFirstChar)
    4 |* \0 A8 Z% `9 x3 P8 d
  725.               {2 q$ h+ b+ E2 b
  726.                 bFirstChar=FALSE;. ?4 D$ M; G' l) {
  727.                 bConnectIsBig5=FALSE;
    6 I6 A9 n" D$ b) j4 ]# p
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ' y9 E$ b2 u5 |( g2 i2 ]: @
  729.               }
    2 o6 C! S) Q/ K, H2 J  s: d
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));( H$ P8 `# B7 G3 a6 A6 d( y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    + w" V- i! z- |  Z; t6 Y
  732.               dlg->m_ListText.AddString(szString);# Y* y- u0 Q* E) R6 H
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ J0 T) v4 E3 g5 a% h; `( m
  734.               *szString=0;
      ~6 x3 Z2 ?+ p. d3 u* T
  735.             }
    8 L/ V! v4 f) n; q% T" `
  736.           } while(iEOF!=EOF);
    ; K; p) v% A: K# X9 W( S
  737.           fclose(fp);
    $ w( H7 b& \  W( n0 K, D
  738.           unlink(".\\DownLoad\\readme.txt");9 ~* R0 ?8 {& s9 P: m6 t& a) K
  739.           dwStartUpSteps=3;
    ( `7 M+ I1 m2 k
  740.         }
    + t' M" g  z7 L' f3 K4 {
  741.       }4 y& k0 i4 L4 X; q, K$ d  J
  742.       break;6 w9 o( L' M! A" g- k
  743.     case 3:. Q. H. R# P7 u* [1 S0 K* g
  744.       if(!Dn.Connected())
    $ }# g/ h7 G7 J
  745.       {
    ) t9 O! p) f% ]
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ) W" c9 G5 h& l8 |1 o
  747.         dwTotalFiles=1;# h3 n: B7 H. e6 J9 Q9 s
  748.         dwDownLoaded=0;
    # _, b) ~) b/ U; y* W9 C
  749.         bSilentStep=TRUE;7 w5 T5 Q1 U6 w! V& [2 r; E
  750.         bCompressed=FALSE;
    ( c: Z% I( E" B4 W8 ?7 W* v' x, @
  751.         strExtLocal.Empty();) c0 I- d, }. D" E
  752.         strFullName="checkversion.txt";' X" }: y# U, C% [: T2 E! F
  753.         dwProgramState=AP_CONNECT;
    + ]7 I* t2 v, ^( h% l
  754.       }" l. j2 C/ x* I8 {6 t; a6 X
  755.       dwStartUpSteps=4;+ z2 O- B7 ~  O7 R2 Z
  756.       break;3 O: T8 p& S9 @) A, }+ j% k
  757.     case 4:2 V* Z% x9 n, F& }& h7 ~# H( L3 F
  758.       {" A  d% Q; R! |( ?
  759.         FILE *fp;, l$ @0 A( T+ ?6 \. Z$ v
  760.         char szString1[128];' u  }0 G  G' a+ k) ?/ y
  761.         char szString2[128];1 R6 G8 p3 m- r! W
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");) O+ J* H$ i& O! p4 B
  763.         if(fp)% C1 H5 L. p  E3 b, m
  764.         {
    , \+ _: m5 G* n: u  j, {
  765.           fscanf(fp,"%s",szString1);% L7 ^4 ]$ U  ~& Z
  766.           fclose(fp);
    $ C& W4 j7 `( k
  767.           fCheckVersion=atof(szString1);
    # H, D1 n) F9 C/ J0 C4 ~
  768.           fp=fopen(".\\checkversion.dat","r");
    0 B2 n+ [9 Q' t# C
  769.           if(fp)
    ( I4 o/ X8 O: Q: t  K% t
  770.           {  ?8 Z" j8 G: D. E6 B9 R
  771.             fscanf(fp,"%s",szString2);
    2 D* A8 b( ^9 g8 ]5 H' I& m+ ]
  772.             fclose(fp);
    ' W& ~" H7 _. l% n7 z6 C' Z: X
  773.             if(atof(szString1)!=atof(szString2))
    + N1 O  [) G! @
  774.             {
    0 s- x+ [. r% k/ p7 z3 D
  775.               if(!Dn.Connected())
    2 z' B% f/ y" K7 W9 j1 p
  776.               {& D3 \3 @) j; K/ T
  777.                 bFirstUpdate=TRUE;
    . b7 w  m; e% a( _  {
  778.                 dwTotalFiles=1;6 z% ^! }- K4 n- G
  779.                 dwDownLoaded=0;& o" e1 ]' a6 y* [
  780.                 bSilentStep=FALSE;
    . ]9 y, {2 G$ C% o
  781.                 bCompressed=TRUE;
    ! A. k; Z$ y( V0 I: R4 a
  782.                 strExtLocal=".\\DownLoad\";1 D# y1 u  R$ U: g! y
  783.                 strFullName="update.txt";
      L0 O( G+ P" N6 I6 [0 V
  784.                 dwProgramState=AP_CONNECT;
    6 q& {; V6 w, U4 H9 x9 ^: m7 O0 m
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % u6 t4 x9 \! z( ]/ n
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) ?, G3 H0 G4 i+ X5 k/ ^# V5 C
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ ~2 R0 o" ]. X" w8 d! N! K1 g
  788. . s% `- \; `9 C  a( }7 ?: M4 R# k
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 Q# q: J1 C7 M# X7 U/ s5 R- g2 R
  790.                 unlink(".\\DownLoad\\checkversion.txt");$ k, C* g2 S7 V' o- L+ v5 c5 p
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    6 r, y& \8 A  |' h
  792.                 {
    * M+ s* ]2 U) |" {0 m) f. E$ A- L& w" _
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
      H2 Q; u- Q% o7 @
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ' T: w1 \& E% g; b" |
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");% w6 [9 t, o5 C! I- U
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& b' {+ T+ }) |' y5 }" \# c

  797. 6 j* q9 V; ]6 d+ V; @
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# j% y3 {# V% u. ]( i# }  e
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & M! m$ w# U5 ^
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");; W1 n+ e5 B6 \! D6 W( d& \
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 C4 A# E2 b3 u/ q
  802.                 }
    8 X# \- _7 q! \- v+ q! z1 {- v
  803.                 dwStartUpSteps=5;/ m) j! }2 v% V' o5 z
  804.               }3 h6 y  {+ T) o" A% j6 t1 q* J
  805.             }$ Z/ i- r2 m% q  p. I
  806.             else
    % _0 f' t1 M. O7 h
  807.             {
    3 c2 {& u( Y9 D7 p' \6 j6 l7 f0 ^! e
  808.               unlink(".\\DownLoad\\checkversion.txt");
    8 u8 d1 [5 W! [, I2 I3 q% u# I
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: L: a& \8 Y9 i2 J7 {6 }
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ M  g  b6 y2 ?( ~2 S$ j  ?4 J
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");9 R$ }7 ]: ~3 V) x) i% a* u9 y: |' ]
  812. 8 r5 F( u0 G  `- Y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ e- M0 A' J7 Q1 |5 M# X
  814.               dwStartUpSteps=99;
      b7 _4 G2 n. Q) h/ E1 ]( n
  815.               bFinishUpdated=TRUE;
    9 U/ `# Z* v- L/ }& o9 m- d
  816.               bCanUpdate=TRUE;0 z  o4 j* ~1 N5 [7 }& C
  817.             }: |+ c' l/ Q+ u6 _! Z: Z
  818.           }% p6 h! [, l: h- Q3 i8 G+ `
  819.           else3 K. \4 ~/ t1 C: Y4 B
  820.           {  i. _3 ]0 o/ g. B- s. C, U; b
  821.             if(!Dn.Connected())9 L, F$ ^* t' g) c: _$ `1 k, G
  822.             {
    5 y% H3 s" @; j
  823.               bFirstUpdate=TRUE;5 w: K9 Z( V+ q, K4 F
  824.               dwTotalFiles=1;
    * I1 X$ c/ S: N5 J
  825.               dwDownLoaded=0;  U) `0 K: P$ k3 s) G8 w* U
  826.               bSilentStep=FALSE;
    9 C8 h. v5 g0 b0 ^3 t
  827.               bCompressed=TRUE;
    " |) `% a& x! w; n
  828.               strExtLocal=".\\DownLoad\";
    % D, \3 L+ ]5 B/ z+ Y5 L
  829.               strFullName="update.txt";% X$ ?) F' m6 L& A: q' S
  830.               dwProgramState=AP_CONNECT;7 N" m) i3 k$ H! _; l* X8 \
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");# d7 d! X; |2 s6 i1 `# v4 [2 I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " ]# o/ z" w5 o7 I5 M
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; X& H) @( \" {3 S+ X' S1 i* {: M
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 B$ A& @( A' J3 a0 L; a0 }
  835.               unlink(".\\DownLoad\\checkversion.txt");2 ^' k* l% ]3 H" {& O" y4 b
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . C: L# O% k1 X# E* b7 k; i6 [
  837.               {% ]1 h: c% U1 p
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    0 v( E( M6 x8 [0 j# J0 J) A
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    8 k: I2 W7 ~" k- Y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    , P: y) |* b. t
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 J- r9 j' _% @
  842.                
    , r) u/ z0 t: m( x. P; }: [
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 c3 f2 S( \+ V! ]9 `! ~# D
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& `, O. x% q* G1 x" b, r
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");9 g1 Z' k5 i/ X
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) C) g$ [3 ]7 \
  847.               }
    ) I- \0 ]) x7 W
  848.               dwStartUpSteps=5;
    * |. r* d% i4 R% f7 z6 m' Z
  849.             }3 J2 i: u6 i* p5 H7 n4 r, O9 \
  850.           }
    + z/ \3 ?0 j- `+ }6 z& i/ v# c
  851.         }6 m, f* c5 c1 z3 l
  852.         else
    ; f/ @. ~4 s, O6 e
  853.         {' Y5 l: O8 V6 R; k+ h4 P- q
  854.           dwStartUpSteps=3;2 n  ~( p1 \% i9 T
  855.         }
    . T# L/ y' ]7 W) R
  856.       }
    9 W1 x3 C+ i, u4 x/ M* t
  857.       break;
    * }( K1 S0 Z6 |. j' c
  858.     case 5:
    # h5 L$ u' A' j" j$ P
  859.       {" c# X7 z5 B$ w, i8 z: L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    , e# C$ h$ R: _* F# b8 C
  861.         {
    . Z" b2 w3 M3 L
  862.           int opt_overwrite=1;( e, S1 l- `1 Z+ p2 ]: Q
  863.           int opt_do_extract_withoutpath=0;2 G0 J5 z3 c  g" F
  864.           unzFile uf=NULL;
    : Q/ I, A. b7 N9 N. @* ?3 Z

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

, ~4 w1 ^; N9 U/ y
; Y# M8 w1 G6 o' R  Z0 y

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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