CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
2 v+ a( m+ w1 w7 i; b) Z  _# D
  1. / RevApp.cpp : Defines the class behaviors for the application.9 K) R1 m6 [1 x) s) J
  2. //8 U8 q% y- y0 K
  3. 4 v) [, k3 E2 g/ m
  4. #include "stdafx.h"5 I- v. r0 D* f

  5. 6 m2 g+ ~7 o0 C0 p8 ^+ [
  6. //#define UNICODE
    + f* C1 M* R) G% R8 J4 M: Q$ {
  7. //#include <gdiplus.h>
    " _9 L$ [# U2 r
  8. //using namespace Gdiplus;4 t, P6 `1 m% t3 m. [$ x
  9. / ~0 p9 S- {1 y0 i3 t
  10. #include "RevApp.h"
    ) t: R4 `$ n6 p" \+ D; v1 s% a
  11. #include "RevAppDlg.h"# V, B- ~5 G2 X  G
  12. # }$ ]7 D  c# K# a1 O  _
  13. #pragma warning(disable:4786): Y6 d6 O% J* [  ]$ s& i& V
  14. #include <map>
    ( N8 g2 p1 Y% D1 @* E/ ?8 X( a
  15. #include <list>
    - m* F' n7 A& N8 U% a- r5 b# C
  16. #include <direct.h>+ c. o* w6 g4 f. a" C7 c% T* \. v

  17. 8 h( b  F) w  |) s9 x' K0 m4 H
  18. #ifdef _DEBUG
    4 \7 s+ p) [' N
  19. #define new DEBUG_NEW
    . i8 L% L3 ]0 y+ c" ~
  20. #undef THIS_FILE
    $ i4 |6 @9 m7 b# H
  21. static char THIS_FILE[] = __FILE__;
    9 m. \3 |4 A' d7 ~) g
  22. #endif8 w5 D! p1 N( M/ K6 T4 J; ^
  23. #include "SkinResDef.h"
    * L6 K( h* P+ X+ q4 U1 H
  24. #include "ChangeBG.h"& P# O( t% R9 X3 [: n* K
  25. #include "AFXINET.H". `2 J- c8 l1 q6 R$ F

  26. / G2 U5 n4 s$ F+ y- ~% }2 A
  27. #define TRADITIONAL_CHINESE 0
    & L  f* l: H5 |7 w6 x
  28. #define SIMPLIFY_CHINESE 1
    7 i3 |! Y  I- I- D- P) t6 e5 z
  29. #define ENGLISH 2
    & M5 w! z0 C! W8 P" K0 _$ L* Y7 j7 N
  30. int m_iLanguage = ENGLISH;6 M  C6 X- ]' }! f7 b5 N
  31. /////////////////////////////////////////////////////////////////////////////
    & r% q1 Q9 \8 q8 B8 Q
  32. // CRevAppApp
    * U5 {7 D$ a) Z; B. L, t- M/ n$ y
  33. 8 @* B7 W% ^: s
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)' i4 D  E" V  i( H! U! S
  35.         //{{AFX_MSG_MAP(CRevAppApp)3 ~9 ^' t0 g& s9 M
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.: F+ S+ E% ^& N9 m
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    $ F8 D5 t+ {$ P
  38.         //}}AFX_MSG
    ( X0 ?7 a, i; j, u% G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    , h4 u/ |0 l8 z3 g
  40. END_MESSAGE_MAP()
    ' X" F( E; ~4 f, C

  41. ! {/ W' b5 x* r4 S8 w
  42. /////////////////////////////////////////////////////////////////////////////9 J3 a* y: @. N8 s4 K
  43. // CRevAppApp construction8 s$ W) d: w; S
  44. & u# E/ T: g; u) K
  45. CRevAppApp::CRevAppApp()
    # s1 {3 }+ A" |% `
  46. {9 J" N! c: y0 \, D
  47.         // TODO: add construction code here,
    # j0 [* g# q% d6 }- I
  48.         // Place all significant initialization in InitInstance, l) {( H! f- e- m" y
  49.   bDisplayIsBig5=FALSE;7 |% P: V* n+ c; G2 N( V) Q
  50.   bRestartUpdater=FALSE;
    % Y. ]! _$ L$ F; v# w- q( u
  51.   bFinishUpdated=FALSE;( I- e0 P! G- g( D1 Y9 S! Q) n' @; \
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;& L9 k! s( x" L* U2 X2 W
  53.   InitChangeDataBig52GBKS();
    & s/ o; x: ^1 ?1 T8 q( L9 Q0 ~
  54.   InitChangeDataGBKS2Big5();0 p7 h2 A1 g) z; `' ^; Y/ c
  55.         //& M& z( ^; J  X8 X( |4 W
  56.         bClickRunExe = FALSE;' }! }& C! p; X; i9 ]: x
  57.         //
    ! G! q6 d% i3 S& P5 Y
  58. }8 j5 Y7 J" {. ^! g! G+ j0 s8 f

  59. " G( F# C9 O4 n* Q( {9 D
  60. CRevAppApp::~CRevAppApp()
    $ P! P" W+ M# z
  61. {/ a: W- U5 s& B1 R5 g& j) k9 R, d
  62.         // TODO: add construction code here,
    ; X! m$ |5 ~+ J+ T
  63.         // Place all significant initialization in InitInstance3 V- P& n1 z" w7 @: d6 h
  64.   EndChangeData();
    % T! x7 `. I2 v9 A0 U2 N- q$ k
  65. }
    ; P( {/ |; V8 K- `% K, r" @
  66.   f, |8 ]% b4 l& \  z; J& B
  67. /////////////////////////////////////////////////////////////////////////////9 m7 C/ G. b4 W' c8 s/ i5 _1 H
  68. // The one and only CRevAppApp object# a0 }4 K+ Z2 N# a% I' b# s

  69. : j  u* q& H7 l( x- K3 P
  70. CRevAppApp theApp;
    4 P3 U$ j, n1 f( D
  71. $ A, X' E6 l" d: j# ]6 E% B: h- _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)$ U: z9 B/ d6 O% V
  73. {
    $ X1 g% {8 V1 o& ~4 E+ d1 w. H
  74.   int iEOF=0;
    - L" _$ U) ^" N9 K3 ^8 ?
  75.   char szTempName[MAX_PATH];
    ! U9 l  I! f7 v  N8 e
  76.   *szFileName=0;
    # h/ Z* T4 c+ d  m/ @
  77.   iEOF=fscanf(fp,"%s",szTempName);9 z8 \1 {9 V6 r2 H( s1 f
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    $ W, E0 ^/ i$ d# ~; ]
  79.   {
    ' Q9 [1 B' A; a2 h$ r% J9 [" B" t
  80.     strcpy(szFileName,&szTempName[1]);. e9 B# E6 R" h* \# `
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
      }: W  w* ?2 ?! @( x3 Y* d3 _
  82.     {+ b$ U1 Z) |* w  B# Z3 J) G
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ! G5 [) k2 i2 B$ L
  84.       strcat(szFileName," ");
    * b1 B* Z+ U7 H. |* T+ p
  85.       strcat(szFileName,szTempName);
    , |2 g; }3 s1 b, i; a$ c
  86.     }" u3 a( g8 Q" K- i; E
  87.     if(strlen(szFileName)>=1)2 u* s8 f& n2 v2 M6 J
  88.     {
    5 v! [: L* Q4 X  N) H& Y
  89.       szFileName[strlen(szFileName)-1]=0;
    7 w7 E+ Z; M  S. @' O' k4 a
  90.     }) |) P: p. X3 Q$ \( Z9 Q  f3 V6 `) D+ ^
  91.   }6 I" [7 [4 V1 b7 P1 `
  92.   return szFileName;
    8 a: t, F+ Z. R7 n/ I
  93. }
    9 b+ |8 T4 v  @$ d3 A. c, p

  94. 9 R& ^- u6 ]  U( }. Y7 ^2 o
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    7 C  V' m$ \; x7 P2 d
  96. {0 ?) |/ ^$ ~, ?3 A, e
  97.   FILE *fp;! c5 B) b! y6 P
  98.   char *key=NULL;
    8 ~, t& i, m" S9 D3 `
  99.   char version[MAX_PATH];" q) v. N' G' s
  100.   LPUPDATEFILE file,olds;
    % A- b! i6 L7 K+ |* h
  101.   std::map<CString,LPUPDATEFILE>::iterator p;2 Q$ c5 c4 d  O7 h9 q8 x

  102. ' N* T/ @/ i/ s
  103.   UpdateList.clear();$ ^. w5 |  P) z2 Q) j& h" Q
  104.   UpdateFile.clear();9 |1 {* X1 Q7 ^5 @0 \2 z+ P. e
  105.   if(GetFileAttributes(filename)==-1) return false;5 f4 ^- S; b- y6 f. G
  106.   if(!(fp=fopen(filename,"r"))) return false;/ M; Y& V. |$ R
  107.   fscanf(fp,"%s",version);
    " k2 r" v9 _/ R, ]/ a
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . ]7 W/ J" N% e- L. o0 ]6 J' S
  109.   while(fscanf(fp,"%s",version)!=EOF)9 R% d7 E8 n0 ~9 Q5 f2 h
  110.   {
    ! Z: T; S. |$ W/ ]1 j4 x6 G
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: N- f8 k4 i  |" y
  112.     fscanf(fp,"%s",file->path);
    . P& o5 C4 w% y6 _
  113.     ReadFileNames(fp,file->file);/ w4 {$ s! o7 k9 r8 O
  114.     strcpy(file->full,".");8 W. K; n* x( f; ~+ n) A- A
  115.     strcat(file->full,file->path);& z7 D; C+ s! G  h
  116.     strcat(file->full,file->file);' h# K4 t; Z! z. M
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    % G+ N' E, ]" t8 l
  118.     {9 L+ @' z0 j9 o/ t9 H6 G* d: Y
  119.       file->vers=(float)atof(version);
      Z+ m, w+ @7 c9 K' P+ L8 d) s
  120.       UpdateList.push_back(file->full);
      w" S0 h- c5 n/ u7 k
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));1 m7 h$ `* @* ^$ u  l" ~, E
  122.     }) k, X1 E) r2 j
  123.     else
    - {, x+ y4 D! q" M# W- L0 f6 Y" v
  124.     {
    $ S8 }& z. @* l, ?1 D
  125.       olds=(*p).second;1 W; K0 K) G4 K0 `9 v# ?1 G
  126.       if(olds->vers<(float)atof(version))$ w  |- u; _+ _1 o4 T
  127.       {2 ~$ U* Y$ T- H  F9 ^& B
  128.         olds->vers=(float)atof(version);
    0 {8 O/ ?2 w; Q9 A: x/ [
  129.       }
    3 o) V4 b8 ~" C; h) o  r7 n7 E
  130.       free(file);
    7 K1 v% \) C* R, n1 O- e
  131.     }  i% @* L8 J$ I  `1 t1 Q4 u
  132.   }
    & E* F6 l6 }* ~$ U  n' a( z
  133.   fclose(fp);* E6 {$ e* A9 g- N
  134.   return true;4 x) [( f- _1 j1 {' V6 D, _+ b
  135. }: j9 S' d% T. }+ h2 D. B* y
  136. - J9 a% t& e) S+ g
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath), W, P/ z, X/ I
  138. {- p8 w. L. W7 Y  |* f
  139.   TCHAR  szFull[MAX_PATH];& B1 ?: \, ]# p( q% J( L+ Y: v& z
  140.   TCHAR *token,*inter;: |, [  m8 X1 z9 W/ s- d9 b3 @% |
  141.   *szPath=0;+ V/ |3 G  S0 k: A
  142.   strcpy(szFull,szFullPath);) H% D% |- j: Q
  143.   token=strtok(szFull,"\\/");+ s% e: _  ?. n% U
  144.   inter=token;) L, [9 v3 Y8 B0 C7 D0 |! m
  145.   while(token=strtok(NULL,"\\/"))/ b) X. @4 Y: i9 p4 C% I" E0 m6 `
  146.   {- U' B7 x3 a1 L6 G( j" _& b  M
  147.     strcat(szPath,inter);0 w0 T" t' H% _" g% B
  148.     strcat(szPath,"\");+ X0 V& w5 y1 W! b
  149.     inter=token;  L4 F3 W# B! m  x0 g7 f* H
  150.   }/ o8 j; {. r7 q. A0 E
  151.   return strlen(szPath);8 y5 y1 ^0 k: G
  152. }: W/ J! m! R6 o* D% u* A- ^

  153. % O* y' a& Y/ n' |8 m
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)/ ^) H4 A9 W7 @) V: [7 J" N
  155. {
    7 M( w7 Q1 k# K- T) z, k/ B5 A3 w
  156.   DWORD attrib=GetFileAttributes(Target);
    4 ]; ]% _: c9 h" [" _8 p4 y. I' _
  157.   if(attrib!=-1)1 }/ t# t( v- d7 B/ i9 d
  158.   {. q+ H! L+ X( R# e: a
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ) b4 v! p1 O. b0 d
  160.     {
    / L4 o3 r" |" g% j& j
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : b+ B; u9 e. l" Y! w& e8 a
  162.       SetFileAttributes(Target,attrib);
    1 l# o' d8 _8 S4 R
  163.     }4 G7 [2 i  q/ F
  164.   }
    1 u- ~  i( l7 K' k1 h
  165.   CopyFile(Source,Target,Erase);$ z' p0 v5 `3 i7 A+ u% ~. C
  166. }: W7 \  H4 Q# l& O; u& N0 L* g( H
  167. * M8 j& y9 W, V# F
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ; ]+ I5 ?: J# e- F8 T# _
  169. {
    & P1 D6 R+ A, Q. N" d! |6 M+ Q
  170.      FILE *fp;
    7 ?; R3 ]) R3 i* E# {
  171.      char  szBuffer[8192];
    0 M$ S+ s) d' z  H2 |+ c5 Y& `
  172.   va_list  argptr;8 u/ C" P. M. g8 C& ^3 ]8 S
  173. & F6 a, n, u* G' b, j/ d& C! e+ O+ h
  174.         va_start(argptr,message);
    4 k2 [" O" j9 A1 v6 P
  175.         vsprintf(szBuffer,message,argptr);
    ; f1 Y" b$ I# O- A
  176.         va_end(argptr);
    % v" ]& p5 y  @. X
  177.   fp=fopen(FileName,"a");
    & O, d# R+ T% s1 c. p1 ?* v2 Q
  178.   if(fp)5 _$ \5 S4 h' S' A
  179.   {) v  a+ `  B9 d* L& Y  J
  180.     fprintf(fp,szBuffer);
    5 s. l: l, b! x7 m
  181.     fclose(fp);
    $ d% z7 h2 J! J8 T2 O1 K
  182.           _flushall();/ B( w& |. j6 X  H5 N+ g. E
  183.   }
    " ^6 w; N9 o2 Q$ F
  184. }
    9 Q2 F0 D6 [% ~1 ^
  185. ( b! a/ L9 ^% L( G" m6 h
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    8 |2 y! S6 C( V+ A" e9 n
  187. {
    8 {+ Z1 \4 x; l/ F+ ]2 _/ Q$ n( q
  188.      FILE *fp;$ p" T1 A8 S( A
  189.     DWORD  attrib;
    # K4 W& U* B+ v  N, }
  190.   attrib=GetFileAttributes(FileName);
    # ^- V  ~2 Z3 v
  191.   if(attrib!=-1)
    $ \+ \2 a' Z) j2 a: K
  192.   {
    ) x8 j9 t* b& Y8 O: m( e5 p
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 ]3 J# |2 P/ S
  194.     if(!SetFileAttributes(FileName,attrib))
    , ?$ c) _6 |) j- W: ~
  195.     {
    ( V6 M) w1 p6 H* [' \
  196.       return FALSE;
    0 V1 Z  y7 }( m. M1 K4 ^
  197.     }
    ; t+ E5 K0 ], f. W  R1 \0 @2 X
  198.   }! l: g/ A" n/ u0 {$ z- M! _9 S
  199.   fp=fopen(FileName,"wb");
    ! {% Y! y. k/ w5 i+ z% }
  200.   if(fp)
    1 n( B( A- [5 M) F0 D
  201.   {' O) D; n% w3 A
  202.     fclose(fp);" b& Z7 Q" ]$ t  W+ U  g
  203.   }7 G0 q# T; }2 ]6 N
  204.   return TRUE;: P! L7 U% ?% R% u
  205. }2 ?# W1 n; l& i
  206. ! R: K$ O/ o8 ?, m; m
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    , E# a3 O; V. ^% u
  208. {
    : m- U+ Z' x  l2 a: }& V8 _3 C- M
  209.   char filename[MAX_PATH];
    + W6 E7 @) [2 _; V2 Q
  210.   LPUPDATEFILE file,olds;
    , z  G) s) Y: ?, x
  211.   std::map<int,CString>::iterator i;. h; I2 {  e' j4 ~" p+ C$ T& k' F
  212.   std::map<CString,LPUPDATEFILE>::iterator p;3 I2 ^' ?6 n2 @8 B
  213.   std::list<CString>::iterator l;9 _. L% Y/ I1 O, M
  214. " U% l& \) g0 J8 G
  215.   if(bFirstUpdate)5 K6 d  e# M0 @: ~5 X
  216.   {) o! L( G* H2 S. [# ^
  217.     dwCurrFile=0;6 Z" B. C, _1 H+ S* p8 V& v9 M
  218.     bFirstUpdate=FALSE;
    1 p9 ^7 y' w$ y3 ^- K7 f! S
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : N4 s3 }3 W/ O, n) ]
  220.     {
    " @! p. K- U& L+ [: T) A
  221.       dwTotalFiles=UpdateLocal.size();  d. t/ r) V) k# K4 I' P: X
  222.       dwDownLoaded=0;1 c; L; a5 y- y0 T' `+ X( I1 j
  223.       bSilentStep=FALSE;
    ' y. n* H3 D. l
  224.       bCompressed=TRUE;9 B0 w0 S' ^& L  B8 q( o- }
  225.       strExtLocal.Empty();
    0 g4 Y+ t1 T7 R$ ]5 |' N
  226.       strFullName=(*i).second;. }0 z  K0 n9 |, y
  227.       dwProgramState=AP_CONNECT;( |( w3 S+ r( y( h6 ~9 [2 P: x7 q
  228.       return TRUE;* g3 u, f2 \' Z
  229.     }
    : H. _. E  _  }  t5 S0 S. ^
  230.   }6 s9 \. }. V* j2 k
  231.   else if(bRestartUpdater==FALSE)
      U6 a/ c8 R  Q6 o6 B
  232.   {
    8 f1 u2 D$ M+ w
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    , w, s6 ?( L+ x1 Y7 m
  234.     {( a5 U) u5 G+ }$ ?
  235.       file=(*p).second;; F3 H) ]  E* @: S, p8 p* k. \
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()). k- |0 p, H9 H7 g: A1 y
  237.       {
    1 D) E# m8 Q: s. B0 j+ f2 q
  238.         olds=(*p).second;" E- Y& J4 H- z$ b3 a
  239.         olds->vers=file->vers;
      L% L1 @- V5 Q* m* N+ N- `  R8 n, n
  240.       }% s3 r0 S* r& S- o" E' |1 s8 |
  241.       else& W5 A* ]+ W  A1 c
  242.       {
    % p( a0 v2 l8 o% J
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : y2 c% N3 Q6 |2 ~
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    % }; V7 d* h& \. P
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 |2 m; b# }; u$ |
  246.       }9 K3 a# `" y$ @- G8 }# A
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    # z6 d) P' H& I. s7 T1 j4 m
  248.       sprintf(filename,"(%s)",file->file);# b+ ^1 K/ e+ G& {( Q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 c" j7 J3 i' r7 |$ y2 {0 m
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }$ N/ c, z) ?, N( _" |+ O
  251.     }
    6 t+ l" J) ]0 H6 a# Z$ t) ~
  252.     dwCurrFile++;
    0 B& m/ f! u  s3 a/ Q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), W5 \& H5 ~9 x3 ^  l( L
  254.     {0 X2 {8 s5 W$ ^/ U
  255.       bSilentStep=FALSE;
    ' w' D/ D3 L2 S  M4 Z
  256.       bCompressed=TRUE;
    / h4 l! M1 D0 D+ m
  257.       strExtLocal.Empty();2 W. Z, K. e/ g! S2 r
  258.       strFullName=(*i).second;
    - Y6 ~8 x  q4 S5 Q1 i' l
  259.       dwProgramState=AP_CONNECT;
    " H' ~5 h6 {& A8 H
  260.       return TRUE;
    7 e) f! U6 I9 g4 u- B! i! W
  261.     }* Z  M$ g. @) B$ K+ h7 U
  262.     if(!bRestartUpdater)
    4 _0 I( L# [; E/ J
  263.     {
    + T& T- V/ m  x& d1 Q) J7 K! l# G) k
  264.       int iCurrSize,iFileSize;
    * i& h* L, I/ Y9 b
  265.       iCurrSize=0;
    " g1 G1 x& D) e, g( M9 p/ b
  266.       iFileSize=UpdateList2.size();+ e( y5 p+ o' O, W# K1 J/ i$ E
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");, r" J; v1 X4 v* ?8 d/ v
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ( K( Z/ {! o: a8 g" d- j
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");: s6 h7 |: q% Q0 T; r" T: A
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      N! K4 w2 i  L- U
  271.       Fclearf(".\\update.dat");0 w3 n& @5 X- U; ]3 j4 J& X3 W
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    0 U0 M: K4 }  y; v8 {+ s+ L" o
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    : k$ G' T& {$ l* |6 u
  274.       {4 i7 r. H  \; D4 j2 ]$ |. b2 I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    3 _% C5 H3 }/ v/ v: x
  276.         {7 |; J$ k# V' o/ @2 B" x$ {; {
  277.           file=(*p).second;
    4 L5 f9 k0 K+ Y
  278.           sprintf(filename,"(%s)",file->file);
    . H' h: d& T6 b; C+ d1 u) z& N2 T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , W) t0 X: _8 t% V$ }8 G, A2 b
  280.           iCurrSize++;
    - Z) X( U+ R. [1 x4 M  K! L5 t1 k1 W
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % o$ L# k1 k* c% m  b- U
  282.         }
    ( _4 S0 G4 _/ e
  283.       }# W7 I; x# O8 U) u
  284.       unlink(".\\update.txt");& m' u* _6 f' Z+ ^/ L! C5 t; z9 u
  285.       unlink(".\\update.tmp");( ^+ Q. v2 l, [/ O$ h
  286.       Fclearf(".\\checkversion.dat");6 B3 Z7 P( q+ c2 ?
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    7 |- N0 i1 L+ |; }* I( K5 S
  288.       if(UpdateLocal.size())5 I/ ~* j0 c6 S. C: g" Q
  289.       {/ q7 y+ U8 H$ f: P* w
  290.         UpdateLocal.clear();7 t/ u$ U" {* y1 d' M1 G
  291.       }
    8 w  k6 y5 n: y
  292.       if(UpdateFile3.size())
    . J, _) r# u( `
  293.       {
    4 b% Y. ?. r. z3 x9 s* b
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 L$ N3 p6 q: W9 u
  295.         {
    * }3 {' I' O& Y" V8 U" R' v
  296.           file=(*p).second;, y$ W# @: r( i% G4 n
  297.           free(file);
    : G% h7 W* {& C, s( r3 E
  298.         }2 g7 U4 L) i' e% t
  299.         UpdateFile3.clear();
    : x- m2 h. ~, m) H
  300.         UpdateList3.clear();
    ; _% g) k! S' `2 P6 t  g
  301.       }
    : j( H* \1 y) U0 P' A
  302.       if(UpdateFile2.size())
    1 J& q6 x, I6 d/ l
  303.       {
    ) |; G/ z8 x/ _  G. Y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); r& M& w9 k! B1 q% K! h$ b+ T/ q
  305.         {) _/ O& K1 n6 U* N9 p
  306.           file=(*p).second;
      ?4 ^; ?9 t5 a2 `. ?
  307.           free(file);
    0 I* w) I. R2 c. q/ Q' W5 O4 {$ U
  308.         }$ s% a2 q8 U  o! C
  309.         UpdateFile2.clear();
    - N7 t9 y' n" E$ d1 a. O3 d1 L
  310.         UpdateList2.clear();
    ! K3 O$ X# X/ O8 m  v- _. o
  311.       }
    2 ~% C) x* L9 K; K9 ]+ u5 ]1 r
  312.       if(UpdateFile1.size())$ _5 L. e5 d4 S% F% |/ a  D
  313.       {
    * |( {8 d  `7 ^6 Z; Z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 \# |& b% x1 R8 Z' \% ^' r
  315.         {
    " u4 T# k. \# R! P  y
  316.           file=(*p).second;
    ( a$ `& ~! f3 F& t) ]" @
  317.           free(file);
    5 T4 l: X+ C( A) C
  318.         }
      t* }" S$ ^: l9 f
  319.         UpdateFile1.clear();
    $ A0 _5 B( A+ F
  320.         UpdateList1.clear();
    " |2 L9 E) R9 _( D
  321.       }
    * V  h' X  U6 I1 V
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    / _  g8 U7 d" T' N
  323.     }
    . Q/ K2 c5 U. ?) s( \3 d
  324.   }& Q7 g3 A2 d. C/ K6 W5 B
  325.   return FALSE;  ^8 t# \  L, M: @2 ?7 H
  326. }  b  w3 t% i- _6 p% m

  327. ' c# D5 h# @& c( x6 k
  328. void CRevAppApp::ClearAll(void)$ g8 l9 @% ^5 m2 m1 N7 I
  329. {
    / W+ |  {. d8 @# A2 B; R1 V
  330.   LPUPDATEFILE file;
    9 L% P6 j. F3 T# |- F
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    : F; a+ @% G5 J5 D& k. e

  332. 7 {5 t  e- \$ V" x
  333.   if(UpdateLocal.size())1 p3 `5 ~; M( _: Z4 e0 u5 O
  334.   {
    4 h' p3 F" |# K+ x; R, G; g
  335.     UpdateLocal.clear();* @! h9 g2 M& Y- I" _9 K
  336.   }
    ; g) O- j8 N% o. g! S. E
  337.   if(UpdateFile3.size())- Y5 ?* A5 X; o, Y% i8 s1 }  ~. n
  338.   {
    2 m: I3 Q' w$ m& O; o" S
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 H: v4 l- l6 {; G4 H+ D! m) I
  340.     {# i! j/ e/ U5 _
  341.       file=(*p).second;
    + \7 f3 ~- `0 w. b4 z' \9 X
  342.       free(file);; l9 h. A& H, J) ?7 G2 b
  343.     }- m1 O# G$ e3 ^9 D* a$ H
  344.     UpdateFile3.clear();+ a( V0 V0 D. \
  345.     UpdateList3.clear();, K3 ]9 f& M' n2 K6 C
  346.   }/ v$ `+ G  _* s- ?" t& p% ~
  347.   if(UpdateFile2.size())
    ' e* Z4 V) I3 I, V
  348.   {% l5 s' r' Z9 s; U2 H: z7 f
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - v( D7 t! [$ T' G  E
  350.     {
    , P1 \9 M9 T, ~+ ?- h9 n
  351.       file=(*p).second;
    , o9 g+ N0 i! z* r3 N/ H; w' \5 B) _
  352.       free(file);$ C3 w( S% |0 |: t0 s  U) ?# ]0 X5 i' k
  353.     }% y! A3 Y$ j: @# X
  354.     UpdateFile2.clear();
    8 {  B. k4 [) q3 E0 s* i, H7 j& v  \" U
  355.     UpdateList2.clear();
    7 }; R. c: ~0 \8 v
  356.   }! a* {2 @6 N/ j
  357.   if(UpdateFile1.size())4 \7 J! s, P. n: E6 Y
  358.   {
    4 U( U# a+ z  L9 Q; G) y: L/ H7 p
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    % E3 I/ I8 |- q( ~3 d, f
  360.     {
    : @" A# u* c9 `4 R  F; |& W
  361.       file=(*p).second;
    ) M$ C% v) m8 p2 F# Y: r' d
  362.       free(file);# m- R! {$ v6 {' U8 p  A# D
  363.     }! _/ _& Q0 K& C0 E% h
  364.     UpdateFile1.clear();" s) h8 z- y5 e) H
  365.     UpdateList1.clear();
    " w! R9 E; K7 q
  366.   }- M! Y, I7 O. y. k4 E
  367. }  ! V( D4 l/ @$ q3 G0 F" K3 }% p' e5 @8 h% n
  368.   ; S, j# O4 q7 b4 P7 e
  369. BOOL CRevAppApp::CheckLocalVersion(void)) Y8 [1 G4 Z% K  q4 P! R
  370. {
    ; Q4 x0 k% ~0 H9 [& H
  371.   int c;; K9 x$ n# ]* n$ ^8 o3 J8 Y
  372.   LPUPDATEFILE file1,file2;
    % |9 P( h! h7 x1 D
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    8 x5 U5 [5 h7 C" _& T, G
  374.   std::list<CString>::iterator l;: B9 w( l0 b: C: S, c- o

  375. ! p* T; F: c8 R( p
  376.   UpdateLocal.clear();& y9 G: a/ [# ?: U
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    7 E# E9 r; U8 a2 Z1 U
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ T# g8 `6 h$ t: @0 N# {5 O, ~
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + u+ n) Z- O* G, r
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);/ L. F) s, S0 k
  381.   if(UpdateFile3.size())
    . {  X! ]0 M5 K, s
  382.   {5 X' ]5 C! Q; I. y' Y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)# G% l; s, R: _- `& `
  384.     {
    6 \6 r7 `% x: S  O
  385.       file2=(LPUPDATEFILE)(*i).second;4 W1 Y5 ^' J1 y( O9 f
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 x& K3 `3 v3 g( u( n1 g7 I
  387.       {
    - n0 @  R3 q: I( U# g) f8 P' ?
  388.         file1=(LPUPDATEFILE)(*p).second;
    . m+ }( t! i% |; O
  389.         file1->vers=file2->vers;
    7 w+ V; }, u7 f& r! q8 ]
  390.       }: W- j5 D# }) d3 J
  391.       else. G+ Z, c- i: o
  392.       {
    , O$ b3 E, k. r" @
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! i% B8 Q6 ?% |1 S5 ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    , R# q1 I# U& `  O, C; _7 c- w9 j
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
      i; C3 |; B! |
  396.       }
    ' Y1 R$ N+ c) t) D. R4 \
  397.     }; T3 c: K+ x6 C1 J0 N
  398.   }
    ( f# H8 x- c) ]" b4 W7 p, h
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 }) }4 Y- d- b
  400.   {
    + j- f! d& A4 \; _
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    0 l0 O! w" `/ a1 h+ L
  402.     {$ t# g( v( a/ T3 i- v7 \' Z
  403.       file2=(LPUPDATEFILE)(*i).second;5 v# l2 t( E7 c( R( A* s
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* L3 W1 \- C7 _' P0 n) z0 ^
  405.       {
    & K9 p) D3 \: l, W- l0 x* g) w
  406.         file1=(LPUPDATEFILE)(*p).second;
    0 [$ O- `% V, R7 A( {
  407.         if(file1->vers!=file2->vers)) W% ~% a0 p! p, w2 S
  408.         {* E. I9 y6 c& A" o
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, l  K$ o5 y; s7 v
  410.           c++;
    5 O8 P3 d" W1 T# ^+ z7 S$ o
  411.         }
    # a. t( T$ {+ B. k; n
  412.       }5 m: C( l% b+ L! |# q# Y% G
  413.       else4 t8 X5 I/ U- R$ P' T5 H
  414.       {
    7 A& v8 ~0 ]3 L
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' u# \+ J" K  {' P2 P- ~0 I
  416.         c++;& i: |2 f9 B0 h1 S
  417.       }
    + P5 |- k' C4 Q0 `& A' a
  418.     }1 I" D2 j+ w, ~- P( Q( `
  419.   }
      o3 w/ F. b, `6 H% _
  420.   unlink(".\\DownLoad\\update.txt");3 W2 s6 E0 ~8 W9 ]4 h9 y
  421.   if(UpdateLocal.size()) return TRUE;. A4 q# a8 c' s1 V  b
  422.   else                   return FALSE;
    ! q/ O# s" V! a
  423. }/ V% d, k! D* z  M5 _* Y4 g
  424. ) v" m8 n8 Z! ?% G1 s$ c
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/") S- T) @4 Q# r  S+ E" {% U" m
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"8 I) E, T2 R7 N$ f9 s
  427.   r; M  P1 d$ Q* C( q+ q$ Q2 o7 u
  428. 1 C7 l- t2 }+ {" E2 U7 Z" {

  429. ( S6 c7 \8 g- q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    3 V* j- }9 Z, }0 E7 W9 z
  431. {: s; K7 g: ?5 x& {& k
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;5 X3 e" N8 V/ ~! N& i8 S
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 ?' r( F) v" S% L
  434.   {( j0 `3 I% d1 j# S
  435.     char szLanguage[50];8 H/ V% n+ P' J/ u
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, U+ U8 O, ?- |: U2 K6 T: W
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, C  C1 a! w% w( L( m
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    9 T, B; d' g/ a* G& M: T
  439.     else                                   m_iLanguage=ENGLISH;
    1 Q, ^: `% x' U4 z
  440.     char szRegister[100];2 E9 L4 }8 n+ J4 c6 H
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    0 ?8 ]5 r2 G& x, P/ ~9 |- r
  442.     strRegsName=szRegister;1 M+ A3 Z5 }# @, N+ E$ a
  443.     char szPatchURL[100];  Y0 F$ t9 @# ?: V& {9 T* d! ?
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ F# V; k! h0 Q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & R7 H+ z1 ^5 Y3 [
  446.   }( G7 }& M1 N# c4 ^+ q
  447.   else& {9 r; \" c# p9 [! Y. m6 M- |' @( I
  448.   {
    0 S) Y1 @. c! q
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ W5 [2 M7 \9 y7 o. j1 v( |
  450.     strRegsName=DEFAULT_REG_URL;3 P# }' }5 P" `% G% ~; K  i/ }
  451.   }1 B0 T1 {& `9 g) c* k5 l
  452.   if(GetFileAttributes("hosts.ini")!=-1)- R& A- |9 q) w5 v% L$ f. T
  453.   {
    # N; o2 t9 C, C" ~4 D/ M' p# e/ p/ z
  454.     char szIP[50];0 V+ B) V# [& J4 u& n
  455.     char szDIR[300];) S/ G0 y, i$ d3 S4 ?; l2 I  E
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))) ?2 P$ f5 Z$ w( T4 \0 S
  457.     {# W: J" |; `" {( h
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ( a4 v, Y3 }$ v9 V! d# G6 X/ M6 R
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# n7 J9 }; R: g0 ^+ d
  460.       strHostName=szIP;* b4 z8 [  r$ E3 _! ~. ?
  461.       strHostPath.Format("/%s",szDIR);4 E' _3 |: q6 P" O( g& B3 L
  462.     }/ `" P# d6 n% _, m& T5 s" U
  463.     else9 e/ Y% x+ n8 R. L
  464.     {  m; U8 [* n% x! m
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " O/ d3 ~4 G5 P+ U& i% Q8 f" [
  466.       {: K# B, _0 a* e8 E* f8 H# b
  467.         char szLanguage[50];# O  M" o) W0 S8 B% @2 g- K0 U+ c
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 \3 l3 b5 z. j6 T
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 W. w- z! [' C, V  l& k3 v
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - x6 {% J$ x1 O: ~
  471.         else                                   m_iLanguage=ENGLISH;
    " M+ u- g& c+ [1 Y
  472.         char szRegister[100];2 n2 J& T. f( i; e& m
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & ]; \) H0 X$ f8 z! ~
  474.         strRegsName=szRegister;
    8 d. U& \! }, D. [% _4 z% h& y
  475.         char szPatchURL[100];
    8 ~* L( Q4 q4 T4 N5 D- w- J6 {
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; {+ t6 M: d1 ^
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 I, C( f) N" [/ b7 `. l
  478.       }
    : F. _% S' r  X. J
  479.       else
    9 }# M$ w& i" D1 ?  B
  480.       {8 @9 s% ^5 x# Y6 H5 K
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; R7 ^2 ?# Z0 e4 j) r: s
  482.         strRegsName=DEFAULT_REG_URL;
    0 F. D4 a) u8 Q" S
  483.       }
    + i4 r5 I! K5 x8 p+ s7 O
  484.     }
    3 }) ^* o: J% q( c/ {
  485.   }& d( i4 T6 ]' k+ J! W
  486.   return true;
    9 d/ p/ j/ C" z1 T# r+ x
  487. }% X4 \( l% U& f* y. N' B0 [9 C' E
  488. ) \# V' P" F" Y
  489. #include ".\ZLib\unzip.h"
    " }  x4 L; X) G9 }3 U1 q8 c5 }
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);& F3 G% u8 r: \9 S
  491. /////////////////////////////////////////////////////////////////////////////
    ! Z9 M/ c* @: r
  492. // CRevAppApp initialization1 N, c! ]) p; O3 J$ q

  493. & y* M9 u' f9 A/ C: X3 ~
  494. BOOL CRevAppApp::InitInstance()4 y# {& N  l& Y+ `3 z+ j8 [: V
  495. {
    " o' A$ K# C4 E# ~6 q4 Q" n3 ]
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    4 \; ?0 l6 D5 s3 N( n# v( U+ o

  497. 8 b* m% C$ z! R5 }7 g5 n! d
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
      z" [' P7 B. o/ K: N2 p5 _
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    : `* p& e: H" ~  a, v
  500.   {
    % z& F; k, F% L; Y, }
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    / Y7 M: b! N( N- Y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);. o6 I  Z; D: b' y7 D3 z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    / E$ D% o, K1 P
  504.     {" K8 M, A- Q/ M- W& r
  505.       strcpy(szPath,szPathTarget);
    : L5 G+ [# m( u8 g" D1 P5 S
  506.       SetCurrentDirectory(szPath);6 i+ I' p. F1 w& j9 l5 q6 j
  507.     }
    ' T) B0 g. ]9 v5 G( q  V
  508.   }. n4 c/ T3 B: N  V* j2 l9 I7 R. k
  509. #ifdef _DEBUG
    ( K: E' K$ w9 ~; N$ F. ~% n# F
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # L& M* W/ E" e7 G( B" Q2 P. K: c- C
  511. #else
    7 S& v9 h* |; x! v% x+ D
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  y0 i& t$ Z. D3 r" x
  513. #endif
    8 c% N% J7 q. I' ^# X/ x
  514.   {4 ]! G; O7 A  P6 N2 G  Z4 a
  515.     char tempFileName[MAX_PATH];; M, ?1 n, e) C  H/ G: a# I- Y
  516.     strcpy(tempFileName,szPathSource);
    ; Q$ S) v  C' T" Q: Z% g+ _
  517.     tempFileName[strlen(szPathSource)-12]=0;
    , V, U: N' @  |) X/ P4 z( b3 R
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    " c  \* b$ G+ f# G, P1 ^
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);4 R7 @- `7 B! ~, b
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ; {' |3 o; R1 O5 _, X
  521.     return TRUE;
    3 V0 m& g5 N6 R0 Y6 b
  522.   }) \7 K1 r% u, y. ?
  523.   // Nuke 0118: Delete run.exe" W8 ~- d' S( ~) Y4 X) H
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );" B  a' D9 Z9 q
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");( o! @5 \( t0 W+ L/ T. ?
  526.   if(!ReadCfgFile("Config.ini"))3 D3 @3 p' O4 X( `3 K
  527.   {
    8 M: }; Q' ]- a3 ~+ E
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    " r* U2 D$ b& h7 ^
  529.     return TRUE;0 p& V9 p+ V) H; F
  530.   }
    $ I; B. r0 x  l0 _6 t
  531.   HANDLE mutex;
    ) O9 @2 `% P6 ~' Q# L3 k* E. ?2 @& C
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))- I. ?/ m( `" @
  533.   {1 r8 D6 F- s/ k) J( F0 C0 e, _3 g- ?  a
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    / N+ a7 K1 Z6 Q
  535.     {, q4 J( Q' f9 r( ?9 g+ i  G% _. u. Z$ I
  536.       CloseHandle(mutex);
    , f- v  D0 k" ^+ \
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    8 \( F/ m0 U8 b! [1 V5 o
  538.       return TRUE;1 a% G' h, _! k. V
  539.     }
    7 E* b3 P" v! l+ F6 P
  540.   }  ( N! _* f* {% a$ u  D5 L, x
  541.   CloseHandle(mutex);: U' |7 h$ D, U* S  z+ ^2 c. w
  542. ( G& j3 V" F2 A5 ^; B3 u1 ^/ u2 X
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);. J8 \% e/ e( N; j

  544. ( R4 k$ {: R* m# @, G- k0 a  P" q9 L
  545.         AfxEnableControlContainer();
    / b9 ^5 ]; C  B# y" i1 @. h' W
  546. ) I& J1 e6 U) d; K2 d* N/ @; S
  547.   bCanUpdate=FALSE;
    8 }4 L4 A7 |0 O
  548.   dwStartUpSteps=1;
    " }1 I: B0 H6 y+ `: Q
  549.   dwProgramState=AP_NOTHING;
    : Y; W/ t/ Q; Y) K
  550. ) U2 b3 Y- w8 i+ Z4 q9 j3 V9 I
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);% ^# A! q8 z+ S

  552. * ]: t% Z) l* p5 K8 s5 g
  553.         // Standard initialization
    2 o6 a1 j4 ^/ {! F
  554.         // If you are not using these features and wish to reduce the size
    3 d4 K6 a% ]! k" [. }: c7 F
  555.         //  of your final executable, you should remove from the following( @0 c1 u* u9 f% b9 I
  556.         //  the specific initialization routines you do not need., T# X# `7 J  N, W4 ?

  557. 3 e" G3 {% o' Z
  558. #ifdef _AFXDLL
    $ K( s* n# }9 _
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL+ F( l5 G% s- E- R6 {7 E
  560. #else
    1 R2 k$ }: u9 P
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically: X) \3 I0 q9 r$ d
  562. #endif
    # h& y9 {1 m, @8 y

  563. 0 V3 }% q6 i6 h) F6 _7 S
  564.   dlg=new CRevAppDlg;' Y* n- O; S) s- w" [
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    9 q1 `; [" ^% V4 x) M. K2 F* o7 Q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);' u, j+ n1 {- e
  567.   m_pMainWnd=dlg;
    4 F) e0 a1 p' S& ?
  568. # R. P, o! N$ t2 q6 _: Y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    " e, ]4 _3 S# `
  570. 8 Q! X1 \" Y7 v: V; g7 k4 c+ w
  571. //  GdiplusStartupInput gdiplusStartupInput;" [; z& _8 s* x  M. r
  572. //  ULONG_PTR gdiplusToken;
    2 j" f; q7 }- z$ r
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    - R) R2 ]& M/ z( f( g" D, M/ g" N  c

  574. $ M4 O' [, [6 q" x6 L, n
  575. //        CRevAppDlg dlg;$ s* y' ?* R+ g
  576. //        int nResponse = dlg.DoModal();6 a8 V" }- T/ m2 y
  577. //        if (nResponse == IDOK)
    * B. r3 {9 }) S/ V6 q# M4 R4 f% m0 @
  578. //        {" b. i3 ^$ s; z; Q
  579. //                // TODO: Place code here to handle when the dialog is
    * [/ y0 e, k' m+ }. p
  580. //                //  dismissed with OK
    1 I; [* C; S0 c; t  z% S* ?- J
  581. //        }
    : W1 |0 v& i4 p9 P9 L0 Q
  582. //        else if (nResponse == IDCANCEL)
    & A1 i* l7 d1 b1 \5 M
  583. //        {
    $ F: c; P% ]/ O
  584. //                // TODO: Place code here to handle when the dialog is
    - l$ `) |0 j8 {1 g$ h7 Z% J
  585. //                //  dismissed with Cancel
    ! W; C9 b; Z6 t8 v
  586. //        }
    & b" o" [9 X+ F, _/ m9 r

  587. + y0 x% Z5 l' v. r3 J
  588.         // Since the dialog has been closed, return FALSE so that we exit the, m" w6 p  h  d* q1 T& m# }
  589.         //  application, rather than start the application's message pump.. m: x$ {( f( i2 H) R
  590.         return TRUE;& E5 L, o% Q- H: A  D
  591. }; p% K' Y% p0 y9 Q* u! n

  592.   W8 r/ e( y, |  J/ q1 r9 ~" X4 e
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 m0 y* \# O4 e! X) V+ C
  594. {+ m) o( V! ~7 A: S. g4 r  q
  595.   int i;' }1 E$ E  B/ O* ?
  596.   char *szRet;7 L+ ]" a& s" a- T: Z2 d; ~3 J
  597. - D" N  V1 M1 z: f$ [
  598.   if(pSource) { itoken=0; sztoken=pSource; }# ?5 ~" }9 \2 U+ T" F
  599.   if(sztoken)
    2 J- `# Y, P8 o$ p) A  Y' e/ r$ B
  600.   {
    ! ~1 e: }( |3 y5 G( ]1 k# P
  601.     szRet=&sztoken[itoken];9 d; L# T4 c) E9 H  j% j
  602.     while(sztoken[itoken])  v# {! [' t  q- g8 e# e
  603.     {* L# t8 B( D' u. Z$ R0 S
  604.       for(i=0;i<(int)strlen(token);i++)
    ) L8 x) u5 g* C: |/ p# m
  605.       {; m& Y1 |/ M' E& I$ @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])5 H7 ~. Q. \9 U9 q! _: r: p
  607.         {
    % C; _6 ^" n- q' m) M" F8 ]# h" K
  608.           sztoken[itoken++]=0;
    - b  J; P- H+ N
  609.           sztoken[itoken++]=0;" z" m+ k& |0 {: S# G2 @
  610.           return szRet;
    $ e' X, f; y0 Z1 b- }: A
  611.         }
    " B8 a8 n4 {. b# b. M
  612.       }7 ?4 E; j$ z0 a
  613.       itoken++;
    , T9 E7 B, O& d  b& K* g6 |
  614.     }4 ]* Y& r' \# w. E: b
  615.   }
    : z/ m, ~8 s) n  d/ Q+ ^6 O
  616.   return NULL;
    / v( D2 H  B" i. F/ V7 t" v' c
  617. }: P! f6 d2 G0 D9 U

  618. - o0 E; V) i; y' E+ e( Z& H* ~
  619. void ProcessProc(long Total,long Current)
    9 N0 y2 q. o: @! I' X- ]$ l8 ?9 h
  620. {
    9 i. X  _/ x: R7 u+ p. M) U
  621.         MSG msg;# l5 Z0 G5 R. F$ ~2 O+ K; W
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    . a7 S) O: z/ V0 N
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    , a4 k% \! @5 W% z
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    : Y) D4 o0 L. t3 Z) M
  625.         {, }; P7 w3 m' X0 [  @
  626.                 if(!GetMessage(&msg,NULL,0,0))! u% X6 Q$ A) y$ e
  627.                 {
    0 M- w2 C" h( K( n& N
  628.                         return;
    ( Y% _2 A9 X/ j9 L$ C7 Z" @
  629.                 }( v- b' g5 D& L4 D
  630.                 TranslateMessage(&msg);. V+ h7 D) I, L+ Z# D$ Y+ B
  631.                 DispatchMessage(&msg);
    + u& K3 D  {% g) ?) m7 [
  632.         }       
    . K( C: o: T% g1 C& ?
  633. }
    * A% @4 e, O' n8 X) v8 f
  634. ! i' B2 q- ^, P0 ?  j) }- ?, M
  635. BOOL bFirstChar=TRUE;
      s. v$ ]8 R- T# i4 r
  636. ( O' g8 _$ B  I8 `4 o; E
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    , O+ Z! V/ E% f2 ]8 e' r
  638. {* g  |3 U1 p: v/ e* y1 B, [2 R+ W" m
  639.         // TODO: Add your specialized code here and/or call the base class6 ]0 t. O6 [$ y2 K1 H
  640.   switch(dwProgramState)3 V* O: L, s! ]
  641.   {
    2 }9 K/ W$ P7 \1 W
  642.   case AP_NOTHING:5 j0 Z3 n* c# k8 N7 e! N( [4 B$ Z- I
  643.     switch(dwStartUpSteps)+ P* [* c2 u! K. d
  644.     {
    + c( G& R8 S* i
  645.     case 1:
    & O6 s! {2 l! V; ^# B* N
  646.       {7 I  _) S6 c6 A3 d: j$ X3 n, e: u4 b
  647.         int i;
    6 h) |' C, v5 u7 n( W
  648.         CDC *pCDC=dlg->GetDC();. Z: J: d9 S, y! E6 I
  649.         HDC hdcwnd=pCDC->m_hDC;2 l; `$ Y' k$ X' t. H) M
  650. //        Graphics graphics(hdcwnd);8 c! L6 h0 d# |
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    / m! m2 W+ L. [! q  |+ c" |/ U# L3 k
  652. //        INT iWidth=bitmap.GetWidth();( b# n  \% ?; s
  653. //        INT iHeight=bitmap.GetHeight();9 T2 P* m, Q, Q: p) \
  654. //        Color color,colorTemp;
    $ @. H$ Y: Z$ C% H# ~$ B' f& ?# r' r9 @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)8 Q+ e9 ?$ q: r2 x$ p
  656. //        {) T0 N- T; B' W% L
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)8 {$ u. C- W3 B0 M' J# |- S' \
  658. //          {
    : w$ q# }4 U: [- A; V0 r
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; m8 `3 ~3 y: K8 c  L$ O4 f2 H
  660. //            colorTemp.SetValue(color.MakeARGB(
    3 E! c2 q3 c! s" X, @
  661. //              (BYTE)(255*iColumn/iWidth),8 r, @. |: ^8 Q5 H  @9 @: `
  662. //              color.GetRed(),# a& ^( k. m3 i# w4 Q+ D* o
  663. //              color.GetGreen(),
    4 |0 K6 E9 V  n  \! H
  664. //              color.GetBlue()));5 ^0 M1 F( |4 D
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);) [% t% Q2 A# q7 Q6 c$ Y( e3 @9 s
  666. //          }
    * M! x% J4 `% e0 \* k% T, x' o- f
  667. //        }& D7 C7 b+ ?% E! \- p. w! q
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);: G+ G$ |( F( u# {! P  {- k
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" d$ G4 _+ d7 B; B
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    1 D9 ]) q% j( O; m3 \1 B" |0 }
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' S7 V7 Z2 A  ^8 ^: L# K
  672.         for(i=0;i<240;i+=8)
    7 m0 l% s$ s) B3 U- S# o
  673.         {5 |9 m# e) i8 o7 D
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* c0 z' p  ^5 ?; S+ d% d2 B
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 I/ f* F9 h. S- q6 E" `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- p$ x! o9 w$ u% s1 S% U
  677.           Sleep(33);5 V& ]. ?4 v6 c* o" F( M& W
  678.         }" {8 R, }& t$ ]
  679.         Sleep(1000);, e6 \( n+ E+ O0 D$ q( j( J" t
  680.         for(i=240;i>0;i-=8)
    & t$ [+ g. w# v
  681.         {% z( l! |$ g# d6 B+ q  c
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 |0 p0 [5 y( j6 l$ I
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 P( I1 T& o# g6 ~
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # X$ y& x3 G' y) Y5 U8 g. ]
  685.           Sleep(33);
    2 K2 A% ]1 F4 T* b+ v) r
  686.         }
    ) {6 V" |$ [$ k  _; _
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    9 N* F: q+ F$ ~
  688.         dlg->ReleaseDC(pCDC);
    $ b- N' n$ F  x. S0 B
  689.         DeleteDC(hdctar);
    , k2 W& _, N( p. `& w  u8 c- c+ @
  690.         DeleteDC(hdcsrc);8 x6 J! X( h; Y: N$ @0 P) _" @" b
  691.         DeleteDC(hdcorg);
    : |9 n7 ]8 t* L8 r
  692.       }8 y" X1 `( t9 S5 W  [5 N3 m- ~7 t
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; m* E  r" |' z4 B6 W" Z
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    2 N% n; R6 d& S" p
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    : r9 J6 I5 [& X7 b, Z" F  V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ! m! ]0 g. ?! k0 M. O
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! I- l1 E+ {& m9 b+ D. _
  698.       if(!Dn.Connected()); u( k! k* E; R
  699.       {+ O2 X; `8 y" v, {, {- {$ i
  700.         dwTotalFiles=1;8 x; Y* I$ y' O4 ?
  701.         dwDownLoaded=0;
    . B) W! `6 `* w9 ?. b
  702.         bSilentStep=TRUE;5 {6 a5 Y( t; G8 f$ E( ^6 a
  703.         bCompressed=FALSE;& h7 z. v6 Y5 ~' X
  704.         strExtLocal.Empty();
    6 t) R1 j* h# I  S$ ]5 i* C
  705.         strFullName="readme.txt";
    ) |( o* s7 @" F. I
  706.         dwProgramState=AP_CONNECT;4 H- |5 i% b8 z+ }1 N# L
  707.       }
    ! _, P, x0 v6 d
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();% R1 f# `9 ^. l' K/ g
  709.       dwStartUpSteps=2;. I& k1 K+ \: a+ y3 n/ w3 G
  710.       break;# J: I$ Z/ x4 V; U% x: F1 R2 u8 X+ y
  711.     case 2:. o/ E6 [' i. @# _, ?& H+ {
  712.       {
    7 E$ F  J( ]' t# k) d& }6 l
  713.         int iEOF;0 Z( n5 K, V/ f
  714.         FILE *fp;% T' j; a: K+ P, h/ k1 |
  715.         char szString[512];
    9 e) T& _: A+ |- {( b
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    9 w" \  t0 p4 u  f# m# v9 y
  717.         if(fp)
    2 }) ~0 j. h- k' a
  718.         {8 H# h- }! R3 m3 n" L% T) w/ t& t2 }
  719.           do
      ?, }  G5 L' \9 F; x7 }
  720.           {
    / b2 I: ]# t7 G  ~5 A
  721.             iEOF=fscanf(fp,"%s",szString);/ R  |/ e6 R) R+ Y" f$ f
  722.             if(strlen(szString))- ~) s2 L/ h4 h7 ?2 C, u4 R& _
  723.             {
    0 Y' c3 L3 J2 b! V) Z+ {# G  p
  724.               if(bFirstChar)
    * e7 y7 f) T) T& @6 _1 D: O  i
  725.               {' o" |2 e# [3 U: h% T8 _6 U5 B
  726.                 bFirstChar=FALSE;) U' q* e3 A! y+ q' o& W
  727.                 bConnectIsBig5=FALSE;
    4 B3 x$ `9 n3 q7 g
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    % O3 L( ^7 R5 g  l
  729.               }
    7 n3 p9 r- Q2 i/ r1 n4 [
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    $ l! g, W# f$ \# C, g
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    , i9 B0 x- r2 U# _5 M$ \. O
  732.               dlg->m_ListText.AddString(szString);5 Y  X. I) A* r2 h
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) J- x( \/ C4 X1 b
  734.               *szString=0;, z8 g( N- [3 m4 S# [. }
  735.             }
    ) K& f3 [$ H! h
  736.           } while(iEOF!=EOF);6 t3 ^% R: s) N
  737.           fclose(fp);' e0 c. ~0 O% |, n+ \3 J
  738.           unlink(".\\DownLoad\\readme.txt");
    7 L& w' {5 d& n9 B
  739.           dwStartUpSteps=3;$ `' }# w" U& v7 G8 D7 N
  740.         }9 T" e; q7 o, T0 m! X/ ?
  741.       }
    2 H0 A& o% t& n) h
  742.       break;  P- w; ~8 r* a2 Y
  743.     case 3:
    % g8 I5 v4 S% B+ l5 h/ n# c: I1 n
  744.       if(!Dn.Connected())& U! x% w$ l3 A* V: g
  745.       {
    1 D! z& E7 p5 G, ~$ g+ s: s. B" j
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);& y3 }2 g9 c; ~$ h
  747.         dwTotalFiles=1;
    9 J: S. [: q" h1 T8 w0 C- ^
  748.         dwDownLoaded=0;
    3 B1 H  ^" l3 ~9 a1 O$ ]
  749.         bSilentStep=TRUE;( W5 r. S0 R, B" F* z1 z
  750.         bCompressed=FALSE;2 O2 A: p$ X1 f5 B
  751.         strExtLocal.Empty();
    ; H+ W0 R( |9 ^
  752.         strFullName="checkversion.txt";
    5 R, I4 p% S. g  n, d, r
  753.         dwProgramState=AP_CONNECT;& |. `* |6 C5 }0 W3 `
  754.       }
    ' y2 {9 t6 p) j+ y
  755.       dwStartUpSteps=4;
    # ], y$ q& [; w$ g% {6 A
  756.       break;) E" C0 ~; n$ M. p' F
  757.     case 4:
    ) v" \* u- ?- H
  758.       {" {6 h* }8 H! Z8 ^( D, F
  759.         FILE *fp;
    8 ]7 N4 Y" z# ^9 o/ x' n, i
  760.         char szString1[128];
    + w7 A6 I" f) ?, b
  761.         char szString2[128];
    * P+ z$ g' h( F% P9 N
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    1 N6 P8 A6 g- m) H* l
  763.         if(fp), q  I6 |6 P" l( D
  764.         {& |5 ^9 K1 w8 R6 p, y$ B
  765.           fscanf(fp,"%s",szString1);6 ?# A0 N/ a, E& Y
  766.           fclose(fp);
    3 m0 ]  M, N4 H5 K( Y* c
  767.           fCheckVersion=atof(szString1);
    8 o( W9 D4 P0 U0 w
  768.           fp=fopen(".\\checkversion.dat","r");8 j! q3 J+ ~/ z& u: ~) K: `4 N
  769.           if(fp)4 t, u% I% B1 ?" J/ q
  770.           {
    + U1 p+ @2 L/ V+ B; b
  771.             fscanf(fp,"%s",szString2);5 d' d- F: K4 S7 H( {
  772.             fclose(fp);
    ! M: i; ], n, z4 W7 L
  773.             if(atof(szString1)!=atof(szString2))
    + k( V& R7 h+ _
  774.             {
    , e; L6 D1 r7 q
  775.               if(!Dn.Connected())& r3 K' F, L6 I9 _: @! b
  776.               {
    ! z6 X3 @6 S8 S
  777.                 bFirstUpdate=TRUE;
    5 `0 K. P; B4 A, Z
  778.                 dwTotalFiles=1;
    $ O. x# @, p" ]8 [
  779.                 dwDownLoaded=0;" }5 I- k: Q1 D" ?% H$ X
  780.                 bSilentStep=FALSE;2 q4 a0 e6 G* ^& G& o3 C6 e
  781.                 bCompressed=TRUE;$ F; ]( W+ E5 Z1 ~
  782.                 strExtLocal=".\\DownLoad\";% \- k) q4 a4 u- |7 t
  783.                 strFullName="update.txt";! }" q. y8 r8 J. q( h" G4 C
  784.                 dwProgramState=AP_CONNECT;; l& [/ }3 `" S0 c" Q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* I' A5 F8 S6 _( ?' k0 j
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% ?1 m7 S" n2 D: P
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & \4 e* w- }  A0 Z  b

  788. 0 K! P; \! x  {9 M6 i
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 R+ }$ n  M3 e8 |/ \# V* C1 K
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    , S+ E7 d$ R' D5 U. ^4 S+ Y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)  l* S7 G* G: c
  792.                 {
    - [8 ^; H$ n6 B4 f
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");% l6 K' }  r& N# @4 k2 e: J
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    5 O: x* P/ I6 M3 @
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");3 o% A7 p& z7 X1 ?
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 r2 W8 p$ @& s0 M3 i- ?7 [
  797. % C/ i- S7 V& b  N$ j7 G* \
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");+ l% t& V' Y5 u! d  U& Z
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 }* @4 q: P. x9 E* B5 q1 |
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");4 X7 C( m3 d3 Y1 q9 x
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" g9 `& C+ {: z4 E% L. n$ q
  802.                 }9 v! j! a1 q( t
  803.                 dwStartUpSteps=5;
    $ F4 p. l7 n# A2 r6 C) o5 ^
  804.               }
    : }0 u1 A# M$ N) i$ y) X5 F  \
  805.             }9 E- l5 q4 I1 `* b: m
  806.             else
    " w9 e% [- i9 z% K) W  s! o6 b
  807.             {8 k' B0 n( F' J' m- P2 q$ u
  808.               unlink(".\\DownLoad\\checkversion.txt");
    3 C! n+ {# {% L: A; c
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / V8 q6 [* U; }4 u' S* e; ]' z
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - k6 r# a# O$ s6 l
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");% I! F1 T- y8 w' [, v, G% ]! d

  812. $ T; Q2 L* b" a8 @6 [! r- v
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( O% z! e7 j9 L" Q
  814.               dwStartUpSteps=99;" e! Q0 F( q- n) W
  815.               bFinishUpdated=TRUE;
    1 J  O; d+ N9 Q: j2 R8 E
  816.               bCanUpdate=TRUE;- }5 x! W) w' j  B: x9 T
  817.             }
    % S& L7 y7 m% t# W9 P1 B$ H
  818.           }1 t4 \# s" @4 {! S/ _
  819.           else
    + U, C. k3 g/ ]6 ~
  820.           {
    % `8 V$ w# x1 r% f% r
  821.             if(!Dn.Connected())! B$ @; ^# W+ ]+ d% W0 Q
  822.             {
    ( x: [1 s% n/ U0 ^# [. W' F
  823.               bFirstUpdate=TRUE;
    ; `* ?  G. N$ X3 H  O- P
  824.               dwTotalFiles=1;
    + ^- }$ |4 K: a  l4 R
  825.               dwDownLoaded=0;
    & o9 |. @# x! w$ o
  826.               bSilentStep=FALSE;
    ; L1 M* m/ \6 {7 k6 K- l
  827.               bCompressed=TRUE;
    : F0 o( p# g' M8 v! x
  828.               strExtLocal=".\\DownLoad\";* s( Z% e2 k, Z& s' _2 p
  829.               strFullName="update.txt";
    1 `, n! Y7 j# f. e. r* T9 n( [
  830.               dwProgramState=AP_CONNECT;' S3 v9 p# ^( n; A( Y2 }- M: h: H
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 E3 l+ @' C! K7 {/ Q& ]
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 o, G; {( |: a% U# m6 f6 h8 B
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");% A, B' _0 q' y- S
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 r9 }  j0 N8 J2 b+ l, q
  835.               unlink(".\\DownLoad\\checkversion.txt");3 g  m$ M8 n7 f, T# N
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)8 J( u9 L* T0 n  O# \" K0 J& m
  837.               {8 W) Z) r" ]& V' o" g- G" t& ?
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 L/ C" A3 e% Q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    $ X6 E* Q1 L) _6 b, s8 U0 S# y0 {
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");* d: n. X9 h% {" a* `
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 e5 z# K( {) d) n: b
  842.                 # f8 F( X; S( M9 F- L
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. k6 n+ f$ }" {) ]) q
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 ^& c( G/ [9 b" R+ q7 t4 W0 {: \
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");( i4 o$ X1 H) e4 z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & C/ R" E+ G/ U! P( S8 s
  847.               }
    6 b1 L& ^  s# ~' k: ^# O& l& F, |
  848.               dwStartUpSteps=5;  Z/ f( r  D0 `. r
  849.             }0 w) }$ ?4 s/ ?, b0 Q
  850.           }
    4 z$ c( I2 Q' l9 ]
  851.         }
    / `6 ?; s5 D& e" G9 p2 ?( q
  852.         else
    5 ~; W5 v; h# d; S6 Y* @. v# o
  853.         {9 h5 ^7 D& }5 c" m" G
  854.           dwStartUpSteps=3;
    5 d$ c/ O8 e& }$ Z7 ~
  855.         }& M# P' o* @% A8 _1 o8 Q- [, N
  856.       }
    * F. I& G8 N: Z- q: X
  857.       break;4 f$ {% L% T& V4 ?# D% E) G9 M
  858.     case 5:! E+ A1 g! D% z8 R" u6 p2 `6 ]
  859.       {, k$ f% v, E7 _# c7 B
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)' L& u1 V6 Y2 x* a% I- K5 `
  861.         {! s" d$ `- R1 e
  862.           int opt_overwrite=1;
    + ?; [2 M8 s2 P$ ~2 o/ r! m
  863.           int opt_do_extract_withoutpath=0;- T7 `+ w, o0 x$ @% O
  864.           unzFile uf=NULL;
    - W# a$ F4 }0 [4 `! ~( c

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

7 ?& |) h5 n4 m* P, a4 A0 O& \* U' V2 X7 g1 p: x" w

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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