找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
" }6 v7 B  o$ n! \- G# R8 X
  1. / RevApp.cpp : Defines the class behaviors for the application.+ z  m+ S  `! N8 B! u
  2. //" E1 [: O" v) o4 L
  3. 9 s" Z: N8 Y9 M+ ]8 i% E5 Q( k
  4. #include "stdafx.h"" x+ u; `3 D# i6 ?/ l

  5. ) Z* N- R7 |; ~, y9 e
  6. //#define UNICODE
    1 a2 S: U5 I7 B, p+ W
  7. //#include <gdiplus.h>
    0 U5 H+ ?( q  O! E
  8. //using namespace Gdiplus;3 M( }# }% @8 ~6 t

  9. 7 H6 Z/ \  W6 d2 V7 O( s
  10. #include "RevApp.h"
    : @; G, M2 ?* A# k  L: P
  11. #include "RevAppDlg.h"
    ( s7 L. E6 K$ Q% [# s- B
  12. 7 _/ q& ^4 Z1 _( W; V3 b: H' Y, Z
  13. #pragma warning(disable:4786)
    - ]/ q$ L- _+ I) a) b5 P
  14. #include <map>
    $ @6 X0 o0 h  q
  15. #include <list>8 m+ v/ v, k+ E
  16. #include <direct.h>; z6 j/ c8 p8 T# o7 N2 R2 Y# }+ i

  17. - |( i2 g/ `  d7 M2 X3 G/ s9 r
  18. #ifdef _DEBUG
    % A, J5 L; Q& n  }6 X8 ~
  19. #define new DEBUG_NEW" G  Z, l+ v2 L: c
  20. #undef THIS_FILE9 O9 `1 p) M% a
  21. static char THIS_FILE[] = __FILE__;1 p2 v1 u% m' [2 T. v. z
  22. #endif
    8 x+ Z* N9 D7 B
  23. #include "SkinResDef.h"$ f* L* }6 c8 H' i3 D1 s$ }* D
  24. #include "ChangeBG.h". s* I$ M( k  _: ?  W# P; N
  25. #include "AFXINET.H"
    " e1 V# ]& e/ c) X1 F3 d7 O( {" S

  26. : b6 \9 v8 h5 w; Q7 t- `$ A
  27. #define TRADITIONAL_CHINESE 0- F& L% K/ z* Q1 B  a  A( u4 p
  28. #define SIMPLIFY_CHINESE 1( Y& J/ ~. n8 q4 E6 z
  29. #define ENGLISH 23 T$ ?- e9 h9 s' ]
  30. int m_iLanguage = ENGLISH;
    8 Z( m6 ]0 z: o8 o3 {; D* e
  31. /////////////////////////////////////////////////////////////////////////////  Z2 n3 I& p3 `* a! P* ^; I5 p# y
  32. // CRevAppApp0 ~: F% b2 v! ~% t  p" a

  33. 1 v* }, _6 Q% k, B6 n/ F  }& S
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)  B4 E6 o( u7 m5 t
  35.         //{{AFX_MSG_MAP(CRevAppApp)
      u1 B8 l# F- o. }4 `
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.) O* t) A8 L' h, |- }! `' _0 }9 W
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!+ k" ^( S" ^8 u6 {# u5 }
  38.         //}}AFX_MSG6 [; n/ W7 B( S4 |0 B0 ^8 N
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! F& S' O0 O1 x5 I4 e7 j
  40. END_MESSAGE_MAP()
      s6 S7 q* O( m6 {& M$ n$ I* g

  41. 8 B2 K  ^9 \. s& @; ~
  42. /////////////////////////////////////////////////////////////////////////////
    , M1 s9 W+ D' A; e9 S
  43. // CRevAppApp construction
    5 q$ T% g2 V9 R- T2 ]4 X" w

  44. ) x& u, F# D( y0 v& C; ?% |2 E
  45. CRevAppApp::CRevAppApp(), ^: i$ X; X9 K& V0 w
  46. {
    + |; Z2 [* a7 g3 u8 D5 ]
  47.         // TODO: add construction code here,7 s- x* F& u& g) E3 G
  48.         // Place all significant initialization in InitInstance
      C# a/ }' ^" i
  49.   bDisplayIsBig5=FALSE;
    & Y+ a+ }& ~3 t7 ~
  50.   bRestartUpdater=FALSE;1 ]" T/ M+ c# C1 m' `
  51.   bFinishUpdated=FALSE;* r+ W6 S2 W$ q& \9 H" h
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;4 F/ K) e" H/ ]5 K  D& k: ~
  53.   InitChangeDataBig52GBKS();
    + [2 @- M% e% @
  54.   InitChangeDataGBKS2Big5();1 {7 D; ^3 H4 L9 S7 a0 R! W
  55.         //5 K3 m) ~" H+ h; a2 u' X
  56.         bClickRunExe = FALSE;
    % r+ ~- p, o) J2 X! @  w$ {
  57.         //
    9 C" S/ B  b6 ^( Q9 F8 ?4 A
  58. }; R% q! V3 P9 K" l7 H

  59. 9 R$ |* S4 b8 Y1 B
  60. CRevAppApp::~CRevAppApp()
    6 f4 X4 _6 E6 a! U7 c" `7 l! Z, ^. t
  61. {5 U0 A* \/ F7 l* \- Z' ]
  62.         // TODO: add construction code here,
    5 C6 a  R, d$ H- q8 o/ P
  63.         // Place all significant initialization in InitInstance
    - P7 G# D( o8 w; ?. s' Y6 i- d
  64.   EndChangeData();# o" w' D! Q% e8 Q/ e* Y. ?
  65. }
    . t4 F8 N) p% F6 ^
  66. 9 Z. X7 `( C! ]2 g' L. J, c8 E- y
  67. /////////////////////////////////////////////////////////////////////////////
    ( q3 _7 h7 e% n6 V, {
  68. // The one and only CRevAppApp object3 D0 p4 _3 g4 P+ ]' \; G% \" n% j: J
  69. 0 l! I* }% E, J+ c3 n1 \% N5 ?
  70. CRevAppApp theApp;5 v( N, i% V$ N. s

  71. 3 Q# p1 v% p7 t2 q/ n
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)( v% T) m+ u3 w& N# J( _. y8 o
  73. {8 |/ O$ Y  R  n
  74.   int iEOF=0;5 d6 z, j+ r# U
  75.   char szTempName[MAX_PATH];+ V- l1 ^1 S7 ]: O( p
  76.   *szFileName=0;
    5 m% j- i! m. ^: [" C7 d! R
  77.   iEOF=fscanf(fp,"%s",szTempName);5 W- K# K6 ]# s! i1 g; S1 E
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    % T' l( K* n5 S! Z2 n
  79.   {
    : V" k' S- {1 j. b, y; C
  80.     strcpy(szFileName,&szTempName[1]);/ ]9 T% \. R  g; _6 ~! d! s& R
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) r* q5 L2 Q& f: `/ U; ]
  82.     {
    * v* m" [4 W0 ?5 M
  83.       iEOF=fscanf(fp,"%s",szTempName);5 o+ Y+ M8 n% H1 P
  84.       strcat(szFileName," ");* I2 s4 C% p' b- [! V
  85.       strcat(szFileName,szTempName);
    ' \7 F( `5 o8 V
  86.     }# E" V4 a( D( O: m1 Q& I
  87.     if(strlen(szFileName)>=1)
      y7 S( s- C+ L! w1 d
  88.     {
    * g! y. U7 N. ]2 [0 c
  89.       szFileName[strlen(szFileName)-1]=0;0 v* n$ k% I- I& E& E6 c4 z
  90.     }% l0 O$ B  [7 w0 l3 ]
  91.   }( C; r; h4 P  m( {2 P" t
  92.   return szFileName;
    6 i, a8 F" d. a5 n) i  L  \$ b7 n$ ~
  93. }$ O/ M1 Z9 ?: E2 \5 m+ T, X' F
  94. ' ?3 n5 {! f# y$ C2 N/ H9 t
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ; W* W* @- Z6 X$ G: G
  96. {6 X. n5 ]0 ?3 x9 p& e* \
  97.   FILE *fp;  q& a- C, v' }5 u$ F( F
  98.   char *key=NULL;
    ' P0 H3 O% f1 C7 p3 C. V2 ]
  99.   char version[MAX_PATH];
    " c% N$ d# I' Y" X# D
  100.   LPUPDATEFILE file,olds;8 z3 N) N9 @/ \  m0 `( Q* P
  101.   std::map<CString,LPUPDATEFILE>::iterator p;2 s9 g$ ~7 o% r: x% z

  102. + I4 t" d0 J3 ?# R+ n4 ?% I
  103.   UpdateList.clear();
    2 b# y' R- u- y
  104.   UpdateFile.clear();
    , ?5 N% S$ P5 U  {6 S6 s1 G' q1 A
  105.   if(GetFileAttributes(filename)==-1) return false;5 P# u* e. l8 M; @2 E
  106.   if(!(fp=fopen(filename,"r"))) return false;  j! b: A+ x  @+ T* x  ~" l, G
  107.   fscanf(fp,"%s",version);9 a! d# e# s+ l! {1 _, `, a$ D
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ' B+ H% c4 w: d& N2 {
  109.   while(fscanf(fp,"%s",version)!=EOF)" U% F) X1 c! G" W' S
  110.   {6 o" _4 c9 M1 P8 z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 V/ \" w, c& l  L* H
  112.     fscanf(fp,"%s",file->path);
    * B$ x, P  x$ Y( T; R
  113.     ReadFileNames(fp,file->file);# p& y* V" c- w* I6 a5 H
  114.     strcpy(file->full,".");! g; k: o: x0 J9 y' Q
  115.     strcat(file->full,file->path);3 K# M7 h- _- ^
  116.     strcat(file->full,file->file);# }" ?+ \: G' X2 r
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    2 S  A* s1 L5 m& S
  118.     {# U; |/ \1 K8 w( `9 S1 S
  119.       file->vers=(float)atof(version);
    / P3 `7 x9 @8 C6 k% \( N
  120.       UpdateList.push_back(file->full);
    % X' N1 h, S$ W; d4 y' x: k( x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));+ W9 X) G% Z/ B  Q1 J% B9 i
  122.     }$ C1 u) m/ l! D, E  @1 [5 [
  123.     else6 O7 C7 M( r5 y3 x* L: b
  124.     {
    9 M) Y- b1 ]' K& Q5 A) K
  125.       olds=(*p).second;
      e; w- ~# b9 t
  126.       if(olds->vers<(float)atof(version))! N. F. a' u+ T# u. C9 u
  127.       {2 L/ I# n/ \5 c! @; k3 j
  128.         olds->vers=(float)atof(version);
    , p+ X8 w9 J, X. v) B, ~
  129.       }
    ; p3 t' Z# g1 L! y/ m, |6 F
  130.       free(file);! l6 v* a) l" Q5 B7 w/ F6 D
  131.     }) U% y, e& X4 b) R* c: G
  132.   }) X4 K. S* a+ U1 X, h0 ]5 O
  133.   fclose(fp);
    ' v1 x7 M* a3 B5 x* {5 M+ V+ z3 F
  134.   return true;' i; {1 K5 H) N, f) p. N/ K; f' B# x
  135. }
    , R5 W$ j0 y: w- S
  136. 0 _8 z& C  `  ?3 n
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)# y; n& ~5 y4 Z! R
  138. {
    6 w9 t" n* ^/ w
  139.   TCHAR  szFull[MAX_PATH];
    6 F% y  F8 [, Y, i8 d5 Y  [
  140.   TCHAR *token,*inter;
    / Z. Z! t6 j/ j; Q! L. C! K. }
  141.   *szPath=0;* I' V5 M: {: Z& U" S* h  {; B
  142.   strcpy(szFull,szFullPath);6 ~) L4 I. ?$ U+ M4 F
  143.   token=strtok(szFull,"\\/");
    . Z$ J2 u. E  o. k3 ^, J% O
  144.   inter=token;
    9 z/ r) E# K( E! S' A& {  {' _; J& f% q
  145.   while(token=strtok(NULL,"\\/"))! l& J& K+ F5 d7 F
  146.   {
    / F* @6 R: c6 q; N# [. D
  147.     strcat(szPath,inter);7 K% s& p" ?. R5 l4 ]# C7 A& e' f
  148.     strcat(szPath,"\");
    $ Q8 B1 p$ V0 Z  H: n9 `$ m& ]
  149.     inter=token;$ p4 y5 n3 W) n* [* N& P/ W" U
  150.   }& @) K( i* B+ @3 f* [
  151.   return strlen(szPath);
    + \/ l) e2 I; x( w; D7 Q% j
  152. }: E  r* |4 i  r
  153. 5 Q5 u) s& g$ J9 t1 b5 X
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    0 m9 L# m+ J* Y" ~+ R: h
  155. {
    8 M& W" J* S' L8 n- R* \( E
  156.   DWORD attrib=GetFileAttributes(Target);* O4 G; G3 q% z, i; }3 b
  157.   if(attrib!=-1)
    5 x& U/ L9 V9 i; p1 _
  158.   {
    8 @, i0 P1 j9 W0 c' U" a# |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    % K; Q5 A7 l7 ]; c' q) u. z' |6 V
  160.     {' T/ s6 {* A2 S8 x8 _
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);3 K: s4 x  J6 ^
  162.       SetFileAttributes(Target,attrib);6 P# m6 p4 Z3 U
  163.     }( k: V6 Z$ G5 K9 h0 d0 t1 C( @
  164.   }
    1 k, M: [) D  }! \! |' ^! C
  165.   CopyFile(Source,Target,Erase);  J* S' A5 I1 k* @  i! [& D) l- y2 L
  166. }
    , i% A9 l, \4 Y* v
  167. 6 ]7 s4 Y% k* h( b5 Z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & @# c4 R4 H& R3 a% T$ M2 S/ x$ g8 w
  169. {
    5 L; B. m( g* H0 |
  170.      FILE *fp;
    7 e& L& [% [3 s. P! M- o
  171.      char  szBuffer[8192];
    # u/ V3 F8 T6 @! ]% o6 D
  172.   va_list  argptr;1 p5 n5 g# D1 a" O

  173. $ L0 S4 Q) E. Z7 T+ B
  174.         va_start(argptr,message);7 U- y( S: G  U. B; H1 X- E% b
  175.         vsprintf(szBuffer,message,argptr);, K7 u% e3 c9 L$ u/ U% O1 |
  176.         va_end(argptr);
    . g6 U% H+ [! ?" ]9 ^- g6 X
  177.   fp=fopen(FileName,"a");
    ) {/ O8 `: V- r/ F8 X
  178.   if(fp)9 R* Z7 k0 i7 W& c
  179.   {
    ; Q3 ^" d( T. o6 Z7 A1 m" [* M- _% T" P
  180.     fprintf(fp,szBuffer);3 S0 S: k# \) T' E! C, l4 {
  181.     fclose(fp);! U# J' `" l4 q
  182.           _flushall();
    & F5 u* g; j/ u9 U  s% a
  183.   }
    * A  J1 X2 v9 F! {2 U
  184. }4 e# Z/ ]( r+ a1 y
  185. 6 |3 _8 D  C% C. w# {. n/ O
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / W  [# W4 F5 O
  187. {
    5 V1 [( P( t% f0 o  l- H
  188.      FILE *fp;
      b, B2 X( p% t' L
  189.     DWORD  attrib;
    . J2 y3 I& s, R3 m: H
  190.   attrib=GetFileAttributes(FileName);
    3 G  C4 V& l4 V) {+ Y5 i) _
  191.   if(attrib!=-1)
    " m( h% r* S( a2 V% P) \4 c
  192.   {
    1 _  |8 |" O; ~& j3 }
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);$ T4 e# y$ B% g" ^; G* Z. p& C
  194.     if(!SetFileAttributes(FileName,attrib))$ E% v" d9 i+ c2 n, b
  195.     {
    : h6 m3 K5 u% m6 J$ o; [
  196.       return FALSE;/ s& ^6 v. z( V5 J8 i1 J% v# r
  197.     }
    ) U4 c' i9 w, Y# v% z
  198.   }/ `; y# f( U+ ~' F7 Y
  199.   fp=fopen(FileName,"wb");
    3 @) r3 @9 _: k9 T3 R
  200.   if(fp)$ I7 d$ ]) @  l6 v6 ]6 G; w. g5 O! O
  201.   {+ N5 T! w* N2 B: ~# g8 z
  202.     fclose(fp);4 P1 l4 s5 W0 Q$ }7 t# z
  203.   }
    * h& l) ]( c* I
  204.   return TRUE;& d, b! m2 v/ P, `- B) X) \* C
  205. }
    . T1 b' ^+ L: h4 w; u  `& Z9 o9 A! U

  206.   y$ L, P0 C( _. l2 N
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ) F1 t7 d0 ]7 G0 Q  j- D
  208. {
    - U4 D5 r' Z, P0 {
  209.   char filename[MAX_PATH];
    " V+ ?* U* b! @9 R7 B- {8 v
  210.   LPUPDATEFILE file,olds;& Y0 Y7 z/ H- E) R
  211.   std::map<int,CString>::iterator i;/ d8 F1 x- ^# ^9 f) p. ?9 v* V  T
  212.   std::map<CString,LPUPDATEFILE>::iterator p;& }- R* w( `( b) }% r1 ~% e
  213.   std::list<CString>::iterator l;
    : d1 x! {, C7 j3 ~3 ~
  214. ' [6 T9 y. H6 o5 W6 B
  215.   if(bFirstUpdate)  _; n* @% L- g4 `, j0 ^
  216.   {
    6 f* j8 n( q1 _( f9 O+ C
  217.     dwCurrFile=0;
    " I4 V+ R' E) f
  218.     bFirstUpdate=FALSE;% j4 R' M0 y" J5 s+ A0 b; `( c2 L% ~
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) \  A9 {4 \: |* i
  220.     {& _1 I0 A; E" T' ]# q
  221.       dwTotalFiles=UpdateLocal.size();
    8 K: S1 h$ j: Z6 j% y
  222.       dwDownLoaded=0;
    4 l  b) Z5 X& A( S
  223.       bSilentStep=FALSE;- [* m9 y2 w/ g- F( G1 j
  224.       bCompressed=TRUE;; O9 {- E* m  a
  225.       strExtLocal.Empty();
    # p! R* S7 k) z" _1 W8 o  E' x
  226.       strFullName=(*i).second;, [6 c& h7 {2 q
  227.       dwProgramState=AP_CONNECT;6 Q+ ~) |# A3 W& _+ q0 l3 F! a
  228.       return TRUE;
    % r. p. l, z! t( ~
  229.     }3 o, S. i5 I, {5 L0 B2 n
  230.   }
    # A( }8 u% m: E* o
  231.   else if(bRestartUpdater==FALSE)& i; U* T, p  r! K3 ^
  232.   {
    / z4 X  d1 [+ s, V+ `' m
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 f: y  e+ U) {1 J0 b
  234.     {
    ; K4 }* b, `9 ?5 L% o2 j9 B
  235.       file=(*p).second;, S# f5 t* ^0 r
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())& c+ O1 x+ E5 c0 O8 l( `
  237.       {
    ' a  \, {5 u5 c
  238.         olds=(*p).second;/ a- x4 S+ o5 r0 h
  239.         olds->vers=file->vers;
    ' h8 x/ r, d: q0 U2 l0 `
  240.       }
    4 {& N% `3 i$ y4 o) @! {
  241.       else1 v0 [4 L; ]( ^7 g! c
  242.       {
    ' I- k$ ~! s. R" `
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : s4 G4 p* a: }
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ( Z* a1 x4 q3 y% f; S
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));1 N: X: {2 x5 W; ~$ P# u
  246.       }& T: N' ?/ Q( [/ Q* J
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    " |( |( q5 }( p. g6 Q0 D
  248.       sprintf(filename,"(%s)",file->file);
    6 K6 i/ v) z& k8 j+ e
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 g" a, n% D' S, H5 ]
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }7 t; [8 U" {( H( C9 ^( c! _6 t
  251.     }  G- Y9 l6 ]  Q% ?
  252.     dwCurrFile++;
    # l2 D/ ?! h9 }1 h, a- K
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    % Q* \% Z6 X& D" @! u: t& f
  254.     {
    4 t1 C' f5 C/ U2 z4 @! O6 v
  255.       bSilentStep=FALSE;* A" q* @" W" k. s3 D* y
  256.       bCompressed=TRUE;
    % e( }0 Q" A3 S& S
  257.       strExtLocal.Empty();/ Q( J& N. i3 [
  258.       strFullName=(*i).second;
    % `0 J7 e9 N: ^+ K6 |
  259.       dwProgramState=AP_CONNECT;$ }. H% M# d! ~. W& F
  260.       return TRUE;7 z1 n) m5 ?  |
  261.     }' W0 ~- X# G. p# Y
  262.     if(!bRestartUpdater)
    , Q1 [1 k+ i1 r6 K- v6 R' [4 [
  263.     {# x5 a4 p- o8 f# m* W$ t5 y
  264.       int iCurrSize,iFileSize;
    2 n4 l: x$ W% W4 N
  265.       iCurrSize=0;* B+ b! X# g: {8 D
  266.       iFileSize=UpdateList2.size();+ y( Q9 |( @- Y+ A1 H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");* S& q; y# }7 V
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");7 \. s( l( }. N6 S$ w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    & |9 Z6 z4 \9 J# Q$ @* y: q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 X* z1 |$ b) B/ P! _4 ]
  271.       Fclearf(".\\update.dat");1 y1 P2 L4 z1 D# U2 y/ w
  272.       Fprintf(".\\update.dat","Bloodyf\n");7 W. a/ B8 [1 P& J7 L- X' ~9 ?
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! `1 @5 l: p: p2 p1 n
  274.       {
    9 f+ g- g5 H2 R! K( M2 @
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    0 d& a0 U. Q9 u- [5 g' c
  276.         {
    . `" h5 U. [) I3 j0 W0 F5 c5 f# v
  277.           file=(*p).second;
    / R$ ~% I& s1 q0 H2 u# u. Y# m
  278.           sprintf(filename,"(%s)",file->file);
    . G1 w+ r$ X& S) y9 r. M$ g
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 ]7 R/ c2 n1 c$ t3 x. ?6 Y
  280.           iCurrSize++;9 j! h! h, K! i/ i
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % b$ z+ A* }* M/ V7 i" H
  282.         }- n! F- W! _9 {  p' q, Z+ N/ r
  283.       }
    3 R; v8 G8 V5 {' q- O- f" E
  284.       unlink(".\\update.txt");' ]' a. i1 W; b; s
  285.       unlink(".\\update.tmp");
      j7 a6 r  d0 s: C4 a
  286.       Fclearf(".\\checkversion.dat");
    / Y4 R. q  R& k  p) K3 V
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' D" ?% v& r1 F7 {& y  j' E" a. R1 {
  288.       if(UpdateLocal.size())9 |0 {7 F% H4 u
  289.       {
    2 I: [8 Y$ e7 U
  290.         UpdateLocal.clear();# g% s( T3 S/ {$ `) A7 Q
  291.       }, h5 h$ L  N: g" F# u( l: u
  292.       if(UpdateFile3.size())
    % ~4 L+ n+ f# s+ C) w
  293.       {
    0 N; ~* |- O. n: E6 c
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ r% D, \1 Z0 w0 ?' `2 ^8 I7 _
  295.         {& H8 v6 c: |2 K! V: W8 h8 B8 A
  296.           file=(*p).second;
    0 q1 h0 N2 F3 d& k$ P9 {1 P2 s
  297.           free(file);
    1 m/ m4 M# p3 k+ b4 y
  298.         }
    , h: z9 [1 U4 R" y
  299.         UpdateFile3.clear();
    ; Z$ a' d4 [* ?: |
  300.         UpdateList3.clear();
    " _- H& x1 M$ t( i+ }0 j
  301.       }
    ! D" t1 H! P4 u% O) O- {; ~
  302.       if(UpdateFile2.size())
    # R! Q" l3 n1 W4 @( o/ C8 O; ]: o
  303.       {: V! o0 q3 [) O( V2 s
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 x  v  g8 j4 @5 E: _3 T
  305.         {
    ; y7 J; D$ V- Z2 C6 [" y6 t+ F; j
  306.           file=(*p).second;
    , \$ N+ ]% s( m& X) x2 M  l5 ^$ c
  307.           free(file);- m& W# t! l' w1 y. V9 H' _
  308.         }& m1 d$ T$ O8 i( G
  309.         UpdateFile2.clear();- p* r& k( y" |8 k: j" R. C
  310.         UpdateList2.clear();$ h7 V% `1 |( n, n$ G& ], {2 G' o
  311.       }
    # m8 @6 n; v! D! s( @
  312.       if(UpdateFile1.size())
    9 X8 n% V. z: u: q2 B5 O
  313.       {
    - p/ i# b; c: I* N$ ?
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% D6 H$ ^5 y0 K. \& H& b, W$ |( g
  315.         {
      N8 h" S/ J% O( u! y$ V, l
  316.           file=(*p).second;+ S2 c1 s5 Y, n* e4 G7 a
  317.           free(file);2 y$ ^4 G1 l& y% C. f
  318.         }
    / J  S+ ?$ y3 _
  319.         UpdateFile1.clear();
    ! f- p# K+ z5 z. u, N1 [, }$ v
  320.         UpdateList1.clear();& ?  N! W; D: Q- M& ?/ [9 Y
  321.       }% D# B: c+ E. g, ~
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    6 f/ Z4 W2 q4 T4 {' E
  323.     }
    . R! l$ e- f: I# \" g
  324.   }
    - G2 ~( n3 q4 {1 V- ]4 b
  325.   return FALSE;
    4 y: I( o8 D; p1 X  L; |
  326. }3 S' B$ x: ^7 `  |6 b

  327. , T0 H( e4 c3 c3 X- c; b  M
  328. void CRevAppApp::ClearAll(void)( }( |. x3 {. m! }8 y9 W
  329. {7 S5 b, x  U% r. m/ [3 C+ b; n
  330.   LPUPDATEFILE file;
    / ]! X& c& e  L( a) s
  331.   std::map<CString,LPUPDATEFILE>::iterator p;+ z1 O5 P7 C% \0 x7 }

  332. ( M; `, g* \8 j2 o' c9 w
  333.   if(UpdateLocal.size())
    - m2 X- t/ S% G  C
  334.   {
    8 S+ v! Y* ?. p. R3 D
  335.     UpdateLocal.clear();
    " w, M% A( v' s$ u! g) r: @
  336.   }
    ; E8 t5 r! v9 g/ V- J, y
  337.   if(UpdateFile3.size())
    3 I9 K! O+ @* u+ w) p. b  J- a6 [
  338.   {
    3 b, y# V& ~8 P: M3 N& q1 N6 R% _
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " e" K: N! g' I( g7 d  E2 _
  340.     {
    / w, L  U# m3 H$ ?0 h- ~
  341.       file=(*p).second;
    , x$ R7 @! v' s; |' W" L! O8 J8 p
  342.       free(file);! r- u& x" c7 l
  343.     }
    : P7 U" L7 p0 c1 n, K
  344.     UpdateFile3.clear();
    $ Q+ H4 y  d$ C- q9 C
  345.     UpdateList3.clear();  ?' V- G; Q2 N8 ^0 `
  346.   }
    # q9 e5 r1 W3 i' f4 w. @+ D. S& M
  347.   if(UpdateFile2.size())
    . f# t! K: [0 k  ~: _, l
  348.   {4 U) ^; q, g. ~7 Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! @; S7 B1 b6 y  ]: M4 `
  350.     {  t: X# _. `1 l" X3 v) w
  351.       file=(*p).second;
    + p0 x- X( ~, {
  352.       free(file);
    8 f4 k6 A6 h+ }: p) z, F* W+ q1 G
  353.     }) `0 d# l% w4 [) R5 R( j
  354.     UpdateFile2.clear();1 u; a& Z0 @# F5 h
  355.     UpdateList2.clear();  M( t% @3 t: Q
  356.   }; r  u' l- H* u6 Z
  357.   if(UpdateFile1.size())
    ; |* h# I8 ~, x* E
  358.   {
    : b6 @& A$ q7 @/ `8 C+ p
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    " z) v& D8 h$ d8 W1 x+ D1 M. l
  360.     {
    : B2 Y( b7 ]0 Y) P2 C; R. y8 x) a
  361.       file=(*p).second;, T7 w# m  C% _! A. V: o
  362.       free(file);
    ; V8 N6 r% O, ?& A
  363.     }5 U( p9 w. }0 V' ?0 k
  364.     UpdateFile1.clear();$ c0 \& v$ f7 K; Y* `+ z0 t, r9 B
  365.     UpdateList1.clear();
    ! \$ Q. |, d  g: M7 K/ l
  366.   }* M  Y# |; C* ~. I* p) I  y  K. R
  367. }  
    % o- w  q- q! [' H$ ?
  368.   ! B2 M' Z; x1 H9 s( @) M
  369. BOOL CRevAppApp::CheckLocalVersion(void)8 l4 ?; J2 ?+ `# h$ E8 e6 K
  370. {2 K+ @" O$ Q) z) Y- A
  371.   int c;7 _! f  o  C0 v* ~; s8 u
  372.   LPUPDATEFILE file1,file2;
    . A. G2 j, k) [: p6 X( T
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 y) T, W" q0 \1 o1 |
  374.   std::list<CString>::iterator l;6 ~. g+ q; ^! S% U1 X

  375. ; l7 I% H' J$ P! [, X; T
  376.   UpdateLocal.clear();
    9 E- I8 C& O; G3 E, q% P9 c
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 |( [0 K- ]' t( A/ {8 Z. a% t1 ~- C
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);6 I6 J6 L. G6 D* Z3 O
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);% f$ ?2 }8 v2 u2 I6 r
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    & c9 }8 b2 n  }+ j# F+ g8 D
  381.   if(UpdateFile3.size())
    ) F! v. V1 A* a; ^- o
  382.   {1 O4 P# z- n4 w  v3 k  h3 V. R
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)* j. c- Y7 z) D* `
  384.     {
    - c' b, b1 \4 ^" K. @% a2 T- ]5 Z
  385.       file2=(LPUPDATEFILE)(*i).second;
    : Y  Z" h7 J) B% f4 r4 x- V  Y
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! q3 Y& \9 m/ z/ e; S
  387.       {
    # o4 D; T2 Z1 O
  388.         file1=(LPUPDATEFILE)(*p).second;
    # u+ N/ b9 U. q3 l2 A8 X5 B) e
  389.         file1->vers=file2->vers;5 Z0 X+ H4 s1 i$ ?
  390.       }
    0 R0 ]# z$ U3 U) z4 a. Y
  391.       else
    - Y. t+ H# i8 e: f9 \2 ]
  392.       {
    1 P, z7 p8 J- C+ F
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# r" r8 A  _# @0 J# f3 Q
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));, M. [% C. t3 [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));  K! w+ S$ l8 n* b9 b8 O. s# D
  396.       }/ o  c7 r: g3 r6 a4 }, H
  397.     }
    8 G3 X  E  y; I) X
  398.   }
    4 H$ u; g2 G0 }! p
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * f$ v* \7 h9 E/ }$ u6 Y8 @; ?! n1 `
  400.   {. T: C' u  F# r. T0 b' b9 D
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
      Y& {$ p; D" U$ ?$ ^
  402.     {5 Q& j6 ^( h+ e/ Y# }) w* u! o
  403.       file2=(LPUPDATEFILE)(*i).second;
    1 R3 l. ]8 q) A
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ o" j: E! j* x. n7 n- a
  405.       {
    4 J( {( P4 w; ^, ~  ]
  406.         file1=(LPUPDATEFILE)(*p).second;5 w9 M$ L/ ]% c8 j/ ~9 i! E
  407.         if(file1->vers!=file2->vers)
    % [' r# O& J. _) w& y+ L
  408.         {/ S7 n6 |1 _: x" A7 N1 K  n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% O+ W( w+ V: i$ o+ P
  410.           c++;
    & P6 M1 a' g" r2 y, f6 w
  411.         }& v. C0 s% f: g2 G( L
  412.       }
    ) W; k/ w9 s; T4 }4 e/ G
  413.       else1 l! |. q4 z4 c) e% i3 z7 E
  414.       {
    6 x5 X$ A/ K! d5 z" P8 t: Y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% Z+ ~/ S9 L/ Q* R9 s, Z) ~
  416.         c++;
    # f9 N: P# ^, r7 ?
  417.       }  j$ y9 ~& x9 _
  418.     }; ?* t  n7 {9 R' H8 X
  419.   }# j9 x( w) j/ a, r: g4 c
  420.   unlink(".\\DownLoad\\update.txt");& _& {* s- Y- L
  421.   if(UpdateLocal.size()) return TRUE;% Y2 ?8 A1 d  h2 s
  422.   else                   return FALSE;
    , N' _* _: t2 ?8 _7 M
  423. }% F4 o  w  u8 D" v% d+ \- e# J' w
  424. " H9 E: o+ V9 `! |4 F
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/") j& z% B3 A/ \: B+ C1 w
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"' F, @, l: T% ^9 t2 U; r
  427. / s/ |2 X% ?9 I: h: @

  428. . Y' X- O0 d+ `$ b, _
  429. ! A: b- J5 `9 g! W* {( b, n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ! r  G: F- W: E/ L8 A! q
  431. {% C1 ?9 J) G) z2 E; t
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    - Z0 e' W$ V3 d8 `6 n0 l
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): Z  m: ~) r1 ]  v: D; e- h
  434.   {
    ' V4 D" A/ P) q; F% t5 u
  435.     char szLanguage[50];
    2 ?' L# A' M  z* V
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* F1 \. k- G7 e, k3 W. ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) g7 T' O: Q  J# \( o4 e
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! Z& ?- f/ F) `$ C
  439.     else                                   m_iLanguage=ENGLISH;% n: x: I) {" O: e( |! Y7 K  h
  440.     char szRegister[100];3 Y$ w3 y2 w3 q' }: G& t, u
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 R/ F1 a8 E* s
  442.     strRegsName=szRegister;
    , Z3 S# i& P/ @5 O; J' B5 K* P# g
  443.     char szPatchURL[100];7 J, b! l+ _- S
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % a3 ]2 l5 x9 G- W
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. U3 T; Q, u7 t% S9 s
  446.   }
      E# Q0 Q- |% F- _5 P
  447.   else
    / r* p$ e/ Z  [. }& s9 l
  448.   {+ ~7 o! H; R. S, J  Z1 p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / H  ?- p* z! z( J/ D7 y9 g- ?2 o1 h' O
  450.     strRegsName=DEFAULT_REG_URL;. n" Q1 D" R1 k  Z2 o- Q( N
  451.   }
    $ v) O  F: Q& M" m% Z
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    $ p5 A5 n, D; x4 ]0 u
  453.   {0 {$ x) V1 ]6 Y5 n) I
  454.     char szIP[50];
    - f( N2 C9 O( ^3 `; L
  455.     char szDIR[300];
    ) N) l# H. W1 j, u
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))0 R$ }2 z) S- z3 P
  457.     {% n2 W4 L7 }/ o( R% X: j
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. \9 R! f; Z0 Y% Z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    0 q# V( @8 k/ @. R
  460.       strHostName=szIP;0 l" @8 S7 Z$ R' `; }
  461.       strHostPath.Format("/%s",szDIR);
    6 ]- @' `2 B( N
  462.     }3 q) c: L- T) k/ ?
  463.     else, p' P! [% R1 B% S( z  n6 A
  464.     {& j  _  @3 Y& h' U6 Z6 m
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( v5 h) }" M8 C6 V+ F
  466.       {) I. l# B2 t& d8 v% }
  467.         char szLanguage[50];" b" h- d% c% @& H
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; S# v# x4 c  F$ K
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 d. t* t- T6 `1 T$ e3 }4 z
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 Q, P( Y& a2 x/ t9 r9 v
  471.         else                                   m_iLanguage=ENGLISH;
    3 G' v. \% Y  o% j! O
  472.         char szRegister[100];! r4 h6 D  Q+ X1 h
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ( p& b" x0 V' l4 \
  474.         strRegsName=szRegister;+ y& F* l% I, g+ O
  475.         char szPatchURL[100];: e& _2 h" O) O
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 [" l8 I+ T6 l/ R8 C
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. {% M( B8 n) A+ H
  478.       }
    : H4 P6 l9 v2 }* e. R
  479.       else
    : }' c/ b6 R) O: o+ m3 A  p* V
  480.       {/ |% z( M) M/ o3 f) s
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # T) G& S% e6 Y4 ?
  482.         strRegsName=DEFAULT_REG_URL;
    # e3 `) \) s2 B" j- d; U
  483.       }7 K  H; s/ w, z$ X4 B& v
  484.     }( s  M4 z/ @: D" C* A2 _
  485.   }0 }; S/ {+ l0 }  |: |& B; {- J
  486.   return true;
    $ n! q( U  y+ K& s2 x$ u0 p3 I
  487. }# q" G+ i8 K+ Z- }
  488. / }/ K2 z( [( q9 O7 ~+ c
  489. #include ".\ZLib\unzip.h". \) p0 e, u  C! y
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);1 i; C$ f) l' W0 w  i8 f, L
  491. /////////////////////////////////////////////////////////////////////////////) F# b: U& L( y0 |
  492. // CRevAppApp initialization
    4 N3 |# o2 Q/ k* A7 J
  493. 2 l# X  }* y8 }& K* F6 i
  494. BOOL CRevAppApp::InitInstance()
    2 ]3 G( U2 j5 `( U% {
  495. {
    & f' M1 L) ?" h% x1 ]: f9 g
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    : X% G9 f) T5 `; ]$ M! J" {
  497. / b  ~! N* M/ d5 }6 d! S
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);) F) q; ?: B; w$ o- K
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))# [" b6 P% Q, v( f$ W
  500.   {
    7 B! G" ]4 m6 Q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");8 O  X' B0 J- H4 K, U
  502.     GetPathFromFullPath(szPathTarget,szPathSource);1 L+ o3 v' ~. k" u- m. F
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" G" y* }1 N. P
  504.     {- w: E: Y) J- _" B1 H
  505.       strcpy(szPath,szPathTarget);, W; I' `' u! C5 G
  506.       SetCurrentDirectory(szPath);
    # @/ q2 k3 C. @" ?* t
  507.     }" O8 O  x4 b4 F# f4 J- W& y
  508.   }0 j# a' F- @; @
  509. #ifdef _DEBUG) A3 c' B# {/ C. k; E
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 j3 U; {  _& K# v. a# j- s
  511. #else7 P2 ^# t1 o8 D- T  f1 ]$ s9 A* E
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 t7 Z2 T3 F2 z0 n8 J0 l! U% I
  513. #endif/ a+ a. y4 c; y1 [) N; N2 W7 q
  514.   {
      K' ~; l+ r( \& A! V# C
  515.     char tempFileName[MAX_PATH];+ C0 l, J% q0 K4 R1 O
  516.     strcpy(tempFileName,szPathSource);
    ' j9 g( l4 ^1 K3 e( n2 }$ F0 j  l! [
  517.     tempFileName[strlen(szPathSource)-12]=0;
    # S) e2 \8 M: t. b/ k" K; j# i
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ' u* x! K  Z, Q) s
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);7 X, A  S$ g- Z2 a
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);% L( @+ H$ _6 F' m
  521.     return TRUE;
    2 X% d( w; s$ V
  522.   }1 u6 j; ]  c' R8 ]  U
  523.   // Nuke 0118: Delete run.exe4 D8 A1 F) [1 L* e/ J/ A
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );! T* @. C1 y5 n0 q
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");8 V, y6 L' P+ J  p. h) @/ R5 F8 q
  526.   if(!ReadCfgFile("Config.ini"))
    4 m6 A8 ~: x5 Z4 e6 t! e0 K- U
  527.   {4 r& F2 l/ x/ g7 ]
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    - b0 X  X- |2 L3 h
  529.     return TRUE;& L) r! U, ^5 r% A
  530.   }' m! Q) ^$ A$ W! y* V
  531.   HANDLE mutex;
    0 d, m, z' s( U# S6 k
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ( |" i9 s6 ]! z- {/ P7 F* i/ C
  533.   {  F8 r" |1 I! ]& r0 @
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)( W# z5 V$ ^0 @0 I9 S, q
  535.     {/ ]$ C, b, W6 ^) p( E9 f8 v
  536.       CloseHandle(mutex);
    . R0 P+ o7 N- F& v
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);$ t) Y# A2 ~& n# k) i+ I: |
  538.       return TRUE;. D, v' ^& v8 |( n/ F
  539.     }
    ( a8 E6 ?% b+ L
  540.   }  
    6 m1 G4 Q3 T5 V  I& G
  541.   CloseHandle(mutex);! u5 i8 J  _- s4 r7 e
  542. 7 @/ r4 i* r$ U6 h9 ]% Q' f5 }
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% s* r: v  Q& Q" C4 f
  544. % a1 v$ y- r' J8 B/ R  @! d! w
  545.         AfxEnableControlContainer();. k6 D8 [# m, g6 o! I0 z' _( @

  546. " @* Z9 c( O- v% g2 \; B
  547.   bCanUpdate=FALSE;* }1 Z: y) x; _6 P+ m$ |6 W" a
  548.   dwStartUpSteps=1;
    5 E" H' z9 ~- C( r
  549.   dwProgramState=AP_NOTHING;0 P5 L, N8 `& O2 z* g

  550. ' U, F( a" x/ y6 p( q- Z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 B3 p/ N1 P4 W) G6 f
  552. 9 v+ ~7 K9 M% V* s0 {" \' F
  553.         // Standard initialization5 z/ R# Z' L* ?$ D
  554.         // If you are not using these features and wish to reduce the size
    " B) Y! K0 k2 _
  555.         //  of your final executable, you should remove from the following& T8 N  U+ `) \* M: D) w. [  F
  556.         //  the specific initialization routines you do not need.8 [- ?9 w, v0 h% Q- ]0 ^
  557. . G9 }" u1 B. |
  558. #ifdef _AFXDLL* @4 e1 Q8 r. ^
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL( o! T' Q; g3 v2 ~2 q
  560. #else
    2 o* i/ C! w2 q. U, i
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically8 [' X+ X: e; A) ?* I
  562. #endif& A* u; U0 n$ ~
  563. 8 j* H- k% Q& q2 k
  564.   dlg=new CRevAppDlg;5 l" `7 D- x/ @' ~4 q
  565.   dlg->Create(IDD_REVAPP_DIALOG);/ y, t6 e' I. ~; @
  566.   dlg->ShowWindow(SW_SHOWNORMAL);/ w7 L( L+ s) `3 N
  567.   m_pMainWnd=dlg;
    7 w' D8 ^: g0 H3 L* n. {" |8 a) h

  568. - y" F+ c+ p0 O  J0 ], _
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ( @- ?2 Z4 \% t7 s. _- ^- j. H
  570. 7 T. F! ^% I+ g
  571. //  GdiplusStartupInput gdiplusStartupInput;
      r! s  X$ `/ x3 p$ j; ?. J8 p
  572. //  ULONG_PTR gdiplusToken;& n% o* \1 G+ ?4 ?' ]: y8 X" r
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    4 x) Y  {) a1 w

  574. % u9 @/ P; J8 z, |* O0 o
  575. //        CRevAppDlg dlg;
    , @: h$ I( w5 u6 s+ O( P
  576. //        int nResponse = dlg.DoModal();0 V8 t: S4 ?9 L# S; p& v! x2 ~) o4 i/ f* P
  577. //        if (nResponse == IDOK). z! t: ~# d2 d" |- v
  578. //        {
    9 O# N8 B$ p; c2 n  u* X5 {1 U
  579. //                // TODO: Place code here to handle when the dialog is
    - C+ v/ H$ a( Z: X  Q
  580. //                //  dismissed with OK
    $ q! k6 I3 n- B
  581. //        }/ L: m+ V' W7 ?) \1 O. O7 q
  582. //        else if (nResponse == IDCANCEL)8 Z7 v9 c7 T7 l" A& j) B( e5 K
  583. //        {  w" X6 ^# @. @1 k! l. g
  584. //                // TODO: Place code here to handle when the dialog is* ^4 p3 V6 [! J
  585. //                //  dismissed with Cancel1 F( n- J& Q7 v- b$ {
  586. //        }* {( J( A* V/ I( z$ M

  587. * y2 `, h, m' Y: P- |; ?
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ) B" ]/ Z. p1 A: a& g+ }2 h
  589.         //  application, rather than start the application's message pump.: y6 Q. V2 p  ?# E( U/ r6 ^' c  v
  590.         return TRUE;
    : N, F* b% a6 |% k8 L
  591. }7 h0 e; u+ `: X6 R* l! s8 ?
  592. ; G; z0 M) {/ b/ a3 y  J0 m- ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' M/ L# I( m' |7 j9 L7 C
  594. {
      c3 S- q$ d' k0 m3 a* Y
  595.   int i;
    , `+ |( p5 w* h" z; ?
  596.   char *szRet;  D( r& i' U& T: V  w
  597. 6 B: I% N  P/ f3 w1 j  b' k
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    $ l! b9 e; Y1 `3 ~1 K$ o
  599.   if(sztoken)
    * x( M) |: ?' T  R
  600.   {, A$ q" j7 {7 l; R  z" y6 E3 I
  601.     szRet=&sztoken[itoken];/ c. q0 h9 B5 {, Y3 R1 y
  602.     while(sztoken[itoken])
    5 g6 F9 N4 Q8 y) b: e& X$ a
  603.     {- r9 a5 j$ p" h, z3 U
  604.       for(i=0;i<(int)strlen(token);i++)( C1 |3 k; X) S  Q
  605.       {' e" T. [0 G6 v9 z3 H: d& f
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])0 z. M: F1 E7 G; K( \
  607.         {5 }0 d5 ]6 V9 l; }, [
  608.           sztoken[itoken++]=0;
    " O9 N0 M- F  m
  609.           sztoken[itoken++]=0;
    3 O: j3 {9 H7 r) w- d
  610.           return szRet;
    5 \2 h9 S$ E! A/ d& i/ C
  611.         }/ N/ X9 b# _& w* {. s' f
  612.       }" a7 Z$ T1 R* V
  613.       itoken++;
    6 B7 w) ~9 x$ y3 L% u+ y
  614.     }
    - b* x/ f+ M& ]* R4 x" t
  615.   }& e5 U4 }: s( p$ r  Q
  616.   return NULL;) j* j3 i* n0 A8 R, i
  617. }. B2 F. i6 p4 b8 e' m; P4 I6 J6 R

  618. 8 P8 l/ M" r% @* ~0 z9 W5 }8 |8 `: w
  619. void ProcessProc(long Total,long Current)
    , H* G0 G& A8 R  P. Y4 n: P& v
  620. {9 h) `4 t- b& {& E0 ~8 Q" I
  621.         MSG msg;
    + h) V" l# J* a3 r. q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);2 F. C; X* S. d' j6 d: d* _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));1 \0 @# d4 t3 }7 s5 ^: Q/ S
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))- G6 J" A  h9 |- }5 M  B  G
  625.         {  A( P1 W- ?8 q
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & n% l+ w# r3 y( h
  627.                 {: a- L" Y: B5 }( A; D" n& j+ v/ U) ]
  628.                         return;
    ; M2 J% w. R: a( g3 e) H9 o
  629.                 }
    8 _: \  i8 S0 |/ _+ b
  630.                 TranslateMessage(&msg);& F% R; w. ^: J) a
  631.                 DispatchMessage(&msg);
    ' r# k  N: }1 @: @+ W. a: u6 `
  632.         }       
    3 P1 z+ P& m& L7 V3 j$ L2 c
  633. }
    / h& o' J8 |' a$ B4 N1 _# \
  634. ! `+ V5 q8 t; J# Q
  635. BOOL bFirstChar=TRUE;: m3 Q. N# F% Z$ d' R2 D
  636. 2 k: ^+ x* t) j! ^$ j. B4 C  c9 Q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)7 a4 r5 D8 L# }/ J0 W& F1 f
  638. {! l) H8 `# }, O5 d  G
  639.         // TODO: Add your specialized code here and/or call the base class
    3 a- h/ U9 d  v, t4 g
  640.   switch(dwProgramState)
    1 }" W8 n' Y- p, P# [* y0 ?
  641.   {  }+ t1 u" u$ T5 X
  642.   case AP_NOTHING:% I- @, B( b2 t$ s! ^! R
  643.     switch(dwStartUpSteps)- o7 ]) I$ x) J5 F, L4 |4 k
  644.     {
    ) W8 p3 n! t( }* @; J- _
  645.     case 1:
    ; _  I9 H3 l4 v7 j6 X( C, P
  646.       {5 }$ b1 }8 S) E$ k5 h, e9 r
  647.         int i;
    7 H+ s  ^- W- d$ G) p, Q
  648.         CDC *pCDC=dlg->GetDC();* x8 a) B+ _9 V! k+ C& |. Q* j5 Z
  649.         HDC hdcwnd=pCDC->m_hDC;  k- f6 V/ }5 G! v2 i
  650. //        Graphics graphics(hdcwnd);
    + ^5 d0 f/ R; w& p+ h
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & M" O/ a8 S+ J9 m& y2 R
  652. //        INT iWidth=bitmap.GetWidth();( F3 ~) i. h- D: W
  653. //        INT iHeight=bitmap.GetHeight();
    % ~, {, }/ s, @+ g1 S% y
  654. //        Color color,colorTemp;& G0 C7 v+ T  z$ |9 v
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)/ [: i/ O8 G% z4 d% X' P  ~
  656. //        {" Y" Z3 `7 _- a8 M5 J3 p/ y. r
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ! L. p3 y  N! k4 \) |# q
  658. //          {* f; f! C- `+ a& k) J
  659. //            bitmap.GetPixel(iColumn,iRow,&color);9 x  z% o7 B2 X' u
  660. //            colorTemp.SetValue(color.MakeARGB(& ~7 R0 O3 g0 ^/ D/ P; |( ^
  661. //              (BYTE)(255*iColumn/iWidth),
    7 J2 X  T  c0 w8 W2 V9 o* B3 y/ y9 }
  662. //              color.GetRed(),! E* d. x6 p4 E' I
  663. //              color.GetGreen(),; w8 J4 Q+ l( \0 _0 F9 C- x
  664. //              color.GetBlue()));9 B8 `+ F' k( D7 `+ S6 F8 |
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);0 ?5 _+ h# ^$ t6 d) I) r0 }
  666. //          }
    2 q0 F" r7 y8 L
  667. //        }. Q% {% L- D. }8 \- h1 Q
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);- D9 r( X4 I3 Z. P
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / [8 n4 l2 v# I/ W: {; [
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    3 m+ p3 `, U% e- p: A
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 E& c( m) l/ V: Y- k6 x+ g
  672.         for(i=0;i<240;i+=8); I. z  E3 R, O8 u, o; V5 }+ I! i
  673.         {
    * B% a( Y0 H0 O) S6 Y( o$ e
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " @' K3 G! F( u# }
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( ?/ j0 h2 N" F1 ~
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# _8 `* D  I, `7 Y$ Y
  677.           Sleep(33);
    ! M8 X+ W6 x; g% S* c: H
  678.         }
    & u4 h7 \0 N2 {, A# r7 J
  679.         Sleep(1000);6 y( ~* Y* ]7 {1 {& Q
  680.         for(i=240;i>0;i-=8): r" s3 a# L2 t/ ]
  681.         {1 c. R* @2 T, x/ g/ g0 k- c
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & T8 A5 r" U  u0 M& k. i$ {
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 F  E* q% j. J. t& ?3 |
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& ?8 \* E, R2 s* _, ?
  685.           Sleep(33);
    3 S8 }  E7 ^2 R# H
  686.         }0 l. i& Z2 R3 K" q9 v; U
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);9 g$ b$ X5 _5 q
  688.         dlg->ReleaseDC(pCDC);
    $ N5 c6 |% X, G3 E+ }
  689.         DeleteDC(hdctar);
    5 g2 A1 n- X1 d( v
  690.         DeleteDC(hdcsrc);! n$ T9 V1 x7 t6 p9 f+ i* U5 [; ?
  691.         DeleteDC(hdcorg);
    9 L/ Q: u5 S4 H! \2 L) K: Y! [  {
  692.       }8 i" j( c. ?9 C! k% G( B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ' [. s; w7 q9 u* {( v. r
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    8 D+ Z" N1 G% g: `  [. [! H
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    + j; H. w5 Z- j: q" n
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    * I8 Q! ]6 _. a* \
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 Z3 Y' h' ]( Q6 F
  698.       if(!Dn.Connected())
    4 s( M4 z' p+ x+ }2 y7 s4 J) l
  699.       {
    7 H5 l; w1 N$ r/ W+ K1 [
  700.         dwTotalFiles=1;$ Q; w8 z+ E, c! M7 e' N3 I  |
  701.         dwDownLoaded=0;6 M( J  f" C  E$ I9 u  b" b2 ]/ I! m  O
  702.         bSilentStep=TRUE;
    ' E' `& q* O9 B: R1 n
  703.         bCompressed=FALSE;; l% I* ~3 I* e6 |1 Q
  704.         strExtLocal.Empty();; ?9 G  w/ I4 m: `0 z7 E
  705.         strFullName="readme.txt";- s! g5 G  a" t, ^
  706.         dwProgramState=AP_CONNECT;) J1 W% F' a$ L/ t
  707.       }' c  `% m! r# z$ ]
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ! d: I3 i, V' T, `% L
  709.       dwStartUpSteps=2;
    . u( a) N- G" Z
  710.       break;: Y8 T/ A& T8 A3 ~% G3 k, G1 o
  711.     case 2:
    . W% R9 k: Y% V# n0 `
  712.       {
    5 g' e; @$ C) v  P. Y5 c/ ?% W
  713.         int iEOF;' D9 W, x$ D% [; ~* ^
  714.         FILE *fp;
    ; `: L) H. e: }- b! P! U5 p! s
  715.         char szString[512];
    8 c+ ]. v: h; M! b  E* \
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    4 \5 o) X5 p; s0 P! }' }1 b
  717.         if(fp)
    7 D- g8 I1 k3 B
  718.         {2 h/ c, Z) \9 v
  719.           do
    0 z5 ^, I5 v& R+ w' A
  720.           {
    , U* q2 P) i; B2 `4 e
  721.             iEOF=fscanf(fp,"%s",szString);" r; s3 [4 q4 e; j  v$ r
  722.             if(strlen(szString))9 E3 P+ y  a( f4 ?  m
  723.             {4 `0 I2 T3 w/ ]- D
  724.               if(bFirstChar), m9 B+ F$ J; e' q8 E5 ?# `3 x
  725.               {  k1 \4 r8 y: U5 P& T
  726.                 bFirstChar=FALSE;
    / q4 Z# U2 s3 {3 J: `
  727.                 bConnectIsBig5=FALSE;# ^; U( m5 t* c0 y# u, O+ g* c
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    0 s8 m5 d/ H2 ?0 F8 W; f
  729.               }
    ; v0 _  H$ x1 D
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 ^- `5 W/ p, y; p. d$ G
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));: z( U6 o1 @) v- ~3 [2 X$ X
  732.               dlg->m_ListText.AddString(szString);. @% F: H6 ]8 G- j8 u+ m
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 |8 f# V" o& G* e8 S
  734.               *szString=0;9 l; A3 K7 B2 D& j- m6 s
  735.             }
    0 Q* ~8 G2 w7 s: @$ [. O
  736.           } while(iEOF!=EOF);
    9 M% m% j7 W) \1 f5 O: o  c
  737.           fclose(fp);) B6 \# t% ]+ Q0 }- u" W$ M  i
  738.           unlink(".\\DownLoad\\readme.txt");
    % A+ }* q/ S1 Q+ t  I  y
  739.           dwStartUpSteps=3;
    * _' n+ z8 U4 W* f
  740.         }  m  s* D" c2 M5 z
  741.       }& b/ f5 t+ N/ g, o% q
  742.       break;3 i2 T5 f' M$ e  b
  743.     case 3:4 B9 A0 S5 {% Q9 \/ P! w5 t
  744.       if(!Dn.Connected())2 j8 a, [% S' |/ K* U* M
  745.       {
    5 G$ O; D0 w+ n$ Q5 S8 q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);* i! r3 [9 L3 u. l4 @% R1 ]
  747.         dwTotalFiles=1;
    ( m7 k- |8 R) H1 r1 ^* G
  748.         dwDownLoaded=0;
    4 C" [8 ?( k0 R; {  [" h, I
  749.         bSilentStep=TRUE;
    * v/ c" z* Q' N/ q# k- T6 H7 U
  750.         bCompressed=FALSE;( m0 H0 R5 R5 a! a, ?( g, C
  751.         strExtLocal.Empty();
    : U1 K0 e: C3 h+ X- x2 b
  752.         strFullName="checkversion.txt";
    + k5 i  f1 [, W
  753.         dwProgramState=AP_CONNECT;
    ) s& w* v: ?/ H% M) }
  754.       }1 Q, P: I! a7 F. \: t
  755.       dwStartUpSteps=4;
    , B- |4 Q2 {, i3 @
  756.       break;
    # [5 V0 U, s& N& j7 l: R5 H
  757.     case 4:2 y+ z' `! `& |! s( v
  758.       {8 ^  c' {: T9 L6 b
  759.         FILE *fp;3 e% N  k; _& i! ?( {# B
  760.         char szString1[128];8 V/ i- m; \/ Z7 Z
  761.         char szString2[128];
    ! b3 w4 D+ j* ]! E/ H2 N4 k
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    4 A/ r, B: d- F' d  Y) q+ p& I
  763.         if(fp)
    $ {* ?% y4 p/ g
  764.         {
    . \: D2 e3 ^/ j! ?4 c/ }
  765.           fscanf(fp,"%s",szString1);1 m3 H5 ~9 q8 Q+ m+ A
  766.           fclose(fp);
    / e" p) [; \" O( Q) o
  767.           fCheckVersion=atof(szString1);
    " ]# r. e! V+ k9 O/ L
  768.           fp=fopen(".\\checkversion.dat","r");$ `5 \; ~( r7 ]& V- h; i
  769.           if(fp)
    / |* V2 k+ i, s% m7 g* @
  770.           {) x0 Z5 T" D1 x- _; ]3 i
  771.             fscanf(fp,"%s",szString2);" M: S1 K) j/ v4 c- \
  772.             fclose(fp);
    " g* w7 g4 d  h5 k4 J
  773.             if(atof(szString1)!=atof(szString2))
    ) }  l7 n9 C: M/ u
  774.             {6 B  f* ^( E8 L; i" A1 N  {5 X
  775.               if(!Dn.Connected())
    . V, a  R3 V9 h4 \
  776.               {
    ; T! y' n4 v% Y4 I; z. x
  777.                 bFirstUpdate=TRUE;
    # z; z/ R% R" _. G. ~* e$ c
  778.                 dwTotalFiles=1;- _4 w3 ^- ?, X' X1 p4 B/ E" ~$ s
  779.                 dwDownLoaded=0;
    2 o2 \1 ^- i$ `; ]. |5 A& X
  780.                 bSilentStep=FALSE;
    ' x2 t3 \: l3 N& u
  781.                 bCompressed=TRUE;% S3 }0 X& g8 T7 Y( s2 e* B
  782.                 strExtLocal=".\\DownLoad\";
    * b, B  t* [2 V* m
  783.                 strFullName="update.txt";0 O0 V# s9 p% Z4 F
  784.                 dwProgramState=AP_CONNECT;* q# G! k6 y  O3 ?$ F
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 p- K# q& |8 T* ?* u( G5 h3 d2 y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 f7 w/ v6 H! i& z, o. w4 {
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 z: k0 e0 P: I  u

  788. # z+ N' Z7 @) B. O+ ?% \  q' P
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) L8 X6 T( Y# Y6 v+ x% ^
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ) g& V/ X2 O8 u! b" ~0 [
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 R1 E: c1 D& B/ V
  792.                 {
    5 o! J2 @8 \6 u5 [! A
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& w# P& t9 R4 L
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" H2 j# R4 @9 R& G1 L
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");9 s+ K4 ], N3 _* ~9 p7 c% G! E
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 i; _: q% j, ^! Z* V; h
  797. 6 V- B8 x) e- [
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 a1 e5 Q4 I4 j
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 N& J" h; G+ Z" n2 L4 w( B5 W
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");" N! r8 f5 m; T: {
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      |3 Y3 I% F1 M) X/ l
  802.                 }
    % s1 @' U$ o6 P* s. s
  803.                 dwStartUpSteps=5;" H' f/ ]4 u; Y" [
  804.               }
    . q9 V9 O! P( w; F
  805.             }) x" z+ B9 G9 n
  806.             else
    + Q' `  u) J; M
  807.             {
    6 k/ k( ]4 D) C6 F# O
  808.               unlink(".\\DownLoad\\checkversion.txt");
    / ^1 B  q1 n; _* Q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    9 p( S3 Y) ?/ @/ b& G# `
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 f' H$ b- _( x1 {5 Q" M
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; a  _# l$ o$ D

  812. 7 D! F( D  i* w  d9 [
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! A/ v0 _$ D4 u' W- d" a
  814.               dwStartUpSteps=99;
    ! Y- _4 N% _- I: T: g& T: i1 V' y9 {. s
  815.               bFinishUpdated=TRUE;
    - `( X- {0 _( t0 u/ ?
  816.               bCanUpdate=TRUE;
    " h6 q# s8 U" ~2 s
  817.             }
    4 p0 F/ ]0 k6 R/ X
  818.           }
    ) W2 q" q" H6 Q6 c* t
  819.           else
    8 o' `* N1 k9 f, ?) \- _7 I" b
  820.           {5 T' a9 `# F! |
  821.             if(!Dn.Connected())
    0 L  `: F& f* n
  822.             {9 ~  K& k! z1 u, i. m0 @- v; ^
  823.               bFirstUpdate=TRUE;! m, J( ^, |* l- w
  824.               dwTotalFiles=1;
    0 p$ G( x; z1 ?1 Y+ q6 }) Z
  825.               dwDownLoaded=0;
    - p5 ^/ z0 \# s" R/ D' s+ t, ~
  826.               bSilentStep=FALSE;
    # p2 @5 U7 v% ~/ ?4 W; b  H
  827.               bCompressed=TRUE;
    , f  W) P! r4 j# G" o
  828.               strExtLocal=".\\DownLoad\";
    7 G6 l+ B1 Z$ O# \$ F
  829.               strFullName="update.txt";
    / D" T# K* l+ l& S6 B: q$ ?
  830.               dwProgramState=AP_CONNECT;
    : N3 p; g3 m& p1 s8 f1 a0 [1 q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 v1 r2 n# q0 D; _& b
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 ~+ q) `0 E$ h% n
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / t% ]1 g+ ]" \( C( ^0 g* V
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; E" |! h: u& i( N  G8 E; b. n
  835.               unlink(".\\DownLoad\\checkversion.txt");& j5 O$ f1 d: w$ `9 G+ U; r; N
  836.               if(GetFileAttributes("Wsa.zip" )!=-1), l/ v) e; x. }- \
  837.               {3 z+ W# ~. q1 Z8 N2 R2 E; i
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    , `! G6 @1 ?& b8 Y5 P2 p
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");6 X) a% a- X& S) o& y8 U
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    6 u8 `' `% V  z3 Q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! q+ x& X0 ^6 Y+ |* S0 z8 P  e5 c
  842.                 # k' b" ]4 n! r5 M1 V
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 O7 w% W% T* t
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    " l" ]: P# T4 i
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");! U9 k+ d6 Q6 o5 @+ [3 R
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( Z9 d! M' R9 h& s
  847.               }
    $ q: g& G8 V- n7 _  V
  848.               dwStartUpSteps=5;
    , P9 ~. E/ ~  [- Z
  849.             }
      r' k' V8 g) q. W) u
  850.           }; w1 k3 i7 }$ ~" E
  851.         }
    , {3 x* t# F8 R" {+ |& G' a
  852.         else" I* z9 z( y0 U% x
  853.         {
    3 p* g, \* i9 S4 o9 @: s) V& P
  854.           dwStartUpSteps=3;& o- t5 \& w6 \" q* ^+ Y
  855.         }
    . m) C# B! U7 |/ u: J
  856.       }
    5 V7 `/ j! |( \9 D4 P9 t
  857.       break;5 \1 P6 J, t* G+ y+ N
  858.     case 5:
      R' g* M; s; l) a3 s8 y
  859.       {/ i/ f" D0 _: y$ n  n! u; G5 B* Q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ( u  G" [! ]6 G/ _
  861.         {
    4 C% ^2 p1 ]" |* u9 ?9 M
  862.           int opt_overwrite=1;; k1 t. S, o3 C3 M* Q! `2 }
  863.           int opt_do_extract_withoutpath=0;
    % q% f  B6 q& L( [
  864.           unzFile uf=NULL;& `& K# m5 J4 v

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

% i6 o! M! p! W$ K
$ |4 \+ D7 O5 O9 I

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-4 10:06

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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