CSUpdate.exe源代码

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

4 e2 n8 t8 f3 c% C' c# V0 t! B
  1. / RevApp.cpp : Defines the class behaviors for the application.
    + p. m5 p* [( U& n% @- n4 _' @2 g
  2. //
    & L5 H1 h; D4 c! P) l) M# V7 g

  3.   [3 B9 k6 K9 w" W( H7 b$ q
  4. #include "stdafx.h"
    1 ^, o4 t5 U( v8 }. p1 f$ ]! i

  5. ! J9 ^% ~. G* `# z# p
  6. //#define UNICODE
    & F+ L6 s4 }' A  i+ {6 t) f% B* X' O
  7. //#include <gdiplus.h>
    $ I7 U: }' r4 T6 y' T! u
  8. //using namespace Gdiplus;& i* o( }0 S/ r' M2 q$ B9 ^' J  v
  9. + o1 F! i$ Q  g
  10. #include "RevApp.h"1 j7 C4 g7 y# u
  11. #include "RevAppDlg.h"
    ) q0 E' G9 L9 a, Z- r' ]2 Q

  12. . |3 ]6 e3 _2 y8 I
  13. #pragma warning(disable:4786)
    ) X  B# }) D* Z8 i- K2 s# [& q8 p
  14. #include <map>) U; i+ C' Z  H6 r
  15. #include <list>, x& V9 Y. k% C" ]2 s4 ]1 x
  16. #include <direct.h>- h; o8 @6 W* x

  17.   p3 g: C5 D$ I$ W" w5 A
  18. #ifdef _DEBUG
    ' q2 B1 Y3 t% g1 Q$ M" z
  19. #define new DEBUG_NEW: L1 W7 m/ G9 Q; O
  20. #undef THIS_FILE8 s# d( `& T3 Y3 F, I" c1 {0 U
  21. static char THIS_FILE[] = __FILE__;
    ! W6 f% Z/ P/ d: M
  22. #endif6 ]' A. Y( D& ]; H& f3 \4 m# w
  23. #include "SkinResDef.h"
    5 f9 r% b  n0 y! m( O3 P
  24. #include "ChangeBG.h"
    / M8 O2 q' w, a- M& @/ y5 h# j
  25. #include "AFXINET.H"% t/ N2 ?7 J  g1 p. V& _

  26. 3 {' ^7 `& \3 K# @. c7 L5 k
  27. #define TRADITIONAL_CHINESE 0
    ; r( D% q8 `, i! S! k
  28. #define SIMPLIFY_CHINESE 1
    4 ]; A3 q; s; V9 c
  29. #define ENGLISH 2" k/ K2 n: E( q$ R* R/ v
  30. int m_iLanguage = ENGLISH;
    9 M" U/ h1 f6 u& ?/ a+ V+ I
  31. /////////////////////////////////////////////////////////////////////////////3 j- F" ~' \# M: @
  32. // CRevAppApp
    6 H9 \1 g+ I" C+ f* J0 `8 j9 D
  33. - `& t/ @3 v* x: t: X0 W
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)- v% Z  J- D( {9 V0 u$ `; _/ c
  35.         //{{AFX_MSG_MAP(CRevAppApp)+ B- F! Z" Z& q1 E; z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.- a" l8 u) W: g9 P* m: B7 e
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!+ K1 ?4 ~2 }  g; v  Z
  38.         //}}AFX_MSG
    + g6 a) O: M; Y5 C; R  d" K9 ~% Z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 }& z5 q; G7 b8 l5 j
  40. END_MESSAGE_MAP(), U  L) v, {  E2 K' }' `

  41. 5 b7 h5 I5 F2 K3 {9 R' ~$ r/ t
  42. /////////////////////////////////////////////////////////////////////////////; R: N' Y+ \2 C/ K) B& v
  43. // CRevAppApp construction
    . ?- W2 m# D# `; W* U& X
  44. 9 b6 z: }* X; u; |2 K' s" L
  45. CRevAppApp::CRevAppApp()
    1 i# R1 D7 {( L3 J
  46. {
    " L4 g+ _! a) I! t8 a/ |6 i
  47.         // TODO: add construction code here,
    0 j! P6 ^) G' }+ T  I& L
  48.         // Place all significant initialization in InitInstance
    $ V( l) l1 I" g) b% f0 \9 y
  49.   bDisplayIsBig5=FALSE;! ~& P$ O$ F) \
  50.   bRestartUpdater=FALSE;
    ; Z* M/ I* L& E' c6 v
  51.   bFinishUpdated=FALSE;
    & d! \7 b! B9 {7 x# O2 x! n
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;2 ?" A3 X* n2 Y1 n5 ~5 X0 g
  53.   InitChangeDataBig52GBKS();0 ~+ Y" z9 C  F7 x  ^3 M
  54.   InitChangeDataGBKS2Big5();
    , v) ~4 O4 S5 Q) o
  55.         //
    0 i! J* }( A* Q/ I7 Q! |" ~' w
  56.         bClickRunExe = FALSE;
    0 Z9 p5 Y0 Y+ Y- O" T0 h) K
  57.         //
    . ]2 Y6 x( v" E* s& d! ]
  58. }
    $ k% u6 M! Q  [0 G3 K% F
  59. 3 |6 A/ e; n2 I' t: _# @' P" d
  60. CRevAppApp::~CRevAppApp()
    * z. V% x- }' Q: T3 m
  61. {
    0 w) ?0 I9 T3 o  D+ J, q
  62.         // TODO: add construction code here,. N8 c/ R& J& S$ ]8 R0 c
  63.         // Place all significant initialization in InitInstance- r9 T; ]8 a4 L' E
  64.   EndChangeData();. x0 j! j  S# i* R. d) ]
  65. }
    ( S/ q% d2 [0 E+ u
  66. 7 r+ B# I6 }5 b. n
  67. /////////////////////////////////////////////////////////////////////////////& V2 ?0 N, v1 I
  68. // The one and only CRevAppApp object
    $ @# S" u; U# B3 \1 |# L
  69. 2 P  {  k+ E  O/ s% ?2 H
  70. CRevAppApp theApp;
    / A& s* ?) p& L3 m& \& F+ x
  71. 9 b9 s. r( }% j/ Z. K
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    6 M6 t+ b# T$ m
  73. {
    " y. Q+ a4 g1 v( r. M- d6 c$ d! H
  74.   int iEOF=0;4 k0 e( ?2 R* w/ H' o9 |
  75.   char szTempName[MAX_PATH];* n0 D; E! d; ?2 [) G
  76.   *szFileName=0;
    8 U' d) g2 l7 J/ D; g
  77.   iEOF=fscanf(fp,"%s",szTempName);
    9 t2 D: @1 w; s% A; E0 b. u% H6 T
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    - l- I8 G& F& ]1 h6 c$ o6 a: K& _
  79.   {
    3 i4 M- D$ B) s; c
  80.     strcpy(szFileName,&szTempName[1]);1 x0 w& O/ R; J8 t
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)9 Z& l% k/ J6 j2 n8 W. q
  82.     {$ m- S; ?2 e; Q! f/ C: _
  83.       iEOF=fscanf(fp,"%s",szTempName);# F) R* t" G  ~) Z
  84.       strcat(szFileName," ");) @3 C% [0 b% r! c# ?0 P
  85.       strcat(szFileName,szTempName);' q4 J1 U2 ]. \/ t2 M
  86.     }
    4 J/ \' P7 U* z  ?! Z/ [
  87.     if(strlen(szFileName)>=1)
    6 c0 o" f8 V* t  |- P3 n4 q* h
  88.     {
    * G! q. {6 ^& u8 D0 O* d3 \
  89.       szFileName[strlen(szFileName)-1]=0;
      }" G- w$ f, e$ l+ g4 Q
  90.     }
    ; E+ i" O0 N0 I1 l
  91.   }
    , k; P3 N  e+ x, g7 G6 t9 O
  92.   return szFileName;0 r9 h4 r' d: j- U8 v, u! c
  93. }' h* z. ]+ W# Z0 @& A# D" u5 l5 _+ b

  94. ' ?) M% W& q/ J
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    - p3 Q9 w- N& T5 w$ w
  96. {+ N0 [$ A4 K* D, ]$ L% w  K- }/ D
  97.   FILE *fp;
    ! ]; F+ i; O2 L9 m4 X1 Y- n3 d2 ?6 e. Y
  98.   char *key=NULL;  @( U  D1 T: Q5 q
  99.   char version[MAX_PATH];, E; F. z9 Y9 O! `( O4 P' J3 ^% \
  100.   LPUPDATEFILE file,olds;
    $ {; q3 T! B4 i. u9 @6 Q
  101.   std::map<CString,LPUPDATEFILE>::iterator p;7 D5 |) I- T7 c: P

  102. 1 b( ~5 j. V. _$ ~  v1 v5 A* Z/ R
  103.   UpdateList.clear();
    1 Y0 Z# C6 i9 r* E* S& F/ R
  104.   UpdateFile.clear();
    $ Q9 m1 |3 w$ h9 R$ }
  105.   if(GetFileAttributes(filename)==-1) return false;* t# B8 c5 E7 b. ]
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ; l% R2 ~: x- u  m, L
  107.   fscanf(fp,"%s",version);
    , V" ]8 X1 v( p! M) E& ]
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    # X9 v. K* W# X7 P8 Z6 f
  109.   while(fscanf(fp,"%s",version)!=EOF)9 Q6 j$ U& Q3 j
  110.   {
    * h" r) X( L" L8 V" {
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: {+ S+ S) _0 m4 ~( y+ A8 G
  112.     fscanf(fp,"%s",file->path);
    + I2 g/ m" g4 F8 r, k+ |
  113.     ReadFileNames(fp,file->file);
    + L+ D  W6 L. c  F" ]6 j$ H1 L
  114.     strcpy(file->full,".");
    ) \" e7 s. r$ p
  115.     strcat(file->full,file->path);9 V. `8 Z* z0 R3 F, q6 @' `. C
  116.     strcat(file->full,file->file);+ D) L. f- `1 v" X$ j5 U2 L' {
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 N& |. H, Z" Q% Y% y! T" N. x
  118.     {; P; G+ V  t* u
  119.       file->vers=(float)atof(version);
    - f% i5 B! r3 p. @. ^7 U
  120.       UpdateList.push_back(file->full);8 }- Z5 f7 u. P2 r  R9 G  k
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    0 ~# G% w6 F0 g% v. f
  122.     }) F% `  ]; W7 h8 g$ S' Z+ v
  123.     else
    2 U$ G/ r% N8 h( N7 }; f
  124.     {
    ! \2 F5 Z' n: p$ c1 `& A
  125.       olds=(*p).second;
    ; l4 Q  Q- I% |6 M8 s! x
  126.       if(olds->vers<(float)atof(version))
    , w  g$ V, N4 Q3 }7 t4 D6 N8 {
  127.       {
    4 E( n" |( o# l$ C) ~( ]. S/ P
  128.         olds->vers=(float)atof(version);6 G1 n- B0 k$ h+ X& U6 R
  129.       }2 l% e5 s* Y/ }: p# d
  130.       free(file);
    + m% k: Q1 D6 N7 `7 w% G+ f- T& ]* i
  131.     }
    3 D( ^9 j5 n, C4 @" r
  132.   }
    2 x+ x9 C8 v. g4 w% l" X3 ]
  133.   fclose(fp);- _* P9 k- r7 X9 F2 |: u
  134.   return true;
    3 H7 W$ V3 b7 Z' @
  135. }8 F1 H7 U9 J; R! _
  136. , K" x* D' U. u: k5 J8 P2 b
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)/ X  y7 `$ `2 Z# |
  138. {
    8 A* t; S; ~: s# r; [5 P% y
  139.   TCHAR  szFull[MAX_PATH];
    2 E/ M1 y9 {9 {
  140.   TCHAR *token,*inter;7 Q/ S& ]. l" e; W/ \) @
  141.   *szPath=0;6 ~- E$ v( \) l' `: t4 [. X4 p, P
  142.   strcpy(szFull,szFullPath);' ^9 `& ?' l3 @) `) f2 z$ U
  143.   token=strtok(szFull,"\\/");
    $ ?5 z( {; U1 a# Q1 C/ d
  144.   inter=token;2 x" N( g2 e  J8 u& p9 ?
  145.   while(token=strtok(NULL,"\\/"))7 h; f2 p9 _6 }* [
  146.   {" @8 u9 y0 @( L: f
  147.     strcat(szPath,inter);, D' F/ {6 Q3 H* l4 ^
  148.     strcat(szPath,"\");
    0 G- X: _, V( P7 w( [: p1 z, ^
  149.     inter=token;& O' F$ \) v3 w3 M- }
  150.   }7 o$ O" o7 u/ s( y! t  H' q0 P) }, W
  151.   return strlen(szPath);
    . P/ v3 ^6 J' X6 L: n
  152. }" H. s. o7 G/ ~1 C5 V* d$ b

  153. 6 n% `. o  S! v/ _: s* `1 x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)7 [0 P$ `5 y& q  }; k
  155. {
      E4 F2 l; g' l
  156.   DWORD attrib=GetFileAttributes(Target);' `4 z3 F$ z, F7 Z: b
  157.   if(attrib!=-1)
    8 u. `; ^  R6 e7 D0 b' O7 T& F
  158.   {& S6 y2 [7 e/ X" b' C  C
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)): o" u" o3 E) D# m, Q6 I* u- a6 C+ Q  R
  160.     {
    $ k, z. w% n8 ^
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);, ^& j( w, [$ [
  162.       SetFileAttributes(Target,attrib);
    2 h' P! G+ y- @; ]- ^2 _
  163.     }! I( ]+ e3 [, X5 s/ g5 i9 T$ }( m
  164.   }+ x7 Q9 B& u; v3 W! p9 y
  165.   CopyFile(Source,Target,Erase);
    8 k2 L2 b  |1 g5 M. W' {9 t
  166. }
    ( I. z2 X0 K: d! f4 Z
  167. ) T$ k% A# L; Q3 z; E
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)9 W  G  v* D& i
  169. {
    ! n5 s- Q1 B' C; B* v' R& B- u
  170.      FILE *fp;
      f3 p# g7 K; s2 D' k; y! X
  171.      char  szBuffer[8192];- H0 z# @7 {8 r/ v, V
  172.   va_list  argptr;+ l4 T. ]7 O" j* H0 G/ `
  173. / e2 S& k6 w) e
  174.         va_start(argptr,message);
    + Q1 \. B* z0 R
  175.         vsprintf(szBuffer,message,argptr);
    1 _: j+ `; d  [6 d, U
  176.         va_end(argptr);+ F& A* \  g$ `. J- T; k
  177.   fp=fopen(FileName,"a");
    / ~5 s& L" n, R* y/ |5 E, R
  178.   if(fp)
    2 k' Q$ R; c# w& T
  179.   {
    + g3 w* C0 @: a% `
  180.     fprintf(fp,szBuffer);( P5 D% d" B* x5 D9 T% X. s+ @5 T8 U
  181.     fclose(fp);7 H. `" j- U4 x7 M! l3 K: \) v
  182.           _flushall();
    ( S" K: Q1 r" k, c7 x$ `, d! h
  183.   }
    ( E3 F! e1 W8 l9 c; ^
  184. }7 W9 r: }+ P8 C* k( Z

  185. ) p6 h7 Q1 F( N4 F- D6 i( I# d7 J
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    % J1 P6 c# P) x' r( o+ L
  187. {4 e' Z! b2 H+ U& x/ {
  188.      FILE *fp;
    ! p- P4 |  e8 P' g6 X
  189.     DWORD  attrib;
    & f5 f0 x& L& m2 h$ J* q# T
  190.   attrib=GetFileAttributes(FileName);
    0 j2 W# H- U9 A) _
  191.   if(attrib!=-1)  d+ Q! O5 o( y6 e3 r
  192.   {
    $ l1 p9 s% ?, B+ {
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);8 u1 R& N( E6 L9 ~
  194.     if(!SetFileAttributes(FileName,attrib))
    ( }# U4 d: I, q. Y/ `
  195.     {
    7 Y8 `* I  P! K6 F4 n8 U2 U# g; Y
  196.       return FALSE;
    * \& C4 v9 ?$ k" P! H$ N: b
  197.     }
    9 F/ w4 }5 n% M3 m
  198.   }
    # c, H! k, h1 ~' b7 v
  199.   fp=fopen(FileName,"wb");
    6 E. \1 q$ i/ @% ]: {/ `
  200.   if(fp)
    4 u  X4 ^$ K0 w' L& ?8 f: ^' w
  201.   {4 P. U( U4 l4 ~. t5 ?  Z! L
  202.     fclose(fp);0 U8 C* A! `4 N) ]; E
  203.   }
    8 H5 i* [/ G/ F- M+ y5 {/ g8 s
  204.   return TRUE;: e+ @, f7 J) x4 M% Y) |1 e8 z
  205. }
    " \4 v+ u% N- c/ y9 c

  206. . R+ N; H; J3 K. C7 r
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    0 C6 ~5 Y$ f. Q8 L9 g( r3 H; ]
  208. {  h2 J7 [% ^  N1 e( k% n
  209.   char filename[MAX_PATH];7 R+ V2 b, Q; ~3 y! |
  210.   LPUPDATEFILE file,olds;3 b% Z! |  a# S4 W3 d& ^
  211.   std::map<int,CString>::iterator i;. }! ~, ]3 {" k3 M0 v% t
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    * _0 z0 X- J- `: t
  213.   std::list<CString>::iterator l;' |! J, ?( p7 z0 w8 G

  214. ; a. P2 D6 n4 G0 L) O- \
  215.   if(bFirstUpdate)/ i! ^  _6 G. R( ]
  216.   {! F( `7 M9 x3 y6 M
  217.     dwCurrFile=0;- `( o  c2 R7 t- Y4 p4 G
  218.     bFirstUpdate=FALSE;& D# K% S  U- v0 ^/ o7 I9 G
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); k9 F3 F9 ?7 e8 R
  220.     {  c9 k6 v8 D( c2 `3 V; u5 N9 z
  221.       dwTotalFiles=UpdateLocal.size();
    . n1 z& _% B1 V1 d3 l
  222.       dwDownLoaded=0;
    1 X' G( C8 o9 R  n$ l
  223.       bSilentStep=FALSE;0 d8 B' |' X9 |$ h
  224.       bCompressed=TRUE;: p7 w1 j3 ]# x7 Z" G
  225.       strExtLocal.Empty();
    7 i# }' U, P: T$ t& N
  226.       strFullName=(*i).second;
    3 g$ Q$ x6 L% r$ X  ^6 s
  227.       dwProgramState=AP_CONNECT;6 E; S* N. T% W$ G" W( t' J
  228.       return TRUE;# m! G2 C7 f" v5 Z
  229.     }
    * U! G( b2 ^& \9 I' M
  230.   }% C* p( N0 g. _: N) R1 p3 ^
  231.   else if(bRestartUpdater==FALSE)1 H" B. B5 d# a9 g4 F) _( I; _" ^
  232.   {
    1 d+ R* }6 n7 ]
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())4 F! I; e* s. B1 a# W* g
  234.     {
    1 y% C4 S1 \( r: H
  235.       file=(*p).second;/ Z* N# A+ V8 _8 H( S  v  M
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())& Z0 G/ v1 C4 `" Y* O
  237.       {3 k! l$ L8 R2 Y6 F" s( G6 Q
  238.         olds=(*p).second;2 v: z& m# W( A9 z$ n% C! `/ X
  239.         olds->vers=file->vers;
    2 B% t, D/ g% |' s
  240.       }
    7 h. j' u/ |- j9 Z! n
  241.       else
    9 I' J- |* s: d4 I2 R
  242.       {
    * d! D" \' o- V( a$ b
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . L6 E) W% J; M* z6 S  F; b
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    - i' P( h+ a  Y! l; T$ b
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ; K; j% X/ n; M) L" T; f
  246.       }2 n" S$ k. E) Z) V  ~+ [
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");+ H% n. t* U3 P+ e: K6 P; i  V
  248.       sprintf(filename,"(%s)",file->file);
    ) w# Z2 `, q, Y  Q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& C  \  |2 r1 G+ D: |
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }6 b, K% z( E% ]0 G0 ]/ d
  251.     }7 b: H( z) V8 n" ]( m$ x6 Y' [4 q( Z; B
  252.     dwCurrFile++;
    7 e# {7 h+ d: o/ {+ l0 R  w
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , ?6 F, f+ {! b% r3 l
  254.     {
    / f* m" O1 E' C9 }9 P7 g
  255.       bSilentStep=FALSE;
    - F' ]$ r3 {5 a" K
  256.       bCompressed=TRUE;
    # I& o$ F- t% S" `
  257.       strExtLocal.Empty();
      S5 K/ p0 Q" V0 Z* A# B; @
  258.       strFullName=(*i).second;
    " s9 g! c/ |) n8 D; e+ @& M) O$ t
  259.       dwProgramState=AP_CONNECT;
    . f- r9 W0 L# }8 W, ?  f
  260.       return TRUE;
    - j: _. g2 K& [! ~
  261.     }
    5 m" d3 n9 o- l0 l" ^
  262.     if(!bRestartUpdater)
    ( R4 v# R7 \8 l3 z/ u2 g8 H
  263.     {
      Z' ^% a! u5 B* T1 A& q
  264.       int iCurrSize,iFileSize;
    4 X/ a* }1 `, A0 j8 F
  265.       iCurrSize=0;
    ! o6 ]( `+ Q4 Y# m. t6 {3 e$ R
  266.       iFileSize=UpdateList2.size();7 n% h  r5 }; F
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ( H' D4 ?1 a" v1 m5 L# S
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");  N+ x6 `$ Y4 @1 l( n7 r4 u: G8 w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");9 {- }" ]! s7 D( a: N5 ~8 a6 d4 R
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 f% z1 @: f4 R) _7 e2 g
  271.       Fclearf(".\\update.dat");4 m; P) c% e, R! o6 G, Q  Q
  272.       Fprintf(".\\update.dat","Bloodyf\n");, `: K4 k1 g; i- O! Q5 j5 X
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & {3 y( T  C) r6 a1 w5 Z  I$ M, ]5 F- Z
  274.       {
    6 n4 `) f7 g9 B: L
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ' c: G9 k8 d  g: I: W9 a! N) b
  276.         {( t$ c7 t8 b& ~9 P# T$ F& r
  277.           file=(*p).second;
    ) E' @' f, c" Q- ?, T( }# _8 E
  278.           sprintf(filename,"(%s)",file->file);
    / K+ Z  R0 N/ |7 k
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # a: J( Q: w0 Z& c
  280.           iCurrSize++;
    8 E# Q1 v' w/ C
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));- o2 b$ p+ \( A7 n1 `6 @( d/ l! |; K
  282.         }6 N7 R* D/ n7 i4 c( @$ C2 d
  283.       }
    9 G, }' y( U: @- q: R
  284.       unlink(".\\update.txt");8 n8 X  Z9 q: E
  285.       unlink(".\\update.tmp");$ c% v, U9 u0 ~( g5 P9 w1 U
  286.       Fclearf(".\\checkversion.dat");
    " x* g# n# k. l7 T& o8 Z* J$ v
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    % l; v0 V- j& H( [4 c+ j
  288.       if(UpdateLocal.size())
    ; r* B4 k) L7 X% q; ]0 K- d
  289.       {
    , M3 u% I1 m' S( q$ s
  290.         UpdateLocal.clear();
    5 Y7 s% b0 u, u  B! F* N( _
  291.       }3 K* b8 X/ u0 r) Z1 @7 ]0 ]
  292.       if(UpdateFile3.size())4 q4 j/ k8 |6 S! A9 a
  293.       {
    : K" O6 n# [/ U1 l
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 K6 ]# t$ h5 T: ?/ p3 R
  295.         {
    : {5 @0 f) A- M1 n' G) k: x3 `
  296.           file=(*p).second;; `$ E7 _9 |: A" @
  297.           free(file);
    * D# i: f4 i. {4 J( _! X$ a
  298.         }7 V/ q) X: v" s& p  B  Z
  299.         UpdateFile3.clear();5 z1 n0 ~4 e- {
  300.         UpdateList3.clear();
    % A/ ]: \$ _( w7 W' f: ?" ^( i! ~
  301.       }
    , C8 Z7 H) O5 T$ j
  302.       if(UpdateFile2.size())- x1 \, f9 T+ [: R
  303.       {! e+ X9 U. E4 d1 d6 I7 l/ D2 j5 \
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ y# b7 N9 z: X' ?7 ]
  305.         {
    ! M/ g+ X" R; e& b0 r
  306.           file=(*p).second;
    : p% m) g6 B5 _
  307.           free(file);
    & E7 ]) r0 A7 T; v' X
  308.         }
    3 J% {, z' T2 i$ Q' @# s* {
  309.         UpdateFile2.clear();4 O( d/ o0 S/ N; u+ }+ g1 m; v
  310.         UpdateList2.clear();
    ' Y4 S5 e8 Y! [  u3 i/ z5 {2 M
  311.       }
    - U2 D% h1 [: I: Q6 I$ e6 @
  312.       if(UpdateFile1.size())( u9 K2 y! W7 P
  313.       {, F; }' ?& {8 m. v
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 A) u$ j& d4 H% H9 I/ x  y
  315.         {  L& c, x: G' q! A- h+ Q: S# f
  316.           file=(*p).second;
    : j: P8 N+ f6 I0 e6 A+ G$ Y5 E
  317.           free(file);
    4 S3 K* O; E1 ?$ J
  318.         }
    7 b& w1 j/ w* n5 i, ^- z. ^
  319.         UpdateFile1.clear();* ?2 [, u7 f$ |6 j& x5 I$ J
  320.         UpdateList1.clear();; \6 R/ w; N0 }' R3 B: u5 ?
  321.       }
    1 z: I( t  f, C1 Z3 N5 w* a& ^) Z2 N
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));) g5 ^- x% J) f) C3 p! |
  323.     }
    + H: c# L: V, ]% O- F( Y
  324.   }
    8 J5 ]6 E+ V& f4 k& \8 H! Z# F
  325.   return FALSE;2 @* u2 h+ e" X9 B, D6 f( @
  326. }9 a& h; W& `" }  B

  327. ( o/ i$ c* v: r' @, {: H
  328. void CRevAppApp::ClearAll(void)
    # W( C; f& @3 w2 I( y+ P
  329. {) U+ k% f. P( V' b) C" c
  330.   LPUPDATEFILE file;
    7 W9 v3 v6 B3 K5 d* b6 J
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 I+ D7 ?4 c! s1 u) d& U
  332. + q) `2 E; v  |- R# t) F! b% E* Z
  333.   if(UpdateLocal.size())
    ; I8 V2 Y" Z7 t. L& J
  334.   {
    - i0 s! N& {; L5 o
  335.     UpdateLocal.clear();
    8 E0 j6 c6 g. O: P" C6 s6 b
  336.   }5 b8 _7 I+ h3 ?  g" n6 ]7 W) `+ x
  337.   if(UpdateFile3.size())
    ; i& V7 O6 Q7 b
  338.   {
    9 d& \' U& C( I: ^. W1 Y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! g3 I+ R6 ?8 H( D% s; ]- i
  340.     {
    1 w) c5 s& \, L3 ^  M1 @; {
  341.       file=(*p).second;
    7 S( z; `- {, n+ s
  342.       free(file);
    0 F0 m  b3 ~7 ~( N. b6 t
  343.     }/ ?1 i. d- J, }3 }9 \  b
  344.     UpdateFile3.clear();/ D) x0 z( M4 c/ V2 v2 f; I/ ?! y
  345.     UpdateList3.clear();, j9 N6 E( \  `, X" C% `
  346.   }$ w2 T, a* B* q* m  U( h
  347.   if(UpdateFile2.size())
    2 ?+ ?3 R* z+ T' B* L- Q" _$ E
  348.   {2 G3 c$ d1 i% x8 P9 ~
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 Y# v( f/ L, N7 |/ I0 z5 Q* V
  350.     {3 y' h$ u6 T8 Z% B& L1 G
  351.       file=(*p).second;: W8 A5 {; L- ~" N( S
  352.       free(file);1 m, w- y# {/ R  j
  353.     }; l* p! O; N6 B! s4 S
  354.     UpdateFile2.clear();9 G  O: E" k2 ?9 D& w* v4 X; Z5 P
  355.     UpdateList2.clear();! Z% U2 V' l. R: r. P
  356.   }  w. ^  Y5 `; F; g* L) ^
  357.   if(UpdateFile1.size())
    0 O- [& R  J) c2 z* ?8 Q
  358.   {
    1 s: i5 A3 r% n% ], ?3 k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# M; }$ a/ H3 R/ L. C7 G* y# |# k
  360.     {4 {5 ?, H+ h/ d4 c
  361.       file=(*p).second;4 x- J& X6 i  B5 Y
  362.       free(file);
    , h6 u- R+ Z$ L& r
  363.     }( ?/ Y/ U6 t) t5 G! P' o
  364.     UpdateFile1.clear();4 A7 K1 R7 b  N: T/ N0 X- a, F* m
  365.     UpdateList1.clear();
    + u1 I5 F- w1 ?% u4 G& U) @7 D
  366.   }( B" g' a  h0 q" y. Y
  367. }  0 r2 I" z. g! B. n
  368.   
    1 }) p9 o! \/ |
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ! ~0 b" M) \4 W; l3 Y" V
  370. {
    & `+ ^. P2 B7 W. e( r, G
  371.   int c;# V# g" r* R* Q, T; {; b
  372.   LPUPDATEFILE file1,file2;5 Q5 n8 ~8 b; F. l* a5 d
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    & x, A& N7 p2 ?' v8 ~
  374.   std::list<CString>::iterator l;; x5 [$ Z, v( [
  375. ! I4 e$ s5 `% A- p
  376.   UpdateLocal.clear();* U5 ~% C3 m$ e& A) X$ Y6 o4 r
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    " a1 X3 @: ?$ \$ r
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);$ T3 Y# ?3 _8 b' m" S
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);$ W1 o( [2 N8 Q' }' I$ m( l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);7 |4 P+ ^# E- g: O% i
  381.   if(UpdateFile3.size())) [9 E3 i$ R' s7 p' r
  382.   {1 w. M, Y. z4 H
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 \' h5 L! c. H
  384.     {( u! F* Z# b6 a& T0 z, k
  385.       file2=(LPUPDATEFILE)(*i).second;
    & y* C0 ^9 m+ p5 w$ x# G5 g
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 n  J/ Q; j6 A0 K$ v; @0 S+ c
  387.       {
    6 b; m' X- h: l3 d6 u/ R
  388.         file1=(LPUPDATEFILE)(*p).second;
    1 ?3 n4 |3 u) ^" p
  389.         file1->vers=file2->vers;+ {) c$ P: R, U1 S# B; d2 f5 Q' {
  390.       }
    , O" X3 m6 ^  ]: Z7 O
  391.       else
    # _1 i* ~# r. n& S1 l! k
  392.       {
    ) H# F; k. a1 I3 A" R; F
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 v0 t/ A- D" k* y9 m
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));6 n% G' T& X% j1 z4 p
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - B6 d  h# p5 A6 ?7 e* v" o- f5 ~
  396.       }
    5 T6 r! P. s- e, m  S
  397.     }2 Y! X- D! Q! y  s  h3 `
  398.   }
    ( B3 t/ D" X# A/ P% U( q  T
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)5 ?, |: J/ a8 q, u
  400.   {
    0 {6 G' ^( B& ?+ S$ F! W- b+ w
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    7 h1 Q) y: t% Y# h  I! g
  402.     {5 o/ N' ^) K) n& C/ k
  403.       file2=(LPUPDATEFILE)(*i).second;; r6 i: t# ?! [' j
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / A( X5 z+ ?7 D3 d
  405.       {  Y$ g) e6 U! B
  406.         file1=(LPUPDATEFILE)(*p).second;4 y# _! p; M- O( q: C
  407.         if(file1->vers!=file2->vers)  B) r& P# r7 @& @! Q6 Q
  408.         {
    & Y, D4 U6 b- P7 @" H" R2 J
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* [5 U$ Z1 A! ^% i5 d1 F! M5 k% [
  410.           c++;
    4 M2 U$ n- I. `. [' ^1 B  I
  411.         }( j2 H* {; f5 ?3 j
  412.       }6 X( g, m/ Y; d( l- E, C# S; C( n8 r
  413.       else+ ]; b) \/ E0 P6 k, S
  414.       {) B9 ]- q4 u# C# O5 e
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 w: v. x5 S2 i9 M; _6 r( y
  416.         c++;
    9 J4 d" z1 f5 \4 L1 Y! j: q/ H6 A
  417.       }
    & l7 g/ B% @5 z2 [! U
  418.     }
    1 q3 M8 J7 h! [1 ]8 [, M" k: T
  419.   }
    ! P( M% l0 u; W( b% A
  420.   unlink(".\\DownLoad\\update.txt");
    ! f& D  O, H6 C  e8 O
  421.   if(UpdateLocal.size()) return TRUE;/ H' Y% N5 r' x- G( M; s
  422.   else                   return FALSE;. H( v/ D# Z0 {/ |
  423. }( P. v8 }( Z0 j

  424. " |4 i5 }+ n* m* V4 `. c) Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"7 P3 F  Q0 [" c
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    8 U' y  ?! U2 B/ D1 l" ?& j
  427. : I8 z6 A/ J+ W
  428.   f7 m* V7 x+ @6 t: {9 I

  429.   w# _! ~1 ^9 _  [8 g
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile). p: p. M& ?; E( f% S8 }' g
  431. {9 }7 o9 r* J" ~, _0 f
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ' x! W+ X  S- B4 b
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 ~/ `% l4 \- O  m5 y3 c3 `+ W& C
  434.   {6 ?0 s6 z- Z5 K
  435.     char szLanguage[50];
    % i2 K; b, s& F/ w! V
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' o6 R# N4 P- y) ?0 \: K
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;5 A: ~7 u$ G0 \. D9 h  A
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ g) ?8 h5 E+ u0 T+ g- s; v
  439.     else                                   m_iLanguage=ENGLISH;
    5 r; {2 N5 Z! F8 W
  440.     char szRegister[100];* Q* H7 t' q5 I+ C* a0 X  {* r3 H
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . c3 R: {$ j6 a% @
  442.     strRegsName=szRegister;/ T3 n, }! p" w5 j- a! v
  443.     char szPatchURL[100];% Q6 ?# n' Y& |1 C- f* f
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 y. N" V: f6 z/ l; X* r. S9 i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ h9 O+ D( p: U
  446.   }
    + B$ s" l% }  _: P0 V. J
  447.   else' X; n8 h4 y6 P% v0 G1 [" d: X! T+ l
  448.   {
    + V8 U4 b1 ^% @! g8 O7 i
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. _8 y4 O  T/ {* c
  450.     strRegsName=DEFAULT_REG_URL;
    6 K, R, N7 U  J% {/ S$ r
  451.   }% O$ W! H- [$ v0 k5 T: b
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    & j) Z& U" Y* f6 m
  453.   {# Z& S/ `6 ^- b6 ?% F
  454.     char szIP[50];
    - c! Z/ x$ @% ^: R6 Z0 ?
  455.     char szDIR[300];
    6 E" m0 o* y. p) s% v
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")): |) ^' z* w) Y/ ^# x- v
  457.     {
    " @1 o0 ^& E) X2 I! n: a
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");: o6 v& _9 q2 ?& O
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");/ T2 u, b3 j1 ]1 y7 I+ b' K( V) K
  460.       strHostName=szIP;. j4 j  J/ @% v; y! T
  461.       strHostPath.Format("/%s",szDIR);# e. ?7 i2 O5 L5 A4 R
  462.     }2 [. B! V) R  V- ?8 U! m' k
  463.     else( V& z! s% Z5 h# x# o; ?* i
  464.     {
    ) _% y2 B! m( I0 M3 j3 A
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 }2 l: f6 k7 j" h8 l# K/ a) Z
  466.       {# z& p: A4 ?# w! E
  467.         char szLanguage[50];4 A. \. b7 X( V# B: b) l' U
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! a/ F0 v9 K( }: j1 h
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, _8 T" d: v7 N1 o' L4 D- B! V
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  V: K# E0 S/ X3 _9 i
  471.         else                                   m_iLanguage=ENGLISH;% s: J% R% \( z& D5 B* W; J+ V
  472.         char szRegister[100];3 i/ D, k# b, o0 n2 {
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 z, s5 m6 K, t' z1 V' A' V
  474.         strRegsName=szRegister;
    5 \+ D+ g3 y4 s) }
  475.         char szPatchURL[100];) m3 }1 |9 a4 v0 l
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( q# X! x# ?! G7 O) Y# a9 S+ w* f
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ n+ [* G/ k, K4 A7 i  i
  478.       }& w( @# b( k: a% B. w% q2 u
  479.       else: ]9 V, A) r7 v; p6 B! K/ z
  480.       {6 F# e8 K2 f8 e1 P- \% \9 }3 n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + i% P- K, X8 w5 `1 h
  482.         strRegsName=DEFAULT_REG_URL;
    6 |4 U) L) W. S  e6 e. ~
  483.       }
    - l( @& d0 F- _6 L" W( M
  484.     }' u% G' _: r  ]( c- ~6 A. ?
  485.   }
    4 T: Y0 R2 o2 z* F# q' g
  486.   return true;# x" F, C' }: \8 P$ M6 D
  487. }
    2 G+ ^4 Q) q$ g0 _0 r$ e4 b# v; Q/ C% z
  488. / V( _- g0 c& ]; ]
  489. #include ".\ZLib\unzip.h"
    ) \. M* t$ Z! |0 S
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);. x: P: n7 N, U+ H9 U& |: }. ^
  491. /////////////////////////////////////////////////////////////////////////////4 R, b& U/ Y& n$ w3 S7 i
  492. // CRevAppApp initialization$ L- X# U# `# a

  493. 0 D; p  Q, s9 p
  494. BOOL CRevAppApp::InitInstance()
    " D7 H6 J4 `' z% j! A
  495. {
    4 e! y) {; l: A* N, B% u) @0 l6 m& M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];: u( ]3 A$ y+ c4 H% B6 f
  497. 3 z& \5 u2 E& r5 y8 k$ j
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);* Y: z- s  q% r! R
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + N; p4 V$ ~2 N) I3 U2 I
  500.   {
    ( T6 P, u, |2 f# f
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    . P! e+ l! T& K5 ^( S
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ! `% ^4 Y# u- `6 v, n
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))) k: @1 W* m0 e; s
  504.     {
    7 U& N( U7 D0 s% f/ V* o5 o
  505.       strcpy(szPath,szPathTarget);
    5 C- k% L" i; e6 k( M& b5 b) w
  506.       SetCurrentDirectory(szPath);' v. K) i. l" O6 a; |
  507.     }0 |. d, b, z3 i! h
  508.   }& x9 O1 D" S' Q  o* B
  509. #ifdef _DEBUG+ |. ]' N4 i, c& ~
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" ?5 j5 e3 Y% D# [' H! H6 g1 I& N
  511. #else
    ! K# s. f! t# `0 \1 t
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 H4 [8 s! g1 j) o. R( z/ m) ~& c
  513. #endif$ F' C5 h+ Z2 H" Q
  514.   {$ B. p% N2 p# M$ ~
  515.     char tempFileName[MAX_PATH];
    9 M! z' N+ M; T% u- H, S- L2 f% f
  516.     strcpy(tempFileName,szPathSource);
    9 X  K" l+ t% }9 {% N% Z: J# k9 x
  517.     tempFileName[strlen(szPathSource)-12]=0;
    , V% h8 C( a/ b
  518.     strcat(tempFileName,"\\$CSUpdate.exe");" n* h  k; r2 [" `+ w
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ) [6 m" w4 b, S7 [) w8 h! c/ Z' t
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    5 q/ l3 U, Q5 E$ @5 m
  521.     return TRUE;7 H& d' G; l  \; v
  522.   }
    & K6 ]+ k+ o) D( b0 P% }! N; N
  523.   // Nuke 0118: Delete run.exe7 e. ?) ^9 @3 _4 y& c) P9 Z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    + _! {7 k: v/ d3 g7 x/ o0 v9 v
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");' u0 a& J3 }9 P4 _9 M4 D! Z
  526.   if(!ReadCfgFile("Config.ini")): u! E0 W4 P! Z7 |5 I
  527.   {
    6 X. e# X5 t* X1 v0 n6 @1 }; p4 p: `
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);5 h/ C( z1 I9 E: ^
  529.     return TRUE;, o6 k( U3 G. g# ~
  530.   }# c5 x( B/ j( ~, N. Z& F$ U$ x
  531.   HANDLE mutex;6 O3 d$ @+ V7 ^6 s
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    0 m* g3 G! i9 I, H7 _0 ]
  533.   {
    8 o; _' [% m" a. b& b2 w* M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    " K, Y1 y2 U& ^
  535.     {
    8 G; r4 i/ [8 D8 q
  536.       CloseHandle(mutex);
    $ ^2 `$ g+ h- S: e, S
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* Z% O! J: J& A1 q" ~6 q3 g9 A9 J
  538.       return TRUE;
    6 ^- Y0 R6 ~: f( C: L+ A
  539.     }3 u9 _4 x* h4 L/ A0 f
  540.   }  . D4 ]& P9 G, k4 t7 f
  541.   CloseHandle(mutex);
    % Y( v* Q) a* R- D3 I0 _1 v& u

  542. ( l) m2 j2 K8 H4 u  O' N+ A; X
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    & A% V$ N9 B( S4 ?% M

  544. / |' {5 B+ ~( I& P7 q; \, P
  545.         AfxEnableControlContainer();7 a+ w- m+ h- {$ u

  546. ' V7 W* `0 [& G, n: t
  547.   bCanUpdate=FALSE;
    / n% x6 o& U+ I9 n2 w. x
  548.   dwStartUpSteps=1;3 H* B- X5 t* A+ X9 R
  549.   dwProgramState=AP_NOTHING;8 H2 B/ J' _+ G5 i/ Z% T4 ~
  550. 4 |/ o+ f8 _% U/ C" Z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);' O8 {* |! y# j, K# p! z! X2 k$ ^
  552. # c" C+ F) q3 @. @# C
  553.         // Standard initialization0 u: E1 k* Y  w6 b% h
  554.         // If you are not using these features and wish to reduce the size
    4 I4 O! Y8 J7 B$ R' l6 Y4 q$ c
  555.         //  of your final executable, you should remove from the following/ _3 z! d* k& d
  556.         //  the specific initialization routines you do not need.
    + f$ q! f0 _' `% y
  557. 1 C- g( W) g7 b1 D$ t% W8 O  Q
  558. #ifdef _AFXDLL
    3 I! y* Y) F/ c5 z( b
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    3 @$ H" R9 W, Z  a
  560. #else
    $ Q- X9 m& c" v
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    . E6 b1 q! j) g5 q
  562. #endif7 W* K' G5 d+ W8 r

  563. & r% j1 t* b5 q5 N! A- {: ~
  564.   dlg=new CRevAppDlg;
    ! ]% o2 b8 x1 N3 O5 _) B
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    - T2 q; A0 a( K$ o; x4 O3 F2 [. {
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + u$ t- o  ~9 o$ [
  567.   m_pMainWnd=dlg;' c1 ?0 f+ Y2 X! V2 E
  568. ; o  ?) J# f, M/ V3 H- X% U
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);  ]! w8 \" N; q  J/ b/ }
  570. ! g+ c% `  n3 x8 e
  571. //  GdiplusStartupInput gdiplusStartupInput;8 L$ O* l% a; F( x
  572. //  ULONG_PTR gdiplusToken;
    + c" t) L2 X& e5 P
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    & M0 g1 ^, {& u8 y7 _% Z
  574. : u! s1 U! ^; ~' b  v/ K  M0 U0 h
  575. //        CRevAppDlg dlg;  Y: e* `5 |* x+ L; p3 t9 u+ z
  576. //        int nResponse = dlg.DoModal();% o* ]4 E; ?/ S& ^+ T
  577. //        if (nResponse == IDOK)
    $ @- O* L, t# z1 c( _
  578. //        {* |! U- z, W# H0 \! r) Y3 ]$ u- M7 ?% V
  579. //                // TODO: Place code here to handle when the dialog is
    ' @& L; a  b3 N
  580. //                //  dismissed with OK
    ' H1 Z+ G5 ^8 C# }
  581. //        }/ K7 }# U; W/ C: p' j
  582. //        else if (nResponse == IDCANCEL)
    / i+ K3 q3 `  f, C& }2 C& d. g
  583. //        {
    ' G' h) g4 Y" {
  584. //                // TODO: Place code here to handle when the dialog is* I& z6 H; z0 o1 G) ~# C! x
  585. //                //  dismissed with Cancel
    : ^: Q2 R! Z) X& N/ y6 S% d
  586. //        }
    6 A/ l( X' Y2 l3 |" l, [
  587.   {1 s) ?/ W* H
  588.         // Since the dialog has been closed, return FALSE so that we exit the# J) N4 J5 N& L# n3 M; D" v
  589.         //  application, rather than start the application's message pump.1 C0 V5 g0 Y2 \5 V3 k
  590.         return TRUE;0 |% m1 W0 P9 Q; j+ [: g  F
  591. }
    ' r: D. F2 t5 F5 T
  592. 7 J9 R5 p, G) F# N$ h  B
  593. char *CRevAppApp::strtok3(char *pSource,char *token)' ~" e. a; b& v8 X3 Z- m! i7 A
  594. {
    # b; k' b  V. h9 ]) ]6 b# E' ]  m
  595.   int i;6 g) a0 k& ]8 L2 q- [; @2 d8 m
  596.   char *szRet;
    0 y/ k5 _- G( s2 q3 D
  597. 2 w6 z/ j+ w8 W% U+ {" u3 h
  598.   if(pSource) { itoken=0; sztoken=pSource; }( j7 J6 T* \" C5 k# h: R. W
  599.   if(sztoken)+ c. V$ e3 s  E6 M8 \5 H6 k" e& ~/ g
  600.   {. c! n, F5 ~' I1 t8 |' o
  601.     szRet=&sztoken[itoken];
    ! C9 V6 H  a& R/ u
  602.     while(sztoken[itoken])+ F0 ~/ c! L6 V% R* ]% C2 K
  603.     {
    2 x- p$ p  n; _" R' _
  604.       for(i=0;i<(int)strlen(token);i++)+ f6 ?) _5 w7 K% N6 z4 X
  605.       {
    , u; W! y9 [( ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    5 L2 B( p/ j" Q9 S0 {
  607.         {- B- o5 P* ]6 m
  608.           sztoken[itoken++]=0;$ I' G: A1 r+ y+ x* w% r
  609.           sztoken[itoken++]=0;
    & Z4 _# {9 B+ n( g% N
  610.           return szRet;
    & F/ d7 m/ ?/ j$ ?$ `
  611.         }& \: B9 ^. \) v8 _
  612.       }
    ( G/ ~3 I" j2 [! k# D! I2 w) F
  613.       itoken++;  ^# s2 N, b( J9 ?9 ^( F5 g
  614.     }4 T* b- W& M2 s& I
  615.   }: d( f6 H5 C( X2 U) x6 F
  616.   return NULL;
    . _% }- v* n7 U; B6 e
  617. }
    3 K, Q; ~0 X2 o+ ~" d& Z

  618. # a5 Y/ ~$ o" Y7 L' A1 Y! R
  619. void ProcessProc(long Total,long Current)
    + j+ O" @* n) k! Y0 l9 n4 M
  620. {
    + {4 y; X9 x0 c
  621.         MSG msg;: R/ r# c5 P. L% O) K4 q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);; n: f8 f4 y3 k  ~
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 u. }) S& y* R+ E# {
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    5 ~' ]1 f. |+ Z4 M% b) O: x
  625.         {. M4 d& `5 I3 S
  626.                 if(!GetMessage(&msg,NULL,0,0))
    7 D. Y! p" n$ ^' A3 M
  627.                 {
    ( S/ ~: `4 F/ ~4 `: k  J7 U
  628.                         return;4 _. v9 _: Q( z& O
  629.                 }
    3 p' o9 O# v4 n, _0 m8 ~
  630.                 TranslateMessage(&msg);
    9 i" X/ @  D/ f% x9 A/ W
  631.                 DispatchMessage(&msg);
    8 K( Z3 L" h2 I
  632.         }        / D7 V9 n! d9 }% Z; g, g
  633. }' V. f* t* v: p! C
  634. / P. m7 J5 _/ W" Y% |3 r2 r
  635. BOOL bFirstChar=TRUE;( f- d+ i3 \. D8 F
  636. 0 b; w! L$ D2 q3 P9 }' e7 a' ~+ ?
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    3 A$ r2 e' b, V* J2 v+ d" n5 Q
  638. {
    ( ]" i' K& u( N' T) B, d1 X5 E$ [
  639.         // TODO: Add your specialized code here and/or call the base class% Y4 R2 J# _3 |1 |
  640.   switch(dwProgramState)8 n/ \; o4 w" C. s& ]+ P
  641.   {. \! y9 U: S2 B8 m
  642.   case AP_NOTHING:( r1 F4 D1 r0 d, v- k# Q
  643.     switch(dwStartUpSteps)" i, `8 V4 O% u
  644.     {
    2 X1 A. N, t+ u$ I
  645.     case 1:
    7 g: X! S1 L5 Y% g* `$ y9 n
  646.       {
    9 h: b/ d# C/ S0 T* j
  647.         int i;
    * J9 E" U& G% G5 C& W; v
  648.         CDC *pCDC=dlg->GetDC();- U; W$ J# u( G# x- R9 q
  649.         HDC hdcwnd=pCDC->m_hDC;/ u, E& h% @) ^/ W0 e& l: Y
  650. //        Graphics graphics(hdcwnd);- ?  z# q6 `2 K2 t1 j. n
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    1 O( [6 ]: r" z- Y* _3 v/ B5 G- v
  652. //        INT iWidth=bitmap.GetWidth();
    6 [$ z) l( z9 ]/ E; }
  653. //        INT iHeight=bitmap.GetHeight();
    7 r+ v; P- m' H: b, i
  654. //        Color color,colorTemp;
    ; s. Q" G% K- J+ J1 a2 p$ J: T' r. J
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    7 F9 n5 g" a7 {% N" R! O
  656. //        {
    : t8 }$ m; Z- c  {! j
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)1 X6 Q/ W. t% c& k$ T3 X
  658. //          {" m7 P) \% Q( }8 _$ {2 e
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ' I' E/ _4 s  D1 T5 |( y
  660. //            colorTemp.SetValue(color.MakeARGB(
    3 n, r  J1 x* p9 Q
  661. //              (BYTE)(255*iColumn/iWidth),
    3 M3 {& h) F6 ~. L
  662. //              color.GetRed(),
    % t- I7 S; V4 z( U
  663. //              color.GetGreen(),2 m. @2 I  t! Y( d' c% y
  664. //              color.GetBlue()));, K" C, p/ F' V- V
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);* l. n% O" L& @
  666. //          }/ @; F& ?& b# }$ K' H& \$ |
  667. //        }8 M/ b/ d8 L7 Q/ i. o, o2 W
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    . l' a* `/ B. I. H$ R
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ W2 n9 z* \) Q) t0 q5 J% E
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    2 S6 Y# z* o8 {& ?; v
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 Q: l* D  O  j, p# j( Y
  672.         for(i=0;i<240;i+=8)
    : ?5 ^1 ^& c! @3 o) s+ s) i
  673.         {
    7 [0 s" q# p" ^7 q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ a( w4 b7 m1 ]$ o5 Y: F
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 r: L0 ^! C8 E) U$ r# x
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);8 w9 q7 s0 v3 m
  677.           Sleep(33);% I3 x/ w/ P; U2 v( @
  678.         }0 x0 P8 ^9 |' w) b" N9 w$ x
  679.         Sleep(1000);
      m/ O) B3 |' r) N7 K, s6 J7 @
  680.         for(i=240;i>0;i-=8)
    8 B% z9 r. G+ e5 l% w
  681.         {
    ; z" \& h7 p, i4 X* w' V
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 n& [: h$ U: q8 r& [" ?2 N' k
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 O$ p& n" P# m0 m
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , ~3 K2 l7 j, ?& V' `$ B2 m4 n
  685.           Sleep(33);, n8 J. U7 E! F8 v' O5 j
  686.         }
    * k. @4 _8 b9 z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
      ~0 b) P# Y3 x
  688.         dlg->ReleaseDC(pCDC);) O( w4 [/ M9 v1 ^( [  R8 U
  689.         DeleteDC(hdctar);
    $ q* q' I2 J* E) ~' `+ t
  690.         DeleteDC(hdcsrc);
    2 d7 k: T2 X+ K
  691.         DeleteDC(hdcorg);
    * k$ Y# b& `: J! r8 w
  692.       }/ d* g* g% y1 D, J8 P8 j
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ; Q6 R5 c* _  w% y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ) y, y2 z. B4 N/ R- T/ ?. F
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, A/ B/ \, n% k, r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    : @1 X0 w" z  ^. w6 z; |
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ M, h4 _& c. X) X# S$ Q
  698.       if(!Dn.Connected())! ~4 H* c. J$ X  C+ \3 h
  699.       {8 H2 y" ^3 M- h' C, b9 F3 x9 ^6 T
  700.         dwTotalFiles=1;
    / z) H6 s- _' e& u9 B% D
  701.         dwDownLoaded=0;; f% N+ a& E/ P+ ^1 ^' l
  702.         bSilentStep=TRUE;
    % q% b1 X! l& c7 _/ J& w# n: W
  703.         bCompressed=FALSE;
    ' t" B: G  B3 z, Z2 {
  704.         strExtLocal.Empty();4 L; z( T4 u- M9 I
  705.         strFullName="readme.txt";! C7 i2 e! d8 m8 X
  706.         dwProgramState=AP_CONNECT;; V) r5 X1 V, M2 k* c# L
  707.       }
    * A$ K* ?+ G6 a
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
      r, _  `9 o  W
  709.       dwStartUpSteps=2;8 k# p/ Q2 j6 X( N0 O0 P/ g. `
  710.       break;
    6 Z: ^: o2 ^! y3 S' U) q. P* f( I0 K
  711.     case 2:' t+ T  U# J6 u" V7 K6 @( L
  712.       {2 k2 |' M$ m6 J  n; c
  713.         int iEOF;
    ) J1 N( x2 k$ U
  714.         FILE *fp;
    ! a- j' ^0 v5 B
  715.         char szString[512];
    * f) @# ~% B3 Q" e; V9 K
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ! q" M% ^/ ^# \. \( m* ~
  717.         if(fp)' w6 o& \1 J- g. b0 j7 d
  718.         {
      t  h$ p! W' v# ~* A6 g
  719.           do
    ' h! L# _" c: g7 Y1 m( G
  720.           {6 `2 a( f' a6 D8 D& T
  721.             iEOF=fscanf(fp,"%s",szString);
    5 n/ W, a! Y6 {% i( n
  722.             if(strlen(szString))
    + s% w6 v, H6 M0 h5 g3 e8 ~
  723.             {- Y, p; l+ c0 R( m. I0 R+ f
  724.               if(bFirstChar)0 s, k3 {; ?; b- E: E9 A% s" O
  725.               {
    & P5 Z& \1 T! S' L, b# f2 l
  726.                 bFirstChar=FALSE;
    9 C8 B" j9 t% J$ G7 W/ [
  727.                 bConnectIsBig5=FALSE;
    0 f" N# B( K- [8 ]* e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;* e, p# F& ^3 n
  729.               }
    # M) L! h- d' x* l! @( u% i0 n/ q& Q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));3 K! m; s1 g$ P( K5 R* R7 b
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ; V; c, g) i. f! X. W4 i
  732.               dlg->m_ListText.AddString(szString);1 Q, \. p" T" q5 E3 o% f
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: O* U1 W0 N  F2 r5 N
  734.               *szString=0;% M4 n7 r& L6 |! b* {+ W8 L
  735.             }
    : y6 m- ?6 B' m9 Z' C
  736.           } while(iEOF!=EOF);
    2 Z7 g; O4 }, h$ }+ `1 g
  737.           fclose(fp);
    # M! p- W9 |. C! ]$ I
  738.           unlink(".\\DownLoad\\readme.txt");5 v8 Y, V/ |4 p8 n( p; z: p
  739.           dwStartUpSteps=3;
    3 V2 m0 R* H1 v5 b* I
  740.         }
    3 U) r) Z. L" Y: T+ x
  741.       }
    6 M$ H) [+ |1 _- z9 ~" a
  742.       break;$ {4 y6 v& ^. `! G
  743.     case 3:( z1 e. x- \; H6 d6 m
  744.       if(!Dn.Connected())
    ; ]$ T3 n' q6 C8 v( K; s; ~- M
  745.       {
    # v2 K+ W5 b2 i+ W% r, m
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);7 {; Q' E, l, T8 T, m5 y
  747.         dwTotalFiles=1;/ i7 `/ ~$ d( m6 U# a
  748.         dwDownLoaded=0;: j2 c: P% ?2 h
  749.         bSilentStep=TRUE;
    , \: J0 s0 j+ x" d: i
  750.         bCompressed=FALSE;
    5 q/ }0 h. X* |) N5 X( K
  751.         strExtLocal.Empty();- ^" d  p1 v" e6 K( P
  752.         strFullName="checkversion.txt";5 k3 u7 ~* e. X8 \# w& O9 [
  753.         dwProgramState=AP_CONNECT;& g+ R, \1 {6 ]
  754.       }
      X" x6 c' g4 e, s4 t. }5 b% j
  755.       dwStartUpSteps=4;! v' B% w0 k- a* Q3 [, L- Q
  756.       break;) j6 }# }$ U0 c. p
  757.     case 4:8 K3 W0 F3 ~/ G$ c' @% I" P
  758.       {
      t6 Z0 d2 _+ E) r# s( v( `
  759.         FILE *fp;6 ^$ j& `# |4 a3 Q! {9 k+ q/ g& m& d/ {
  760.         char szString1[128];& y. U7 l3 d1 C3 u
  761.         char szString2[128];. K3 A; q' h1 o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");4 M+ ?$ a' H- d. C0 H: V
  763.         if(fp)# [0 Y4 d' p# g. G! C
  764.         {
    - E( V. ]1 _% d! S
  765.           fscanf(fp,"%s",szString1);* E! p; x% b' M: h3 i) A  E' \6 o+ a7 R
  766.           fclose(fp);
    4 d1 ]1 j. |( H+ s9 M2 N
  767.           fCheckVersion=atof(szString1);3 a5 I: x+ s$ l7 U
  768.           fp=fopen(".\\checkversion.dat","r");
    3 Z1 [$ I* L5 I6 o9 I" y' y
  769.           if(fp)
    8 z# `0 X' N" J9 N: X) J" s
  770.           {; |3 a( [5 q1 b( [5 V' `
  771.             fscanf(fp,"%s",szString2);3 H4 {( h* {8 n( B
  772.             fclose(fp);$ y; P& D; }+ S0 h5 c9 N
  773.             if(atof(szString1)!=atof(szString2))# I4 [- s5 S7 j* P
  774.             {
    7 w' u5 }8 e" F. i
  775.               if(!Dn.Connected()); c# g& T3 e$ P( x1 ~2 Q
  776.               {
    # D9 L( o2 H& O" E3 P8 L* F" z6 b
  777.                 bFirstUpdate=TRUE;! B: A! J2 |4 f+ N% D
  778.                 dwTotalFiles=1;
    : ~( I) `- _4 J+ W1 D- D
  779.                 dwDownLoaded=0;
    3 l8 s+ u# T! i/ U( ~7 t. U7 _
  780.                 bSilentStep=FALSE;) R! C6 K; k+ c" e# B
  781.                 bCompressed=TRUE;
    , u2 c# ~  H8 {
  782.                 strExtLocal=".\\DownLoad\";: F. J! A( a/ ?* q. N
  783.                 strFullName="update.txt";$ M: ?) T, A' G9 Y
  784.                 dwProgramState=AP_CONNECT;- I: w- x- k/ o' `" N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " X" o2 T9 b3 G3 @% f5 I% k
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( J: J9 {9 S2 x' K  S7 y- _
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");9 F( k" A: [; K6 c! ?, n5 S% ?
  788. / K. X' k( A3 i$ j4 b! y
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ R8 Y; t5 j' ?
  790.                 unlink(".\\DownLoad\\checkversion.txt");, x8 X8 ?. C2 a" s6 J- l" t2 U: d
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' Z7 g8 I/ S9 \1 x8 Q3 ~& ?
  792.                 {5 U9 D0 h+ |/ J& M
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    % o- {% i& g. [
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");/ n( z+ m) ]' [
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ; n- o: D% y% O8 R9 |5 W: o0 q7 G- H
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 ?) \" F( A( _( Z) _

  797. + ]# L  J6 x3 [; [7 g
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : J( h7 e2 Z5 k! E
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  `* z% i" o* p
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 t" ^2 F" k6 t# c# j* d
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. L- B0 K7 V4 ~" m+ H  k$ n  `) u
  802.                 }9 q2 p8 R5 h% C3 @7 \
  803.                 dwStartUpSteps=5;
    9 c+ Q% J3 K0 R, U8 c
  804.               }
    7 [( ^& M3 ^* }3 w. X9 U
  805.             }2 m- D; E+ s8 x) x* A) v
  806.             else
    / \# {$ J- N, T- T: ^
  807.             {& U) X: c8 O% d# {4 q; S$ g% N
  808.               unlink(".\\DownLoad\\checkversion.txt");
    , T8 P, }2 |3 n: u& d( [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    1 J2 T3 x" }8 \( C3 A
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, R  O/ v! q2 p9 |
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    : C7 J) a, J7 r
  812. 0 j+ ~! ^$ }/ M/ s
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 O  `' t/ o$ n4 l* ?2 _
  814.               dwStartUpSteps=99;2 |6 M& f9 U9 V7 ~5 u0 F: E9 g
  815.               bFinishUpdated=TRUE;4 q4 o' H! ?4 C9 n6 c2 P- v# s$ _
  816.               bCanUpdate=TRUE;* n) ?. F) _2 Q$ M) t
  817.             }
      E& L  X: s* W5 n2 d
  818.           }
    " E5 l; _. [4 G8 \
  819.           else  N: Q% w. `- @3 I" N4 a
  820.           {: q) F1 N/ J; n! U1 D2 z
  821.             if(!Dn.Connected())$ i; W0 j+ c4 D7 y; ]
  822.             {
    " `% S5 |) a" @2 Y
  823.               bFirstUpdate=TRUE;* f5 P6 \5 U! M9 }' d. W
  824.               dwTotalFiles=1;% n0 _5 d  j6 ]7 o9 W) l" I2 L
  825.               dwDownLoaded=0;
    ; H0 d  y7 d2 i: v  [! |
  826.               bSilentStep=FALSE;* n  \# X$ U+ {( A
  827.               bCompressed=TRUE;
    / S; i4 f, A  d4 r4 K
  828.               strExtLocal=".\\DownLoad\";2 ~! i. C6 U8 H
  829.               strFullName="update.txt";! u) P2 p) R0 M4 D
  830.               dwProgramState=AP_CONNECT;
    0 Z+ u$ p* Z. Q! R8 j& |1 x
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 C- B. v! U5 E# K& d" p! ]8 D! E
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) Y7 F; x5 S& Z6 ^+ `
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");$ ~- E* n1 Y& \, B5 S5 A% g% y% L
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % H+ }: R  F( ^1 i+ O
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ; |; B% d3 p" d8 L% N
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    % f- ^* S: ~" }5 q( A7 g/ B+ O
  837.               {
    4 Y# Z; ~8 |, c( l' `$ h
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");1 H% g6 G) Y' @7 ]8 ]
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");4 f6 Z9 j6 O8 ]; T7 f
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");/ k3 o) ?# A" X. N& |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* {2 \; g& j3 Z, e/ M8 I9 |
  842.                
    + k2 X0 [1 Y$ N0 q
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    0 ?" T1 G  Y) t- T- s  S$ Q9 }; ]: L
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ \( H$ \. y; y6 S% r
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ p, g0 d  I2 O& }' H! ^* K
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, S9 a. G& y& F! y) J% }
  847.               }1 ]! d# |9 j* H0 `$ X- H, m
  848.               dwStartUpSteps=5;* ?' y  p1 L8 Y; }% N
  849.             }
    * X& @* n: C( w. P9 J6 p
  850.           }
    - A  X$ T" \/ C( L2 X) `- l2 q
  851.         }% t# N" L' W" _0 ^& }9 e, k
  852.         else
    $ I7 P; k( k& {: @" m, c! g
  853.         {* t# E' s, D* [) }) E
  854.           dwStartUpSteps=3;
    ! K- D+ T6 s9 n+ ^9 S0 L& q  }
  855.         }
    9 y6 f+ f- k4 J6 q
  856.       }  Y0 f; t+ K4 O% }: e
  857.       break;4 P' A% c0 F7 @  ]6 ^+ O: J" ~
  858.     case 5:
    + ?3 f4 G/ j9 }0 u
  859.       {& \% y7 @5 l. g! \( ]% V; S8 B
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    . u( ]  h1 M5 U
  861.         {
    # _- _* |1 s8 i
  862.           int opt_overwrite=1;6 Q5 t' D; o! \& T
  863.           int opt_do_extract_withoutpath=0;
    - f. `5 d" ~* T
  864.           unzFile uf=NULL;
    ' V2 G4 z  q0 y( i& t

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

評分

參與人數 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客服返回頂部