找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
. j# n6 p$ ]# S( }: ]+ C# `" ?
  1. / RevApp.cpp : Defines the class behaviors for the application.  A1 C5 `0 P/ {, L$ n. o
  2. //
    8 ~( |/ s* [  P% E( H! f. s6 K5 }
  3. 8 ~4 @- g8 v, p4 z
  4. #include "stdafx.h"
    ) t% L  ^  x8 L2 J5 L" x' N

  5. 7 K! `0 m. r! C
  6. //#define UNICODE
    7 o  y1 [3 e9 G0 H' L3 L% j
  7. //#include <gdiplus.h>) P8 p' Q7 K# r: z6 \3 {6 r" W% q, p1 o
  8. //using namespace Gdiplus;2 s' G$ |* {, E" P4 B! s2 H* L3 i& _

  9. ' J; u& ?) m3 p  L6 C* o
  10. #include "RevApp.h"
    4 m( V8 }7 R. w" j3 _7 u* k
  11. #include "RevAppDlg.h": z2 {$ r# E2 S2 e5 L8 o

  12. / W8 w+ s5 Z$ }' D7 u# H
  13. #pragma warning(disable:4786): v  c1 L( z5 G! H4 i  h2 `
  14. #include <map>7 D  d$ I# {0 R! z; u1 |# R
  15. #include <list>  b0 Q2 u" Y2 c# A( ]
  16. #include <direct.h>
    # q* J! l9 [1 ?4 `) B# V/ H
  17. / H# b$ @) C; x& v+ {5 g, D8 |
  18. #ifdef _DEBUG
    - z: Z  l0 m+ ?
  19. #define new DEBUG_NEW( o; ]5 g) v! R  b5 v& \0 f+ b
  20. #undef THIS_FILE
    ) Z* V: e7 I3 {+ X
  21. static char THIS_FILE[] = __FILE__;$ C' K. k' @7 H# v9 b
  22. #endif
    , B1 T$ q( K# A7 F2 X! S7 f6 E
  23. #include "SkinResDef.h"" {) g: Z0 V2 [9 C! I
  24. #include "ChangeBG.h"
    & l; |5 ?$ @; g6 s3 M, Q- E9 _
  25. #include "AFXINET.H"
    ; }8 k. \3 ]$ W& s

  26. ! {  Z3 U# E- X# p
  27. #define TRADITIONAL_CHINESE 04 K$ D. D# ^& f. ]) c9 Y$ |
  28. #define SIMPLIFY_CHINESE 1# r( N1 n+ I" m9 A6 F/ S9 W
  29. #define ENGLISH 2, L! s1 w  o- a# b* t' ~
  30. int m_iLanguage = ENGLISH;
    " M! ]/ [, s9 B4 L/ l- O' c% X' k
  31. /////////////////////////////////////////////////////////////////////////////' H0 f2 k& x# i* q/ C' r/ y, a5 A
  32. // CRevAppApp
    . \6 @5 |- C8 x" x
  33. : F! z1 a+ a& [. @) D
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)7 f# ^* E/ W+ l* N9 }7 M6 Q
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    9 K& E2 x! U( i0 R
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ! A2 L) x' Z. c; B. I
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!/ K9 L) {. G: U( ?- ?# f8 k
  38.         //}}AFX_MSG4 s1 l5 ~8 S% G) u9 V; k
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    % a, D; s3 V% Z: m8 y7 V8 ?* \  x7 ]
  40. END_MESSAGE_MAP()2 d9 o' x- @: ~9 |* c  H. s) {
  41. , _# ]' m3 a! D8 {
  42. /////////////////////////////////////////////////////////////////////////////1 [& o8 e3 L* n2 J; N' b
  43. // CRevAppApp construction6 A* m$ E! Y! n9 `" x5 L6 B- m
  44. . j$ H8 S1 V0 b1 `) x
  45. CRevAppApp::CRevAppApp()5 V3 Y0 x$ \2 n) c3 X; u
  46. {
    ; L/ Q) g7 P& f% m, d9 s/ a  P. V, s
  47.         // TODO: add construction code here,
    ; k5 F. v( ]0 o: c* O) T4 d$ U
  48.         // Place all significant initialization in InitInstance9 j2 x0 j- \. A  T( P$ L
  49.   bDisplayIsBig5=FALSE;
    1 I3 O7 G+ a0 v& b2 c% g( j3 u
  50.   bRestartUpdater=FALSE;9 m) |$ J. b& U# u" T8 m
  51.   bFinishUpdated=FALSE;0 U+ [7 V" R5 m$ Q& }* N
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    6 u' Q0 X8 L9 T0 u
  53.   InitChangeDataBig52GBKS();% D5 p. e! H/ `- w8 M
  54.   InitChangeDataGBKS2Big5();, V$ ~# h5 O( [* O% \
  55.         //
    9 T' k3 o) N1 I$ V% H* I% S* w+ g  H
  56.         bClickRunExe = FALSE;
    8 D7 T# F7 y& g; G" A9 D8 J
  57.         //$ a8 J6 y9 P8 q# l+ O/ G
  58. }; w4 `% a, Z7 Z0 G/ \7 n, ?

  59.   q2 x; X3 h: g
  60. CRevAppApp::~CRevAppApp()
    % W6 Q0 J8 k; u
  61. {4 ?8 r; ~, p  o2 j: X8 {; C4 Z. q' ?
  62.         // TODO: add construction code here,
    + Z- B4 |9 {' J8 t0 }  {0 w
  63.         // Place all significant initialization in InitInstance* q- W7 L  S9 Q+ P
  64.   EndChangeData();# y2 x. P; E6 l  D
  65. }
    & ^' g9 ~& c* Z9 q
  66. - u! c# M9 u' d* j8 M8 m; k2 b5 E
  67. /////////////////////////////////////////////////////////////////////////////% u) P  U7 N6 A% P1 G5 R
  68. // The one and only CRevAppApp object
    - }1 ~  w. ]* a$ i; J" o+ \

  69.   {/ d; v( r4 J8 ]+ a* v1 s' i& e. n
  70. CRevAppApp theApp;
    ) b- F7 ]! F; {" V; r* c9 H

  71. % _, o# W5 l( ?1 j( _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)( K8 q8 V5 y3 X6 }/ R: T+ K' ^7 Z
  73. {( X* W7 Y' L1 Q& V  J
  74.   int iEOF=0;
    + R) \6 q2 Y  [! |2 h& M, F: n
  75.   char szTempName[MAX_PATH];4 f! L( o$ L4 u& }
  76.   *szFileName=0;
    / k4 M1 s9 N# \9 C2 ]
  77.   iEOF=fscanf(fp,"%s",szTempName);7 k1 c0 Z3 t+ D5 V7 h
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')3 ?! q1 A# I( p/ f  E
  79.   {
    : M8 r5 ^$ }1 ~% F
  80.     strcpy(szFileName,&szTempName[1]);# b2 l9 Q0 H/ K8 M# w0 |1 t
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)" |7 Z- ~% p2 `, t- H
  82.     {! S- m0 _) M' ~% q  H" s. V$ n2 M5 T
  83.       iEOF=fscanf(fp,"%s",szTempName);* x/ v3 U; n3 |2 L$ {
  84.       strcat(szFileName," ");2 i9 E" o. q0 l! G2 D) F0 u
  85.       strcat(szFileName,szTempName);
    ) z' k& a) ^% G6 k& t2 n% O
  86.     }
    ! |" z1 ?! [$ ]" A
  87.     if(strlen(szFileName)>=1)/ t8 _  r) B; t: J6 l& r) h
  88.     {
    4 F' T7 N, {5 d9 V6 U/ t
  89.       szFileName[strlen(szFileName)-1]=0;8 s. l5 e- O9 g; v6 E/ i0 b
  90.     }
    + i' d. L+ S; |8 L! l% l
  91.   }1 d- i+ w2 N8 d3 K3 r
  92.   return szFileName;
    ( G* `# E, A$ G3 z& K# F% t
  93. }
    6 k- U0 p) x. q8 Q$ V2 N0 a3 j
  94. $ J* ?! z2 i; Z5 D- `9 B9 t1 M& L
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)% ^: U5 p8 e( d4 {' R* Q" w) m
  96. {  ]& P: _8 c/ E) C  y% Q% a, Y  X
  97.   FILE *fp;6 ^9 ~5 ^9 w( \- U5 k' h
  98.   char *key=NULL;
    0 d3 I( p8 \3 h  k
  99.   char version[MAX_PATH];
    * [/ q) X! |6 V# H7 I
  100.   LPUPDATEFILE file,olds;
    ( E1 D$ ~) q" ~& e3 _
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' Q; h" p1 C7 @6 C7 ~( ^- ~' B
  102. 3 Q. e" ~/ B7 ^2 V: |
  103.   UpdateList.clear();
    6 k$ D7 M! T+ u+ K
  104.   UpdateFile.clear();7 z2 m/ F' A2 o* X; v4 Z! F# f& i% k
  105.   if(GetFileAttributes(filename)==-1) return false;
    " O/ D0 \/ Y  @* V: |4 S/ F1 Y8 l
  106.   if(!(fp=fopen(filename,"r"))) return false;$ j  {" `) T5 `
  107.   fscanf(fp,"%s",version);
    8 y5 g- h! ~, x1 `
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ; y7 N( }- |/ @7 T8 s% ~0 F
  109.   while(fscanf(fp,"%s",version)!=EOF)' H! T. t  d! j- i  l
  110.   {
    + }6 ]3 k0 e: F4 G, c1 q
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 y- T: \/ m9 V5 o7 \8 g7 a6 h- D
  112.     fscanf(fp,"%s",file->path);( i$ n! e4 E. t+ y  C
  113.     ReadFileNames(fp,file->file);7 T/ E, ?. Y0 E& H; N
  114.     strcpy(file->full,".");4 q8 G- q7 T7 d( l+ W4 h
  115.     strcat(file->full,file->path);
    ' c8 I% e1 n0 A0 A, ]* Z7 g
  116.     strcat(file->full,file->file);2 G8 P" U9 d0 P  C9 _
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ) F, i0 F3 p. H
  118.     {2 Y# w' N0 l! y0 l& v
  119.       file->vers=(float)atof(version);( P1 v+ Y( {( S7 q- z8 u
  120.       UpdateList.push_back(file->full);/ Z6 Y( ?# K* ?9 E2 |6 j) m
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));4 R) B( o5 q0 ^" t  g9 P
  122.     }* [- {# ?, f) [$ O- z' f+ h. g7 o
  123.     else
    - @: [. g& B6 e  q/ w$ X  {% c
  124.     {
    ! [1 z: Y/ ~4 K) {: H  ^6 [: g5 O' q# w
  125.       olds=(*p).second;
    ) _8 K7 M" w6 ^/ L; C! J% O
  126.       if(olds->vers<(float)atof(version))
    1 G# i  U: {& @, J# j  l" E
  127.       {% I2 A- v- d; D/ d5 N
  128.         olds->vers=(float)atof(version);& H  H3 ?" \# Q& u# L+ R
  129.       }
    ; S. T0 e$ I8 V9 B4 P& f
  130.       free(file);
    ( a! m" j5 S( X/ P+ U3 d
  131.     }
    3 G: k8 b' _( D. R, q( K
  132.   }
    , H4 B" S$ r' A7 i! N, B
  133.   fclose(fp);% f$ H( v% l4 y4 Z: r
  134.   return true;
    5 W7 ^: I) ~9 ^2 ]; H. \
  135. }, K9 q  e7 U$ Q1 Z+ H- R7 ?( C) o
  136. ' S6 W; {5 V& t: a/ w
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    5 s( Z/ G* n6 s+ H
  138. {* L4 s( B! W5 P' j+ v5 X
  139.   TCHAR  szFull[MAX_PATH];
    / s+ }6 c& N# |- n" H
  140.   TCHAR *token,*inter;
    7 u8 e. X% z) B3 c. R# O. J
  141.   *szPath=0;
    ; z' ~6 u( w( g8 y. a# m; F
  142.   strcpy(szFull,szFullPath);
    , C5 Q8 t! ~( F% ^' i1 v
  143.   token=strtok(szFull,"\\/");
    ' H, L8 p( Q" I7 M
  144.   inter=token;, C7 R& [) u2 i8 b1 U
  145.   while(token=strtok(NULL,"\\/"))
    ! U9 F$ w1 J6 z0 A" ~
  146.   {
    / a7 O/ s6 F$ @6 b8 s; x
  147.     strcat(szPath,inter);
    + x+ D3 `. r2 X  t
  148.     strcat(szPath,"\");$ G( w/ E, E, o# h$ c6 p
  149.     inter=token;
    ' u: a( V/ m2 m. g
  150.   }  A) f# v. Q( n
  151.   return strlen(szPath);3 X! V/ v& E  P
  152. }4 }8 V' h( I8 J) }* I# w( a

  153. ; P0 V5 Z/ x  N! E1 \- p+ F
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase), d) M. o/ D) M$ D
  155. {
    ! M( U& o3 @- @, }
  156.   DWORD attrib=GetFileAttributes(Target);  z9 }8 l; }+ {, F
  157.   if(attrib!=-1)
    4 X% S$ X. i0 r& ~' H5 \4 X4 l
  158.   {/ T: k* @$ }1 U- U  S! g% [
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))* @* K; Y: ^  _% v
  160.     {
    * O/ ~6 \/ o( T; Z' e
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 D9 |3 y$ }# ?  m; u0 C  C
  162.       SetFileAttributes(Target,attrib);
    * a, D2 o, h8 i6 N2 Q2 |) S* W
  163.     }
    . X/ b5 |# t6 a
  164.   }
    ; o: x! Y- Z' R, V$ p4 z2 o$ m8 y
  165.   CopyFile(Source,Target,Erase);
    # x5 V3 f' p( O  p; ], Y
  166. }
    # B  ~) n  D9 M- j9 D* K
  167. ! _2 E+ k. M: {; K  [) I
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
      A7 u3 B$ F1 x) B" h6 x
  169. {
    7 M/ P8 H, q0 @( g5 i0 z; H
  170.      FILE *fp;
    ! W9 A5 l% o1 k7 F/ q
  171.      char  szBuffer[8192];
    8 y; }( q9 @- U
  172.   va_list  argptr;8 {5 v2 u9 K5 ?
  173. - g7 g- S4 B' h( o! Z9 o
  174.         va_start(argptr,message);
    + N1 c' W* n0 B, r. r. k" x
  175.         vsprintf(szBuffer,message,argptr);& E/ G  _2 `. }
  176.         va_end(argptr);$ |, Y( t" {6 Y6 Q/ q7 p
  177.   fp=fopen(FileName,"a");* m5 l0 a2 C' V" L6 V' t
  178.   if(fp); }  \. D0 v* j" N6 V; g9 n& M
  179.   {, I7 `0 d5 K% U
  180.     fprintf(fp,szBuffer);
    , p8 x0 Y: R1 m: T9 y$ w
  181.     fclose(fp);7 K9 Z5 X5 Q* r2 i! O/ b- `8 ]& t
  182.           _flushall();
    5 L3 B! X! V. [
  183.   }+ D$ \3 t& i" J- F, w) Q* ]( Q
  184. }
    ' M. ?! W) M# X' W/ V: C; o
  185. ( @: E! s4 J6 W' t: ^
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    7 E7 w' P9 n! S
  187. {  p* m6 h% C( t+ N
  188.      FILE *fp;0 y7 ?: C6 v5 k1 Y* h$ `
  189.     DWORD  attrib;
    9 E: y0 S, \+ [
  190.   attrib=GetFileAttributes(FileName);
    - r# m, J, K( p' s& H
  191.   if(attrib!=-1)- C" U6 `0 o! s% y5 q) y8 W; {; U
  192.   {
    ) R) x6 B: g  ]4 J) ^( S
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);7 f6 W" v/ e; W$ G: P
  194.     if(!SetFileAttributes(FileName,attrib))- w  C& P% ]) Z/ X3 x& O) T* k
  195.     {
    " J7 C: D5 H" }9 Z
  196.       return FALSE;6 v/ j4 h; C5 G1 x/ O. R
  197.     }4 g& @7 ^- C* C. s! `, ?6 A
  198.   }
    & m7 m  G5 \4 S& S& a
  199.   fp=fopen(FileName,"wb");6 h) w6 y% r" l' \1 v7 C; D
  200.   if(fp)+ Y( @# J8 _* `, [
  201.   {  _- J) S/ _0 g$ N( j4 X1 G
  202.     fclose(fp);
      d0 ~" q. k3 k3 I  k$ `
  203.   }
    - o7 M( N# K: ^4 }$ p) I
  204.   return TRUE;" N  N, ]+ Z& l: r/ h; H
  205. }% u% }* X: `5 l. R

  206. 2 s# ?1 `9 Y+ p: L4 c
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ) p! Z% {. ?, \/ {
  208. {
      L: s% ~* ], {6 l+ C% M
  209.   char filename[MAX_PATH];/ N; ~* Z* ~0 O/ {  i
  210.   LPUPDATEFILE file,olds;
    : Y, n( l$ Y+ @1 [7 P4 w) m, s0 W% U. u
  211.   std::map<int,CString>::iterator i;
    & {! Z. n" H; e, z3 Q; ~
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 j8 ^6 M8 K- O( ]1 U
  213.   std::list<CString>::iterator l;. }. ?# p7 a  C
  214. 6 l. z+ p- I- _6 Z) y3 o( g" k, a
  215.   if(bFirstUpdate)
    6 T% E9 U( ^5 Z, ~% Z
  216.   {7 e0 m& q0 j* o$ K4 G1 w" Y# J. a
  217.     dwCurrFile=0;
    9 K$ I* ?0 Z0 B7 E
  218.     bFirstUpdate=FALSE;/ C# e  K+ E2 A, L8 Q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / u6 y& R8 I$ x" J6 w# r
  220.     {/ [4 C- c. m3 a8 y
  221.       dwTotalFiles=UpdateLocal.size();
    & q- c4 e. N, @; u# z/ I0 c
  222.       dwDownLoaded=0;
    % a, W# D$ o: }& A3 z/ ~; s6 @
  223.       bSilentStep=FALSE;' Z  l' ~0 F6 n* F5 p4 Q  t
  224.       bCompressed=TRUE;
    1 M' b  x) A% t3 G$ J
  225.       strExtLocal.Empty();) j* X3 v: S  V, s. C- m- Y; R  h$ {
  226.       strFullName=(*i).second;8 l( z! n) V' V6 q
  227.       dwProgramState=AP_CONNECT;
    " g: ?9 o7 F% t5 S
  228.       return TRUE;2 N3 j& P$ i; Y
  229.     }
    ) G) c( A8 m0 ~; O" p! O1 a, P' s
  230.   }
    $ A3 }0 x  A" V6 A) |$ c' l
  231.   else if(bRestartUpdater==FALSE)2 |( Y) A& x: i: l% `; ]% |( B
  232.   {+ p) ^" F5 [6 ?7 g/ A
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()); j7 |% a5 l$ o
  234.     {
    ' G: @$ L" Q- [9 Q6 d
  235.       file=(*p).second;
    7 c& j8 c5 I7 ~
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())+ A/ V, C, R& X, [, Z/ N9 Z
  237.       {5 v) I2 V5 A4 x7 p
  238.         olds=(*p).second;
    # E7 Q2 g4 b/ }6 w0 \
  239.         olds->vers=file->vers;
    , K( N; F, t  S; ?9 ?
  240.       }
    % z: ]" L' g0 ?% u
  241.       else
    7 t9 N+ }! J9 M' s
  242.       {( l  W5 w; U: {  k) ~/ z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( X; q& |  I& i2 |+ O2 E6 v
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* g) `$ j. {; M1 b: x9 r" a
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    / T  E1 F$ r+ W$ C0 d6 l
  246.       }
    6 w3 k) ^$ y- v0 j( ^# J
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    7 ^7 x1 \+ e) d  L
  248.       sprintf(filename,"(%s)",file->file);
    $ W4 z5 n1 M1 ^9 `' o
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , c, o- J  U3 S+ y1 _5 V: [
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }. R6 `4 b, |3 [& [* j
  251.     }
    : E1 \5 y2 Q+ ]& h; p9 G# d
  252.     dwCurrFile++;5 m6 h2 P7 z0 d3 \; d
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% a, ?6 J* l" e0 s9 ]( _2 C
  254.     {( a) d" u! `- A) N# m
  255.       bSilentStep=FALSE;! @  u& M/ o6 v9 O( O" m
  256.       bCompressed=TRUE;
    $ O+ n7 L. v* h; r4 l% o% v7 J
  257.       strExtLocal.Empty();1 R: Y, S2 S' S) V% K$ Q
  258.       strFullName=(*i).second;
    7 a2 X; `* F4 v) y1 _3 ~
  259.       dwProgramState=AP_CONNECT;
      [7 `- _) K2 j+ u4 z- f! O; @, P
  260.       return TRUE;2 \# x3 j) @; p9 ]* ]
  261.     }* P$ \& X: q: T
  262.     if(!bRestartUpdater)' j0 S9 G; w5 M+ c# \  `: A6 }
  263.     {
    " M4 a7 y* H* F+ s  H
  264.       int iCurrSize,iFileSize;- b2 D! ]9 c0 o. c5 [" @
  265.       iCurrSize=0;
    0 b1 E' N3 R/ x- Y
  266.       iFileSize=UpdateList2.size();5 n9 Q$ e6 z8 G1 R/ G
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ) h6 O" |) }2 S. ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");) S0 M. ^7 R9 y9 P) Q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");) ]2 B' l0 o# Y, X
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 l- X* v' g' t
  271.       Fclearf(".\\update.dat");$ _9 w+ u' A1 g( Y1 ]  n5 L2 ^
  272.       Fprintf(".\\update.dat","Bloodyf\n");0 K, ~# g% c1 d& E5 H+ @
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)7 n: k, h% y* Z+ r; i# ^9 c, K
  274.       {' V1 \$ |# F5 c
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())8 _. F5 N, H3 z
  276.         {
    & e" ?/ a  C  X" D8 @7 J0 i! g
  277.           file=(*p).second;* _2 l7 A* J7 G) ?/ l
  278.           sprintf(filename,"(%s)",file->file);# f6 y, e9 ?) K! `% ?. p
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; Z/ t9 ?- i  q8 X
  280.           iCurrSize++;  o9 ]! o/ B- Z% r7 B
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    5 q7 ?- r* G6 @% }7 f! J
  282.         }
    7 W$ N* h9 V0 O' `% Y$ F3 P
  283.       }
    " S2 [1 W$ V2 }) r8 E1 L: i, E& A# _
  284.       unlink(".\\update.txt");
    9 F5 N/ R' G- Q2 d0 o
  285.       unlink(".\\update.tmp");" J; }! ^; e) r
  286.       Fclearf(".\\checkversion.dat");# j# F5 f) g8 c
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    3 j! y5 L5 Y+ Q! r4 `
  288.       if(UpdateLocal.size())4 R) k) e& e/ |% Z
  289.       {
    5 r6 y) x9 N  _/ ~5 ?  w$ l
  290.         UpdateLocal.clear();  Z6 G: K0 q: ]! j  I" L1 R$ n
  291.       }
    + }" a: o0 F. x# k6 w5 G; S4 P
  292.       if(UpdateFile3.size())( `' y9 x5 ~0 l/ p' q; w% q$ n
  293.       {
    3 ^$ F; a' k  u; r* |
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 ~8 h2 i" `( F
  295.         {
    / `4 s' V1 g. o$ D
  296.           file=(*p).second;
    " b* }% n2 S3 F4 q
  297.           free(file);
    5 G$ W" j! V2 j9 a# q
  298.         }
    $ a; x3 D9 Q3 B
  299.         UpdateFile3.clear();0 m* h6 _8 l5 P8 _6 L9 H; m# F
  300.         UpdateList3.clear();
    7 m/ D% r2 [, n
  301.       }
    % _1 V' p; T% O# L6 b3 v' ~8 p# X0 X  Z
  302.       if(UpdateFile2.size())3 ^$ K# r: Y" g1 [- |: u+ O. s
  303.       {( b' `8 g& Q2 u1 Q6 S
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + H+ k  Y& x0 z: _
  305.         {2 e0 D, z- V" r2 r) U- X
  306.           file=(*p).second;
    # p* W/ O7 r1 b7 m$ @3 Z. M
  307.           free(file);
    9 r9 k: Z2 A: ?0 l
  308.         }
    4 C$ u3 a) L' V7 Y$ _4 ^
  309.         UpdateFile2.clear();
    ) m2 f& @. t. g; J6 c& P5 ]) i
  310.         UpdateList2.clear();
    1 f/ {& C# f6 ]
  311.       }2 Q2 E( I3 k4 x! P+ q+ {
  312.       if(UpdateFile1.size())
    % e0 h4 O* N1 t# Q5 z
  313.       {
    1 \" ^9 {5 ]; [# D3 f
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & ^# _3 X' N+ Q- L/ x2 X
  315.         {
    ; g" x1 }) O; F: `# @$ G
  316.           file=(*p).second;
    7 l+ F+ U+ y4 h3 S
  317.           free(file);
    . a) c5 n; I7 N/ O( \, q# U
  318.         }
    # a5 l3 m5 y: |- a* u/ F# p
  319.         UpdateFile1.clear();  t% w+ I4 j8 x. V6 M# {1 o
  320.         UpdateList1.clear();
      t5 U0 Z2 h- w& \4 ~& \
  321.       }
    9 ~: o% D0 }2 ~
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    8 t/ S: B+ z. t9 W
  323.     }
    - K# Z) @6 i/ E  P# I4 Z9 F
  324.   }
    # p! D! r0 ]. ^( P
  325.   return FALSE;* e. ]& P, v/ c6 d; Q7 v3 j' B
  326. }
    & G, Y5 \1 F7 A' d. b2 S* j% x
  327. , C9 g7 B" u# k
  328. void CRevAppApp::ClearAll(void)
    1 E+ \8 Q. N6 q
  329. {
    0 V  }2 V+ o: ~% H' R& L0 w
  330.   LPUPDATEFILE file;
    7 D' j. `& t* E" E' M5 F
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * M( k7 b; r/ l6 e$ r* u4 n
  332. 3 ?1 r# w' ~% v! a/ f
  333.   if(UpdateLocal.size())
    1 J+ k5 r* r5 B; _7 d" A5 Z. S  X1 z
  334.   {
    ! O/ n; l" {/ ^8 D! P4 K+ X% ?/ ^
  335.     UpdateLocal.clear();
    9 j2 z3 X1 F  s3 W/ L! t7 p, {8 t
  336.   }
    # q/ A- T/ N! [8 @! r7 @
  337.   if(UpdateFile3.size()), B5 S; C4 O2 ?3 X  G
  338.   {
    5 G- ~% f+ y4 q: T( w1 R& {) D9 T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' i( S# z; J) }* a
  340.     {$ T6 O9 L* L+ b& ?' a- C
  341.       file=(*p).second;
    & t& f& |  G  y1 Z& p1 _
  342.       free(file);
    7 \& R# |/ ~4 U; k* m: q7 R5 P
  343.     }) p1 H& a( ?) i* S
  344.     UpdateFile3.clear();3 J; S* f' e$ J7 w) y! |7 ?/ x
  345.     UpdateList3.clear();5 s4 S1 N7 O' y
  346.   }: @+ ~- W/ q# \. H" S, t3 e. h; o
  347.   if(UpdateFile2.size())1 b9 M! y% b4 V  |! ~1 P" v
  348.   {. t) {9 x. I6 @9 h) d1 ?" Q1 K
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* f! p# U) @. D/ K! K4 O! f+ I
  350.     {
    ) A7 n! \7 {) I. y9 }5 Z2 v) w
  351.       file=(*p).second;( [- ?% O) l2 f3 _& f+ f9 v7 O
  352.       free(file);
    * s' ]. @, n0 {8 }" t3 n
  353.     }, _# m# K' ]; f0 U+ \5 }; q  T3 R8 k1 ?
  354.     UpdateFile2.clear();
    # W  A' [5 I3 s& [# H  t2 ~  {
  355.     UpdateList2.clear();
    & X$ u0 |9 i9 O  l% a" F8 W
  356.   }
    ! l( Z! C3 b/ v" f; ]# |% Y
  357.   if(UpdateFile1.size())( X* X) @& j! X
  358.   {
    * C! u1 p* |; F1 H
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( a6 |6 y, c' {
  360.     {3 g! e+ N" a2 ~+ @4 L2 Q4 U
  361.       file=(*p).second;) `% ]! e, |( O+ Q) F2 G! X$ _
  362.       free(file);' w* W8 c) c# R& W  G4 h5 p
  363.     }
    0 F! u" p$ D' C% e: D8 n# x$ J
  364.     UpdateFile1.clear();6 B& c- `6 T" S) x' U- d6 T
  365.     UpdateList1.clear();- A" ]( z# ~$ T1 H) j: Q9 h
  366.   }
    8 ^  Z0 l# l" b% l1 r) X/ H: n- q
  367. }  2 N2 E" }9 T  ?0 @
  368.   0 A  x  \% ?* f* D
  369. BOOL CRevAppApp::CheckLocalVersion(void)- q" _- Z5 I4 }8 p, o0 e; x
  370. {; G  k/ K+ }6 P4 g
  371.   int c;/ _: e; A; t8 t3 c
  372.   LPUPDATEFILE file1,file2;; ]. @1 ~" d  e! W8 S/ }8 C
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ! Q) E8 l# M, ]: S
  374.   std::list<CString>::iterator l;
    9 K# k, O$ C- U% e# }

  375. + H" Q0 d2 q; R- [
  376.   UpdateLocal.clear();7 E4 E  g: m9 [  g! k7 f
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);) P9 a+ G+ P2 t# U+ c! E
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ' |% }& \- |4 E* L6 m: e
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);  N9 H( K8 _* z: ^
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    , }# a, n; K: a9 K: K8 Q
  381.   if(UpdateFile3.size())
    . M; v  C' r& \6 x' w
  382.   {( O( B9 E) O3 l
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 y- d2 E8 F& ?9 z5 b9 b1 q
  384.     {
    $ L5 V5 O# c. |
  385.       file2=(LPUPDATEFILE)(*i).second;4 o1 w' a# y; y. K* _; B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' \" v2 H1 }0 c# h2 y: [
  387.       {
    3 D" n+ A  G* m- ^+ B; @% g
  388.         file1=(LPUPDATEFILE)(*p).second;
    3 m( R! \/ v5 _7 y9 {& f! C
  389.         file1->vers=file2->vers;
    + Q+ t$ G+ V- a9 z" y
  390.       }
    - }5 n! f' [8 G' R) r' C7 s! c
  391.       else: P) M7 [# t# ?/ m$ z% z, I
  392.       {3 F, ]. V, p& G6 K; C" ^/ Q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # K( N, Q0 G- q6 F
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - L/ n4 y/ A4 l: w
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));: U# p0 W. x) a4 @+ v! w' Z5 i
  396.       }0 k9 x. @% j+ T) l
  397.     }7 g/ d0 K" w! N, Y
  398.   }5 b, v/ r- G/ z% Q8 ]6 U
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( M5 K# O/ w: ?" T: Z8 m/ x0 r6 |
  400.   {4 L$ I3 B, z/ Q2 D
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())) O7 B/ m% |- ?  F+ y, |) q
  402.     {) @3 p9 O+ |# S4 {& B  |6 H2 k
  403.       file2=(LPUPDATEFILE)(*i).second;
    5 X3 \% k) a7 k# J+ M0 ^
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 m" s% m$ o7 V+ s) X
  405.       {5 ?1 Q- [& L; k1 l
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; K6 o5 j) y# a7 _! O( b; c
  407.         if(file1->vers!=file2->vers)
    " ~3 n& v3 k: k
  408.         {: [/ L: {: }* o# O
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 I2 q0 s8 K# w& [0 s& G7 N
  410.           c++;, @8 K8 L0 B  }' ]8 q' h
  411.         }
    * J& ]3 h& Z* W& {: w9 o
  412.       }  }0 O* k9 {. x$ \( [8 Z
  413.       else
    - K3 Q8 k. h5 D; ]& m% X) H, `
  414.       {% A# y$ i$ T1 F2 [) N3 m
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 d! D( o; d9 i5 m
  416.         c++;
    7 L: A2 s/ R$ J* K6 z  c
  417.       }4 h+ I  ?. {1 p& d$ i
  418.     }# V1 U$ A: T6 y* ~* Z, D" [
  419.   }4 ]3 A' _7 D5 d, h
  420.   unlink(".\\DownLoad\\update.txt");
    % ?4 t/ P0 O. Z) u% q" ?
  421.   if(UpdateLocal.size()) return TRUE;
    " Z3 X8 m5 _! K. }
  422.   else                   return FALSE;
    " g/ W; h2 d3 B! X  I
  423. }& K! U3 f! Y9 B

  424. 1 U: A, x1 s- u9 ^- [7 S
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"% Z0 w: w5 s  f* c6 T
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    2 ^9 ]# t# R# O' S

  427. 6 L+ [. N9 [* ]9 V

  428. $ |7 m5 Q3 J7 U
  429. 6 Y! H2 y& \' q* m, l
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ' ^+ M. J0 x* x% g3 G$ h
  431. {% n; P9 e: X5 f% }/ ]* T
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;! S% X, I) c* q1 G- Y* `
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 L$ M! V, T# P+ O, d  [% t0 T
  434.   {
    6 t- ~% s8 ?* ~0 Y
  435.     char szLanguage[50];
    + W' I( j' M- E; y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ M; t  R6 w; g& n* q5 h
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    6 w7 h7 K' v* z: V4 @
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - h, }7 Z' q# s% W
  439.     else                                   m_iLanguage=ENGLISH;
    , Y+ k" T0 l; P2 O6 A' N0 L1 ~
  440.     char szRegister[100];
    9 y. ?: @5 |' b1 z; O2 B3 T
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 D5 I$ `! Z' |2 E- Y" ^; N8 e( J7 N
  442.     strRegsName=szRegister;
    $ S" a% {5 P' Q8 T/ `9 e& k
  443.     char szPatchURL[100];1 ^' B8 k9 T' ]/ @0 J1 g* R, ]
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 q2 c: d: b1 E' T
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- M4 @* g, {/ ~; ]: ?# k# E$ W
  446.   }' s$ ~1 [9 p( d7 [8 k
  447.   else
    7 s' \( a$ m& N, a+ F
  448.   {" F3 l& j/ o. Q3 e
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' n# a. v: ~. S) e& P# r, [0 a
  450.     strRegsName=DEFAULT_REG_URL;
    5 g5 E2 E5 C, V4 L) r2 @
  451.   }/ ?2 F# z' L& P# V& `! M2 A: W) q* _
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    , I2 O9 o' x; H; r4 H, {# V
  453.   {
    1 ]* `4 ]( M2 N4 o7 J3 l3 y9 A
  454.     char szIP[50];! P; i6 U. p4 l: }1 }
  455.     char szDIR[300];
    8 B$ A# H- ^- p0 Q. B
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))& s3 {: F) s5 P( G6 b  l9 z
  457.     {
      h6 ~2 }% W6 U) D; W3 c& _
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");5 S8 E1 N. H( l6 c; A4 ]6 ^3 q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ' }! F/ m# C7 G$ u
  460.       strHostName=szIP;* B7 v/ U) `% K. X3 w3 C) u
  461.       strHostPath.Format("/%s",szDIR);
    4 |1 r- l1 Y; B: {4 U9 F; B3 @4 V
  462.     }
    0 A6 N$ Q+ Q6 c$ _8 F# {
  463.     else
    ! I$ W3 {; K, y! F
  464.     {
    ) d& L: |' r$ w$ b/ f: p8 D- P2 F
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): ?$ t5 H: A! T7 _2 j. O
  466.       {# |$ L+ s' ^1 Z# V
  467.         char szLanguage[50];8 d. ^% E) q8 O: f% C) H
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - ]( {7 H: S! P" h
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    - R- Z" l9 g6 ^) e$ F7 e
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ H7 j8 l# P+ O' x  Z
  471.         else                                   m_iLanguage=ENGLISH;6 g' z: s( k) ~" ]/ l" S
  472.         char szRegister[100];
    7 q, O% w" g+ ]; f1 r- V$ R, ?1 s
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' M+ X, _8 b& W- e9 i. z5 L
  474.         strRegsName=szRegister;  [* J& S. r: e+ p$ m! z1 k# n' `
  475.         char szPatchURL[100];: T$ S9 p/ c4 d* ~' h3 \- A9 k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* ^# N- g, _% k# ^; e
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, Q( @) L$ M$ c
  478.       }
    2 G# G  e" B9 ~" t7 \" s
  479.       else
    $ t: c6 Q1 h2 P& O& b( F
  480.       {
    8 M- T5 @% n# ^! k  @
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & m4 V8 L# ~9 X/ E4 [
  482.         strRegsName=DEFAULT_REG_URL;
    , J- s! C+ n6 t' |; C* S6 E2 @
  483.       }3 x2 b, o8 s" P4 v! V) T1 {
  484.     }
    $ o& h' e- B( o* M) O, @
  485.   }
    0 G5 y9 `3 g; H4 e: t* i6 F5 |0 d
  486.   return true;5 M' _# Z2 P) @: O
  487. }+ Z" v% U; ]4 `" a

  488. 5 o0 N' P8 x, ~" D. L  Q2 \3 c
  489. #include ".\ZLib\unzip.h"
    ) @. d& }1 f4 J+ k
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 J0 ?6 N( z* d  K
  491. /////////////////////////////////////////////////////////////////////////////7 F! G" R) e2 u: i/ _
  492. // CRevAppApp initialization
    # }0 ^' S. A9 g7 m- u" J! O
  493. " @5 a3 K# o1 S, ]) D
  494. BOOL CRevAppApp::InitInstance()
      U! ?. j, X2 I% q" f
  495. {
    : `8 |  u0 w& W" x2 I
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    5 P4 R% E: H/ G

  497. , }2 R- K: ^+ P3 }
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);1 |. y0 _) a- i7 @5 z7 ~, W
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    8 w1 G' q2 a& W) ?& }7 U
  500.   {7 l9 x' u) D2 X/ o! h
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    8 H* e: g0 Z( R: `0 y: \
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 Y6 h2 d' q# j* @
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    : ~' c4 E+ e3 i1 W) E1 @: P, l
  504.     {5 O; h* Q  a4 e9 k% ]5 H5 q
  505.       strcpy(szPath,szPathTarget);
      l- @7 ^" @1 h7 z; f, R- ]
  506.       SetCurrentDirectory(szPath);1 F/ i, I$ B; F7 U! Z
  507.     }
    & y/ B4 H' n$ R
  508.   }. H! p# p$ Z9 Q4 z5 ^
  509. #ifdef _DEBUG
    8 i; a4 T. r0 t8 j
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))7 ?. @2 p" L" }
  511. #else
    ) N0 ^6 ^2 R3 x' h3 [
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  d2 }9 Y$ w4 N$ y$ ]
  513. #endif
    / b; l; W$ O8 r" [# |5 g9 y- e
  514.   {( D/ G. @5 r% x1 |4 I+ i
  515.     char tempFileName[MAX_PATH];
    9 f0 l2 x! {* r; J- B! S. S9 }
  516.     strcpy(tempFileName,szPathSource);# m3 U, S! m4 l; f' q2 I- B
  517.     tempFileName[strlen(szPathSource)-12]=0;
    , w* h6 {' i* D
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    0 Z& V# E& e3 B; ~4 v" S) D3 h, i
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);  T" Z. M+ x1 @1 D, u9 g
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    1 v6 T: o1 b. v' |: m8 P& h( j
  521.     return TRUE;* f" p* a  f) t, r& `
  522.   }; B; H, @. q4 ~) Z& ^
  523.   // Nuke 0118: Delete run.exe
    * I: L% a2 P0 R4 i0 ^9 a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
      Z& j6 P0 Z* T2 K% w. _
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");( g, I* T6 S$ I) `
  526.   if(!ReadCfgFile("Config.ini"))
    " }, d! T8 r# _% O; ^
  527.   {
    4 l5 n- ]4 h4 t% K8 |9 I9 I
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 ^; V; u+ p( r1 D8 J* {5 |
  529.     return TRUE;" ^2 Z) j+ c# k2 {0 h3 \& w
  530.   }
    / P- i6 F% u* Z
  531.   HANDLE mutex;1 p! k* a4 A3 d: n
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))" e+ ?6 f8 y+ p% H2 s
  533.   {( U& t& {* a$ \% ]% }
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)$ [! m" ~7 g2 K* q' f
  535.     {5 C9 m7 S; ^$ }6 K; i
  536.       CloseHandle(mutex);9 N$ z5 H; N! g/ O9 g
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    0 O, A! Z' }! Y0 {5 z+ _
  538.       return TRUE;9 o( F& Z6 s7 l+ d" t3 L
  539.     }
    4 d/ m- B- b% g% `
  540.   }  
    2 j* `# e0 I! c
  541.   CloseHandle(mutex);7 D- h: B5 b, f8 B5 s7 H  S1 P( ^
  542. ( K2 Q' w5 r9 ~8 [$ B
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    : k$ U6 l0 F$ E
  544. 4 C5 D, n- Z1 s% P8 W  Q
  545.         AfxEnableControlContainer();% Y4 X. A, Z7 t9 w! e% {5 M
  546. / z/ R7 t& Y* ^9 c; ]: C. [. x. i- q
  547.   bCanUpdate=FALSE;
    3 c5 r" _. M4 s/ i, X
  548.   dwStartUpSteps=1;
    : P" N2 ]5 ~5 j; Q4 e
  549.   dwProgramState=AP_NOTHING;( y6 {% E) F+ X, t7 M1 V6 {* _/ Q
  550. / J; s7 N0 Y2 R" `( ]; g; o2 M
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    , L0 M/ W9 v1 y1 J' L+ F( R

  552. 9 d" ^9 {6 `% G9 P
  553.         // Standard initialization
    6 U5 d$ m! z% u
  554.         // If you are not using these features and wish to reduce the size6 C1 @+ Z- q5 y. P, A% M
  555.         //  of your final executable, you should remove from the following
    $ l: d7 }% [7 G; `
  556.         //  the specific initialization routines you do not need.
    1 g/ d$ X5 K" K$ Z' p0 n2 q% B
  557. * O2 d% F. t: ?# B* K; j
  558. #ifdef _AFXDLL& _# g& @4 v4 _3 P- l1 ?/ Y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL5 v% Q4 O! Y+ [  L
  560. #else
    * G; A. C  a0 i" ?9 |; m$ n: w
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically5 l: U. V8 U1 a% f* y( P
  562. #endif
    , H% t" n  v* f5 a
  563. ; W" C% F7 l/ d$ W
  564.   dlg=new CRevAppDlg;
    + Q+ l$ |/ o- W7 m9 {# W+ N: l
  565.   dlg->Create(IDD_REVAPP_DIALOG);! z) S5 R$ Z& }% j# `
  566.   dlg->ShowWindow(SW_SHOWNORMAL);. M. B1 W4 u8 {8 T
  567.   m_pMainWnd=dlg;7 p9 I; i/ \" U6 H% V' O0 W' ]

  568. ( W% c0 A; W* H' H
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    , C5 y1 k& d5 U

  570.   M& ]$ F' \* ?( E) H- q
  571. //  GdiplusStartupInput gdiplusStartupInput;4 f- Z# ^' l, y- a2 f
  572. //  ULONG_PTR gdiplusToken;
    " A% J, e0 r/ ]5 @4 \
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);9 b. h7 y8 L6 B: q0 P

  574. 5 ^, _2 G4 H. G7 q0 X' t
  575. //        CRevAppDlg dlg;
    ) }, \+ N( M) f2 t, j
  576. //        int nResponse = dlg.DoModal();0 D5 _  _' m; V/ g0 c
  577. //        if (nResponse == IDOK)
    2 k. H& _# X. }. |9 T0 G3 r8 i
  578. //        {
    ' ~  H" n' j7 X$ ?% _3 X# t
  579. //                // TODO: Place code here to handle when the dialog is' I* k( G* F' T$ O$ B
  580. //                //  dismissed with OK
    # M5 D( o( a; j0 N
  581. //        }
    ' Z, g7 _# O  E- P3 W
  582. //        else if (nResponse == IDCANCEL)2 _. T+ b" L" n9 ^2 s3 R$ i( A3 _
  583. //        {) V# T8 O( f. q0 X
  584. //                // TODO: Place code here to handle when the dialog is$ k: L1 l( F6 y. V
  585. //                //  dismissed with Cancel7 C/ P& i/ M3 i
  586. //        }
    9 \1 G' I: ^9 C. E: Y* O
  587. & M: u; ^$ A8 L. Z
  588.         // Since the dialog has been closed, return FALSE so that we exit the% s' j" K& H! v: x7 N( u$ G& R; k
  589.         //  application, rather than start the application's message pump.) `* F8 p. L: k
  590.         return TRUE;
    + H$ Q4 h* i8 o0 Y* W& @
  591. }
    9 r) q9 J: s2 u: Z

  592. $ m1 t4 p% B* `
  593. char *CRevAppApp::strtok3(char *pSource,char *token)+ s7 L1 t; ~0 {, a0 ]* y: J$ r9 I
  594. {, `; j) ?6 E: U3 T% N$ K
  595.   int i;8 w2 s7 u. V$ _/ [( f2 k7 B
  596.   char *szRet;2 V1 e1 U! c, C* K. ^

  597. * e; o) v7 w3 Z8 |! v6 U1 `
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # t. r8 a9 ~! D1 j: N
  599.   if(sztoken)6 K/ M  F3 M/ Y. W( R$ {! u2 ~
  600.   {; v% }/ w7 ^7 s( p# Z, f( O( P0 o
  601.     szRet=&sztoken[itoken];
    4 o% i& U' c* L3 _6 ~
  602.     while(sztoken[itoken])
    # \2 U( \3 L! l" F, r% R
  603.     {
    0 {' T: b7 d: v1 ?
  604.       for(i=0;i<(int)strlen(token);i++)
    8 q; S/ h+ B3 w8 N
  605.       {
    0 _1 N0 c2 q8 |5 c% i
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])4 k: b, j" R4 p* u
  607.         {
    5 }* g. ]) {- F6 Y8 e4 C  |
  608.           sztoken[itoken++]=0;6 D2 ]7 z! B0 x: v
  609.           sztoken[itoken++]=0;8 f" I+ \( _5 d& i$ ^
  610.           return szRet;
    2 t! f+ l$ w3 [8 N) n, J
  611.         }% J  c9 r5 {/ ?9 s4 l/ |/ Q2 H  E; E
  612.       }7 o1 g% ^6 v' p* C7 Q4 h9 p
  613.       itoken++;
    0 R+ j% u7 ~8 l* y
  614.     }# A% Y9 B8 o- i5 e* I. S
  615.   }
    , t9 v: u- S3 L. g  G" r4 y& a! M
  616.   return NULL;
    8 q: {- A/ H, F
  617. }2 o+ E! \5 ]- \* G* @- w2 [/ u

  618. 4 o" Y/ C0 Q! U1 c
  619. void ProcessProc(long Total,long Current)1 v. B' M* [6 p* T1 Y1 Q; v5 i
  620. {2 ~0 Y/ d- V4 W( N" B
  621.         MSG msg;
    1 z5 s( H7 n# T4 B4 k+ t
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ( Q, p: O" A' `8 R
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    % j7 K# s) m0 i8 s- x# U; J! l- u5 S
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))# m5 ^9 ]/ z' Z6 [
  625.         {! j; y3 c3 j: k% Y, l  z% [
  626.                 if(!GetMessage(&msg,NULL,0,0))& o3 d4 Q5 w' l
  627.                 {0 a$ L6 w. [/ ^  _$ N( c
  628.                         return;
    - \/ D* y( V2 f
  629.                 }% E, Q: Y. w+ n! Q+ W- Z. C$ L" J
  630.                 TranslateMessage(&msg);
      R7 a" Q8 g1 w! e# V; R
  631.                 DispatchMessage(&msg);
    5 v9 D6 G. J" d% }, R
  632.         }        ' S! P! G* W4 z" k' \* x
  633. }' v# Q3 \) Z4 ?- m% v' ^( E# q
  634. ' o, j% j/ i" J/ T3 ]3 U  z
  635. BOOL bFirstChar=TRUE;4 d( Z, d; p1 k" h; q( z/ ~

  636. " }  \$ y1 L$ @4 Q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # @0 X9 o* v5 n4 m7 P3 Z
  638. {- C& s9 P/ {" B, M
  639.         // TODO: Add your specialized code here and/or call the base class
    0 t1 n( {. ~# S+ ]1 b
  640.   switch(dwProgramState)
    , F2 R& }) _3 Y9 p0 A+ O5 f
  641.   {
    9 w" J/ B2 u, a* A* L
  642.   case AP_NOTHING:
    7 O9 h, g; f* O- O
  643.     switch(dwStartUpSteps)
      |7 {2 W. X* b9 q2 ^8 Y
  644.     {
    . C8 \9 m0 H6 l! a% z
  645.     case 1:/ `7 ^) H( f, @; n/ h! b8 B
  646.       {+ m) t. g; |7 [, A; ?7 O
  647.         int i;
    9 X7 z, J$ j; n2 [( _+ \
  648.         CDC *pCDC=dlg->GetDC();! S; s0 ?. P" ~; t5 L
  649.         HDC hdcwnd=pCDC->m_hDC;7 X7 g2 k1 L8 ^- _
  650. //        Graphics graphics(hdcwnd);
    , A6 k* H& ~5 g  @) ~
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    / R* w5 d( [/ M+ W) O
  652. //        INT iWidth=bitmap.GetWidth();
    9 D* N- N" U9 H
  653. //        INT iHeight=bitmap.GetHeight();' G& I) P; c* b9 t: Y
  654. //        Color color,colorTemp;
    . V8 v- M/ j* D
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    - v5 g' V- E" C% i. F9 e6 z/ v
  656. //        {0 `0 \) f) L* b
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    3 O* R* \' m% F7 H, X4 L7 z8 d" v
  658. //          {9 e' g7 y6 @' d
  659. //            bitmap.GetPixel(iColumn,iRow,&color);2 ~1 [( ?. P/ [! t  w* D
  660. //            colorTemp.SetValue(color.MakeARGB(5 |/ I1 `, W  f' H6 ^( P) R" q
  661. //              (BYTE)(255*iColumn/iWidth),
    * l( P0 Y7 c' E9 H
  662. //              color.GetRed(),
    2 d9 H& b3 X/ \$ n% F
  663. //              color.GetGreen()," Y" K# c7 S2 a. `- `  [
  664. //              color.GetBlue()));! {6 {8 k# N+ A5 O6 L, P& Z5 N
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ' N* W/ T6 S; x) u  k! D
  666. //          }; X7 L8 @  [+ _  W# \
  667. //        }8 o- A1 q3 u8 L3 k6 Z5 w7 E; Y: J& B6 [
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);* q; b2 U5 x8 [9 U5 n3 |' C$ m8 f
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ |  p, K0 l; W. s
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    7 m  W3 x) D% n- }0 J7 D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ h( x1 {9 Z1 `* `5 K, f4 o
  672.         for(i=0;i<240;i+=8)
    % C: Z8 O+ q5 H* L* t$ S
  673.         {4 B3 i( C1 Y) o* m9 K3 y7 i
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # e! f) w) `& _
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 g) n2 V# ?. }) q
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # e* G8 T) u! g; w; i5 _* ~
  677.           Sleep(33);8 k( |2 I. o. a" L6 p, P- b% x# O5 t9 }
  678.         }
    + A! Z8 Z, S" |: ~5 W& u$ K& p2 }
  679.         Sleep(1000);3 ?: C: f, ~5 d: u6 d: V! R
  680.         for(i=240;i>0;i-=8)
    / t4 F! Q7 V! n. B- \' U
  681.         {
    ' ~- G. L& l3 H7 h
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 f/ x! c9 ]: W
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; n7 x4 @) `; ?! Z8 V2 Z8 [+ `
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; c, H$ d5 T) r" f7 w7 T
  685.           Sleep(33);
    . c4 s/ _, F: }# }7 `& y2 ]7 J0 p
  686.         }
    7 Y, x: T$ Q. K- E
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( n. i7 X4 c. B- I
  688.         dlg->ReleaseDC(pCDC);
    ! G0 D2 K$ A2 ^. S% m
  689.         DeleteDC(hdctar);
    7 S- @1 @8 V# h+ R; m: S
  690.         DeleteDC(hdcsrc);
    ! Q( s! H% z6 {0 Q$ h" H
  691.         DeleteDC(hdcorg);
    / F4 l) h8 y; _& A* j5 I2 ]
  692.       }
    # K" @8 B8 F/ I9 }3 y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    . O7 A; V) a% U+ y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    0 n( H, C$ ^" g/ s( G- ^
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");* H2 Q7 t7 }2 ]0 q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");$ \+ V; d: f7 Z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 m( c) s$ \: ~1 t8 O) ^# I
  698.       if(!Dn.Connected())
    # E) Q$ S9 R! G7 r
  699.       {, \* ~+ R' W' A  F; d
  700.         dwTotalFiles=1;
    * |7 ]0 u- ?, [  |& v' c
  701.         dwDownLoaded=0;
    3 w3 B+ T: o: s' Y, s
  702.         bSilentStep=TRUE;* J8 V4 L% {( r
  703.         bCompressed=FALSE;
    9 z% I8 `8 a. L) k. a+ S% D
  704.         strExtLocal.Empty();
      X6 `! `7 Z" z, R+ k  P1 I
  705.         strFullName="readme.txt";
      v1 G! W3 U9 A4 f/ q5 s
  706.         dwProgramState=AP_CONNECT;8 W4 V" C: S1 s8 I9 U# j
  707.       }4 m) ~7 S2 d% }$ Q) y. f. J
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();5 v/ v, d, p$ o! i- q% b8 q
  709.       dwStartUpSteps=2;8 ]- ?/ {" @8 S5 @! N
  710.       break;
    5 A- R9 B* O. j+ a- ?- r& ^8 j
  711.     case 2:6 i) n* ?; K: `8 H6 K. I
  712.       {
    8 w, |4 @$ S3 q$ U
  713.         int iEOF;- b: q2 o: j! y5 x5 M
  714.         FILE *fp;: W( g! o6 J! o9 T
  715.         char szString[512];
    ( N" W2 h6 w+ N! k! @3 d
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    6 }5 j! C% m/ @: E* J. B
  717.         if(fp)
    9 {* j( W! e- U; D  ^: {& `0 H
  718.         {
    9 a; k' A. y2 ]8 h
  719.           do# L. V' a$ V( }) Z
  720.           {' G- P2 b! V# J$ ]6 T) m
  721.             iEOF=fscanf(fp,"%s",szString);
    . J8 L, w- j" h$ g
  722.             if(strlen(szString))6 {* C2 ~* `; \5 M# N9 H. K/ r4 n
  723.             {
    7 \) n6 f1 G/ }, e4 l8 f4 x8 O" e
  724.               if(bFirstChar)2 Z% G/ ]" z& O# o0 I9 m
  725.               {
    3 O  W3 x9 y  c* y4 O- E! x
  726.                 bFirstChar=FALSE;* C3 J7 z! w7 N0 V$ p
  727.                 bConnectIsBig5=FALSE;
    ) b  {( u3 U; w
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;6 m. k: W+ ^8 z6 g# g
  729.               }- c2 \8 r1 _9 F4 P
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));2 {" |; t$ u( P( W- c, f
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    , E  _8 u& @( m9 y
  732.               dlg->m_ListText.AddString(szString);
    ) K- |4 p, @) u
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 ^2 |  C& F, i! Y4 l# ?& k7 ^
  734.               *szString=0;
    ; D& d+ @5 f8 Y) Q% P% I/ S/ E
  735.             }
    . R$ u, q1 k! }$ j
  736.           } while(iEOF!=EOF);) V- P- q! [# e' ^, {1 V% d! _
  737.           fclose(fp);  l& |3 U9 a! {. ]" G
  738.           unlink(".\\DownLoad\\readme.txt");0 q4 [5 C" b1 A* M
  739.           dwStartUpSteps=3;
    ! q- C: ~& i6 w5 L% \% \
  740.         }; }% I2 n" n7 a6 t
  741.       }
    0 e& s8 m3 D- N/ ]& G7 }- V+ D* J
  742.       break;
    8 {; {% X  Y- S1 U* u+ F* Q8 `7 S/ S
  743.     case 3:9 ~- c: ~& l# \: o  z. ~
  744.       if(!Dn.Connected())4 E: y2 B* s+ T
  745.       {/ G: R* k3 N3 |9 J  t
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    , f: l5 n# ?1 ?( @2 Q% t
  747.         dwTotalFiles=1;
    % T: S/ {" }6 ]6 v. r) P
  748.         dwDownLoaded=0;' S$ G1 \3 K9 N% K
  749.         bSilentStep=TRUE;
    & M1 ~6 S; R6 t( l7 i8 B) }" K& L
  750.         bCompressed=FALSE;
    . S9 l" N0 B6 G, t
  751.         strExtLocal.Empty();
    $ |2 ^. H) ~" i* @
  752.         strFullName="checkversion.txt";
    5 @" k& Y' j* L; T2 s" p6 I
  753.         dwProgramState=AP_CONNECT;
    9 A, v: y% N9 y. _: ?& x* R
  754.       }  K% b' i! }0 v8 Z: {
  755.       dwStartUpSteps=4;
    6 ?7 `2 }' `& G, t9 V% f, `2 s
  756.       break;
    $ V% F8 m6 A& m! u7 f
  757.     case 4:
    3 l( P9 |1 v. C5 }9 t& g5 K
  758.       {) p& h8 y, B& t/ ?2 R4 R
  759.         FILE *fp;* J' ^! R: J# ^, q* ]
  760.         char szString1[128];
    ( E( |0 B0 y5 E) E
  761.         char szString2[128];
    ' A/ f% k9 p8 S8 o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");+ a% o+ ]* D' `' T5 Z6 L+ o
  763.         if(fp)% v/ t5 L5 J* p% u, @/ U
  764.         {
    4 H( |+ y5 B+ v/ q( Q
  765.           fscanf(fp,"%s",szString1);
    0 ~4 N8 ?5 K& E& e
  766.           fclose(fp);
    & I% H5 C7 X( v% \6 q" R% h
  767.           fCheckVersion=atof(szString1);9 F+ M+ F% C% V( @! p, z0 v+ V# E; N
  768.           fp=fopen(".\\checkversion.dat","r");6 h! a1 ]" N: l
  769.           if(fp)
    2 g' N, r3 w0 N( c
  770.           {8 B' `( x$ q$ z" `7 ]7 X
  771.             fscanf(fp,"%s",szString2);
    6 z! b' @$ j" _5 Y% q0 I8 }
  772.             fclose(fp);& z( a& k1 U7 n( u
  773.             if(atof(szString1)!=atof(szString2)); G/ D( G2 _) b* q
  774.             {
    " q& {2 r+ W7 B$ l) @8 K
  775.               if(!Dn.Connected())" `2 O3 k( G5 J
  776.               {& z/ r: T/ X  B- c. `2 P
  777.                 bFirstUpdate=TRUE;6 G6 u1 z5 ^" r6 w( A$ k: v5 z
  778.                 dwTotalFiles=1;$ A6 i% o! A- H! [/ ~1 D
  779.                 dwDownLoaded=0;
    " i/ w0 u. _4 S; d  j: \; z
  780.                 bSilentStep=FALSE;
    % M0 g, O8 Z: Z9 J/ I* R$ `
  781.                 bCompressed=TRUE;
    8 S7 y5 W- G* Y5 Y5 L5 s5 W
  782.                 strExtLocal=".\\DownLoad\";
    $ }8 C' ]" [; X, N# [
  783.                 strFullName="update.txt";& y% _( z5 S7 Q3 D( _0 v
  784.                 dwProgramState=AP_CONNECT;0 q. g0 f6 u, ~$ X1 N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 K9 r8 R6 Y9 C. W* i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 q- B: A) i  H
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! @4 N. t  t  u  B) H
  788. 4 y0 k- r: w. P( q) ^5 h
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : `6 _% ]2 {: H! Y3 _' e
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    % T7 s: z/ g+ Y5 c; r# }* F
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1): ^. \+ t5 W* W  A* a
  792.                 {& {) W% n& J4 j/ D% Q
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& P9 {0 o7 S3 e0 i  Z- c! _6 A
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");$ K! K6 z8 C& ~; l  K
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");& V: j- O( O2 Q+ u
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 I5 B! K3 `0 K) s& W# v
  797.   j" C# O& _0 K$ Y& R0 P
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; f4 b1 |: e- u& Q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 k" e6 ?% @* I0 a: K9 ?
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    , [; H7 {6 b% o* e: ?! b; y; x! f
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, d! H! x  O; p% ~" ^0 k" r9 C* M
  802.                 }
    $ C& }3 D9 C# R! a& ?* M
  803.                 dwStartUpSteps=5;2 W8 ^. o! [  C; x
  804.               }+ n$ C( Y+ d( f  ?9 x3 T
  805.             }
    ) a: F0 h4 Z- ]: g; @& L0 o! E3 E
  806.             else
    . B5 D0 V* B3 l- n/ y" s7 t3 X
  807.             {
    6 l+ n; s+ T, ?9 x  [5 `  r
  808.               unlink(".\\DownLoad\\checkversion.txt");7 }2 I$ y9 W# s! P, B
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% x2 E0 b9 v; {: r' L6 x7 s3 P
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; U) j2 x, ?( Z3 M4 F6 }
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ w9 P$ q3 D* K1 E- Y
  812. 2 f  S- C- C8 [; l
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ k# P$ ^( }" v* l
  814.               dwStartUpSteps=99;3 Y7 _9 w- y4 F( G
  815.               bFinishUpdated=TRUE;" {: ~3 _+ q$ _
  816.               bCanUpdate=TRUE;7 W: r4 ]5 E8 p- F5 Y( f$ O, o# {
  817.             }- i0 t: e6 R1 H( D" ?. M5 s" K, C
  818.           }
    * v  j6 }* o: U8 `- F) q% S4 N
  819.           else3 P' _/ _1 p9 P2 D% j) x3 T
  820.           {7 F0 v  i; c  h+ Q6 u4 W- k
  821.             if(!Dn.Connected())
    - p+ ]1 z; V8 W
  822.             {) D0 z' c1 w8 \1 \. E( u
  823.               bFirstUpdate=TRUE;
    7 q0 g; H) q2 o' D" v. w. E
  824.               dwTotalFiles=1;9 R  R* I, j8 S! z% {
  825.               dwDownLoaded=0;3 E) p0 o! B# u9 w; J6 C5 c6 ~
  826.               bSilentStep=FALSE;$ H" `4 f$ F) U' m" C
  827.               bCompressed=TRUE;
    # h, e7 v- y# U" [* @
  828.               strExtLocal=".\\DownLoad\";
    ! l* b: d/ ^5 `  w6 u$ A9 f3 \# c
  829.               strFullName="update.txt";
    ; }' T% w" G7 F
  830.               dwProgramState=AP_CONNECT;
    5 }' y5 Y- K# Q/ ]7 v4 a
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 E5 M& ]- e- a( o
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ w- C3 Q+ G6 b/ G" E5 h
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");# I/ B8 M+ f5 E  ^( L
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 W9 _1 |3 [3 ?
  835.               unlink(".\\DownLoad\\checkversion.txt");- M- N4 U; o( M& i
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    7 _; [+ t! x& S$ j) {2 |
  837.               {& b+ n4 H7 {: H0 {( u2 U: E
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");+ b( y) A* D1 Q+ |8 y0 P- G
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    2 j, W2 ^7 j) X' i
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");  ]5 R5 ^2 Z* c+ l$ Z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . s7 g3 N3 \4 g! H8 @0 l
  842.                 . d+ Y. v. y3 n0 j6 A% @4 t
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , x/ l/ M7 ?& `+ B) a/ ~' q7 l9 n
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 l% a  N3 p& U9 b& q0 B
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");1 i( Z3 m$ f. ]- x, y5 ~* o: n- m, J
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ h3 [& }. P6 U& w$ y( A
  847.               }; `- k/ o7 C, v0 j4 F" n
  848.               dwStartUpSteps=5;. \" _+ N. @4 `3 m  N& Y% n
  849.             }
    " L# U. @% K% {+ ?$ m
  850.           }
    3 w  H* k; w4 ~
  851.         }
    1 I- a; i+ E) F; s& l* z; V$ |
  852.         else
    3 i# F% Q! ^: H
  853.         {
    $ @8 W1 J+ R) @: `8 F. V/ V( P6 o
  854.           dwStartUpSteps=3;. u% I% G2 O' A' f3 ?* L
  855.         }
    4 m, o# W  p. ^
  856.       }3 |, b( X+ O3 x
  857.       break;2 y  U, R. r' h
  858.     case 5:& ?* u( H6 y1 j
  859.       {7 m( f+ k5 j0 `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ' Y/ P2 i& y" e/ o/ m4 W
  861.         {! S4 l% z- a; K: W- N* j: a" Q, ^
  862.           int opt_overwrite=1;
    8 p- U- V! m! J
  863.           int opt_do_extract_withoutpath=0;+ f! C& a% O: n3 m" G
  864.           unzFile uf=NULL;2 P# G8 w" y" e$ l
  865. ( L9 f& W, `9 x6 c# x5 w, I+ e  m
  866.           uf=unzOpen("Wsa.zip");
    2 `% _/ W6 p2 x& N" B$ F) C
  867.           if(uf)9 |: g# ~7 c" [) x- C6 [
  868.           {. J, D* }0 v6 @8 Q- r: k5 X0 M# F
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);5 Q1 @8 Y) B9 ^  s* q) g+ m+ i1 {
  870.             unzClose(uf);, ^; D7 O: c. p/ l3 p+ `1 M% P
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
      u$ k; E( r6 m5 X; a; w. {: `
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");( [! n+ n+ O7 M% N; f3 W% O
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");4 K$ K4 @3 N2 A* z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; n5 u9 b' W/ e1 a
  875.           }
    8 I/ C" u" J$ d% G) ?6 w( ]; E
  876.           DeleteFile("Wsa.zip" );
    . j: R) L. Q/ V0 ]1 _: @1 l3 U2 I7 Z
  877.         }+ Q2 l, W  W; I# M0 [  R
  878. 8 ]0 |$ U; K5 i' J
  879.         if(CheckLocalVersion())  P* T3 g2 Z' I$ r) _8 Y/ m) w
  880.         {0 A+ o6 d5 @+ p: O# p2 R: _
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");" h4 g4 |. F& q5 ?) U! j0 s
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    , A' F4 r6 r2 _5 w3 [& B4 v
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    0 y' R+ T! Q$ n( i& k: D8 y6 i3 D, s
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ J7 ~. t' q: q$ O: g+ g, s# p) p7 |  N
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ( Y2 h% T( z" ^) Y# |8 h8 |/ G
  886.           dwStartUpSteps=99;; g( s2 \( Q8 J8 h( L& |+ m
  887.         }; P4 B$ C( R. J$ r. z$ {4 ~, S
  888.         else
    * W0 q2 b! @0 f: w' J4 y
  889.         {+ R( n1 {' [7 a* H, k
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");1 V# b  ]" U5 x! d7 k' u
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ i6 k  A, J( Z7 R# b
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    . j  T$ c% w. R% d' ]: g6 Y( X# h

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

$ A% |7 q7 R1 N/ \" @2 o3 e& q* K# y; P

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-27 20:58

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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