找回密碼
 立即注册

CSUpdate.exe源代码

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

2 E8 i1 y- G* U
  1. / RevApp.cpp : Defines the class behaviors for the application.  T/ E, c& P: }3 A4 j. _
  2. //
    + x1 l/ B; [; Q( |
  3. 5 M% \- I% p) e, m9 n3 V
  4. #include "stdafx.h"# y5 V' {, e  U3 M

  5. , B3 b9 M$ E( N# Y6 B
  6. //#define UNICODE
    5 j7 H8 R& p: M$ F, V1 e
  7. //#include <gdiplus.h>
    3 m: ~  ]$ Z  g4 }
  8. //using namespace Gdiplus;
    2 X5 o0 H9 M& g! W8 u" ~
  9. " ]! s  B: b. i" C5 w' M
  10. #include "RevApp.h"
    ( w. }1 r0 C' _* V' Y7 U  y% a
  11. #include "RevAppDlg.h"
    0 ]4 D% n+ h' D7 M
  12. 6 s) {! Q5 j  x* G- N. O& ]
  13. #pragma warning(disable:4786)
    1 V7 w! p3 R  o  ^! {
  14. #include <map>
    1 x# K' G* [" Q$ d" O' @+ K# j
  15. #include <list>
    ! u, A' M; `- _* C" s
  16. #include <direct.h>* D6 f+ X+ ?2 Z5 c* [5 T
  17. 2 f8 l, C$ Y2 z' t# D! I' a
  18. #ifdef _DEBUG1 |5 i, P" Y) @6 Z2 X4 t/ h
  19. #define new DEBUG_NEW
    , Z4 I  X! Q: f) l( r4 F
  20. #undef THIS_FILE
    1 B8 v- _% _$ W  K/ y+ [
  21. static char THIS_FILE[] = __FILE__;/ ?( E( M* Q% L* S( n* m% i1 j
  22. #endif
    3 c, Y( W6 X+ @: ?# x/ R, T; x
  23. #include "SkinResDef.h"% R8 V- a8 @# j* r  F0 h3 z
  24. #include "ChangeBG.h"
    ; b2 B( U$ `7 j- \+ V& h! V8 G
  25. #include "AFXINET.H"
    & c. q0 M; H7 E. ^" d$ F# N; U" n

  26. + y& l% w0 n  W# t
  27. #define TRADITIONAL_CHINESE 0
    0 h! L- W* W7 H% ^1 E  [
  28. #define SIMPLIFY_CHINESE 1  `2 N7 G6 x4 E# ?4 @0 D- u8 y1 ^* B
  29. #define ENGLISH 2
    4 u- [/ r( r7 f0 j  s. b% I
  30. int m_iLanguage = ENGLISH;
    # s  ?3 ~, Z* W: I6 _; f/ s4 e9 J
  31. /////////////////////////////////////////////////////////////////////////////& U8 x' K$ Z" a- c! F
  32. // CRevAppApp" g, A& b" d9 A3 O3 O( T
  33. 3 ^5 o" [9 [5 N/ p9 f  F
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 C$ T8 |, x" j/ X" \4 u8 h
  35.         //{{AFX_MSG_MAP(CRevAppApp)( J$ g$ O7 m2 B+ k9 d; S" f
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.2 N3 c! b! Z% ]# ?
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!; A/ D7 t( S9 G8 G
  38.         //}}AFX_MSG' c1 l, g+ P+ P( Y/ \+ {
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)1 P) W; l9 V/ o6 r/ D/ x7 C5 n+ d
  40. END_MESSAGE_MAP()
    % w  R1 c" s( J/ s; |2 Z( M' I

  41. 7 {; O- f* L: P) S! D  d
  42. /////////////////////////////////////////////////////////////////////////////% M  p) H/ D/ t0 G1 `
  43. // CRevAppApp construction
    - s7 b, h3 r( M$ @
  44. & i6 j) [0 V: W9 M# v7 w, @
  45. CRevAppApp::CRevAppApp()
    ' x  c- j: T: }1 E% |8 \) u6 S
  46. {
    / J# D( M: E( P4 v) n. d* @9 W; H
  47.         // TODO: add construction code here,7 Y$ z+ s. V- R* H
  48.         // Place all significant initialization in InitInstance& y6 l( K8 |4 d/ O
  49.   bDisplayIsBig5=FALSE;* N  z: `4 O8 ]. Z( n- d
  50.   bRestartUpdater=FALSE;2 N2 q; \1 N% X$ N+ ?+ O
  51.   bFinishUpdated=FALSE;
    $ f8 {. _* l2 e& R' R1 f( y
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    : }& {3 {8 o0 F9 W3 i) Q
  53.   InitChangeDataBig52GBKS();
    ; P) _9 q. J% O2 N1 V1 \$ }
  54.   InitChangeDataGBKS2Big5();6 d3 m( H5 o8 N! M
  55.         //
    8 C* X3 H2 Y7 f( s$ ]8 O
  56.         bClickRunExe = FALSE;- Z7 b8 o; D) O$ }
  57.         //
    4 z* g# L) h4 E7 {) r+ O
  58. }! E, y" U7 R0 q  J/ L
  59. ; h. M5 k3 V: y+ @/ C
  60. CRevAppApp::~CRevAppApp()# P* u3 x# p4 K/ T0 ^: I
  61. {
    $ N5 z4 l' x9 w* O
  62.         // TODO: add construction code here,' x6 a/ [2 A7 N0 Q! _" Z
  63.         // Place all significant initialization in InitInstance2 y% u3 Z# U' b% |
  64.   EndChangeData();
      U# B! P5 a# E
  65. }! P9 V; J0 {8 ]7 n

  66. - }+ P' T7 U. ?
  67. /////////////////////////////////////////////////////////////////////////////5 T+ Z8 I$ b6 \* M* c
  68. // The one and only CRevAppApp object. q: Z8 q  ^* c5 L" f7 {
  69. , x' s; }; {  j
  70. CRevAppApp theApp;
    # C6 F- i7 z; {

  71. , M0 Q1 d! q$ P
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
      E9 o. k  M' e! `
  73. {8 K* @7 P; @. [- T
  74.   int iEOF=0;0 Q  f: m/ p- L5 v) W9 I% O% U
  75.   char szTempName[MAX_PATH];% L) H0 s! m8 o3 F% |/ U
  76.   *szFileName=0;
    2 N; ?" x1 ?! B' P& Q* b
  77.   iEOF=fscanf(fp,"%s",szTempName);
    - m5 K: v" [; {- G6 C
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    9 f3 Y% z; a2 V6 L8 |4 u6 e
  79.   {2 B# C' O% c; d# \  ?# k9 [/ g
  80.     strcpy(szFileName,&szTempName[1]);
    9 n7 ]2 i3 ?. Z& {4 T( e
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ! m, L# D1 L$ M. Y
  82.     {
    ) n9 L& f" [8 q  @
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , C+ `# B% b4 E( x" U
  84.       strcat(szFileName," ");
    4 b/ Q  e$ J/ S8 |$ }* ^+ H
  85.       strcat(szFileName,szTempName);
    + a' G2 g, ^3 V/ k
  86.     }3 ?8 L$ @7 N# z
  87.     if(strlen(szFileName)>=1)1 b2 R: S! l# ?2 M$ o5 g  O* ^$ @& \
  88.     {( m( O+ d  E9 e  w+ D. D! k. C
  89.       szFileName[strlen(szFileName)-1]=0;
    ' x4 i0 i5 |6 R3 z
  90.     }. V9 o" i1 I6 W7 Y
  91.   }
    / h" W" @# S  j4 A! t% ]8 f
  92.   return szFileName;# o) k5 p4 z0 \) o4 V7 q& A
  93. }
    4 S& o. v9 e* x* C6 q' ^
  94. - n& g7 y6 |! s: e0 T. k2 T
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)6 d7 K! f/ x1 o* T8 G0 }
  96. {
    , U/ y$ \  l' \. \
  97.   FILE *fp;
    4 f# v; R: o. ?- r
  98.   char *key=NULL;
    * R( ^& x& V3 i! \- V0 u7 ^
  99.   char version[MAX_PATH];+ W0 E2 N7 W1 J' V, g; a
  100.   LPUPDATEFILE file,olds;
    % u- ]2 ]& y' n; j+ ~+ y. X" C/ o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;3 V# A/ {& |; D5 I* O0 l8 m% Q

  102. 7 C& n- v3 a. c  O) }
  103.   UpdateList.clear();
    * V1 A( G8 y* _/ @( z
  104.   UpdateFile.clear();
    0 X; T) D6 g" h! C6 {
  105.   if(GetFileAttributes(filename)==-1) return false;
    ) U+ z* o1 y. {& f
  106.   if(!(fp=fopen(filename,"r"))) return false;- u; e, h0 f9 ^6 A+ [7 l
  107.   fscanf(fp,"%s",version);4 R  m. R/ @" j- M4 `
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }0 X4 ]/ I( ?% ?" N* U- u% W
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 z8 ^0 f6 U& q2 B+ y8 r8 r6 M
  110.   {) P( G/ g; F, ?5 e  w
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 m6 o2 K. F. F$ ?% p1 W' t
  112.     fscanf(fp,"%s",file->path);
    % r5 m. C; w) Q' U# N! X* U9 P6 K
  113.     ReadFileNames(fp,file->file);
    3 w7 q1 c9 R5 E: n. s' E2 y0 R
  114.     strcpy(file->full,".");
    , W: _: b  M! q- J% G0 v
  115.     strcat(file->full,file->path);3 U- T$ l( g/ a$ Q3 L# x
  116.     strcat(file->full,file->file);
    # m1 g% n; i& Y8 y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())) f0 U  O1 k& k4 W
  118.     {( X$ Q! ^" q$ R' X# G  p& M
  119.       file->vers=(float)atof(version);
    9 t5 ~( N+ J/ k5 ^* o$ O, z( _: V
  120.       UpdateList.push_back(file->full);- s# O; `: k$ V# w
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));) J, D# d0 h5 V$ ~$ J" Z- L. e
  122.     }
    5 x3 u% F/ d- |+ y
  123.     else+ D( `9 e+ }+ a6 h& v, \
  124.     {' x# E$ k" x5 o. S5 S2 e
  125.       olds=(*p).second;
    " F' R& u( ^* [/ K/ ?" k
  126.       if(olds->vers<(float)atof(version))
    / `* I1 R$ ?0 H9 t# p! I
  127.       {
    7 y9 h/ a5 x& T  P- N
  128.         olds->vers=(float)atof(version);
    3 }7 }; s) Z9 {* ^% ]
  129.       }
    ; ?2 t6 l0 ]; K
  130.       free(file);
    2 c9 i6 }/ Y, p- P2 g) S; L
  131.     }
    3 I. w3 @" t; D* L
  132.   }
    / W! {5 [6 S+ N* D& C4 h
  133.   fclose(fp);
    : {1 h/ u5 X, ?/ M, l9 n
  134.   return true;
    % v& s% c' M( t$ T- m7 m! S: k
  135. }
    $ v2 R  B; w/ y2 m4 U
  136. $ f8 y) T7 i3 `, ~0 U: x7 a5 v
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)# t3 C7 y1 f, P( i
  138. {& q5 t4 E. Z; p# o" c1 k3 Y
  139.   TCHAR  szFull[MAX_PATH];3 }# H3 R( {9 k; V2 D- j
  140.   TCHAR *token,*inter;4 {9 f/ L  M, F* |  V- d% k
  141.   *szPath=0;
    ) V8 O7 N- G  x3 f; f8 h6 ^
  142.   strcpy(szFull,szFullPath);
    / s: q9 K: U$ w4 {5 h% S
  143.   token=strtok(szFull,"\\/");4 ^% O' Q) G9 P4 {( h( l/ }5 U
  144.   inter=token;
    8 I/ }' A& Y6 J2 ]6 g
  145.   while(token=strtok(NULL,"\\/"))
    $ i$ m3 k, v8 g% _$ V! x
  146.   {0 ~( F" g* {: ~( n! B; Y
  147.     strcat(szPath,inter);! h% @: X) }' Z) U& O2 G, c5 |6 F
  148.     strcat(szPath,"\");
    ( K4 L0 p5 y( U* e" q
  149.     inter=token;
      D* G0 e  M+ f: I' R
  150.   }
    6 A* B3 P& O! E4 N4 B0 o
  151.   return strlen(szPath);. V6 c. L3 x' n( A5 }5 S
  152. }7 _& o% I* G2 ~5 K5 y6 A

  153. 4 D6 _  A7 B$ Y" ~- B& _% V! y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 [( x' L3 }5 J, q$ S5 t# Z
  155. {
    % O+ M; ]8 c: y
  156.   DWORD attrib=GetFileAttributes(Target);2 ]. p$ y6 }) m6 o9 j  j
  157.   if(attrib!=-1)
    9 l. Y$ Y1 p& I
  158.   {
    ; v* ~2 x: i* f6 I* S  O
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))+ [. S  `, [/ G
  160.     {
    ; t: T; P9 X- J6 F+ M: [$ D, t8 ?
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    1 e. c. Y: z# K  S: J; i  q5 Y
  162.       SetFileAttributes(Target,attrib);
    + J7 t  g& t" K; v$ A+ c0 Z! e
  163.     }9 Z. y% ~8 Y* S
  164.   }% h2 S7 K" ]( m6 w& r  Y7 F
  165.   CopyFile(Source,Target,Erase);7 `3 U5 ^3 A& Q, `5 T, a# {
  166. }$ c6 l! u: m" [6 F& J6 x& \

  167. 1 {1 U6 u3 b' m  t7 W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . {2 s7 Y8 p+ A; q* o
  169. {
    , M; F! k+ F' V  m- @5 c! f' r
  170.      FILE *fp;
    % {+ T, X! h: z1 v9 x# B
  171.      char  szBuffer[8192];& a8 T6 J$ ^) r0 V' n$ I
  172.   va_list  argptr;
    , P+ s- u9 v# F5 W1 z8 h' n

  173. 8 n# t4 `0 T+ Q
  174.         va_start(argptr,message);
    3 F1 l! h. ^% W& x/ C3 Q# Q' i
  175.         vsprintf(szBuffer,message,argptr);
    0 s: p: K2 r, h4 }
  176.         va_end(argptr);
    6 y: S3 k/ g8 J$ V3 s
  177.   fp=fopen(FileName,"a");$ a# S7 v$ x# Y8 x# k" ^
  178.   if(fp)4 P! [8 C8 f" w# `2 ]
  179.   {
    7 x% B" V0 g. i1 P6 W
  180.     fprintf(fp,szBuffer);, @7 T/ L: ~% d9 K
  181.     fclose(fp);( G. w0 Q# l) D3 n
  182.           _flushall();
    ' b- g1 _( ^( z  q3 N" H5 E' F
  183.   }; J  G; U9 L7 K0 X8 q4 z5 z
  184. }9 B+ S& C' I# ]2 ]
  185. + D+ s. ^4 z3 m' W3 o- c6 F
  186. BOOL CRevAppApp::Fclearf(char *FileName)' F( Q  ^% s, J
  187. {
    3 e* ^3 a0 _2 I5 _1 k% J- M
  188.      FILE *fp;+ d7 @! Q; r0 g% m- p4 |: c( f1 w
  189.     DWORD  attrib;9 p% Z4 w9 J1 E+ o+ y
  190.   attrib=GetFileAttributes(FileName);
    , U% C, J. A- d+ F% G, X8 w& P. M5 J
  191.   if(attrib!=-1). r' I2 X; m# e8 I$ Q' r" ^9 `* b- ^0 h
  192.   {
    % J0 E# y: B- s) u7 c" Y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ( i: g2 U1 d+ M- {% H0 e
  194.     if(!SetFileAttributes(FileName,attrib))
    $ G. F& |  b- o2 X- }
  195.     {# S0 w- ~/ k, N1 n- W
  196.       return FALSE;
    . v2 I$ Z: V4 \2 P2 b6 ~
  197.     }
    # E  S. |, K- V% R; }/ ]7 i
  198.   }
    3 [* s- ~, K* m; ?- Z
  199.   fp=fopen(FileName,"wb");* n0 h7 `- a6 `1 l4 ]2 e
  200.   if(fp)0 F9 u0 `0 X4 O/ j: E% ~
  201.   {5 C! X( J2 Y# D  @. m. h0 P
  202.     fclose(fp);
    ; ]8 C. G+ w. ]/ A) C$ e3 R8 b; q* z  y
  203.   }
    # M# b" [* T: m# v
  204.   return TRUE;* t8 [5 B8 X9 j0 C9 b. p3 a
  205. }* D1 r& H. w# r7 e
  206. * S" \0 G6 v: C5 R5 V0 V2 a  b0 s1 d
  207. BOOL CRevAppApp::UpdateLocalVersion(void)6 V0 E# M5 M1 ^
  208. {
    ; ~, }5 g/ N( N" M- C* w
  209.   char filename[MAX_PATH];
    0 f% s( ]% _) w
  210.   LPUPDATEFILE file,olds;4 ]( C- ]) V* k5 v0 `, H+ y. Q
  211.   std::map<int,CString>::iterator i;: y& V1 O$ y! _: @# D5 \7 T
  212.   std::map<CString,LPUPDATEFILE>::iterator p;1 B. n# F0 c. Z8 J- V( m
  213.   std::list<CString>::iterator l;
    + ]  \- Q/ F5 n6 `9 w  {

  214. " }8 l  I0 j9 O! K# k- ~! L5 X# A
  215.   if(bFirstUpdate)1 X% {4 {& k# t! F
  216.   {7 Y% ~+ l& a5 J
  217.     dwCurrFile=0;7 E% L6 f8 J* K+ \: M# q
  218.     bFirstUpdate=FALSE;
    8 r7 K  o5 g' h6 Z, K$ p- X5 d
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # \0 f8 o, b' G: V  T
  220.     {
    9 q, H+ R7 S) z1 ?" S
  221.       dwTotalFiles=UpdateLocal.size();
    : A7 ^$ J: D, H7 g
  222.       dwDownLoaded=0;
    ! L7 K# [3 k+ }* _
  223.       bSilentStep=FALSE;6 y/ p- f; z: F0 x8 {
  224.       bCompressed=TRUE;2 I, A6 E- E% l0 L* [1 a" B
  225.       strExtLocal.Empty();/ o1 Z3 Y7 `; v
  226.       strFullName=(*i).second;
    . i$ q  B. V) A7 N0 O  F) l
  227.       dwProgramState=AP_CONNECT;6 }- a" K  n! T& P& A4 u# l$ Q
  228.       return TRUE;6 t: k" o3 R9 N1 Y
  229.     }4 v" y5 O6 n% ]- d! }/ b8 s
  230.   }
    3 ~. K2 ?3 K) Q6 E* j/ `* B
  231.   else if(bRestartUpdater==FALSE)
    ( i# \5 W9 O  i5 D: n
  232.   {
    . U, |5 {0 l4 b. b4 z0 j- K
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()). l9 U' u+ b2 _, o  S! `
  234.     {* O0 }4 ?& |- Z3 k* @
  235.       file=(*p).second;& q5 ]" d; p6 V+ P% \# Q
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - p  F6 _% i9 |7 h; M* G0 I* C
  237.       {- {+ F, `0 L8 x0 Y- r
  238.         olds=(*p).second;% I  U6 O6 [7 ~
  239.         olds->vers=file->vers;
    : ~# i+ B# f- y; c' o
  240.       }6 E( [* U- p, ~4 }' T- H
  241.       else
    % J5 ~/ v) V: _4 g7 k& r: {
  242.       {5 m2 t8 f4 E) H
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / t; r/ Z' I% i( Y4 M
  244.         memcpy(olds,file,sizeof(UPDATEFILE));: g0 u/ Y7 d! d1 ^% q. h
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));, o. k# W* }' R% _& e
  246.       }5 C9 f% ?. U: S. @* o
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    / g% a+ a3 ^7 A" _( g0 V- c* H. M. `
  248.       sprintf(filename,"(%s)",file->file);
    7 x# E3 q& t$ c5 e/ K$ {( M" m
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 Z3 L3 P& ]: z: s6 S2 h' c4 ~
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    . p! v# W" c# l4 k: n( g+ Z+ D
  251.     }/ f9 w7 R8 J' S
  252.     dwCurrFile++;
    1 A5 z/ y" W5 ]7 T
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): U$ k, z5 ?5 G5 Z
  254.     {
    1 l: e, h% C- u! `& T0 I: m
  255.       bSilentStep=FALSE;
    ! A* `$ o. \/ M# B6 U8 x" M( P
  256.       bCompressed=TRUE;" r6 }* i. y- q4 E8 A( r
  257.       strExtLocal.Empty();
    6 K" M# [8 L5 s; u! Y* H
  258.       strFullName=(*i).second;
    / w" V* P; m0 b# p
  259.       dwProgramState=AP_CONNECT;
    1 l* ?4 V) K9 `4 P* n
  260.       return TRUE;) y& F# j) a$ `* Y, ^1 v
  261.     }5 p/ p# K. p" w& e4 y) \$ Z6 l! W
  262.     if(!bRestartUpdater): a# V: z7 o8 L' E
  263.     {
    & k; t7 t# B& U7 J: c& {$ l
  264.       int iCurrSize,iFileSize;
    9 \0 z6 ^7 |" k4 s2 \7 `2 {% b( X% z
  265.       iCurrSize=0;# u+ f. M% l& `4 S- V( O  ~/ P
  266.       iFileSize=UpdateList2.size();
    : q& D( D" D/ S/ x" s  L  [3 }2 g% a
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");* \( `" ~; u6 r4 }1 T. a8 r9 R
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    * F# t' j* R6 J4 M$ e# L9 p
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    0 g% d; l; X; P; q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * S4 W4 g5 f* |- h
  271.       Fclearf(".\\update.dat");
    , h4 K& Y) D8 x6 p9 z& X
  272.       Fprintf(".\\update.dat","Bloodyf\n");* m) _2 ]7 I1 W8 n. Y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 q" s  V5 z$ i  A
  274.       {
    ( g( P' v  S' }' Z4 d5 w
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    . d3 q4 i& S+ V8 B) h
  276.         {( U0 e3 W) H$ ~0 _* y/ k
  277.           file=(*p).second;
    ( q. d  d7 m" h
  278.           sprintf(filename,"(%s)",file->file);5 _1 o7 [0 M" j6 f5 r, U
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 ~$ O: f6 |5 u& v2 x8 i
  280.           iCurrSize++;
    2 Z+ O# O8 u, |5 |
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));! r, U& _! q. ~4 f
  282.         }  ]- u/ O$ [* ]: J8 W
  283.       }
    7 W( D8 m: [% S3 N* W8 V
  284.       unlink(".\\update.txt");5 i' T+ c$ Z$ s# o& Z
  285.       unlink(".\\update.tmp");
    " O9 j* W. r0 q
  286.       Fclearf(".\\checkversion.dat");
    0 t' R7 c0 Q% |1 K1 C0 Z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    2 e5 Q3 B& [3 n5 b
  288.       if(UpdateLocal.size())  p! H  H/ j: @" r
  289.       {
    3 O) z* S0 F5 O
  290.         UpdateLocal.clear();2 b# ^0 H( X; l: E
  291.       }2 g: ^; j2 T2 N6 r/ x) K& C$ O* i
  292.       if(UpdateFile3.size())# L" M: I* v6 F! k8 I
  293.       {
    1 f2 q) {+ L% z2 S) s
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 r! _6 P* u9 ?+ k7 Q8 Y3 A
  295.         {
    3 b/ [* _, b! A
  296.           file=(*p).second;' q5 R% D- X+ I5 I# ?
  297.           free(file);
    % F& B+ e8 u1 c0 O+ ~; E- Q
  298.         }
    $ G# r1 u: p8 O" s% R. e( ~% k. ?
  299.         UpdateFile3.clear();
    " ]( ?7 `; V* x) L; }
  300.         UpdateList3.clear();( I" Z  F' c% F5 l0 ~% E
  301.       }+ ]1 ?; D" i, ?6 g  f# n* R; W
  302.       if(UpdateFile2.size())
    9 d$ o! l, e$ h5 s
  303.       {
    9 e0 b( _3 M! }6 B8 W. G
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! z, {  t- W% r9 Q' r
  305.         {
    % r$ G3 w5 P& ~6 k1 A# G
  306.           file=(*p).second;8 Z$ l7 Y" e1 W/ n
  307.           free(file);- M! E8 H: v& }  o( L1 A# f' f
  308.         }8 {" i9 g2 Q. `* g8 `0 o% t
  309.         UpdateFile2.clear();2 I. [% I0 B! v, N3 e* J4 x$ b
  310.         UpdateList2.clear();
      {/ b) D/ I; D# c0 v; O  |* l
  311.       }
    . h* j6 p$ i$ p# u- {
  312.       if(UpdateFile1.size())
    & A0 J+ S& Q7 Q2 a1 P+ A1 B
  313.       {
      @$ M; O; o/ K  }
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 O0 j& o' \3 N' M4 T
  315.         {. v- j3 @, Y, I, U2 @$ b' M) }
  316.           file=(*p).second;
    / }8 M& T9 }9 S' ]. J4 k5 R
  317.           free(file);0 l- O# p1 D9 j) e+ S- o) f
  318.         }
    3 \, p' f: R. e2 ]# g; E* f
  319.         UpdateFile1.clear();7 Y. g; j8 I7 k
  320.         UpdateList1.clear();
    0 X$ s3 @" P: |
  321.       }& r5 M8 W' E. v; Y* b
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    5 y" Z% e) u6 b! [  ?1 x6 I
  323.     }5 t9 Y0 g0 P2 q; E
  324.   }* w7 h) n& @2 t
  325.   return FALSE;
    3 |& A' u( I1 E1 o- O. @
  326. }
    * x9 d% O0 a/ F/ V
  327. 2 F# B- j4 M) U, ^/ T5 u5 V
  328. void CRevAppApp::ClearAll(void)
    + _$ g, h# |' u6 D  T: q# |$ W$ ^
  329. {8 C2 u7 U3 Y& L6 C4 v, _) j: a
  330.   LPUPDATEFILE file;9 g. V: h8 n" B5 |5 R! \- p# Z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 n* W- @& E+ s& A+ b; _, E

  332. & R7 P0 F9 B7 l4 ~3 g+ T/ ~
  333.   if(UpdateLocal.size())
    7 ^: a. j4 ^& x9 y3 Y) j
  334.   {
    , S1 }1 h' b# w6 j) W; x+ |+ P* t
  335.     UpdateLocal.clear();
    - E6 ^' M0 P' `
  336.   }
    / I# l( K% _4 R9 \
  337.   if(UpdateFile3.size()); n" s! Z' Q; W' b* p# E
  338.   {
    $ V7 J$ }0 ^+ M. F7 e
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    / Z9 r) c: f, w4 V  ~' b. j
  340.     {
    , ^: T1 |6 p5 D' L; Z1 R
  341.       file=(*p).second;% a- X: [- @$ G$ {/ s
  342.       free(file);. ?7 Y0 H  W2 I' Q) h
  343.     }
    7 ]; p, h! r6 L( S3 k3 N2 O
  344.     UpdateFile3.clear();* @5 U8 H( \" A2 n8 _( \
  345.     UpdateList3.clear();+ d: B& I6 y4 v# L$ Y& \6 o" P
  346.   }( r- |  g% F! I% L/ `
  347.   if(UpdateFile2.size()), S. E$ Q2 E8 _- N9 q0 p2 D
  348.   {0 s0 t6 s$ y3 L$ d
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! U6 a* c9 [$ q( ?5 v* e
  350.     {
    7 o# \* ]1 I$ W3 y* [& g, Y, L8 I3 R
  351.       file=(*p).second;* J: r( n+ }9 R6 }; U5 j5 b
  352.       free(file);
    / I( j- Q. R" Y# @# \; e
  353.     }; ?' P5 U  ?$ L' Z9 F3 a0 o/ {6 j$ ?" F0 r
  354.     UpdateFile2.clear();" w3 D! ~0 d' ^) N) t
  355.     UpdateList2.clear();) `+ t( a# h7 ?' y1 T6 `, X
  356.   }
    ; t+ M6 c  K% l  I# F
  357.   if(UpdateFile1.size())! R# B4 i7 T# W+ h
  358.   {
    ' Y' f9 ^: b9 b/ d
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* a  R( U+ ^7 S$ l3 k
  360.     {
    # Q) ^  n# n% Q" @
  361.       file=(*p).second;- g; R0 Z; G* Q$ _2 f( w
  362.       free(file);
    9 c- {  i( P% U; S4 s2 U
  363.     }$ u& _4 q3 y6 f* @- p
  364.     UpdateFile1.clear();
    / M: e; {( T) e/ W) s3 J
  365.     UpdateList1.clear();8 f. V+ w1 O  m4 z
  366.   }: f7 ?0 l: h6 X. r7 T! ]
  367. }  
    3 e5 b8 s  p: c' j
  368.   ' M$ F; R2 q1 _" s% e
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ( `3 W+ E, x( U! t% F8 u$ R
  370. {
    ' B% B+ i. C% x7 X. E
  371.   int c;* d2 C# N& R: ^# o9 M
  372.   LPUPDATEFILE file1,file2;8 ]0 \7 u- z8 q1 @
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;" z* I" I) Q6 D  m  X: F! l9 o+ ^. p
  374.   std::list<CString>::iterator l;
    ! T1 g7 {3 \) l. N$ e
  375. ' U1 a9 v8 z2 p0 S
  376.   UpdateLocal.clear();
    7 u* d, H* L+ c: _; B8 p1 j
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    1 w  c' d; W! \! |
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);- c0 F3 Y( q; l! }5 f. a* z- H5 h
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    * o  N) {- E! S7 R7 J
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    7 A7 f1 q2 W7 T8 I) o+ y, k
  381.   if(UpdateFile3.size()). i4 z- D; m3 {' t% L" l
  382.   {
    : ]- W( G7 I* g2 p
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); I- }9 A7 q4 M$ U4 v
  384.     {) V6 e0 q9 L- X& t* n2 Z- R
  385.       file2=(LPUPDATEFILE)(*i).second;
    8 t( S8 E: a, j& o0 b$ O
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * W3 c  i# d- q+ H- _) Y2 T) u
  387.       {
    . z0 V" z6 p7 z. y, x" F% I1 ?
  388.         file1=(LPUPDATEFILE)(*p).second;
    . R0 h7 V9 x9 P1 e9 K5 ]# [- R) }7 \
  389.         file1->vers=file2->vers;
    ( I, I/ h1 G, k. C* m* s- x- L
  390.       }4 @1 ?4 Q! Y5 X1 F
  391.       else
    : Z1 G. @. G# c$ Q* E0 c
  392.       {
    . X+ d, a( R6 s/ ?2 j% k3 x8 B+ r
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 ~0 V  k; X( _( \
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    " F0 @" W. ^1 X" r( i9 W
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));0 \/ K# |; O& H* W+ [( j, |5 M/ T
  396.       }, n) q! \" k: R* `
  397.     }
    7 {& h3 Q0 W9 J3 X, S1 D! k
  398.   }0 y9 d# k' ~4 l" ~
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ) a$ E  Z# q- s- W
  400.   {# H9 F6 D1 b: D4 r7 ?- [5 m" B! e
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! d6 ~' c3 x/ W+ T/ U' e/ n- _
  402.     {
    / d) T( w1 D9 c/ X: ~4 J) x
  403.       file2=(LPUPDATEFILE)(*i).second;3 v& z/ D$ r( Z- C) u( X! L/ n
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 I. b$ @) ], l4 Z; H
  405.       {
    9 W! W2 p) `* x7 a3 `8 G( S* z/ z0 C
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 I" w8 l8 p. G; a+ }* W- _  y. Z% F
  407.         if(file1->vers!=file2->vers). B4 w: A5 t% @6 V( g7 d
  408.         {9 D: t9 u$ u6 r7 ^
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' G4 O  i, ^% Q1 o% z& c6 v
  410.           c++;* k& }& E0 g  q  L! e1 @6 S' y
  411.         }6 K8 M1 k3 P3 A  K. x: Z- ~, f
  412.       }' E' }0 x" m2 V! j8 n5 T0 [4 |; _: i
  413.       else
      Q$ _5 W* [0 Q. G
  414.       {; M; N! A3 e# K! W. }
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * R. d7 r0 Z+ k6 c/ B5 w
  416.         c++;* w7 \# B) B  l8 v8 l5 ]' R
  417.       }, y' [: n7 X, `" N1 [: O
  418.     }3 P1 M) d+ Z1 S5 U& L0 v7 L" B
  419.   }) U$ S1 v( k! p
  420.   unlink(".\\DownLoad\\update.txt");  T+ M+ u$ _3 J+ t
  421.   if(UpdateLocal.size()) return TRUE;
    0 S! I0 D/ ~5 x- {
  422.   else                   return FALSE;
    . q9 b( k: ^8 u
  423. }
    8 L6 L! O: m- x+ u9 z

  424. / _, U- T3 ]7 i9 G  a& b# h
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    - x4 d" {4 ~) H2 H: _
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"! Q/ |  g' m$ D( G7 Z: Y% O1 y* t0 x* l

  427. % d5 A. p# [' j8 K( `

  428. 3 g" _: g# a: f: U# N8 \

  429. : x/ s- [) d2 w5 y; c8 F1 {" c6 U
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    1 [' L+ G+ j: T1 D& y( d
  431. {
    , x& v, _* x% ]& F- w! R2 x. q/ l* |
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;* L0 ^, q' P. q: `: S: [. c& E- }
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 \6 i+ Z& U/ T& `, u% _
  434.   {
    " s: O9 w) x$ ?1 ?. f: F
  435.     char szLanguage[50];
    ; j1 @' S/ G) n- M
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 ^& A6 D: [2 U1 X* y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ A4 W1 B4 [0 o( k+ y$ s+ s
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 l2 G, B; @7 w* f6 p
  439.     else                                   m_iLanguage=ENGLISH;
    1 z9 ^; c7 o$ r
  440.     char szRegister[100];5 f/ `) J8 x$ A7 }5 F
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' u& d+ t: n3 c. d8 Z# h* U) q
  442.     strRegsName=szRegister;
    $ F2 {; ?  f0 P2 E, [
  443.     char szPatchURL[100];7 v, _; s# {: b* e3 c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 A4 ]( u0 G6 _. X: i# c
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ V# l' A9 W+ _: k
  446.   }- g! o# K+ \0 A2 J1 R% m
  447.   else4 \9 G; R- w( q9 @5 M  t# z$ K* ?
  448.   {" V& ]2 M% V8 a1 F5 x
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 t( r* ~9 Y) W% H
  450.     strRegsName=DEFAULT_REG_URL;
    3 a% N' [$ Z6 |3 O! {
  451.   }
    / a& d& I0 o9 \9 \* l# J! f
  452.   if(GetFileAttributes("hosts.ini")!=-1): R7 Z- X7 H6 a8 F; ^* r5 M
  453.   {" W3 H% R# ~2 g
  454.     char szIP[50];7 i3 s& C% s2 D# C, E+ J/ g
  455.     char szDIR[300];
    0 `! x" u- K  x; M1 y) X
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    : C2 a- }0 |: `8 I! ]
  457.     {
    0 |/ U! }9 C% @. s. |! P1 S1 l" {
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");/ `5 P. I  Z0 M2 O% t) f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: F( u  h: V( F0 W
  460.       strHostName=szIP;8 r% h3 g# _6 S% K5 l% P0 w
  461.       strHostPath.Format("/%s",szDIR);- f) Z7 l5 J/ Z4 t( g: G
  462.     }2 A, |2 p- y0 ^: q) H+ B, h% E
  463.     else6 K# n' J. V% t# Z6 y9 d
  464.     {) Y3 v+ y) b# y  U4 J
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 [' [* I& I+ o8 I' q
  466.       {
    / H" S4 A, W9 C% s, x4 i
  467.         char szLanguage[50];* O+ s& O4 T2 x8 }8 z) }7 G1 H
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  `0 o; ]" Z! ?( A
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 C: A; h4 f" ]' ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 l6 j# k' k. s6 ]
  471.         else                                   m_iLanguage=ENGLISH;
    5 t1 w& B- k: M
  472.         char szRegister[100];* q+ }. u! ~# @& s: U* R/ k7 r7 O
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 _, L' O# u9 l$ H+ a& M
  474.         strRegsName=szRegister;
    - O2 \: V) T% @, x) ?% A/ C
  475.         char szPatchURL[100];6 F+ g: F$ x  Q* n5 N6 B
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ v/ ~( q9 l# L' q8 v6 p
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 N& J1 y! G5 e
  478.       }
    5 a0 A5 u% R, w6 @( Q
  479.       else
    * s1 E, J! d( T; H
  480.       {
    9 j* o4 e7 E4 y, A( p$ n$ {2 ]
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + {+ e9 l; t! R% i1 H9 ^) ~9 ^! o
  482.         strRegsName=DEFAULT_REG_URL;
    * V7 K# V9 p2 _: ~' _8 j8 h7 _
  483.       }
    * d$ `6 ^$ y/ M* Q* o+ b
  484.     }
    1 l& m0 ^% ~  ?. g/ t  k& I0 M
  485.   }
    / F$ X4 t, l( J9 V; [% L8 o
  486.   return true;8 g% n+ f) H" S+ V- p
  487. }7 x% C# p7 O4 ?
  488. $ m' [& T8 V  a% H( a/ X1 J
  489. #include ".\ZLib\unzip.h"7 k7 d/ E9 X+ o8 r5 \
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" o4 H2 h* Y: X/ D7 |6 F8 G' B
  491. /////////////////////////////////////////////////////////////////////////////
    : u# V5 Y1 d- \- D9 G/ {4 W. T
  492. // CRevAppApp initialization
      f$ v3 c& r4 [' Y

  493. 1 L  B' v. e( J8 B+ J2 g
  494. BOOL CRevAppApp::InitInstance()& P$ I5 l4 k3 o0 Y' w
  495. {5 J( _( e8 S+ z" W! g% s/ M! ^
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    - Y3 c8 w' D5 @# g* G$ U
  497. 8 z4 W5 b$ h4 ~* {+ ~; H0 `* N
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);& \' m! E$ b) T( e0 J' e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))/ t6 n% O) {; T* V8 i
  500.   {, z! o$ V0 `+ r( ]. m6 T
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    7 h) ^5 x* ~% O; z" u! t# J  Y" Y# l
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % C5 a4 z: h9 M( z2 W
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))! [. d+ s8 D8 ^# d" k% Y
  504.     {: E( ~, Y! W: ~! @3 a0 o% G
  505.       strcpy(szPath,szPathTarget);
    : S% N. P8 P5 @  ?( y" c
  506.       SetCurrentDirectory(szPath);7 b# @" t3 C# [4 o6 Y9 l/ q/ F
  507.     }" V0 ~9 G1 s) c: ]  }
  508.   }
    ; f5 W' a8 p: V1 ]. K
  509. #ifdef _DEBUG6 e; F* K" h3 Y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' R3 P% ?  j4 E+ ^* i& b
  511. #else8 u2 C$ O* X% ^. l  \
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); z& `  s0 i/ z' ?6 K
  513. #endif9 j3 R0 w2 A! d0 C
  514.   {
    & \+ ]! o4 s8 K$ C5 J' [: u( Q
  515.     char tempFileName[MAX_PATH];
    + M0 ]- E8 p, L- ^' D, s5 q
  516.     strcpy(tempFileName,szPathSource);; @( o3 |: @- T: q7 Y8 D" u
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ! i) v% p- M* q. o3 d, y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 M+ E: I  \" H/ F: X  L; r
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    . d" f: {8 P) K. R- o$ b# G
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);: ^& x0 _# o  t" O
  521.     return TRUE;* m+ \9 N# V, ~
  522.   }
    ; ^* k1 C/ m6 Q$ s5 [- N6 A
  523.   // Nuke 0118: Delete run.exe
    " L# ?3 y0 S* q/ c( }
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );% c0 n' ?, D! L7 n' o8 p' H
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / S/ Y* L7 s+ C6 {6 I4 s* W, S
  526.   if(!ReadCfgFile("Config.ini"))
    # A7 z( T8 b. I
  527.   {- n% ]' Z1 L) {2 v9 [" D, r3 W
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ) `+ X/ ]# `1 l7 c
  529.     return TRUE;9 ?" V( w  G& p/ K
  530.   }% n; T. }  i& j' T: l+ ?
  531.   HANDLE mutex;* m) r- j/ N0 P: l- Q4 l
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))5 [) Z8 e% F5 b6 r9 e
  533.   {
    6 Z5 }: {0 g3 q
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)4 f0 C/ J: A4 u- L% @7 w; e1 f
  535.     {( e2 n$ I( ~9 s  l5 V3 T
  536.       CloseHandle(mutex);- l8 C3 l$ l2 y% _, w0 S9 L' R
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ! W$ t  l. E  m
  538.       return TRUE;
    ! F* s. d9 C' t. L& k* \
  539.     }
    $ `' Y2 V: P3 ]3 A
  540.   }  ! o8 L9 ^# `( h* G
  541.   CloseHandle(mutex);
    + a4 |7 \4 w6 `1 `: W* t
  542. 0 p5 K9 j/ L4 D$ y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);2 ?7 i. p6 J9 v

  544.   D7 f. S+ j; @* @
  545.         AfxEnableControlContainer();
    ' J# _: i7 a4 J' _5 U1 N
  546. 7 I9 O& f9 k( F% x& c2 {3 r
  547.   bCanUpdate=FALSE;8 I/ M" e3 n1 W: g
  548.   dwStartUpSteps=1;* I2 v( S; d; V% R& n
  549.   dwProgramState=AP_NOTHING;3 Z/ y% C5 Z' W+ Q, ]

  550. : J, @* J0 T! n( G5 }* Z: u0 P  n
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);% z  v6 U' `; w: L0 S) |) e* J: O

  552. 4 w+ p% H5 F5 J2 c
  553.         // Standard initialization9 j" `; F% s. C4 X) s
  554.         // If you are not using these features and wish to reduce the size# F/ A  V4 {" k% l! b( O
  555.         //  of your final executable, you should remove from the following) J* V9 u% G3 ^2 t
  556.         //  the specific initialization routines you do not need.) O/ b9 |* m+ H, I" V7 u
  557. 0 |# e& o; i# O$ a
  558. #ifdef _AFXDLL
    " K6 H. A) {2 V/ u7 H
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 y6 t3 R0 b8 i. Z& v
  560. #else& q9 ~1 v% w1 s, g
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically% G' h! S, r  B
  562. #endif+ z, ?7 ^2 K) ~) K: H/ ~/ O8 w) y/ a6 p
  563. / J6 T7 i  q& T1 I9 w
  564.   dlg=new CRevAppDlg;* y/ a/ `2 w- n* @2 Z! \) C! r; S- E
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 z- X5 T# S4 f9 [8 `
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) U! r3 k( ~5 ?, E0 q
  567.   m_pMainWnd=dlg;* A/ J' [: K( r
  568. 9 ^+ H4 i4 A- ?
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    9 F5 I) ~( c6 d4 q

  570. / F: C4 @3 ^& R' X  O
  571. //  GdiplusStartupInput gdiplusStartupInput;
    2 C( D; Z' n! A& Y/ V& ?
  572. //  ULONG_PTR gdiplusToken;
    + R; R2 @9 j* x, W1 ]% y* C- k
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! H2 d  l9 O/ n7 o5 `
  574. . S2 w9 H! T3 o( q5 A; u% Q
  575. //        CRevAppDlg dlg;
    4 ?4 @. G9 X  p: p1 x
  576. //        int nResponse = dlg.DoModal();. L* f5 Y8 w: }4 \* n. I. V
  577. //        if (nResponse == IDOK)
    + F/ ^: a7 Q9 B0 C# a  c2 y
  578. //        {8 ~8 k' c5 \+ h3 Z1 c( |/ C
  579. //                // TODO: Place code here to handle when the dialog is
    ! Y: U/ {* t- Z; X& T
  580. //                //  dismissed with OK
    . l, v' U& L' X( R
  581. //        }
    2 ^' ]7 A5 }- `5 m2 z
  582. //        else if (nResponse == IDCANCEL): J- i4 G) p5 ~$ Q  M$ c
  583. //        {3 E+ ~# v3 @4 P1 R; p
  584. //                // TODO: Place code here to handle when the dialog is
    - P' e4 b- }! h7 h3 w& n
  585. //                //  dismissed with Cancel9 w  j3 s- `& J" z6 @
  586. //        }
    7 t& P9 K5 E/ N- H& Y& ]
  587. 9 D% a& n7 d; ]5 J9 R& p! [
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    9 m& ]: j7 ]1 X
  589.         //  application, rather than start the application's message pump.2 x0 `' v6 U! ^
  590.         return TRUE;
    6 e% P3 l/ a- t* F9 N
  591. }- [& ]- U4 P, [7 h6 j5 Q
  592. % `% ~( [8 |4 P# E& k9 k3 r- k
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    $ D( H) m/ d4 b) x% |) C4 Q
  594. {
    6 y  X( V. F7 g
  595.   int i;( r" P/ G" ?# l: x. X+ c* Y/ J
  596.   char *szRet;
    4 [% o- x! X( h# v# o( W

  597. 3 O& f. Q* }$ }
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    & b* [% M7 A! t
  599.   if(sztoken)
    ! w" e9 d: j5 |' Z
  600.   {4 y7 B; V* `  P" }* s
  601.     szRet=&sztoken[itoken];
    7 S0 \  B' u: r0 N( g+ r
  602.     while(sztoken[itoken])
    : f8 }( A% n0 a. p" J4 n
  603.     {
    ) K: }4 z1 X2 [: F0 E6 w# B9 T
  604.       for(i=0;i<(int)strlen(token);i++)
    % b$ c3 W, E% K( j
  605.       {
    0 T' H( J- |: Q; W6 k# ^
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]); t/ ]( n9 F$ q* F/ Y" Y! M7 I, R
  607.         {0 I$ n/ Y6 ~3 o5 o# e) K. R
  608.           sztoken[itoken++]=0;
    : A3 t* ]- P- L0 T! N3 Z
  609.           sztoken[itoken++]=0;( [, d- n5 r  b4 i
  610.           return szRet;
    + s, F( q. A" f1 e: w1 W1 P7 H
  611.         }
    % N, D  A+ l& b+ g0 w; I/ R
  612.       }/ q/ l2 V0 m' n9 T( y. t
  613.       itoken++;
    ! `: u+ g! N7 C9 y1 `8 j- \7 \
  614.     }
    3 ]4 r! G1 c! c. Y' w4 D2 z
  615.   }
    ' e) f6 |: C2 b% C& O# P7 K2 j
  616.   return NULL;
    " _! u' y! m5 L$ D
  617. }" J# z* k: O& H8 O: S

  618. / k7 \. u; F; J& u9 t
  619. void ProcessProc(long Total,long Current)
    ' q( H; S3 U3 Y: F% |! Q
  620. {! d  ?) P- d% P) ~: }! Y
  621.         MSG msg;' o3 C6 ?- F. p& a* I% ]4 h  C6 F
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);% T$ G6 n) u0 _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));( o: r  t1 J# X( f% _5 Z  \3 T- ~
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))2 A$ Q+ g7 L5 w% i' K9 N
  625.         {' ?& B# w  w/ N* I
  626.                 if(!GetMessage(&msg,NULL,0,0))
    + \5 ], H0 }6 o% |, k- |
  627.                 {9 g: Y5 I4 S9 d! ]' ^' i$ ]
  628.                         return;" E' e1 f6 m  d0 g  Q, i$ M3 D
  629.                 }' z' N' K" Z) m0 d+ j' x
  630.                 TranslateMessage(&msg);/ y8 R8 j& ^( T7 {$ m; ^# o
  631.                 DispatchMessage(&msg);
    ; s4 k  O/ E; P! s
  632.         }        % @0 `- s7 f! H+ ]6 M$ u* N
  633. }
    ) t7 G$ r8 n1 G. u$ J( V& m
  634. ' b. u1 T! H" _. p8 A4 t
  635. BOOL bFirstChar=TRUE;9 g/ k: W% H% r' S; J
  636. $ N( y# q4 Y% S/ Q. ~3 J" k) ~; o
  637. BOOL CRevAppApp::OnIdle(LONG lCount)4 B$ x, k. V  Q% Q: o4 d( b
  638. {
    8 c7 n4 u1 c, l% F6 s( T% r
  639.         // TODO: Add your specialized code here and/or call the base class
    6 P' t0 a$ O/ m; {
  640.   switch(dwProgramState)
    6 h, I% J* b: b; w; Z' I
  641.   {' H: q6 _( U7 b( ^
  642.   case AP_NOTHING:
    0 i- c! l# v* b2 W- |" G- p
  643.     switch(dwStartUpSteps)
    # f7 E' q' f5 B! Z
  644.     {7 J) B) b6 C6 Q
  645.     case 1:
    / z7 F% e3 [+ p( ?8 Q: m
  646.       {
    - z6 g. E8 G$ x* J  |# w* S5 q
  647.         int i;: U3 o4 o- s0 O7 R! P8 g
  648.         CDC *pCDC=dlg->GetDC();
    4 P2 e7 q) Q1 z! m
  649.         HDC hdcwnd=pCDC->m_hDC;
    9 ~: X# I7 b0 a) i- P6 }  e
  650. //        Graphics graphics(hdcwnd);
    6 [5 ~/ e- C* y) }" ~
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    - W2 y7 S5 }1 e/ x
  652. //        INT iWidth=bitmap.GetWidth();* i4 Y; n) R" h- @# N8 e
  653. //        INT iHeight=bitmap.GetHeight();5 c2 M! A6 f# I/ ^3 V1 _
  654. //        Color color,colorTemp;
    $ I& H* o+ u- y! P8 u) L
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    * `" T, o2 j+ N7 ~  j7 u, b; r6 J
  656. //        {: P6 q2 ]/ E5 J+ V5 x  ]
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    # z. x4 A/ y# V9 x' _9 F  |
  658. //          {
    % k. B6 d2 y/ t4 |6 A
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 X0 J8 C. o1 N# h
  660. //            colorTemp.SetValue(color.MakeARGB(
    3 s, ]# F& |" z& T5 p& Q, B
  661. //              (BYTE)(255*iColumn/iWidth),
    0 ^  k1 t7 d) W# V5 J  e# Z2 ]
  662. //              color.GetRed(),. \6 X/ g  m2 r8 @' y7 J" z
  663. //              color.GetGreen(),
    / d6 i  ^, h: L3 F2 q$ O. R" f
  664. //              color.GetBlue()));7 d& S2 P1 V; [& d
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    " F8 n- a6 [- z
  666. //          }
    8 m* F, \" F; U1 e& E
  667. //        }
    3 O, s" Z7 b% m) v. j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    & [1 w8 U% O8 L/ ^
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 F7 V  {/ F- ~" |
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( X, d7 B5 m& t2 y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 c: e. R; ?! i
  672.         for(i=0;i<240;i+=8)1 |5 v' N. h: B5 H, B  Q
  673.         {! t+ J" [$ x; S4 l+ p7 R
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 S. W! x- f1 y9 V
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ y& D2 g' P- Z& m' @3 ~
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; I% v6 V( J# a% c
  677.           Sleep(33);
    * i, S8 x2 R9 X
  678.         }
    & ^/ g0 d; f# F2 l- @" D
  679.         Sleep(1000);" U9 P7 R- _' M; I& W0 ?
  680.         for(i=240;i>0;i-=8)" f$ w4 F6 |4 `# @* ~
  681.         {/ E$ }7 `& G0 x" L9 ]# x3 D) j
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , ]& a& c2 p" {" S
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 R# d9 ^& d" e8 c. x
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" q9 |( P2 r9 s' j: |0 K
  685.           Sleep(33);
    4 h; k; g9 M; j7 k4 N
  686.         }; u3 u" r2 n& C; n
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);# k% e- T* _! ~. o, D+ |& J# e
  688.         dlg->ReleaseDC(pCDC);- U, ^) ~3 P6 Z
  689.         DeleteDC(hdctar);, r6 c' j0 h  H0 l7 L* `1 X
  690.         DeleteDC(hdcsrc);$ Q, P/ _* p: J* L6 ^
  691.         DeleteDC(hdcorg);$ q9 b, I' X; A/ }( W
  692.       }
    " L/ Z$ Q* {0 m6 e1 T( |- b
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);# A1 X2 u4 z5 W  s& D$ D3 }8 t
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 I! w# G2 O8 |
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    5 r$ c) [6 S% d% a
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    * }1 u! ~+ r3 x2 t
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & E; \: Y- E2 f, f- x
  698.       if(!Dn.Connected())6 q2 E" l4 R) p, h$ A, W
  699.       {0 {. I4 ^9 }1 P5 J. B; a) V
  700.         dwTotalFiles=1;% _7 y2 ^+ [$ o$ Z
  701.         dwDownLoaded=0;8 y8 @8 M0 E3 [# k* @
  702.         bSilentStep=TRUE;
    0 q) F* ~) I2 k& H
  703.         bCompressed=FALSE;% X8 U- `# h* J8 i6 F7 S
  704.         strExtLocal.Empty();
    + h! ^, c; A! V; g1 K
  705.         strFullName="readme.txt";
      r/ }5 ?7 h# P2 Y% J8 _; Q4 E
  706.         dwProgramState=AP_CONNECT;5 V1 z  c, }! ^
  707.       }
    % m7 C( g# d; ?, P- O9 i
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    / R* ?8 A( X) J7 I; l" m. M
  709.       dwStartUpSteps=2;: @; h/ r- w! F5 `9 j
  710.       break;! D# d4 O7 f% ^' S$ G
  711.     case 2:' [. v8 `2 O  k4 T4 M& c& F
  712.       {# w9 N" E+ y- a+ B% ?' R: J
  713.         int iEOF;+ z. W0 N4 k1 g
  714.         FILE *fp;1 x& W5 ^3 @1 H8 X7 Y
  715.         char szString[512];9 R1 ^6 r2 I! B- o6 I9 k8 B3 r
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    9 e& \8 d) S  l( q5 }
  717.         if(fp)( W! @5 b% s$ ^
  718.         {
    3 x& J3 H% E, o( m( l* f3 u
  719.           do6 t4 j  W, S8 j$ L. _1 D3 w
  720.           {
    ) w5 A! @7 K( g
  721.             iEOF=fscanf(fp,"%s",szString);
    9 t0 p, e5 l2 N0 m$ M
  722.             if(strlen(szString))
    1 V+ J7 N& J6 |9 F" f: @! t
  723.             {3 u5 q9 h0 }5 W+ S3 a* Z
  724.               if(bFirstChar)4 @; u6 H  u" T
  725.               {
    9 ]2 h+ C; L# \0 m) S! ?
  726.                 bFirstChar=FALSE;
    9 `7 R% b" V2 Z
  727.                 bConnectIsBig5=FALSE;
    ) m/ y* M; t6 y9 i% S" n, [
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! |) i) y5 [4 H- y: N, T+ J" I# h
  729.               }
    # w) E: w# F+ N" M4 P5 e9 g& E
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    5 F4 z2 x8 g! J/ d- @. L
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    / S6 x: j0 ~' F
  732.               dlg->m_ListText.AddString(szString);2 [* Q& R) q& @( h8 @0 n
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  u6 ^# z/ N8 l! H
  734.               *szString=0;" t6 h! U0 E+ E
  735.             }
    1 U9 `2 v9 K$ H
  736.           } while(iEOF!=EOF);
    5 k6 a* \/ a; ]  r
  737.           fclose(fp);
    / }* b, Y6 o( J& k; _
  738.           unlink(".\\DownLoad\\readme.txt");
    + a/ C3 i2 p/ o) Z% c7 O  T$ f
  739.           dwStartUpSteps=3;1 v% j2 L$ _" r. Q
  740.         }
    9 p3 a9 l; Y, n& O5 C6 m& K1 q) ]
  741.       }
    & [( b5 }9 @! ?0 E, j$ [
  742.       break;
    5 \- V/ A' `0 i4 R  V
  743.     case 3:
    ' c0 ~4 H. f! @: T
  744.       if(!Dn.Connected())
    3 Y0 l. l, J2 _& o
  745.       {/ x% |7 `1 _& B( C
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    & D% s; a; T7 a3 A" x. `) x) h2 _2 @
  747.         dwTotalFiles=1;
    % M* `) \" n: t0 }# `# S2 G) q
  748.         dwDownLoaded=0;; m: ^( k8 r" L3 T
  749.         bSilentStep=TRUE;6 X7 y4 ?1 D- R9 F3 J
  750.         bCompressed=FALSE;6 V3 r' C0 M6 h, |
  751.         strExtLocal.Empty();
    % A* o( v8 z3 l
  752.         strFullName="checkversion.txt";/ k8 p1 x6 d, x7 `3 a
  753.         dwProgramState=AP_CONNECT;' ~- Z" @5 ^# ~$ p) @( o
  754.       }
    7 K- r/ d: |* T: B2 ]% d5 J
  755.       dwStartUpSteps=4;6 u: @$ K, J- j* k) G7 \) Q2 l
  756.       break;+ V$ p) y1 S# Q* E3 d* F
  757.     case 4:
    8 w# k- B1 F3 i8 o( ~
  758.       {
    2 N) Y& h3 d0 W4 {6 T
  759.         FILE *fp;
    7 ?3 ~" N' Y$ G$ z
  760.         char szString1[128];0 }3 x$ [3 G& q; [
  761.         char szString2[128];% E# V9 x: |. |, R- E
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( }2 Q' M! Q0 I7 b3 U% O4 ^
  763.         if(fp)
    . C6 I4 u  M9 W4 q1 E, b
  764.         {: ]6 I! X5 L: S, a5 G  M, {% ?+ n  p
  765.           fscanf(fp,"%s",szString1);  `  v. I! r4 J
  766.           fclose(fp);
    ) T# @3 }' o( w9 d" j( G+ p6 w; X" i
  767.           fCheckVersion=atof(szString1);- x8 c9 l. F; T) `
  768.           fp=fopen(".\\checkversion.dat","r");* c! O( U1 k& X6 c8 S- l4 i, J
  769.           if(fp)# ?4 @: c/ X& f( R7 _7 l8 v. {
  770.           {! o  `) ^! g+ z8 B) ~
  771.             fscanf(fp,"%s",szString2);
    , G7 {- V+ P9 a; c. ~
  772.             fclose(fp);: x6 w0 k& V' o# K* |( L  t; a
  773.             if(atof(szString1)!=atof(szString2))
    ! D8 q& f+ q; i4 W" y7 q- i
  774.             {
    ; W' b  I* F* _; J+ `5 V8 @
  775.               if(!Dn.Connected())
    . i: S+ b8 f+ Z; N! H; N
  776.               {( L; C+ a) V- w+ d7 u/ g% M3 V, j/ I
  777.                 bFirstUpdate=TRUE;! P2 {% ?$ ]& [
  778.                 dwTotalFiles=1;" i; d, @9 r7 h6 Z) K! L
  779.                 dwDownLoaded=0;  [7 g3 `  L. |# N
  780.                 bSilentStep=FALSE;* n# A8 M, j- l/ p' C
  781.                 bCompressed=TRUE;: K5 |/ w4 ]& W% n
  782.                 strExtLocal=".\\DownLoad\";* |% e, |* d1 @9 w8 e) u2 L
  783.                 strFullName="update.txt";  b3 P7 p9 Z, q: P
  784.                 dwProgramState=AP_CONNECT;& m3 Q  G8 O6 P2 ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / o' `1 w( H) z; X1 N0 |/ o
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  E& t( m1 U! u* Z$ y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) |' _" @2 B' j  c7 u- ^: P+ L
  788. . M4 ^; _4 u+ z8 a6 Q3 o4 K7 H
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' ^4 k7 [7 `+ l! T3 \2 c' N
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    9 N( S1 y) G* V& c( y5 N# @
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)+ t( n# T# X0 h4 ]
  792.                 {4 S$ R2 T5 D3 z" u4 u% t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
      [+ v* u9 Y: q/ U! {) M" r
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");! O+ P1 C- q1 e1 l; x
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");5 P7 d3 ^- a' b& Y  ?4 l) r: B
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* c# l! A9 V- G: @9 P% x$ C
  797. 0 [( D3 O& P+ O
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- V9 B5 }' f9 Y! w$ ?) C
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 k( w$ ]( H( W/ A* P8 F7 f
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    9 r5 t9 b8 V1 R5 p0 ^
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* v, r& s) ?' V9 r- v4 b( c
  802.                 }
    5 i0 p& r9 }; u" ]( B( M  ?: d/ r" i
  803.                 dwStartUpSteps=5;0 ]" W0 K$ R7 i& c
  804.               }
    - \% y; S8 T( ?9 n
  805.             }
    & |4 _4 T8 u2 ?, G  @8 q+ ]
  806.             else
    " {9 z( K5 |# O& q& l
  807.             {. V* b& v; g5 h, ]
  808.               unlink(".\\DownLoad\\checkversion.txt");6 J* E% L0 ~) z7 e' ~
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");; g! ?. d8 h$ d! R
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 \* b1 c3 u6 n
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");  n- r+ n2 |; S* c2 L

  812. % c! T6 l" W3 R' Q6 t/ `
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 t2 B! @0 V1 I) m/ v
  814.               dwStartUpSteps=99;( h' k$ m0 G2 V/ W& S% f( B
  815.               bFinishUpdated=TRUE;& i# s5 T5 k1 N& u
  816.               bCanUpdate=TRUE;
    5 L# e8 A; z7 I5 t
  817.             }
    : Y- i8 B* w9 Y. ~0 p* G
  818.           }% I2 S# K1 I. O2 i
  819.           else
    ' D8 d6 D5 T2 Y4 z$ W
  820.           {
    % N9 J. k) r# z9 R# G0 V
  821.             if(!Dn.Connected())
    5 I7 d' c& k5 w0 r
  822.             {
    ! i7 [. b. z  K# N& W( H3 N
  823.               bFirstUpdate=TRUE;; N6 L$ N6 Z9 N# ^; z' a$ @
  824.               dwTotalFiles=1;
    - n4 C" |$ c( f! {$ `( b9 t
  825.               dwDownLoaded=0;$ [5 p% f  H' X! ^# _
  826.               bSilentStep=FALSE;
    4 c( x1 E+ E0 g- w2 D/ M- b
  827.               bCompressed=TRUE;1 e! ]0 N+ h' Z; X+ _0 \. V3 P
  828.               strExtLocal=".\\DownLoad\";7 G. q- o* \) F' O, y
  829.               strFullName="update.txt";
    / s# k% b$ M# i8 y) F
  830.               dwProgramState=AP_CONNECT;% N! A: `) }; @
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! m, t& I, @3 P6 z2 {6 R' W
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. E% I. ^$ @, T3 `# U
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 ]0 ^$ q; U; d) ~; ]
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 V9 i& t' S) M; A0 U
  835.               unlink(".\\DownLoad\\checkversion.txt");
    5 R9 {, m9 y- P3 P4 f7 Q& ^! `% l
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)& n2 U6 H2 I1 s% q
  837.               {
    * u  m/ q, P2 {6 w. G
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    9 z6 V$ {$ @- X' W( P
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");" o2 q  z! |4 I* Z! u& A$ `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");# w: j: Q+ ~9 N$ `2 L
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 v, {; v8 ~/ ^* E2 x
  842.                
    2 H$ J* I+ P. P
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : {% h' K+ M! ]
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 L9 R$ k; ?1 t
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    / J# }5 W  \: A' @* S8 Z+ E+ ]  _3 ~
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 b4 c5 g3 b- ?7 Q$ z7 @
  847.               }1 }% {+ y) h* q- S
  848.               dwStartUpSteps=5;: h2 Z5 x" w! |/ [$ j. R- \! |, {
  849.             }
    ' _4 i" H8 k+ a; M2 s  i
  850.           }
    . [8 r6 f+ p- L* P
  851.         }/ f$ C" `9 L6 P5 I& \  E+ h
  852.         else
      M' n. b9 l8 O
  853.         {
    # l. u  t) }9 c# J$ l5 d) ^
  854.           dwStartUpSteps=3;
    6 u) g  l. B; o# G
  855.         }8 F! x9 r& g0 T" r+ i& a
  856.       }+ n  V% Q, E  f
  857.       break;
    - m6 d+ L' ]8 m; _* }3 A
  858.     case 5:4 R+ @7 Y. g4 c  m2 y# x" K
  859.       {
    ! ~& ^9 Y" a( O$ s
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    & X: C- r' J: B; j7 V% E  m* B: f
  861.         {4 A8 _5 |0 a# w( e
  862.           int opt_overwrite=1;/ I  Y+ w7 g: a& T, Y- L0 y
  863.           int opt_do_extract_withoutpath=0;
    2 Q: F! O+ a6 ]" m( ]3 ?% k- F
  864.           unzFile uf=NULL;( d! i  Z; N" F

  865.   Q2 M% A: m; P: Z  U6 N1 G1 U
  866.           uf=unzOpen("Wsa.zip");# q* E5 g+ a7 D+ V8 D3 G
  867.           if(uf)9 W* H: S& u" q2 Q" ?9 n4 U
  868.           {7 V* s& q( ~; T( u1 E8 g: a0 ]
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    7 h& K, D" P; \* p  Z$ E- I
  870.             unzClose(uf);2 I$ A* e; r( F( M1 u
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    8 _# o- G5 K0 ^' _2 Z
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    4 v. h9 X" K/ O" y
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    & |, i7 ?! _, {& `
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 O; W7 W" A; c' r2 j9 {6 k0 |, Y
  875.           }& C) O3 i  i2 q  u
  876.           DeleteFile("Wsa.zip" );
    7 ^1 b+ Q$ ~# ]+ A0 @
  877.         }* b3 e, _( J0 M* O4 D
  878. / f9 s, D' d4 i  S8 G3 I* ~& u  h  `# u9 I
  879.         if(CheckLocalVersion())
    ! Z2 D$ v2 W* {" n
  880.         {
    5 P/ r% l- G5 Y/ z$ l: W4 p; m+ T/ C
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");/ V4 H$ _+ X: j" a
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    5 n8 O; S' g* u" Y
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    . [1 K  R7 V5 m
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & f# s8 g3 r" a  W
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    2 i" Q5 A# H( F' G) f/ r( V
  886.           dwStartUpSteps=99;+ T& s6 s) P7 e) `9 V
  887.         }
    # R6 [% @. R! f0 D5 i/ H# ^4 b
  888.         else
      Z5 J' W9 b- Y
  889.         {8 I2 O9 p! _" Z  c
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    9 J! g1 D; {' M1 p' {' i( b  S. m
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % u( {. i, {+ B  H1 Y0 S
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    . h; z5 H' v; p' _. i! G

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-11-30 04:39

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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