找回密碼
 立即注册

CSUpdate.exe源代码

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

' f# y2 G' N3 m) {2 T
  1. / RevApp.cpp : Defines the class behaviors for the application.  H( c) g6 F5 e
  2. //
    : p2 D0 ^8 c9 q% _. B- p& {
  3. 4 N+ r# @+ P  k% i( c* j
  4. #include "stdafx.h"
    / G, B; e3 {9 t9 R7 v1 N
  5. * d+ Y  x. I. ~
  6. //#define UNICODE
    * @: H: o+ H% a1 E$ V6 C; Q8 o3 u
  7. //#include <gdiplus.h>+ D7 g: a! J! x3 F) c* e' C& ~
  8. //using namespace Gdiplus;
    + @5 E4 Z+ W- u5 I& n% G9 y6 n
  9.   d) a$ t$ F. ~6 w
  10. #include "RevApp.h"4 _: B/ J9 T/ f8 J' ?6 g
  11. #include "RevAppDlg.h"
    $ n5 N) E- w% w  N4 ?

  12. 0 v( [6 v+ g3 U& F, u; h: |
  13. #pragma warning(disable:4786)0 A' u2 }$ D( [
  14. #include <map>
    1 r+ S$ z6 \3 M9 I7 u5 [" {9 t
  15. #include <list>+ |7 }9 D$ B0 P! o# t
  16. #include <direct.h>6 z+ L; v: W$ m! t
  17. # E! g& L# ]' O" r: c! L0 X4 r1 s$ T4 Q+ d
  18. #ifdef _DEBUG
    * e2 B! b$ I# w: M7 N/ v+ V# ?& ]
  19. #define new DEBUG_NEW1 ^5 P0 N! E' W
  20. #undef THIS_FILE
    , r+ E1 G; {6 }, L
  21. static char THIS_FILE[] = __FILE__;
    / L+ h4 X. q: k  H0 V5 V. Y
  22. #endif$ F* P. j/ m& w7 Q+ V# D
  23. #include "SkinResDef.h"
    * s- Q) o/ R& A/ u: d
  24. #include "ChangeBG.h"- O9 a9 G2 Q7 z7 s3 i
  25. #include "AFXINET.H"
    ' @* i! ]0 d9 b% V

  26. & T, \0 Z  q" [" x" p% _5 x
  27. #define TRADITIONAL_CHINESE 0
    ; a! P4 f' A# ]1 g) J& x
  28. #define SIMPLIFY_CHINESE 1
    1 O, \; J& s, S
  29. #define ENGLISH 23 m8 M4 M4 m8 ]/ Q( C$ o) Q
  30. int m_iLanguage = ENGLISH;* r* t/ H8 F8 R! L
  31. /////////////////////////////////////////////////////////////////////////////& B  b$ j! M+ Y0 }
  32. // CRevAppApp
    % N! z/ {/ T/ D4 I$ _7 _! \
  33. ; `4 _# D1 q3 o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)% n0 E( N* w3 a/ m' d! I' S
  35.         //{{AFX_MSG_MAP(CRevAppApp)6 v: x' Y6 @, S- J8 w/ Z# w# B, D: v, Z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.! N$ y* S' e# k8 [
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!( d8 k! _) e" R+ X' t$ X( s
  38.         //}}AFX_MSG! G% g  z# u) c4 {9 `
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    & q& [+ D" v/ s  U- L) E& w
  40. END_MESSAGE_MAP()
    3 N3 ?* Q% R0 V& O2 Y7 y! O( ?
  41. & k, S) `7 T/ Y# _/ a
  42. /////////////////////////////////////////////////////////////////////////////) Q; d* [/ c9 r. O  p- z
  43. // CRevAppApp construction. y) z& @& o9 e8 s. a7 ]

  44. * m# a& T/ W8 V3 [) F1 q
  45. CRevAppApp::CRevAppApp()) A5 G  h2 h5 l' {) t& l
  46. {$ U* P4 O& `! [' R+ S
  47.         // TODO: add construction code here,' W2 K8 X( M$ X" S: K0 G0 [0 R
  48.         // Place all significant initialization in InitInstance
    " W0 G7 i; z2 H! ]+ U! o
  49.   bDisplayIsBig5=FALSE;* \: \. O! y& h* }6 \0 r6 R: S
  50.   bRestartUpdater=FALSE;; x' R$ _8 }+ r7 e( P5 p# Q" X' [
  51.   bFinishUpdated=FALSE;
    - @7 e7 L# P- p! \; a( [8 U
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ) [# m7 e5 S) f2 I
  53.   InitChangeDataBig52GBKS();
    # v1 L6 `, l( C' G' X+ q8 ?
  54.   InitChangeDataGBKS2Big5();
    ! N& N$ [" k2 I9 w) b# L9 A" Y2 v
  55.         //' j$ _; p5 E2 x2 h1 W3 G2 u2 A
  56.         bClickRunExe = FALSE;
    ; l- ?) A; o: }& R2 w+ ~9 J0 y
  57.         //: m# G  p9 A# n) S# o6 {
  58. }
    * i# X! _, v& Q, |5 Y; j

  59. 2 \+ l7 Q: H" C9 w
  60. CRevAppApp::~CRevAppApp()" ~5 e: P7 q* X9 u+ ~% b! o* n
  61. {% m) ]# t3 R; H8 i
  62.         // TODO: add construction code here,
    , g9 k( K7 ~2 {% ~
  63.         // Place all significant initialization in InitInstance
    7 \. Y9 F  b: |5 Z
  64.   EndChangeData();
    1 l$ r7 ]. C0 I) `3 w, n; {
  65. }
    ) c8 `" J( ]( g; _! t
  66. , a' P/ U9 j: L
  67. /////////////////////////////////////////////////////////////////////////////
    & j" V; N& G9 i$ o5 P* o- ?6 S; s
  68. // The one and only CRevAppApp object! H5 n6 h& K1 L( c

  69. " r3 }2 W0 ?; \7 m
  70. CRevAppApp theApp;
    0 Q5 ]9 S6 _2 z0 O# H5 E
  71. ! Z6 z) s, U6 l' T7 u+ W) {  \) A7 `
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName). i: w5 q. Z3 T% |
  73. {
    $ g; ?& ?4 T2 N+ T
  74.   int iEOF=0;
    : c" B7 Q* R+ B
  75.   char szTempName[MAX_PATH];; s# p$ N1 ~" Y% x
  76.   *szFileName=0;
    9 T! k. S1 [+ d4 k
  77.   iEOF=fscanf(fp,"%s",szTempName);
    9 u3 Z( V5 G4 {& X% u3 D. c
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    8 V; @/ |/ l7 j1 A
  79.   {! U, p. d+ g& k8 t, G5 q
  80.     strcpy(szFileName,&szTempName[1]);. K4 W. @& l+ ?0 ]; g3 V
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)/ X1 |- m! s5 G7 d) [# m
  82.     {
    2 L5 ?  p# O: z/ v. ^
  83.       iEOF=fscanf(fp,"%s",szTempName);7 J$ ~; C* v7 L9 L2 Y
  84.       strcat(szFileName," ");1 |0 b2 \/ J$ X4 O+ i
  85.       strcat(szFileName,szTempName);# E; x* l' X. n* X0 ~
  86.     }- B. N  |2 K6 o" L1 \4 c
  87.     if(strlen(szFileName)>=1)
    $ d, {9 w# w9 P9 _% m5 c
  88.     {- M: t' y3 P4 I& S" @) c5 Q: j, k
  89.       szFileName[strlen(szFileName)-1]=0;
    7 L+ @* w6 `. e0 f4 P% {
  90.     }
    " F: d) H. B: r9 s: M* k
  91.   }$ [" b3 d9 `3 n  H. X+ Z5 k
  92.   return szFileName;3 ^- P" B" I# e. k+ W" _6 X3 t
  93. }+ i$ i+ g7 o0 o

  94.   N2 F9 r( U2 L
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    3 `* K  _& @) U0 z, O
  96. {5 X+ m3 w, h# `$ f$ }
  97.   FILE *fp;* v- w8 S4 g- _
  98.   char *key=NULL;2 n: ?& Z- D( G' W* A: e5 P
  99.   char version[MAX_PATH];3 R2 A  a# N, P. O; O; J$ k
  100.   LPUPDATEFILE file,olds;/ L! k4 c$ k3 d0 J  t+ {9 e
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / `+ X! n: u  W

  102. / [1 Q: ~; Q/ Z
  103.   UpdateList.clear();: m  w+ i1 f4 X3 X; y! d( o+ J3 O  j
  104.   UpdateFile.clear();% K7 _& u2 H/ v. I# X
  105.   if(GetFileAttributes(filename)==-1) return false;
    - a& H7 N8 A: Y4 ]# {: _
  106.   if(!(fp=fopen(filename,"r"))) return false;+ c0 z* D4 ?$ h  V6 V3 }/ f7 I
  107.   fscanf(fp,"%s",version);) v/ j1 j" k  V- J# K; Y: r1 J" l
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }  D! W0 {+ V: U3 P6 L) i
  109.   while(fscanf(fp,"%s",version)!=EOF)
    . r. F2 f  F# @$ l) x/ I$ d* Y
  110.   {. F# \$ e5 f' M
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 D4 Q; i3 Y2 e& N* |( w
  112.     fscanf(fp,"%s",file->path);+ V* ]! p, w2 t6 }# k, `  n' d
  113.     ReadFileNames(fp,file->file);  m% N2 c- I, Q8 m7 T. r8 e
  114.     strcpy(file->full,".");
    * L8 i5 ~4 d1 Q( F, w
  115.     strcat(file->full,file->path);2 L0 V4 q6 ]1 {
  116.     strcat(file->full,file->file);4 O8 t$ Q- ~) ]. {/ k% ]; t; W# L
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())0 Y5 h! d3 m" U1 H
  118.     {" Z5 p: {6 S9 l. }; I# d
  119.       file->vers=(float)atof(version);
    * K+ }& P; O# l9 S  Q3 ^- P
  120.       UpdateList.push_back(file->full);
    6 y" G6 u$ ?  v0 E% B3 m3 y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 O3 S6 s4 ]% n( W
  122.     }5 c. O+ ^% F' B5 T3 U4 p0 M- I
  123.     else, o" t0 w7 n" {$ z; L
  124.     {+ m$ x6 R* H* F3 X  Z" v  @
  125.       olds=(*p).second;- U4 j* W5 P8 l. P) U. o
  126.       if(olds->vers<(float)atof(version))
    $ `% ?/ I' D5 h
  127.       {
    ' I8 X) _9 A4 \  n( ^0 O
  128.         olds->vers=(float)atof(version);
    4 |& a& w9 V0 u+ ?4 U+ B  D
  129.       }0 p) w+ e) ^1 z8 c
  130.       free(file);
    . ?, q# q! G# k# f1 A! r3 L' c6 s
  131.     }& C6 K+ r; Y3 B: j
  132.   }! E. S! S* |* v2 a
  133.   fclose(fp);
    2 i. b& {/ ~, }* F8 r9 N
  134.   return true;
    % W, }! g' }- U* a
  135. }' |* S5 Z) m* e$ J. l

  136. & U" I" d" C. s" f( l
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)' \6 Z- m7 W# E' a
  138. {, |! z5 m% ~' k' y5 N
  139.   TCHAR  szFull[MAX_PATH];! A# Q7 n. }$ D7 q
  140.   TCHAR *token,*inter;  F* S& x( P2 o+ r8 J* y0 U
  141.   *szPath=0;
    ( H! b6 |: b# B" T
  142.   strcpy(szFull,szFullPath);
    . P4 j& C5 n! \# P1 J
  143.   token=strtok(szFull,"\\/");
    $ X; C; y! V' ~* @, {- u
  144.   inter=token;
    : c6 `: t8 H# P
  145.   while(token=strtok(NULL,"\\/"))
    ' N, P( ~  y; k) w1 M3 o
  146.   {0 V% |! @( A- s" a% H5 |, O3 g
  147.     strcat(szPath,inter);2 M" r! W( k. p- r" }
  148.     strcat(szPath,"\");$ R/ f  w3 H+ j/ ]5 }
  149.     inter=token;# T+ C: c& B. [  H" s: s
  150.   }! U* G& T" V8 C, s8 @
  151.   return strlen(szPath);
    . |% N  K/ Q% h& v% Y* J5 O' p
  152. }
    5 \0 D. V) P. p" [7 v8 Q2 y  I
  153. - |. D! S: E' d5 i, x4 F' }
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    % u! k- ?% O% y* D
  155. {7 W: t  P% G* q) e$ n: S
  156.   DWORD attrib=GetFileAttributes(Target);
    - z9 w% N+ F$ y7 ?
  157.   if(attrib!=-1)
    8 v: G  G9 {. o) _, t; U* G$ [
  158.   {
    ) m7 ]0 {0 d" ^5 `3 f
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)), i7 u5 A9 V5 k$ t" k5 N8 h7 S
  160.     {* A0 Q2 C- @5 V9 C  w& P  R, l& t
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ q. J* }9 p( B6 W1 _6 o
  162.       SetFileAttributes(Target,attrib);
    ; y  c3 E0 Q3 j# u1 Q5 d
  163.     }+ w# _/ d# d! W" [4 w' v
  164.   }* O0 z8 L' @! L( F  m: [5 G
  165.   CopyFile(Source,Target,Erase);
      E1 ~* H% [$ c( e
  166. }6 q' e# O5 W( s: V& L
  167. / y( t. y) a: P/ g# C5 t
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)& S" |% j  m& @, F- R* \
  169. {& _/ E7 F; Q& ?! z
  170.      FILE *fp;5 V0 ^; H" L! \# ~  n( f6 L& p
  171.      char  szBuffer[8192];. @" N9 W$ S8 S! Q
  172.   va_list  argptr;
    " b6 [7 E% @* X4 P3 c: |

  173. 4 ]! ]; J9 j" e0 ]" P- O
  174.         va_start(argptr,message);: d" V9 E& s! s+ `
  175.         vsprintf(szBuffer,message,argptr);( ?2 O. f( s; |
  176.         va_end(argptr);8 L0 Q0 b% c0 y% i. ?( W( `! G
  177.   fp=fopen(FileName,"a");
    & C6 U# n! J! k! k
  178.   if(fp)! D! x" _1 k$ |/ b0 ]( i
  179.   {) p- y! p. I& Z
  180.     fprintf(fp,szBuffer);# F. ?3 M) `0 m/ g
  181.     fclose(fp);
    : c5 D. D* V- z2 |
  182.           _flushall();* l) g2 B- J) E3 S8 @6 U
  183.   }5 b5 \: N+ `0 r* f% J7 I/ U
  184. }8 m" Y2 E& m- j$ {; u' `0 [

  185. 2 p* n- T+ G) H& _7 E
  186. BOOL CRevAppApp::Fclearf(char *FileName)4 J2 [# o3 ^" }" J$ A* m
  187. {
    & p7 Y, i4 u( a+ i7 r
  188.      FILE *fp;
    ' n% {5 g) K5 C/ f( O6 t7 j
  189.     DWORD  attrib;
    5 ^: C. f! J3 r  K6 y" y& Z3 \
  190.   attrib=GetFileAttributes(FileName);# _9 [- u% \6 w/ l5 C
  191.   if(attrib!=-1)
    3 }, J3 b, z( M% O+ N
  192.   {6 E0 w: j$ `2 u5 u/ p/ Y0 P
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    # K/ ]. K; Y0 S3 L7 l6 c2 z2 j
  194.     if(!SetFileAttributes(FileName,attrib))
    6 \# M- c6 T9 J8 B' i
  195.     {
    ' k7 a7 t* F. \$ d9 A* d1 K3 B
  196.       return FALSE;3 |" X; K1 v! b3 N2 b2 i4 h- f, f
  197.     }
    . _: j* F6 d  d, e. h5 a
  198.   }4 h  ], U1 K( v' N- C% M
  199.   fp=fopen(FileName,"wb");
    + e( C' h+ m. O; K
  200.   if(fp)
    3 X- C' _  v! i7 Z7 t3 O) [, f
  201.   {6 x8 K) D9 A4 X/ v
  202.     fclose(fp);3 D- P2 S( |* G: g+ j
  203.   }/ a5 h% H2 {) j" B/ U3 C; ^
  204.   return TRUE;
    / m- l5 Q! ^# l4 l* }
  205. }
    9 i& G! O% O1 o2 L$ T. E
  206. % j. _% d9 E* B( b) W, J$ I6 z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)  u  w( `; c! |2 \# |! _
  208. {; x5 a! |; R8 e7 y% O* x
  209.   char filename[MAX_PATH];# @" X/ e: g/ n7 \5 }" Y4 f
  210.   LPUPDATEFILE file,olds;
    4 D( G7 H) w% Q1 J' F: u, z
  211.   std::map<int,CString>::iterator i;4 V- h* D* l4 L/ X
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! C& Y3 P( w  C8 E
  213.   std::list<CString>::iterator l;
    7 ^: _, c- _$ d% e- E* o6 D
  214. : ?# q* z% Z2 @) `* |# a
  215.   if(bFirstUpdate)
    # b8 E# w. b+ V7 c# l# l0 l3 R
  216.   {. w& Y$ M' X3 s7 h+ r
  217.     dwCurrFile=0;* J) |) G. E, i
  218.     bFirstUpdate=FALSE;
    - A) r8 A" n, V, a/ w
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( k# f. X$ `1 Y( s
  220.     {1 ~; K5 @$ ]6 X
  221.       dwTotalFiles=UpdateLocal.size();
    . C. G8 ~- ~  h; z/ F
  222.       dwDownLoaded=0;
    ) X; j6 j. V( z* w5 [: X
  223.       bSilentStep=FALSE;
    # q; H( K( J% D/ P
  224.       bCompressed=TRUE;
    / c! `, t. o4 W" ^% ^+ |9 G
  225.       strExtLocal.Empty();3 t# [3 L( h; w  h
  226.       strFullName=(*i).second;
    9 k6 v1 O* ~4 o9 y* o
  227.       dwProgramState=AP_CONNECT;
    9 g( S' n3 _- m7 z) P2 v
  228.       return TRUE;
    5 H/ E! o& e$ M) `. w4 ?4 j
  229.     }% B! g' v4 v. N4 X- c
  230.   }3 S) y$ K8 Q8 t" i5 O; s
  231.   else if(bRestartUpdater==FALSE)0 X4 @1 K: T8 Q1 U) s' t, j9 s2 G
  232.   {3 \/ f- W- v7 ^/ d3 N( @# U
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())& l# v1 o2 y: A5 e: ~$ N  B
  234.     {
    . g8 D  e3 t# s; f+ K6 [; H& ~
  235.       file=(*p).second;
    , H# R( P( }/ z( o& |
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    + A9 z  q) T2 J" T% B
  237.       {
    ( j9 R* A4 Y4 U& Q9 I2 p
  238.         olds=(*p).second;2 v( q1 Z1 Z- I+ t" }
  239.         olds->vers=file->vers;- m7 }+ F$ j0 U) ~: u
  240.       }
    7 }7 T9 j) G$ T( \9 p! U
  241.       else/ N* W0 x, n- B7 w( q0 k* y
  242.       {& W+ z; f3 p* k( U' k# @3 e
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; z' D5 s" X4 C; O8 ]
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    . `" M* x" Q9 }1 j- l
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    3 N. [# h( E2 i6 Q- Q/ u
  246.       }
    3 p0 N2 c- k* X8 u
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
      `1 d! z3 s6 {; U+ o
  248.       sprintf(filename,"(%s)",file->file);
    / ^9 u' m1 M/ g6 N. X
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, a: S. e! x, v& p, p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }% E, |3 t1 r7 K$ }3 G, m  [7 P
  251.     }2 @) J- @' M) {  ?! k
  252.     dwCurrFile++;
    7 c+ r( |% W3 S2 X: e# H
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : C1 \7 J  x5 d9 F
  254.     {: ]6 n5 s! O9 g' [* a3 e( Y3 g
  255.       bSilentStep=FALSE;
    - d0 z" e( V6 g8 |+ ]
  256.       bCompressed=TRUE;
    * L$ x8 N( G/ r) u, {
  257.       strExtLocal.Empty();
    $ j& l$ [* @9 x! _# ^# T5 R: c2 d
  258.       strFullName=(*i).second;
    ( Y' n+ X- Q2 ]/ `* F
  259.       dwProgramState=AP_CONNECT;
    # N. ?4 D8 m* R
  260.       return TRUE;
    * d) b$ E( M" n! `! R" K# A1 b
  261.     }6 f. H# R! O0 F; E! _+ ^
  262.     if(!bRestartUpdater)/ T8 D$ r; ~+ _7 z- C5 i
  263.     {% s8 i% ^; O) Y: S; }
  264.       int iCurrSize,iFileSize;
    8 P& W% }6 I! p1 W+ D* C3 H
  265.       iCurrSize=0;
    & |. m3 s' U$ G: t/ c4 G6 q
  266.       iFileSize=UpdateList2.size();
    - A9 ^8 Z1 |! P2 [7 p
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");6 X+ s3 B: C8 I3 x: h$ g0 N0 \' a
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    1 x+ Z* J/ T! |2 w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");7 F2 _1 D; K. m$ j3 O9 f: J* B" M8 u
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. }! r5 L4 p* U5 F. l
  271.       Fclearf(".\\update.dat");
    # b9 I- n. y( x/ N* b# v
  272.       Fprintf(".\\update.dat","Bloodyf\n");2 l8 E% r* ]4 Q8 L9 n* I
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)% \4 T1 D* D- E8 s
  274.       {- d1 y# }& Y' l( A$ Y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  f4 A" B' T0 L3 N
  276.         {5 Q0 N( E: Y  W/ F2 L
  277.           file=(*p).second;
    , ~: T7 Z$ X* _
  278.           sprintf(filename,"(%s)",file->file);# r7 m) p" @( w1 T2 A
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);/ O7 s! ~% S+ J& Z, D3 O
  280.           iCurrSize++;
      K  h3 B4 s5 I* U0 L( D' b8 ^
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    $ M1 L# R) }, Q1 I* Q  c4 i
  282.         }& h2 W# G; v) u! H
  283.       }' {0 `$ {  \# [1 \7 }
  284.       unlink(".\\update.txt");9 L# Q5 x9 L+ n3 D
  285.       unlink(".\\update.tmp");+ W# F8 v: w: ]+ w/ a
  286.       Fclearf(".\\checkversion.dat");- Y; p6 m6 V% @
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);  q/ T$ t3 j& W4 w
  288.       if(UpdateLocal.size())
    ' G$ J6 U$ d1 `0 i
  289.       {0 [. Y3 m! L. w9 C( G9 |, I! o
  290.         UpdateLocal.clear();' S7 j+ M1 E% R3 i( x! ~
  291.       }* S* N: c! X+ f0 ~
  292.       if(UpdateFile3.size())% @: `4 K+ J, |6 ^4 D, Q4 j
  293.       {& A7 |% P) z) Q" H
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 p3 r! s1 W: D% o2 A9 z8 i( r4 k
  295.         {; t9 y2 Q5 K3 ]+ G. G
  296.           file=(*p).second;
    ' W0 }7 D! v0 C4 f1 q" ]/ i# Z
  297.           free(file);, W  ~3 _3 i$ E0 n, P  [/ q
  298.         }
    6 p; j( x. o; h
  299.         UpdateFile3.clear();9 _7 N( G/ w! E8 o% O
  300.         UpdateList3.clear();
    4 o1 W! |# C8 g: o  F! ~! f
  301.       }
    $ u; Q+ P- I2 b# b+ _
  302.       if(UpdateFile2.size())( g5 l% x/ c" G
  303.       {8 G% V4 z# g, |# D: Z7 K
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    2 C( Y. ?8 ~% ^; k
  305.         {* Y; g* w2 `, _, e2 [$ r2 G
  306.           file=(*p).second;  F+ @( C. E# ]0 v* L, ^9 n* b0 `" P
  307.           free(file);
    2 F/ t$ L% K! k
  308.         }- {3 [. m$ @* g# o/ _. Y0 D
  309.         UpdateFile2.clear();& G3 H& D( E" [5 o) K
  310.         UpdateList2.clear();
    . r+ F" }9 l' }& _/ S, a6 H* L
  311.       }
    + M# M5 _, D) ]
  312.       if(UpdateFile1.size())
    3 I6 a1 K% R1 I4 P" m, U4 V. h, y
  313.       {
    3 @1 Z0 W; Y& D5 o7 n& w4 x1 u
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) v5 C  P. |* ^! H6 e9 R4 b
  315.         {  \4 [) Y, e3 v) x
  316.           file=(*p).second;2 F# a6 `, b3 j* K, j
  317.           free(file);
    . Z5 w0 k9 {+ k
  318.         }
    " e- I- ], l. ~& _' `
  319.         UpdateFile1.clear();
    * s8 \1 r  a5 E! t! r
  320.         UpdateList1.clear();7 Q' ^$ q( d' M% G
  321.       }( I5 k9 ]3 x" _8 v; V
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));2 O1 J) w: b% X. n& L! |, X0 T! m
  323.     }* a1 P- Q+ c, f: V, Z! z: y9 q. O
  324.   }
    & M) Q, ~6 H- x) @4 }6 b
  325.   return FALSE;; j% ]. m+ x9 e! `/ E
  326. }
    5 H/ B# N$ Q/ p" k; S5 T
  327. 6 o# D! j7 U2 p% i# Z
  328. void CRevAppApp::ClearAll(void)
    5 |+ D& A* Q. t, y9 J
  329. {
    + Q5 l7 \+ ~. b% D4 H4 u
  330.   LPUPDATEFILE file;
    3 X. U4 M8 b8 X
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; h8 e. i: p  ]& i: f$ _9 s
  332. 7 C3 [- G0 R" F9 Z; J
  333.   if(UpdateLocal.size())
    2 S! K2 C& {+ b" O4 U
  334.   {
    9 S( I0 K! \& K% m
  335.     UpdateLocal.clear();$ e. v/ J# N: g+ t" P0 D
  336.   }
    7 ]0 A; g% R# v# v- F/ Q
  337.   if(UpdateFile3.size())
    5 W7 X# o' O* ~- u' R
  338.   {, m/ y% J5 Y4 \' z0 b9 G4 {
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' W- }/ H& S# m; m+ F9 O
  340.     {
    / [; Q9 q. E* z
  341.       file=(*p).second;
    " k+ q. A6 y/ S0 H% @
  342.       free(file);  u( P4 E9 b4 r/ E* N
  343.     }
    ! L3 S3 C3 Q. L, X
  344.     UpdateFile3.clear();
    * z: C: B& O: p# Y; [( P
  345.     UpdateList3.clear();
    5 y$ P, ^* c; ^% V/ ^6 E: P
  346.   }; w( i: u  j, H7 M1 ?  B* x
  347.   if(UpdateFile2.size())4 J! G" G8 `# S% n* ?3 m+ `1 n7 R
  348.   {2 X9 f/ g+ p/ [/ K+ R
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 s+ M% U' h+ _$ T& G" M
  350.     {
    % U- W% ?/ W; \7 h# ?
  351.       file=(*p).second;
    : g2 Q$ B4 G9 _3 o5 I- X
  352.       free(file);6 v0 {0 E& P' K) i, A! u/ ?  x9 y
  353.     }
    * Y0 Q  r/ @  W1 ?. I8 {: `4 c
  354.     UpdateFile2.clear();
      L0 _' `0 Y8 J( J3 L8 S0 W2 e5 e
  355.     UpdateList2.clear();3 J" Z- f% {* Z* U- W; C- c
  356.   }
    " M: z5 V, B6 E9 Z/ C
  357.   if(UpdateFile1.size())9 T, S0 n' x( B
  358.   {
      |% o* Z, x. K- s& B
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ! m$ x3 }3 s1 A: i1 {4 \
  360.     {
    / i$ t" B( ?6 K! w0 o
  361.       file=(*p).second;6 g5 C' @& ]2 K( U/ I, }& s
  362.       free(file);  t+ V; O2 M0 K( }
  363.     }/ A  U, @  \: @' C1 U: C
  364.     UpdateFile1.clear();
    " m! x: [/ G& m  I8 f8 o- m9 b! K
  365.     UpdateList1.clear();3 h. l1 {* D9 w! G( S$ j1 j/ j$ O
  366.   }4 r' i$ G. q. O8 v. D
  367. }  ( n2 ?6 x! l3 a7 f5 T3 y
  368.   $ |) B: q! y: O; f- R
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ) _* J, H( ~6 p/ U' L" t
  370. {
    - ?  W6 h: q1 P. b3 c
  371.   int c;
    ; t9 u% L( Z& S0 p$ R" G
  372.   LPUPDATEFILE file1,file2;" e$ L0 p/ P  d
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    : L/ W* S% {  [7 G
  374.   std::list<CString>::iterator l;
    3 G1 Q' z& Z! O3 ]0 ]% G
  375. 7 N, @% _7 K9 r7 ~5 S1 U: x
  376.   UpdateLocal.clear();% s3 ]1 Z2 p" R3 P
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      A; N+ {, A- }) o( f
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ; G7 q/ N' A; S0 r
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);3 H4 G3 E8 o# @4 d: t3 B) L! J
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ) q% s2 K- ?7 ~4 E6 X, X5 Z
  381.   if(UpdateFile3.size())9 H( w* r  y$ C4 ]2 a7 C; S4 k  y8 Z
  382.   {
    & D  q8 j1 w5 L2 D# U
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)+ D# g* g$ b8 M
  384.     {4 e2 @8 H* I8 N( p1 I2 a
  385.       file2=(LPUPDATEFILE)(*i).second;) Z4 R0 K2 p, P) g+ ]( ?
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - W1 X$ }2 ^, t
  387.       {3 X! a1 U- ^  [& c! I
  388.         file1=(LPUPDATEFILE)(*p).second;6 l- A* t& T6 ?/ {* F
  389.         file1->vers=file2->vers;
    " d6 ^  h3 O( |) p, r# I3 ~: Q/ j' d
  390.       }, Y5 L$ R; R. ?# i9 C
  391.       else0 X& e  u9 n. g* a; ?
  392.       {
    9 N# G$ m: n/ C
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 X7 r( E- `8 t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' r5 v, D2 m/ @8 ?8 i
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));+ D4 g& [3 i8 C, F4 z
  396.       }! ?$ {5 O$ ^1 G7 z7 M) F
  397.     }& j3 d6 I5 n) e) o
  398.   }' B# ^/ a+ C! b0 _- Y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 B' m: ]: o" h6 _% E+ _3 U
  400.   {. x- _3 v3 r1 G- e' O1 A2 Z& G
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    . b9 @4 o  k  o# y: a6 X: ~
  402.     {0 g/ [- ?3 [  o* Y0 E% O
  403.       file2=(LPUPDATEFILE)(*i).second;. W. V% I* C0 m' n
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 d; v# J- n; m7 ~
  405.       {
    2 a& C, A& J8 j. Y
  406.         file1=(LPUPDATEFILE)(*p).second;
    $ D5 O% e1 M- g6 b
  407.         if(file1->vers!=file2->vers)
    # r. @4 |" h5 Y7 `: `1 c6 `+ D
  408.         {
    7 X$ Z) e8 _# D( @+ q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 c. c% e+ r' K. a0 k9 q2 _
  410.           c++;5 w4 L+ D" m  X) |/ R+ v
  411.         }
    , s0 y' C- L" E+ ?! D
  412.       }
    # Z, t& ~% Z& L
  413.       else
    * o8 r4 q/ u4 s" M3 [- u0 K' w) i" {5 K
  414.       {
    4 H* }. m6 y+ D; B% d
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - \8 \& r$ f! s2 S
  416.         c++;
    ! X! f# G5 I/ j# T' Z9 ^; m
  417.       }! r$ k) D# l1 v/ Z
  418.     }* l' l7 k6 Q4 C% N# J% m& ~- k/ j; T! ?
  419.   }
    + J6 ~  J% F& u
  420.   unlink(".\\DownLoad\\update.txt");) y1 m- |- n+ H6 z$ D
  421.   if(UpdateLocal.size()) return TRUE;
    - g& ?9 h9 c8 b
  422.   else                   return FALSE;0 w1 T6 a8 i/ T$ ?2 s/ }
  423. }
    ! q1 J0 k# V* J( K$ P- N

  424. - n# R. c/ ]1 d! e, x+ A; Z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ( L3 z" k* e  B. o3 g/ H+ K/ G
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"' `& k. Q! T+ s3 M0 o5 Z

  427. 9 U% I$ e# h8 D+ B

  428. " D+ v3 y8 a5 f; d* n* ]$ Y0 A

  429. , c+ k. s  B- }8 P$ n5 \
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    8 b% z: N. K/ F& p' l
  431. {; f7 G, X9 K! P3 ~
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;/ T* v  l9 O  q& O# J3 z' F7 e+ O
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( h: E: I4 a. l
  434.   {: D4 M" o3 U$ w9 e, x
  435.     char szLanguage[50];5 |) V8 t4 p9 ]; I8 Q% K
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      E! c( }4 f: g! X  ^- R% p
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : o) Y  K( }1 V+ i
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 r5 M% d" k9 H5 h; k- r
  439.     else                                   m_iLanguage=ENGLISH;
    2 d6 j: u' W) W8 Z; {9 o3 C
  440.     char szRegister[100];
    & g" y! S" n9 ]! \$ A  F& s/ x
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' u8 p8 |0 E5 m" H1 K
  442.     strRegsName=szRegister;
    . ]$ b3 n" Q' ?9 c1 h/ D3 X* h
  443.     char szPatchURL[100];
    7 i' R- A& j0 w: I8 m- w% a
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " L, \; L6 p1 G5 I3 f
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 E, e, Z- i9 p% j4 U6 p
  446.   }4 l+ k5 |8 m/ w/ |# k. M7 u! U
  447.   else
    : {3 d  v$ ]7 U7 O. W1 O8 U5 k9 W
  448.   {; @6 H4 l) X" q) {1 g+ i4 p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 |4 D8 P0 `9 Q/ k2 u9 C) \! Z: b
  450.     strRegsName=DEFAULT_REG_URL;6 f" s3 b' |0 B
  451.   }1 d9 k, M8 Z7 Y& k' M9 a
  452.   if(GetFileAttributes("hosts.ini")!=-1)) y1 W) r7 o9 h
  453.   {8 S- Z3 A" n& D9 _+ P
  454.     char szIP[50];- U! U$ R. n- n* F$ G6 [( K
  455.     char szDIR[300];
    1 q) P3 @) Z$ j4 u; P: P" ?. E
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
      ^& ?! |  h5 O) x- p  ~/ M+ D1 H
  457.     {
    $ v+ v' @+ C) y. ]0 P* _; P
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ( o  Y  A( }8 w: R
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");/ l* @' T; f! `. Q
  460.       strHostName=szIP;: G. T3 b$ X4 C+ q8 V% }
  461.       strHostPath.Format("/%s",szDIR);
    , }$ @4 Q5 i# R+ }. }# R7 \* _& e
  462.     }
    5 L5 f, ]) L9 h) {
  463.     else
    6 W0 b& R3 L% }+ ^
  464.     {
    : B' I) `- W4 L" v/ _( ~- H; z: t
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 |0 m( i$ a* ^$ ?- F
  466.       {
    , D, \# _1 f; ~! F
  467.         char szLanguage[50];
    0 ?+ W1 H2 b% ]/ d. R
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    , f7 @+ A2 q( E6 O4 B
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 A: r6 n* Z. i$ w6 U
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      [! z( W$ L( z% U6 }# ?$ I, S! }- o& L
  471.         else                                   m_iLanguage=ENGLISH;
    . G' `$ o/ w9 h2 I( [" I
  472.         char szRegister[100];
    7 F6 a$ k. E1 _) d, T3 a
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    3 Z. F1 @' w+ H5 h0 F- y
  474.         strRegsName=szRegister;4 g: a3 ~% C8 v: W
  475.         char szPatchURL[100];
    ' u: K& T& J0 x/ \5 j. a
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 A4 e4 w% {+ f5 K! {7 t: s* I
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. m: V8 W0 }* b8 V! J" V
  478.       }5 s4 _1 A& T  Y5 B; {) `
  479.       else
    - x3 S. \0 x( @  d3 `# u$ v
  480.       {
    9 _9 H" A3 G# V$ j1 m/ U' u
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& E* I1 n( {* B4 ^) \7 p
  482.         strRegsName=DEFAULT_REG_URL;
    3 {( L" _' D- h* |
  483.       }7 A- o  g) R" S, _2 J: L
  484.     }8 Q/ }& R/ N+ z& T# z2 |9 ~, j
  485.   }' d; f! ]; H- _) Y8 [( `, o
  486.   return true;
    7 f: A" i! k+ r! K) u+ N
  487. }
    % O5 l% g6 j$ G" F

  488. , P2 g+ E' m# c
  489. #include ".\ZLib\unzip.h"" Y% h/ @9 D  D6 Y! e; [4 H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    , [( S: G6 X  `: M' e0 }
  491. /////////////////////////////////////////////////////////////////////////////
    4 l, q% T8 J/ ~; Y  v1 d
  492. // CRevAppApp initialization
    0 H: I+ h8 {2 l$ u
  493. 8 i5 r: c1 S3 w( c
  494. BOOL CRevAppApp::InitInstance()  h: O: U4 Y( r0 Y5 s
  495. {
    6 a! C; u. U6 }( h9 m: I3 v. N* e; L
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];3 A% m" w8 q7 Z

  497. / }$ C# G% d, l& `1 Z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
      [& w1 W& J; S9 e: h0 c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))2 e' @* l$ S3 H5 O* ?5 O2 r( |
  500.   {  s2 u' i8 \2 U; S/ V
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    " Q) J* V2 q/ h  Q5 P
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ! B/ Y: i' a; @- ^6 C# l$ F
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))* W8 e- p  ~$ R0 C% e/ d
  504.     {
    1 v8 x9 V) c, p1 n9 B* n
  505.       strcpy(szPath,szPathTarget);
    , f- }. y/ o. ?* n1 Y0 W* [0 d
  506.       SetCurrentDirectory(szPath);7 V- J! o# R, d5 L. J
  507.     }
    - V" M+ I( v5 p
  508.   }
    # y" P; m+ o6 f5 d) N
  509. #ifdef _DEBUG4 Z' \# y$ y3 M: W# R
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); e5 H( X! t4 p2 p! a
  511. #else
    3 _7 A( Q7 ~4 H2 c
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    : R  z8 |6 U2 s( w; Z+ _! e! j4 f
  513. #endif; Y0 |2 V7 U5 Y' R
  514.   {6 Z' F0 D5 L2 r0 `% q
  515.     char tempFileName[MAX_PATH];
    - v$ o) ?! y1 k6 ?( {9 l0 h
  516.     strcpy(tempFileName,szPathSource);. _! w# c) j: f( n# {
  517.     tempFileName[strlen(szPathSource)-12]=0;! ?/ a+ Y% {3 z6 \
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    2 W" Z, @/ u9 j
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);$ G2 _6 y' D0 z- s8 H: d
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ( @6 Y+ O+ d* y
  521.     return TRUE;
    % I7 I# x) F9 f) v, k
  522.   }7 W' P; G' B3 J6 V/ l8 F- k( A
  523.   // Nuke 0118: Delete run.exe9 S5 ~  V, \! a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 G; h# @  H! m+ u# R5 p* P1 v2 b
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");# u. ]  |% d% N+ S
  526.   if(!ReadCfgFile("Config.ini"))
    4 s- A7 R' F4 N- q/ _$ e
  527.   {4 u: x7 g. i1 q
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);1 z6 m  G, K" J
  529.     return TRUE;0 V3 r% F+ a8 m7 s  T
  530.   }. H1 E* x$ H4 ^1 i/ v! @# B0 }' s
  531.   HANDLE mutex;6 }& A( G" A3 @' u( x5 m; X" D
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
      d2 C: I/ u0 I( Y
  533.   {
    + ^$ C6 G. m) r$ \
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    " X; p8 P" c+ x2 f$ |; V0 Y
  535.     {
    $ j. X0 R1 u0 J  K5 G
  536.       CloseHandle(mutex);
    & y; h. H/ i  M% V0 H
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " m7 r) ^; c2 q. |( T* Y
  538.       return TRUE;( m: ~- {  \" N) [/ i& x# A
  539.     }% S2 D  @2 W% o5 u9 O; q
  540.   }  ' v- ^- g* T9 y) h) z4 v4 g
  541.   CloseHandle(mutex);  N, h! T% f* P6 R9 P
  542. 0 T7 D7 Q0 Z& r0 q! z3 @  E
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
      h0 q* B) G, {
  544. 6 \& F+ g4 F; {- z7 J
  545.         AfxEnableControlContainer();
    - G  i) T5 \; G
  546. 9 ^, B% h: P! j
  547.   bCanUpdate=FALSE;
    3 b/ @% G/ i$ s
  548.   dwStartUpSteps=1;
    " J$ N( w1 P5 I3 G' O
  549.   dwProgramState=AP_NOTHING;
    ( _% r$ U/ X4 f8 q" _9 B

  550. 2 G$ [* u* n- d5 D8 c
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    % ]( d8 a- u5 O0 t2 o
  552.   Y! f* }# J% w7 p( g- v
  553.         // Standard initialization( g7 ?2 G& W/ D$ W1 g  i/ S* M
  554.         // If you are not using these features and wish to reduce the size
    % `& W) k: v* z
  555.         //  of your final executable, you should remove from the following
    1 \0 ^& |" Z2 G/ J8 D
  556.         //  the specific initialization routines you do not need.
    * `* g3 Y- U5 m1 g* c

  557. 2 [$ ?! s- G* v7 O; h
  558. #ifdef _AFXDLL
    ' X+ I8 s2 f; O8 ^( h: a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL! l1 y" |: z7 e9 e" ^" x9 ]
  560. #else% y6 G  a4 D$ b- B1 ?
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically& g+ F( w0 M& C8 y! O
  562. #endif
    0 p/ [) Q/ R  O4 Y2 ^) C& o

  563. 7 k6 ^0 v0 w7 v$ y) K5 W
  564.   dlg=new CRevAppDlg;
    : Q0 a5 o" b& d
  565.   dlg->Create(IDD_REVAPP_DIALOG);/ W& n* [  j* Z/ w5 q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    9 f3 S* x" j# ~: z) v8 e
  567.   m_pMainWnd=dlg;+ e5 C" j; _7 l; v6 N) ~
  568. 2 E9 C5 H- `$ J. Y+ W' A$ ~! D! p
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    9 N1 e( w5 R" O+ L( Y& g3 m0 {  c
  570. 2 _5 C2 |& D9 g: ?
  571. //  GdiplusStartupInput gdiplusStartupInput;2 X# ?. Y6 ^& m4 U
  572. //  ULONG_PTR gdiplusToken;
    , C6 E/ R. I) t9 U' V% z6 _, f+ p, q. @
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    $ `& W+ I- I# E  k8 x) [# z  p; I- C

  574. ' P4 G, k+ [0 ]  {
  575. //        CRevAppDlg dlg;
    2 c4 \! f8 j/ a7 _% V
  576. //        int nResponse = dlg.DoModal();
    / J+ |  j! g( M6 b7 @! m4 N
  577. //        if (nResponse == IDOK)2 p  s, {* z' }/ e; N0 a7 Z( |0 B
  578. //        {% y# J3 n5 }# Y* T9 U2 J% B
  579. //                // TODO: Place code here to handle when the dialog is
    , O; ]$ r4 S" A" H7 P" G: B
  580. //                //  dismissed with OK* X2 j' j1 f2 o6 Y+ S; d" j, F
  581. //        }) N4 z1 n! W% [9 q
  582. //        else if (nResponse == IDCANCEL)
    & Q7 I" n. H# r
  583. //        {) g- A4 e+ @! W2 {$ s' ^, B
  584. //                // TODO: Place code here to handle when the dialog is/ B* ~8 u; v( z8 c
  585. //                //  dismissed with Cancel: p5 a8 [0 m3 y: C2 m
  586. //        }9 \& f% H$ D) D: w6 V

  587. 7 c- b. Z' P1 c+ C. @/ ?1 U
  588.         // Since the dialog has been closed, return FALSE so that we exit the2 a9 O0 `- ^: f2 }( M$ m3 \$ _
  589.         //  application, rather than start the application's message pump.) @  d6 P5 n, }: x; Q) `
  590.         return TRUE;8 n0 H' N; c7 b
  591. }
    - b7 e1 O- T9 v# Z+ D8 x5 h: A
  592.   J2 `9 Y* k+ K# d: O& Q0 C
  593. char *CRevAppApp::strtok3(char *pSource,char *token)" u! I4 C$ C; z# M. L6 o
  594. {
    ' `9 K' x: H+ S# M3 i
  595.   int i;$ T9 v/ c% e  R9 J# N
  596.   char *szRet;: W2 @4 _. @. N6 o

  597. # c( r) b8 e2 t6 I8 }- @
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ! W/ U2 M- _0 z' h3 `. ^+ L& p+ J
  599.   if(sztoken)
    - J8 X- V' N0 p1 x
  600.   {
    % @* [+ |' J1 m' \9 w5 c. s
  601.     szRet=&sztoken[itoken];, N3 @1 F/ d8 W1 b
  602.     while(sztoken[itoken])
    + i, A, C+ [4 V
  603.     {
    1 x0 h* R8 L1 ~1 H
  604.       for(i=0;i<(int)strlen(token);i++)
    & t* m7 B+ b! H: A/ t, \0 F
  605.       {
    5 x" ^; y( q, l& g5 _; N
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])& L! I& a+ \  X
  607.         {
    1 q8 _6 m% e# K! L
  608.           sztoken[itoken++]=0;4 n, L( r! l' \8 V  A
  609.           sztoken[itoken++]=0;
    , \3 y/ u1 k+ I6 e# L' u
  610.           return szRet;9 J% r# H/ w- ]" B3 x
  611.         }6 ?5 z" B' t7 e  a! r1 g0 E+ j
  612.       }0 [( V; z2 l  Q. e: n9 _
  613.       itoken++;1 `2 b/ A' z" ]
  614.     }
    - q7 p# v3 u( G& S! n$ {. F" O. `
  615.   }
    5 J* ~5 E, D! T! x$ a) N
  616.   return NULL;
    8 j2 J; T$ u2 f. Y- \0 D
  617. }
    ! |$ |: S& i0 P6 i0 B" Z- l7 K
  618. 0 B. J7 h7 p" ?9 c
  619. void ProcessProc(long Total,long Current)
    - \& V- k- c; `  W+ P) }7 ?# M2 K
  620. {& v! z4 R: W. u3 C3 B3 m* E8 r
  621.         MSG msg;' J, G5 X; Q; z; D- N" {
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);) l& q( @7 {2 @1 F$ D! N
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));1 h1 Z' L, b8 F4 k5 S& l. Y" i
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ D1 d+ j# W* e/ o
  625.         {, ]) S, L1 j$ @* M- ]3 ]  ~3 [3 i
  626.                 if(!GetMessage(&msg,NULL,0,0)). N& X0 Y' J8 K2 F- {3 q
  627.                 {* x! I$ f4 P" q1 v8 ~% V
  628.                         return;
    ( M. [+ _: J) w2 l( M+ I6 I5 l/ a  o
  629.                 }
    + A6 }: O; I, _: a# x
  630.                 TranslateMessage(&msg);9 u$ C/ O+ s$ i/ V3 I
  631.                 DispatchMessage(&msg);8 p& D% M; O! V  S3 [7 Z$ r0 P
  632.         }        9 k  n6 g, m8 T# g! q. Z! D
  633. }
    : }( ^9 L6 Z( |; _: s4 E! k
  634. ! t7 [( P$ S2 O! V4 ]6 }! h
  635. BOOL bFirstChar=TRUE;
    + G- v: S( |* _5 i# H

  636. * P1 _" u$ @; z# S  Y# w  g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)8 ^/ a3 H# K6 `  `7 _! _
  638. {% e9 L4 A, W4 @' [( }; f
  639.         // TODO: Add your specialized code here and/or call the base class$ _7 [# o+ ^( @, D$ E! A; h
  640.   switch(dwProgramState)
      T, H9 d( R& r3 N
  641.   {
    / w' ]9 s3 g( R: `5 s9 e
  642.   case AP_NOTHING:5 y, y  s5 M, P2 W. r6 K' O
  643.     switch(dwStartUpSteps)' C) N7 t1 f1 [4 P9 l0 A& K
  644.     {+ R3 [( J9 v! P8 z
  645.     case 1:0 v) E' o6 S( u9 G3 N
  646.       {/ y3 O- _/ H3 }) ^
  647.         int i;8 v# U0 S6 e$ E! B+ L# ?: f
  648.         CDC *pCDC=dlg->GetDC();+ I; y7 j! y8 ~/ n! r  Q5 l
  649.         HDC hdcwnd=pCDC->m_hDC;
    2 H2 d2 N( e- z8 c7 U: D2 }
  650. //        Graphics graphics(hdcwnd);* {: |9 n) |! B  e
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");3 Q9 t1 c! q9 D9 o
  652. //        INT iWidth=bitmap.GetWidth();8 Q5 o. O: [8 v9 Z
  653. //        INT iHeight=bitmap.GetHeight();
    / A3 c+ d/ I* S9 m4 t/ ^8 `
  654. //        Color color,colorTemp;
    / ^% e4 {, d* b# k5 Y' O4 S7 I
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ( V% O. P8 J  a1 f9 v
  656. //        {  M7 ]% i* o! a, ]! j, v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
      Y- b$ `# \7 Y, Z+ J! n
  658. //          {+ n5 F7 G$ B3 A! `. ^
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ' e) C9 z. x% T- }  b
  660. //            colorTemp.SetValue(color.MakeARGB(6 [3 u  S! g+ ?! f
  661. //              (BYTE)(255*iColumn/iWidth),
    1 t6 [# w9 \% y1 g
  662. //              color.GetRed(),
    ; t! }  Y( h5 x5 G  H5 L
  663. //              color.GetGreen(),9 Y# W, M9 M2 O" {, L
  664. //              color.GetBlue()));
    ; D( L2 G' |! B/ b8 Z, E/ {3 B
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    $ J( E2 [5 h5 J) x$ u( l3 b
  666. //          }
    ; u+ H" J; O& W# {# Y1 l( W
  667. //        }4 m4 n' z$ d& G2 `
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ! w+ x* z& v0 W+ v" d8 X
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, I' V! o3 n9 q, s1 }# r1 J
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ( b8 y# j5 L# e6 a. P
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 w% Q3 q+ F7 A( O
  672.         for(i=0;i<240;i+=8)  M; l1 J. ~& I
  673.         {
    9 m, C+ l: ~  s: y& u# H
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" Z3 H# _" N8 t* q# n
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 H- V$ M# n: g% }' Q$ l. m; _
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; c6 r7 W' [, f6 Y9 ]" q; K- ?
  677.           Sleep(33);
    7 i) ]& G/ ]9 J( v% D+ g3 F
  678.         }
    : @: r0 A  m  H& }
  679.         Sleep(1000);4 |! g1 ]0 ]! {8 M$ {! f
  680.         for(i=240;i>0;i-=8)
    6 Z, L2 ]$ P0 C/ i7 @& \" T
  681.         {# l% w! z+ }; [: q+ ~+ W: V
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: c! a' A' `+ `7 ]" O
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* t' l( v# j' @, {) X6 T2 f! t1 E4 \* p
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);9 w, B* F8 K+ B% |: t
  685.           Sleep(33);$ g6 N: K) `! L' j: _
  686.         }) F  d2 i6 W& l
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    / V: c' y8 d9 B6 T2 x4 S
  688.         dlg->ReleaseDC(pCDC);
    # |( V) O! {! \5 Q
  689.         DeleteDC(hdctar);6 b% }0 v2 v0 a- p! [
  690.         DeleteDC(hdcsrc);$ n- L& c9 @0 J3 t
  691.         DeleteDC(hdcorg);1 r8 N  I# Z# P- F- [- U
  692.       }3 `; |# a; N; C5 {( l0 N# Q- M
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);" T2 Z3 v/ U* t2 t6 {
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 n2 n3 t; j4 E$ F7 G8 |8 R
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    . f0 p: I* @. k8 j7 Y
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ! v4 i+ G( A9 G" G  t
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 A/ s# X% R0 J  s, v: n2 p8 l: p
  698.       if(!Dn.Connected())
    2 X; S1 e: G; z, X6 ~
  699.       {
    ( Y3 W  q6 {& n% Q* d
  700.         dwTotalFiles=1;
    , U3 T$ w1 q0 |3 x& Z! n
  701.         dwDownLoaded=0;1 A8 C, |; J4 v1 }6 U  _$ I) r' p
  702.         bSilentStep=TRUE;+ u3 t+ c+ f4 b$ J# j$ K# h8 E- Y
  703.         bCompressed=FALSE;
    2 H; A+ J" ~. \8 a  Q  C/ t0 ?4 h2 r
  704.         strExtLocal.Empty();: q$ i/ ?5 X# W
  705.         strFullName="readme.txt";
    ! [/ P( \7 y) w# V* A3 h& J
  706.         dwProgramState=AP_CONNECT;
    9 h" U" c# O- e& i
  707.       }) j8 j) }% G9 ~& K! J+ ]  i
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();$ I% K- l( T. x0 y7 z9 Y
  709.       dwStartUpSteps=2;0 i% j# }  R9 `+ n
  710.       break;
    ( U7 w  {+ F# \( o* e$ F3 j
  711.     case 2:' V) z: {4 ?( X3 T3 z* T+ ^
  712.       {8 K- i7 {$ e5 X2 q0 L% C
  713.         int iEOF;; K+ C$ P- Z/ x1 y# w+ _/ ~" n# g
  714.         FILE *fp;
    ; H- K* ?( N" C+ _/ M) Y. F
  715.         char szString[512];
    3 G2 U" ~$ X( c6 W! [. F& I  @
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");0 A1 k$ a( V  d/ c# P
  717.         if(fp)
    2 u6 D9 W4 S4 K" C  P/ ?
  718.         {
    5 e2 K3 @# H5 ], L. m# D5 v- Y
  719.           do
    ! t; r3 e/ \. o0 p% K0 n; `
  720.           {# G! D+ n- t8 c. i0 n
  721.             iEOF=fscanf(fp,"%s",szString);
    ) `  ~- b1 y, y& z+ ~
  722.             if(strlen(szString))  p' `/ j* o7 d$ f! T
  723.             {
    6 P! _' r! w; X
  724.               if(bFirstChar)
    / S% z# f7 M0 W# c
  725.               {
    6 d. Y; K! q: X% `; o5 b1 W
  726.                 bFirstChar=FALSE;7 z) ~7 w" q) N! X, y
  727.                 bConnectIsBig5=FALSE;
    5 T0 n% ^( |6 d9 i
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;. l" v0 w5 ~6 s: X4 d# U+ ^
  729.               }* T6 ]6 n8 j8 ^7 j. a
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    " x$ O7 ~7 s3 w4 A' a  ~
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));1 @; k9 q$ h) V' P
  732.               dlg->m_ListText.AddString(szString);
    ( A/ e3 J, q3 S1 W
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * C& Y- ^7 m2 r; A% m- `! ]
  734.               *szString=0;
    1 w" B0 n* `, g. w
  735.             }
    - g3 ~: j0 T- v
  736.           } while(iEOF!=EOF);' f7 Z& C. ^4 g! {. X: J
  737.           fclose(fp);. R% ^& L2 P& D7 \
  738.           unlink(".\\DownLoad\\readme.txt");8 W( w3 l! S! I
  739.           dwStartUpSteps=3;
    8 ]5 }6 }. b8 `/ T, E2 Z
  740.         }& Q- X$ Z9 _& u& B6 Z
  741.       }7 J1 }% ?+ `0 E  ]3 L$ y, o
  742.       break;
    ' i3 K# c7 M  I: P2 s1 @
  743.     case 3:
    1 F- d7 V$ I7 U# g
  744.       if(!Dn.Connected())- G+ q/ _0 i+ u4 w% \( |' h/ L* R
  745.       {
    0 ~5 K5 ?, C" o4 r- @/ \
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    " r+ m. o9 X: f; F- I! }: l* e
  747.         dwTotalFiles=1;+ y$ L) g$ q5 o5 N  L& i8 q
  748.         dwDownLoaded=0;
    : `) q  e4 {8 Z8 v+ v* o3 H' q
  749.         bSilentStep=TRUE;( J: }" c* x( l% O, |5 Q7 e
  750.         bCompressed=FALSE;
    : [, M, Y+ [: O
  751.         strExtLocal.Empty();' q8 I! v9 k8 q; r4 w: `8 ^+ Y% Y. x+ ^
  752.         strFullName="checkversion.txt";8 X; L6 h. s8 K* U
  753.         dwProgramState=AP_CONNECT;8 I" N8 `8 S4 c0 ?5 ?7 `; Q+ g0 l
  754.       }& P$ G% C+ @) k
  755.       dwStartUpSteps=4;% @4 L  _1 q8 A: J  [& E% |
  756.       break;
    * w) J2 J+ T" i! a% a
  757.     case 4:
    % O, h. K  s2 d# Y: N! [1 W: ~! w, `4 e
  758.       {
    9 S9 Q+ t0 q2 b, R( L
  759.         FILE *fp;
    % B/ k0 e! P# [+ E; z
  760.         char szString1[128];
    0 b" P: A: d1 u# {% X
  761.         char szString2[128];
    : X& N) R& t/ h" g+ T$ i
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    + O$ ?" A+ s; f0 y9 _$ ?0 Y
  763.         if(fp)+ I5 i7 |' u4 E  ^& g
  764.         {: ^) |2 s% X9 L. T. H
  765.           fscanf(fp,"%s",szString1);
    0 e+ J' T( ^2 U2 E
  766.           fclose(fp);; p$ O, {  Q' F' y7 @1 u
  767.           fCheckVersion=atof(szString1);
      a3 _! K) q# \, D
  768.           fp=fopen(".\\checkversion.dat","r");
    , s+ p, b. H' C1 i$ P
  769.           if(fp); R" s- Y/ H) A9 @
  770.           {
    - C4 y( j8 d' m$ @/ k- G: D" j( }
  771.             fscanf(fp,"%s",szString2);0 V# h1 f5 i: \! S/ k4 k/ k
  772.             fclose(fp);) N/ a* S1 R7 M6 H. m
  773.             if(atof(szString1)!=atof(szString2))
    ( c! k% j9 X5 N, x0 i1 ?
  774.             {
    0 ~+ b$ v9 C1 o4 s
  775.               if(!Dn.Connected())
    # k# r; o! H; W7 r. P( H
  776.               {
    ' j0 L; S. d9 D9 }
  777.                 bFirstUpdate=TRUE;
    . s$ I, \8 U2 E1 F
  778.                 dwTotalFiles=1;5 a+ |$ m; m! I7 x0 s& e9 W
  779.                 dwDownLoaded=0;: Y  z: D* l5 I0 G7 A
  780.                 bSilentStep=FALSE;
    ( ^- \* G! C( P- C$ w" z
  781.                 bCompressed=TRUE;
    4 \4 m) q; y2 |
  782.                 strExtLocal=".\\DownLoad\";
    ' V; T6 l$ `; P9 Q5 ]/ i2 _$ ]# q
  783.                 strFullName="update.txt";$ }' a/ W) B3 U7 M9 i4 Q
  784.                 dwProgramState=AP_CONNECT;
    & j9 V0 [% V2 z( c
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" g; s9 L# j7 a0 T) g: v* d
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% j( r  P) I& L: p: w+ O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");( r' `; a4 ?6 t
  788. 8 r5 v1 T- u1 h' e: N" D, f
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. D% g6 T6 I% n+ N( o3 v
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    5 H+ J3 _) A+ P8 i* `" @
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    % g7 N6 P5 U* K. V: G: D
  792.                 {% y9 a2 z  [% y/ `6 j
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " j. e9 C( l. C  E9 \8 d% V, U
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    * o6 G; ^% {, c( Z9 |7 G. Q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    & ]4 A2 j/ c* _! y1 L  [
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * {5 b$ Q2 N* p0 F

  797. ) v8 r  K1 A7 e( [( x, A$ o
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    3 C" W6 d, q9 T1 n+ [
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, ?5 f, I2 ?5 \6 q7 b' |& E1 N7 O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! ?# k4 E' B1 X7 f# ]* [+ X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 T  ?8 E8 @6 G" k
  802.                 }  E5 G- h0 k9 c+ t
  803.                 dwStartUpSteps=5;
    . \+ L. D: j/ [8 n0 o
  804.               }) Y9 w$ ]# C* E1 H7 Y- b
  805.             }
    " |* E1 e4 X; C: p1 H
  806.             else5 r# i: \# {1 c
  807.             {
    : ?6 U9 }9 p5 W, h$ A! [6 f
  808.               unlink(".\\DownLoad\\checkversion.txt");
    3 u( g! J2 j5 X: p/ }
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");6 v3 E7 E' t! a( H8 M; q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' U7 ^" w! w- n4 G
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");8 H+ I; l; U9 O6 }, s9 ?
  812. 7 D! Q: `6 s" Z0 l$ A2 @' w
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 S/ @, |: }" i* G1 n4 w$ Q2 Y
  814.               dwStartUpSteps=99;
    / O2 A1 v- X, w2 ?% c
  815.               bFinishUpdated=TRUE;
    : H0 c: \" E$ h) R% N* n9 J
  816.               bCanUpdate=TRUE;& ?/ \3 U* J0 I) K! s2 ?
  817.             }
    $ m" `2 f+ G2 g8 a. b% \0 ~
  818.           }
    * s; I/ \2 N+ \) o, H8 |
  819.           else# {; P, F5 r3 d# l
  820.           {" j4 [# x! X0 ]0 o
  821.             if(!Dn.Connected())+ P6 ]' l' Y- h7 |* I' a
  822.             {6 x9 q- b4 F! f
  823.               bFirstUpdate=TRUE;
    ( _, C1 M( i+ [5 y
  824.               dwTotalFiles=1;
    % \$ c4 @4 G& p( |) I; m0 w7 V
  825.               dwDownLoaded=0;
    + a  y/ {. W, N& t) |
  826.               bSilentStep=FALSE;1 Q4 [3 W7 G2 s" Z0 I: U
  827.               bCompressed=TRUE;
    1 [8 a/ @1 w' |! |' q
  828.               strExtLocal=".\\DownLoad\";. c' t& c# P" K; R4 V
  829.               strFullName="update.txt";
    - |6 L1 n* j" L, I) W, E
  830.               dwProgramState=AP_CONNECT;/ o2 ^* e+ x( ~0 [1 h, m% K4 [0 Z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, h0 ?* c5 v; a% l: ~# ~) O
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      v8 h# F4 X! q! T! x
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' l7 k; W5 A$ Z5 u, F2 U9 g3 l& ?
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 u' O, R& }$ Z
  835.               unlink(".\\DownLoad\\checkversion.txt");
    2 \' r( p4 [/ w( @% q
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)5 {; G! S1 S6 K
  837.               {
    " k! D/ v* B1 R) w+ u" Q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 W+ I; F8 t9 P2 d
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    % N' p5 K# M4 C9 ]- I+ q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    : j9 O/ ^% k5 s2 L2 g4 |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) k/ t* z! S0 W3 V. E4 b
  842.                 8 H5 Y) h3 [1 t0 A9 R
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 j% v( x$ F5 [) {" p8 J9 W2 M
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 n9 t5 a' J: o4 W2 J4 T% `
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");% G% z! Q- ]/ _0 u; ]9 }5 r$ R
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 ^& a4 |  _7 p- B/ C+ h9 z9 x
  847.               }# f8 F% Z4 K0 |9 n9 I: O
  848.               dwStartUpSteps=5;
    $ A  T) t7 C# i+ V% y
  849.             }
    ; U/ x( S2 G$ |( j4 r! U+ |
  850.           }
    ' r7 ]  q, P. e3 |) u- R
  851.         }
    ) s) r5 G1 u( O9 w4 Q6 b
  852.         else
    ) x! `6 {% e. L9 l
  853.         {
    1 v. ~4 c; a6 T* N  y. _9 {
  854.           dwStartUpSteps=3;
    , ?. Y5 ]! a" m" A
  855.         }# J7 U1 f6 ^# E4 ~) G5 |
  856.       }
    ( h  w, H5 ~; M& {
  857.       break;! J5 G5 ]- z3 ^* s0 R$ P
  858.     case 5:! X! |7 ?9 V7 W# ~2 J5 I
  859.       {) S/ p5 ^6 W8 o
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    # T# b/ g/ R9 J. Z
  861.         {
      R) C: @( T, Z( m& v
  862.           int opt_overwrite=1;" J$ Y4 h! @& Z. @0 v" o
  863.           int opt_do_extract_withoutpath=0;, n; A9 Q, M' O7 J  A
  864.           unzFile uf=NULL;+ c: H1 a* m8 ^( x

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

4 V- M( m) ?* F, d

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-23 11:50

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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