CSUpdate.exe源代码

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

) t2 e" C. c8 S, ]  ^
  1. / RevApp.cpp : Defines the class behaviors for the application.
    8 Y5 K. ]9 B/ D; G. M
  2. //
    $ F1 s* D# I: Q: r. p$ r3 I* r
  3. - }: s; `1 E" {3 u
  4. #include "stdafx.h"# n$ g# d. Q6 V$ @  B

  5. 0 {* a4 X- |2 J) j& A3 k2 G
  6. //#define UNICODE5 q; {: M6 L8 _  x: n
  7. //#include <gdiplus.h>( N# v/ {9 |: v! _
  8. //using namespace Gdiplus;
    2 d. L/ j0 p; K% h7 |
  9. 7 x/ _; G: V$ \) w
  10. #include "RevApp.h"
    8 Z  L! f" V5 V0 ]- C
  11. #include "RevAppDlg.h"3 A# J: T, ^* N0 ]1 M4 S
  12. . h0 r9 e8 A  H/ f5 b
  13. #pragma warning(disable:4786)
    0 X. H6 l2 r* p! S7 U  L4 H
  14. #include <map>$ \5 v: B) A8 M2 R6 c' O( o% q
  15. #include <list>
    ; d+ _" _$ G' |
  16. #include <direct.h>0 N+ S3 R( d3 }5 S: c5 ]1 b3 d

  17. . k7 \+ ?6 L: q
  18. #ifdef _DEBUG* }6 m/ y5 g3 A" t
  19. #define new DEBUG_NEW) E' G/ Z. t# U
  20. #undef THIS_FILE! Q' I3 i$ t4 ?4 X; _
  21. static char THIS_FILE[] = __FILE__;6 y1 }* l7 V9 z
  22. #endif8 n1 r* U$ ^4 |2 g# w: s, w
  23. #include "SkinResDef.h"1 e5 D7 Q# A5 \. Y
  24. #include "ChangeBG.h"
    # }6 p; N4 o( T3 J' x8 `
  25. #include "AFXINET.H"
    9 q' O; C3 j2 F
  26. 2 y5 s! a0 k6 e2 W, V" s# Q* Q1 S
  27. #define TRADITIONAL_CHINESE 0
    ; D$ d! H6 n* P. R' t) y
  28. #define SIMPLIFY_CHINESE 1
    3 y% g- l; N6 H& x) s  F2 c9 B
  29. #define ENGLISH 2
    7 S9 W+ E( |$ m( l9 ]) ^: N6 |
  30. int m_iLanguage = ENGLISH;
    / F6 }2 g  `) P. s
  31. /////////////////////////////////////////////////////////////////////////////& X) Q$ L9 e* ~" D& g/ s
  32. // CRevAppApp( ^) V5 G8 L: E' D
  33. 8 f) g0 Q9 b. j! b' p
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    9 a8 ~4 @& ^# M3 v
  35.         //{{AFX_MSG_MAP(CRevAppApp)$ R2 V3 E% ?6 L4 l
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.: P) g# H% E$ Q2 |0 k
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ) m7 \: h! \7 P$ B( w
  38.         //}}AFX_MSG
    2 i" n( r! x( ^
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    2 E2 E, K. q, K; d9 l6 L  F3 m8 Y
  40. END_MESSAGE_MAP()% }9 T& f6 U! l+ r( w
  41. ; O% I2 U: ?( a( s: E0 n; E
  42. /////////////////////////////////////////////////////////////////////////////
    7 S) r) x2 o: K( m7 X
  43. // CRevAppApp construction
    2 N9 g" ^( [4 j0 e3 H  F) j5 k

  44. % n; y- T% f  Z7 N& N
  45. CRevAppApp::CRevAppApp()
    - I- ~" S3 S- j* [
  46. {4 r# o' m  E/ ]+ }5 b! m' e. I: l
  47.         // TODO: add construction code here,( y4 a' \- r( }( x* A
  48.         // Place all significant initialization in InitInstance2 v. Z  Z2 d# e2 p1 X6 I
  49.   bDisplayIsBig5=FALSE;
    3 R: M8 t$ j' H; D" S7 N/ Q+ y
  50.   bRestartUpdater=FALSE;
    ' W2 Z/ j3 v! L- d% E. c4 j7 Y
  51.   bFinishUpdated=FALSE;5 H' U5 H; o- M- n" q+ Z! L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
      H3 r3 }, H" C" {( a1 c* w
  53.   InitChangeDataBig52GBKS();
    1 E) V4 u) C( X" h; F. q
  54.   InitChangeDataGBKS2Big5();  O  m1 n# M% h0 Z6 K* F& B
  55.         //- |4 V7 T  }( d2 |2 d( X6 [
  56.         bClickRunExe = FALSE;" p2 P& @1 ]/ H7 O- h" s
  57.         //
    & v* r0 o& G7 s3 ]1 ^8 x
  58. }" }, d0 X" t- ?1 }0 b4 D0 [2 `: i
  59. - A9 ^: w4 o, \9 ]3 a, g/ d
  60. CRevAppApp::~CRevAppApp()# E6 {, ]) m" E5 ]
  61. {
    % N! o* s3 d* B
  62.         // TODO: add construction code here,$ [; B5 D  h% _0 h3 K9 d6 z; {4 a
  63.         // Place all significant initialization in InitInstance* p9 C- f, N( R6 w/ e
  64.   EndChangeData();: N9 y0 {0 g- W% S/ k2 n
  65. }
    ( A! G* B# d1 N

  66. ' v; M, e: I5 y1 u6 N3 O
  67. /////////////////////////////////////////////////////////////////////////////: ?, \. v9 R% y, q! C3 y; U
  68. // The one and only CRevAppApp object
    ( A% h& @2 b, [4 k5 G8 y2 Y3 G

  69. ' t9 @" J+ L1 S1 R2 R
  70. CRevAppApp theApp;
    7 d( o8 O9 J5 E; R! g1 y8 {! D0 Z0 B
  71. 4 Z; S5 w7 h( b/ L
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    . p  J2 a3 h4 ~5 R/ H/ U
  73. {- H  @+ N. O2 K
  74.   int iEOF=0;- ?, r4 v# w0 L- \% _2 O
  75.   char szTempName[MAX_PATH];/ S# J3 B* X" n) J, E# o
  76.   *szFileName=0;
    - ~. X! p1 b; q. C/ A4 t
  77.   iEOF=fscanf(fp,"%s",szTempName);2 f& S' D" V$ \7 l$ b! J: x
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # u( q- P& p6 V: F4 S1 p/ f
  79.   {; w. w* R! H  P, J+ k7 W$ Z1 P
  80.     strcpy(szFileName,&szTempName[1]);$ e- ^4 A" d1 @. n
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    2 f. B5 b% a+ q) Q6 f
  82.     {" f# M- f; Q0 h! m/ Z" \
  83.       iEOF=fscanf(fp,"%s",szTempName);* S: Q: m! f, h7 ?& v
  84.       strcat(szFileName," ");
    2 n6 j1 Z9 v1 ^* W; I! d
  85.       strcat(szFileName,szTempName);
    - ~4 o0 `9 L& y7 d! e
  86.     }8 N* }4 e' |, s% g( M
  87.     if(strlen(szFileName)>=1)
    - `8 W  p+ Q8 W/ ~; i
  88.     {
    ) k+ V% [0 c0 K# F4 f7 ~* Q
  89.       szFileName[strlen(szFileName)-1]=0;
    5 c* w" G( S5 v6 _/ ?# K
  90.     }4 E3 L; @6 R  z6 B" ?( S  |
  91.   }
    3 C( G7 Q! M# H% ?: _3 K. {
  92.   return szFileName;
    + ~7 b6 v+ t) Q& |1 x
  93. }7 g2 ^! C; @9 S3 [: h" B5 p

  94. " S/ q5 v. M2 p9 ?
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile), {) ^5 ^, V  j" f9 V
  96. {
    # P" p) Z( K; `9 |8 A- T5 u
  97.   FILE *fp;
    4 H8 J# v0 O0 S4 k# o
  98.   char *key=NULL;
    & m7 {2 ?5 f% J: b
  99.   char version[MAX_PATH];" O0 h* ^6 B2 b, I' Z% X; m* ~
  100.   LPUPDATEFILE file,olds;
    : z8 }$ l& S- Z6 Z* |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / N; j* u0 q8 @: R9 _. D; }2 P
  102. $ j% n+ x- `+ r5 m  K
  103.   UpdateList.clear();, `4 W% _* ^) I" |6 N- v
  104.   UpdateFile.clear();
    . ^1 M( a1 a+ m/ ]4 e6 A9 J
  105.   if(GetFileAttributes(filename)==-1) return false;* `  n* J$ x4 D+ J; G8 \2 v
  106.   if(!(fp=fopen(filename,"r"))) return false;' @, d6 ~5 N% n/ V
  107.   fscanf(fp,"%s",version);( {$ r  B) r& s2 r) I
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ; A, l0 W4 \' f6 G7 y- t( j$ `
  109.   while(fscanf(fp,"%s",version)!=EOF)
      l( @" I) c8 \4 d
  110.   {
    ) S  M9 L5 Q  n: f2 C& W
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - }* e* u7 c) [0 K& B0 r2 T5 h, ^
  112.     fscanf(fp,"%s",file->path);7 x0 ^5 v( G' c8 Z* T9 x
  113.     ReadFileNames(fp,file->file);$ `" m8 [3 M7 }8 y$ P2 W1 J* {
  114.     strcpy(file->full,".");9 V; m  P, g6 M1 G- A
  115.     strcat(file->full,file->path);  j- ]; g3 I- |8 M" v/ f
  116.     strcat(file->full,file->file);
    6 U/ ^6 ~  l) \5 u2 z% ]" e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    0 s) n+ a- `0 ~+ ~
  118.     {
    % L- L; B6 b$ H4 n, i# s. R
  119.       file->vers=(float)atof(version);
    2 U- B* I0 s( k5 j: k0 ^2 U2 i
  120.       UpdateList.push_back(file->full);
    ) R/ s& E! x3 @2 P1 z0 p. ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ) Q$ W. K2 P/ z& x8 r3 U" t7 F
  122.     }2 O! @# _  j$ a$ ]3 Q' ]2 ^
  123.     else( G: a- D. Y' {1 i8 J3 ^
  124.     {5 h% r9 N0 U: k; @% L) \& B6 ~
  125.       olds=(*p).second;# i7 o$ _7 q4 Q: J
  126.       if(olds->vers<(float)atof(version))
    9 C- n8 m3 y$ A/ _$ d" b2 h% O
  127.       {9 H0 @4 u* l6 ^0 \3 S6 R9 O
  128.         olds->vers=(float)atof(version);
    - H4 K7 D3 @$ A7 z' y
  129.       }
    6 G: P- P  L4 }# F$ m
  130.       free(file);
    ( k) q: I$ [( \  n- U
  131.     }& c9 g7 b# R& l
  132.   }5 w- P" i2 c* r8 n* m1 @( B
  133.   fclose(fp);
    7 u- ^" M" N  P% m" N
  134.   return true;5 |2 u: \( Q9 [+ w; @
  135. }4 e6 w4 e- ^, {" q( E1 X$ ^

  136. * y% d$ \  z+ G" i3 @4 E7 }3 p1 m
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    1 [) M% w8 T) l
  138. {
    : w$ n$ `7 h, i! r# E
  139.   TCHAR  szFull[MAX_PATH];
    ; C- C4 @  @* M/ f
  140.   TCHAR *token,*inter;' U3 \$ g) O) t2 O1 L
  141.   *szPath=0;
    + v4 [& l- m( ^) G$ j; y4 p- m% j
  142.   strcpy(szFull,szFullPath);6 R% [5 o+ V4 u) O8 j4 ^/ ~$ [
  143.   token=strtok(szFull,"\\/");0 U  s- z  l9 D% Y3 _8 t
  144.   inter=token;/ @: t- `# \% \: y8 M
  145.   while(token=strtok(NULL,"\\/"))) ]8 j, n  z- _
  146.   {2 {- _8 g; C8 o) Q5 S, |
  147.     strcat(szPath,inter);" Q8 m5 I) z0 s# y2 Z
  148.     strcat(szPath,"\");
    & |; B1 ]6 e5 d  @) J' d( o( r4 [
  149.     inter=token;
    ! A0 i& @3 q1 L  ]1 |0 Q" e
  150.   }
    + s! j$ c0 C4 n: F
  151.   return strlen(szPath);. g. \- \( V" O( X- o9 k
  152. }% K6 E5 a3 A: }# g. W9 p+ D
  153. ' f# c, {; x+ i% o; i, I! O+ p* E; ^
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% g0 w' |0 L; i" u9 G8 t
  155. {! c9 j0 D6 Y* m; l
  156.   DWORD attrib=GetFileAttributes(Target);
    3 v1 D% r0 S! V4 n( E
  157.   if(attrib!=-1)5 J' D$ f- b% v- {) N" f
  158.   {) q, j* z& h0 U+ X/ `
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  m, H2 |- y/ [2 J, E1 {  D6 s% G- D
  160.     {" C2 s4 T, N/ x' b6 u- G
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : [( T: I  h8 M5 V4 u6 s6 V; S+ j
  162.       SetFileAttributes(Target,attrib);; k, h* C) f5 P* W6 j
  163.     }
    # z' }7 O" b' B$ I
  164.   }6 `" Z3 G- z' W" O' L
  165.   CopyFile(Source,Target,Erase);
    - {' ~  c+ Q- L3 M; S) \* ~
  166. }
    2 d1 q- q  H% m. ?) [+ F
  167. $ h3 y8 K5 y0 A/ y$ o  W3 E
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); z: v5 w  O+ b8 \
  169. {( A* e& U# Y" d0 L; k& g. a* F
  170.      FILE *fp;% F( |1 e5 O. r& ?
  171.      char  szBuffer[8192];
    9 w; t5 n# U2 R" _3 Q2 e2 s; g
  172.   va_list  argptr;/ T, @9 m$ J. ]9 D. S
  173. : [- `5 r* p' k6 ?1 U
  174.         va_start(argptr,message);% C( e9 Y& u, }. E" m. _
  175.         vsprintf(szBuffer,message,argptr);& }5 V. F- V. N/ Z2 t
  176.         va_end(argptr);. a! k! L3 \0 g" T# I# e4 D& E
  177.   fp=fopen(FileName,"a");
    # h' Y% J9 U5 p
  178.   if(fp)0 j, J2 c6 y6 {* q# Z& q
  179.   {
    % Z3 k: s7 \) d; U
  180.     fprintf(fp,szBuffer);; w3 p/ ^; l) X3 G) g0 f
  181.     fclose(fp);
    4 T. Z& u9 `) F
  182.           _flushall();5 |( y7 G; p0 P( J: \* M
  183.   }( J$ }* z9 n1 {8 z1 J
  184. }
    5 I% T# }# Y6 X4 q' s
  185. 3 z4 R# M  W5 z" j% A
  186. BOOL CRevAppApp::Fclearf(char *FileName)
      k" v2 U( K8 F6 M, A
  187. {" F7 k% ]: j$ |
  188.      FILE *fp;# i' a) t8 m- y& J
  189.     DWORD  attrib;( r( v/ S! w* X0 x, T
  190.   attrib=GetFileAttributes(FileName);
    4 j" p, C) ?% p8 V; Q" W
  191.   if(attrib!=-1)
    $ O& r9 y- A* O$ `9 v
  192.   {3 F2 L" W7 [! S' n9 W* i' y  f
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);$ j) @* a9 f. F! V  T* A: D3 v
  194.     if(!SetFileAttributes(FileName,attrib))- g7 p# a8 P( O
  195.     {* c) v+ S% y! v
  196.       return FALSE;. d9 V, D8 l, t) x8 f' e  e9 R+ H5 ~. e
  197.     }
    " P' q8 J& q$ F( S- n; i( {8 i
  198.   }# K0 m  |" C: d  |: u5 B$ G& z
  199.   fp=fopen(FileName,"wb");
    , d7 ?# M* w. p+ V, w
  200.   if(fp)9 k. J# T# r/ n: ^9 Z* L
  201.   {
    0 s; |' c& k; u0 c
  202.     fclose(fp);
      p; x* ^" w& c6 N7 w* h  @
  203.   }
    2 r4 Y# D# p" u" {) v7 Q
  204.   return TRUE;
    7 t$ [3 x; g' Z& x, w1 y# d9 S
  205. }
    # J. `. V6 r  w

  206. " E; l/ ?3 K6 B+ G/ z# R4 z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)9 ~$ z2 o2 g% \# A6 l4 U3 d" r9 P
  208. {; U- ~3 |, q+ b1 l3 z  Q
  209.   char filename[MAX_PATH];0 @8 e8 [. v3 I' _4 H
  210.   LPUPDATEFILE file,olds;* }1 O/ [( F: R; ?9 Q9 [5 L
  211.   std::map<int,CString>::iterator i;
      w7 ]5 r  ~0 t; |" ~0 a
  212.   std::map<CString,LPUPDATEFILE>::iterator p;% m) k7 n% L) f4 n8 Z1 m
  213.   std::list<CString>::iterator l;2 T: o! `( g9 m( O
  214. - M1 u9 z5 @5 W4 m1 N
  215.   if(bFirstUpdate)/ p+ I- u6 y2 R+ @: l0 [4 @) F
  216.   {& b; d) w- x; n8 w* E! z- v3 x- c, i
  217.     dwCurrFile=0;
    " ?8 W* {' {! _0 m
  218.     bFirstUpdate=FALSE;
    , ?2 P) q" k  Q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; Y7 \. N8 K$ V7 l( f& c3 R
  220.     {
    7 M; b2 t( A5 j4 z
  221.       dwTotalFiles=UpdateLocal.size();
    6 y/ s4 Z& Y7 k9 M6 y' s
  222.       dwDownLoaded=0;
    : Y1 b9 t1 e& k) I4 h5 k$ M* E- }
  223.       bSilentStep=FALSE;
    ' o6 r# l% K* q
  224.       bCompressed=TRUE;
    7 z1 p, v/ J2 E/ w
  225.       strExtLocal.Empty();9 t% Y) Q: e+ ]6 K" M
  226.       strFullName=(*i).second;
    - U) M- U6 D$ I
  227.       dwProgramState=AP_CONNECT;
    & N- ~* V: _0 x, C+ L
  228.       return TRUE;
    ' o. _9 i) G- {$ }2 C3 o0 k  U
  229.     }1 Q6 [' W: D- Q
  230.   }
    - J' p/ T- y6 T9 V' X
  231.   else if(bRestartUpdater==FALSE)- G6 V8 ?- k9 [: E. U
  232.   {
    # T: L, ?) Y$ p: s5 x4 j1 I
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    7 |2 J. \6 p5 N$ ~, i' c" a
  234.     {
    - C% u4 \3 Z$ n
  235.       file=(*p).second;
    % c+ K" |3 b0 l, _# s
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    / Y# p! D: {6 J* s
  237.       {
    * a. m% T" ~* \7 L( b& c9 V) j1 [
  238.         olds=(*p).second;1 [! [7 O" s* s6 A6 t4 K" G& ?
  239.         olds->vers=file->vers;
    , R+ `0 k* F2 F9 E7 }
  240.       }6 O. J, c; F* g! ~0 v: Z$ d# n
  241.       else
    - ?7 h; G$ t/ c5 _, p
  242.       {) h' J) C; y6 V5 B. R5 |! D& s1 w
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * D7 S! R* D" }
  244.         memcpy(olds,file,sizeof(UPDATEFILE));# F4 s9 G8 h# R6 q+ J
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));2 C" d. S0 {3 e, L4 h3 {2 X: c: `, e
  246.       }
    1 n. W! d7 {; f$ o6 }- @
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");. G3 E( u8 A2 a8 S7 n' ]
  248.       sprintf(filename,"(%s)",file->file);( h% I# B2 Z* g
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- Y  d! a( \- s: n5 l( ]' g3 G# B% l
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    3 E5 U+ f9 b9 K
  251.     }* N  q, s+ I; l
  252.     dwCurrFile++;
    / m# a8 c" |9 A/ S; O$ H
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% L$ Y4 D9 E/ {5 I6 Z; n. Q
  254.     {( s# H" ]/ D+ U: H$ }. b& S* D
  255.       bSilentStep=FALSE;
    : ~# h) d' |8 @
  256.       bCompressed=TRUE;# a6 G+ k& ]. z6 s2 p7 X
  257.       strExtLocal.Empty();; O) T# u! u1 c$ t: W4 b6 G
  258.       strFullName=(*i).second;0 I4 y, N! {% H7 D" B6 T
  259.       dwProgramState=AP_CONNECT;
    4 g, [, t5 c! m/ m) ^1 e3 Q
  260.       return TRUE;
    ( @; \* N/ _3 C- A& ~
  261.     }1 C5 l( F/ {, H
  262.     if(!bRestartUpdater)
    & s& K# D# t% w
  263.     {' W( D! f6 S- H* d
  264.       int iCurrSize,iFileSize;/ f' J9 k7 x5 i/ i0 P! O2 i3 h) n
  265.       iCurrSize=0;) R$ ~4 J  p6 s+ H" d
  266.       iFileSize=UpdateList2.size();
    3 O7 Q7 r6 O* K+ ~" A' Y  ^% t
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");  Y" U# g( {' N" m( _  [
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    1 E- C7 x; C4 n+ T
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 L  v! W! D; q+ r
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 c+ m# M2 |- [& [9 T4 l
  271.       Fclearf(".\\update.dat");4 X+ ?* J& g% e$ U. {. @/ _8 H
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    . ?6 u# E7 s8 Z) h+ {$ G# N7 u
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)+ A4 Z2 B& j$ }' r; n
  274.       {
    4 R* H) y8 c2 }- J. u' D/ U) u8 U
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ) _* X6 x' r8 \8 k( ^/ ^/ G
  276.         {7 q$ E5 Z  J! h. }* a  |/ P
  277.           file=(*p).second;
    3 U6 _& j+ d! N- {! Z" }3 M% z
  278.           sprintf(filename,"(%s)",file->file);
    : ^5 ]" W: _# t8 q" J/ k3 h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 [% E4 b& ?! f1 i+ S
  280.           iCurrSize++;
    3 w% m" C1 ~9 L5 O6 b) m& k+ a$ l
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    5 D2 H0 X+ n, _3 y; A8 `0 a: j, y
  282.         }
    , K) {( Q! p; g- I" v' O
  283.       }0 T6 s5 y9 X/ W6 \
  284.       unlink(".\\update.txt");4 n* p; u5 o: q* @
  285.       unlink(".\\update.tmp");+ B& w9 o5 H, `
  286.       Fclearf(".\\checkversion.dat");
      |" z. z7 u9 s' E- k2 l
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);. d) V: c* i1 i9 m" D, V5 H2 Y( i' [
  288.       if(UpdateLocal.size())' P* q1 D0 w9 k* \- ]) z5 |
  289.       {
    " f: l5 I, s  u& Z+ M
  290.         UpdateLocal.clear();" O3 j2 j# \! V  @4 p$ R
  291.       }: ]" S2 j, G, n7 a  R' D# B: }
  292.       if(UpdateFile3.size())
    8 n2 I$ e3 _) Z& t- Q+ D1 A
  293.       {/ x' u" Y6 J/ G. P; ^
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - J  e. D: Q* |, ^! X& F
  295.         {
    + n" d. \7 o/ K  v% |# z
  296.           file=(*p).second;8 ^7 |. h, }& ^+ i  o+ m. E4 b
  297.           free(file);# Z7 D9 ~+ j& n
  298.         }) S5 ^8 a7 v- `. ~
  299.         UpdateFile3.clear();# s7 L# P: M& w4 j  |
  300.         UpdateList3.clear();
      c; q( P- {! o- }# W1 Z
  301.       }
    2 v& E( W4 m$ R' @4 j
  302.       if(UpdateFile2.size())
    6 j+ d) p' z. _1 f7 I% s; c
  303.       {" W3 L% D, J# M% ^" i
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ m0 v8 s1 Q$ I$ k
  305.         {) o. }3 a7 J0 R2 B6 p& M. ?
  306.           file=(*p).second;- G. ^6 K7 ?) H! ~2 m: K
  307.           free(file);& m( y5 Z/ |9 y; I
  308.         }
    # o6 E  `/ w. V- I
  309.         UpdateFile2.clear();
    : q0 A) o. s( O! b7 Y$ U
  310.         UpdateList2.clear();& j' M+ q' Q4 b
  311.       }; ~. Z2 _0 k& ~/ \; k
  312.       if(UpdateFile1.size())+ K4 N8 U% Z( Q; B3 f
  313.       {0 L; c3 _- S$ d# G7 ]
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    2 a6 {: ~, [1 l, O
  315.         {
    + B# I4 L, N9 D1 H# T
  316.           file=(*p).second;
    * J, K6 n7 f+ I3 S  @: T: a/ i
  317.           free(file);
    1 A! T2 l5 B0 E, F1 l4 G2 R
  318.         }
    : O  t6 o/ n. C& Y0 V; V4 @
  319.         UpdateFile1.clear();0 d) N! F5 d6 v7 V) g9 V
  320.         UpdateList1.clear();
    ) y& E" o* N  n; s6 D
  321.       }
    ) B, ~3 g* O/ e0 z  S6 Z
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    + k4 P3 L5 m7 U8 x) w$ Z: `
  323.     }, n5 g  K8 i0 {+ @
  324.   }: t# s# H6 |1 c. C! u. m
  325.   return FALSE;; |+ O$ L4 Z: D) Z7 g
  326. }  E6 i- J8 Q& O6 L( u1 ~. b

  327. & w2 ^4 P; X% S, d" H8 D
  328. void CRevAppApp::ClearAll(void)
    2 v; Z& D) ?  _" D
  329. {
    4 A8 B( g/ w/ |9 N( k
  330.   LPUPDATEFILE file;
    8 z5 r! b# n: q2 ?  R$ Y% y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;' E+ E8 N. G+ Z( e6 G

  332. ! {7 O5 W4 o+ T
  333.   if(UpdateLocal.size())
    : M8 j" O: f- k4 N
  334.   {
    $ g9 l! i0 k4 ?7 n. g' y
  335.     UpdateLocal.clear();6 z* n; S+ Z* C1 @1 \5 ~
  336.   }
    / K- L! O, S$ k% r& u2 Z: L
  337.   if(UpdateFile3.size()): J  z) M8 h# p
  338.   {
      e# @% p: R! E" U9 _  ^
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); b- X  v+ i0 m$ Q- X/ [9 t, \
  340.     {
    7 r1 N7 q. ^7 y. u/ i
  341.       file=(*p).second;
    2 D+ \2 e9 S- z5 X, q; X7 f$ I3 q
  342.       free(file);: N- i% q$ g4 z2 k1 Y8 i% q
  343.     }+ G' \' ^, A3 Y+ d
  344.     UpdateFile3.clear();1 Z5 ~* W) C" g/ c8 e
  345.     UpdateList3.clear();% _! V3 s* b8 T) q% t6 S
  346.   }& h' |; q# R" D6 u; a, Y
  347.   if(UpdateFile2.size())
    8 n4 L4 r0 `" W1 P. X: g  X, b; l
  348.   {
    : F' J. B6 }# `
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 ?$ M& T0 `- l
  350.     {
    ; J( D; d- _5 J) f& m- l( G1 w
  351.       file=(*p).second;. L. ^, z3 U2 U8 m/ d
  352.       free(file);8 ~! u/ s" d# @8 }% j
  353.     }
    $ R* [6 U% a0 z# L2 t9 Y$ k
  354.     UpdateFile2.clear();
    . E, o9 L, x  Q: j5 Q+ B. k
  355.     UpdateList2.clear();( |6 g& z' R/ W, B/ X1 W
  356.   }
    1 v4 M/ V4 ]# z2 Q
  357.   if(UpdateFile1.size()); v# N, I8 x! j/ K# C; {$ t' a7 k
  358.   {' z/ D4 H% N9 D6 U8 F9 u0 c
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 w# [" f% V/ C" ~7 p
  360.     {
    % z7 \, `& Z/ @! ^, k
  361.       file=(*p).second;
    3 D9 Y. O# S' d# C$ ^( P
  362.       free(file);3 v2 W+ ^/ _- |# k5 |* c) c
  363.     }1 }: F* d5 l* l- y0 f& ^! s' Y3 U: t
  364.     UpdateFile1.clear();
    ' E! b; {2 E% ]5 a: }; f6 E: ?
  365.     UpdateList1.clear();# H3 W' I: }6 N  O- W0 G
  366.   }* A9 G" Q8 n- G! o9 a
  367. }  $ T! b  ^( m. x$ x
  368.   
    8 G) R. j& B! g) r
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    7 J5 g2 k( S8 D
  370. {5 F8 n% S/ V7 `1 ]$ J+ J5 f  U4 Q
  371.   int c;
    $ c7 y+ ]0 c2 }; z$ Z+ W% F
  372.   LPUPDATEFILE file1,file2;0 A  v' c" ~/ M0 |. F( i
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    3 m: E, s, j* ]0 y7 R
  374.   std::list<CString>::iterator l;- I1 r  Y* V' W& a3 `4 w7 m' a8 Z

  375. 2 }9 w& s* {) Y$ q; C
  376.   UpdateLocal.clear();) ^; F3 L  K) a( W& Y1 H
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);& n! o8 I3 N( r& X$ E& ~
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    " c! ]( m! W  ^/ D) ?% S
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);! q3 I: T$ Q' Q2 f
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ( _: {0 D+ j0 M) n& E
  381.   if(UpdateFile3.size())3 H1 Y! c( U! _  v) d+ [0 m
  382.   {2 ]. s1 Z* \6 k) {+ J4 E: k0 b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    1 j- w) d- i0 {) x& \/ }; p5 i" j
  384.     {: U6 e5 h* j( a
  385.       file2=(LPUPDATEFILE)(*i).second;: ?7 ~" j3 H$ {3 o
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( @& @/ L$ E  W6 x% ]
  387.       {* h6 _' b% V0 J8 m  N! u
  388.         file1=(LPUPDATEFILE)(*p).second;
    & Z# b3 a( ~. }7 Z0 O! a! D
  389.         file1->vers=file2->vers;$ h2 f: v8 x; c$ M+ r: V
  390.       }3 z# d9 E  Z; @: b9 j
  391.       else6 r6 U; g6 f. j/ A# P; E5 V% l2 j
  392.       {
      S- `" E) p* Q, }- s! F: G
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 _! Q7 l  {5 q: }8 R2 p% m
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! D4 {: U5 r1 t2 V
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    % ~3 G$ J+ b4 \/ F, Y: e0 k
  396.       }' c$ ~7 M% ]1 X! b- t, H- O/ u8 _2 u, b
  397.     }
    5 I; u" H6 u9 h* K% i
  398.   }
    ' ?' n5 M6 m( p& \
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * b5 _+ y# l/ o0 Z
  400.   {4 X/ X- [7 o4 w4 \5 ], w
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    / {2 d, c- q2 `
  402.     {5 C$ ~1 g$ b1 i$ F: w# B
  403.       file2=(LPUPDATEFILE)(*i).second;% R+ S7 ~! S  X' }. \
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) L; c2 |* L! A
  405.       {6 q/ ]5 S3 d$ a6 d& D: C) Z1 G- a
  406.         file1=(LPUPDATEFILE)(*p).second;- c' X0 q* S6 _
  407.         if(file1->vers!=file2->vers)
    4 L7 Q, R+ B, J
  408.         {8 Y3 O7 Z! u9 ^! b% L% e3 Q/ g
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 _" w) E* E; x# r# G, q9 |3 k" q
  410.           c++;
    ; J& c$ G" X" P! e
  411.         }
    $ V5 W# ^. j& C5 V# |* t
  412.       }
    : d; F  H2 n. F3 _
  413.       else
    % J  p* Q- x' q! D4 F
  414.       {
    ' {/ y: B8 M- Z# D0 n
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' f  N+ X1 E2 J
  416.         c++;, j! j: c% `  z2 D
  417.       }) t/ G4 P- Y+ U# t
  418.     }
    5 ~& |% t2 X' w: K' m
  419.   }; o; H2 s/ O7 G* R: k! f- ?
  420.   unlink(".\\DownLoad\\update.txt");4 X: _: J  i# {: I1 @
  421.   if(UpdateLocal.size()) return TRUE;% {8 {% v6 j$ l4 b3 j: a- c2 _
  422.   else                   return FALSE;+ w1 Y9 X( ?# x% ^
  423. }
    8 B" l7 D9 X6 r5 ^" ^' v* b9 W
  424. 3 K7 X* U$ ?6 k" a
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"# n# {8 H- d) r5 h+ L3 J
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * |9 m% j, @0 ]$ v; p& y8 `5 k

  427. ; Z( ^+ l/ T3 W2 v, X. c# }

  428. 2 T0 H8 S+ p/ k  F: U! M) q

  429. - d- S, R4 p4 X) F: P0 h
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; @; ~# ?0 Z! G. ~: a
  431. {+ K* v9 E2 e# z6 a$ E* t
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 j/ T* c' [8 B- ^3 h$ R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * l* e) M* w$ o
  434.   {0 ?$ [0 _: n" N
  435.     char szLanguage[50];
    ( n4 C" @' h: Z: |# r7 Z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . V. A6 d- ~& b) Q/ l
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! R5 m2 N: V2 G  T3 `% ?- n6 W& d
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) _' T5 s( [' l. u4 F
  439.     else                                   m_iLanguage=ENGLISH;* _/ q, {# x, M$ a
  440.     char szRegister[100];
    # U$ Q# ^. `9 E7 @% ^
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ {; l7 v8 E4 j; V( B. Y9 \
  442.     strRegsName=szRegister;
    3 o9 P- [! y  F  ]- a$ P7 x* a
  443.     char szPatchURL[100];
    7 @" c+ v+ r; l( _
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      j) S1 @% W. c1 R7 E
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 ]' H' [& q0 Q  d: k6 L# k$ m
  446.   }  F, z+ p! l$ u3 b* @
  447.   else0 F& s% p7 }# D% s+ |  t; d2 f0 Y
  448.   {
    : F) r5 _6 X+ E7 _
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - q/ d  F$ h, I7 S* |! J, R# C/ B
  450.     strRegsName=DEFAULT_REG_URL;" ^& Q5 ^. |2 m; N' ~# Q+ f& X
  451.   }/ B0 _9 }2 x) u/ B, W
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    & l+ s' I- b( |% }1 ]
  453.   {" A$ X& T: Z, Z0 @8 W0 U- ^
  454.     char szIP[50];
    : ~* ~4 |6 G+ R6 F6 A' R( y
  455.     char szDIR[300];5 O# Q$ _" x. z% U! Q1 i4 c# H' o
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))# u  j% q  w' }5 t. a6 U+ t
  457.     {2 x6 E: D) ^7 V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* ~' x8 f! L+ m( P' H$ g
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");- K6 s' ^; e" _% F2 A: V
  460.       strHostName=szIP;5 l! i% R0 Z, }
  461.       strHostPath.Format("/%s",szDIR);
    5 J4 i) p: K2 K3 y! e' R+ F
  462.     }
    ) K& d3 n2 N! @7 |/ w% G" b
  463.     else+ a+ |+ I- X1 x) I' F
  464.     {
    2 [5 D/ b0 ^& B5 v7 b3 k( h
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 B$ h4 J$ ~" }( T3 w- g2 w; I
  466.       {
    & j% X1 G# a& D; Z
  467.         char szLanguage[50];
    5 k" l, X0 t3 V2 E
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 C5 M( S2 F5 ~
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " p# ~! ^1 |! T' w  e; {
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" H" k, i7 s6 H4 t2 x2 @! ]$ [+ K* x
  471.         else                                   m_iLanguage=ENGLISH;
    ( I* c# e3 c  ^
  472.         char szRegister[100];
    0 w& V) j  A* \2 c* `2 ~# R$ }3 o
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 v  S! u* B, O2 c/ ]
  474.         strRegsName=szRegister;- U" z; X  g# `3 ~  S
  475.         char szPatchURL[100];3 N  [. x7 a+ t$ q, m& I. e% G
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 y/ B) w' i3 j& T7 m* d
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 m4 [9 l0 J: Z1 f
  478.       }
    ' V6 G, s2 r7 r% [
  479.       else( H8 q. {0 H3 ^. g& p! o' f" V
  480.       {
    3 a, y- [8 [- j7 p. `$ G( X
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 S+ u6 N0 |* U6 r( e
  482.         strRegsName=DEFAULT_REG_URL;& \! |  _# W  ]: B8 L3 z
  483.       }
    # a1 j% r+ W5 b: P& w; L7 `
  484.     }" O! E: \2 V3 t; e' G0 u  P6 @/ m
  485.   }
    5 a8 G2 X! d: H
  486.   return true;
    , d: S& Z# g$ x& t6 [, T+ Y- g" j* c
  487. }
    ; g. s5 c3 n0 i1 u8 T- I

  488. 9 ~' O* D7 r6 }! L
  489. #include ".\ZLib\unzip.h"
    9 c' ^1 ?. C9 ]3 @
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 O' e2 s) O2 j2 E9 O  s* b8 V, A8 U
  491. /////////////////////////////////////////////////////////////////////////////0 n. c8 Y: Z( `( j+ b* a7 V
  492. // CRevAppApp initialization
    ' t, w; x- T4 G) {  B" w% F$ E

  493. 5 F. a. r1 N, E- o
  494. BOOL CRevAppApp::InitInstance()
    9 a8 W. P- q1 B- I& I
  495. {3 W* ]( s8 z  i3 a
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    $ v5 G) n% m  G

  497. + G& ^' b+ q, L) p+ y+ I- E
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);- g3 X( S3 N8 S( Z( K9 N- q/ K9 A2 R
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))4 T' x4 M! b& w8 U) c/ n6 L# I* g1 _
  500.   {
    . r1 U5 z; o  W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    " M8 C) |* h+ y) R6 @6 n" h
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    8 ?+ n2 }7 x$ d
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
      \* c& T% ]% m; O4 E& M4 t; b. y
  504.     {; L; D" }8 Q  {2 E; w+ X
  505.       strcpy(szPath,szPathTarget);
    ! C/ W+ g. [4 u3 }/ a. t! }2 G  ?
  506.       SetCurrentDirectory(szPath);3 T& ?% V, \; y7 t5 N
  507.     }/ N7 b2 s$ z3 j: J4 ?8 Q$ L2 B
  508.   }5 U  x3 l; T1 K' h. M. {/ H( i, A
  509. #ifdef _DEBUG
    $ L  _! O# O2 A2 b2 V$ O* H% P
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 O4 g0 R7 U9 M  ~$ D( c
  511. #else
    ' I" a, H' a/ ~- U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " W5 v. C& x) R. M0 h9 g7 M, U, t
  513. #endif
    1 D$ z; @$ p" x# C# q" e+ V0 ^3 D
  514.   {3 K* @9 l, j- U# x' z8 ~8 W3 F
  515.     char tempFileName[MAX_PATH];0 L6 l7 B' Z% ^$ m
  516.     strcpy(tempFileName,szPathSource);
    % s7 H) P2 `( X3 X, {0 ^
  517.     tempFileName[strlen(szPathSource)-12]=0;- X; M0 U# N8 q2 T
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 K4 g$ |# ~: E; |7 @7 ~
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);; X# u. H& X" }1 }- q2 }& h9 \
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ) ]' v2 \, W5 r- K# L
  521.     return TRUE;# `& G( z' a- I: @
  522.   }
    " W% [/ B6 i% C7 H& q! v! L! O7 b, @0 I4 [
  523.   // Nuke 0118: Delete run.exe+ D6 D- L& g( y# W5 Z4 I2 z  _
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );. ~2 S' a+ ~9 B/ E
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");' f+ k9 H! o5 U' ]3 f% j7 j
  526.   if(!ReadCfgFile("Config.ini"))
    6 \0 a! ^0 D0 J) a
  527.   {
    : C) B; Y/ ~. L! r4 y) L
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);$ i+ S4 X% [; i0 O# r
  529.     return TRUE;& S; S* ~+ g+ m1 D/ J1 [% U; f: \* D
  530.   }! ~" y7 c1 g, X  G3 V
  531.   HANDLE mutex;/ {- Q  s& O# x. b8 h; K, a8 E# J
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))- n* i7 e6 R- l" [
  533.   {5 ?, z8 R0 z; y3 W
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)* K. ?) L& h+ `+ K" ^4 X
  535.     {
    / Y! n+ W; N6 A3 S: P/ d4 b& g2 n
  536.       CloseHandle(mutex);1 i7 S! W/ `! R' C. T
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 l! g, B& d" G, H
  538.       return TRUE;
    ( E% v) y* ?6 a7 j5 I
  539.     }1 \0 _9 U7 a. m2 [' S2 E/ @
  540.   }  
    & Q3 B1 e9 ^/ N1 A
  541.   CloseHandle(mutex);
    : Z/ e9 g( t8 j0 x) C& V
  542. ( R& O' p- Y+ z3 H6 {% V, i, T( i
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);* v8 m1 ?3 \7 B+ S0 U

  544. , z  M+ z$ w% c4 a) t
  545.         AfxEnableControlContainer();& N5 b, f# ?" ?# y/ H1 r2 a

  546. ( s  q# W$ E) ~  ~& {% z
  547.   bCanUpdate=FALSE;' E. ~6 j) K, L& M
  548.   dwStartUpSteps=1;
    4 a2 l; _5 a+ y' x' W* B- B
  549.   dwProgramState=AP_NOTHING;
    - u1 f" N! U- b& o- J9 p0 c

  550. * N% t) ]( H6 _
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 g: ~1 t+ m# M
  552. ; H" _9 f% J! F! W
  553.         // Standard initialization) U" p3 z( @3 u0 n
  554.         // If you are not using these features and wish to reduce the size# s" X9 R# x* L# \$ Z9 F/ v1 q
  555.         //  of your final executable, you should remove from the following
    / \. |. ]! w7 f6 Q) B
  556.         //  the specific initialization routines you do not need.6 u- R; q0 C5 z8 g( f
  557. 6 w' \7 t( u3 S/ w* I" Q
  558. #ifdef _AFXDLL7 k% J/ _8 \" m( s1 B1 s
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL) V7 L# X6 I5 c/ m5 \* ?
  560. #else
    2 [5 s) B# H+ R5 }2 n+ w: i3 F( A$ U
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 O. n1 Z) a5 r/ @4 ~; K" Y6 R7 X6 l$ \8 ]
  562. #endif: d# T( [9 h$ x  B3 h

  563. 5 g, q# u& i) y( U5 ~" P8 W8 H+ u) T
  564.   dlg=new CRevAppDlg;* m, Q! C: ?3 m& I) y5 `5 V  o$ A
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    2 V' ]# I  ~* Z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);( g- x1 x7 z) X( L7 _
  567.   m_pMainWnd=dlg;& S. p+ s$ y$ r- p1 P% S% N; H7 Z

  568.   M1 t9 h' z3 @$ W
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ' X# x; v8 `1 _) K3 X: T! a
  570. ! I; I, x4 M9 Y6 T# E
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + }* |9 D/ u$ R# P1 U: x5 ^
  572. //  ULONG_PTR gdiplusToken;) _0 ]/ m1 F- [. G' @5 [
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
      _" |4 j5 |- `! B+ c

  574. " B! Y. ~5 m5 c' {% D
  575. //        CRevAppDlg dlg;
    : w8 ~& y1 o( t% ]! I
  576. //        int nResponse = dlg.DoModal();
    " X, [! W4 \* I7 a0 q8 Q
  577. //        if (nResponse == IDOK)/ R- M1 e4 P5 e) y/ C
  578. //        {
    ' K! S. e$ `- E* m0 G
  579. //                // TODO: Place code here to handle when the dialog is- m3 ]! u, G( s3 V* H2 N4 X2 O/ Q
  580. //                //  dismissed with OK" t& j  K" v0 B1 l5 P- H4 d0 V
  581. //        }
    5 O/ n) n* |5 r* |
  582. //        else if (nResponse == IDCANCEL)
    ' D8 ]* u5 T  S  f4 E
  583. //        {" S$ v8 c4 h1 V; D1 B
  584. //                // TODO: Place code here to handle when the dialog is  ]4 x1 e6 \& Z$ [: w* H3 Q
  585. //                //  dismissed with Cancel
    1 G/ s4 e; n8 l) l; `, P' e
  586. //        }% r) l7 Y; B6 X9 @

  587. / o5 q. i. K: W- q5 {
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    % T4 x3 z9 G  H1 }0 w5 P' Z; u
  589.         //  application, rather than start the application's message pump.
    0 ~' \6 I; M9 t3 z" a
  590.         return TRUE;
    ! B( T8 V1 o0 y- v9 d5 A. T* T
  591. }: {* K/ A3 l% W7 b& v. c
  592. 8 {1 q: p$ C4 [1 J: t2 U& `: p6 C- w5 y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)( f  b4 E7 J% T3 T
  594. {
    , u9 z1 J3 k4 D+ m& H& t9 E
  595.   int i;2 [. g9 }; ]& @' [7 {, f
  596.   char *szRet;
    1 l+ m$ b; F; Z0 U. g: j

  597. 8 o, g+ e# [% s1 n
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " N0 _$ D' V" t2 |2 ?  ]( h
  599.   if(sztoken)
    + c/ Z6 m5 W: ~% j# r
  600.   {
    # y9 V* Z- N9 B' n- j8 w6 k
  601.     szRet=&sztoken[itoken];: t9 j6 P: x# E
  602.     while(sztoken[itoken])
    ; O: {' v8 F0 h0 H! D+ i+ h
  603.     {0 l9 N: e1 X3 E
  604.       for(i=0;i<(int)strlen(token);i++)3 N  Z4 }; Z8 S
  605.       {5 T9 t' I: \0 k0 T: \
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' j1 u: Y8 U! M8 \1 J% \( W
  607.         {
      U, S& G$ k5 T& m5 c. L( i% S, S
  608.           sztoken[itoken++]=0;
    ; W/ E( q3 o3 N! f  `# [
  609.           sztoken[itoken++]=0;
    8 n- i% z. v' [3 k6 r# q6 W
  610.           return szRet;
    & L4 K- {7 }' u0 l6 }- ^
  611.         }
    & I4 g2 s4 f# o7 @7 o/ u4 J
  612.       }5 {+ ]' r: b% ^& o$ i% R
  613.       itoken++;
    9 G$ j" y$ U8 g$ _2 D
  614.     }. V+ O9 }- p( f  W
  615.   }$ p$ ?  N* E6 v( k! m) G' w
  616.   return NULL;" q- W  L5 F: J7 `/ ?2 v- o7 e
  617. }& T. @* F2 n3 J; Y( a
  618. " `  p9 h1 w( u: f
  619. void ProcessProc(long Total,long Current)4 ?6 n) q9 ^4 }* m5 {
  620. {
    " w3 f% P' X0 j
  621.         MSG msg;
    8 Y* C: }. @- ]( N* ^
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    * a& C- s3 g, k8 q, f8 Z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));& _( W5 t' T7 k
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    - |+ {$ `, L7 A9 ^+ {
  625.         {
    1 H3 @4 [/ r3 Q0 p
  626.                 if(!GetMessage(&msg,NULL,0,0))) B" _6 U4 s6 e) K( }5 {! O
  627.                 {
    # L3 b3 c4 r, z7 z# C( q
  628.                         return;8 t% g2 A1 C2 ]5 m" P/ V. q+ M
  629.                 }
    ) A' Q5 L: y' j4 h0 k3 ~
  630.                 TranslateMessage(&msg);
    ; q* ~& C2 ]8 \5 X
  631.                 DispatchMessage(&msg);
    ; C( W4 Z" {2 {8 j$ }- K4 t
  632.         }        $ `% r3 e- I& Y/ f5 w/ d
  633. }! b+ @4 n' |" t& l) n
  634. 8 a* o, T. p$ l) v" s7 s
  635. BOOL bFirstChar=TRUE;
    ' U4 ~' ]/ Z! T  t+ C

  636. / H7 n- b3 i$ z$ e: X
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    : |4 v7 ~% _- ~% M+ _
  638. {
    # r5 k0 e$ n6 i8 s! B8 E* ?
  639.         // TODO: Add your specialized code here and/or call the base class
    5 }7 R; q7 J  F7 `% @' v1 c6 [3 P
  640.   switch(dwProgramState)
    ' R) d' A1 ^+ d5 [( m2 [3 w7 C
  641.   {% A1 O$ I* S( J+ w5 e5 w' n4 f
  642.   case AP_NOTHING:
    5 {  h* ]" q8 y; j9 I, X; J1 X
  643.     switch(dwStartUpSteps)4 g9 @5 i, l! I+ L
  644.     {
    ) ^2 s# F3 i4 x
  645.     case 1:" ~& F& X0 K1 B8 n& J
  646.       {
    6 \! X; T) W! v, O' Z- z
  647.         int i;! ^% \! T: D1 I+ Z# i% ]. Q8 m2 u
  648.         CDC *pCDC=dlg->GetDC();
      _  P7 [* [; K* k3 l% [, D
  649.         HDC hdcwnd=pCDC->m_hDC;
    ' G* B* ?* {$ E3 v" a  P- y" E9 F) F
  650. //        Graphics graphics(hdcwnd);
    8 H' W/ `- U9 Z+ H( g1 m( G3 T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ! z# N; ~) m. p9 I7 G
  652. //        INT iWidth=bitmap.GetWidth();) v: V3 H. H* r% |4 W8 Q
  653. //        INT iHeight=bitmap.GetHeight();. D7 U0 @% V5 i# L/ X! C
  654. //        Color color,colorTemp;
    1 ~) B  j' z0 b/ G
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ m" \7 U& G$ z  _0 }# U+ s2 S
  656. //        {
    & O- g& q1 |4 S& [5 x
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    * L3 ]: D) x' o9 _( p
  658. //          {
    : n( d0 o1 t" Z/ N8 ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);% e  \) V! H# g6 E4 x8 f2 \) N
  660. //            colorTemp.SetValue(color.MakeARGB(
    0 i, J9 o% Y$ [2 w5 z( z
  661. //              (BYTE)(255*iColumn/iWidth),' m6 k, W- k- q  l: J* x. e
  662. //              color.GetRed(),
    / j- c  Z& F0 M$ h6 ~% e
  663. //              color.GetGreen(),
    ) q, f3 }% Z; B
  664. //              color.GetBlue()));
    ; V: W4 r* K* s3 @! |
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    2 g1 [: f, W( u
  666. //          }- Y% d8 t. f/ H5 O5 X
  667. //        }9 @7 F9 G( ^; l6 K( r; H; Y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    4 m3 b5 u# G/ V8 H# d% ~
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 g* l' |9 o& M6 e1 n9 a1 j! U& m
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    + E# A% H0 n  n' @7 t
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , ~, H5 b9 {' q" ]0 ^9 h6 o
  672.         for(i=0;i<240;i+=8). {& h$ d9 w2 m9 `6 M: L
  673.         {
    ) Z: \  T# ?* n) |
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * a) ^, ]' Y/ e+ Z; V
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 o. J( _3 Z' J$ t0 U) j4 w6 y  |5 R
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);9 K; a3 e; c4 E( Y+ O* h
  677.           Sleep(33);
      U! B: g, z* k7 f
  678.         }, E5 K8 v9 d( u
  679.         Sleep(1000);3 O0 O) c- g' Q3 j% ?# c
  680.         for(i=240;i>0;i-=8)) k5 \$ e3 L- M. `# u) \" O
  681.         {
    & {7 P7 M4 S( k- {: {+ F9 c$ u
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 C: p7 C. P3 ^" Q$ A. E- [0 p
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # i( W" C  T- w( }1 Q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % |0 B6 @2 k& M
  685.           Sleep(33);) D4 |# \) h! ~/ u* b# y" U
  686.         }
      Z5 W3 }# H( z+ `4 L
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);3 a4 X, I4 r9 T2 D# t6 _
  688.         dlg->ReleaseDC(pCDC);. Z1 g1 T' a  H& N2 \# E( H5 a7 k
  689.         DeleteDC(hdctar);! X5 k, I' `8 w
  690.         DeleteDC(hdcsrc);
    5 V# V5 J6 `9 P3 y% F6 g; Z
  691.         DeleteDC(hdcorg);9 _5 H* L; I+ l) u$ a
  692.       }
    ) @/ c8 R$ ?# p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);( c, z/ F' ], y2 E$ |8 Q5 |
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    , }& M) K) l! O
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");2 s9 I' j# Y  X
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- G1 |3 E, V  X% \
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 b; g( J  d8 u
  698.       if(!Dn.Connected())' c% K, `7 D" n
  699.       {
    ) a; _) n9 I4 m5 T- P
  700.         dwTotalFiles=1;( c; W8 E# X/ b" P
  701.         dwDownLoaded=0;5 l' J0 G) b' A  [! o% P
  702.         bSilentStep=TRUE;6 y% B4 b# n  }, B
  703.         bCompressed=FALSE;
    $ J2 m8 U* L$ h5 i
  704.         strExtLocal.Empty();
    , W8 k: v! j; a9 h3 G
  705.         strFullName="readme.txt";  A/ c4 ]4 p. `. T
  706.         dwProgramState=AP_CONNECT;5 p7 j9 U6 [' s2 e
  707.       }
    ; Y+ l3 z# c- q8 ~& W- b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();3 h" n! z* f  q% y- h3 ?0 r" r7 T! `) Q
  709.       dwStartUpSteps=2;% t2 u! X" y* p
  710.       break;
    1 H$ k' v8 ~  h  n
  711.     case 2:- d( g  m5 H1 c- S1 Q9 D& r/ s5 C
  712.       {
    $ ?' v9 E. X+ _6 S" M
  713.         int iEOF;% X+ l5 S  k2 ]
  714.         FILE *fp;
    4 Z, z  @0 _4 m% l% r
  715.         char szString[512];
    / O5 b7 i/ p* h$ {; q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ( s6 z; g* y2 e) E/ `
  717.         if(fp)7 F0 w5 s" G! u" p5 E) L
  718.         {$ Y( N: x4 N5 J: x6 o, x
  719.           do
    ' f% N  J; o, l" x2 {  Q% [
  720.           {
    * i: A6 R. k- W
  721.             iEOF=fscanf(fp,"%s",szString);% p7 r; A7 g1 s* d
  722.             if(strlen(szString))& p& z) W8 \5 a: v6 }8 o# [6 n
  723.             {8 q3 e/ I" n& A" y5 z& e
  724.               if(bFirstChar)+ `! l! A7 X4 |$ ~1 U6 F, H
  725.               {5 Q+ Y  u, X  s
  726.                 bFirstChar=FALSE;; F; f9 x4 v2 ^4 G1 k
  727.                 bConnectIsBig5=FALSE;  M) }5 _: O; K
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;5 [5 q) g% I3 H7 g  |
  729.               }
    & _) _7 B, O1 _
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ( U6 R; X& M! g  L
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    5 t+ d# x" R) I, U
  732.               dlg->m_ListText.AddString(szString);$ k8 c8 O& l) H) n# ]- ^  {; G6 d; y5 a
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( M( I! x: O, }
  734.               *szString=0;$ x( D5 Z! f, g: }& e' I
  735.             }
    8 ~1 N+ K" k$ }; [8 `0 F
  736.           } while(iEOF!=EOF);
    / W+ U! g) k2 y1 \5 O8 U
  737.           fclose(fp);& X2 d; \( E, f! Q1 X' y9 m4 M
  738.           unlink(".\\DownLoad\\readme.txt");& A4 w2 ~$ {* E4 \+ T* @0 l
  739.           dwStartUpSteps=3;
    - W, x- @8 L0 b; f( F. T
  740.         }
    , F7 M$ j. d+ }+ I. e1 V  D+ j
  741.       }6 x5 A; c( X% h) x+ l& G
  742.       break;+ _7 u. ~; u' N/ y6 |
  743.     case 3:
    ) h4 j, ^# k- G3 g( _
  744.       if(!Dn.Connected())/ u, h' ~% {( D5 I
  745.       {
    , O8 ^6 k! l+ F  j- N
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    . D0 J* }  z) W' B
  747.         dwTotalFiles=1;& [  {, \$ u1 K; _: m: e0 n
  748.         dwDownLoaded=0;9 f- i0 ^. s1 e( x
  749.         bSilentStep=TRUE;  c6 [2 W* I! c9 u( _6 A, o
  750.         bCompressed=FALSE;
    9 f# n& O3 M3 m$ n
  751.         strExtLocal.Empty();
    $ G. ^$ p8 {0 l0 h2 X9 `/ o
  752.         strFullName="checkversion.txt";2 E: s/ ]7 \% i1 `& }" T
  753.         dwProgramState=AP_CONNECT;
    % I# }- i  X5 l8 z( O/ m, k
  754.       }5 _7 z4 K6 `" V: F
  755.       dwStartUpSteps=4;
    4 i' @: y6 B5 [: L3 ^" L
  756.       break;
    + v# K) Z- ?7 p/ n& M' `3 N) A1 K
  757.     case 4:% C* O" b% Z: h8 G
  758.       {6 r9 b! |, D0 o
  759.         FILE *fp;4 F4 J; \4 O6 L* L- q7 y- i! q$ K
  760.         char szString1[128];- V& O4 e' r0 Y0 }
  761.         char szString2[128];  @* t* e' I5 o$ e! ~
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    0 I, `% f* G) ]" C: Q
  763.         if(fp)
    . O6 N/ r2 L  ~( u# z4 x; Q" P2 }
  764.         {, R6 A: V0 f! q
  765.           fscanf(fp,"%s",szString1);& \* i: a# @& F  q5 v: b0 J
  766.           fclose(fp);) w& J, \: p- m* k7 [
  767.           fCheckVersion=atof(szString1);
    $ D, S, n! b4 v# O
  768.           fp=fopen(".\\checkversion.dat","r");( s7 v: S. Q* G/ D6 m
  769.           if(fp). @+ K! y! |: R  W$ R/ y% W
  770.           {5 ]' I0 y7 W% X* I
  771.             fscanf(fp,"%s",szString2);
    - R3 I, x7 Q* S% d
  772.             fclose(fp);
    ; Z  o  i/ Z: |# H5 i
  773.             if(atof(szString1)!=atof(szString2))& a& ?8 p" e4 I0 S- c
  774.             {+ \9 @: r' O, x  w
  775.               if(!Dn.Connected())
    $ I4 z0 M% g9 S( O  H
  776.               {
    ; \- l3 g, t$ r7 B5 m
  777.                 bFirstUpdate=TRUE;' f/ d& t2 Z9 w1 {, j5 A' `0 k) C
  778.                 dwTotalFiles=1;/ _4 x/ I( p3 C: S, I; D
  779.                 dwDownLoaded=0;
    % {; _& I+ ?: x/ [
  780.                 bSilentStep=FALSE;
    7 z: F0 x; V/ ^6 w9 {$ ]
  781.                 bCompressed=TRUE;/ B- E4 e0 F, [4 R" O: x/ w+ Y
  782.                 strExtLocal=".\\DownLoad\";
    ) ?& E$ o- ?( |$ ^- Z3 K9 p
  783.                 strFullName="update.txt";# }/ `; X7 n+ O" [, z
  784.                 dwProgramState=AP_CONNECT;
    7 ^/ d* w0 `  r$ Q7 F$ K3 \
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : Z( O& h( K- y2 s
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # q; v7 N3 [) S" x# S) l9 E' D/ o- d
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");& Z/ {! G/ ~8 i- [$ U

  788. ( q8 x% l) }$ _" b8 e
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( U% h2 S; D* i' j
  790.                 unlink(".\\DownLoad\\checkversion.txt");* d, O; a8 _, [$ i
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    7 E8 s0 R$ ^3 ^/ A
  792.                 {. m/ o; J. F5 G9 N  l' e
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 M( L3 k0 Z* c1 }5 A: S
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    - V# a4 }2 O3 W2 \+ g; z* k
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    * b; q2 k$ U, Z1 o
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 J6 c; j- q- X% m$ ?0 D
  797. ( i  A7 f( _0 O& i' b0 z( |, z
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; a3 A; W: a  m2 R
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, e, i: V& a2 q8 a1 w
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 P  a$ V7 K7 h3 \% R* C. b  j8 x
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. _% m' @' l* j8 C
  802.                 }  o2 O) @! z+ O6 Y1 ^
  803.                 dwStartUpSteps=5;
    0 t4 u& e, V$ A
  804.               }% l) p6 y  f) v% ~4 K
  805.             }0 O, b* `1 ]! g) L  L
  806.             else
    , ]+ k! ^- {7 j0 f! C+ N5 j& g
  807.             {& L3 o- ]3 F6 [7 Z; `' I( R. S2 B, H# V
  808.               unlink(".\\DownLoad\\checkversion.txt");" k0 ?* D3 t6 x5 C+ k2 H
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ j: g) w/ e, w! K* {% U, R% L9 W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. \  I, ^" r& s9 G6 q; ~
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");9 X' E; E4 [* T$ Y1 B. f5 k

  812. % c7 t4 b6 q; |; ~: Z- f
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 ]. C* a/ c  R
  814.               dwStartUpSteps=99;* L6 u0 m" [; B
  815.               bFinishUpdated=TRUE;
    7 B) M8 l& M% ^, w$ g4 i. J
  816.               bCanUpdate=TRUE;& C) o7 f2 w! r/ i  Z
  817.             }
    7 d9 U. w7 e3 Y; N2 F
  818.           }" i# a$ ?& U7 S2 p; L
  819.           else
    & }) G; k  x9 t" \8 ~: [
  820.           {- K9 |+ @% j% D+ @5 c
  821.             if(!Dn.Connected())  v  v" ]! u; U5 c
  822.             {, w0 `4 c: m$ i, F, m2 ^/ j
  823.               bFirstUpdate=TRUE;
      ^% G2 F) k# Y. P6 S$ q
  824.               dwTotalFiles=1;
    # L- x/ {" ^3 W  N$ `6 l  t& r
  825.               dwDownLoaded=0;
    - h$ i3 h, h4 k% V( |6 c
  826.               bSilentStep=FALSE;, {, E2 F% C* b8 F  x  y
  827.               bCompressed=TRUE;
    " t. C! j) B# K0 U( ~6 G9 M! n
  828.               strExtLocal=".\\DownLoad\";9 w- d. w( n$ u
  829.               strFullName="update.txt";
    2 K6 m" K% p  R, h
  830.               dwProgramState=AP_CONNECT;
    ) n' L$ V9 }# Q# V% f
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 c- S# \. o! X
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 |% X2 k3 k7 P" y& h/ X0 h, q
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 c8 `" S7 Y/ @: c
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 L8 A/ h7 X8 R, w; o
  835.               unlink(".\\DownLoad\\checkversion.txt");
    7 C2 `: k5 @" r" u* _8 P8 p
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ( N  R6 p9 z( C# K
  837.               {& \6 c  \; g" s( y+ W% [
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");/ J" `6 k) E$ V
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");% e- |; V# M. X
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");! \8 q% |/ }* j4 C
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 d8 G# ~: F1 T1 |( z
  842.                 ' O* z/ T" `0 `3 t' m. @
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 m* S* w3 _7 _8 Y( c" X9 U% F% U; ]/ I
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. u! ~: r$ Y/ ]+ u8 c. ^6 E- B
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");) M7 x/ z- s1 g+ U
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' @" d) k3 }. m# W- P# f
  847.               }
    & B% o& x2 \; E" `, U! c
  848.               dwStartUpSteps=5;
    # R  |8 f$ ~$ M6 A$ d1 M
  849.             }7 T# M, J& \& {" W. T4 C1 ~" R. d
  850.           }; g6 f* a% H) _9 Z
  851.         }
    7 g. N. r0 P- v- r# v
  852.         else
    , I2 Z* W; C! R0 P8 L% ]
  853.         {7 U9 o8 x9 U. T7 P3 m$ f1 Q% b
  854.           dwStartUpSteps=3;8 l: X/ Y3 w# T5 k4 C* e* f% o
  855.         }8 }/ F. u1 {8 O' s4 u6 V8 M  b
  856.       }
    % l9 E3 z# I2 J1 k+ y" X! _" y
  857.       break;  b* G( e$ S7 W# u/ ^( y9 E
  858.     case 5:: M  i2 M2 ?- I
  859.       {8 T% |( ~% w9 u" V5 l9 l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)3 M' s6 q6 Y4 r! a* ^
  861.         {
    : |; P+ l$ k: m. e' V
  862.           int opt_overwrite=1;3 A, K7 O$ C) `( C! d
  863.           int opt_do_extract_withoutpath=0;' @1 {8 j! M( w: w/ l4 u2 @1 k
  864.           unzFile uf=NULL;. f6 n+ }" O  P! q) t7 n" s

  865. ; _% \: [+ V5 r' q: ^! ?
  866.           uf=unzOpen("Wsa.zip");
    3 C1 {/ O" ~; B$ E( X& r2 g& W" _0 A
  867.           if(uf)
    5 [0 P. F" g/ q0 `5 ^; Z4 _2 w+ b
  868.           {4 G2 s/ b1 C9 h" B
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);5 c" Y1 d9 ~7 `& S
  870.             unzClose(uf);$ _6 r  `' a6 L+ X
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");+ P6 o$ ^( ?$ K- Z% n, j
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");; K4 V- ]" D6 D* c; P
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    8 D2 h8 u2 P- v- q
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) f$ e) ?7 C4 }
  875.           }5 _0 P2 J0 Q( ]
  876.           DeleteFile("Wsa.zip" );
    2 j$ K3 ?0 a3 F/ ]4 O' s9 ?
  877.         }6 l4 _9 _$ S$ {1 w9 y' Q

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

& E; R/ F3 M9 O9 }

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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