找回密碼
 立即注册

CSUpdate.exe源代码

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

5 h- j: [* Z: P
  1. / RevApp.cpp : Defines the class behaviors for the application.
    : K/ C) l* w1 r) `9 e
  2. //
    / D, s* }# J& C# S/ S. X
  3. 1 X$ C# f. F5 @, O7 m2 t
  4. #include "stdafx.h"4 o4 ?" D* ^3 D. o- Y

  5. ( }6 L1 y, c8 I  F& ]
  6. //#define UNICODE% W. z) r* ?8 q' I. o
  7. //#include <gdiplus.h>, j" F& r( j3 y& O; k  I
  8. //using namespace Gdiplus;
    : [7 g$ a9 s$ G" L1 V' K4 z# {
  9. / O( [3 |( R$ m) D! R
  10. #include "RevApp.h"
    2 N2 h" F' F/ _
  11. #include "RevAppDlg.h"
    , F& l! k7 N& A& B7 V
  12. ; h6 Z+ h  W. `% h
  13. #pragma warning(disable:4786)8 E% |  W" H5 x  k' ^7 R
  14. #include <map>
    ( `# v" C. p- k5 A/ _/ V$ _3 w
  15. #include <list>
    ' M' S, F5 C5 m
  16. #include <direct.h>" ?0 m( Y  x/ T

  17. , R. d! D: S2 h4 n
  18. #ifdef _DEBUG
    ( V2 y# D: d0 y$ N' ^6 d. v
  19. #define new DEBUG_NEW
    - x" Q# n( w* l! ^, O
  20. #undef THIS_FILE. T3 O+ b1 X' U. u
  21. static char THIS_FILE[] = __FILE__;
    6 j6 i0 f7 h0 R& z/ q( s# F7 ?
  22. #endif
    # U, O5 ?+ R3 U# F. R+ e. W  y: j
  23. #include "SkinResDef.h"
    # t* ?3 d: A. V! z- T0 y' t
  24. #include "ChangeBG.h"' ^2 [0 w: t6 k1 p  e
  25. #include "AFXINET.H"5 W5 F# x  c$ D  X1 z9 [

  26. # g# y( q2 R- k5 x5 r2 j: H9 ?
  27. #define TRADITIONAL_CHINESE 0# c6 `0 h: Y( [( w9 l# ^3 x* G% l0 Y
  28. #define SIMPLIFY_CHINESE 1
    # {- s! {( C8 ]8 Q' _
  29. #define ENGLISH 2& u" x$ U% k9 t7 b+ x. M
  30. int m_iLanguage = ENGLISH;6 z: ?, A5 t3 ^+ h# a- K
  31. /////////////////////////////////////////////////////////////////////////////* n; B1 \& f8 `& k* [
  32. // CRevAppApp
    , f9 h5 }: K: X- L0 _. N$ h; G' W
  33. 1 }" G) |4 _  J* E- R) |
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ; S& S) {; {, u1 n% \2 E
  35.         //{{AFX_MSG_MAP(CRevAppApp)4 {' n5 e" q- _
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    2 ]0 E  Q% A" u& k( ~
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ' P4 J7 r, Z) V! ~# {( z
  38.         //}}AFX_MSG0 C' R, N% c7 V) K
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    / q; ?4 f+ i9 l2 y  g' y
  40. END_MESSAGE_MAP()5 M" f. i% \6 |& d+ s
  41. ! i! k# d/ U3 d- Q3 ^% ^
  42. /////////////////////////////////////////////////////////////////////////////
    7 J: Q% B$ `- J3 r, m$ Z' d
  43. // CRevAppApp construction
    % {6 s2 {; s1 s3 x# t

  44. : {7 Z% @$ a+ Q% b4 z
  45. CRevAppApp::CRevAppApp()
    " T  b2 \/ U' y; V) w
  46. {
    - L; S" x! F" L& d2 @! k
  47.         // TODO: add construction code here,
    - K5 _1 Q* k$ T* U6 A0 N
  48.         // Place all significant initialization in InitInstance) N* \6 C: \  ^3 W4 W
  49.   bDisplayIsBig5=FALSE;5 [! t) D5 v& a! k$ a2 e0 ~( W
  50.   bRestartUpdater=FALSE;1 o6 x3 V/ w& e# C7 u
  51.   bFinishUpdated=FALSE;
    ; x* \2 l8 w; l3 C6 K
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;; i$ e9 ]- [) W$ |* {3 E
  53.   InitChangeDataBig52GBKS();3 P* {% [2 B$ S( m- Q8 ]) J- \
  54.   InitChangeDataGBKS2Big5();8 \4 R6 p$ m( g4 L
  55.         //
    ) V4 X) V8 k: C1 D# `: M) ^* R
  56.         bClickRunExe = FALSE;, Q4 I& c, L8 q# e: N$ `+ ?2 D3 W
  57.         //( d# ]0 H  {4 J# J0 Z( F6 S- k
  58. }
    % _- @" ?5 Z6 T

  59. 0 r- q0 t- C8 B
  60. CRevAppApp::~CRevAppApp()
      Y( H% O4 ~1 ]3 \/ i' _! G8 D
  61. {: I2 T# c+ a. `8 H9 `) V- t3 P
  62.         // TODO: add construction code here,
    - d  M; e. k; B5 K, H
  63.         // Place all significant initialization in InitInstance
    9 i5 L  p1 ^0 J: U; ?
  64.   EndChangeData();
    & j' _+ g4 t, U; C5 ]
  65. }/ }! u9 \; O$ t. d
  66. $ H5 p+ l7 n5 H" o" G& [
  67. /////////////////////////////////////////////////////////////////////////////
    ! G1 f1 @% |1 r# ]; a& l3 k
  68. // The one and only CRevAppApp object7 V3 |* r/ P# {5 D
  69. / f6 W4 x- w2 Z! Z( h
  70. CRevAppApp theApp;
    9 L: ^& }) v5 W6 L

  71. ) k1 M+ f8 h) j/ o) c
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 q4 l# ~& |. ~
  73. {+ y; s9 c# a$ G5 t
  74.   int iEOF=0;
    * I, J8 k9 {5 [5 S" V
  75.   char szTempName[MAX_PATH];) W, I# Q" y6 `/ _
  76.   *szFileName=0;
    : O- s, Y3 F5 y/ a
  77.   iEOF=fscanf(fp,"%s",szTempName);
    4 q# w( b: H% Z( E: o3 k2 B2 p
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')4 a) Y! @" A) C8 P  K% l. f
  79.   {
      i6 h! q. F) b" m, Z" m' V: f1 z
  80.     strcpy(szFileName,&szTempName[1]);3 p* j3 ~  n! n& ]& ]* W
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ( H; i1 k& @! k- I) K# Y' R4 |
  82.     {
      _0 L9 ]/ Q( h
  83.       iEOF=fscanf(fp,"%s",szTempName);9 q/ X* M: z; R# R% x
  84.       strcat(szFileName," ");) B# O3 U2 I$ g2 Y
  85.       strcat(szFileName,szTempName);
    $ Y, `8 V) Y5 t+ C% K
  86.     }
    ! l7 P! f1 p8 Q& }+ a
  87.     if(strlen(szFileName)>=1)
    " p# z' O5 ~( [2 M6 D  l3 t
  88.     {* t) S7 N5 j+ a3 n2 z
  89.       szFileName[strlen(szFileName)-1]=0;' X" r# Z) s* y2 N
  90.     }5 {, |8 E1 P& z2 W0 p
  91.   }
    $ M8 o5 y; h* C, h4 x5 h
  92.   return szFileName;
    : ^; I# c9 j/ _# O2 b! g& X3 J  ^
  93. }
    ) p& O' j; q: ^* y$ F/ A: r5 J* l
  94. $ {' Q  @! J/ S" b% o
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ' [5 z7 U+ |5 `# Q6 g$ j' q% }1 R
  96. {1 T% P1 V: o% J2 ^8 J
  97.   FILE *fp;
    * }3 h0 z4 o  D+ x
  98.   char *key=NULL;
    1 h# O( l% \4 N% X" d
  99.   char version[MAX_PATH];* H) ]$ f" s# H0 a: v' g
  100.   LPUPDATEFILE file,olds;, d& }6 m+ F+ t' l% \
  101.   std::map<CString,LPUPDATEFILE>::iterator p;( p( _+ s1 R2 q* R, O# j% q

  102. + `5 z) g6 ^) H  {5 ^5 Z7 T
  103.   UpdateList.clear();
    ! _# n* I% N. E( r7 a+ |3 R
  104.   UpdateFile.clear();
    $ o- m+ h7 o8 d8 I! ?
  105.   if(GetFileAttributes(filename)==-1) return false;
    , t: u! ~) i  W  Z) a
  106.   if(!(fp=fopen(filename,"r"))) return false;
    1 q& L. b1 u* Q- r
  107.   fscanf(fp,"%s",version);4 a- Q0 o$ n' l& ~% s$ Z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }$ H0 w2 D9 u( C" D
  109.   while(fscanf(fp,"%s",version)!=EOF), Z; W0 j% L* u4 M$ c' p" V, O0 h# ]
  110.   {* d. s# r' x! q( m* N! O
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 Q9 t! [% R$ z6 D' D* O
  112.     fscanf(fp,"%s",file->path);" y( ]% I) Y' W6 A# R9 `
  113.     ReadFileNames(fp,file->file);
    + ?) ^( W5 ^' A# d2 F; q5 k
  114.     strcpy(file->full,".");, \6 T* |" N: F' e: D
  115.     strcat(file->full,file->path);
    , w( {: h: d; B3 `% M% U. b
  116.     strcat(file->full,file->file);: o, o2 t4 d/ p1 c% K
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())0 X0 ?+ H+ x0 Q
  118.     {
    / _" Y0 H# b# G: U: [
  119.       file->vers=(float)atof(version);
    ' j* v2 p* M; @2 \% E# A
  120.       UpdateList.push_back(file->full);
    7 S0 }3 `; a2 H! l
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    . x* H6 L4 r8 H! U
  122.     }0 L4 R. P, r# M& O& l) G! x
  123.     else9 a% f3 v, [, R$ w/ Z) Q
  124.     {
    ; d5 J1 u- Q5 h& }% m8 t- D
  125.       olds=(*p).second;
    # D6 o/ n4 \$ K4 D9 g
  126.       if(olds->vers<(float)atof(version))
    # d' t( z$ T4 g/ f% C8 u
  127.       {0 v, r5 v* T( f/ p$ v5 ~5 s
  128.         olds->vers=(float)atof(version);
    1 n) n  g, R+ B: ~. T
  129.       }0 z. @" d) D5 I/ |
  130.       free(file);+ E) M( P+ ^7 O4 T4 g
  131.     }% p$ l+ h1 B% a& ?6 a: F+ r2 F
  132.   }' f: }( e% f. K/ C
  133.   fclose(fp);% n" \$ l6 E% [1 ~3 N& t! p; _& Y
  134.   return true;3 O' j- m" |$ P( `! F& {6 f1 ~
  135. }
    $ F1 U, b. e7 y# n
  136. ' ]( f6 J3 s% Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)4 H( a1 c+ z1 f, h( M7 ~' f
  138. {5 s; f' Z  p! z
  139.   TCHAR  szFull[MAX_PATH];
    . C& T' C) J, v+ M
  140.   TCHAR *token,*inter;2 }( B5 x! y% ]# D
  141.   *szPath=0;
    8 }/ P! y# p+ n3 x
  142.   strcpy(szFull,szFullPath);
    % J9 I; C7 F) w8 p( ?! J0 d" v
  143.   token=strtok(szFull,"\\/");
    0 C( g- j; F) T' h% Y+ O
  144.   inter=token;) P& B6 v) z) l+ i4 {
  145.   while(token=strtok(NULL,"\\/"))) y  B" f$ w* @/ b9 W
  146.   {
    % g& }* Z; z$ ~( {7 P
  147.     strcat(szPath,inter);
    1 @: p- D3 d' ~% v, c4 {$ _; Z: ~1 m
  148.     strcat(szPath,"\");9 z* J& m$ F( o: `0 H; \+ Y) D. z# D
  149.     inter=token;' h6 a$ B3 D# W$ M: }
  150.   }
    7 V3 O( _; q! O5 B) \
  151.   return strlen(szPath);! w# _1 [: m- m' D% E2 G
  152. }6 W7 q  \( O7 u0 C
  153. 0 \! o8 o5 Z+ G$ I( ?/ h& q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)1 `1 L" d* H( a- y; Q
  155. {
    + t7 y: s1 J! P5 R+ W- @
  156.   DWORD attrib=GetFileAttributes(Target);( `. a8 |' ?; D! m4 j
  157.   if(attrib!=-1)
    ' Z. k$ I& Y: _  ~
  158.   {
    3 S5 M5 j, B5 E7 m; P, d
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  _! y, A( m( `3 ?2 e7 a
  160.     {
    - \: A( N$ `8 p* D5 P8 W
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    % Z& Q4 ^8 p5 C' p) ]( A
  162.       SetFileAttributes(Target,attrib);
    0 u4 V  o8 s1 J/ t+ ^& N1 X
  163.     }
    ' z6 w! `4 u/ H) Q" h' @
  164.   }4 ~- h) N4 \# y7 Z. J: J
  165.   CopyFile(Source,Target,Erase);
    4 I# l4 K) d% D& }- ^( e; `
  166. }9 m1 K! @5 E& q% N8 T

  167. 3 B' m6 a/ @5 S
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : y9 b/ t7 g/ f! }( _
  169. {
    2 O& r4 e  |7 a4 {! t
  170.      FILE *fp;" J7 W" x% Y) c# l
  171.      char  szBuffer[8192];6 Y+ t; s8 L7 x4 T
  172.   va_list  argptr;0 ?) v" R. v& a: Q

  173. ; |4 R" e- w. [. Q7 [
  174.         va_start(argptr,message);& A: i. p+ t. X. p
  175.         vsprintf(szBuffer,message,argptr);/ R8 @& e/ R7 Q5 z" {8 n+ |
  176.         va_end(argptr);* T% I! F0 r$ j/ V: z4 o
  177.   fp=fopen(FileName,"a");
    : ]0 A' [; i; G' X
  178.   if(fp)
      f. p) q- Q& \, s* Z# L5 c
  179.   {
      I! O0 J6 d( h4 \! F
  180.     fprintf(fp,szBuffer);( _$ |$ u& @' t
  181.     fclose(fp);
    5 G; S2 |" y5 M! O$ D
  182.           _flushall();; n3 S( Y  _; t2 W  x- l8 c
  183.   }
    8 i; T" f2 S: d* m. E
  184. }/ b4 ]0 i& U+ r/ E

  185. 1 u/ w  K3 B0 p; y. M
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    - w6 r2 @' z  s2 Q' ?) X
  187. {
    4 t1 h; P- S6 z5 c% V6 c  P! O  [2 C2 f
  188.      FILE *fp;
    8 |. u: f. @. u) B, S$ T8 B- f
  189.     DWORD  attrib;/ ]# G+ G6 L; i$ Z8 C8 M
  190.   attrib=GetFileAttributes(FileName);( k9 }1 w0 M% Q8 S! m! J
  191.   if(attrib!=-1)
    9 k! s$ f2 ~) G3 Y' N! W. ^
  192.   {; o9 T4 l' w) r, n  p
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    - j2 E/ o; @9 W! m" y6 |
  194.     if(!SetFileAttributes(FileName,attrib))
      Z; C* f0 R  W8 J
  195.     {
    . Q2 Q: H( `5 J1 n4 b. @
  196.       return FALSE;
    - B0 l, d0 ^8 g: g6 M+ ~% H
  197.     }4 X6 u, |: [: |: x2 W6 ]
  198.   }" W6 Q, k/ O' j
  199.   fp=fopen(FileName,"wb");
    ' A- s& ^! t6 t/ p
  200.   if(fp)
    ! A6 L4 L) V( M  U
  201.   {7 e/ g6 r' L& A: F3 a8 U$ S
  202.     fclose(fp);
    . l& Y! c5 A& N+ ^
  203.   }
    7 z' A# B9 E- _# H
  204.   return TRUE;* V2 v+ G  h, r# _  w% l$ f
  205. }7 ?+ R8 q2 B. ?! [: P
  206. 6 L/ U/ i$ g$ R4 Z* K
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    : S% k+ K( z8 }1 L3 {
  208. {9 H  _; g8 N  R+ C* u1 o
  209.   char filename[MAX_PATH];' u6 D( S- n8 W6 |& ?
  210.   LPUPDATEFILE file,olds;
    ! i! Z& ?( A+ A
  211.   std::map<int,CString>::iterator i;
    5 f1 t& q" E. K5 P, C
  212.   std::map<CString,LPUPDATEFILE>::iterator p;7 O1 ]9 O/ Z" E" E2 v% z
  213.   std::list<CString>::iterator l;0 M, @% v2 Z  ]) g
  214. 6 a8 @3 R) q  @) G+ i: w5 V
  215.   if(bFirstUpdate)
    . b1 S  K: T) c
  216.   {: V0 M& [/ P9 }9 A* Z4 i
  217.     dwCurrFile=0;1 k$ N5 s$ Q1 m6 G6 G) o
  218.     bFirstUpdate=FALSE;
      I1 }8 c% ~1 L
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())7 ?0 ^5 Z$ m  }% e2 m
  220.     {
    4 d8 z+ o1 E  S% Y, l
  221.       dwTotalFiles=UpdateLocal.size();
    7 I! ]( c) I! c% s8 T
  222.       dwDownLoaded=0;
    ! ~: E% p- }; Z! ^  X6 j" i9 S
  223.       bSilentStep=FALSE;
      y$ P) w* h! ^* B; f
  224.       bCompressed=TRUE;
    5 Q$ I' J: [- M. [5 F3 O4 I& F
  225.       strExtLocal.Empty();  p# [3 [& I, f5 k/ S9 f) {
  226.       strFullName=(*i).second;
    * n' c: u8 b* u& d
  227.       dwProgramState=AP_CONNECT;
    : Z' [  r$ E1 K9 z
  228.       return TRUE;/ u1 n1 H* j! F* @! m0 T+ N7 N
  229.     }
    " I6 w" P& D% N3 Q! [% Y
  230.   }
    9 s, U* M* d# w5 R- }7 C  `4 D
  231.   else if(bRestartUpdater==FALSE)
    ! q& e/ v* d( j6 F2 w8 F% t+ Y
  232.   {
    % v( I5 N7 f5 z, V
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    # h3 X' O# T6 T2 x
  234.     {  Q4 E) a; V9 R8 b5 I
  235.       file=(*p).second;& T) k! h2 n) {4 h" X3 t, w/ ?7 u
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    3 H' h/ \1 s( O0 [# O) c* X) B: B0 S
  237.       {
    ; ^( K0 ]+ b# _0 g: T9 t
  238.         olds=(*p).second;
    " n9 b6 X* a4 |# O2 X4 t
  239.         olds->vers=file->vers;- F* V1 I3 ^8 j$ \7 Q( h& U
  240.       }
    7 Q5 U. @' x5 _- \
  241.       else
    " ]$ ]& d+ G6 Y2 m1 H( {0 s
  242.       {
    : P3 I/ k% J0 f) ], Z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( ^9 ~# c+ R' y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    + M5 V4 e/ o8 ~
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));  i2 n2 c) j% [* v( w
  246.       }+ k. b  V* `  |+ c0 W
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    " b* y+ n' M6 o6 u( C  ^  i6 p
  248.       sprintf(filename,"(%s)",file->file);7 N& a- |$ p0 r' K
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ( Z$ t. i; [9 u8 }; K" v, r2 \4 S4 Y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ( I0 |: L2 G( S* W! ^
  251.     }, t& B- d7 e  [. @  i
  252.     dwCurrFile++;
    4 Z5 s+ h$ Y+ J7 X2 n9 F' X6 n
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 o  X8 ^. |. O. ?( ?5 X
  254.     {
    2 C/ s3 J' j. L# g" L+ k' I
  255.       bSilentStep=FALSE;
    $ J5 x7 f' t4 T$ c  M" A
  256.       bCompressed=TRUE;% Z% b& l( \0 w$ B  P+ \, R
  257.       strExtLocal.Empty();1 i- O9 `3 J- Q. I& r
  258.       strFullName=(*i).second;
    $ [3 e" U/ G7 Y! \* H
  259.       dwProgramState=AP_CONNECT;. k: b  \- ?' Y# _
  260.       return TRUE;6 \  Q0 q: }6 w9 e: m; V7 T
  261.     }
    - A, o2 u' j- p. B8 L
  262.     if(!bRestartUpdater)
    ' ], E" w$ t0 i* l; ~
  263.     {( t) Y2 }, X9 |" W
  264.       int iCurrSize,iFileSize;& J& Q+ r3 \8 Y$ V: e% X- u4 A! D4 c
  265.       iCurrSize=0;) I7 b" n( e. |) h5 @1 K* y, ?3 C
  266.       iFileSize=UpdateList2.size();
    - a* `! i( d$ L8 \9 P. u% j  U$ j
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");) |3 P3 l) R9 \4 d! B+ Z& K
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ' h0 g8 M6 V5 X' x" a0 h& v* S* c
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");: \- [' E1 m2 A4 x. S9 B
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" y9 |% K$ {) k
  271.       Fclearf(".\\update.dat");
    - D' N% X3 d8 u. V7 K0 ~9 A
  272.       Fprintf(".\\update.dat","Bloodyf\n");( r+ F+ E6 {5 _2 J
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* W) p% L; m0 Z0 r. L' f& X
  274.       {
    ( l( x( d& x+ k  z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())+ h/ @8 J' j' u& ^! [
  276.         {* Q2 \5 g2 z8 U& G
  277.           file=(*p).second;/ G4 B2 G9 E, l. I/ K5 }0 J# c( z
  278.           sprintf(filename,"(%s)",file->file);( r8 z+ I: |: l" Y/ G+ v: e" _
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & ^1 k1 B; Y" F9 Z. y4 p
  280.           iCurrSize++;1 y+ F& K, y  a' R
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    6 P: h2 l) t; S2 a
  282.         }, @0 q7 T  x, L+ o  {) I
  283.       }
    & q: h& w& a, x4 K* }( c8 n* \6 b
  284.       unlink(".\\update.txt");. r" l( b1 `: Z& A" X9 F3 u. Q. T
  285.       unlink(".\\update.tmp");: M; q' h* ~. d" |! w" E
  286.       Fclearf(".\\checkversion.dat");
      G. ~$ g* Y8 x6 X1 b
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( m0 [1 M$ J; Q) `" X9 D7 m! p
  288.       if(UpdateLocal.size())
    % K& a) P) J: D. n# o
  289.       {
    / `$ m) ^: ^- P1 h( o7 b$ n
  290.         UpdateLocal.clear();4 S/ A; C7 s, `( R
  291.       }' B  _3 E. t! e
  292.       if(UpdateFile3.size())
    5 S0 [6 @9 t! p6 J- \
  293.       {2 q% z2 y4 x( X) v
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" ?, w9 e1 ]! ^1 `% q
  295.         {7 |" p% C: A7 t' [+ q
  296.           file=(*p).second;
    5 @# M: C% {! d" P& Z1 A: |
  297.           free(file);9 s* c! C6 \: u7 Q. K
  298.         }5 A& f3 _  e9 s5 P7 T
  299.         UpdateFile3.clear();
    / \& a2 M* t5 [, m( j0 s; f+ d- Z0 ~
  300.         UpdateList3.clear();
    6 `- B+ k! F4 `. V
  301.       }
    1 E/ C1 Z# s) O4 |- V% p3 E
  302.       if(UpdateFile2.size())
    * C/ y  Y$ p4 ?+ n5 r. Z4 w
  303.       {* t, f, a0 |4 l1 ]+ m
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 P3 y  Y, L% D2 M+ a2 Z8 o
  305.         {2 l( G+ ?, Q+ v! j' l! e4 r& ]3 ]% }
  306.           file=(*p).second;" x2 c! p( a" `# m9 q
  307.           free(file);( v* O$ c% i: T; u
  308.         }
    4 {  W( t, y' }" p% L9 B
  309.         UpdateFile2.clear();
    ) I/ K6 V  ?9 S+ |# r
  310.         UpdateList2.clear();
    " V+ O& S! e. y& S! u1 Y
  311.       }5 E; }6 @5 q/ F, X5 G
  312.       if(UpdateFile1.size())& D' V3 \' T9 u) L  L
  313.       {5 @( ~- p0 d+ f3 ]
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ! j' d  L5 n% w( @( k, W
  315.         {3 u2 Z* |1 _+ M
  316.           file=(*p).second;3 j% ~0 A, z( T# w- v6 P3 S
  317.           free(file);
    7 u. r6 K6 p- o: ?
  318.         }
    / n1 F1 C6 B( C  W/ e: D6 l
  319.         UpdateFile1.clear();! `  g! {6 @3 j/ ?! ^
  320.         UpdateList1.clear();9 b% F) v* u/ T& s
  321.       }: N) `' L1 W+ f6 J
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));  w) l5 l# J! x5 e+ B, u
  323.     }, X. ]. p; C  ~6 ^$ y; f
  324.   }
    0 F7 T! V1 z9 V
  325.   return FALSE;) _: K0 B: f7 z2 ?% @
  326. }. Y5 E7 m( [: Z
  327. / S; o9 {6 p( q# C) h
  328. void CRevAppApp::ClearAll(void)
    / \% _8 F) T/ G' w
  329. {2 i8 {+ ?! e7 |6 p& n/ q
  330.   LPUPDATEFILE file;, r9 D6 {6 W' A$ N/ J; o
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( _0 ]% w: ^3 G  g: J* D2 x3 x$ w
  332. ; y! m  ?0 {& i6 C
  333.   if(UpdateLocal.size())0 f/ v7 Y& p- x
  334.   {
    5 M' W* c) x' z  O5 ^, l, ?, G; E
  335.     UpdateLocal.clear();  {- ^+ L, K. D% ~7 n
  336.   }5 k* t: d; q+ @1 Y! k
  337.   if(UpdateFile3.size())
    / q5 {- u. y( u) s4 X
  338.   {/ \- ]$ _1 B* D# N, u. c# i
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( l& j- p' m% W2 J0 i- Z
  340.     {: }& _4 i) ?% [2 A, M5 n
  341.       file=(*p).second;' f+ i/ ?' {* J
  342.       free(file);
    - m' \6 d% J/ w1 b. |
  343.     }% B: Z5 E) o- [, q9 Z; j
  344.     UpdateFile3.clear();* W1 ]9 z. f8 q$ V- A/ ?
  345.     UpdateList3.clear();
    ) A% u; p% }  G; ^& D6 w2 i5 i
  346.   }0 v# }6 `2 B% e5 h6 ]$ w+ q+ k
  347.   if(UpdateFile2.size())
    0 ?! i- E8 V) i
  348.   {
    , X" ^5 |8 j$ @: A: _
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 N' J  P( i  B' l8 k7 _
  350.     {
    , K  G- s6 ]5 Y  w8 v, S3 T2 X8 n
  351.       file=(*p).second;  ^; h! G4 P" k5 I. c8 v
  352.       free(file);8 Z2 o9 e6 C% ^
  353.     }; z: g9 Q+ f( j  S/ b& F
  354.     UpdateFile2.clear();1 `! {; n/ M' M0 p2 t* z
  355.     UpdateList2.clear();
    / A5 q8 o! {0 L( D, t4 H9 {
  356.   }
    * M5 q  a! N! [, Y( z; p7 }
  357.   if(UpdateFile1.size())
    4 u# u" W& n# y0 s# h% d+ S
  358.   {& C$ z/ f  I7 q9 ^) H, r
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' k- d/ l9 V6 M
  360.     {
    0 h4 }' T5 Q( D( t, i/ c. ]
  361.       file=(*p).second;' D& D4 {; a0 s! L: Y0 X' \
  362.       free(file);
    4 v8 n1 ~9 g1 L5 M& Z
  363.     }$ {  j4 d- c  \
  364.     UpdateFile1.clear();
      t4 {' \/ [) Y! L  d' Q
  365.     UpdateList1.clear();
    - F: \+ v# h+ x$ V( \
  366.   }
    9 v$ A2 e% V  m  X" M( c& d6 W0 g
  367. }  $ ?" R- z2 d$ Q6 j0 f+ N4 O0 }& z
  368.   * U4 E. e( J! W6 v: J2 Q
  369. BOOL CRevAppApp::CheckLocalVersion(void)) {% ~) D& d6 n' i
  370. {: S  z( e( X# L3 k
  371.   int c;
    & y9 {5 z; l/ |$ v* ^+ Q
  372.   LPUPDATEFILE file1,file2;
    # c" u4 A" X" }* u$ `" @  m
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , ?$ F) `* }1 R' }) |2 d
  374.   std::list<CString>::iterator l;/ i- W( t& n5 r% h! W2 f% q
  375. # s' O1 M# ]' ]
  376.   UpdateLocal.clear();8 E4 Y9 h% h$ Z$ A8 o; a$ n/ \
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    2 R" B% m3 q8 {6 d* b
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);( y; Y4 L- P9 N  i. y$ k
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    . e: I/ b' l4 u( t, t
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);% Q) I& S3 S* A  y  r) @& a9 m0 N2 I
  381.   if(UpdateFile3.size())
    8 }6 w" V* N& J4 T. O  |$ n
  382.   {
    4 a4 P+ I  G, V' c0 D( r
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)/ V2 Q  C& i+ q
  384.     {
    $ r( M1 H/ S2 n  ~
  385.       file2=(LPUPDATEFILE)(*i).second;3 K0 Y) Z+ o- h; }7 t
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; I( @; a: X0 Z6 o  u! [8 A2 v1 V8 L8 G* @# a
  387.       {( |3 P! ^* _( ~8 l8 b8 x
  388.         file1=(LPUPDATEFILE)(*p).second;% F* Y, D% o2 F$ L! T
  389.         file1->vers=file2->vers;
    3 P" D7 c) L+ m7 H6 c$ N
  390.       }6 r3 w9 s1 x; \5 T7 L6 q9 L
  391.       else
    3 h, n) W3 i: |9 Y. |" s
  392.       {
    $ _% d7 z1 _1 a# b" c
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 k' v9 X% m" v8 T# N, r6 k
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    " g( B8 y, s: J/ Y% E# O" B
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));# f; ]  k' p. X5 _# D0 [! k, l( ^; Z
  396.       }
    * N/ \/ M$ L" D+ r+ r+ P+ K5 S
  397.     }/ m' p4 r' k7 h% \  N
  398.   }5 v0 y9 n3 n) I% d
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)3 Y! F8 T' @. H
  400.   {
    2 k( l* Y4 w/ U/ M4 ^, E$ D6 K- ]2 {
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ! [' L8 I  n% `/ r" U4 y4 |* k
  402.     {- R) Q. P) H) W# f" `( Q1 C
  403.       file2=(LPUPDATEFILE)(*i).second;
    ' g4 n0 m! a% Y( X% ]1 `/ w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 m, M  \7 o" `; |! M# V
  405.       {; I5 U. S% `7 u7 Z- p( w$ O5 C
  406.         file1=(LPUPDATEFILE)(*p).second;
    ! _9 b' |/ B$ x; k
  407.         if(file1->vers!=file2->vers)1 i! f) \& E* Y" U& W' V. R
  408.         {6 l+ o5 \: t# E. C7 _
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " h4 T: W6 {2 m5 q7 Z; ~
  410.           c++;
    & p) m3 i0 S4 [& Z. {
  411.         }
    4 P. H7 x+ x  K4 i) {7 g2 F$ m
  412.       }# O5 `" v9 {2 [, F2 Z. R1 g
  413.       else) v5 u% V) S4 v( ]. N
  414.       {. k  G& \% o! o1 Q
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " s8 x8 z% S" e5 _3 {4 ]6 p
  416.         c++;( \, x( z% K: Y6 j0 V5 K, }
  417.       }/ X$ o  }2 v& J+ G
  418.     }
    , _! Z( t. }% [' O6 ^4 s& w
  419.   }
      p" Y, {* z  Q0 d& a
  420.   unlink(".\\DownLoad\\update.txt");  \* a# P6 _! ~
  421.   if(UpdateLocal.size()) return TRUE;$ l7 k/ Z" U2 {2 y( ?
  422.   else                   return FALSE;
    2 {( }! s* b, z8 B- G2 B4 W
  423. }
    ! |. `( n8 |8 Y; L2 Q2 ~
  424. ) c: H: d! x% @5 r5 Z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"- ~, P. R# K6 e
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    3 o- `$ A+ J; {5 a$ U& F+ O" f

  427. 2 r$ O1 m2 y5 z9 Q% R8 ~

  428. : `- {# ?- e9 J" q; }$ c
  429. ; `1 f% B* E7 }) U8 i, f* W
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    * @" D5 c7 u0 o$ z  p
  431. {
    6 P: r- |" t8 d1 N9 g& Q* L
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    5 H6 p/ L" h/ _5 w
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , @+ T8 a" a( Y/ |. S& O1 q8 d9 O' s
  434.   {
    ) z/ D7 R( |* m) ]
  435.     char szLanguage[50];
    % F- Z5 y; z" A3 I$ g
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  N" h; o9 {- I: a. O
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! @0 k5 o3 n8 T
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 R5 s5 l+ y- h, q" y& ?
  439.     else                                   m_iLanguage=ENGLISH;3 E. J: l' {$ _* T3 ]
  440.     char szRegister[100];5 @" X( t, y- N  Y/ V
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - e2 e& \( ~2 J. L! P) [& z
  442.     strRegsName=szRegister;9 b2 R* e1 Z. b
  443.     char szPatchURL[100];
    9 C2 d; V) `4 N9 L
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) [+ f5 J2 Y" _
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* ?1 Z- O+ o* S) v9 B: J) Y  k. e
  446.   }
    $ {' K# o; D0 w3 }
  447.   else
    0 p: w" z: M" |4 T
  448.   {1 v2 ^8 G( K$ O4 d( h/ g
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 m/ i8 P6 r. p
  450.     strRegsName=DEFAULT_REG_URL;
    : m  P4 i* h$ m: \# I# x3 D  d
  451.   }0 j; ]( l* A- O4 p2 U) h, g) H; z
  452.   if(GetFileAttributes("hosts.ini")!=-1)3 ]" C' ~( I( X. Q
  453.   {( ^0 V# |! I4 G# t+ _1 R$ O& F
  454.     char szIP[50];6 @/ {; x7 y* z9 n! T% \. O
  455.     char szDIR[300];
    # v3 ]  R8 G- s9 c
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))/ S) l8 D# S: I, r4 _
  457.     {; A* ]9 X1 s  l2 o  {
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    7 E  X6 w1 m6 J7 `  h5 I4 w
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");) J7 X7 i- P+ U8 K
  460.       strHostName=szIP;
    ; b! o0 X; z! t
  461.       strHostPath.Format("/%s",szDIR);
    + y6 E# E' U4 r6 u( c* f! m  n1 X
  462.     }
    4 ~. R% f4 r8 J% i+ Z- x
  463.     else9 H. p6 p3 m5 o* u
  464.     {+ j/ @) h+ v) y) [* T
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% R& L: U$ Q' B' e! T- I# q8 k
  466.       {5 o. d4 V' r$ P
  467.         char szLanguage[50];  X5 s! \' a/ T) f+ @% B
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    # r/ b% e8 p/ L6 s
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 r1 ~$ P" G, t
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    , U7 y$ o$ C: h8 K) v
  471.         else                                   m_iLanguage=ENGLISH;
    : G: P  N  [+ }5 e& V; A+ H
  472.         char szRegister[100];
    ' F5 G1 I& k, A! i6 v7 Q
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");( \2 D$ Z  \( U0 Q
  474.         strRegsName=szRegister;1 A8 C6 L# `8 W1 g0 e
  475.         char szPatchURL[100];) D: c( k) q4 Z' G3 K
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : J2 g( D$ A! @, m! [0 @
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 W+ `, j; x" S. o$ G- p
  478.       }
    6 E! P) e2 i- i! D
  479.       else
    & u" {; ~4 K) W# n* {( f- |7 w2 h9 R4 v
  480.       {- E: x2 y6 M' E  h) j
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& e9 {5 I7 ^9 [5 [( ^  r
  482.         strRegsName=DEFAULT_REG_URL;
    # F7 l8 G9 v/ u! E1 B
  483.       }- v9 w! Y! S3 y3 n  y
  484.     }
    ; `: ]! W; v9 S: C$ E: r
  485.   }
    . a0 s0 t; o# U
  486.   return true;
    4 G  \0 x' b8 w7 R) k) P
  487. }
    5 Q! y0 s, W1 e* ~3 F  J
  488. 8 P9 u2 G6 W2 v! P0 h8 B
  489. #include ".\ZLib\unzip.h"7 ?- d4 @+ Y9 d# X$ ]4 \: i, v* V
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);/ n. Z+ R) f6 E6 k, ]2 l5 h
  491. /////////////////////////////////////////////////////////////////////////////
    : w% w4 d1 Y8 y# l% b
  492. // CRevAppApp initialization
    5 a$ p- r2 L$ z% l; Q

  493. 4 _) r; `' n6 s4 F
  494. BOOL CRevAppApp::InitInstance()) S+ x3 t" U; t3 P8 ]/ n
  495. {: S$ V. ?0 C7 m, U9 F& P7 ~6 u
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];! P# R- E6 a5 t7 o0 N+ V: G0 [6 b
  497. 4 g, b4 R+ x) {4 a* @. W6 p( I( \
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 W  A5 U; ~9 U  a( n: e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))1 a# A& n+ B8 s, o
  500.   {
    6 K; F. R- r. k7 ]: N
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    8 C3 V" ^7 B% {- ~7 A. m) ?3 ~
  502.     GetPathFromFullPath(szPathTarget,szPathSource);( u2 j! a  i$ \# d1 E0 n& `9 Y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))! e/ {5 b" D8 ~5 [' C$ u
  504.     {
    5 j7 Q3 P& f' n6 R" y4 O# s
  505.       strcpy(szPath,szPathTarget);& y2 }9 _4 J" f( j0 P% D2 ]
  506.       SetCurrentDirectory(szPath);2 E8 O7 ?# \7 }  B2 U
  507.     }
    ) g0 x: m9 y0 I6 K8 k
  508.   }
    6 v2 a* ]' S8 g: W. V
  509. #ifdef _DEBUG
    ' a  r% h' {6 [# ]1 i0 M/ w
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 B/ v; x" U* f! C1 I
  511. #else( X! b, f7 i9 j! U6 N1 t) ~% }
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)): F+ e6 {, H6 D' X& p+ g9 t( C. c
  513. #endif/ ^$ P& h8 m  u; x. C; `; ~/ K/ W# @
  514.   {
    % c  l* f2 Z" Q, O4 q. }/ \- L
  515.     char tempFileName[MAX_PATH];
    4 M) k3 g- C7 J, `$ Z8 r8 ]+ h) G
  516.     strcpy(tempFileName,szPathSource);2 i. b( w4 d7 d- ~/ `2 m
  517.     tempFileName[strlen(szPathSource)-12]=0;
    5 L, D% n" s4 x- y3 t) Z7 `
  518.     strcat(tempFileName,"\\$CSUpdate.exe");7 C% A6 B% `. _
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 s  {8 _( V" q2 L! m; B9 o
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ S6 t/ X* w6 N1 e; z( S  X
  521.     return TRUE;4 F2 r: F* r* O# C5 c; v. q0 `) D
  522.   }
    ' `6 b" N1 f" J8 ]2 H
  523.   // Nuke 0118: Delete run.exe
    4 B- Y# u% l4 r% R% a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ! e2 c; m1 T7 l+ Q5 p- ^  _2 k% `
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    9 d" l5 O6 ?& W7 L5 T  m
  526.   if(!ReadCfgFile("Config.ini"))6 s2 P$ \3 i. B7 B5 t  ]7 H
  527.   {
    + [- s" Q3 e2 d* G: Y) ]
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);7 y/ Z  Q9 D' }/ g+ s+ D6 q0 T
  529.     return TRUE;
    * [4 n4 V: A9 `5 ~7 u9 M
  530.   }) d& i! S# T7 L# @/ Q
  531.   HANDLE mutex;
    # c! W# B. U8 q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
      R2 Z) ]9 B( d
  533.   {, l' Y" W6 Z# W/ ]6 M/ ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)4 T6 C8 j! G' }, P
  535.     {% G, @7 C2 s& r8 x
  536.       CloseHandle(mutex);7 M! d' o! @9 w- e
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);7 Z/ P7 i: R8 [. f: g$ ^1 Y$ `" @
  538.       return TRUE;
    % c& A* b' G$ W* w
  539.     }
    & g' o* A" J0 t: l
  540.   }  
    ; L3 M2 A4 a% O" L9 l
  541.   CloseHandle(mutex);
    ) u1 ?; c+ o) y! Y( }6 l
  542. 6 R' }* [' d( o5 i0 M3 [) ?" L
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);# M6 O6 J$ C( v5 W
  544. ( `3 u  h( j* C, R
  545.         AfxEnableControlContainer();
    * S* H; D6 {) @9 h' _8 y
  546. / ~$ v+ ]+ h4 c" a7 s
  547.   bCanUpdate=FALSE;
    ; y4 @2 C$ }) G
  548.   dwStartUpSteps=1;
    + K+ n7 i: x! {) e
  549.   dwProgramState=AP_NOTHING;" w& `6 `" D# O& v
  550. 5 w7 C; w$ m8 k7 q$ f
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);6 g9 b5 M3 h- {7 L

  552. # d1 i+ A' m) V
  553.         // Standard initialization) {; X, g1 {- a/ h( C$ F5 c
  554.         // If you are not using these features and wish to reduce the size9 Z+ Y' [0 F- c" Z
  555.         //  of your final executable, you should remove from the following
    6 `1 J" V- J2 ^7 a' [) X" T) Q
  556.         //  the specific initialization routines you do not need.
    ) S9 J1 O$ i" `0 y# Q; A+ W
  557. 5 z; p& ?4 G6 y6 y" J
  558. #ifdef _AFXDLL
    * m3 t) }- V9 P/ Y; }7 @
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    & Q2 b% r9 j% e. d3 b7 Q( L
  560. #else7 D* w+ V: l* [3 u/ n
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    0 k& G( F7 C: T( \8 w8 x/ Y  H9 A
  562. #endif9 _$ v+ N; [4 ?, m6 X

  563. ( v7 ?. E- a: o: j: ~
  564.   dlg=new CRevAppDlg;) a" |8 `# ~! B7 q
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    4 T& |# A* X! H% L- H8 M) h
  566.   dlg->ShowWindow(SW_SHOWNORMAL);3 ?& @2 W2 y$ W) n/ P- M& S3 j
  567.   m_pMainWnd=dlg;
    / t/ a. o6 x. ?/ u6 [

  568. 2 w( `: ~( K: R) c8 X% W4 |9 a% g
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    4 J0 Y% v6 q4 K% p
  570. 7 B4 G6 N0 b0 I5 p* @9 |4 u
  571. //  GdiplusStartupInput gdiplusStartupInput;
    4 g0 z4 d: _/ @9 j- g, K# b! [
  572. //  ULONG_PTR gdiplusToken;
    7 U0 X1 a+ I/ @* r/ P7 w. p: o! U
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);: [1 _8 {: x1 \& S

  574. . P) R; h. E/ |/ k- \1 K, L
  575. //        CRevAppDlg dlg;
    4 _- Q0 D- N% B9 C0 r% b, \
  576. //        int nResponse = dlg.DoModal();9 U; x# n# v# f9 r6 J' Q4 v
  577. //        if (nResponse == IDOK)# _% _$ n- o- o4 _) L
  578. //        {
    , T2 x& G( S) _3 m, `" K2 k* q& ]
  579. //                // TODO: Place code here to handle when the dialog is# B$ f) d9 x: v. F& J
  580. //                //  dismissed with OK/ a' ~$ D0 _2 G2 A$ R
  581. //        }2 y) o- j( ]  |+ Q6 X
  582. //        else if (nResponse == IDCANCEL)
    , x/ G- \- i9 R' L' s6 P
  583. //        {7 Q# C' a! |0 Q
  584. //                // TODO: Place code here to handle when the dialog is! w4 R% D2 j- v# F0 {, \' x
  585. //                //  dismissed with Cancel
    + K2 U) t( H7 e( Z3 F
  586. //        }5 D; D' G9 o) c+ p
  587. 3 d# G) _8 h) H& ^6 v) k, ?( B, P
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ) e! p4 T! O( V# T) _5 L
  589.         //  application, rather than start the application's message pump.% i( |& U- k7 _# V# Z, F
  590.         return TRUE;, [4 y9 B- L1 d  j
  591. }
    % Y" \- P* C9 z! g$ k; W

  592. 7 Y7 k! B9 y8 ^8 m
  593. char *CRevAppApp::strtok3(char *pSource,char *token), W" Z$ z$ P7 }, E7 d6 z$ [
  594. {" G4 k4 O  ^+ n9 _' @5 i
  595.   int i;
    & g( W! n2 T8 Y# `& u; N
  596.   char *szRet;* @; F% {, U5 P* @6 m; T
  597. ( f- S  w: H, s- c, x
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " p# F' @; P4 a1 C8 V8 ~9 }6 ^" B
  599.   if(sztoken)5 n" v/ g3 O/ j
  600.   {
    6 L# E: O4 m  g" `5 L% o
  601.     szRet=&sztoken[itoken];
    " w8 \' a& X4 ^1 g* c
  602.     while(sztoken[itoken])1 X5 S9 a1 E, y9 v5 ~
  603.     {
    7 [1 z1 K. B3 E0 \' }
  604.       for(i=0;i<(int)strlen(token);i++)* G& {; B! ]8 Q8 T2 x% L. J" b
  605.       {
    ) _$ e. W, A9 I# R0 |5 @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])  b  V6 _9 U! p6 [% I( j! @7 [* }
  607.         {& J; {1 \% R; b+ ~; R) C, B, Y# K
  608.           sztoken[itoken++]=0;
    6 s5 o. i- L) |$ E: g
  609.           sztoken[itoken++]=0;' y$ V/ ^) |# @- Q/ e8 c
  610.           return szRet;* l, V: S& ~( s) m7 r4 t8 j' m
  611.         }
    ! t( D7 m' l0 x2 a" K
  612.       }
      N" ?" P  J2 ]* T5 Z1 k2 S2 _
  613.       itoken++;9 d6 d& P, d% k/ J5 U
  614.     }
    - D9 t: m& p; e$ x* c# a) c
  615.   }
    5 P, O; ?7 R# O, i, n
  616.   return NULL;
    " x: R6 F" M1 A. O
  617. }0 c/ z3 p4 G# Q4 P( u. c1 `

  618. # ?3 O$ E: S! x7 V& W) L2 n7 M* d! f
  619. void ProcessProc(long Total,long Current)! t' N" |: t: ^* E/ q: l6 X
  620. {
    . g  B: u6 [3 c2 c
  621.         MSG msg;! o& N2 i/ E; h
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    + Q% _2 I9 J1 b" Y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));9 K, y8 ^* o: f+ `# ~1 }6 s8 z
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    # a: B! ~3 m! o2 ?8 ]6 M6 n4 s
  625.         {
    4 d4 [- [2 q5 m$ Y0 ^& |/ V9 J) E
  626.                 if(!GetMessage(&msg,NULL,0,0))
    2 I! q4 J5 G3 b1 t3 x, I$ R3 \3 s6 z
  627.                 {
    - b: W% Y- Z6 f
  628.                         return;
    : J/ T( K" E- r0 |- H
  629.                 }, g3 H8 V7 P4 f  ~( @8 l' x
  630.                 TranslateMessage(&msg);
    6 {* E" h6 ^% W& r9 ^3 n& n
  631.                 DispatchMessage(&msg);
    " e; e% @. T+ |+ O1 H
  632.         }       
    $ p% l& @! _5 S1 Y, u7 s* E
  633. }
    5 u* L- c/ ?0 i5 G& T& l8 c) G

  634. 5 L+ _6 \+ Z+ F$ l9 N9 }8 }
  635. BOOL bFirstChar=TRUE;
    ' n5 G& W4 l! S& F& C
  636. 6 K& n9 `, K% }0 L" K8 N1 F1 p
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 D+ k/ ^; o- E4 G' f9 m
  638. {/ x8 M, L, r6 {/ G! B
  639.         // TODO: Add your specialized code here and/or call the base class
    ; S' |' M; x. e& k$ p6 B
  640.   switch(dwProgramState)
    + {) ^6 j+ @' v$ \
  641.   {9 F& c6 l6 |1 c2 P  ?
  642.   case AP_NOTHING:7 {( o7 |6 C( W) a  T  d
  643.     switch(dwStartUpSteps)
    & Q( X2 C8 d1 ]
  644.     {, B1 \% D+ C; ?5 l& h
  645.     case 1:) x" I0 f! L9 a( L* r6 v
  646.       {
    + S, ~+ x6 u) y
  647.         int i;
      G- _* Q  T( C* M
  648.         CDC *pCDC=dlg->GetDC();
    # W4 Z& ]4 f: A7 @1 _
  649.         HDC hdcwnd=pCDC->m_hDC;
    + z+ o& v+ |( M9 j
  650. //        Graphics graphics(hdcwnd);
    7 U6 _# `6 s8 L+ T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 M& T) ]$ c! S( e; E- C5 o
  652. //        INT iWidth=bitmap.GetWidth();# ^6 L8 G, I1 U: I" x  j% E0 Y
  653. //        INT iHeight=bitmap.GetHeight();
    2 \% _' W4 f1 {( C) A
  654. //        Color color,colorTemp;9 H% F0 X# X) k1 t
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & O2 f& w# K8 A0 o. z, _
  656. //        {
    - ]! j' A# o  G- c; @$ {
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    6 o5 F# m, P0 A7 Z* x; {
  658. //          {5 s, r: u: u1 p' u0 i5 P" G
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: u8 M) S+ c+ S# w6 v0 _
  660. //            colorTemp.SetValue(color.MakeARGB(0 W; _$ t3 D0 n9 F
  661. //              (BYTE)(255*iColumn/iWidth),3 `, U+ o( N  }- c9 ]2 d1 [8 p! [
  662. //              color.GetRed(),
    ; l0 R/ B* }+ b" y# o  _5 ?& `" `
  663. //              color.GetGreen(),
    / {4 ]2 k5 a5 }1 U# e
  664. //              color.GetBlue()));
    2 D$ _" p- v9 p& d. c4 O" n; {
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);" }  C/ [: a' B8 c
  666. //          }4 n/ x0 w" W; H# i) |9 ]: ~
  667. //        }& ?0 M, O& ^" G. Y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    5 f8 K! w9 [( q+ p4 J+ h
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; Q/ b2 m* s8 s4 F% n1 X
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");! L9 v2 Q8 B/ H4 `: i, d/ Z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 z! F2 m( C* L0 U7 h% Q
  672.         for(i=0;i<240;i+=8)5 c7 q* |. Y/ _) ?# Q! k3 D* v
  673.         {
    # c3 M; d' N/ b% G, m9 s
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" v" P# ]9 x+ G' g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& S, z: X8 j# m  [
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      q9 o# M4 R/ d& V. j/ M- u
  677.           Sleep(33);
      C. V* i$ {# B4 l" W# B7 K% I9 w2 J
  678.         }
    / z/ N4 f) A4 v; \* b" g. m
  679.         Sleep(1000);4 X' F9 k, `* v; H) v
  680.         for(i=240;i>0;i-=8); ^$ x& z0 ~3 o% K8 i6 i( K) e9 r
  681.         {
    ; A& m2 p. x" j8 d( L% Y* \
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: W+ k2 F2 [7 K, [* g, j/ Q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- J- B% m  u7 G1 v" u, h+ u
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + c2 H. I- M! g2 ?
  685.           Sleep(33);
    & g- Y+ s- J+ ~5 B. W# a: |( b: J, l
  686.         }
    & Q3 t  N" x& s( t- ~7 Z' }2 g
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);0 u$ C' i( N; A  ]: a
  688.         dlg->ReleaseDC(pCDC);
    9 r7 r3 D4 ^( W! _& o4 E% w3 G
  689.         DeleteDC(hdctar);
    . x0 Z/ o7 |( [% S  L
  690.         DeleteDC(hdcsrc);
    8 ~( J( l0 F8 t3 l" _: W" C
  691.         DeleteDC(hdcorg);
    7 j; i6 C' ~3 b# T; j! t
  692.       }' W# {# c) ~. M' m2 ?
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);" e  q# ]5 R; W5 B$ h6 H
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    * D" _  g8 b3 z( k" g- ~- B
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");. a9 w  E8 D/ a6 n/ y
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- T% K% T, p9 u) Q( f3 w7 p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ V. m4 @, x9 m6 a: Z; z% T
  698.       if(!Dn.Connected())
    / Y( R% t! g+ F% l
  699.       {
    # W8 k1 V% v. r9 z4 l
  700.         dwTotalFiles=1;; y0 R  |( R, y  g" v/ ^% j
  701.         dwDownLoaded=0;) v* C6 h; A4 q8 Q" n8 s5 Q
  702.         bSilentStep=TRUE;) k8 p8 [1 \7 }4 c! a( ]" f. ]
  703.         bCompressed=FALSE;
    : w3 u+ g- J: B1 Z
  704.         strExtLocal.Empty();
    9 ^, C& H) @0 }0 d9 x
  705.         strFullName="readme.txt";
    7 D" f0 ~' {: [- }. ^0 @- `: c. w4 ~+ D
  706.         dwProgramState=AP_CONNECT;2 \- E8 b( I3 ^3 y( m$ Z
  707.       }  v3 h# F0 W' r( h
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    : N2 I9 v* Y) D( j
  709.       dwStartUpSteps=2;
    # Q. A$ f/ D- o" \
  710.       break;
    - n8 H2 h5 `8 W
  711.     case 2:
    6 R5 H6 Y8 U+ `1 K; b% o  L
  712.       {1 P$ P  l3 R1 [" i
  713.         int iEOF;5 u! E( @5 A# r" [: e
  714.         FILE *fp;
    + O& a5 H: j* u5 e+ ]8 h; i3 M1 A1 J1 v
  715.         char szString[512];+ O  u) t. z7 I! Y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");  Q3 E/ t/ R: F0 G0 ^
  717.         if(fp)# w" m/ o. @" n# L
  718.         {5 K+ t) }' X0 R. h
  719.           do
    3 z) U3 d' m0 q5 z* Y& W
  720.           {
    5 W" f* t" k# u3 \. y8 ~4 H( ^* j
  721.             iEOF=fscanf(fp,"%s",szString);6 d" X6 B: k& ?6 a% O
  722.             if(strlen(szString))
    0 C3 ~5 G: F9 X) D! L/ w9 Y# {9 s
  723.             {* q. W& r1 m' h
  724.               if(bFirstChar)
    ) O2 n6 G( v# R9 L8 O' A' ?4 X
  725.               {6 G+ `$ O4 i7 S5 |$ s
  726.                 bFirstChar=FALSE;
    2 w! E/ Q2 D: V  H' |* J; k+ w
  727.                 bConnectIsBig5=FALSE;4 u% e! Z; m3 @5 ~" q0 I- B: `2 a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;8 s$ g: e1 p5 n  Q1 f
  729.               }  m3 R1 n4 F& k  a' R$ E
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));* U+ \+ q8 I7 S/ J0 p: p
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));% G1 s. ~' B8 s" N
  732.               dlg->m_ListText.AddString(szString);/ T( q( t, R( J  w9 p# J
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 Y' c9 r6 V2 Q. T  e
  734.               *szString=0;( H- w( \8 W# q- i* Y2 {6 @, d8 F
  735.             }
    7 x! c& P$ e1 T! E
  736.           } while(iEOF!=EOF);  ?6 {1 w" V$ A7 |8 Z$ z
  737.           fclose(fp);
      u) X. K1 }4 g+ E% e! W( r# m1 q
  738.           unlink(".\\DownLoad\\readme.txt");
    , W0 i3 h* k" F1 T0 X
  739.           dwStartUpSteps=3;
    7 d  }! e; T  D, F/ r% z4 @
  740.         }
    ( X6 Z+ m! W6 b) W+ W0 ?1 S6 ]) e
  741.       }
      }, K) m* `( r! T
  742.       break;4 @3 r, |+ }8 Z6 U7 v) `
  743.     case 3:% {$ |1 S# {3 m" v; ^
  744.       if(!Dn.Connected())
    . G, y, v% g0 V4 [. i6 l# n
  745.       {, E; A/ s8 ?$ P" w7 t" e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);% v# H4 |2 L4 i2 t% U
  747.         dwTotalFiles=1;; `3 P, b( U$ \
  748.         dwDownLoaded=0;
    $ R+ J% Z! X+ J& \! K  m' N, S5 _3 a
  749.         bSilentStep=TRUE;
    2 O+ N  M9 i* O& b
  750.         bCompressed=FALSE;
    . }' G* Y# n$ p" L: G
  751.         strExtLocal.Empty();2 w& |8 A& b, ^; _, ^2 _
  752.         strFullName="checkversion.txt";6 a& c2 {, c4 L4 B. t/ C
  753.         dwProgramState=AP_CONNECT;! Q; N& F; P/ U) e- w0 Z# L; O
  754.       }' f' m$ ]7 S& ^: V, L
  755.       dwStartUpSteps=4;# o; Q7 a( u% G: M( F/ S" O) N' @' e
  756.       break;: y' |0 x' `! \7 E
  757.     case 4:
    7 L% a3 z/ Y0 \: \' g$ U
  758.       {: I, u$ S3 Y, I% q* C
  759.         FILE *fp;
    5 `9 \9 h: o) K# v) d
  760.         char szString1[128];
    4 m- e* T7 p3 L5 ]3 `
  761.         char szString2[128];9 g" C" s; Z( H; Q  l; h- l9 |/ ]0 S
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");/ i" d* R+ x' H' T! b6 Z3 i
  763.         if(fp)& i, m! p% ^+ L- o" N7 C
  764.         {
    $ A0 l8 g  u& D4 Z( ~$ M) Z
  765.           fscanf(fp,"%s",szString1);; R0 H) N. j# r1 i' K
  766.           fclose(fp);& g4 O( W# v! p4 L8 W+ w% A6 ?
  767.           fCheckVersion=atof(szString1);
    0 L; L2 A" f+ }- F3 {
  768.           fp=fopen(".\\checkversion.dat","r");
    , S% C7 b) `; u) S/ t. W
  769.           if(fp)
    4 @5 [! S6 f4 O$ F( C# H  c
  770.           {% R- I- X0 P3 }% b& D$ `
  771.             fscanf(fp,"%s",szString2);: P; n7 ~% S( u
  772.             fclose(fp);* r/ [8 c# c# C
  773.             if(atof(szString1)!=atof(szString2))
    : O% l2 _$ I: P. [- V
  774.             {) X. y1 y; U! s* s1 P$ v6 U3 q: V
  775.               if(!Dn.Connected())+ v$ f, a% u1 ~8 s( S
  776.               {4 V  F3 H8 F7 E
  777.                 bFirstUpdate=TRUE;
    . K, W) G0 [* J& w
  778.                 dwTotalFiles=1;
    : i5 \: ]( q$ w3 Y5 f: `2 H
  779.                 dwDownLoaded=0;3 A% h) V2 i* h5 Q, a. b6 o
  780.                 bSilentStep=FALSE;
    : q5 _8 V) N+ {8 r* ]
  781.                 bCompressed=TRUE;
    * S9 P( {( d( H
  782.                 strExtLocal=".\\DownLoad\";* q3 }$ j. \* m- K0 `/ T6 b4 _/ O! N
  783.                 strFullName="update.txt";
    ( o, d$ @: _) i! D
  784.                 dwProgramState=AP_CONNECT;
    & v3 B* G5 B9 A
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 Z3 W- i1 M* G  Z: {
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 i, }6 w% P/ @$ l8 Z# V/ w5 R
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 \1 f4 H7 [, Z& p7 a
  788. ; B; l  `4 I# K# n) b) D% ^6 z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' K0 {' p4 W2 M! n# v% Z- I
  790.                 unlink(".\\DownLoad\\checkversion.txt");+ E: G, S( d. X
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1); u9 j  T/ d9 {% E- f
  792.                 {
    7 V2 C. o# C0 T% v6 G) N0 j
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- s. f; @, }4 e$ p8 Z4 t4 v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ x; A% u# e( @+ Y+ d+ G+ d, _; g3 g
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");6 n; F( o$ R+ c) X( s, ~
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( X5 E: \" U& j+ h
  797. : Z* ^5 E( `) Y$ h4 ?/ h+ C
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " u: B2 g7 z* D) V1 v
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: N' H1 p( y( V9 U
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    " ^3 }: ?- X( }
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " }& K, J8 ^! ?+ ~" v
  802.                 }
    . s" u$ l- T; L4 |, x
  803.                 dwStartUpSteps=5;6 A5 D& E( v& r- L4 p0 R
  804.               }6 \( h. ^4 f1 Z3 m6 n  [
  805.             }
    4 s2 b# h' @. }! s, |- {
  806.             else9 }9 Z9 t8 m7 e& o
  807.             {
    " O$ c" p; B% ^) j
  808.               unlink(".\\DownLoad\\checkversion.txt");
    7 K% N4 |% V0 d0 a, n9 ^0 b( V
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# G- F2 a. G, A- L8 |. F
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    6 E( F  @! F) U8 L- M/ p
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");; W) }* _) y9 P- D

  812. # K9 m- v: a$ I2 s3 D
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 T# _) k4 d/ n
  814.               dwStartUpSteps=99;
    - g. Z% z' c. K) [/ A
  815.               bFinishUpdated=TRUE;1 Y: U) C4 m0 C  _- T9 ?3 F
  816.               bCanUpdate=TRUE;
    + U$ |  q/ `9 E% r
  817.             }0 d  B: E) J, o5 \& s0 v' m  G$ @
  818.           }
    " ~; ?( \' ^& ]' J- q/ z/ I0 c! `3 f
  819.           else. u( w1 c6 `+ S* K1 ~
  820.           {' `- z: w: j  _. p$ l2 }
  821.             if(!Dn.Connected())& a) o: ~, N+ c- p  z' }, N3 @+ `
  822.             {
    5 t7 x9 ]# f/ Z( Z. x, Q) w
  823.               bFirstUpdate=TRUE;% ^' Z+ f0 J) d: V$ g* t4 @% Q2 i% R
  824.               dwTotalFiles=1;( `0 U# u- Z1 [8 J
  825.               dwDownLoaded=0;
    4 m0 F/ F  Y0 M* y7 Y! @! z0 O9 }
  826.               bSilentStep=FALSE;
    ; ?5 K9 ?) s/ t6 N
  827.               bCompressed=TRUE;& p4 R' B2 U4 x0 @% ~8 D% m
  828.               strExtLocal=".\\DownLoad\";4 y6 u8 V- P" I! @7 b( l+ T) i
  829.               strFullName="update.txt";0 J7 n( D8 G. K  ?% z1 B
  830.               dwProgramState=AP_CONNECT;& H1 o9 Y- E# e2 k2 y( Q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! `4 u! ?6 n1 e3 H
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 `9 C7 K7 U' t+ H! }( H
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");! }- B3 D5 r" Q- O; i9 R
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: Q8 p  Q4 k# g# }
  835.               unlink(".\\DownLoad\\checkversion.txt");1 s: H# g- y' j7 E* J" @
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    5 ~7 s8 s& V* p7 J
  837.               {) q6 W4 a3 {+ X5 i
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    - m" F- n  p: Y2 y4 {( H& r8 y
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");$ t* W# B# y8 I9 {$ {4 r" d) X
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    * \- b! r6 n9 ^: P9 a% Q+ b$ D
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, L1 {7 ?# Z* S9 Y5 u, U* L5 y7 n
  842.                
    , c  s, A2 I) g
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / N; [2 u3 v' f6 W8 }, W) W# }! ^' @2 t
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    3 _2 j' t7 H; m0 R. O
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");7 q4 v$ J, X* o% S0 O( T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & u2 M  K; L. y4 `
  847.               }
    * K2 ]& s( _( Y# M; i, }
  848.               dwStartUpSteps=5;
    * h( K3 H' h2 x9 C; m
  849.             }# d$ R4 ~9 B, E! q4 h6 y
  850.           }8 H+ O7 z( D1 i5 |7 m' E
  851.         }
    ! ^. E) n$ R" R! C4 v
  852.         else: \8 T  E0 s6 P1 V5 [
  853.         {- J' H8 E0 ^1 u* @/ |+ V9 j
  854.           dwStartUpSteps=3;$ ?/ q' @+ R5 \
  855.         }
    7 m9 j1 Q/ x9 `2 P& F" K* O- \7 R) G
  856.       }
    4 J2 `- a* S- W" F( q
  857.       break;+ s" v  C- V0 Z2 \0 b7 ^
  858.     case 5:( p4 f* f" L* J. ?& b+ r+ K
  859.       {
    5 C' a6 r, o; R* e& W% x) |
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& Q+ u$ n( ^* V/ Z, h3 ?$ n9 u( h
  861.         {
    / D- l7 J1 k; `, `" g  d
  862.           int opt_overwrite=1;' R4 X- r: E. }. y
  863.           int opt_do_extract_withoutpath=0;
    2 L- ?( e* q- V+ v# x
  864.           unzFile uf=NULL;/ o5 w6 T0 V# r* ]+ L4 E

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

0 Y: C+ [0 o2 z3 ?# t
- d3 d$ l' V/ J4 d! t

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-24 16:20

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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