找回密碼
 立即注册

CSUpdate.exe源代码

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

" P- s- S7 B; v$ C2 X: Y
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ) S4 r- _, d1 }/ G* J; y
  2. //
    * f  F% ]2 n" c( X

  3. / G6 L0 `* }) _& k1 M8 K  e, c
  4. #include "stdafx.h"& ?0 B9 `+ c7 n# W/ Q
  5. % r. y2 _$ b: p1 i
  6. //#define UNICODE0 k7 @" X) I0 _% \6 _; a0 {7 q
  7. //#include <gdiplus.h>' `; Y8 Y+ E9 W; [
  8. //using namespace Gdiplus;2 c% J2 S  X' K6 [! Y

  9. * N1 a* d0 a( v' a: C$ h
  10. #include "RevApp.h"
    ' p. w/ b: l  N/ d6 ]' T4 N
  11. #include "RevAppDlg.h"
    4 q' t7 S9 Z3 C6 I* {1 G
  12. % a0 P. l5 P4 l, E% y" Y/ _, O
  13. #pragma warning(disable:4786)) i7 O- R: V" m' ]
  14. #include <map>
    ' p1 @* H4 K3 g; t; H4 r
  15. #include <list>
    4 S6 _4 w/ s; P% m' H
  16. #include <direct.h>
    6 D, i# C0 D2 L9 p3 s4 H
  17. . t$ t2 g$ X5 [5 z" A
  18. #ifdef _DEBUG
      n% Y( Z$ C  m6 I' W# W/ h
  19. #define new DEBUG_NEW9 ~$ \) U1 Z- f& t8 d: |
  20. #undef THIS_FILE
    . a, @8 p2 A* T! b: K6 y2 }# n
  21. static char THIS_FILE[] = __FILE__;
      f; k* z8 W9 s3 w! w6 K2 }
  22. #endif
      c+ Q8 J8 g5 _9 v2 J8 x) X6 V% ~
  23. #include "SkinResDef.h"
    : ?$ u' V; K; x- j$ F) k8 r. `
  24. #include "ChangeBG.h"
    / q) v5 x( L1 F
  25. #include "AFXINET.H"
    * S' N, O4 \/ Q( o( q, f: a
  26. ) d1 U6 |6 N! L8 M& O1 `
  27. #define TRADITIONAL_CHINESE 0/ k1 D- Z( R6 d' C* L6 x
  28. #define SIMPLIFY_CHINESE 1& n; B3 V: D* I5 `
  29. #define ENGLISH 2
    9 N2 |; ^- w0 J/ E" j7 B/ H- }
  30. int m_iLanguage = ENGLISH;# e7 R, B. m3 y1 S% E7 C) J
  31. /////////////////////////////////////////////////////////////////////////////; I3 K5 B" J3 U3 j( D& R
  32. // CRevAppApp
      @4 w& m- S# o

  33. 6 [7 U; X/ z+ t0 J9 v, _; e
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    0 M% K" j3 R8 r2 S+ L( X) W; p
  35.         //{{AFX_MSG_MAP(CRevAppApp)8 M; A, c" h' t7 u
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.+ k( W  _/ ]" z) G
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!, `& [( o) Z. t% O) E: V0 }
  38.         //}}AFX_MSG
    # ?# R. G" a5 o: u1 b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    3 R) `  A0 _3 n2 V4 v. L3 Y" L- y1 Y
  40. END_MESSAGE_MAP()
    7 \& ?5 G! f& ?. e
  41. & m8 j8 C2 M! F$ W/ Y8 ]4 s+ T% o9 |
  42. /////////////////////////////////////////////////////////////////////////////3 D4 n8 E( M/ `4 D% f7 Z
  43. // CRevAppApp construction
      O5 j( o+ ]3 L" t7 [

  44. ; g# B- ^2 ^" d- Q- Y! W
  45. CRevAppApp::CRevAppApp()1 W& c$ q. \! e6 E
  46. {
    5 o- t4 r$ Z4 _
  47.         // TODO: add construction code here,: r1 Z! ?: \5 q# e" U! v7 G/ p
  48.         // Place all significant initialization in InitInstance. t+ t- x8 x- ~: x/ e3 v6 }
  49.   bDisplayIsBig5=FALSE;" H4 t1 c# \. S0 r0 E
  50.   bRestartUpdater=FALSE;9 t, Q% _7 G; ]' ^. J& N; T
  51.   bFinishUpdated=FALSE;
    " ?, X0 x1 f& ]: K
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    " {8 t# o( }% R% v7 C
  53.   InitChangeDataBig52GBKS();4 p. |* n8 F# I1 P/ |1 W
  54.   InitChangeDataGBKS2Big5();/ F, K, u! {& Z9 `: ]
  55.         //0 @- L  m8 m* t! c+ @1 w9 x: R6 M
  56.         bClickRunExe = FALSE;
    , h  `9 k$ A, s1 X* ]0 B5 U- q9 v
  57.         //
      D9 M) L2 v$ i" F+ Z8 U5 l7 J% b
  58. }* ^, v3 i& X2 i& J1 o

  59. 5 x# K4 h# L) e9 e& K! v# O
  60. CRevAppApp::~CRevAppApp()# U0 Q' `( _8 A* S6 N& ~" `' X
  61. {
    * r! R8 @3 Y8 T
  62.         // TODO: add construction code here,
    + u* r: d' e% ?* N2 K( B
  63.         // Place all significant initialization in InitInstance
    & z. D8 b5 s& n5 k
  64.   EndChangeData();* w0 f) z7 F. ?! V, p1 Y4 E$ n
  65. }
    1 R, {* F1 I9 x. K1 p

  66. 1 K2 w6 T& y& E: o6 E
  67. /////////////////////////////////////////////////////////////////////////////  r$ z, ^% a3 g$ C
  68. // The one and only CRevAppApp object
    2 H4 w$ E/ t: r3 u
  69. 8 ~" ]% u6 f& m7 Q
  70. CRevAppApp theApp;8 \1 N: d: t( @' M3 l, _# {" d- G
  71. & s0 d1 i2 {+ }: v2 w
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    2 j% P; S1 {9 L8 P
  73. {
    % L' R9 X+ o0 r; v
  74.   int iEOF=0;3 k5 y# |4 }# y% i
  75.   char szTempName[MAX_PATH];
    , _7 P( j3 F! l- U  }
  76.   *szFileName=0;
    7 j9 L! q1 o! H% v
  77.   iEOF=fscanf(fp,"%s",szTempName);' J1 d2 P* P8 F
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('), g. B, |4 g' D* B) p! L
  79.   {
    1 J' i2 z  X' |0 @. p& K6 X
  80.     strcpy(szFileName,&szTempName[1]);
    # `3 M9 P7 L- c: u
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)% K% E4 q- F) ]8 p) G) Y' V
  82.     {
      n1 o5 Q6 S" @& d
  83.       iEOF=fscanf(fp,"%s",szTempName);
    5 m  R3 N$ y  \, g$ B) y. S
  84.       strcat(szFileName," ");
    " g, Z9 D& F$ W7 K, h; s
  85.       strcat(szFileName,szTempName);4 \$ j1 H: d$ b4 X9 C7 |
  86.     }% o1 f# B5 C" G9 j. m! u: d
  87.     if(strlen(szFileName)>=1)
    2 {' O9 s$ b" L$ E: x
  88.     {
    8 W$ y+ Q' S9 ]5 F6 N, A3 G3 p2 X
  89.       szFileName[strlen(szFileName)-1]=0;' d& J+ T8 d  y9 ~$ Z
  90.     }
    . N* v8 |4 P* i
  91.   }; I  G: ~. R/ F, B3 u5 w& _6 X8 s
  92.   return szFileName;6 c! J, Y' m1 }# O* L
  93. }
    2 G7 a1 ?7 N6 L' e/ a
  94. ' R. q# \. h* h- G% u2 c! P
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)7 e+ O2 I) j7 C8 K6 i8 l7 y" u! l
  96. {: T: U! h4 B8 b" g& }; m# ?, X- Y
  97.   FILE *fp;. S$ \& r8 m3 a% Z9 w6 t6 k
  98.   char *key=NULL;+ c0 a- N/ ]; i$ {! i+ i- S
  99.   char version[MAX_PATH];
    * B2 V! }3 g/ E9 b
  100.   LPUPDATEFILE file,olds;% U( Q( L0 L/ |( a% L* a2 M1 P2 ~9 u
  101.   std::map<CString,LPUPDATEFILE>::iterator p;5 C$ g7 D5 u% y
  102. ( s; A; `# s  R0 O/ {' d
  103.   UpdateList.clear();1 \2 e& g6 Z+ n: d( R
  104.   UpdateFile.clear();: f/ g9 ?) W# ]5 m* s) N- z4 t
  105.   if(GetFileAttributes(filename)==-1) return false;
    ) q) V. n4 k3 s7 \+ i0 S) Q) G, Y
  106.   if(!(fp=fopen(filename,"r"))) return false;
    7 m: G6 v" v7 |; K" p
  107.   fscanf(fp,"%s",version);  q3 {9 I$ i3 ^) [5 v/ L/ Y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }9 D$ U2 H4 D, }1 R
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ( f5 y! t6 k; k8 V
  110.   {# v/ Z# D- W4 v+ n; d0 S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 k. }- \  q5 q) c
  112.     fscanf(fp,"%s",file->path);7 t% z) W& Q6 c  R, H$ T
  113.     ReadFileNames(fp,file->file);
    & w. n3 U4 m& B$ O6 r* m( e5 h
  114.     strcpy(file->full,".");9 c( `3 ?: \5 S- W. Q* b
  115.     strcat(file->full,file->path);
    ) D  E. b  w: f  C" _: I7 m: ?9 d
  116.     strcat(file->full,file->file);
    " [! c4 g4 `: _# B; l
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())1 @: N% J$ m& D- q
  118.     {
    0 b( f1 C. N& s7 {( m. p' l' y  E
  119.       file->vers=(float)atof(version);
    ; k  m' y- j. I0 e, Y/ f9 S
  120.       UpdateList.push_back(file->full);) U- `) H3 f& l
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));' D' l; c; X8 ?9 Z4 n, @8 G
  122.     }
    . r  p0 q# J  F- G7 |" }# {$ e
  123.     else- ~- A, [7 q0 \' ?, o  }7 l! S
  124.     {" b( `$ a3 W* O* P9 g
  125.       olds=(*p).second;! ]" C5 E5 F; D/ B' y
  126.       if(olds->vers<(float)atof(version))# q9 B3 f5 }. H/ g8 [8 [& j0 H
  127.       {* D" Q2 s3 h4 B' Y* o: U5 D& U
  128.         olds->vers=(float)atof(version);
    7 l3 T3 ?# l, W' R2 N
  129.       }
    - A" T2 C4 D* Q
  130.       free(file);( x3 X0 m! h; v6 ?4 [0 Z2 H% l
  131.     }
    ) K+ Y, c( y( e7 X  R
  132.   }
    + w$ M& S& c2 T- h1 T  }. T% A
  133.   fclose(fp);
    ; X) y4 `5 b" S" c5 W: a* y
  134.   return true;
      g- A) P" K3 Q0 `6 T: I( T' h
  135. }, @3 W! m  H) I8 c) R' E- K2 W, F

  136. ; I! S- y! ^& ^2 u$ ?" ^3 J
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    8 d2 c% Q# y, E/ s& ]6 k
  138. {9 r9 a# M& |* J3 e' n+ r& a+ ~% c% G
  139.   TCHAR  szFull[MAX_PATH];
    + ]9 `5 I4 a, n0 ?9 _1 ]& K! B
  140.   TCHAR *token,*inter;1 Y7 q. p- g. w) G: p+ j/ `2 q
  141.   *szPath=0;
    / H( Q" r* T9 h8 Q8 C$ A
  142.   strcpy(szFull,szFullPath);( V4 w4 |# Y- T( i! L, Y
  143.   token=strtok(szFull,"\\/");$ ~& e/ Q. r/ ?+ ^3 M& P0 \/ _/ _/ }
  144.   inter=token;
    9 Z) N3 Q8 D$ o. a. b- N
  145.   while(token=strtok(NULL,"\\/"))8 C2 l* r: q3 |8 Z6 C4 \
  146.   {$ s1 V. G4 D7 p  {9 I
  147.     strcat(szPath,inter);
    - z7 X5 @, k; l  m/ K" N8 h
  148.     strcat(szPath,"\");# Y" n" w2 J& |0 ?+ R
  149.     inter=token;/ k# q% Q# W; i4 D
  150.   }/ S5 U7 i: d$ E4 \8 s: `" J* u2 \
  151.   return strlen(szPath);* ]- K/ K; b+ `3 K+ u
  152. }
    9 O' J. z% H- ^: D8 G! Y# Z7 x

  153. ; f9 L. C6 F2 }2 P1 r
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)/ W9 B9 b8 a% E& D! w
  155. {
    & Z+ p( q1 K8 I) x: N( ~0 `
  156.   DWORD attrib=GetFileAttributes(Target);. }5 Y- O  a, K: J+ ~
  157.   if(attrib!=-1). `" q- I' D  W$ s3 G
  158.   {
    * H0 b7 U) v3 h5 M0 i: T. O
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))6 e& W+ y& y2 V4 i/ B  b; x# j
  160.     {" U$ G  d' @1 [% m& T! y7 u3 Z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);. u  e. l9 `! @
  162.       SetFileAttributes(Target,attrib);  f5 k/ K' ]* S5 u3 {
  163.     }- c7 ~2 b# @+ e- c/ `* t
  164.   }3 n) b' u$ B$ ~" ^" L3 s% H
  165.   CopyFile(Source,Target,Erase);
      N5 ]4 K! P1 Y/ Y5 q4 L
  166. }: m' i3 `& T( T  o; k' Y% B+ ~7 C

  167.   X% ]. n8 z" ~* N
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)1 S. M8 R6 S, X* N- c% C
  169. {
    1 @" K4 b3 U4 j: ?- x) O: h
  170.      FILE *fp;) Y# a6 b; v; I$ H( {' Z
  171.      char  szBuffer[8192];" j4 h: v6 W) h2 I$ N
  172.   va_list  argptr;
    5 o8 d$ _: c  e* R1 o5 N: y

  173. : q9 D" f: {& T& o, S. W$ C
  174.         va_start(argptr,message);- J/ J5 I& \% h/ B. Z+ m3 k! D- r
  175.         vsprintf(szBuffer,message,argptr);
    # n) u' V1 Q+ n
  176.         va_end(argptr);  D- |2 ?/ }6 L& s4 Q
  177.   fp=fopen(FileName,"a");
    8 J  b# g) M5 P: f0 c5 h2 @7 V
  178.   if(fp)3 N- O& l& {7 n7 J* q
  179.   {. e, |' F3 m2 ]5 I5 ]* i
  180.     fprintf(fp,szBuffer);
    & Z9 w  A# r  B+ ^! E. i6 j' J
  181.     fclose(fp);
    & e1 s9 }) u. k3 Q9 n# g! j3 g3 C# y5 I7 U
  182.           _flushall();
    $ h: L: y  }3 U; b2 C/ R$ t
  183.   }, S$ T, @  t0 @0 |5 v
  184. }
    * Y% Q' p& S. F2 N6 o' G

  185. ' m! X. ?' O/ C6 i6 L
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / C1 t5 V) a5 Z( [
  187. {
    . U' u4 Y- `7 D3 @8 A: k7 p
  188.      FILE *fp;# H/ o) o8 }$ h$ C3 k! w
  189.     DWORD  attrib;# q$ s' G8 \) C+ J8 s
  190.   attrib=GetFileAttributes(FileName);
    0 Y; g2 i8 M" G) s& P( p0 d
  191.   if(attrib!=-1)
    - U+ S  p2 Z) n8 i; K
  192.   {; S& f6 T) ^/ r1 N2 X# W  _& o' m
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 {8 Q, ^9 `% R1 J' Y* ~2 |
  194.     if(!SetFileAttributes(FileName,attrib))
    8 ?$ a+ ^; `( f2 \1 y7 o
  195.     {
    7 ?0 `* ]! [& Z/ H- x
  196.       return FALSE;) n' v/ c  k9 z5 L! E
  197.     }# |- U& F- a# m7 n
  198.   }
    , L1 T' A. Q" a
  199.   fp=fopen(FileName,"wb");
    3 p5 L  P2 d* s8 {
  200.   if(fp)1 }: `7 u, V: S7 `3 V
  201.   {5 D+ h* J6 k4 Z1 S
  202.     fclose(fp);
    * D3 u6 b' b6 Z+ y
  203.   }* v# p, n# G- `/ z. B
  204.   return TRUE;- ?( F/ Q) Y, U4 @; f% Z% u
  205. }
    " W( R6 `) g! @. e) g! O3 y5 `) B$ i
  206. 8 i) r0 I; z$ d6 \# z4 a
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    . e6 A  `  M2 _  ~  K' P
  208. {
    . q/ W1 W/ Y2 `9 [! x9 Q8 H/ u
  209.   char filename[MAX_PATH];
    4 \+ L! b; A5 |. p0 B6 n+ D
  210.   LPUPDATEFILE file,olds;, N7 d  H6 ^6 S4 ?& t/ B  s5 r
  211.   std::map<int,CString>::iterator i;- }0 ]: E. D* x; Z( V1 v
  212.   std::map<CString,LPUPDATEFILE>::iterator p;0 Z  a/ C5 e) g; r) W
  213.   std::list<CString>::iterator l;6 R, ]$ V8 x5 b1 q
  214. + t* s) O( |% [
  215.   if(bFirstUpdate)
    * x" S, n7 i1 f$ e( M/ a
  216.   {
    + W/ \: E  B1 V* y
  217.     dwCurrFile=0;
    9 _5 o8 F/ \1 s1 {6 X* C
  218.     bFirstUpdate=FALSE;0 \: Q, K/ _# h. ]' Y
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# C/ ~2 y* l- |8 L* |* v
  220.     {) l) s" m9 b4 p, @5 q% N
  221.       dwTotalFiles=UpdateLocal.size();9 O% U0 n# Y3 {  `+ d9 K2 `
  222.       dwDownLoaded=0;9 D+ K2 h6 M& E. x0 u' _
  223.       bSilentStep=FALSE;/ Y6 C$ L- ]8 b; Q# m' }. B
  224.       bCompressed=TRUE;
    : U2 N5 l* r( \
  225.       strExtLocal.Empty();
    , o. B6 V. h( _- ^& R! }) Y
  226.       strFullName=(*i).second;
    7 n1 x5 N6 a  F4 H% g& r' l
  227.       dwProgramState=AP_CONNECT;
      N7 x! x4 h9 J4 u- G$ d0 F
  228.       return TRUE;
    7 X4 l: A+ ]8 |& W* }7 q9 C5 ]
  229.     }
    & {/ g) a$ \, s) U: ]$ s& C* b
  230.   }+ @/ N) j" Q+ Z7 R! @
  231.   else if(bRestartUpdater==FALSE)! ?% z9 N5 s; u* S$ q% j4 X
  232.   {$ _0 O; _4 x; N" t& }
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()), N) @2 [* [6 m; E. w
  234.     {
    9 V$ {  L" W5 n% N  Z/ H# F. t
  235.       file=(*p).second;  F% w/ X0 U3 E
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())7 k: Q. M1 i+ K  h4 s! T& t
  237.       {* n9 r+ ~. Q3 a- k. ?. A8 T
  238.         olds=(*p).second;8 i' i6 S- q( Y5 L
  239.         olds->vers=file->vers;
    ! V5 m# ]% t' P& w, [
  240.       }% k+ S# q" M" N3 J6 M8 M9 \
  241.       else
    + f- E4 Y4 W# l
  242.       {
    % U( s) {' b4 O9 n
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 O  V7 l6 K0 T7 X
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ) S6 D0 N6 A2 [- S. f4 Y( B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    : I9 s2 O" d$ F* G, h9 U
  246.       }
    8 N- c7 m1 K( _; |6 v8 h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    & Y7 L* v  j0 I( e4 E
  248.       sprintf(filename,"(%s)",file->file);% k& m/ U$ R& H9 R- ?. r* R
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    4 j  S4 \; s: r; ~
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }; l; O' |( ~5 u4 R3 ^! m' i" j7 U% f
  251.     }+ @, n1 M2 U& ^- x9 ~2 Q7 k9 j
  252.     dwCurrFile++;
    ' }3 l- `- h# B5 D; G" a" P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - R$ y7 s/ V& P: [! }2 G2 I
  254.     {
    ( U& V5 [* N4 u4 r
  255.       bSilentStep=FALSE;+ P' K" h6 ^5 s! I4 N3 a
  256.       bCompressed=TRUE;  N2 z3 |' s0 ]" h( f
  257.       strExtLocal.Empty();
    # _- p7 q1 ?2 i3 c' R7 u
  258.       strFullName=(*i).second;
    % k+ x0 v, t% g3 S, A: U- {
  259.       dwProgramState=AP_CONNECT;6 j: Q! A* z* I% B5 x# F
  260.       return TRUE;6 ~) [) y( ?$ K0 D% V: S* O
  261.     }# E' q% Y/ j: K- N
  262.     if(!bRestartUpdater)8 r' d, j+ y  H2 E
  263.     {* z# p9 s! Z$ c/ \
  264.       int iCurrSize,iFileSize;4 t' G  @- d: N+ \; x
  265.       iCurrSize=0;+ ^" }( M+ T6 a2 K! N9 ]2 T0 |6 ?
  266.       iFileSize=UpdateList2.size();
    " r/ X& J$ i$ v" H* A, T
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    2 I$ t% A$ \6 `5 H* A/ y) J5 W
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    2 Y' q7 ?6 ]5 \; S. [4 C+ J
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    5 u$ G, V; n# U" c% V
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 D6 ~$ `( l1 J" C! J1 `- }
  271.       Fclearf(".\\update.dat");; d1 `# B8 n; o0 x  j: v
  272.       Fprintf(".\\update.dat","Bloodyf\n");! T- c0 P. D, }3 s
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 @0 g+ G3 N! b3 {0 y
  274.       {
    0 ~" F7 y+ W5 g+ b6 Q/ N/ E
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ) C6 Q- C  D+ K* ]& U( ~7 `3 M
  276.         {
    / x3 L9 ]' ~$ v- |% c. e7 U; N. D
  277.           file=(*p).second;
    . l2 \3 ^$ K# J+ Q3 l6 \9 w0 v
  278.           sprintf(filename,"(%s)",file->file);
    1 @0 F' ?3 J: t
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 d8 j) [4 M; q% e& H! @
  280.           iCurrSize++;
    5 B' i) l; d0 M% B+ U7 N3 o, t
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));% R, D, d: s9 v. {4 @7 d
  282.         }0 c$ ]5 Z5 u4 U
  283.       }( h0 F! ?. _& k& k* J0 M
  284.       unlink(".\\update.txt");
    + w+ f8 c7 c, B$ I5 V) S8 k7 {! H
  285.       unlink(".\\update.tmp");) ?/ C% z- z4 G
  286.       Fclearf(".\\checkversion.dat");1 L# M5 R4 f+ [9 U% V
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);: P& l" m* M5 V" @* N8 R
  288.       if(UpdateLocal.size())
    6 z' a+ b5 ]0 S) m7 s5 D
  289.       {
    + P- Q' i% L/ ^- @0 S( N
  290.         UpdateLocal.clear();
    / }: m% E. m& l
  291.       }3 Q  z8 s( M  ^+ f* ?
  292.       if(UpdateFile3.size())0 ?6 A7 S# C0 i2 ]0 d6 }
  293.       {. K8 r5 [0 J$ \, [# P: D/ r
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & Y$ q) A- l7 z, _* Z
  295.         {
    $ b% l: E1 V0 q3 L6 ~, k! `
  296.           file=(*p).second;
    ' d& {$ _: O7 ?7 H6 q7 t
  297.           free(file);
    4 j' a4 {. y1 S" }  b
  298.         }& @. }0 J4 |" f2 B9 ]
  299.         UpdateFile3.clear();! q/ M! ^" e% z. k7 u/ A0 t* j
  300.         UpdateList3.clear();
    . S9 ^1 ?! Z# R
  301.       }
    5 K7 T9 Q8 t5 m& ~7 F
  302.       if(UpdateFile2.size())% {# _1 S$ W- \
  303.       {0 j; f9 i. o$ U( N# u. I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). g/ X0 X' _' H7 w8 n8 K
  305.         {
    ; e3 S) N1 V# U" ~: I
  306.           file=(*p).second;
    6 D' X. h+ Y, u( I; I2 S; q
  307.           free(file);. o& Z% g/ i) t
  308.         }
    2 p4 f+ ?) ^- V1 d1 B! \
  309.         UpdateFile2.clear();0 v3 w/ u  W* b
  310.         UpdateList2.clear();
    9 p' b3 {: w! ^
  311.       }; N- K" b( C  [
  312.       if(UpdateFile1.size())4 [" Q8 N: m; e: L& Y" v' ?1 V# S. ^
  313.       {( Y5 l8 T: M5 J3 r& l( N% j
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / ]/ r. f/ |; N9 ~+ B6 |8 ^- H
  315.         {/ ?! ^  o* o$ }5 d4 y- u
  316.           file=(*p).second;9 c. s* z8 w; n* A9 [: X7 n/ F
  317.           free(file);3 B& m9 O& H+ R2 A6 K5 X4 ?
  318.         }
    6 r" \) x# _* y1 x( Z* ^
  319.         UpdateFile1.clear();3 w* n! S- ^3 I5 l8 j; z' {
  320.         UpdateList1.clear();! g$ i- F8 Y1 R  G0 ~6 E& m
  321.       }
    . |5 }. \8 t: I% ?! p
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));# y# m4 a& Q' r
  323.     }
    3 C! `- Z4 K7 O1 |/ j, R
  324.   }( }' ?- ~$ O* B6 y* b
  325.   return FALSE;) \, B& w! i" E) f! W
  326. }
    - F8 b9 x+ {% |2 E9 O8 ?

  327. $ ^$ _# H3 }) D% Y* z. H( b
  328. void CRevAppApp::ClearAll(void)& U8 U  o. w/ x* ]- }
  329. {
    / w1 a- K( n7 N
  330.   LPUPDATEFILE file;
    / W6 X2 i8 i- \  j6 V6 Y! g$ x) x
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    . {3 R' j' u2 U; Q

  332. 9 ^# s+ B/ y1 t& K8 L
  333.   if(UpdateLocal.size())
    1 `  y5 P. h3 X( T" I, N- s2 m" a" k
  334.   {
    5 y( m& P' S# W5 m# l/ e
  335.     UpdateLocal.clear();$ b: m7 S) [6 B4 W9 [7 a2 k* U
  336.   }4 l1 b8 }" U/ ]2 u6 ^
  337.   if(UpdateFile3.size())$ L- Y4 w- K' P/ q: s! i6 a/ \
  338.   {1 H8 H  F" ~' z5 F9 F1 V  w
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , D! x$ `4 J/ d9 t5 ^
  340.     {$ j, J: [- K% f# P- O
  341.       file=(*p).second;
    & U2 h) F3 d$ X7 L6 z4 ]( l
  342.       free(file);
    / g9 w0 Q; Z5 I  Y- W
  343.     }
    , E) K5 y* j, W# u) z8 |, j0 _% N( K
  344.     UpdateFile3.clear();
    / B2 q, e2 x4 z5 u
  345.     UpdateList3.clear();
    3 C4 |% G3 X, q# L6 w) i3 s
  346.   }
    0 e1 b$ H% Q! \
  347.   if(UpdateFile2.size())
    6 ?1 p& F6 ]+ D% H6 `
  348.   {
    7 X) u6 E  S" c1 ~8 e% k. Z8 Y3 W8 v
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # t, v/ U: R" {# _% `
  350.     {
    1 O; {: {0 ?! R/ A
  351.       file=(*p).second;# Q$ P' H  X8 E- M: ]( M# a
  352.       free(file);
    ' \) |5 p$ h. ~5 k' F/ t
  353.     }
    ! z& a) P1 U% D: Y$ k  S
  354.     UpdateFile2.clear();, x5 m9 ]9 q/ y- ]
  355.     UpdateList2.clear();
      V; ^, u6 Q1 X% v
  356.   }4 s0 E. |1 \- u6 d8 q
  357.   if(UpdateFile1.size())% f5 \% |& K; I) L" z, r' N
  358.   {' ?: u" g" |! |7 o/ h& q9 @% y1 r" P
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    2 C  Q0 K6 S  b5 g
  360.     {
    " t" ?5 |* g1 V
  361.       file=(*p).second;
    / \! R+ f# ~' e6 u" T3 @
  362.       free(file);
    ) {; i9 o5 G' Z  J1 d$ w2 q
  363.     }/ B* t2 H) e6 ]% q6 L
  364.     UpdateFile1.clear();5 z4 r0 ]+ t1 w. w; {0 V
  365.     UpdateList1.clear();
    8 R) o2 `& }4 w$ T; H
  366.   }
    ; j6 i) o9 N$ S( h# d* t
  367. }  
    ) ~$ W+ X: `. Y) U
  368.   
    ' n! E2 Y! \; |9 B" U* g
  369. BOOL CRevAppApp::CheckLocalVersion(void)
      ?) @" g7 x* Y) d0 ]- {# b8 R
  370. {, p# j5 s! v3 y6 K. ?
  371.   int c;' T) }  [" K1 C
  372.   LPUPDATEFILE file1,file2;$ N" w4 h8 v& V( g; g: Y2 z
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: i- |1 J" m, w' x
  374.   std::list<CString>::iterator l;5 V( w: y5 T; x) e9 _7 i7 e* Z
  375. 9 @6 m* E, l) B% c! U- M4 r
  376.   UpdateLocal.clear();/ y; b$ N; u8 Y1 W3 }+ m
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 H+ @' K% O! b6 s/ |
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    0 A8 A3 o, p- j2 P" W$ Y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    0 @. a6 J. C  D  _$ v
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);  F3 ?- [$ n. h  |
  381.   if(UpdateFile3.size())
    + @, G4 Z* p- f7 ?( D
  382.   {
    * F* e* W4 J6 {- r. P6 U; ^* R
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    # [8 B+ A2 D( p. Z7 h: e
  384.     {- I9 c& C6 x" Z( x% a
  385.       file2=(LPUPDATEFILE)(*i).second;* W) W' s0 O* L6 x; O1 o
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# D- y9 t, w$ ~2 p# \  A# }' x
  387.       {) W5 j# d! y+ z/ x* n' ^
  388.         file1=(LPUPDATEFILE)(*p).second;
    5 f5 l0 C2 y1 p0 l+ P5 j) B
  389.         file1->vers=file2->vers;  m- W# T/ x3 _5 I
  390.       }& F) P1 Y2 f; l" M3 `0 r4 b  ?
  391.       else
    ' a, _6 x" F1 l, y+ W6 K
  392.       {' m, L) i6 z  C* `  {/ X. W+ K6 |4 R
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% g- V. B! ^4 T( ]1 M
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    " X- }- K% \2 x. ^
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));' Q  w- f0 j' u
  396.       }1 p0 z0 d, m  \) K: z
  397.     }
    5 ^6 \. f. M. M6 A( Q# ~
  398.   }4 \. N' ?/ x9 \' r  b! g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 W8 H0 I& k( p) x; ?, o; j
  400.   {/ c) a2 Z8 Y/ g$ {# }- S/ X7 d' Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    . i( W! I# q- P* A; n
  402.     {
    * A2 m; n! \: G! d7 S) J% a" Z
  403.       file2=(LPUPDATEFILE)(*i).second;
    4 J8 V1 f) h6 W, r" N
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 O# u- |* b5 k* p
  405.       {
    1 H; m3 W. j. i- M$ _3 ]% e
  406.         file1=(LPUPDATEFILE)(*p).second;
    4 _' ?6 m0 H% X- c6 a6 t
  407.         if(file1->vers!=file2->vers)
    ) u2 g% X& y/ P& s2 d' o/ Z
  408.         {' d2 w9 e5 ^: A4 o2 g9 ?. L
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 v" j' R: Z& t8 S; q" p6 {
  410.           c++;+ V4 j  Q0 R0 c
  411.         }
    0 |, e0 G4 j# X4 t- T
  412.       }
    ' d+ G. a8 o8 r
  413.       else
    - X  c( ^' ~3 s$ J
  414.       {
    2 C! H5 _8 {* Z% [4 Q3 E
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' a3 K& T. \6 Y+ g
  416.         c++;
    / ]4 D  ^6 J5 g5 ~2 Q" q, o
  417.       }/ `9 s1 L2 w" I" Z. D, y
  418.     }
    / n6 G! _: i7 M8 @
  419.   }7 g2 q* l$ d* E9 q% Q5 _, h
  420.   unlink(".\\DownLoad\\update.txt");
    * A, Z$ G  `  i' w
  421.   if(UpdateLocal.size()) return TRUE;  S8 K( ~8 U5 q% g. N1 B; M
  422.   else                   return FALSE;$ A* _4 L' ^" U8 A) |" K( x2 D
  423. }
    + e, U: w: G6 z4 ~1 r5 F% K2 Y+ I1 l  w

  424.   x3 F8 O7 P- w
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"; O- H  d' A% X) F$ i& j# ?6 ?
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"! j1 a3 n4 g, k8 b6 w$ T% d+ Z

  427. ( D. Y2 m6 H4 e

  428. " i7 o3 G' F8 `. t! ]: g1 J

  429. 9 s( O+ ~$ ]) ^$ X: k+ E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" c) e! A8 L. r* k7 S8 h
  431. {
    9 U1 T1 ?( X# {/ L
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;* I7 A8 H/ W# {6 t- N
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' I! Q. n, V. ~+ `
  434.   {
    * _; f$ l# d3 u% h) v7 _' f
  435.     char szLanguage[50];
    . C7 K+ P2 Q4 ^
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 C, o- Q0 w* _/ B9 y% I7 `
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, ~9 H- x# ]0 Z6 [
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # J+ O+ `+ ]8 f) r6 Z6 P3 l6 x
  439.     else                                   m_iLanguage=ENGLISH;
    6 u6 i6 U& s" x. G1 p
  440.     char szRegister[100];# U5 g" i& P% H7 c/ B9 X& c
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 [3 q* l- {8 ~7 F) @" {: Z
  442.     strRegsName=szRegister;
    - M4 i, x0 s; N0 v- m1 o
  443.     char szPatchURL[100];
    5 }$ j0 M/ T, T/ B1 U. h# ?! C" N
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : t7 P) ~0 g! l6 l" s& e+ ]( A6 a: V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 x$ {, I8 x4 \) E5 e
  446.   }2 d& \# s" d6 B. ~% `5 _+ M1 ]
  447.   else" f0 b; C! O" `' ~' t/ d0 u4 [$ V( p
  448.   {! z0 ?* h0 D1 G8 B
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : B& @& z$ [7 ~/ I& ~; Y0 L$ A
  450.     strRegsName=DEFAULT_REG_URL;
      o- J; J1 e8 x# h
  451.   }; X# Q5 W5 c- S3 A
  452.   if(GetFileAttributes("hosts.ini")!=-1)+ h6 r; Y0 Y! \% l% |
  453.   {  _/ o1 r5 C1 V- r4 {
  454.     char szIP[50];
    " Y" v; x( {/ G' J6 ~2 i; z  m
  455.     char szDIR[300];
    0 F) L: w: [  A
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; w% T8 v' k1 G- N. }$ \
  457.     {
    7 n4 @8 F+ W' n% m6 p9 d# Q* p
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");% y- `9 c9 S4 Q8 L- v
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");5 M: N* i$ u* s
  460.       strHostName=szIP;6 f) W# ]) h4 g& E% Y  ~: I; }- z
  461.       strHostPath.Format("/%s",szDIR);4 N5 b: L  @, o7 Q, }3 L: `1 D
  462.     }7 M! f4 V. m9 a# T8 ?* U
  463.     else
    7 ~$ n, \% r* `: ^
  464.     {& w2 p: w# E0 t. [8 f: D: @% ~  u
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & `5 y0 `/ k, ^4 S7 |
  466.       {: _9 b: ]" p5 L2 ~( ^
  467.         char szLanguage[50];
    3 H8 i- y9 e" O- U& X
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' X7 W6 V0 V2 c$ I0 ^2 y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* y3 e0 S. O9 H# e* Q3 j
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ D* m3 e2 x* e
  471.         else                                   m_iLanguage=ENGLISH;
    6 K" i8 E: Y$ v/ V. U
  472.         char szRegister[100];6 T! b! {. Q: g% r8 Z
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , o/ M/ A9 a) c+ P
  474.         strRegsName=szRegister;
    5 Q- ^! J7 x7 U/ ]+ t+ L6 h  Y
  475.         char szPatchURL[100];
    # }* Y% C' u: H- i& y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( x% D2 L" T+ B" T6 J/ B
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * K: @2 G& r( a% L6 a& p
  478.       }3 F, E8 H  {+ B# P/ Y
  479.       else
    ) o' r$ U; u4 e5 U; v* f  o  U' H
  480.       {- N8 G; @  d2 g# J% u
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 D4 g! H9 E" q* F1 z' t1 y
  482.         strRegsName=DEFAULT_REG_URL;
    $ B2 s! ?" q0 j
  483.       }& {) }% m& A) C3 a. l. O; b
  484.     }0 `& j( ~) ~) U- f" B
  485.   }0 F0 M, ?: {- v0 h5 |3 ?: \# Q" Y# B
  486.   return true;
    & p4 }9 C  ?* F$ B8 l. d8 ]
  487. }
    ( _8 G9 C) B4 P  s/ R
  488. 7 [) p- v+ z5 T# C, X
  489. #include ".\ZLib\unzip.h"  }) B- S# a3 I5 N5 F6 X9 w+ U. N
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    & o$ F% j6 S: H
  491. /////////////////////////////////////////////////////////////////////////////* o5 r2 L4 s2 z, h0 U; c3 E  L1 j& f
  492. // CRevAppApp initialization4 [2 K4 |" O( F% F6 R  d( Z

  493. 5 q# b: Q* z1 `4 g! `! y2 ?9 J6 m
  494. BOOL CRevAppApp::InitInstance()
    # ^9 g& e3 l" w, G6 _
  495. {# G$ X& J: }& I' D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    : [5 S+ |: x3 k& Q1 T
  497. 6 P2 M% _# u) _  W" F8 B+ f
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; Q% P0 T! g$ W" c6 L8 A# T: ]. }# T
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    4 N5 q8 u3 T; p5 A4 L* M. G
  500.   {
    7 P2 x+ P4 h' r/ X2 s, q) w+ D4 f" V/ ]
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");7 Y3 B# j! ]) @! C* R: j+ P! d5 Y% g
  502.     GetPathFromFullPath(szPathTarget,szPathSource);5 @. m, \3 B) x! ?& y& J
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))8 H& K! ~; x5 D2 c, z
  504.     {5 W) j1 A1 }/ Q
  505.       strcpy(szPath,szPathTarget);
    , s9 ]# U" g8 g( v7 P( r3 R% b
  506.       SetCurrentDirectory(szPath);
    : K) P, J& S# T% k# Z3 q! u/ w" @
  507.     }1 e6 i. G3 y- E+ |8 S
  508.   }% x' ~' W  D; o) l
  509. #ifdef _DEBUG2 i/ {) e9 ~8 f) N& o& b* Q' R! y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) U2 u. R: \8 _7 R8 }: ^
  511. #else: ~, T' p% I2 T: N5 m, W/ w- z! z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! q8 f3 Q; x! D! K$ Z
  513. #endif+ A3 s. C" p, ]% Q  [9 m
  514.   {
    3 J( A: P1 u$ {
  515.     char tempFileName[MAX_PATH];
    + B3 l6 J! E+ s0 d8 c
  516.     strcpy(tempFileName,szPathSource);
    " ^9 }- k; P2 K( h1 N
  517.     tempFileName[strlen(szPathSource)-12]=0;
    4 H; n$ t2 R8 d8 l
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( |; O3 q- q  c" k
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);7 O$ Q8 n# u" N- [" U! a, N0 [
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    0 |. Y) V; n; [0 P. V8 q) a
  521.     return TRUE;
    2 ]1 n1 v0 ~3 W. m
  522.   }
    3 C, f5 K' P. i, p* A* A+ u
  523.   // Nuke 0118: Delete run.exe
    $ R9 ^( V3 T# u( f  _; j
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    % L8 D: ^/ j$ V0 E' b" _
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");, l& e+ S2 ^/ ?) s9 b# H
  526.   if(!ReadCfgFile("Config.ini"))
    0 |3 Y8 f7 j' s& s  L
  527.   {
    4 V! K- b1 E( x; R. o
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);% t) `% n; L2 v5 a
  529.     return TRUE;+ J3 Z$ i* R; V: U2 R  ^
  530.   }& o: o& C  N3 X% t% s* B
  531.   HANDLE mutex;4 X1 @) u4 C) i7 |7 O0 L
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    , F9 R& j/ e4 t; L5 M% Z+ D
  533.   {0 s% Q" y  @% ]
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)5 W2 u' |6 C/ u* Y* ]7 P" A
  535.     {3 S- J+ o0 ?! K' ^6 h4 G" \9 k
  536.       CloseHandle(mutex);7 J; M- c! Z2 f8 U3 _  G
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);% H( S2 f8 U( X; d
  538.       return TRUE;  r) A9 p$ }9 Q( m) ]1 H* ^; u
  539.     }2 f! P- M4 g: h  T/ F; A& G
  540.   }  
    8 \9 W8 |& I7 p6 U, X( A7 j5 N1 K/ M
  541.   CloseHandle(mutex);
    ' {& D0 {, w! E  O- v5 e% U

  542. ' Y, ^" }4 R3 s' U2 o$ E( M$ Q" f
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    & O/ l. t% ^9 g& m* ~
  544. $ q, s% c0 q4 q! z6 w) P
  545.         AfxEnableControlContainer();
    3 U& _' w: t7 ?, r: ]/ e5 @
  546. & E8 Q* o3 V; [* u
  547.   bCanUpdate=FALSE;
    ! I5 z5 G# h; c: g# u! ]
  548.   dwStartUpSteps=1;
    2 S8 ~/ k$ u1 ^' Q
  549.   dwProgramState=AP_NOTHING;! G* |0 R; |6 F. y' z- e" o# \

  550. % q) ?7 {( p1 S+ ~- k0 L
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" x0 u! K1 {$ y/ w  q+ l& E7 }
  552. 5 [* Z: v- N# u. V
  553.         // Standard initialization
    ! d0 e% v; r( J4 }) ]
  554.         // If you are not using these features and wish to reduce the size# u, V' X# e" p3 C% A
  555.         //  of your final executable, you should remove from the following
    " }, F" W: U, j* @* C) C
  556.         //  the specific initialization routines you do not need.
    - }+ i4 X7 v1 P- j; y& F
  557. 4 Z# \, w, i# Q" O  U! z, M
  558. #ifdef _AFXDLL2 c1 l9 J- S* p1 c4 e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ) D: ]& D* R2 C1 g! |
  560. #else  ^( K! Q$ b- g% M1 ]# z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically& [* v; [" Y( j  |
  562. #endif9 |" `6 I3 g0 P& @- X
  563. . g& j" |, H" |- m5 G
  564.   dlg=new CRevAppDlg;
    + t" t1 l% d  R; V
  565.   dlg->Create(IDD_REVAPP_DIALOG);$ E, e5 s& r1 t" Q; n
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    , h8 V! }7 W/ |  a( ?; B. o$ d, g
  567.   m_pMainWnd=dlg;
    : Y/ \9 g3 W( `' e
  568. - e+ g, P2 L2 I, W: J( o
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    8 T. s: S9 l& U: s

  570. , Q  c7 p' w' G) F4 B9 V0 I% \
  571. //  GdiplusStartupInput gdiplusStartupInput;1 z. ^6 a. U3 c: B# W3 F
  572. //  ULONG_PTR gdiplusToken;# [  @9 R  T/ j! D+ W* R
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ( e" ]5 p- {" h; i% U; c2 X
  574. 8 x+ C& p" @5 V* V& {. K
  575. //        CRevAppDlg dlg;6 V0 ^# \3 o" ]& G# j1 Z, X2 u$ l( Q
  576. //        int nResponse = dlg.DoModal();
    & g6 x5 X$ L% c
  577. //        if (nResponse == IDOK)
    - V. C. p6 A+ ]
  578. //        {
    $ c' ]8 c5 S) x
  579. //                // TODO: Place code here to handle when the dialog is+ O% O7 j0 T3 J
  580. //                //  dismissed with OK6 q& m; Y0 {' |5 n" G  w' j
  581. //        }
    , u# s9 S- J; n0 j: ~  r
  582. //        else if (nResponse == IDCANCEL)
    + p" e, V4 p  j3 z$ q  A
  583. //        {
    , H* h9 b6 L6 O2 k- p7 p
  584. //                // TODO: Place code here to handle when the dialog is' ]( c1 ^2 _- f1 Q4 t
  585. //                //  dismissed with Cancel
    - _! {( k6 n1 I" y" B# O
  586. //        }
    7 H# l  S/ {$ k' Y

  587. & \. ^6 m4 l+ g$ X8 `& h
  588.         // Since the dialog has been closed, return FALSE so that we exit the/ F$ p' ~+ @0 y0 t3 K7 ?+ r
  589.         //  application, rather than start the application's message pump.1 ^. g% [: X7 n
  590.         return TRUE;( e7 B6 q4 O7 d7 x9 Q. p, w
  591. }/ {6 Q2 _; B, T- b
  592. ' H9 p  k/ z- L1 }5 P  l9 ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ; Q3 q- L& ~$ c  x+ I
  594. {4 Y4 E3 F  S! @+ E) T2 G
  595.   int i;5 s( k$ {. Z3 R1 F$ V" V
  596.   char *szRet;% k, T1 o, z: `' y4 }( X

  597. ) {0 X  m7 B: f  i8 o
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    4 r4 A* s# O8 B# C; j- u. Q3 g
  599.   if(sztoken)8 a' ~0 H5 L% X: y# E  O
  600.   {; ~2 p6 d) D7 d- W
  601.     szRet=&sztoken[itoken];
    ' N. `& d/ T$ y/ `, v0 K8 m
  602.     while(sztoken[itoken])
    / y# k% E3 K) R5 Z& Q  P
  603.     {' S3 C' o* k" M( r7 \7 |5 y2 ?
  604.       for(i=0;i<(int)strlen(token);i++)7 L: U! v- q+ j( Q
  605.       {" W; ^- F/ p' Z$ r" |+ ~: w# S
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    3 w3 G- T% W. P, `- ?( l# Y
  607.         {
    0 B* v/ d3 B: |5 v" P4 y
  608.           sztoken[itoken++]=0;
    ' x' o- P% b, Q/ D
  609.           sztoken[itoken++]=0;$ K9 o! ~, G4 C+ P
  610.           return szRet;8 v; S3 B9 p2 R+ e4 p4 _5 q
  611.         }9 J4 a2 i  l& d6 b( v3 A, n) L( [
  612.       }* |1 b* Q- ^' V- S/ b5 v
  613.       itoken++;
    3 q* ^4 |; O0 S( ~0 e: }  H
  614.     }
    8 H/ Y7 W* s, [$ y& g- ?; s
  615.   }" g$ D! L1 A9 P* E5 t
  616.   return NULL;
    9 B5 H' Y/ V5 K8 o+ d9 d
  617. }. B1 d' U# G" C( F& w
  618. / C+ m) j/ t: `
  619. void ProcessProc(long Total,long Current)
    * n2 z5 q4 x1 G8 [# F6 k/ `
  620. {2 d$ _' @& M8 z+ w% Z7 U" k: U  A
  621.         MSG msg;, H0 G# p$ ^( d4 J* B& V
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);( }. ~# {; G9 L& L  F2 o
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));/ |5 B6 _# Z6 H. q: U
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))+ H1 h4 r( K9 L
  625.         {
    ' C3 Z9 F# z& X& O* v/ z7 a$ I  ]
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ; O3 y1 o7 P$ [& Z
  627.                 {
    / g( U5 l+ l8 |0 E; h5 J3 s5 @+ A
  628.                         return;- j2 ^5 W3 a- ^+ p$ I
  629.                 }$ Z' j* m0 K; e6 s# P4 i; M
  630.                 TranslateMessage(&msg);! k% U3 C2 {8 N/ {5 |" O
  631.                 DispatchMessage(&msg);
    5 a+ t( d  f/ Z3 H: |2 k/ m
  632.         }        - f  Z; h5 y! W- f1 w7 o
  633. }- [5 ~0 M2 i( l) h
  634. . x: h- G! {0 ?6 G7 X- ~" n
  635. BOOL bFirstChar=TRUE;3 k. s0 }. n/ I  A
  636. $ Q+ T, w% R; o3 J. ]9 I
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    3 d7 a/ A& u6 J
  638. {/ ^% |/ m  i% i& C# g
  639.         // TODO: Add your specialized code here and/or call the base class
    2 {# b: M; I! _5 g9 g0 c2 y5 N: j
  640.   switch(dwProgramState)% r4 O# t  x% a+ v4 ~9 x
  641.   {
    - j# |& j. N! N7 j+ r/ y6 q
  642.   case AP_NOTHING:
    6 K, i4 _0 B; R3 ~' Q$ s
  643.     switch(dwStartUpSteps)- F2 K$ g+ @$ f- G- h
  644.     {
    7 |; \$ ]% F( C  W, h0 |+ y/ v3 w
  645.     case 1:
    ! S- B- k% r4 h( j! @% e
  646.       {
    2 _: |8 A' a1 [& [9 _
  647.         int i;; `% f# y$ Y1 J9 u
  648.         CDC *pCDC=dlg->GetDC();
    9 q: [- C/ f5 j( u
  649.         HDC hdcwnd=pCDC->m_hDC;9 [; |& T  L! @' N) |" X
  650. //        Graphics graphics(hdcwnd);3 u! n4 g4 N  @$ `" W
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");- u9 W, k6 _. u, T( x' {7 Q' U
  652. //        INT iWidth=bitmap.GetWidth();
    ) V8 L  r! p5 a% w7 Q9 L. |6 E
  653. //        INT iHeight=bitmap.GetHeight();' n& B; P( i  f" J  b/ \
  654. //        Color color,colorTemp;
    : Y; v7 _/ B% ]; x! r! V* |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    0 q/ ?# y* P2 z6 U. [7 D: k
  656. //        {$ Y' _! Q) K% {
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)! t! ]2 X2 w. e: Z
  658. //          {
    - t/ X: c  O/ K& v) v+ X% Q% z( Y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    : b) V* h* E$ Z/ Y+ g( Z  w" ^
  660. //            colorTemp.SetValue(color.MakeARGB(8 @' w* g8 P" J! c4 [
  661. //              (BYTE)(255*iColumn/iWidth),
    $ ?% ?9 g/ h- L0 t5 S
  662. //              color.GetRed(),
    6 o! a6 E) M" ~: Z. ~, ?  t
  663. //              color.GetGreen(),
    ! j/ p. ?5 U+ F- A7 \( ~
  664. //              color.GetBlue()));
    9 \. J' j  j# _
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ( S& O# p* G: y3 I4 D8 m" [( F
  666. //          }/ ~" M0 S* ]* J: B
  667. //        }
    $ w  _4 Z% [8 g5 b! O
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    . t! }5 I, R  e: Z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! i2 @, B; m! ?. [% h+ w. d
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
      W  e' m3 M1 w2 S7 v2 [
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* b2 G8 h2 a7 Q& F0 n
  672.         for(i=0;i<240;i+=8), j6 \# z+ w6 J, l
  673.         {
    / L2 a# X, y+ l6 m$ c
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; Y, `* ^7 U* j6 N
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , B8 Q2 Z8 c: Q  y6 s
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& T' o& v6 l- p) \' v
  677.           Sleep(33);# j+ c9 \5 v8 b4 C( Q9 G
  678.         }  I# ]9 ^4 C, d& U5 l
  679.         Sleep(1000);
    - z7 f) k: \) p! E. R0 H- p
  680.         for(i=240;i>0;i-=8)/ B5 Z# h) t% x! r0 I  f
  681.         {/ @6 X  n2 P) b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);3 \" Q# |$ T3 @* r. m. y/ d
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( |( j/ z2 S' y# J
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 Q/ O6 F/ E9 q
  685.           Sleep(33);7 ^/ ~' R* R1 ?: J; A+ v  y
  686.         }8 i9 ?3 A! f1 N( N5 M, [3 X7 x
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    : r( l/ ^5 n. d- q+ @, U. ^( n
  688.         dlg->ReleaseDC(pCDC);
    ; s( v/ \) A. O: o  b) V6 H- o$ @
  689.         DeleteDC(hdctar);
    4 E  v( w' T1 `
  690.         DeleteDC(hdcsrc);7 o" d1 M  ?" w; x( g) ?% Q
  691.         DeleteDC(hdcorg);
    - N, ^: \. l2 G) V$ w& {1 N" a
  692.       }  D! B6 K+ b# P% ?
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 I" f) {+ J/ Z( w& g* F$ b
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    1 o8 }( x1 y% w9 i% U% v. H
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ' \- l, ?9 D  \9 n* e' M) t0 {
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ( p% m9 S9 C4 i+ g  A
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( U/ t. |7 q' x% [% y" ~) l
  698.       if(!Dn.Connected()), [9 ?: o- q- Y0 @7 _
  699.       {& U# Z- G: u( u/ r- }
  700.         dwTotalFiles=1;
    9 F, X5 @" E+ }2 Y
  701.         dwDownLoaded=0;
    - E* g' G# }1 ]* I
  702.         bSilentStep=TRUE;
      j  Y  ?; ]1 U* N9 a, q) \
  703.         bCompressed=FALSE;# }4 t' {* G9 ^( u; e+ X' V, E2 o4 T9 F
  704.         strExtLocal.Empty();, f% n( d. d8 T/ p: W; ~
  705.         strFullName="readme.txt";8 a# l: B4 J, c4 x4 o
  706.         dwProgramState=AP_CONNECT;; I, ]; S8 N* ~9 R( G
  707.       }/ E- l/ Q6 d3 B& q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
      B" R- B  v$ Q7 e% A
  709.       dwStartUpSteps=2;$ ^( c2 @2 r% v2 m
  710.       break;1 b0 ~5 [. M6 e% \
  711.     case 2:
    " H6 X8 O! W4 L2 D5 p# C( s- W
  712.       {7 y  G. C3 V) M- V, p6 W% H; j& f
  713.         int iEOF;
    # A8 H$ y3 z( N
  714.         FILE *fp;; L& w) |; N0 ^' P
  715.         char szString[512];( {8 @( R5 m/ s- i7 y' P5 `
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* [* K( Y$ J3 E* S1 ?
  717.         if(fp)
    $ ~* T$ R3 b0 E  c( ?' N7 T! y( u
  718.         {2 B" ^+ R4 [& B
  719.           do; o( r) m: c! T- V9 w( p
  720.           {
    + F1 h+ |; ^$ X9 M0 i
  721.             iEOF=fscanf(fp,"%s",szString);
    - I- y* h8 m, A- V# t1 t
  722.             if(strlen(szString))
    3 H% B+ s. ]2 s8 i; f( p
  723.             {) r4 ~8 K2 S% M
  724.               if(bFirstChar)# g2 ?6 \& ^, H( D/ u
  725.               {
    2 M& p8 h( M% Y: g+ D7 P  C* }
  726.                 bFirstChar=FALSE;
    0 Y- y# y! \6 H) L9 [
  727.                 bConnectIsBig5=FALSE;
    # D+ {6 `+ {8 s% ~
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;+ U2 x" E- f- @+ G' I+ u9 r
  729.               }& N" j) k( b0 I
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . }$ }# w3 z# w9 O
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    7 _- d) i; q- Y% j( E' G
  732.               dlg->m_ListText.AddString(szString);  s/ X3 F: X) I) @5 t3 y
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 \2 R( P& u; }4 S- J1 p1 ^! Q
  734.               *szString=0;/ V, w. z8 s$ N& A3 v0 ?
  735.             }+ \* B3 E2 _( m' i+ W1 t0 A  ]
  736.           } while(iEOF!=EOF);
    : X6 }3 I7 B, H0 N8 p
  737.           fclose(fp);! P2 ]8 L- I# U. c' b3 c+ j
  738.           unlink(".\\DownLoad\\readme.txt");) k1 f, A2 \( N( |
  739.           dwStartUpSteps=3;
    ! w! E5 y2 f; s+ r2 E' X- F2 I, n$ ~, y9 f
  740.         }0 ?4 [* p( W* `; [! Z- a7 g
  741.       }
    . I# {2 R; d+ `2 E# Z
  742.       break;
    ( a/ f- R; T+ K% c
  743.     case 3:( ]5 e/ p) V/ f; Q6 H' n/ H" `, D
  744.       if(!Dn.Connected())/ p  E4 x/ E  B8 \+ t
  745.       {8 r! v+ `% S7 a$ a# }
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ; c' Z: ^! e" Q% {
  747.         dwTotalFiles=1;2 G" S& c0 a1 u, N& w- m0 y
  748.         dwDownLoaded=0;, ~1 _/ U, o6 H. t  i5 K) m
  749.         bSilentStep=TRUE;
    # X2 \0 @7 l+ V! G7 y
  750.         bCompressed=FALSE;9 ~! _: H* ~" h# |- n
  751.         strExtLocal.Empty();
    : N4 g$ j: U) ^: Y
  752.         strFullName="checkversion.txt";6 o; }: m+ V5 [1 h
  753.         dwProgramState=AP_CONNECT;
    " z1 n& o9 [* S4 i; N
  754.       }& ~- Z+ W3 S, B3 ]& G+ B
  755.       dwStartUpSteps=4;  p) t, f1 f) d* a5 F/ ]6 E' \
  756.       break;9 f: U" A' N% [: a0 d, o# E8 H
  757.     case 4:2 X0 ]2 c5 j/ P$ X( K6 Z; L
  758.       {& {+ n' O/ V3 ~$ u; ?1 J/ l
  759.         FILE *fp;
    / x4 c. J: C5 t3 Q5 O7 ~* J* r
  760.         char szString1[128];) L! C% v) N) y, E' O, f7 G5 Q
  761.         char szString2[128];
    ' e. f% b2 {8 V# L# Q# I& X
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    6 `7 _& b9 [* I  k/ A6 B3 z. U; J( b  i# o
  763.         if(fp)$ t$ \4 o( [) a) S" b3 C
  764.         {
    : f4 c2 P) q- w5 f" Z1 F
  765.           fscanf(fp,"%s",szString1);5 i$ k3 O) l- h4 Z
  766.           fclose(fp);
    7 ~: D, g& p) L; ?7 P( N4 u
  767.           fCheckVersion=atof(szString1);  Q; H) F; ^1 _5 I- }: f4 ~4 s5 K
  768.           fp=fopen(".\\checkversion.dat","r");; S4 c; x& ^5 T4 {7 H
  769.           if(fp)# x- S# P6 R5 p7 y' ^, d
  770.           {
    5 Y  h# p0 A) m) ]+ _# P
  771.             fscanf(fp,"%s",szString2);
    0 Q  _0 P  H) A, A5 t
  772.             fclose(fp);
    7 @+ [/ K8 P8 w" h$ d1 e: a1 }6 W
  773.             if(atof(szString1)!=atof(szString2))
    " B. o  A5 p: B. F% k: K2 F
  774.             {2 ]8 ^9 k+ \- s0 @
  775.               if(!Dn.Connected())8 B6 a6 z4 w" l: A
  776.               {
    % @. m8 x4 s0 F7 z
  777.                 bFirstUpdate=TRUE;
    : T) A% p4 b8 q
  778.                 dwTotalFiles=1;' v- q3 C! T. w* H! ~$ |+ i6 }
  779.                 dwDownLoaded=0;
    % p& t% A: r: z, a
  780.                 bSilentStep=FALSE;( ?+ Z3 j! h8 T- c! N5 C
  781.                 bCompressed=TRUE;
    $ H; j3 p. k! M3 K. ^! r7 k
  782.                 strExtLocal=".\\DownLoad\";: p! k) F/ ]$ V8 c5 M
  783.                 strFullName="update.txt";
    6 O4 O  X2 o3 I; s6 K4 u
  784.                 dwProgramState=AP_CONNECT;, ]3 q8 g6 u7 p( U: a/ E
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 `2 I# j5 C- R  r
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 P7 T# w4 ~* l) k- T; e& x. F
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 c( J& b1 ~" z; |, P; U7 {! r$ l

  788. ' N! Z+ z' x$ ?  r; a8 @- w+ o0 F1 q
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ {5 ~6 Q7 y% t# p, G
  790.                 unlink(".\\DownLoad\\checkversion.txt");+ i6 H. p: Y' m# T0 N( W1 K  P
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)5 J, `! `1 Y  e* c1 u& {' ~1 ?
  792.                 {$ k$ t3 Z% X' |2 G$ I
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");, ~2 D7 \7 @0 o8 I) T% ~* d
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    - a9 Y% ]5 ~6 G% p! d) o" r; J
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");( t8 c+ N: Q* p, F
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + @$ }8 p( o1 `7 p0 Q  I

  797. 6 k: g% ]7 F( o" D  W+ Q
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( W# U+ u( I' U7 _- l
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% `  [9 @/ M2 e. c
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");: J6 q4 n* Z) W( B, f6 M. o
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. ?; a/ M  j& ]+ k5 X6 O
  802.                 }# c3 J& m, h, l  }) K; Q
  803.                 dwStartUpSteps=5;- B2 V) U2 R. e8 j
  804.               }& w9 e$ u8 a6 o) _) f2 T/ L% a
  805.             }7 w, [7 E7 B/ L+ D& ~8 ^% f
  806.             else
    % E. @5 s5 B& }( I
  807.             {
    $ \  p5 Y/ A0 j3 n& c  D
  808.               unlink(".\\DownLoad\\checkversion.txt");
    , w2 J" E0 K6 d% `
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    3 m( p# Z9 m; V0 }/ w2 m* `& d
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 a+ l( x/ \8 u- p  j
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");# x$ i8 ^7 d6 X

  812. % M, B+ z; v' N. h2 F( ?
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; a/ e% I, {: g; a. ?
  814.               dwStartUpSteps=99;+ \+ u4 a8 h# X. M
  815.               bFinishUpdated=TRUE;
    6 G4 D2 k, K- m9 }- n2 e" `  |
  816.               bCanUpdate=TRUE;2 o5 _3 F; m5 E# U) c
  817.             }
    # V( Z# @$ _- h* Z
  818.           }
    & F! E( P: }/ ~9 F3 \& ^
  819.           else
    7 m  H( [: Q( s% I( a) C, e
  820.           {
    9 f2 ?2 N; P* E9 h; K3 l; a$ r+ E
  821.             if(!Dn.Connected())* R3 R  \- e: W" ?5 l
  822.             {& i% B7 ~6 a* X$ Q- F
  823.               bFirstUpdate=TRUE;
    & ]" z6 c5 p/ B3 ]9 V
  824.               dwTotalFiles=1;5 M+ r3 h. T  r
  825.               dwDownLoaded=0;" ^5 d# g7 u1 e, y% B& M
  826.               bSilentStep=FALSE;/ Z% F- d( ]: q& C0 {6 R
  827.               bCompressed=TRUE;4 o5 f3 L1 E* i; ~8 j3 g# G7 N
  828.               strExtLocal=".\\DownLoad\";
    $ Z; k+ l4 t! i: `
  829.               strFullName="update.txt";( R; c! _. q8 ?8 `0 y& U: ]
  830.               dwProgramState=AP_CONNECT;
    - E8 K6 u5 x+ q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; I% P2 h9 u- b+ ]$ v
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 i8 ~, v( l# A8 U# u# e! ~  z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");. _( P! U: R2 ?( U
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 ^6 l# @4 m7 I- X
  835.               unlink(".\\DownLoad\\checkversion.txt");- j, s& u6 M) m+ L
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)& V" V+ o# I: K, ?  P
  837.               {
    * w" ~. G8 n$ W0 R" L6 r! V
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ( W. `: c( n; R
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    . V; u' E7 C" Z9 m: ~
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    2 T9 f8 o* o5 E
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  ^  \) Q3 |) b! h* y0 e
  842.                 * P* E3 D( k- d/ o8 T1 J
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ c: M4 d+ a  P  `( y6 {4 q
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # u5 q4 t! f5 }) ~8 g
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    + `4 d( c2 G0 ^8 i
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ U( U2 K9 M/ F2 s, g6 l
  847.               }, q6 ~6 _" E" Q
  848.               dwStartUpSteps=5;
    1 c0 d5 t8 g) C% Y1 _2 ^! m+ ?6 J8 t2 Z) r
  849.             }4 b3 H1 T4 K8 e  h
  850.           }
    6 o, {& k$ W/ t; a1 ^7 S! p& c
  851.         }% a5 _2 [) |( w$ f, I% |
  852.         else
    6 V6 O5 [; [' c% ?" c
  853.         {
    , z$ O) H8 w; D, ~- v
  854.           dwStartUpSteps=3;; x/ w6 y* r" j1 x6 G/ M9 M( W4 X
  855.         }
    # i5 j8 W4 K1 l; B; }8 T
  856.       }
    # Y# h& V: e7 z' N8 W* F5 h
  857.       break;* [1 D( L. @! z0 L, j( x- F4 Z
  858.     case 5:$ H: f: n* I  _
  859.       {
    ( u# ~! ~! {( U# }7 I3 U
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    0 _7 o  X! A, u0 n: n4 l& [  Q
  861.         {
    0 U, r: _2 x$ Z. j8 g! U0 i+ q
  862.           int opt_overwrite=1;
    % V* q# W* j3 K% U
  863.           int opt_do_extract_withoutpath=0;
    ) A4 a6 q& T( x7 x
  864.           unzFile uf=NULL;
    ; L; L# R! J" D! ]7 V" y; S

  865. & q' a  n% ?8 g2 C' b: Y" Q
  866.           uf=unzOpen("Wsa.zip");. T3 j- w) g$ i! t9 G
  867.           if(uf); m  V% V, p4 S8 C* p
  868.           {
    , ?: X1 \# E5 b# O1 |$ ^
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    & E$ l! }* M" C' C' ^
  870.             unzClose(uf);* }" \+ t2 z2 R2 G8 X) ]
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");/ G" G4 X" D( d4 F4 G
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");+ _9 \: i8 E. \1 r: U6 Q9 I
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ( x, F* z3 [9 r8 J
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 _( K, y, z8 j+ b8 F9 ?* M
  875.           }, g! [9 {! a8 l* J* S1 s2 P
  876.           DeleteFile("Wsa.zip" );
    ) T* ?2 S9 \4 B8 l. d7 ]  S
  877.         }
    $ r% t/ h7 p/ q3 H
  878. ! A6 ?- v- S- V4 G
  879.         if(CheckLocalVersion())" U1 A& ]  e- }
  880.         {1 y" |  b- e6 D8 R6 e* Q" I
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    , i4 \; c; T! S8 I. d& j
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");7 E& h- \. A; e- ~! ~3 A" G
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    & ]; j/ C' \; M7 L- B1 F$ H
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- B; b5 J; K3 [$ J" o; W; N
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);7 J: f$ e  v% O% t- g) {) |, q
  886.           dwStartUpSteps=99;" M' W: G8 Z& Z3 [4 f: s
  887.         }5 j% ]0 Z! }* r- i  J
  888.         else/ N% m( S9 q& q0 x: ~
  889.         {
    ' g7 ]+ r+ }& h3 W4 s1 |! C8 N
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* P( j$ H9 q; W& q" q( r) Z+ B
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 a( u1 k# r# k% P9 u
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    + X* i4 t/ ]% [7 `  f8 _  }

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

4 D, W" M: T* t8 G& M8 I' ^; S( x, _& `7 H& Q

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-11-27 14:26

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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