找回密碼
 立即注册

CSUpdate.exe源代码

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

& n- v3 `# f% b' ?$ v
  1. / RevApp.cpp : Defines the class behaviors for the application.  S: T  g% N! A6 ^, U
  2. //' {1 @5 M; v' ~# O
  3. - u  N# T( i5 [9 s# B+ m
  4. #include "stdafx.h"
    3 d  d0 I& W9 k5 N4 O9 e

  5. $ w' Q# ^) ?' m: ?9 [! v
  6. //#define UNICODE5 t! C3 Y7 i' k! ?; a
  7. //#include <gdiplus.h>
    / [' f/ V6 E) A+ }) b
  8. //using namespace Gdiplus;
    * t/ Z3 j$ y7 P2 U. E
  9. , q0 T9 k( r# a
  10. #include "RevApp.h"
    6 u# Y+ i& a7 I( F  w
  11. #include "RevAppDlg.h"  [" M& `% G- F$ ]
  12. 9 v4 U2 {  |0 H2 Z
  13. #pragma warning(disable:4786)- d$ Y+ ^4 t+ _
  14. #include <map>1 Q% ]- t0 Z% R+ n* j. _
  15. #include <list>
    : w) J0 K+ J: M! L2 |
  16. #include <direct.h>
    % j  o+ K# x7 \0 N2 j' G$ i

  17.   b4 k3 D7 S' g. I; Q% Y9 j  Y
  18. #ifdef _DEBUG" c9 B( b/ `, n1 Y' S1 p
  19. #define new DEBUG_NEW
    5 p7 Q. s8 Q6 k; B! K: Q, S
  20. #undef THIS_FILE
    6 E  H: e0 {, {1 E. I
  21. static char THIS_FILE[] = __FILE__;
    : e3 f5 T5 ~- l5 q) \) \( N+ _
  22. #endif: Y& D( d" |( @' X" a3 @
  23. #include "SkinResDef.h"6 q' F, B6 G: r. f- H1 k
  24. #include "ChangeBG.h"
    6 U( q) C6 a: p7 O. p
  25. #include "AFXINET.H"; A. d7 j: T7 _9 A
  26. : ~, M; W2 b1 I% D4 R& G. U
  27. #define TRADITIONAL_CHINESE 0
      L: F$ `" G/ C- z7 w! j& M$ t/ @
  28. #define SIMPLIFY_CHINESE 1
    / `/ s- V# y- E+ Q9 f9 W  y# Q
  29. #define ENGLISH 2* p# G2 _3 m" ~  j9 i  [( z
  30. int m_iLanguage = ENGLISH;) `( X/ L0 w% E' M  J. @& D  o2 g
  31. /////////////////////////////////////////////////////////////////////////////1 w  D) A) M9 r+ ?! y# [/ X
  32. // CRevAppApp0 X8 h8 a2 V, |: |
  33. 8 g: H5 H' O' Z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)1 F& o; d& b$ _+ X
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / a% b1 z7 k. g* T6 \% P; A
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    3 W6 L0 o1 ^. g- E7 @
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    9 j% q6 j7 Y% Z
  38.         //}}AFX_MSG
    / @3 V% h/ [1 k7 t
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp): b9 e0 \+ Y1 D2 H' T
  40. END_MESSAGE_MAP()
    ) U5 [; k; Q" t) \- a+ Q9 i
  41. 5 _% C0 S! G9 ~7 C6 C2 E
  42. /////////////////////////////////////////////////////////////////////////////( h& w& ]0 m( Q4 _
  43. // CRevAppApp construction
    $ g$ h# E# G, B: n0 d

  44. + ^, }  J) n+ w( A  v; ?
  45. CRevAppApp::CRevAppApp(): c( h4 D2 B, }' ~0 V
  46. {. N7 J; x0 _1 [( I  `+ U
  47.         // TODO: add construction code here,
    8 A0 E2 n+ F2 z' N) c# X
  48.         // Place all significant initialization in InitInstance5 w+ t. y5 [9 ~1 @7 h
  49.   bDisplayIsBig5=FALSE;
    5 B! S% z' l/ O: f* [5 B
  50.   bRestartUpdater=FALSE;6 B5 m" V5 i1 o+ _2 `, p
  51.   bFinishUpdated=FALSE;
    ) W. q' j* T& [' z9 Q" u' J8 v
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    / }6 Z- A" y8 A& l2 ^
  53.   InitChangeDataBig52GBKS();- b" G; ]) W/ P+ @* y' G) G
  54.   InitChangeDataGBKS2Big5();
    $ L" t% c! z) f
  55.         //6 W* ?  M( o! M1 M; V
  56.         bClickRunExe = FALSE;4 f+ B; U5 ^- V9 f2 T0 C) g
  57.         //
    0 X! C" `1 i8 I& i
  58. }
    1 }/ |  _: B' k1 N/ N

  59. + [) `: ]" w& ~- v+ l, P* A! j
  60. CRevAppApp::~CRevAppApp()
    8 G3 Y( Z, X% x& d; J
  61. {
    % c# b% |7 R7 L
  62.         // TODO: add construction code here,
    # G  ]5 u. O1 i2 T" R/ c4 L7 O; q
  63.         // Place all significant initialization in InitInstance. i) e) s1 {3 _. ]1 ^3 t
  64.   EndChangeData();' d$ x& K1 F8 q5 P7 Q3 t& L
  65. }6 z+ h1 z1 S: H: z) s: g- }

  66. 6 |: Z3 x+ @* o- a: m
  67. /////////////////////////////////////////////////////////////////////////////
    % J. t/ L2 [8 a$ z. Y, z
  68. // The one and only CRevAppApp object
    ! }( B# g  s# e( f7 q1 t* l

  69. 3 P" d. q8 b, M1 J% a
  70. CRevAppApp theApp;
    2 }& V4 D; n0 c7 M( J* Z: y7 x
  71. 3 `; B' s$ R0 _1 H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)2 y/ C) i+ L6 k
  73. {. E1 z- M6 d' L% p
  74.   int iEOF=0;
    2 A( g# ?0 d' m& A( {* X
  75.   char szTempName[MAX_PATH];# @  u6 f4 N, ?$ h1 r& [& }
  76.   *szFileName=0;
    ( Q- b+ [( i" a& `
  77.   iEOF=fscanf(fp,"%s",szTempName);. c* G3 k$ M; o! @1 i$ o  ]
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # r( x# E) v% u: D, S4 R% W
  79.   {
    / y! f5 R; T4 X
  80.     strcpy(szFileName,&szTempName[1]);
    5 I# W3 _- z' |& s" A& p& s+ J
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)5 j4 v' \7 ^( {! a
  82.     {- x. ~2 A7 z2 h) a( s
  83.       iEOF=fscanf(fp,"%s",szTempName);% }, ~# g& g! M  d  \( Z& h$ k
  84.       strcat(szFileName," ");
    7 Q& B, q; h8 E( H  @* C7 v5 w
  85.       strcat(szFileName,szTempName);
    1 H/ _: y5 w4 h+ q% k3 m9 |: W& \
  86.     }
    ; c. X1 e, L0 B( J' z
  87.     if(strlen(szFileName)>=1)
    . j0 U, V: k# V# c" P
  88.     {( Y7 @1 U  H1 T4 W9 W6 C! r
  89.       szFileName[strlen(szFileName)-1]=0;
    7 B' r% Y6 E5 H1 q! E4 p3 Q& w* z
  90.     }
    9 D: y& W9 K# U% u$ y
  91.   }0 H; m& ?5 F& {4 {2 q
  92.   return szFileName;
    ; e7 Y: S, T5 S' i6 P4 i( b
  93. }# R0 L  R0 r* C

  94. 4 Q6 G3 V0 E4 X6 i! s
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)$ V8 ^1 N$ t) l, p# t$ s
  96. {
    ' v* [( Q0 c3 N$ y0 P, F7 ~
  97.   FILE *fp;; K' x4 I6 n8 h) y+ ]% Z: D& b! Y
  98.   char *key=NULL;# a5 f6 k$ O3 y) b; x% d4 H- z( T
  99.   char version[MAX_PATH];
    8 ~* V# K5 y9 O' ]
  100.   LPUPDATEFILE file,olds;
    ) `9 b( n) ~1 T& r5 k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;% a2 I7 P7 ^+ ~# R

  102. - _7 d; ]' X+ N6 B5 ]# r
  103.   UpdateList.clear();
    ' N0 A, a+ F2 l; R3 m7 n
  104.   UpdateFile.clear();3 a* l( Z7 [/ H; T" I
  105.   if(GetFileAttributes(filename)==-1) return false;
    3 A! s- o. y. V* d
  106.   if(!(fp=fopen(filename,"r"))) return false;5 [% ]& \: H. s  C, {  Z% R
  107.   fscanf(fp,"%s",version);# F  q# q7 ?0 Q, Q& ^
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }1 G# k2 E3 @5 d1 l* b$ k
  109.   while(fscanf(fp,"%s",version)!=EOF)( A* C) o9 }% w- S
  110.   {
    5 y& t: n" b% l9 X
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  F) j2 h+ A$ @( A
  112.     fscanf(fp,"%s",file->path);" \* [; ~3 y- D- N
  113.     ReadFileNames(fp,file->file);
    7 O, E( g  y, a# d$ C& O* f
  114.     strcpy(file->full,".");( N. i) l/ Y  `. F
  115.     strcat(file->full,file->path);
    : |$ y1 X: h0 }3 W- s) p4 v& C
  116.     strcat(file->full,file->file);
    2 `; j9 R' ?) j* X" p8 M
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    * }% q: _" K4 L6 f
  118.     {/ Q: H, k+ p' B7 N
  119.       file->vers=(float)atof(version);
    ; a: ]* S* i4 a) _
  120.       UpdateList.push_back(file->full);
    ( T4 y& o8 B) P# R4 y: z
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));( _* o' S7 i' n& V6 M! p3 v
  122.     }
    0 v; a& I( s" z) c
  123.     else% P  W2 G0 k7 q' r/ c
  124.     {
    ( i7 M" E: ^! O+ O# f
  125.       olds=(*p).second;$ `; R8 M2 G& W5 `4 Z6 X
  126.       if(olds->vers<(float)atof(version)). j# L$ e8 Z! S3 G8 g) t6 Q1 ?6 G
  127.       {
    ' P& O4 d2 G$ N- G* E+ ]" k8 Q* Y: b
  128.         olds->vers=(float)atof(version);
    : e$ J8 S9 r' K1 [1 y# x
  129.       }$ E  Z$ {) o1 w
  130.       free(file);
    ' q9 F; Y" ]1 t9 O" \& c% U
  131.     }
      Z7 Z$ R9 f  @" W4 G, \* Y9 q
  132.   }
    % i9 }2 N- s# T2 \: H
  133.   fclose(fp);
    2 g# k* T* y7 D) I& b
  134.   return true;
    . p, `; T# Q6 o& V! X( G/ w
  135. }
      T) n/ m6 u. m- G0 `

  136. . @- _; J# m; w
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)1 k9 X$ s$ n7 j! }. P, w7 y3 i
  138. {* ?# d) s) }; l, C+ n  m% z2 F
  139.   TCHAR  szFull[MAX_PATH];
    ' x$ t" Z: c8 W( B) u7 Q" u7 g
  140.   TCHAR *token,*inter;
    * K. R. _5 g& P! I3 p3 ]
  141.   *szPath=0;
    . G; r. Y+ Y" z5 e
  142.   strcpy(szFull,szFullPath);
    ! o- @( C& g% [" U1 N8 D
  143.   token=strtok(szFull,"\\/");' d- G8 G5 N0 j* x9 r; m
  144.   inter=token;' m9 D& f) M2 K6 q
  145.   while(token=strtok(NULL,"\\/"))- o/ C" i' J5 q0 W# }0 J! [
  146.   {
    - Q+ b6 a# g# _' Q$ h* \
  147.     strcat(szPath,inter);; D: @) p5 `6 t/ k8 s" I. @/ k( \
  148.     strcat(szPath,"\");: G/ r% b6 `6 z" B
  149.     inter=token;
    1 `3 f: X* C  T1 [! f
  150.   }/ S, h! [) v7 o1 m3 W8 E0 O4 t
  151.   return strlen(szPath);  I: I( B) R' N* \' q8 M4 P
  152. }) i1 A- W6 U2 s
  153. 6 `$ I4 C  P1 X) L$ i$ Z% c+ t
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' ^' k% C9 k2 A& N$ \0 U
  155. {: Q) L) L$ J! Q" b! b+ z8 c, f
  156.   DWORD attrib=GetFileAttributes(Target);
    $ \7 e5 e7 t( {- E; i! x
  157.   if(attrib!=-1)
    6 |9 Q% ?3 r& e! c5 Z+ u
  158.   {
    4 }3 M+ `# c# W( k, @* Q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))* I: W- v, {9 z5 I+ M
  160.     {
    - a4 D* D( F: ]& p' o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 z0 v/ B% I! I, C
  162.       SetFileAttributes(Target,attrib);; z6 H" |# c* W1 F
  163.     }6 S% N4 j8 k" }, Y" Q; t
  164.   }: q" `  E  N9 v$ _  v+ U2 R  x
  165.   CopyFile(Source,Target,Erase);
    ; p2 W$ e/ S0 {) v' }: @
  166. }
    ; @& N! b' X6 B! f2 T1 p

  167. * G9 R1 C! q1 j* t  l8 d+ p& M. [
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)4 S( v1 _# S  \- T& i9 a1 V+ t! }: D' ^
  169. {
    % ]: Y9 \; m1 t8 K- h! V/ L" j; `# _
  170.      FILE *fp;
    0 e3 K; a1 y' C* ?
  171.      char  szBuffer[8192];
    ! z7 m; n; j  |& Z( A7 `, g
  172.   va_list  argptr;; v# }& w  y' A2 k, L0 R
  173. 5 H5 V2 t1 J4 {& b" {
  174.         va_start(argptr,message);" _, v* v3 Q0 v, F0 B- b
  175.         vsprintf(szBuffer,message,argptr);5 c$ R' q" O  F! e% |) u" }! W! N
  176.         va_end(argptr);
    $ o6 c8 u8 l! s; w
  177.   fp=fopen(FileName,"a");
    1 d! S4 V! M. \1 K% o5 v* C8 v
  178.   if(fp)8 l- X! e* C; s/ a- u
  179.   {
    ) ~( d$ g6 w& w
  180.     fprintf(fp,szBuffer);2 V" [8 Y* y7 U
  181.     fclose(fp);
    ( b0 I1 k+ M6 k; w/ ^2 h) c- n  |
  182.           _flushall();
    . B/ m# N) z# x2 S: \. b
  183.   }
    3 k3 w" l2 z" a6 w' a
  184. }
    # |1 i  Z" t( c. s6 Q3 b) r

  185. 1 [9 |0 {- J( i. \: W6 l8 \
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    3 W6 ]3 W/ ^' G2 `; W9 R
  187. {
    - I+ I8 z1 @3 [6 _
  188.      FILE *fp;
    8 [$ j* q) x" s% P. ^
  189.     DWORD  attrib;
    3 l' o3 s7 u, q) K
  190.   attrib=GetFileAttributes(FileName);
    & z8 ?( w1 r1 H8 g$ d- y7 X0 I9 [
  191.   if(attrib!=-1)
    9 i: D+ U1 Z/ f" w
  192.   {
    % W6 e, a! S' u; J. _( ~+ d& ~4 G
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);4 n6 X- d3 a8 @, y$ {9 L# r
  194.     if(!SetFileAttributes(FileName,attrib))
    - h/ W+ ^: [- z4 Z
  195.     {
    7 e# i& k  @+ @" ~% R' Q& ?/ }
  196.       return FALSE;
    ) m6 I# n; @0 y+ ^, E
  197.     }  v9 D# E' `& I1 B
  198.   }) T# S+ z7 e# b+ F4 o
  199.   fp=fopen(FileName,"wb");
    : C( K* \/ h6 `: s; ]9 L$ |
  200.   if(fp)
    ' M2 _: N$ l  ]0 I8 L  ?
  201.   {
    & K. [6 G1 l! D) {' V) g' T
  202.     fclose(fp);" u: C! M+ d5 u) t2 c
  203.   }7 d& `/ R+ t0 p, x! h3 G- R- u6 h
  204.   return TRUE;
    ) J, r2 L: W7 V, k
  205. }3 t  H+ @& H( m) b; [
  206. . T" e7 _4 F% x+ e5 j. D$ ]+ Q/ n5 ^
  207. BOOL CRevAppApp::UpdateLocalVersion(void)+ ?- h$ x: Q& U1 f1 B
  208. {
    $ Y& C* f4 l) h
  209.   char filename[MAX_PATH];7 j% R! Y5 X+ K4 x, Y3 G: C4 p6 d
  210.   LPUPDATEFILE file,olds;
    7 q: v6 W; b9 c+ @7 v. j0 d
  211.   std::map<int,CString>::iterator i;/ h; x8 `9 d+ Y: k/ {
  212.   std::map<CString,LPUPDATEFILE>::iterator p;9 _# y+ D) p! F2 i  |" W
  213.   std::list<CString>::iterator l;5 \4 y4 x6 C1 r6 Q' W( |
  214. ) c! s' q$ q& Y* O9 r" v
  215.   if(bFirstUpdate)
    8 h& F! m& K& i/ S5 c, l
  216.   {
    7 {' V! I9 x5 f/ {7 B4 p
  217.     dwCurrFile=0;
    3 P8 u0 j, l/ y, _8 g5 t: q* k
  218.     bFirstUpdate=FALSE;' {4 c/ v8 ?# `) L  e" t& K9 _
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())7 K& E6 M2 u3 [8 t
  220.     {
    / j1 Q( t& x4 W  `" f" b
  221.       dwTotalFiles=UpdateLocal.size();. J, A, B" V' y- L8 E
  222.       dwDownLoaded=0;/ y- F2 |6 w0 \( i# H5 I0 J
  223.       bSilentStep=FALSE;
    - r  X% I; s: \" g5 y& W
  224.       bCompressed=TRUE;
    $ G; N+ O) o! R
  225.       strExtLocal.Empty();; r+ `+ u& D  \7 P9 I
  226.       strFullName=(*i).second;- G! X0 f0 |8 N1 Y8 G$ u
  227.       dwProgramState=AP_CONNECT;
    3 z7 P2 d6 O7 x  N
  228.       return TRUE;& }9 T% Q  z5 |& M1 r
  229.     }
    3 N6 h7 q$ {+ [4 K
  230.   }
    1 Z, S. _8 L" B# b- p! |3 N. K
  231.   else if(bRestartUpdater==FALSE)6 f4 X8 a! Q* c, c( f" o( [: c6 e: \+ V
  232.   {
    ' Q& A7 p( u& C* S( r$ e- ~: C
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    , \9 J# b+ r" E8 G4 }# {, }
  234.     {0 V% P2 r8 {+ Z6 T8 e
  235.       file=(*p).second;2 E# S& W6 @. f0 E
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    # h' e% [4 d) F$ H: T
  237.       {
    . f0 p: ^0 ?- ^- O, ]( j# W9 Y
  238.         olds=(*p).second;1 N- {  i6 H/ r& P  J
  239.         olds->vers=file->vers;
    ; H( L. c4 O( g2 r& d0 P4 a* U8 a
  240.       }2 X& \2 l& X9 {9 C3 `
  241.       else# ?, m4 J" k6 S: q$ l
  242.       {: |6 h9 C3 _7 z/ [8 {
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 n6 [- Q1 S3 F( t; X  g# Y7 L
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    1 c& i( F! w% X8 J
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    $ K  t1 G5 }/ k  N, ]
  246.       }) a' X: D  ~3 `. M- w% g
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    9 {; r6 F( W. f* _! u
  248.       sprintf(filename,"(%s)",file->file);" N, Y* `$ m! o) G
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ {1 z; j) v; `- L; M2 W# X
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ) s3 N1 K; \8 h$ Z" U9 j
  251.     }
    5 Z$ n# G/ [0 v/ p4 }; `6 D6 h
  252.     dwCurrFile++;* T$ c6 m; ]# [$ J
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # M! |- D6 i) p4 |' P
  254.     {0 @1 m7 S4 N& Y# }9 O( [. e
  255.       bSilentStep=FALSE;
    1 I6 I% @+ \8 a7 c9 I1 w5 {
  256.       bCompressed=TRUE;; ~2 \- G6 w6 M0 n
  257.       strExtLocal.Empty();* N+ ]8 d! T( z, w
  258.       strFullName=(*i).second;
    - ?5 Z: {% f: ]7 e1 ~: |
  259.       dwProgramState=AP_CONNECT;6 p- t: @4 p8 G
  260.       return TRUE;
    & c: W$ t# L4 N- W( s7 T: \- w& ^
  261.     }
    * S9 Z; N& O. j# R+ F- p$ W
  262.     if(!bRestartUpdater)
    2 j2 n" N* h5 G1 @9 `
  263.     {
    & T+ ?; J* y( R; y, c3 i- n
  264.       int iCurrSize,iFileSize;9 X1 p* ~4 D; Q$ C; Q
  265.       iCurrSize=0;" c) r3 @3 e( o+ N; x4 A
  266.       iFileSize=UpdateList2.size();
    0 Z- i1 L' n( Y, `
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");  Q6 w! O3 ~' z! {  h
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");' H. W6 C3 O3 B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    3 c! a/ k* V" N" V$ D
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / d! C- S2 T. w! a' F
  271.       Fclearf(".\\update.dat");6 c' C( d, N' K9 |
  272.       Fprintf(".\\update.dat","Bloodyf\n");$ H2 [) Y# O$ Z* Q6 j* c; p
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ `) W1 Y, ~* j- g9 T# {3 C  f
  274.       {
    . w+ ~/ F& _) P' c/ k
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    9 ?1 i& i5 U3 V, W% c2 P
  276.         {
    1 A/ K! S0 x" I7 c" S, ]
  277.           file=(*p).second;
    9 @0 z+ u) f/ d* H5 v3 C# j
  278.           sprintf(filename,"(%s)",file->file);
    6 O: M: X9 k; b" S
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 R9 L5 ^# p1 J+ @3 i
  280.           iCurrSize++;
    8 c) Q  l5 k( [$ g/ W$ i
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / V& R1 d4 p" r/ E
  282.         }
    0 Z5 X, P( I/ |7 p  V
  283.       }
    . n( s& k' i' Q% m: K4 O# C
  284.       unlink(".\\update.txt");& X& @. A0 q8 D; p
  285.       unlink(".\\update.tmp");. x& @3 j2 b/ L% o* _$ E" m. k
  286.       Fclearf(".\\checkversion.dat");
    9 V) b' l& x/ {/ l8 y  I
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);4 O( |! R) i$ V( k. y
  288.       if(UpdateLocal.size())# {: K; \/ O' K; h' _
  289.       {9 l8 F; P  L, }" W
  290.         UpdateLocal.clear();
    # O5 Y8 F# z# B% [& i2 P) v  U
  291.       }8 ~6 e; Y' r3 p" E
  292.       if(UpdateFile3.size())
    $ p( u' H3 y* e% t0 v4 u$ X
  293.       {
    8 c+ u3 `# s6 F% x# U) W& S) Z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 a  E9 o0 X$ a+ m6 D
  295.         {/ h7 j" d) Z5 g9 u
  296.           file=(*p).second;3 Z( Y% _) S- s
  297.           free(file);
    ! ]) ]; @, S" g( E  l" ?$ P
  298.         }: k  T0 U9 t- h8 v
  299.         UpdateFile3.clear();
    , U6 L/ |, e0 b& k) w
  300.         UpdateList3.clear();# n3 W9 u- D5 [9 A! U+ X
  301.       }" e7 Q5 ?) g3 C- S/ T
  302.       if(UpdateFile2.size())
    ' B, {1 Z9 f( ^% r
  303.       {
    * B+ O4 }9 N9 }; e% G
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / R  B" i/ a+ b8 j
  305.         {8 e$ t' B; X9 b9 \' k$ i
  306.           file=(*p).second;
    & W4 R& t2 _3 `& d
  307.           free(file);5 y3 j$ u& F; e
  308.         }
    5 j# \% ]  z" ~0 Y9 N; |, m$ I
  309.         UpdateFile2.clear();
    0 t4 D' n/ {3 r9 A! {) I$ f, N% c
  310.         UpdateList2.clear();) L: K, K2 z9 t; s5 c
  311.       }0 ?/ a& J% ]. b: u7 k/ J
  312.       if(UpdateFile1.size())/ A; Z! f4 o: x5 M) S
  313.       {/ j5 ~3 P  \) y- f. u  c* l( A
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    9 w) m8 S' W- @1 c6 [
  315.         {1 l5 X# l/ z7 I- D2 L4 F1 `& e
  316.           file=(*p).second;
    ' n- L! s& Q+ X6 T: l& E
  317.           free(file);+ w' t& c4 z+ j; R) S; U" \1 x
  318.         }  U. ?/ ]1 }: a  y3 ~
  319.         UpdateFile1.clear();9 k( t! {( D# o
  320.         UpdateList1.clear();  _" y: ]9 ^9 {0 X* |
  321.       }5 C3 ~& y3 C/ `8 s  v3 n; `% w
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    1 V7 l- U* `& \8 A
  323.     }4 Y5 i4 }" F* h! ]0 z& o% T
  324.   }  A% t  ?) k5 M+ T) p5 I  Z
  325.   return FALSE;% ]* Y6 b7 [/ o, h7 p  _5 C
  326. }
    + i+ _0 y* c+ b4 I4 v. y, F

  327. . J  y0 u4 d; u/ N- t
  328. void CRevAppApp::ClearAll(void), J1 u- \9 u  b
  329. {
    7 l! z5 N, w0 I  ]( ]! q1 h* X( _3 R
  330.   LPUPDATEFILE file;0 T: w5 K5 I8 C& u# Z7 k/ {. u4 d
  331.   std::map<CString,LPUPDATEFILE>::iterator p;6 |3 f* I. {1 H9 \" s
  332.   Q9 L  G; N; w
  333.   if(UpdateLocal.size())
    : q5 x" @4 l+ K; v. T1 j+ N7 ~
  334.   {7 I1 _, J0 B4 Q: t, p5 Q4 Q. K
  335.     UpdateLocal.clear();$ w! W8 i; R2 t' U  @
  336.   }7 i* D5 U/ ^) L2 \% c/ C8 ~
  337.   if(UpdateFile3.size())
    ; w+ E/ `& S$ Z# E( u. E# _
  338.   {
    9 Y+ ]1 l- O- b, v0 K4 V; }
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# a; C3 n4 `6 ~* K( V7 x
  340.     {% k& P2 ^4 w0 p7 T
  341.       file=(*p).second;1 A, h% x; r! r; c0 q7 V) \- W  @: G6 V. o
  342.       free(file);
    * e8 U- G) s2 c1 ?
  343.     }
    3 Q5 P+ k9 M$ u7 {/ K9 J
  344.     UpdateFile3.clear();  L3 B+ Q2 K5 M* I/ W% w: J2 Z
  345.     UpdateList3.clear();8 J9 b) b! g( b: [% Q: x) ~: f! g( T
  346.   }
    ! A% r8 ~3 s1 A/ \' l. q" u3 l+ V
  347.   if(UpdateFile2.size())0 A: k* K& i9 Y! V; y0 A/ d
  348.   {" K! I+ ~6 H# {/ @7 T$ B0 _  W+ H
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  S5 [+ M. J! Z0 I" J3 |% d
  350.     {0 j, H* U/ P* M7 Z. w; U
  351.       file=(*p).second;
    " p2 D. I0 @7 u3 R
  352.       free(file);
    # z- v# K! \3 Z* i; E
  353.     }
    . u7 V. i/ z3 s
  354.     UpdateFile2.clear();
    % F% S4 S+ \5 }4 @
  355.     UpdateList2.clear();
    * e0 s* U$ ~5 u, l- @, H5 w* g& F+ N
  356.   }
    5 j0 i' t& M1 F1 e/ j
  357.   if(UpdateFile1.size())
    % r# g# Y0 o3 Z
  358.   {
      l& N6 \- V2 N4 ^: ?3 ?" \
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' c* Y/ l7 r  X4 U1 B
  360.     {
    , U. k3 W+ U6 B2 G& m! |; z
  361.       file=(*p).second;( l3 Q% o$ E% r! [+ n
  362.       free(file);/ T! [3 |: N( w
  363.     }7 L# z, k2 {  p% R" Z5 G
  364.     UpdateFile1.clear();  y  T7 V+ z) m9 b+ L
  365.     UpdateList1.clear();
    5 ~" P" U  A& C
  366.   }
    % ?' h+ h/ j& m: }
  367. }  ' G8 k/ D9 y( j( S
  368.   9 W$ {1 \- J1 N, Q3 e
  369. BOOL CRevAppApp::CheckLocalVersion(void)* ~0 l" i8 G! |5 Y/ ^
  370. {
    - n! n' T: M+ _1 d& x+ z
  371.   int c;
    + d* p* o0 E% X  F7 K
  372.   LPUPDATEFILE file1,file2;/ Q3 u! k7 ^% n/ J
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    2 g6 G1 X5 G" W& o3 A+ L, k
  374.   std::list<CString>::iterator l;
    ! V* y5 a$ C% x. w
  375. ) S3 p% _% j2 }, [* H2 ^9 P: r
  376.   UpdateLocal.clear();  Q- D) N' [% P1 \
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    $ [' ^$ j2 Y9 K* C3 k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    - a! _3 r& m* f9 Y$ [0 _! p
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);% N0 \# k+ f3 [, Z/ I
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 i  z% @) K+ n6 }
  381.   if(UpdateFile3.size())
    3 u4 G* {7 K/ A) Z! @7 s3 Z# B
  382.   {: Q( n: t- I  Q1 I( A* f
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    & T3 r5 \+ b3 x* \- ?
  384.     {* Q! u# v$ k. ~* G6 W( A$ a
  385.       file2=(LPUPDATEFILE)(*i).second;2 z: E$ W& F; q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 h# f/ t5 @, a
  387.       {. v8 g/ l$ O" x
  388.         file1=(LPUPDATEFILE)(*p).second;1 r( U5 F- ^  q6 s4 N
  389.         file1->vers=file2->vers;
    ' Y8 B" U& O7 O' q
  390.       }
    ' h2 H# d1 G4 `( s# g
  391.       else, U. x4 U! G1 ?% ?9 j* [' Z' @
  392.       {. l' C+ s. n+ b
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; W& O& |; ^1 h1 }3 e; M
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    $ u% v+ ~2 J8 i( b& `" f7 _, N
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));) I# v, E! W  y( ~2 H
  396.       }
    9 K( @4 r% ?( x' d- b% v
  397.     }0 y9 [, d" b! n
  398.   }
    ! e9 ^) R! B" L
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % S7 C- c; W( F7 q! A- {
  400.   {5 ~) ]" Q! q1 w+ _. F( M
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    $ S" N/ g0 O  ]6 y, |1 h6 y! ~
  402.     {: y' ?' e% m3 P# v8 \# B  v: H
  403.       file2=(LPUPDATEFILE)(*i).second;
      D# Z6 L2 Z1 Y. [1 ^
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 u  y, h6 J2 I3 H: I3 }4 B+ B
  405.       {2 e& B( C- ?& r  O6 Y  t
  406.         file1=(LPUPDATEFILE)(*p).second;
    + m1 p/ t+ _  `* r3 F
  407.         if(file1->vers!=file2->vers)3 k6 Z5 D4 r8 z8 {2 o) _; A( e% e
  408.         {3 g9 O7 M" Y' d) g" B4 L. D) Q& V
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 P8 U* Z! ]7 N; B3 G! J  K0 T& s& |
  410.           c++;
    " d: R5 s& X; A: [1 P
  411.         }0 N! c' P) Z& s
  412.       }
    - O8 r5 {0 v; ~4 D! I# D% X  O3 W- Q
  413.       else/ a0 p# \1 O) |, @4 n8 E# m. a6 R
  414.       {
    4 O* ]9 k3 {* r3 `( g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" |) ?8 {, ^, T0 d- Q9 r, ]
  416.         c++;
    1 `4 }# v7 Q$ Q* @  e$ r
  417.       }2 @/ O9 R2 }/ T! [1 J
  418.     }5 @8 f% a6 I8 Y0 e0 S& F- u
  419.   }
    9 m% p: ~9 o$ P" x
  420.   unlink(".\\DownLoad\\update.txt");
    , L' g/ C+ l$ Z; B" }$ z0 k. C
  421.   if(UpdateLocal.size()) return TRUE;
    ! d# Q0 `( ]( ]2 S
  422.   else                   return FALSE;5 p2 B2 M2 ]6 W7 r3 U$ P
  423. }  l0 K: ]" o: k; O8 U3 B# G# o+ W8 Q

  424. : t; u0 @/ C2 z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    3 F8 ]3 \; G7 a6 u1 k. t# \. n0 @
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    + v: T" B) O9 x( B1 d4 Y7 A
  427. % O( ?6 w" |4 i, K+ k# y

  428. ; F  v- |" C8 t/ f

  429. + J4 A8 `. A: Y: P5 R+ F1 D" S
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    % W9 Y" i  G: B. V2 E$ e4 x6 L+ `/ W3 ^
  431. {9 Y& _  ~% w  {
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;/ z- U$ T- S, R4 f/ e0 m
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 N% J/ V8 E1 }1 ~: N8 V& v
  434.   {
    # h& @' y8 h" @; _4 {
  435.     char szLanguage[50];
    / l" X. e1 v/ ~: X5 w$ a
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");# X8 l) ~* [" T4 y. X' ~
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! E! o8 B! Z% ?- t" \
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 j7 {8 L; g" T2 [2 t5 e
  439.     else                                   m_iLanguage=ENGLISH;
    5 N( e7 ?! K2 u# k3 R4 G# d
  440.     char szRegister[100];
    ; y: p- v- z5 b) J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 W; t" [- ?1 s& I; A2 w; o6 k! |/ y
  442.     strRegsName=szRegister;
    : F4 C' H0 f9 J& n$ }( T4 `
  443.     char szPatchURL[100];
    2 [+ r2 O8 k* `3 q% q+ p+ V/ h
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 K1 y  [+ z) ]" C8 ?
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) w" }0 ]9 N: D( m4 P3 ]
  446.   }
    2 I1 E: L8 S& Q. [# N8 \, f
  447.   else$ b4 F8 X1 [# f" O
  448.   {5 L6 o* m0 C0 U# G' e- z/ f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* g% a1 x) p" |2 d0 O
  450.     strRegsName=DEFAULT_REG_URL;
    & j" e9 t7 b* }3 n9 W! l) q8 W& x
  451.   }8 N6 Z) M) Z  z6 S' B9 n( M( S- j+ c
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * x4 y% n6 N) M; i
  453.   {
    ; |4 B9 |8 p2 N2 X+ y  @
  454.     char szIP[50];
    * H: S9 n  ?0 p- A! j7 @, \
  455.     char szDIR[300];9 A" j3 c2 d+ f4 u8 l) |* _3 S
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    8 K( v$ \/ E2 y8 U- r3 }. O
  457.     {
    $ [/ a' }& V3 M6 g3 K5 ], \
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    3 F2 T0 O, A$ H% H
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");4 ?6 O# D* w; h' u+ n- l# b
  460.       strHostName=szIP;9 B3 }, O8 u7 \* U9 l( Q; r
  461.       strHostPath.Format("/%s",szDIR);# \& ^5 u' x  l8 h
  462.     }5 X* }  F  A! Z4 t# _
  463.     else
    1 E# \" G, E8 Z+ T1 G/ G3 }/ b
  464.     {9 t$ e" q- C) V" N, z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; U# \9 f$ U$ m6 l4 ^2 S# Y# @
  466.       {
    # N. y4 n1 b# ~( O7 S
  467.         char szLanguage[50];8 ~; S2 K! o- {. D% i4 c
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 h8 B6 w: @1 b" Z  }/ b! d, e. q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# l, I) [4 U. @6 m7 L
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 ?7 o1 c, ^+ D1 u
  471.         else                                   m_iLanguage=ENGLISH;, Q" f& H' F$ Q6 I7 \
  472.         char szRegister[100];
    ! S6 n1 w1 f1 ?
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % I0 U5 @, Q2 D! \7 k
  474.         strRegsName=szRegister;
    1 ?- \& |, V4 ~0 W: E) G2 f
  475.         char szPatchURL[100];0 C  Q9 ]- i9 v; Q! U7 ?9 j- o
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 O( r5 a$ A* u/ ]7 @
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# z0 W1 P1 e  ]8 o7 h
  478.       }/ q0 @; n# S+ ^  _5 K) L, F
  479.       else
    + s- Y) B" @. ^0 D' v: y) o! R
  480.       {
    ' {* ~. F: ~5 V1 j
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 P9 N) d9 U) A2 d6 K, ^  {; u
  482.         strRegsName=DEFAULT_REG_URL;# j7 ^; f9 h4 [1 V2 M+ S
  483.       }5 R2 K: e; M6 x4 F9 ]
  484.     }
    ' F" O4 Q" m; u. g0 N
  485.   }
    / F2 i' ~0 ^% }  M! z2 `* E4 f0 p
  486.   return true;
    " w: ^1 X: W( R8 W
  487. }
    4 ?4 j6 N' P# R
  488. 1 X6 x3 l# M0 N0 x* h
  489. #include ".\ZLib\unzip.h"
    * O' s) z* T* C0 I, }) M. u2 F
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);3 H( A3 k- t4 b- q, m6 h
  491. /////////////////////////////////////////////////////////////////////////////. t1 L: w& Z8 Q( z) ~
  492. // CRevAppApp initialization
    $ ]- T2 \# F- j  u3 s8 ]4 t

  493. # W; ]0 ^* s- e- s
  494. BOOL CRevAppApp::InitInstance()
    3 b# j9 \4 s% I" y% V
  495. {
    8 u1 j) R9 R' U, Y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];' }: s$ ^) U1 K0 E4 u
  497. 1 ?% K0 d: x( P* T" @1 v
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' E; r6 ~. D" Q  J& z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    1 m8 S* `% d9 s- c5 q# d
  500.   {
    & m7 S6 Q! G+ a6 b1 C! y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ! d! P) q" Z1 P$ J0 I- |0 z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 T2 N: N4 i. E; M; d9 P
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))* ]* u; g1 y, `) I
  504.     {
    ! S: N4 W7 L1 e7 l. o; b% A( B2 p2 T
  505.       strcpy(szPath,szPathTarget);0 z! i0 a2 q/ A
  506.       SetCurrentDirectory(szPath);
    4 B; i4 I& h2 K0 G; z- G) a9 R. A8 g
  507.     }
    + C+ t( Z/ G, N8 a6 ^
  508.   }
    5 _1 e& O% P9 p' n) q; ?
  509. #ifdef _DEBUG
    * v  \& U+ b# P" t
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % I% r. P9 {0 i, \
  511. #else
    5 k& R! ]7 m: C# X* }/ \
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( x* G6 m. Y/ q  [6 ^' @
  513. #endif" e0 Y) Z2 U  n7 t) D$ M# t* d
  514.   {5 t, ~4 ?7 }4 d: I3 F. ~7 J
  515.     char tempFileName[MAX_PATH];
    4 F& e9 R4 E2 S
  516.     strcpy(tempFileName,szPathSource);4 F) ?" {% q, ~' H) X0 }2 j3 \3 }1 }
  517.     tempFileName[strlen(szPathSource)-12]=0;3 g% f. g. Q% \! o( v* ]6 `6 @
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    , I# F* R5 e9 g- W6 O! e/ a3 U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);: @3 ]- X* f7 h" Z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ) f3 {! U# Z& e0 K( g8 W
  521.     return TRUE;" t9 d' A1 r" D# r$ {- M
  522.   }
    - O7 y8 A8 H; U' e2 M' \
  523.   // Nuke 0118: Delete run.exe, Z# O) A+ o/ k2 y3 o
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );2 ^3 `( N5 v+ w! `6 h
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    . X4 [" [5 Z0 u( D. r
  526.   if(!ReadCfgFile("Config.ini")); J+ b. I% n4 f( s  @) h% f( ]& X
  527.   {
    ; c: _8 T0 P: n# H8 z7 [8 N% |4 a4 q
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : u) T6 q) c8 K8 T# T/ t
  529.     return TRUE;
    # j/ w5 k; y* L0 L" [0 D% B
  530.   }5 A2 k% c, L. s) r( M" v
  531.   HANDLE mutex;
    0 J2 Y/ Z% W1 q  Z4 B3 W: k3 _
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 ~+ j8 t2 M, |$ U: f
  533.   {
    7 G9 R% U2 R: k2 O7 h  V1 ~  H; _
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)# J, ~! h2 O6 ^; O
  535.     {% ^+ K5 W9 e0 i4 r) Y! h
  536.       CloseHandle(mutex);1 k/ U. N' z1 j$ {' f: e' |
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    2 A6 I' S+ r5 x$ o3 V/ Z; a
  538.       return TRUE;
    " V+ H1 ]) M; T/ u8 a
  539.     }6 E. X0 D3 |' {$ _3 |+ A2 T7 d. ]
  540.   }  5 Z0 R6 P1 q1 Y9 T
  541.   CloseHandle(mutex);
    9 U, K# Q$ A$ P' `% ~" J1 Z1 d7 p
  542. + F: i; D$ X% ?1 o$ R4 j
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);7 V" O* H9 F' N6 j  J4 J% Q

  544.   m, o3 I& T3 `
  545.         AfxEnableControlContainer();" k1 H& A& q# n  ^7 r% l
  546. 4 H* q% V* o, C
  547.   bCanUpdate=FALSE;0 a# s* ]/ F3 X: Z! `# Q
  548.   dwStartUpSteps=1;" [) @7 E# r- f% w' X
  549.   dwProgramState=AP_NOTHING;
    ! g8 e9 p, ^1 ^- z9 j: s
  550. 7 O3 P2 k; z5 G; v$ Q+ s
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ! k( e# [1 F0 X5 X+ V7 f0 E* Y
  552. 1 A7 ~" n' Y% F
  553.         // Standard initialization1 C7 e4 c' e* j, P4 s8 Q
  554.         // If you are not using these features and wish to reduce the size2 Q% O/ W' `" x$ m
  555.         //  of your final executable, you should remove from the following
    2 m: Q6 C  \( G( a
  556.         //  the specific initialization routines you do not need.0 }) [- {5 z+ [
  557. $ g' [1 w# I# A# F9 b
  558. #ifdef _AFXDLL
    & V; P: ^$ w. g  W% V. w$ G
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL% h9 M5 I0 m# S' O. S
  560. #else. Q/ Q7 ~2 G" B0 R( i% U+ ~
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ }$ p! G' d/ T  q& e4 A
  562. #endif
    ( B) ^! L; b8 p: x5 v/ o2 i& ]

  563. ; s1 v' t1 ^1 U, C
  564.   dlg=new CRevAppDlg;
    ! ^6 W; ?7 {1 ^( s7 N  ~
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' R4 }0 s2 M0 i" j* p6 a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    - M) o2 H' x! W$ ]4 s. Q
  567.   m_pMainWnd=dlg;
    5 Y2 k  q4 m% y& q6 M: H

  568. ; z$ E# K8 ^# ~3 X, \5 I8 ]& F  _
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    - _; ^9 F4 h' V( I" y% l

  570. 8 l+ e) H) J" h% @( ^3 `; j. H
  571. //  GdiplusStartupInput gdiplusStartupInput;
    , X- F( X+ i' R8 Z2 g
  572. //  ULONG_PTR gdiplusToken;+ Y9 K* P; H; d& w
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);3 o' w( N! O; x. W
  574. 9 ~, O. u) o  s
  575. //        CRevAppDlg dlg;
    2 H7 D3 m4 Q, n6 S2 {5 \
  576. //        int nResponse = dlg.DoModal();. @9 [1 Z0 m2 \' y5 l& s
  577. //        if (nResponse == IDOK)2 |7 }2 b0 S. @
  578. //        {: x/ Z6 P4 u( E1 @% N+ Q5 n) C9 t
  579. //                // TODO: Place code here to handle when the dialog is0 Q+ d3 j  q% ~+ \1 F
  580. //                //  dismissed with OK
    1 z- x: c" a  [4 ]2 c  C/ t
  581. //        }0 J) m) Z5 f6 T  c( m( T
  582. //        else if (nResponse == IDCANCEL)
    ' L- J. L) K/ i$ e2 T
  583. //        {" P% U, F5 n2 H, a$ j+ P
  584. //                // TODO: Place code here to handle when the dialog is5 a9 O) T$ Q5 N
  585. //                //  dismissed with Cancel( U# x$ y2 W0 K. x' u6 T
  586. //        }
    0 E. R# c& ?( O
  587. ) Y  V( e) a- w& H
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    + y, I9 P: Y! s+ z7 ?6 h
  589.         //  application, rather than start the application's message pump.: u/ l* E' f& _0 K2 |
  590.         return TRUE;
    5 B6 V  @) D' a8 v1 [; `6 }1 c! v
  591. }# r+ y- m3 ^) n% n4 d& a, x3 y
  592. , W- g5 C# B# J( |9 _5 X# h6 }0 K
  593. char *CRevAppApp::strtok3(char *pSource,char *token)8 [) G0 p( Y2 j/ u
  594. {3 U1 w9 Q" a+ v1 M$ ?2 A1 p2 {6 f( K" Q! r
  595.   int i;
    + w0 P! F7 o9 @, P; Z
  596.   char *szRet;
    0 C7 g! Z7 l' r* K; o' i8 n

  597. 2 ~; t) E  q# K
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    9 }6 d1 ?- j0 H
  599.   if(sztoken)
    6 F$ a3 A0 b3 Y5 O9 N
  600.   {
    + [- J7 W6 ?# D0 M1 Z
  601.     szRet=&sztoken[itoken];8 h5 W; d- ]4 m+ ^, t( K4 L1 q; j+ _$ a
  602.     while(sztoken[itoken])5 {& S  p* T8 ?, \
  603.     {
    5 v# M% o4 N! ^( D  K
  604.       for(i=0;i<(int)strlen(token);i++)
    ' S: Z; C; b( |
  605.       {2 I+ _# K3 `* b0 d0 U2 b+ h7 o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    : W3 ~3 d% w  y9 k2 \% {3 k
  607.         {( T! {. I9 t  k
  608.           sztoken[itoken++]=0;4 u: l: S' D3 X# r3 n; U( O
  609.           sztoken[itoken++]=0;
    * r; b0 |$ K; Q
  610.           return szRet;& M8 h8 A& h  `0 ?
  611.         }
    ) D2 w3 _1 f% ]) z7 t
  612.       }
    9 P& n+ k* t: h+ R! y! p/ H
  613.       itoken++;
    2 {) F; B# o8 f! m" f( t
  614.     }* E' y3 w0 q' i8 i) R' d9 _! `: J
  615.   }6 z$ G% F* J9 j7 M2 [
  616.   return NULL;
    7 x8 U) D5 e4 \0 v) y- F, ~
  617. }: u/ `8 n# r( M  K% t6 Y" _
  618. 6 v! t1 X' Q- {: {
  619. void ProcessProc(long Total,long Current)
    + [0 R! \: x6 N, U  @8 N# N+ S
  620. {
    . X  h) {/ R+ C; y/ C5 \, F0 Y! j9 f
  621.         MSG msg;) }% X1 r: z+ U
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);# F+ |$ i% W' Q' j' M+ m; S
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ; O7 Z, a% u! a. w. B- y3 P6 g
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))8 y* C" J) h' k, R2 U: Z
  625.         {6 J* l3 ~5 C! n1 P3 Z9 ^
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - l- Z. x) |! a) M
  627.                 {
      R" W5 Y0 L- C& m) ]4 t; m
  628.                         return;+ h2 y9 {/ c4 @3 r# _3 H1 [
  629.                 }0 x2 n. D% `. o
  630.                 TranslateMessage(&msg);
      |* |, J3 m9 k; e
  631.                 DispatchMessage(&msg);
    : J* @2 b7 d" B9 e+ A
  632.         }        2 A  H8 L: u! s
  633. }
    , J, ?# Y) [( F# [

  634. # o: ~$ ~  y7 L, w9 X& Y% Y
  635. BOOL bFirstChar=TRUE;
    ) f; R: P- e+ x% s' L; A3 x$ A

  636. ( c, m8 l2 P2 C' p& `% J) _
  637. BOOL CRevAppApp::OnIdle(LONG lCount)( O! Q6 V: T! T
  638. {
    8 W: F5 u6 \( Q4 _9 a
  639.         // TODO: Add your specialized code here and/or call the base class
    6 H5 O9 {5 k$ x' |
  640.   switch(dwProgramState)
    * I7 P, i' U4 @+ \
  641.   {' P! D# l. G/ G' p& U) T
  642.   case AP_NOTHING:: H6 g* M: X; T" c4 G5 z1 V
  643.     switch(dwStartUpSteps)$ P8 d8 T+ W0 y3 j3 S# {, p3 w
  644.     {
    ! l! B* c' e/ X/ w. C6 C
  645.     case 1:; Y/ H7 N+ l0 d8 J7 ~7 e' [" g
  646.       {: n! a6 u# ?# T
  647.         int i;
    ( W6 w# B3 Y5 M( n$ }+ b, W8 w
  648.         CDC *pCDC=dlg->GetDC();+ C- ]: j) i* J/ |
  649.         HDC hdcwnd=pCDC->m_hDC;( E$ p0 Z7 ~8 I5 M/ t' a
  650. //        Graphics graphics(hdcwnd);, B4 \. N2 P9 ?  B* S
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    2 E" p4 q9 N. U8 s& C
  652. //        INT iWidth=bitmap.GetWidth();
    - u% Q$ {: |: B& o2 _+ f: U
  653. //        INT iHeight=bitmap.GetHeight();) x3 }# i7 R5 _0 ^4 s* h6 {
  654. //        Color color,colorTemp;7 Y9 u5 G6 f# `$ B2 }
  655. //        for(INT iRow=0;iRow<iHeight;iRow++), h& d1 |1 c9 @! W0 f! V
  656. //        {  Q: B$ I, j# z' w1 \
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    4 H7 u4 y1 I  W6 Z& S* O! i
  658. //          {
    6 E& F, f/ y0 F+ W% A
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    4 X; o" s' _% i1 f* J0 ]! d5 H9 a
  660. //            colorTemp.SetValue(color.MakeARGB(
    2 ~5 i$ P' ?8 q. D: E5 G( v, n
  661. //              (BYTE)(255*iColumn/iWidth),
    ; o9 s6 f* @- v8 f
  662. //              color.GetRed(),
    : J( [6 \" |8 `, Y# e
  663. //              color.GetGreen(),
    2 z: t0 u" X2 j- L
  664. //              color.GetBlue()));
    2 |# m. g' h3 n
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);/ P0 A7 m; ]) \/ ^
  666. //          }
    # v5 f) d. |( y' w1 _  B
  667. //        }8 `+ b# C9 v8 C3 L: G
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    5 W3 }6 ~  r& l
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 u# H' m+ y' }$ w
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");- ^  x2 k. e6 M" ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( H% C3 Z: i8 g, B1 l6 ]
  672.         for(i=0;i<240;i+=8)
    , S2 C6 |7 ?4 l) z9 F
  673.         {' d5 K' O0 p: V  [. j
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  R- l% G5 j# A" H9 Z8 m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- b0 l' q- F" i" S; p
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : W& q, m6 i3 O) z( `* s. E) P% f
  677.           Sleep(33);$ ~$ `. Q- W  y- g! c( t4 q
  678.         }6 D2 M8 B( M% q6 N/ c, [7 t: c
  679.         Sleep(1000);  X8 r( W/ y) \; w6 a2 d
  680.         for(i=240;i>0;i-=8)9 e: k: W1 A9 U- m' @6 d* p
  681.         {+ P8 x1 q, i$ k5 O& T* X4 H
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. e& M: r& |3 `  B1 V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 N; j) n/ _" G) E+ i( F' {) @
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ {5 Y$ o# e3 V
  685.           Sleep(33);0 S$ T9 l" p! e# @
  686.         }* }' ?  K0 D, ~4 z# [" N5 u" N
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ' ~& h0 h- k  j% t0 g) Z
  688.         dlg->ReleaseDC(pCDC);
    $ V& u  P+ c; h- R7 [5 H1 s
  689.         DeleteDC(hdctar);2 l8 Z+ N, o$ k5 D6 ]7 ^6 }8 Z
  690.         DeleteDC(hdcsrc);9 ?9 ]  B& @9 h9 Z
  691.         DeleteDC(hdcorg);$ g& ]6 q; S& f
  692.       }
    ( E, T$ d: Q6 W/ p5 {
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);0 _% d' T% t+ t( M9 d( s& V
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    2 s1 [9 E( D0 p
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, \1 d$ c, {2 @2 x% Q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    . r( U, t. N' @5 X
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 ]+ L# z1 z0 H( r
  698.       if(!Dn.Connected())
    & L* d! L0 {9 S; S
  699.       {- M5 M3 A6 I9 U2 ~$ ~8 A
  700.         dwTotalFiles=1;/ A% E+ D( k5 }6 `  U
  701.         dwDownLoaded=0;" _. Z  m( _7 k5 n; [3 i, _
  702.         bSilentStep=TRUE;
    ; ]2 M2 W; n4 E/ a9 R
  703.         bCompressed=FALSE;6 S0 y7 H0 Z+ G. k' ^) c
  704.         strExtLocal.Empty();4 \% s# v" f: z. Q& q( j
  705.         strFullName="readme.txt";  e) L, k6 o3 X. l+ K4 F9 [9 M
  706.         dwProgramState=AP_CONNECT;
      r. L4 Q4 o* D. |8 q3 a
  707.       }
    + d+ c$ O4 G; ]/ l. P1 ~1 _
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    - H7 M. U* j5 u# |6 Y3 R8 d3 C7 G
  709.       dwStartUpSteps=2;5 s  @$ C. F, t( a
  710.       break;. L2 f& _0 F8 _$ s1 Q2 B
  711.     case 2:
    6 U9 @6 d4 G- A& K- D
  712.       {
    , l' Y0 U7 t8 b
  713.         int iEOF;7 o$ C. {3 ?7 H! s; z3 {) A4 s
  714.         FILE *fp;- w6 Q* k0 r* H% Y( i! o) @' k
  715.         char szString[512];# V0 G* E. K9 D0 Y  I/ a
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    # A, H* [* Y3 g7 G0 P  Y0 T# g
  717.         if(fp)" g' A$ W, F- h, @2 \
  718.         {2 M4 j+ \; N4 z3 R2 v3 A& d, `( I0 |4 T
  719.           do
    - c' Y/ e" {' i5 @8 U8 s# z
  720.           {. e6 B1 J1 K5 N9 Z& B$ t  ]
  721.             iEOF=fscanf(fp,"%s",szString);
    * m: j+ ?% j- M' {# O* b5 C& h4 H9 A
  722.             if(strlen(szString))
    6 H& v1 a& q% y7 R& }1 b
  723.             {0 f+ Q( n* p. k& @
  724.               if(bFirstChar)( G- `! T  t1 L  @4 Q" d
  725.               {
    4 l' q% p8 g! o: p( m
  726.                 bFirstChar=FALSE;4 m$ v+ H/ f8 ?4 |% ~& ?5 I
  727.                 bConnectIsBig5=FALSE;
    / B+ K& |) W: l9 Z$ k
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    8 T) o! l4 }% R$ X% O
  729.               }8 c" D2 |; w$ }" m! X
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    " ^+ n$ U% L- K' D5 j
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));$ k: Y2 `9 O% H* ?8 r4 V8 p
  732.               dlg->m_ListText.AddString(szString);
    . h$ s) B, S. u+ t" k8 l
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + @& Q4 Q# t! b$ |) L- Q
  734.               *szString=0;, D* u1 N4 A4 q- ~7 O5 `; d
  735.             }
    7 I7 v7 f$ F! n+ P% g* Z
  736.           } while(iEOF!=EOF);8 l! j0 a- l5 G2 Q- J- q6 E
  737.           fclose(fp);
    4 Y' U3 ?  b3 d6 U4 p
  738.           unlink(".\\DownLoad\\readme.txt");" I% F& P- z5 R! }5 ~. a5 \
  739.           dwStartUpSteps=3;
    ( c7 W1 e, E) _( U' s6 f$ @
  740.         }2 E" R+ R+ L6 w% Q9 _
  741.       }# n$ n4 _( ~  w2 @
  742.       break;
    0 b( ?( y+ s  M
  743.     case 3:
      B4 {$ d+ c$ j3 a+ a
  744.       if(!Dn.Connected())5 \0 ~/ I/ c0 ], r; h/ t
  745.       {
    / q9 H. P5 x1 \; q. `
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    * t' d2 J( l8 j( L. |- Y7 I2 T
  747.         dwTotalFiles=1;$ _. C4 [$ u# F: K3 q2 q
  748.         dwDownLoaded=0;" t+ J0 Z: V0 d+ u2 ]
  749.         bSilentStep=TRUE;* O' }5 M4 G" u' `
  750.         bCompressed=FALSE;
    ! Z& ?: |7 ^/ }0 A; `
  751.         strExtLocal.Empty();( p% D! C; p4 W- w& m! n
  752.         strFullName="checkversion.txt";
      s# ?# h* A* `& g) x/ l( I
  753.         dwProgramState=AP_CONNECT;
    # S2 r# J9 o" a; k) y) g- |
  754.       }
    3 t3 M7 Z# q3 S9 }
  755.       dwStartUpSteps=4;0 _$ @' @8 Q% b5 Z( C
  756.       break;
    , \4 r4 s* S8 u# V, A& H5 G
  757.     case 4:
    , Y* E0 J8 U  S# [5 _
  758.       {
    ) r7 S# a' B* Q" s; `( }  v& W, ]
  759.         FILE *fp;
    + W% |- i- t. u3 z% G' z1 c
  760.         char szString1[128];7 V( a2 I! X, \/ F# [
  761.         char szString2[128];# o9 K; d& M3 J
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 K/ \- \9 c0 [9 H0 [7 r
  763.         if(fp)
    ) t5 d. a* J6 z& U$ m3 r8 J
  764.         {; g1 X2 I- }( _9 {9 {- v- v; Y2 s6 d
  765.           fscanf(fp,"%s",szString1);" H. u; ]& P, K+ v% p' C1 S
  766.           fclose(fp);" B3 e& Y! d/ x+ S
  767.           fCheckVersion=atof(szString1);
    6 e, n. C/ f* s" D/ w6 c
  768.           fp=fopen(".\\checkversion.dat","r");
    + v# q7 M: h# w4 {
  769.           if(fp): X# ~$ w- p" G! p( ]! J
  770.           {) j( n6 b! q; [& C" w7 o$ e- ^+ a2 f
  771.             fscanf(fp,"%s",szString2);3 |+ |- V& B3 i4 ^" s9 A) J6 a
  772.             fclose(fp);( ?; w4 ]/ }/ B) D- N' \# W
  773.             if(atof(szString1)!=atof(szString2))
    ( C# n1 o' M# H9 J5 G+ v
  774.             {
    - c' X2 M3 p* i; v  _
  775.               if(!Dn.Connected())" n$ J$ r& m! M0 e9 F5 Q
  776.               {8 H* i4 ^: i# \* u& g' k9 b
  777.                 bFirstUpdate=TRUE;+ P8 ]) v! p5 [
  778.                 dwTotalFiles=1;- ^/ h" {6 D  h5 |2 D$ r/ ]  t
  779.                 dwDownLoaded=0;
    8 I' X! K+ [* C3 N1 R
  780.                 bSilentStep=FALSE;
    ' n/ Y: T+ P5 z8 V
  781.                 bCompressed=TRUE;
    1 M& w: L6 F# E6 k$ X- P
  782.                 strExtLocal=".\\DownLoad\";( j$ f; W- W1 |/ R' ^
  783.                 strFullName="update.txt";
    * L* j' P: k8 r
  784.                 dwProgramState=AP_CONNECT;# h5 U6 V* ?+ }) h' B) I+ y5 i4 x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' h8 [4 O: {& C" }8 u$ v
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 o& ?. L; F9 Z5 ^* o; v- m
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");: K9 t, K8 _4 c. }5 v4 s* n+ a
  788.   s- A: T9 j, x( q* N7 d
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) q- E' Y% o2 C9 Q
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    0 ?2 ~. `6 P" p
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)2 h/ _0 k% I' Z( }  {; Y
  792.                 {; H/ ~# A: ?* F
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    0 s( C" q  |+ M: C4 p* i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    7 @" ~) s- P" `1 _( {0 R6 n
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    5 G+ G8 N; a7 R  ]
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' c" h4 f/ d6 @+ h8 [! V0 _
  797. 3 P: R$ X9 u& N
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 T) k6 T7 }" F( o4 ?# A! S
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  ~+ z) V: K% s* U( m7 g9 g6 C2 O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");/ w- l! b) Y" e0 n
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 K2 m; a# F9 `* K# Y0 ^
  802.                 }
    ) K; }7 l1 K3 l& _. C: Z
  803.                 dwStartUpSteps=5;9 T8 y6 W- g+ [. `/ z
  804.               }
    1 S- ~( H/ K! x) u
  805.             }
    7 W2 H5 q6 s& G
  806.             else
    . F  A8 H. j9 \
  807.             {2 G8 d; V# W2 Z$ ^1 E' y; r
  808.               unlink(".\\DownLoad\\checkversion.txt");
      K/ y0 I! _7 n: A$ i6 H
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% g2 b; Y8 [0 u9 q9 r6 t2 A& K
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + ~! W7 ^& R) q5 J* U1 k
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");8 a! v( K) e4 q3 R' g+ D3 D  {
  812. & x4 g6 M$ n# Y$ @
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % z0 b4 v2 [4 m( b$ V
  814.               dwStartUpSteps=99;, }5 j$ K$ \+ e
  815.               bFinishUpdated=TRUE;
    : U1 @5 o8 N' i9 o
  816.               bCanUpdate=TRUE;# A5 R; K' {, x2 \- T
  817.             }
    & a% N7 z) n. j' k
  818.           }
    ! ]" X* s" p/ |* S" u% T) E
  819.           else
    , x3 A3 ~" H9 [7 a5 ?" Z) n9 s. j
  820.           {: d6 _2 j* L& o/ M
  821.             if(!Dn.Connected())& A6 Q* w9 A0 }" a  R
  822.             {5 [, }4 I5 F. j8 w; d+ m* y
  823.               bFirstUpdate=TRUE;5 n# I, p3 ?# o3 T( c5 v& n
  824.               dwTotalFiles=1;5 D2 w4 l/ g% ~% w7 @
  825.               dwDownLoaded=0;) P  ]& G4 G( o( B- o- K( y
  826.               bSilentStep=FALSE;9 e  {; y, P2 P9 q3 i0 i
  827.               bCompressed=TRUE;; N8 d; O! o4 X6 P  {% a2 w$ {& }
  828.               strExtLocal=".\\DownLoad\";# x# ^) X. O, v- Z+ |1 N! y' ~
  829.               strFullName="update.txt";
    ( l3 ^; \# U) R$ u' Y, W0 G! D
  830.               dwProgramState=AP_CONNECT;: a* j( Y& X& D7 {( y4 y2 v7 M' c/ r
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ l+ h) F! w+ r' }- y% r3 J$ A; L
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 b4 q- W% h$ c
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");! t$ b/ t2 j& W( Y5 Z: e( G
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( x+ p) Y9 J' G( c" W8 Q) ?3 B
  835.               unlink(".\\DownLoad\\checkversion.txt");$ O3 X; w$ o8 J
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)/ R- V' X! l; Z* E; B
  837.               {/ A8 t+ _5 Y# v: l. P, Q2 f$ P
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");/ Y! S! v9 a2 V4 q; a
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    + w4 A$ A/ d* m2 s3 k/ J' x) b6 q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    * m2 Z9 G9 ?6 o  v/ Z: a: [
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& j7 t9 ^" B6 j
  842.                
    3 W0 }/ R1 t3 C4 D6 N$ u( P7 ~3 V
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & ]5 r4 ?6 e, Q4 }
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& D- O) ]! N* F
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");% W9 q5 O4 I; O5 x, r  u" s
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. p1 n- a3 X0 O8 p) E' s
  847.               }! n$ B( l2 S; I9 `; U
  848.               dwStartUpSteps=5;3 [6 y  t5 @% J3 P& q
  849.             }
    ( t: ]% J$ l6 B
  850.           }: c0 h+ V4 g+ R+ R5 p+ E9 {# Z
  851.         }
    0 L/ p4 W! L9 x# r, }3 K" O
  852.         else
    - \( x, @; D8 ^8 l
  853.         {
    * @( \! k: `# z$ Q, n' ^
  854.           dwStartUpSteps=3;
    7 O& p) z& \8 Y" }7 h9 P
  855.         }
    5 L1 `" d* w7 }. y
  856.       }
    9 d7 ]% X) D2 ?, A
  857.       break;
    9 g$ W) Q- d* Q5 F. Y- b
  858.     case 5:
      H2 a7 h  f) v
  859.       {3 N; W; |" c/ K" O, c  x9 |
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    6 d5 ?1 P( o" q5 V* P  `0 ?1 d1 G
  861.         {
    3 D+ p, c0 {6 X) ]3 z/ L' F; x
  862.           int opt_overwrite=1;
    2 G. w3 O! H/ l
  863.           int opt_do_extract_withoutpath=0;' d# N. Y' s4 W
  864.           unzFile uf=NULL;* n0 y& e: n! f

  865. ) a+ }8 |. H( Q8 G
  866.           uf=unzOpen("Wsa.zip");
    . |8 R* u1 W6 j6 t: ?# f6 }8 H
  867.           if(uf)
    : y( r6 r$ ]/ I& H9 Q" W
  868.           {2 B) i; h+ W4 [; a4 C
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);. b1 R+ R7 Z  w4 {6 T; F9 g
  870.             unzClose(uf);2 u3 c/ O) h' D
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ' r/ E7 v3 V2 M2 P# o# X+ h# f# |
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");- n/ ?8 ~% ?. r8 f1 I! _
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");2 c. {& w& z$ Z6 ?) r
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 a+ H1 o0 z4 C# r  p: o1 T
  875.           }
    ; [) Y5 a: D# P6 x$ L; F
  876.           DeleteFile("Wsa.zip" );
    : d) A# p! x3 X, e9 G" H: E$ j9 Z# [
  877.         }
    5 _1 j+ S( U0 s9 K: I5 W/ V

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-1 17:39

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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