找回密碼
 立即注册

CSUpdate.exe源代码

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

3 F* R# @+ q1 |  @9 E
  1. / RevApp.cpp : Defines the class behaviors for the application.
    . j: T5 n6 Q* U/ H
  2. //; t2 U. F& w( v7 t) j6 k9 B: i
  3. % f/ W  G2 y6 \7 `
  4. #include "stdafx.h"4 l& L" L4 u7 w3 }0 ]- ]5 z

  5. : R" b. u& I  n. U8 g: J6 ~% J
  6. //#define UNICODE5 x1 u# g8 D9 }) U. K- L# n
  7. //#include <gdiplus.h>4 h, z9 [% E4 u
  8. //using namespace Gdiplus;0 N8 U; C, m" B

  9. 1 u, G  V/ c" j/ L2 B
  10. #include "RevApp.h"8 o6 @) r- W# z5 b' |9 c+ y
  11. #include "RevAppDlg.h"2 H) a0 x5 c# b+ S& ]) P+ J
  12. ; u/ p* t7 S& V/ X$ |$ s
  13. #pragma warning(disable:4786)2 u1 J2 m9 x, e& Y9 y. b. T
  14. #include <map>$ X# ^/ `) Q! G# l% P
  15. #include <list>
    2 a" x  n+ N7 x& c2 w
  16. #include <direct.h>
    , o$ h. k4 k; ]% w6 J

  17. 9 X  C  c, I+ l
  18. #ifdef _DEBUG# k) N! o" i. ~" }- r9 W% R
  19. #define new DEBUG_NEW
    , o9 B( u6 F/ c$ e5 A( B  [5 A- [
  20. #undef THIS_FILE: I7 n$ b# T0 `4 [
  21. static char THIS_FILE[] = __FILE__;. y- S- W: J- j- g2 c# S
  22. #endif/ n, n9 I, b# ?: r. G6 c5 W4 s* N1 F+ B
  23. #include "SkinResDef.h"
    7 a. g! o" T+ u8 g/ K) g
  24. #include "ChangeBG.h"4 p2 n+ z3 Q- x$ ^- r  ^2 d6 S
  25. #include "AFXINET.H"" Y+ C" S; b/ Z3 w

  26. * D! Q# m& g4 i; q) M
  27. #define TRADITIONAL_CHINESE 0
    6 `/ Z2 |& T6 M2 M
  28. #define SIMPLIFY_CHINESE 1
    7 e: m. O. Q/ A2 n3 a8 m
  29. #define ENGLISH 2
    + M# m  R. d4 N6 s
  30. int m_iLanguage = ENGLISH;
    ' Y. z  X: z4 E2 l/ ~7 U
  31. /////////////////////////////////////////////////////////////////////////////8 D- g8 v0 \! G/ {9 B) L1 d
  32. // CRevAppApp
    7 ^+ ^0 U$ {( Y; h/ {' O' _: E  U

  33. 6 _" O% O: ^6 |% }4 ?! ^" a
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)% Y; B9 H- J- P! H4 F
  35.         //{{AFX_MSG_MAP(CRevAppApp)6 w* v0 D- D* c% M" ]% U0 O8 w
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.8 l" q7 i7 o3 i
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!, x4 x% I* E3 q: l) h
  38.         //}}AFX_MSG, \/ j/ _/ g! {: P! t
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ' y! g% {, |+ }  u" Q3 X$ ?
  40. END_MESSAGE_MAP()
    0 u' q0 O. a- [/ E  n+ o; P, v
  41. ' H- q2 T; K; z' y
  42. /////////////////////////////////////////////////////////////////////////////
    1 D, h0 f3 d" v# `( p* G& e
  43. // CRevAppApp construction
    9 A9 k* R# {6 c% g

  44. / m6 h+ V1 S! v: ~
  45. CRevAppApp::CRevAppApp()" J' m: m, H9 j6 c
  46. {: {! L) B2 L; S. M
  47.         // TODO: add construction code here,+ q2 {, x; {0 W7 ^4 K& ~
  48.         // Place all significant initialization in InitInstance
    3 N! q3 t' o! A; R+ c1 x: \
  49.   bDisplayIsBig5=FALSE;" W( w1 C, }7 G4 \9 t, _( W& f
  50.   bRestartUpdater=FALSE;
    ! V# J/ D* D% H) ]
  51.   bFinishUpdated=FALSE;
    8 s3 K2 J5 _8 a3 r
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    3 }5 n2 B8 e& e$ G- g; e6 T
  53.   InitChangeDataBig52GBKS();/ o4 I, Z7 t. X- z; {( L* s
  54.   InitChangeDataGBKS2Big5();
    0 r& k' [% D! Y' @. i
  55.         //
    ) M1 Q0 p5 l) R% P) I
  56.         bClickRunExe = FALSE;
    3 h0 \9 z$ z, w- H7 I  D# m  b! Y
  57.         //
    4 \2 W4 e( H' f' ]/ f: M
  58. }9 |' V+ m6 a6 o
  59. 8 H$ V0 E3 `* `* W% U/ \$ C
  60. CRevAppApp::~CRevAppApp()+ R+ r6 h$ ?0 c8 ]. y. }! d
  61. {
    $ a. |# G9 _6 ^. @7 U/ p9 o
  62.         // TODO: add construction code here,4 J7 n" W9 j8 q% Z
  63.         // Place all significant initialization in InitInstance
    5 p& j6 x* d( z( c8 K
  64.   EndChangeData();, q3 F2 v# ^7 U" ?) i* T8 [0 |  [
  65. }1 `* e9 {8 Q# c7 [% }. m
  66. % E2 \2 a. \; `' h
  67. /////////////////////////////////////////////////////////////////////////////& T/ B+ E8 k: h; `9 e  B# R
  68. // The one and only CRevAppApp object
    2 P; c8 _, X: ?, V' Q

  69. $ L( |5 s' P+ _! m6 t5 @6 {
  70. CRevAppApp theApp;4 D5 G" A" s, j9 B/ U

  71.   ]$ @8 J5 A3 F
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : q' @+ u% F! G8 G
  73. {* U* C3 F9 i0 q
  74.   int iEOF=0;
    2 d, V" E$ @1 K# @( h; Y+ ^5 G
  75.   char szTempName[MAX_PATH];# H3 f2 t; W' U$ ]% n7 m
  76.   *szFileName=0;+ p0 q, \: e+ E; G% {' d3 R( Y4 M; z* K
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 X( T) M( P2 a" c$ n2 s
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')9 `9 e" [; @# u
  79.   {& z$ j; ]" M( K/ y2 }3 I& Y
  80.     strcpy(szFileName,&szTempName[1]);
    " _/ }+ k3 I- ~0 l
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    # H: M6 p& u; g; s
  82.     {- P) F$ C8 a5 i4 r* }. F% F" F
  83.       iEOF=fscanf(fp,"%s",szTempName);
    $ W0 g4 r  \1 T
  84.       strcat(szFileName," ");
    7 q+ i7 O$ ]- Q: ]
  85.       strcat(szFileName,szTempName);
    . s5 X% b3 o  k  [: b( i9 d8 y- r
  86.     }* e7 B( a' @) ^# P% O- S9 J
  87.     if(strlen(szFileName)>=1)
    4 ^& i- ?9 s8 [" ^* E& L. u
  88.     {
    8 e$ r5 B# Z" O" A/ U2 t
  89.       szFileName[strlen(szFileName)-1]=0;+ c+ r# D0 h2 D/ r& m/ t8 J# n; i
  90.     }+ V& e# a& y+ n
  91.   }' n0 D& E8 p8 L* p/ `5 F. p1 Y
  92.   return szFileName;
    ' d7 W/ i( a5 l- Q- j; K* F
  93. }
    $ l' {+ K! C- }
  94. 5 v( b' T# b5 w, P/ B) q9 Z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    3 h8 P* o9 [/ Q( G- ?
  96. {
    9 ^- k* Z' ]4 g1 i
  97.   FILE *fp;2 z" d0 M. c) ]) _. }
  98.   char *key=NULL;, s! x( R7 r9 G% \( Z. H
  99.   char version[MAX_PATH];$ [2 H/ m9 o' c3 T0 D2 I
  100.   LPUPDATEFILE file,olds;
    $ @, L  v0 a5 J
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 {. a2 A! |+ Q+ l6 V" v  m

  102. , g5 M5 N* n- w7 o2 ~/ ^
  103.   UpdateList.clear();
    5 x' ^1 t5 M) g8 n
  104.   UpdateFile.clear();5 S$ P3 Z; m; u: Z7 a% I, w; L6 T
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; M3 e9 e- k1 c* n& C8 C# v! {
  106.   if(!(fp=fopen(filename,"r"))) return false;. V* M4 X8 V  @1 L( Y9 j/ ~
  107.   fscanf(fp,"%s",version);5 ~4 J5 x& E8 n6 V4 G& z) {
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ( b2 F, U6 a4 }& l! f8 h3 ^
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ; j" v" v, k( {- z  Z* S' l5 D
  110.   {
    % x( E9 Z8 n$ N  O8 H4 c
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " M0 d( ~# f/ z6 g( f* V: L- m
  112.     fscanf(fp,"%s",file->path);0 ]# G+ B' v& [7 I1 e" ^
  113.     ReadFileNames(fp,file->file);
      f1 v, A0 Y" I# f$ [) @
  114.     strcpy(file->full,".");$ r; m( l" U5 \3 `# y* t
  115.     strcat(file->full,file->path);2 }% O# P" b# o
  116.     strcat(file->full,file->file);
    + n7 Z3 A- c+ i" x7 U& `
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()), L# S5 S, x/ b1 \$ ]7 N9 `
  118.     {( x) |. R6 D4 i# O' a2 w
  119.       file->vers=(float)atof(version);' E  x* Q# l  W  C' l
  120.       UpdateList.push_back(file->full);  F2 L$ D. ^4 n7 ^( Y* \/ Y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; h# \- J* B# C8 m* z
  122.     }
    9 i/ P9 K- `/ L/ W* ?6 a, H8 G
  123.     else
    , N' G: w& l3 I& {" `
  124.     {
    % K: Q/ f4 }: ?$ j( ^0 b7 Y; e- W* d
  125.       olds=(*p).second;: m8 e# ~& D  \. z/ {8 O
  126.       if(olds->vers<(float)atof(version))
    . g' k( ~) A. X' a$ K2 p
  127.       {
    ; \1 a) ?" m: z! J, Q/ Q
  128.         olds->vers=(float)atof(version);% d0 e) r/ o) k. g2 P
  129.       }- N( @  z7 d/ l1 x& Z  S
  130.       free(file);
    2 D& d1 P6 y5 F. k: z8 s
  131.     }8 W" K: J. A* ]
  132.   }, l; G  I  }8 ?7 J" |" z( w
  133.   fclose(fp);
    6 n: B* T* _! n3 q* r5 k. P4 M
  134.   return true;. Q- O/ A  f) Z
  135. }
    6 ]3 h+ U* S+ x8 Q* n3 L

  136.   E7 n! `: C- O3 X( s3 }6 I+ b
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)8 c! B% z9 o/ c) T2 B" b
  138. {
    6 I  K5 q% F2 [- e
  139.   TCHAR  szFull[MAX_PATH];) _+ T+ `4 Q9 M  V5 X& c5 n5 f( s/ I
  140.   TCHAR *token,*inter;0 @  h2 i0 d' x2 h, A4 `6 {
  141.   *szPath=0;. f+ I5 _3 x4 N
  142.   strcpy(szFull,szFullPath);
    1 T" n5 l) L7 B+ @9 {
  143.   token=strtok(szFull,"\\/");! N+ |: F4 E) W$ J6 Y! d" m/ \7 \
  144.   inter=token;
    " U- c2 m' \9 W6 `5 u. j
  145.   while(token=strtok(NULL,"\\/"))
    * S( ]4 |" I. Y0 S* C
  146.   {  ~; m2 Y( x. n2 Q* X
  147.     strcat(szPath,inter);& {1 y) ?' W, y5 O/ @1 b/ A
  148.     strcat(szPath,"\");1 v) U% ]# i5 r  x, z( v; v
  149.     inter=token;
      z- |; i! L; Y1 w
  150.   }
    ; S! q( g4 {: E: `
  151.   return strlen(szPath);
    % p0 H0 ?) k& s: o! G; g' q6 \
  152. }
      s) o: z* l2 o1 `
  153. . ~6 s) V& C) B+ @4 O
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); ^% @0 x* E. I9 W
  155. {
    * X) e+ q2 o6 K
  156.   DWORD attrib=GetFileAttributes(Target);% B6 {' l2 D* d, k
  157.   if(attrib!=-1)9 L* u1 F& q. J: s: [
  158.   {
    8 L% ~4 J; X' K6 t2 k. t
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    7 l& f9 G$ h, ?. n
  160.     {5 g* l% `( d7 q; L6 W; l- v& E
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);$ t7 D) x* E. S! J. @- B! k
  162.       SetFileAttributes(Target,attrib);1 N3 S# R/ H& F0 A# Y9 G0 Y
  163.     }$ O6 J# D6 b. i2 b  a0 B
  164.   }
    # Q7 _+ u& {& y% x
  165.   CopyFile(Source,Target,Erase);; _8 Z0 ]' n) ?1 L6 @. J
  166. }
      w% T, @: g, s

  167. $ U4 a! |4 G) Z- {0 h+ q1 G5 ]
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    , Q1 S- {1 n5 a4 D
  169. {4 N8 }1 f& ]' d  M9 s4 X! Q
  170.      FILE *fp;0 w, u* S3 P8 J- [
  171.      char  szBuffer[8192];
    8 D8 ]. B% }0 B
  172.   va_list  argptr;
    6 [5 s( z% X! g+ N4 a. U! L  T4 I

  173. - R5 f  f$ d( e* D. Y: F5 W
  174.         va_start(argptr,message);
    7 c4 Q* c& a/ z) ]* c2 _3 A8 B9 W
  175.         vsprintf(szBuffer,message,argptr);) o% R; ^* z" s% m; P. T; h
  176.         va_end(argptr);5 N1 n. Q0 Q( C3 C
  177.   fp=fopen(FileName,"a");
    9 `* d" I# ^. C* f) X* ]' k5 _: q
  178.   if(fp)% |& x$ Y( s' v3 F4 K' H9 Y
  179.   {
    . i4 Z0 x" T3 K' P) p
  180.     fprintf(fp,szBuffer);5 Z+ V: |& c- U
  181.     fclose(fp);7 i, {; j- K* U. f9 F
  182.           _flushall();
    . u/ H6 v2 }4 y/ z
  183.   }' x6 F; w: q. y# ~# _7 r
  184. }
    - a7 G7 r% O0 |5 x9 s+ o
  185. ! ]: K8 E: A( t  N+ J& J
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    8 n& z, n# H5 {* ]8 \& o; p( e
  187. {& a0 Z0 q4 d8 ?/ ^  b
  188.      FILE *fp;
    $ ^- j+ M! W, Q. y+ v5 I
  189.     DWORD  attrib;. x: C$ a- L+ k& b$ I/ \
  190.   attrib=GetFileAttributes(FileName);
    * j* @, [0 Z9 U3 g, a  C
  191.   if(attrib!=-1)
    ; i9 v+ Q* o1 F) j& M
  192.   {
    1 k) z( v% ~3 E6 u& z7 U
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);/ r! {3 h. p* s' F
  194.     if(!SetFileAttributes(FileName,attrib))/ A; V, @  O$ W% }
  195.     {
    0 Z+ v6 M3 C5 _
  196.       return FALSE;
    4 q9 R' B" Y' a
  197.     }! b1 m* C1 ?: E1 h9 Y1 X
  198.   }) Y1 M( x/ j+ _+ E. K0 s
  199.   fp=fopen(FileName,"wb");
    ! v) P* ^& G6 f: w# w5 [: d7 o
  200.   if(fp)
    3 j) l) S( z1 t
  201.   {  ~8 d) c2 D" Q( h% e& T# Y' v
  202.     fclose(fp);3 ~5 f, f5 ]# t1 K1 a! ?
  203.   }
    0 i% P( G7 t6 T6 h- Y# r
  204.   return TRUE;5 ?' L% U) A' g9 W! F3 n: R* ]
  205. }
    * E) ?" ^1 ^# _- z% G  O6 [: d( C
  206. . Y1 E; Z- k) |% d. c8 S( O
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    " t3 j0 f/ ~1 d- s0 y: c
  208. {
    5 L7 J3 X0 w" s4 J" \$ j: y0 J
  209.   char filename[MAX_PATH];5 T/ B& |) p+ |% M
  210.   LPUPDATEFILE file,olds;
    5 f* Y% g% E6 A' Y/ V8 d9 M
  211.   std::map<int,CString>::iterator i;
    5 a7 T. U2 D0 X+ M1 ^
  212.   std::map<CString,LPUPDATEFILE>::iterator p;# P8 A" N' {; s1 ~2 q
  213.   std::list<CString>::iterator l;2 z3 \6 ?. t- M; \1 Y/ L$ ~; k

  214. . ^3 d) e% V% @7 p* e! b: n
  215.   if(bFirstUpdate)
    4 Z! S! U) p" R; Y4 h
  216.   {8 X: T2 {# a; V3 ^+ p% x
  217.     dwCurrFile=0;
    . h8 D  P4 s* ]! B+ f' W, ~
  218.     bFirstUpdate=FALSE;2 b; n' R$ U; j, B
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())2 @  R/ D& E  I
  220.     {
    % X+ k. C  X8 n9 g" h' ~/ [
  221.       dwTotalFiles=UpdateLocal.size();+ F3 F# ~7 j1 Z1 E: g8 M
  222.       dwDownLoaded=0;
    ! d" w8 P5 n, x, m
  223.       bSilentStep=FALSE;2 E) A4 T" N' }
  224.       bCompressed=TRUE;( y% `/ a) a& T) h- q! c  U
  225.       strExtLocal.Empty();) Z# i2 }3 p- v* a3 W" P: x
  226.       strFullName=(*i).second;1 J7 x. H! z0 ^* `* y& `0 b
  227.       dwProgramState=AP_CONNECT;* X" p- O1 _- m' k/ b
  228.       return TRUE;
    ; Q3 }( G( Q- F
  229.     }
    . m! K5 y. }& e! |+ s
  230.   }; D) v3 z7 f1 {0 H
  231.   else if(bRestartUpdater==FALSE)) I; l" e  g$ p! d1 L; U
  232.   {' B! i( C- |. y4 j1 A; ~% S1 K, }1 [
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()); T# J- I: P$ u0 H
  234.     {: U3 J6 }( [- n( t
  235.       file=(*p).second;! c! n/ y! f4 u# E% ]* ~+ F8 q* |
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    0 }+ X# D* Q6 q
  237.       {
      K' n" {3 `" Z; E8 Z2 A0 L, b
  238.         olds=(*p).second;
    + \& m9 u( Z$ s' r* ?1 Z0 M2 S
  239.         olds->vers=file->vers;
    ! v/ E. h% G* f9 P+ @
  240.       }
    : h+ Z! I3 X+ c) g  {5 P
  241.       else  K: T! Q; G0 v
  242.       {
    : r5 V. @4 K* k  Z1 m! ^+ n6 M
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 n/ M7 k+ R4 |2 o
  244.         memcpy(olds,file,sizeof(UPDATEFILE));4 r6 T  C3 U  H$ r  I
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));. b% y, D: U5 L  |9 f! @
  246.       }5 R# e$ H( U0 v# @# O$ |
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");7 _; A. S% j. I3 e
  248.       sprintf(filename,"(%s)",file->file);
    * L7 l. _$ n8 {5 d8 H
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- u) k1 i. L) y2 t6 I8 G5 T4 D
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: Z& {- y; R  c+ ], [7 q2 T4 d
  251.     }% x, B0 R1 n' y( l' z. U4 Z4 F
  252.     dwCurrFile++;4 B# X' M3 d( _+ k
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  E0 G9 D% a) V- W( [
  254.     {
    8 }) W7 v( H* s+ w
  255.       bSilentStep=FALSE;
    " E7 u4 c' j" a& l2 V
  256.       bCompressed=TRUE;6 X( h) C( f/ A
  257.       strExtLocal.Empty();& ?* h# K% P+ V3 p' F" y4 R
  258.       strFullName=(*i).second;) `, o3 t& q+ H. `
  259.       dwProgramState=AP_CONNECT;5 s' \& I+ x- ?( b& B( A; B+ {
  260.       return TRUE;; m; x$ ~+ z; H7 u! N) F7 o( x
  261.     }; D3 n, C. v9 O/ g, M
  262.     if(!bRestartUpdater)
    8 A, y' C7 |, T, [( X0 i- z: D) m
  263.     {) I& Z% u) V. O" L; P/ H8 m* l
  264.       int iCurrSize,iFileSize;
    2 t: g2 w1 W# `0 Y9 ]+ b
  265.       iCurrSize=0;
    $ A; R  q/ O& v3 N, V
  266.       iFileSize=UpdateList2.size();# t8 J! L8 \5 M9 P1 k
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % C8 R/ f' w8 o7 Q5 W
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");( @( c) ^- w: ~: l% A; e
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + W2 [1 V# v6 \' z+ x! Q6 n/ u
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + c) G4 b+ _% Q: W2 n, F7 ]
  271.       Fclearf(".\\update.dat");$ F  o2 [# T) z0 r8 ]; I. H
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 t0 G& Y; G. I* G- r% r7 \3 ]: Q3 L4 Z
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & x- k) A- [4 l# K; I
  274.       {& t* U1 A0 I! j, o& }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    # {5 R8 J( i, J
  276.         {
    ! m& F9 r2 Z) q4 R
  277.           file=(*p).second;
    4 z- ^) A" @4 Q5 ~! t9 I6 i! z
  278.           sprintf(filename,"(%s)",file->file);" D7 f# Z9 j1 x" `
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 _3 O8 }) R6 @6 ]% ^- o
  280.           iCurrSize++;
    . V7 M8 \; l3 }; B
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      O2 d- @7 B" x& t
  282.         }
    2 {8 _- i& E" }+ I# J" W/ B
  283.       }
    ' |4 J& n4 _; v" i5 P0 D
  284.       unlink(".\\update.txt");
    $ @" o. L9 X, K. J# V- V! v: n
  285.       unlink(".\\update.tmp");- T  I/ t* N8 ?( R3 L1 M. Z8 ?
  286.       Fclearf(".\\checkversion.dat");0 |$ S4 d. q4 D9 T  {- d5 k
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    / L) i  H+ ]+ M# \' |1 B' N
  288.       if(UpdateLocal.size())
    7 P/ z: e' D; Y. p- O/ l
  289.       {, P8 o1 d( L0 g% C+ ^
  290.         UpdateLocal.clear();
    - N3 G. K; a% n' y7 |2 L* M* H9 [
  291.       }
    # R! [$ N# }% P$ m8 n- T
  292.       if(UpdateFile3.size())
    3 ?- S4 ^# y' s" ^
  293.       {
    % t3 J0 A- c+ Z( R, b  W
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 x0 p. q& b1 ?8 \1 Z! Z0 h  x
  295.         {  U% ?! o0 ?4 O9 g8 A# Z
  296.           file=(*p).second;& f7 C3 E1 z: `+ w
  297.           free(file);* L7 s' {0 d; {
  298.         }
    0 a. {; S2 J0 q; I7 `$ i
  299.         UpdateFile3.clear();
    7 O+ D# {: `7 Y( S
  300.         UpdateList3.clear();
    , X- w' C" V6 O9 i2 c9 O2 Q
  301.       }  a5 t+ E6 }2 `' l  j
  302.       if(UpdateFile2.size())
    4 A2 E# `' E/ c  m5 _& M/ \; M& T
  303.       {
    8 u' h" l) x; W, {# q7 B) D
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 g7 [3 Q6 ^! |0 y& u
  305.         {" w5 ?6 V6 i& o% u0 l# j
  306.           file=(*p).second;
    ' j, x# A% P# T, \! f
  307.           free(file);# A+ _/ O0 ~$ n& [- O+ H+ |
  308.         }
    2 w! A2 o" D7 h, v* t) n' d6 ~
  309.         UpdateFile2.clear();' d1 t" A$ K9 L3 Z1 _
  310.         UpdateList2.clear();4 F2 y% z- A* |& j* ~: |
  311.       }& N/ o: q3 a/ U
  312.       if(UpdateFile1.size())
    0 d" I0 V, x7 g/ Z, O: c
  313.       {7 A/ H  u/ M8 X: s1 D; w
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( }* o' j* `) v# C8 E
  315.         {
    1 @! T! B0 a# I: R( n. g
  316.           file=(*p).second;" E5 ~; {) o( |& h6 u1 a
  317.           free(file);4 E" s( e, ~& ~. o9 ]* d5 o
  318.         }6 J; @, F+ T  q, j, a; \2 K
  319.         UpdateFile1.clear();
    & I. b) S$ L# n& g1 J8 j
  320.         UpdateList1.clear();
      e0 [; F: R( x# s) {) t, V8 i0 j+ d
  321.       }1 c( ~7 p2 \. g& A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    3 C7 ^9 P( j* ?9 t
  323.     }$ [( K1 Z# B* ~( T5 w) T9 G
  324.   }
    4 c0 j9 v9 E8 j' \' e+ y5 o& K0 h
  325.   return FALSE;4 J  K, T! L/ d3 t# H2 j. i
  326. }- W' H7 Z$ j  e  G7 Y+ j
  327. + r' f6 U' Z, T* L! E
  328. void CRevAppApp::ClearAll(void)
    ( `+ \9 m) m% m) |
  329. {# ^' W; }7 d! k( p1 l
  330.   LPUPDATEFILE file;
    / d9 }; v  |5 R: h4 j
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    & e. p- T3 P3 u* X( A

  332. . K. v4 U1 \1 m
  333.   if(UpdateLocal.size())( C5 N! Q$ q) N
  334.   {: n2 u+ f! k/ ]+ k9 n4 r# s
  335.     UpdateLocal.clear();4 s; N2 Q  D" P
  336.   }
    4 s- t  Z; ^+ s6 b) A
  337.   if(UpdateFile3.size())3 U/ [& n' d6 T2 ~7 b( j; b
  338.   {
    1 f% N- ^, p/ w
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 U  `, e5 b3 x
  340.     {
    6 a$ c% a4 F- ?0 F
  341.       file=(*p).second;
    " O1 x# `+ M8 C0 n0 F, b) e5 h
  342.       free(file);% A; A1 [# M: u
  343.     }. m% ^8 `( V, f- k5 Q, S) P
  344.     UpdateFile3.clear();
    3 p# |. F# @" T) s
  345.     UpdateList3.clear();
    : A% M) L3 k! M7 E5 v
  346.   }
    ! \8 Y; p) R; M! \& R
  347.   if(UpdateFile2.size())( \! |# ]0 e$ ?5 W
  348.   {+ l7 Q5 f& x, F) m) d4 @) F" f  i( q7 \
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * s$ P3 k+ \+ u9 b4 c
  350.     {) h6 C8 J1 l% p8 y( }- U  F" ^
  351.       file=(*p).second;  F3 G4 d3 R  V9 _; O
  352.       free(file);" W* o$ @" K& _- ?
  353.     }; x7 E7 ?7 u5 V
  354.     UpdateFile2.clear();
    $ U0 l. }+ C: I+ Q9 a- h
  355.     UpdateList2.clear();& Z1 R. ^, d( k7 u
  356.   }
    ! F6 M3 F0 L% d8 I. U! W
  357.   if(UpdateFile1.size())
    ' s* ?- c9 S) w
  358.   {
    ) R3 l6 Z+ c/ `* k0 Q; I; U# Y
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 R4 N, P! A6 `5 u1 X. g+ e1 {! b
  360.     {
    0 B% R9 y& K3 ^* T+ A
  361.       file=(*p).second;
    , x. o, w, [1 w9 y& v3 T0 I
  362.       free(file);
    * `$ M, w$ {+ T; g4 N: g  q9 |5 N/ \* Q( ^
  363.     }
    , g% J0 _+ R9 u9 w, }8 \
  364.     UpdateFile1.clear();
    & b) v/ P/ F# J, p
  365.     UpdateList1.clear();
    9 s+ [1 a% F- q1 c
  366.   }/ I: w4 `" S; {, k' X+ @5 R+ {* J
  367. }  
    ! }' M0 a2 o* v/ H& f, k
  368.   
    6 H" R+ C* k; q8 `9 n( ?, U0 J; J
  369. BOOL CRevAppApp::CheckLocalVersion(void)9 J: ]9 G4 X: l, m. s
  370. {
    3 k. @* L8 E! m$ \/ [0 A
  371.   int c;
      S  l) W6 R; Q
  372.   LPUPDATEFILE file1,file2;7 y+ h4 L2 k( {# a
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    2 H+ {9 n4 L- k2 ?
  374.   std::list<CString>::iterator l;- U5 \9 N9 [8 I9 ~- S3 d

  375. ! f1 z1 `& ~8 M
  376.   UpdateLocal.clear();
    # r- Y8 s) t& c( Z$ d4 N$ }" ^7 r
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);3 z6 L& x9 R2 ]8 z& E
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    4 U) d2 R* s: w3 N3 F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    0 o  `9 I8 ]7 s& N
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);" r- s% F0 E  Q; p7 C  J
  381.   if(UpdateFile3.size())7 Y8 V# D2 ?1 ]& ^3 [' G
  382.   {6 |7 T* D# a) U
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    , a# O- g$ P, S, W
  384.     {" o# V; ]# M# {+ P. `7 J
  385.       file2=(LPUPDATEFILE)(*i).second;
    $ g6 k: q0 O3 @& l! I# v' J' n5 R" P
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; s' E* g5 y& V3 a: Z" ?
  387.       {
    3 Y4 ]: F* e& ]' G5 S: l3 W
  388.         file1=(LPUPDATEFILE)(*p).second;
    1 ^' g) n* U4 k4 F
  389.         file1->vers=file2->vers;% P; {5 p% v7 j) I! R
  390.       }, T1 s- P- n& J! B) a
  391.       else
    5 H  H  Y* b7 \' L4 O# q
  392.       {8 x7 l% T4 Q) V+ ~# R
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 N' P4 n. O* V/ N
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! Z2 t, ^. V# I" E, E
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    % ?# e1 n. t4 o2 b
  396.       }
    3 r; `9 H% m" o
  397.     }" C  a+ h6 |$ J
  398.   }' L2 w5 [* K* A% i# w+ g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " y, Z; p, e: v
  400.   {& y' v9 O: D' r# @+ y  e
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())) E, k& u9 z, q8 s# S
  402.     {$ o$ N9 a6 G. C& D/ d. ]! Z, y
  403.       file2=(LPUPDATEFILE)(*i).second;/ Y! A# l) a8 F) g# a" ?. E
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " L( l, U- j. J- K1 c+ j( m6 ~
  405.       {
    5 ~" k8 L5 v+ W4 i
  406.         file1=(LPUPDATEFILE)(*p).second;& j- a4 D2 S: X% y
  407.         if(file1->vers!=file2->vers)3 F2 G5 a1 ?. _2 _  D
  408.         {) t+ m2 [9 v. O. e* v: C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 [6 I  b( b8 z/ b
  410.           c++;
    & K5 C; B) K( \  g
  411.         }
    6 A: i2 g4 V$ ?* Z/ a$ @4 E9 N
  412.       }  y1 d4 P: {( L# G* L
  413.       else
    : p4 e& D! P+ s2 G) a8 d) T
  414.       {
    4 T$ a" _2 X1 |: [  x* u( Q
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* x. d4 ?' c: K2 Q7 @2 T8 {
  416.         c++;
    0 {+ F+ J0 s* O% p9 [9 r+ ?
  417.       }
    . f3 w- H- x8 O) D" \4 N! B# [9 h
  418.     }3 ^, h7 X. H+ o+ x' g( k$ @
  419.   }
    " a, Z" Z9 F4 }* |& a2 C  u+ \: P+ G% {
  420.   unlink(".\\DownLoad\\update.txt");* L. D) C6 n9 K+ U
  421.   if(UpdateLocal.size()) return TRUE;
    2 }/ d2 D. L' b2 r+ K
  422.   else                   return FALSE;( p, q! }( S+ z9 B
  423. }1 x  n. h6 p" S- f; ^
  424. 2 Y  r/ C& A0 g( O# a6 B* k' X( c) V6 ?4 G
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    4 S6 N/ Q1 c/ H( _4 K% |
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    5 F' a1 a9 R$ ^9 B
  427. 7 e  L+ c) e$ M4 ]
  428. % S1 q0 {0 a* _, n7 C; V/ J
  429. ( X: G! {; c' G: a
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)) l& ^( w4 R5 z& u3 n5 X! G
  431. {2 I( I3 Y: n+ T* c. p3 D: E
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    % w9 y) V# @. q
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , f" z+ G! G8 q8 j4 u% V* i
  434.   {- }0 D3 P( s/ o# ?) {3 q
  435.     char szLanguage[50];8 V# z; e( G! ?3 N2 {7 \+ d6 V
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 r8 W( U* G: M* Z' e
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 p% N% Z  R8 r. U7 k7 Z2 [
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  Z* h4 `: W: ~) U+ P7 K7 g: U
  439.     else                                   m_iLanguage=ENGLISH;9 M! T4 h- p. }6 ]" H1 A4 [
  440.     char szRegister[100];
    8 o+ `  k& @( p+ u) c' I! M; C8 e
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");$ P8 z4 X* y# o
  442.     strRegsName=szRegister;
    ; v# G1 ~& P( \( I& x) e
  443.     char szPatchURL[100];1 g4 C9 _6 B4 a: |
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");2 R+ p6 _% }1 v6 e
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 p& o, ^# n: R) c8 b% A3 x& {
  446.   }
    0 C- K' q7 G/ S
  447.   else1 R$ A" j% @  \( z5 Q! V
  448.   {
    0 D$ ?5 |  O! w
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: e$ x: }7 @) m5 [5 p
  450.     strRegsName=DEFAULT_REG_URL;
    % v7 B8 {9 I1 ?" o8 A
  451.   }+ Z5 p4 T; z% ^9 X/ m8 _! O
  452.   if(GetFileAttributes("hosts.ini")!=-1), s: F, E8 t% U2 X5 {3 @6 F$ j
  453.   {
    . q! i" E) E8 V( ~! ^$ m" U7 G
  454.     char szIP[50];6 a! Y! b+ a5 w5 b0 r1 M/ [/ w
  455.     char szDIR[300];1 a# w6 [9 ?. \
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % A. Q' V& F; ^: E1 k) d* T7 ]
  457.     {6 B- d( @# B9 W2 V& A+ q% Y( n
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    2 D7 L9 N* s) R( q- h& S+ L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ; X" A$ r$ G+ o3 |4 K  ^, ?* n
  460.       strHostName=szIP;
    8 C+ Y0 W  x7 h; x
  461.       strHostPath.Format("/%s",szDIR);, Y" T- V# C& @: F' }$ G3 s
  462.     }7 D& N! o0 C+ v4 P4 ^3 z
  463.     else- Z3 d; q6 W8 w2 a% A
  464.     {
    . n( {1 u, ^; N8 X) M; L0 B9 ^5 P
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' K3 |/ h1 o- {# a3 P) I
  466.       {
    & [' k. \' E" e  Y' E6 ~3 d
  467.         char szLanguage[50];
    ' U1 E- q3 G" }' {, u& I
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 z1 o8 r) \4 [3 S2 a
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! [- I! b& Z3 w0 o' x
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 a; P0 c9 Y5 u/ M7 d% k. l3 K
  471.         else                                   m_iLanguage=ENGLISH;
    + [5 j. }" r( V! E' g0 s
  472.         char szRegister[100];. Y7 y& f) w% B
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # b3 q' _8 X/ O- p
  474.         strRegsName=szRegister;1 K" A1 x, ]# J/ C9 c* Y
  475.         char szPatchURL[100];9 G* E) [5 V- [6 B) R. U+ E* e
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 E$ S, w. d; A( H: E
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 \& H/ G3 D( z1 q& E1 o9 v+ D
  478.       }
    - k9 H  b* N9 `. E6 e; w
  479.       else
    " K4 V$ F) P- h5 e: T
  480.       {
    - I1 O5 S" i7 h  a$ ~- e$ f) T
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 z3 B3 \" y' P5 m  k
  482.         strRegsName=DEFAULT_REG_URL;
    6 b0 l. u* j8 N, J# d6 m6 Z+ g
  483.       }. B7 Z' W2 `" a' O
  484.     }
      E. f, [- P! N$ `2 ]! j
  485.   }
      H+ o, L! j1 m* B* S  n
  486.   return true;  p% l8 P# v- O, h; V5 M- l
  487. }9 a+ t# P; g# i1 d' W- c

  488. ' u+ I4 V) Z6 Q; k: V  X- l
  489. #include ".\ZLib\unzip.h"
    0 Z- z: Q' }. D% A0 v1 S
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 O/ Q  c8 u7 N3 @8 l& y" b0 Z" A: O5 z
  491. /////////////////////////////////////////////////////////////////////////////; c+ ]9 |% q; p7 Z5 O2 V9 a9 z5 |
  492. // CRevAppApp initialization
      C1 N) b  A: }. w% L% O" d, J
  493. ( C+ K+ i+ j; E, f5 l" \
  494. BOOL CRevAppApp::InitInstance()
    ) ^# y' t3 _. P, m) E( l! ?
  495. {
    . Z* j9 I1 U+ A8 d" w2 A
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];+ F" n5 l& \* |# Y6 U6 e
  497. 0 V+ N  L* Y0 h# v. v' r2 ?2 E& J
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);% o* i8 P6 Q  [) j  g; V
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))/ [, V6 L1 R( K) O8 N/ _
  500.   {4 }3 k) w5 h1 a0 b3 a  t
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");' F, C& x' F7 p' I! X! g
  502.     GetPathFromFullPath(szPathTarget,szPathSource);. `9 b. E' R1 @% i
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    0 n  E$ m0 D: R, j; s9 k
  504.     {/ e+ [: M9 k1 M: f
  505.       strcpy(szPath,szPathTarget);
    5 d$ T1 L5 R3 f: H* f
  506.       SetCurrentDirectory(szPath);) u+ n1 |% r1 T0 y; G7 i4 a
  507.     }, V. v7 j$ G$ \4 t
  508.   }
    8 g4 M) @9 [# o9 W
  509. #ifdef _DEBUG9 t0 z+ v) l( V! ]; j! S) g
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" ]) V) Z, E! i) i
  511. #else# ~$ N5 y5 S  {1 X" y' i
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! j9 W+ f# J: `- N) u8 k4 j# m
  513. #endif/ ?0 w, T% e$ u
  514.   {6 V( S- a! t- {3 h" {( T
  515.     char tempFileName[MAX_PATH];: O6 G6 N: Y+ M3 R
  516.     strcpy(tempFileName,szPathSource);
    % a: {+ S" f4 y
  517.     tempFileName[strlen(szPathSource)-12]=0;% u7 p0 T! Q1 S' j: H( \5 B
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ! t" a+ G; q0 D% t" S6 n$ ^
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 ^4 Z1 {* ]% Q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ J2 k( P7 p$ _9 e
  521.     return TRUE;: V, j2 L6 @- e2 X
  522.   }
    4 L" i4 v3 h! w( j8 a9 s+ w
  523.   // Nuke 0118: Delete run.exe
    & m5 F. C* e( I$ @
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );% D9 @0 A% m) ~$ M4 d! r
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");, C: `  Z2 X: S* H+ K8 r6 j
  526.   if(!ReadCfgFile("Config.ini"))  L3 O) o6 a( i  m6 a
  527.   {
    ' p. \$ {+ E% P& [5 k3 P
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);' ]* W" I; k9 t0 l/ [/ b
  529.     return TRUE;
    9 B5 R4 X9 m# K7 x3 [0 ]) d
  530.   }
    & I" @$ F" K# J0 ?$ v
  531.   HANDLE mutex;
      j2 y, N$ S2 y
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 r2 \9 Z( t" m" p* R5 H) ^
  533.   {
    1 \1 d  z. b9 u! e( l6 K9 y, x
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    4 [3 _; a1 U9 V, L1 i: p
  535.     {
      r' v6 h- S' u) }
  536.       CloseHandle(mutex);
    ' V! P" o/ Y4 v& x& P' y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    4 N9 ^: c" l' {; B( q) B+ f
  538.       return TRUE;
    4 `. E2 z! u2 Z/ D0 r' W' V" n4 \
  539.     }
      u9 ?1 N  \0 ~
  540.   }  
    ' T& Z9 H! A* v8 D6 U2 K: q* Q. \
  541.   CloseHandle(mutex);, A& H1 V; l& x8 j

  542. . _. ]) n5 F% f  V' m
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    $ q$ y# H" B: e# l5 |  h5 V& Z5 o
  544. ' U1 |: ?. c6 t5 R# ~5 ?
  545.         AfxEnableControlContainer();
    * b% G- f- u: R' c- l

  546. 9 z) E: z6 B  X
  547.   bCanUpdate=FALSE;
    * e! E0 w; @. I2 }9 t
  548.   dwStartUpSteps=1;" ?  i6 f9 h+ E; O. ?
  549.   dwProgramState=AP_NOTHING;9 }( A" W- ^& _0 E- B& w! @; }& D
  550. 5 |; r- M) n2 q! Y8 @8 E( `
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 {. p$ C( f" ^/ b/ W
  552. $ D1 }8 [' {) `  \/ K5 n8 i' d
  553.         // Standard initialization
    0 U7 o. K* l+ P. W  a
  554.         // If you are not using these features and wish to reduce the size
    " B4 F4 d& u  }4 v; @5 R8 f
  555.         //  of your final executable, you should remove from the following3 A, e" [7 \- I- S3 u
  556.         //  the specific initialization routines you do not need.
    # b, c9 D) b+ U# Q+ `; |4 H

  557. + P7 x. z+ S6 v' [3 v
  558. #ifdef _AFXDLL
    % M: w. i: Y! G4 ^3 w* |* R
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL! Q' g& Y. ~0 L, X
  560. #else
    3 f" a9 Q, k, o. n" k- ~8 r
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically1 Y4 `2 o4 L/ ~& z5 Y/ D. {
  562. #endif
    1 L! v% h# k( Y: h4 Y

  563. 3 M3 d- v' M0 D* W+ Z/ r0 s' {
  564.   dlg=new CRevAppDlg;' F% o% X) z0 g
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    6 V# g$ {. M2 [2 [
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) n. V& x" ]4 F6 P* `$ D
  567.   m_pMainWnd=dlg;
    + ]# r5 i* i4 l6 p

  568. - I  f, H- ?3 u; G" W  h, ~6 Q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);4 r; `2 F; E) ]1 O( D+ u/ m

  570. - L9 \2 z& \+ A5 r& T; V7 x
  571. //  GdiplusStartupInput gdiplusStartupInput;; n1 \) d7 p( \
  572. //  ULONG_PTR gdiplusToken;
    8 T; b& H' N; g# C) B) w0 {
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
      w2 E, n3 f2 s1 x

  574. ) ~( A3 C1 o9 z; g; O' v" @
  575. //        CRevAppDlg dlg;" o! ^* u8 j" I- H* b
  576. //        int nResponse = dlg.DoModal();+ X( i+ N. ?" g$ f2 v
  577. //        if (nResponse == IDOK)
    0 S+ g6 o7 t- T  t5 G/ @
  578. //        {
    1 }2 Y# {8 i/ F5 P# r8 |
  579. //                // TODO: Place code here to handle when the dialog is+ B2 {& S4 s& c* D/ h9 J9 x; [0 R
  580. //                //  dismissed with OK
    ! X8 j/ J3 b- ~, V& ]+ Y% {5 y
  581. //        }
    7 v/ L& D6 R; S$ r0 |$ b
  582. //        else if (nResponse == IDCANCEL), v* m, y8 V6 C) d0 x
  583. //        {
    " Q* M2 Z0 P# O
  584. //                // TODO: Place code here to handle when the dialog is8 C( A+ N8 R1 _- O# n
  585. //                //  dismissed with Cancel
    3 ]( D) y9 Q6 I, H" |
  586. //        }( Y& T: k' D+ w8 s, H$ S! _5 P, h

  587. ( U3 @0 ^3 X/ U* f
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    / Q5 Z( C; N9 @" m
  589.         //  application, rather than start the application's message pump.
    # C3 n  G/ t# N8 J. F
  590.         return TRUE;
    ) S3 U, J) R$ S
  591. }0 u) m- E( f! ?3 Q: @& ]
  592. * Q* v) F1 R' k* z1 _
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    7 c$ _; e! M- k5 x; b7 F# L
  594. {3 |# z" ~* A* w4 W6 H# @
  595.   int i;& g8 Z3 e& w2 g- t" D
  596.   char *szRet;' u  ?% ~' k5 c" s4 t* U

  597. ' l) I0 t; B3 e. I  `1 J
  598.   if(pSource) { itoken=0; sztoken=pSource; }/ ?" n- m, o- w" z0 N
  599.   if(sztoken)
    # V1 \0 d6 u  z5 n/ s; ?
  600.   {5 E( H' `8 r! Z9 L2 \# V
  601.     szRet=&sztoken[itoken];" p; v# Q7 L9 ~6 ]( c
  602.     while(sztoken[itoken])
    2 f- ]9 _$ V: V3 m$ z5 i3 z
  603.     {, m/ w5 m+ R3 i; t* M
  604.       for(i=0;i<(int)strlen(token);i++)
    : T# {% r& g! u- ?) G- L& r+ h
  605.       {
    2 l0 m* s; F5 |( Q, }2 q7 B1 r0 b
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' z) d/ h8 k$ J5 J$ N2 D& k
  607.         {- D" i4 T- V  v! _
  608.           sztoken[itoken++]=0;9 _* {0 G, A; k# Z8 x& Q1 a
  609.           sztoken[itoken++]=0;* f3 @( ~$ {3 A% F6 h+ @. R: t7 ~
  610.           return szRet;2 {- T- y4 \& W% L
  611.         }
    2 _* d% E" E3 H
  612.       }
    " N9 D7 i. R* n, n
  613.       itoken++;7 ^$ `6 T( q* X
  614.     }
    7 F6 w6 D7 E! O  V' p, I
  615.   }
    3 o& H$ s) C1 y7 ~. |. t
  616.   return NULL;
    $ G, H4 o% b9 Q
  617. }3 u4 b4 d2 J$ s, I. K" ]9 h& \0 o

  618. & p! l! |  J% E
  619. void ProcessProc(long Total,long Current)
    " L. W. T! Q3 c' U( H! k
  620. {
    + L0 _3 Q  _( [
  621.         MSG msg;
    # J9 A; W0 Q6 C/ P& N
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    , y7 {5 q) [& g
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    6 @# j6 D- m* B$ V" {6 k5 {+ u# {
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    % @' Z# z- i8 V$ W; K9 z
  625.         {' ^2 D% d) o6 O9 t* j1 p
  626.                 if(!GetMessage(&msg,NULL,0,0)): R. L9 x# X( h) ]
  627.                 {
    9 Q& M: W+ j& y. J( d4 b2 ]
  628.                         return;
    3 `! s0 Z1 E0 }& R2 P* j
  629.                 }
    8 p: E) r) p: {0 Y
  630.                 TranslateMessage(&msg);
    6 [# M0 N3 S' x; u& k! D! n# K7 j$ Y
  631.                 DispatchMessage(&msg);
    " H9 m2 w1 k3 Q- s+ z9 H
  632.         }       
    ; M# p: f& b, o0 S$ ^  I/ T
  633. }; N7 O  v) {! j  f: l9 K

  634. * f" q6 t5 o7 b: q. j4 `1 t6 ?
  635. BOOL bFirstChar=TRUE;
    9 K* Z9 |2 l) v) `
  636. ' I& `) K. @; s, F
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    $ Y( U$ n3 ^3 t# {* z6 `
  638. {
    % R. d7 m2 h) E0 g
  639.         // TODO: Add your specialized code here and/or call the base class) S1 v* e0 C2 b, |/ x
  640.   switch(dwProgramState)
    , N+ B# T/ X$ |4 U
  641.   {3 m* b- [: S' t% b
  642.   case AP_NOTHING:
    2 a, A7 j7 U: o' z
  643.     switch(dwStartUpSteps)2 b( r, c8 l/ Q( a) ^( H& l
  644.     {
    # p& q; p) N6 c9 i
  645.     case 1:
    . K' V; g8 a  ?9 k( ~: L
  646.       {
    ' _; l2 e6 \* n& d" {$ Y6 P/ `: ~
  647.         int i;
    ; k2 o* m- k7 X. r
  648.         CDC *pCDC=dlg->GetDC();8 n- y( I' P2 g& x
  649.         HDC hdcwnd=pCDC->m_hDC;% Z7 k6 c1 Z7 J$ a! n2 K* N' J8 _
  650. //        Graphics graphics(hdcwnd);( h5 K+ F  F9 W, O8 u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");, A* Z. m5 v& }# G, Z4 l+ E
  652. //        INT iWidth=bitmap.GetWidth();
    . ~+ u; M9 ^; s4 A+ N5 X! ~
  653. //        INT iHeight=bitmap.GetHeight();- M, `$ H" ^& V( K0 |6 @5 B; V( e5 o
  654. //        Color color,colorTemp;* j, |* j7 [1 [/ K8 l
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)5 @6 d+ `2 [, @7 b  n
  656. //        {
    % z1 W0 g' X9 ]
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)+ T. `' w- e  d; x
  658. //          {
    % \! `( U, p7 S# |* K  x
  659. //            bitmap.GetPixel(iColumn,iRow,&color);0 e! O8 l! |  l' A
  660. //            colorTemp.SetValue(color.MakeARGB(& Q# U& V/ `6 w
  661. //              (BYTE)(255*iColumn/iWidth),1 ]1 q1 m; s0 ~4 F# g
  662. //              color.GetRed(),
    ; K6 p) V7 Z# r" i/ ^3 h
  663. //              color.GetGreen(),
    + [, a+ f( V. \4 W. e
  664. //              color.GetBlue()));# D: p# h$ q# J
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    & g  e' j# r5 w1 |  E* X8 K
  666. //          }
    9 E: ]" Z# L: H- ?
  667. //        }! M  h5 `6 t6 `& R# K) x& a
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);; p  q9 a3 U: e' E
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 H2 b5 L& `1 D. ~% ^6 Z# O6 A
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ' S. X0 `: m( U# X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # ~5 n0 F+ k, I) E- w4 z( W2 n6 a
  672.         for(i=0;i<240;i+=8)
    8 G$ B) D4 Q8 d& H
  673.         {
    + _. R2 ~  t" r/ L1 l) E( }, o
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      C+ C$ i* G' I* _5 a5 P
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ) i% j2 w, ^( T" b/ |7 J6 q
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  x+ D# L7 X$ r7 E! {  I
  677.           Sleep(33);5 H  R6 P1 `; Z: N, p, Q# u
  678.         }
    & g  r& z& |1 |0 B
  679.         Sleep(1000);
    * A" _" Z; T  O8 F1 w) L
  680.         for(i=240;i>0;i-=8)9 s4 U& u0 `+ z8 D( d8 h& v
  681.         {
    0 N3 p5 y9 \) q+ u8 f' K% c2 F: N
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: e$ g; k$ @3 _' ^3 K
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 G; {" k# l3 A2 _0 Q4 B' q' g
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& p& Z( W8 G% Y# A0 d, O8 q$ ~+ Q
  685.           Sleep(33);
    , t# @$ A$ a" j
  686.         }1 o& p0 I0 H- M* d+ U0 O. h
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);7 w7 T* ~, m0 S2 M$ b- ?" R& I0 j
  688.         dlg->ReleaseDC(pCDC);
    6 |9 g; V  e  m! s& a
  689.         DeleteDC(hdctar);
    & f9 i- a( c' v. }! u: ~
  690.         DeleteDC(hdcsrc);
    ( [" ^8 K4 z6 u" c; F2 T, y; T& v
  691.         DeleteDC(hdcorg);
    , |5 Y  u2 L* Z( ~0 \& B
  692.       }$ d8 V. l4 e. {5 N4 O6 w4 v
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ' V* R. n* r. Q+ w8 S
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");( z. }0 I+ Q7 P
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    4 X& g$ W, Z8 j3 A
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ( H$ n5 p* w. K* o& P  b# v0 N7 k
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 D7 S* l6 C4 d' C
  698.       if(!Dn.Connected())
    % ?. s- V& }; {! v
  699.       {
    , u1 W6 \! A  J  O8 D/ P' ~( E# h
  700.         dwTotalFiles=1;
    : c3 g* B# P8 |
  701.         dwDownLoaded=0;
    / X& r: ~7 u9 v! P0 E* \
  702.         bSilentStep=TRUE;0 l8 x! A  A) L5 Z0 C6 b6 T
  703.         bCompressed=FALSE;! b9 `9 Y/ A2 [  o
  704.         strExtLocal.Empty();
    # U1 K5 \# G" l2 P( x6 w' U
  705.         strFullName="readme.txt";
    * r# s$ f6 m  P9 h/ I3 M* g( R
  706.         dwProgramState=AP_CONNECT;8 e3 Y; E) ^( B! P; z$ `
  707.       }2 Z  c. \& c4 k9 Y( Y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    : [/ P* _2 `4 C) q) G: b! _  A
  709.       dwStartUpSteps=2;
    $ _# G9 t9 Q( w, r/ X7 ?8 `; J) R
  710.       break;, b5 H6 C- d" W
  711.     case 2:0 }4 j: h4 w* B. U& B3 L% U8 f
  712.       {
    2 g3 g- x1 W$ }0 o
  713.         int iEOF;
    & u/ w2 c: V4 \$ q' p4 h
  714.         FILE *fp;2 i& Q/ `3 W+ `
  715.         char szString[512];
    , E7 x" O( j4 y( k( S8 I* v
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");7 l( E! W1 W' n% }% @
  717.         if(fp)8 \, [% [8 u3 C% n  a8 t
  718.         {
    # O) r. q- b0 D1 [; d9 a: f
  719.           do
    ( J; A% l' p% [0 l
  720.           {
    & s* ]& W9 X6 n) d& W
  721.             iEOF=fscanf(fp,"%s",szString);
    ; O/ y/ Q4 o! s4 k  ]2 Z
  722.             if(strlen(szString))
    % }) d7 u3 n! x; d6 T! d
  723.             {
    " p$ n; q% c9 U; Z  y' y; n% B* `
  724.               if(bFirstChar)
    6 u2 V4 E0 L2 w: X: t/ `
  725.               {
    , J, F) {- B' v' L
  726.                 bFirstChar=FALSE;. u* m7 r9 j. u
  727.                 bConnectIsBig5=FALSE;. s3 T5 G! q3 U( a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    3 _1 i9 u6 a4 H
  729.               }+ c8 ^' P, ^0 l: e5 n
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    & ]  [) L# J' r
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    $ J4 j" L8 g* s! @. p3 i6 P  r# Q
  732.               dlg->m_ListText.AddString(szString);
    . [! N, }/ ^* E% `+ _) y
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ J- \( i7 Y% `7 \! X% u$ P* a5 E
  734.               *szString=0;' t) A+ X% P% E/ W# F  w
  735.             }: d: C4 d  |; M! [9 V4 i2 C
  736.           } while(iEOF!=EOF);
    ! y* C) |; W; z  u5 {6 U9 o& g- ]
  737.           fclose(fp);7 T! x( t8 o; a
  738.           unlink(".\\DownLoad\\readme.txt");, P2 C$ K2 H+ f: q: ?
  739.           dwStartUpSteps=3;
    , e4 f. _. h  q& I
  740.         }6 k$ @; N( Q( e; z, \
  741.       }3 y6 h9 k/ P. b2 e# P: _
  742.       break;
    % R2 x2 J: p) @9 d  \, t
  743.     case 3:3 h5 b9 G* i* b$ M8 e& C6 F
  744.       if(!Dn.Connected())
    ! ~3 W9 ]9 [1 L6 [* {
  745.       {
    0 H  O0 {0 s1 c/ O
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    1 A3 k9 F! `1 {
  747.         dwTotalFiles=1;- p" I: \$ J9 J- |8 b4 U
  748.         dwDownLoaded=0;
    ( d8 G" l% [1 g2 A/ b
  749.         bSilentStep=TRUE;, ]; Y( U7 n6 d1 Z, \
  750.         bCompressed=FALSE;$ v) x* E; i& `: M, `% \0 c) S6 Z
  751.         strExtLocal.Empty();
    9 h0 m+ \* O, h/ C
  752.         strFullName="checkversion.txt";5 L( L* \% E" t* P( \% E# c
  753.         dwProgramState=AP_CONNECT;7 e$ W. @% D& [& H
  754.       }  k4 ^$ ~/ S0 B" W. t% ?4 f
  755.       dwStartUpSteps=4;
      w* _! `" h6 p' n8 \+ h8 W# v
  756.       break;; }/ @% M# _" H# _7 O8 k
  757.     case 4:9 V0 a0 h. O. c7 v- d8 |; t- E: u
  758.       {
    $ l: N* P6 K$ G6 A; n( @$ @
  759.         FILE *fp;, q: ]5 R: O4 L  S9 U/ d) w3 g
  760.         char szString1[128];! I- q9 o& m8 n" I. \/ i
  761.         char szString2[128];
    $ u/ l( \! I) I
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    - {( \5 T- Z- Z
  763.         if(fp)5 q2 L8 h; N# L+ i) I0 ~
  764.         {$ Q% _5 }) {3 v3 \
  765.           fscanf(fp,"%s",szString1);; l5 _6 p' Y9 D7 L8 N/ z4 ^* ?7 v3 I
  766.           fclose(fp);
    # h% b: V( ^8 c& R. L
  767.           fCheckVersion=atof(szString1);
    2 F1 _- ~: e0 h+ W7 |- ]$ l
  768.           fp=fopen(".\\checkversion.dat","r");7 v; d. s% n, a/ Z& g/ a' x
  769.           if(fp)( F% ?6 F; V! d& V1 m) Q
  770.           {
    - ?- |* }, b+ H" k7 i
  771.             fscanf(fp,"%s",szString2);4 \1 a2 i' _; m5 k2 ~7 ?/ N
  772.             fclose(fp);
    0 R' t/ ~* T3 ^
  773.             if(atof(szString1)!=atof(szString2))& I4 o. T/ C$ k; B
  774.             {
    ) Q4 _$ j) b: L, C) U9 P" A8 d4 K
  775.               if(!Dn.Connected())
    : K! Y( s5 l. b6 z2 T9 ~
  776.               {- g' V/ `+ C# _1 Y! Y8 T7 r: ~
  777.                 bFirstUpdate=TRUE;& b* f# Z$ b0 W/ s& ]1 q& f4 {
  778.                 dwTotalFiles=1;5 k; }# Z# }6 f$ L+ s, G" r
  779.                 dwDownLoaded=0;
    6 _8 [  \6 W6 _, A8 O2 K$ X/ p
  780.                 bSilentStep=FALSE;
    # |% ]7 S+ Q1 Y) Y, I: v3 Q( v0 G
  781.                 bCompressed=TRUE;$ w+ L% S- _# `' G8 o* L
  782.                 strExtLocal=".\\DownLoad\";" g+ E9 L+ e8 Z2 ]
  783.                 strFullName="update.txt";
    7 Q2 C# D8 \  z5 T  g9 A
  784.                 dwProgramState=AP_CONNECT;
    - z& a2 \1 x* y, M# t& M8 M
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 v8 E8 c1 t) _/ O
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 f' o" Y' Y! U1 m
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");: w$ V5 c) g# }/ o

  788. % P- p5 y# I) l5 T  ?- o
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! v' M3 Z$ n3 Y$ X  j+ ~& s
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    + c8 V) v" x) _" A5 D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)/ w% j3 Q0 g3 _3 Z- V4 z  n
  792.                 {
    6 s3 V, m$ Y) ?5 p# v6 Z7 d; }
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");/ N0 l5 t* b8 H3 n, f; d# ]
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ' f" \8 k, g: P1 L" b  ?) g
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");5 [7 Y0 X! f/ v& Z7 [3 O/ i1 t
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% Y% Q( R0 \: y+ ^7 h/ O

  797. $ s. [/ f* Q' c
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 j$ ]0 h' O* X$ {
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! g6 i/ U3 b9 C8 Y' |3 c+ @/ a( ]
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");' O: ^, J0 B0 n
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 A; F$ ^! g* B3 C! K* v
  802.                 }
    . u9 I' k1 E  x4 n+ F. c% |3 ]
  803.                 dwStartUpSteps=5;6 [2 h7 _$ `) A7 F2 d! @
  804.               }
    6 Q) \, @: ~" H# i, l+ X  b
  805.             }
    8 Y. L5 C: t) D8 N7 ?
  806.             else% u  I5 X& E1 s3 O; s( }
  807.             {
    - q. t0 t* f$ O) V7 M* ^; {
  808.               unlink(".\\DownLoad\\checkversion.txt");
    : |* E  D0 ]% b- ]; [$ a
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ) |/ u/ d# ^9 e! x0 p. \
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. B( S! k: m1 T3 E8 b1 i+ E6 P6 I5 ?
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");% ?* }4 ^" X; b- K

  812. 6 a) Z! {! i" C" B: W9 ?; L0 [5 k
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % R2 H, I: a1 e, t( Z7 C
  814.               dwStartUpSteps=99;0 O9 U' }% G( T7 `  Q0 y9 n
  815.               bFinishUpdated=TRUE;
    + p) e  m1 ^$ I0 A' i  X
  816.               bCanUpdate=TRUE;
    + H+ ?) J! U- S+ q4 l' ~
  817.             }
    : E" i) D: {% ~+ \) d
  818.           }
    * x2 O; p9 j. [- ^" X! K
  819.           else# o4 ]7 }; w' R( @  ^2 d
  820.           {! w1 D: M; t! @
  821.             if(!Dn.Connected())% v0 z. p" i/ j/ ]' V' k
  822.             {% t% _: ^" ?6 }0 x3 o3 g
  823.               bFirstUpdate=TRUE;
    2 Y1 C  x6 i( I; o% y
  824.               dwTotalFiles=1;7 `; s" f; ~2 h+ u
  825.               dwDownLoaded=0;
    5 t3 D( d( R: y
  826.               bSilentStep=FALSE;4 m8 }  h6 G6 z. t0 W, p; A* Y  A0 w
  827.               bCompressed=TRUE;. R- d: X% f' I) _  l; E
  828.               strExtLocal=".\\DownLoad\";
    . I# L8 U' t# }6 P/ f6 S
  829.               strFullName="update.txt";8 u) ?! o% D: K7 v9 i
  830.               dwProgramState=AP_CONNECT;3 y2 j7 z& L6 c( r
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : p. C, U2 W& a% [
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 U  h# k+ P: S
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * V0 V7 g2 n6 o) {  L! v6 z& i
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 i+ X" r* `6 i% k0 s
  835.               unlink(".\\DownLoad\\checkversion.txt");
    1 V* c' H0 M  Q& C+ z0 i
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    2 L* h0 M" f$ n0 \  Z
  837.               {6 h# n8 G  C4 m8 x
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");  g! o& _+ U% l
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    2 i  i- O7 y' B8 f* E8 ]
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");% z' l* e" `: d! y5 E& @. Q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 k( L) X2 y3 v9 _0 ]- J
  842.                 $ p3 }# b6 S& H# s+ L9 }
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  U' m0 X7 }9 ?% ~5 d4 Z, Y! s
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * q5 Y  p9 f1 A" z! O
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - c' m+ t. g( Y- y
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 Z$ k8 Z0 }: [+ ^/ _% l
  847.               }
    1 l$ T# W% a( G) k# [( c# \' W: _
  848.               dwStartUpSteps=5;
    2 r- D' x% {. b
  849.             }
    9 b5 g9 G. l# p6 E
  850.           }
    0 O6 U, }% H/ g) Q& m; e$ Q" @
  851.         }( W8 B% |  y# w- S6 ?8 R2 Z4 ?% F
  852.         else+ U7 u" y/ M9 W& A% F
  853.         {" |" h0 c2 m' M9 R- `" Z
  854.           dwStartUpSteps=3;
      U( x. s# }6 f  d* T: Q) O
  855.         }
      A0 k5 q* l0 S. A
  856.       }, a4 j/ D; E1 y6 f0 N2 ^
  857.       break;2 n7 z/ q# |6 N- S2 W
  858.     case 5:
    3 I/ N6 ~) ^! M# S& ^
  859.       {# M8 t/ i/ F, \2 F0 b5 E5 X
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    , A. I% P" _2 h2 T7 R5 H1 o
  861.         {
    ) K% z5 D  H, _) a6 E1 R
  862.           int opt_overwrite=1;
    9 B2 {4 N2 c: E+ T) p
  863.           int opt_do_extract_withoutpath=0;7 w. ?) H% T( F5 ]. Y
  864.           unzFile uf=NULL;
    ! v3 n$ e( C* H% Q; [2 f3 q

  865. - q5 x; Y9 s% ]/ h( G1 G% q3 X
  866.           uf=unzOpen("Wsa.zip");  u( t% }* M# J$ |- g
  867.           if(uf)
    9 O, J! _3 [, E% \8 b
  868.           {1 }3 [! C, P1 @2 E7 O; y6 ~% T4 E1 a
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);( n# G4 e# i& i% U+ |7 d
  870.             unzClose(uf);4 g2 R4 Z* |% Y
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    / }( I. [) u" D
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");! \2 C3 n0 a5 }, X4 d, p; O
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");- m- o  O- ~3 X: d  t
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 v( E. U. l, }* q3 n' ~
  875.           }: H* l$ _2 Q  O0 F. k
  876.           DeleteFile("Wsa.zip" );+ y  K* f1 H7 ]; N& G& d
  877.         }  {! l8 v7 `. d: n1 i9 }+ j, u7 }

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

, ]4 S  v0 }. f/ U5 ?+ s$ M9 y- i( p& M, m

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-25 10:53

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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