CSUpdate.exe源代码

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

) w, f! G9 B0 F
  1. / RevApp.cpp : Defines the class behaviors for the application.
    0 k9 m, P* ?6 Z
  2. //5 l; Q7 [5 E  F4 `' c' n, \) w, C

  3. ; J* S6 o" `( l% k5 N; x: M2 J1 ]
  4. #include "stdafx.h"
      u# ]3 Q# ^# ^. \1 @
  5. ; Y* A( _3 w4 r8 N  G6 [
  6. //#define UNICODE2 O, i8 @0 T1 h6 I3 ^4 t
  7. //#include <gdiplus.h>
    4 U8 t- c/ t& ]5 d
  8. //using namespace Gdiplus;
    - _. Z& O, m4 r+ K

  9. 0 _% K) R8 a( W5 {. J
  10. #include "RevApp.h": W% M; v8 F4 @3 \+ {( E
  11. #include "RevAppDlg.h"
    ! W. B5 t3 S, l1 A6 {

  12.   R0 R2 D' J( B' w: I
  13. #pragma warning(disable:4786), W% s7 {8 S# Y0 f: i# }7 B
  14. #include <map>
    - T$ Y3 @. n! M0 q, k; U$ d- S0 E9 E8 b
  15. #include <list>
    - s; B- I" q) Q! B7 y4 t& ]
  16. #include <direct.h>3 ?* T% J& n. ^: V

  17. # {% C- ~" S, r
  18. #ifdef _DEBUG
    # g% V8 @. l$ C$ b" E9 L
  19. #define new DEBUG_NEW
    7 v( x# V! D0 F! d+ N& m( ]
  20. #undef THIS_FILE- J% |' ]* m8 ?) d( Y6 l7 V
  21. static char THIS_FILE[] = __FILE__;- D) P$ ]6 g' Z
  22. #endif6 u+ p7 k, b% ^9 E% ]! C, `
  23. #include "SkinResDef.h"
    5 m/ M4 h: Z: o. S1 Y2 F& r
  24. #include "ChangeBG.h"
    % u, |: u* Z3 S. w) {
  25. #include "AFXINET.H"( l, m7 L* p0 Z* N- y0 B: H
  26. * _" f; d( G; b
  27. #define TRADITIONAL_CHINESE 0
    / k' Y7 Y$ w3 J
  28. #define SIMPLIFY_CHINESE 1
    0 Z. G: ~( x1 e. c( A5 _/ w
  29. #define ENGLISH 2
    . i) \9 S3 }0 S6 Y+ Z& q- E
  30. int m_iLanguage = ENGLISH;
    ; [: Z8 F3 C! p
  31. /////////////////////////////////////////////////////////////////////////////
    ; Q% u% Y7 n  l" W  p2 j  h; R
  32. // CRevAppApp4 v, `. ]6 ~/ |0 M* Z! I) ?, l
  33. . |* N; ^/ R8 Q) ?8 g% k, q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 @8 J/ X' k9 q7 ]
  35.         //{{AFX_MSG_MAP(CRevAppApp)& F/ l2 [  b0 Y  Q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    * A; R3 W( k3 Z% p; H* ?" ^8 t& {
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 n: T3 r) x" m7 T
  38.         //}}AFX_MSG+ M: K4 T5 r1 i/ a1 A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)4 o: ^, N1 \6 B4 ?  A
  40. END_MESSAGE_MAP()
      R) ~+ v/ f/ {; b& ]% f! d+ l
  41. + y# e: V0 C" z( n# [' n
  42. /////////////////////////////////////////////////////////////////////////////
    0 s1 p5 T" \. ^4 S2 i( T3 h
  43. // CRevAppApp construction+ t) W' e$ J4 Q8 d

  44. 0 |  D' m, H  N) V* f4 ~8 r
  45. CRevAppApp::CRevAppApp()$ a0 U9 J$ Q. ?( j; Z; X. N
  46. {3 K5 w3 K" V) H) \% G/ [6 k: _
  47.         // TODO: add construction code here,
    . }1 }/ _. `: r
  48.         // Place all significant initialization in InitInstance
    . ~% k+ Y0 i# O# l: E
  49.   bDisplayIsBig5=FALSE;6 V+ o7 h) Z! {: @( [4 A6 @
  50.   bRestartUpdater=FALSE;
    7 C4 H: \7 S  ^
  51.   bFinishUpdated=FALSE;  v4 G3 ~3 Q& V  s5 r: i4 v
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;2 S) [! J4 P  }2 I& w2 ^1 s
  53.   InitChangeDataBig52GBKS();* x$ A3 ]* k& M3 v8 A' p
  54.   InitChangeDataGBKS2Big5();- m( o; s0 H, `- h1 X2 s
  55.         //: \! l- W2 E; V. ~2 @! H# c1 @
  56.         bClickRunExe = FALSE;
    + p% ?8 P1 n- @* ?0 `9 T) Q4 I: z
  57.         //0 |6 z% M- k$ k9 s$ Z" P
  58. }
    2 w* `. v, C9 {6 h6 \# r
  59. : N3 E1 X1 r1 K% f8 i
  60. CRevAppApp::~CRevAppApp()( v! U6 n+ O; c
  61. {
    / p* `8 R% a, q. W  z& H* V% K
  62.         // TODO: add construction code here,$ t% C2 @* K4 U9 ?
  63.         // Place all significant initialization in InitInstance
      x. g0 p- O( D1 U% |! m
  64.   EndChangeData();
    . }, c) d% M& G6 }
  65. }3 a* a) k5 b( V5 o$ i: H
  66. 2 J6 b( O( M+ C; P  e- [
  67. /////////////////////////////////////////////////////////////////////////////
    8 ^6 u" u% J* S$ k& N8 q5 d
  68. // The one and only CRevAppApp object
    - m4 t+ d$ o( o. @& k9 S

  69. 0 h  d* C9 t, V9 d+ Y$ j& C
  70. CRevAppApp theApp;2 q- ~2 x9 p* f6 A) J

  71. 6 f. I  O+ |5 W" _4 p  B0 [  O$ j
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    6 A; a# W9 w/ h
  73. {: A0 G: p) h1 Q% u( g
  74.   int iEOF=0;. B4 `2 k" G. W8 |& p1 @/ I
  75.   char szTempName[MAX_PATH];0 `: w. p- l0 m5 m2 ~( g- @
  76.   *szFileName=0;6 [/ C( M' a- q5 e, h4 k
  77.   iEOF=fscanf(fp,"%s",szTempName);- V2 Y. ]$ ?7 n) ^
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    7 o* \8 K) O6 t" x
  79.   {# W- K+ J* N' @: ]9 Z8 T+ U
  80.     strcpy(szFileName,&szTempName[1]);
    9 V8 J) x3 C1 ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ( z- {. m! E4 ^- @7 i9 u
  82.     {
    + C7 l) t) g1 `$ g" v  u2 l9 w
  83.       iEOF=fscanf(fp,"%s",szTempName);
    . Z( u4 @2 w* f2 @( j$ c5 l
  84.       strcat(szFileName," ");1 i+ @+ l" g# u5 l% y8 E% j  F
  85.       strcat(szFileName,szTempName);
    , Z+ A% J: |3 X* C: Z  H
  86.     }
    2 p8 l0 ?8 J. Q3 H0 w- J; _
  87.     if(strlen(szFileName)>=1)
    . e- F9 k9 S* u
  88.     {- A6 t& X$ D5 |1 l+ ~0 w0 i
  89.       szFileName[strlen(szFileName)-1]=0;
    5 n" d, Z7 f! w7 d
  90.     }
    $ a; _" O$ U' W, p7 B# R0 @$ z" y
  91.   }
    $ F: I( U% X0 W$ N: w
  92.   return szFileName;* C$ ]& ~- J3 Z+ Q9 W
  93. }0 v5 `( s+ X# \1 Q) {& |

  94.   A5 J7 v' E) ~9 j8 `2 ^
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    8 _( z% e- Y/ Z3 X0 M
  96. {$ N" Y8 L% j' Z/ Z# `# z
  97.   FILE *fp;
    0 U$ m5 K7 c0 e& v" h
  98.   char *key=NULL;
    # e- Y, B: b! g: c! g, d
  99.   char version[MAX_PATH];
    9 A& V* |1 L) D; Y, G
  100.   LPUPDATEFILE file,olds;
    & Y& ]( \- z4 ~' D, M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;7 F1 G7 [) U: Z

  102. ! i$ R* J$ \# V5 e
  103.   UpdateList.clear();* F, `. p$ {$ t. h. a8 b+ n+ C. n
  104.   UpdateFile.clear();
    ! ~3 u. ~7 M. n: V' P; C, G
  105.   if(GetFileAttributes(filename)==-1) return false;' I5 E$ ~5 K2 c5 [' v- l  f
  106.   if(!(fp=fopen(filename,"r"))) return false;
    2 L5 L3 ^$ r* U5 Q1 ^4 E  \$ B! ~
  107.   fscanf(fp,"%s",version);) b' v( G: N: b2 t
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }7 O# X' U; l' {* A3 F
  109.   while(fscanf(fp,"%s",version)!=EOF)$ Z# t$ }. @1 }6 _2 {1 F+ t
  110.   {& z: V3 y) ?% b7 }" n
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; N5 l$ c3 q# e. ], W4 t( e
  112.     fscanf(fp,"%s",file->path);
    & r: P) \" c$ n- }" O( u/ I' Q" c- \
  113.     ReadFileNames(fp,file->file);& r( o$ P. [  m4 c) G
  114.     strcpy(file->full,".");" m& U# T1 D. L. v8 R" B
  115.     strcat(file->full,file->path);. j+ C6 B" R- t# y$ K' H0 r# T
  116.     strcat(file->full,file->file);6 @1 Q/ n" l: ~  N
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    4 A3 s3 w0 B# _' r# D" `
  118.     {
    1 Q( G% a6 i, i# g9 c# `( i
  119.       file->vers=(float)atof(version);
    3 A) v4 t5 Z0 N" D. [# v
  120.       UpdateList.push_back(file->full);* O% x* h* h9 ^5 K* K
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));2 `9 O, e' a( ~# d, W! ?( s
  122.     }
    ! B0 G- o# M( A/ y8 [5 U' X3 a
  123.     else' x1 M6 i/ W! o6 H& X* M' }
  124.     {8 g8 a2 Q! ^! c! y( }2 s1 {
  125.       olds=(*p).second;
    , z7 w, e4 b/ w/ Y  J1 l+ J, N+ z
  126.       if(olds->vers<(float)atof(version))
    4 o$ g* A+ t. h8 X6 e0 {
  127.       {
    - r( j* ]) {) J; e* l
  128.         olds->vers=(float)atof(version);
    2 j; c' [/ ^/ Q* O% f
  129.       }
    / s2 i1 u9 t/ E/ L; ]% {9 A" s4 Y. K
  130.       free(file);
    ) B* U/ j5 ~( Z1 X( [! r: v& S
  131.     }
    * m- b. o# L, h2 J& n" @
  132.   }
    1 h8 b2 E8 N& J
  133.   fclose(fp);
    4 O5 w6 p$ t! c7 X7 K7 Z' K
  134.   return true;8 y/ j, J$ B/ ~' p! k
  135. }
    . q, R5 r2 Y# F! i( x
  136. 4 }8 X3 [+ b0 i3 u
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)- v. E8 a0 V" |
  138. {
    , n: u: @6 R  A
  139.   TCHAR  szFull[MAX_PATH];8 z# D) H0 U1 }
  140.   TCHAR *token,*inter;6 w' M3 }; F$ ?' W6 R6 S5 V5 u" `
  141.   *szPath=0;
      z' Y- _- X9 K5 q
  142.   strcpy(szFull,szFullPath);
    ! O9 E) [- T3 z% j
  143.   token=strtok(szFull,"\\/");
    ; |& ^& l8 C  z, E4 ~7 L" ~- Y, v
  144.   inter=token;1 `8 f) Q& f' S
  145.   while(token=strtok(NULL,"\\/"))
      g) m& ?0 k. I3 n
  146.   {3 O+ y$ j5 l+ y" z3 _! d2 p4 Y
  147.     strcat(szPath,inter);
    1 l# D3 v' u( c0 m0 v1 e, S
  148.     strcat(szPath,"\");
    , r) L: b" M* c2 Q- J$ j( |5 a
  149.     inter=token;6 a2 v  o! |8 d: J0 Q  [; ]
  150.   }1 t9 u& m( ^( G; q
  151.   return strlen(szPath);
    4 J: Y# o& ?- q; C! ~8 j
  152. }7 U+ }/ }! s6 C% ^8 q
  153. ! D; m' T! y: I- {$ c  O) l) f: C2 E
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)' y" p6 m3 f1 k# b' \- ?; ^
  155. {
    5 }' g  l# g3 z5 d# n8 V) ^; h& W
  156.   DWORD attrib=GetFileAttributes(Target);4 b$ A  D" ]* Y1 b) X1 ]
  157.   if(attrib!=-1)
    5 `3 M( [1 W2 C8 H/ s6 z0 T, B9 p
  158.   {: ~- g5 r9 t9 t
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))3 z- v, C% I; g2 Z
  160.     {( W, U) h+ v$ \5 I" h% }- c
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) H  U  H5 W8 ]5 i
  162.       SetFileAttributes(Target,attrib);
    ! `0 {* Q0 C! N4 C4 C! _
  163.     }1 P; C9 |1 c$ h$ J
  164.   }' @7 s5 Q9 ?/ i0 o( U, M. `
  165.   CopyFile(Source,Target,Erase);: W; U$ Y0 c0 F# N
  166. }
    2 j( J- L9 Y& |4 i

  167. ( J: v5 b! Y0 f9 o
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    4 W7 B4 B- W9 c# k- G1 \
  169. {- k* W- q2 D1 Q5 G' O, T& E
  170.      FILE *fp;
    6 K* v8 x  S) X( H  r( A
  171.      char  szBuffer[8192];- c, }8 w- Q6 {3 |. |- h7 h; J5 g
  172.   va_list  argptr;
    % p, B* Q$ ^  n: P3 j
  173. 6 w: z  F4 \3 H& G, @
  174.         va_start(argptr,message);7 P, O% X) x* D# J7 I
  175.         vsprintf(szBuffer,message,argptr);
    3 u# T) h9 J& H& J# I4 ?
  176.         va_end(argptr);6 G' u! c+ I% z5 z
  177.   fp=fopen(FileName,"a");$ b6 E$ _" |! B- n
  178.   if(fp)
    " N; ]. B0 N  W7 U
  179.   {
    ! U7 Y' p5 V; Y. A3 |) T1 p* _+ S& P3 y
  180.     fprintf(fp,szBuffer);
    4 k9 `8 l5 C" [! K  b( J! C' u( U
  181.     fclose(fp);
    ! z1 w# D: h( k1 i+ m5 J' Y) q4 s
  182.           _flushall();2 ~  w, J' [3 e
  183.   }
    3 o! p: O0 L- O
  184. }7 L7 M& f9 S; x4 g7 R% s

  185. 4 ^' J* ~2 D) E! T$ D8 `
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    6 ^  q  P5 h( U+ E& y. C. q5 r# k
  187. {
    7 j3 Z0 ]' E. k9 q. V9 V% h: ^) k
  188.      FILE *fp;
    1 `3 k# N; {. r2 t" c& M
  189.     DWORD  attrib;
    2 q3 U8 T; U/ W4 d$ x) A7 h
  190.   attrib=GetFileAttributes(FileName);; ?# v' A) k. ~1 P& @
  191.   if(attrib!=-1)& k; V% ]9 A# F7 a8 w
  192.   {
    7 ?" I5 {4 A4 U) o
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);; \; ?! G2 v7 Y  x# F# |+ e: G- L
  194.     if(!SetFileAttributes(FileName,attrib))
    1 Y2 x( D7 ^- U6 e- Z/ e2 M
  195.     {& _% V$ R: z) @3 a
  196.       return FALSE;4 y: N. `+ ?. ~" @2 t" C( u
  197.     }
    8 W- G- F. A+ c. N& t& M
  198.   }  {, u, Z5 V$ q  n7 {' z
  199.   fp=fopen(FileName,"wb");
    " [+ F! S: T7 f
  200.   if(fp). N* x) ~- ~  H
  201.   {
    " O1 G' M$ C) c7 z" e7 E
  202.     fclose(fp);
    2 j: R4 S# l2 r2 y$ a
  203.   }  \2 D$ }! j$ @5 G$ v4 [5 ~) M
  204.   return TRUE;
    $ l: ?8 y4 e4 o& _4 ]# e
  205. }/ [% s% t* H& R5 i/ B3 n
  206. & }8 {9 k" }% I" ?" v
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    : K; G1 d. ~) d  z
  208. {% ?+ o: u8 a* [# x* v; k& ~
  209.   char filename[MAX_PATH];, l3 q1 W. _, ~) c! Z% Y- ^
  210.   LPUPDATEFILE file,olds;
    * W* b0 x' I9 P$ O# K: Q5 `& C
  211.   std::map<int,CString>::iterator i;, D3 p9 L7 j% [. T
  212.   std::map<CString,LPUPDATEFILE>::iterator p;* _( s! l$ ^$ }6 ]! D& j* _
  213.   std::list<CString>::iterator l;
    4 a  ^- a* P! D* q4 O$ M1 ?

  214. ; s4 \, J0 F5 O5 N5 k2 }
  215.   if(bFirstUpdate)  c( V! r# K1 R0 f$ k. ^
  216.   {: ^8 J: G, k+ ]/ v' d/ X( D
  217.     dwCurrFile=0;
    - t; q; G; I5 s# U/ X
  218.     bFirstUpdate=FALSE;
    9 P4 D  J% ^7 d; W7 P
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ x4 V' @* f+ T
  220.     {
    7 y3 m4 j( ^  d( |2 l
  221.       dwTotalFiles=UpdateLocal.size();
    ! B- W2 G6 R. ^% P. T$ Z4 t
  222.       dwDownLoaded=0;, Y7 f# p/ K7 I7 h4 K3 j+ P
  223.       bSilentStep=FALSE;
    & k) ~+ B6 L' d  Y+ p! O, p
  224.       bCompressed=TRUE;0 ]! q5 `) n" H; r. A, I8 X3 Y
  225.       strExtLocal.Empty();
      ?0 e$ Z1 ^4 e+ ?  f8 Q
  226.       strFullName=(*i).second;
    7 K7 g# g/ c. Z- |
  227.       dwProgramState=AP_CONNECT;! y% Y. ]% O6 c; \0 K
  228.       return TRUE;" u$ d9 V. W# Y2 L5 ?6 P
  229.     }
    ) o( N0 `2 C" G# h( \  h
  230.   }
    5 s: e: v" E2 z( R
  231.   else if(bRestartUpdater==FALSE)
    & I& O* D8 y, z# _# q) W
  232.   {& n7 y. N$ ~1 S' ~, t% M  i) y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())* D& Q; I7 ?$ y* e
  234.     {
    , E5 `& k. C4 U; x$ u
  235.       file=(*p).second;
    8 c# q6 O# g; k; ]1 \1 S. B$ m9 n0 l
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())8 K+ \) w: H" Z6 I( G
  237.       {
    & E$ T: r( S6 p# z- m; g
  238.         olds=(*p).second;
    * ?. k. L  k% }3 C* V4 o/ G
  239.         olds->vers=file->vers;
    % e1 E# W2 l1 L( p1 H9 Z- j
  240.       }
    : A% b9 Y' h3 |: n  Y, |1 E
  241.       else5 H- g; z% J8 g& n* ^9 `( M$ X# O( Q
  242.       {; D: O9 z) n/ |! M" ~: T+ \* j' K
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 o  x' |6 R9 L( W8 v
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    : D, U, H1 i+ ]. ?; E
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    % x7 i0 }" c" _6 Q& m: G+ I& x
  246.       }. ?5 R1 h& r0 s3 z2 [
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    0 Q* y' o: E! m* E9 d. F5 M! d
  248.       sprintf(filename,"(%s)",file->file);+ f, F3 G" h  g9 G1 n* p
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 X6 c. Z5 \/ O$ e: L
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }, r3 }# c5 I. K9 Z
  251.     }- s5 O( c# Q2 @. |9 c& b( ^
  252.     dwCurrFile++;& [, _. A% M+ T) H: Y9 |
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( L, u2 r: c& }. @! f6 n
  254.     {
    7 r; H; E( W1 l6 _+ u
  255.       bSilentStep=FALSE;
    : }# N2 I: ~) y: r8 C
  256.       bCompressed=TRUE;
    - i: a- ?2 I; k/ D( E& p$ k
  257.       strExtLocal.Empty();
    " o' n( v% ]  B. l" k2 O- ], H
  258.       strFullName=(*i).second;
    * \' K! _6 c; s4 Q
  259.       dwProgramState=AP_CONNECT;
    0 n! A1 R5 F0 U$ t) y- n
  260.       return TRUE;
    $ ?) L' k# ^# Q
  261.     }& X  B0 Q/ ?- Y* a! m3 d
  262.     if(!bRestartUpdater)& T( U; k2 p2 [: q9 L( x+ w
  263.     {1 U: X6 I+ @  [+ n  y
  264.       int iCurrSize,iFileSize;) m, K, p4 X4 U, H8 }! Y' R+ R, Q
  265.       iCurrSize=0;
    ) g. f" ^# F0 O" Y8 \. |/ `% s
  266.       iFileSize=UpdateList2.size();5 s' L. d, z  [- |. P; b. u
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . }. _2 v' ^4 `  B2 o4 t
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    7 W' b3 i% ~, e9 R$ u7 c
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + k+ B% Z1 _. t: J+ A
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  H- l9 b1 T7 b- N
  271.       Fclearf(".\\update.dat");
    $ y; q/ W; ~) T$ ?+ s4 O
  272.       Fprintf(".\\update.dat","Bloodyf\n");5 Z7 E( K2 c  Y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * S/ C; p( e9 G+ D5 l# T# M
  274.       {
    1 u, P1 d2 W9 `7 v6 k4 ?) }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    # o" E. y$ z+ l2 W9 Y7 w
  276.         {: A* [6 b. O1 `: Q! g
  277.           file=(*p).second;
    % R  c% Z- v- @
  278.           sprintf(filename,"(%s)",file->file);/ G# `9 q3 O/ {/ y  g
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' f/ [' v& [4 {! H
  280.           iCurrSize++;
    5 p# z9 I+ ^( ~
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));- l/ e$ y" |6 B9 |( k7 r+ U
  282.         }; i  k3 `0 Z+ ~) [% @  L; p
  283.       }
    6 P# Q; P3 m* Z/ `3 R3 `* Y/ S- i
  284.       unlink(".\\update.txt");
    5 I$ ~3 e" J7 [0 a7 \
  285.       unlink(".\\update.tmp");( G- c+ o/ V# I; G7 z+ }
  286.       Fclearf(".\\checkversion.dat");  E. S' ^" \+ s* h" u
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    1 u1 O5 Z, Q% D/ D5 A2 @3 k- c. N. r
  288.       if(UpdateLocal.size())$ x' \8 {3 F/ {1 E% d, ^6 m/ |
  289.       {" k& X* B) `0 {: |1 y  P/ m) Q
  290.         UpdateLocal.clear();
    3 i$ F# S& i6 ~$ ?' z  F7 [2 h$ [  c
  291.       }
      K$ P; G  A# z, [; i( X6 u; [4 I
  292.       if(UpdateFile3.size())
    6 E3 T4 V2 h0 j0 T/ G
  293.       {& a6 b- H  `7 J7 n
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* ^( E$ J8 z% D7 k4 a6 o9 R" T0 i
  295.         {
    : A* w, I( J2 m# D
  296.           file=(*p).second;
    0 M" s7 ?0 W* _- {* @5 M
  297.           free(file);
    ; R2 g+ \! U% o' ]
  298.         }4 @' I. k5 U8 t4 j! e( U" P- q
  299.         UpdateFile3.clear();5 c, w# e) [. j+ k
  300.         UpdateList3.clear();
    ) Q+ u( R5 z. o6 }4 N5 ?
  301.       }
    + E" @, Y# a/ U5 L% n" C
  302.       if(UpdateFile2.size())2 O6 m3 _) A7 p/ [, v  P/ g4 D+ ]9 V
  303.       {
    : z' C& j4 e! B! |  i( S
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% w) u" K7 j  K. I7 A6 ^! q. t
  305.         {
    ; }0 j5 Z; J& Q# z% v' q  W" a) s
  306.           file=(*p).second;5 P5 q( @- d% ]7 C
  307.           free(file);7 |5 q6 B5 r& T% V  w- v3 f+ [  a
  308.         }
    9 ]6 Z3 Q* k0 ]2 @1 k; A% \
  309.         UpdateFile2.clear();
    , [" h  S+ n# |" M: p
  310.         UpdateList2.clear();+ l9 f* L  T3 H+ O$ _% v( e
  311.       }1 P/ m' w. r+ f0 ], m/ B: ~0 |* Z0 A
  312.       if(UpdateFile1.size())
    - G2 u) _1 d0 ?
  313.       {3 N4 S+ Y" b7 F+ \9 y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; x" L7 }3 ^0 ?; q  w; @  n
  315.         {& {# b" Y0 q+ K
  316.           file=(*p).second;* c; P- s. q2 u0 ?- g" d" n8 n
  317.           free(file);9 j5 d& \* N) [  i- z
  318.         }
    " B  a3 Z$ T/ B9 x' o% C
  319.         UpdateFile1.clear();/ j+ H( T, y+ \1 i! @# f3 w  O5 W9 E
  320.         UpdateList1.clear();# m/ B7 B0 N% l9 H2 T: k4 W' E0 w. S
  321.       }
    4 D8 s8 A% v) Q* w, J9 C& b
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    9 g! h# A5 _3 H+ L& p) [$ T
  323.     }
    5 o' {5 ?8 V& }4 n9 u/ C4 x
  324.   }7 p. ]. R  z. ?7 m0 l" Q
  325.   return FALSE;7 U( i  G* r# a6 i& Y6 E/ D* j. m
  326. }
    : O" k2 k7 G# I+ ~
  327. & ]! E3 Y9 l/ ^5 F0 }3 U
  328. void CRevAppApp::ClearAll(void)+ j3 F& M7 l( p' \1 c  R- T
  329. {3 v; I- w. m( Z1 A$ p: W" b! I
  330.   LPUPDATEFILE file;
    * D. j8 |6 X# v8 v( I/ |) P1 ?
  331.   std::map<CString,LPUPDATEFILE>::iterator p;4 C) m0 Y2 s4 }
  332. 7 g" i/ d: z, e7 L
  333.   if(UpdateLocal.size())1 T, p/ f+ m( T2 a
  334.   {
    ) ^3 v( I; O/ ?' B
  335.     UpdateLocal.clear();
      C( t! \8 ?) q/ l, g
  336.   }
    & h4 H: D# B6 ?0 k
  337.   if(UpdateFile3.size())4 N# S% L1 S/ O! L" E9 m5 r
  338.   {
    " e% V1 ^% X8 |. c# S. F! G; d
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 z% [' U/ V! d' U$ Y; {. `0 L
  340.     {
    + M! X% g; V& s$ `/ M; ?1 |7 r% Y  E1 D6 p
  341.       file=(*p).second;
    7 `  a; G/ n! B& U
  342.       free(file);+ _, ~" v/ U2 Y  H
  343.     }
      e: Q6 A* ~! w  V* I
  344.     UpdateFile3.clear();
    3 o& X$ h$ u+ \. u
  345.     UpdateList3.clear();( z7 u: {$ d0 j8 r1 z
  346.   }
    1 c* J+ D& S. J1 f) A% H9 y
  347.   if(UpdateFile2.size())
    ) U7 A5 L5 O: O. G& k
  348.   {$ s) e; ?$ b# q& B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 K- d0 H! {7 Q$ f/ N" i; l3 ?
  350.     {
    $ [+ q( q0 z4 |' Q+ ]" d3 }7 S
  351.       file=(*p).second;) S( K8 |% E% O# [9 n2 J
  352.       free(file);- U. x' W( z0 u1 a5 q" w7 b
  353.     }& N1 {% }& l3 f$ v: C5 G2 \
  354.     UpdateFile2.clear();4 N2 k: l0 z% x) J& ?0 y. m
  355.     UpdateList2.clear();
    & R9 k8 n& ~) I6 |/ Y+ t4 g8 H$ D
  356.   }( z4 w% `, N* {& s4 u
  357.   if(UpdateFile1.size())
    7 }* f7 u% T7 h3 J: |# X
  358.   {
    : E  L0 w' t6 c' F: g3 V
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( j3 y; D! O! z4 a7 B, p
  360.     {
    ' B  V1 y' `$ E, J. h8 V
  361.       file=(*p).second;0 _7 m+ G, Q& v; k9 j! S: }
  362.       free(file);
      k2 b6 c; }2 J" @0 }$ X
  363.     }$ L/ @# _( b$ n6 l) p
  364.     UpdateFile1.clear();
    5 f+ {0 j) L3 G0 L2 s/ R% u1 |
  365.     UpdateList1.clear();
    - u0 `3 R2 D" q1 k
  366.   }0 Q$ D0 r# e, M8 ?  Y' H6 i
  367. }  
    7 H( \1 h' C$ ?2 f$ A- u
  368.   
    " j0 I8 A& W6 q$ k$ |
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    $ t/ S" q) D* `9 m, }& p( v
  370. {6 `5 I' a& R; n
  371.   int c;: T; c$ a& i: W; h
  372.   LPUPDATEFILE file1,file2;- W% s& Y8 {9 X' K! l6 u# g% \
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 K# U+ q! H8 B( ^- @
  374.   std::list<CString>::iterator l;, O. x2 e( O( P* y) G( s
  375. / Q' H% h  H! k! g
  376.   UpdateLocal.clear();, d& A3 m; m  ^. g
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);9 S8 K' }& S  I2 m
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);: y; Q5 P7 y- g5 q6 m. a' q9 V
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);- B8 \# X9 i! r: v& d
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);$ I, T5 m$ p% E* n! P6 \# w2 @
  381.   if(UpdateFile3.size())( Z; |7 W& {3 z+ U! x
  382.   {/ [1 y$ G. l& `/ }8 w  J
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    2 {4 U+ s* q6 }# @* R/ ~
  384.     {" ^- v4 G2 T" m: @+ v4 H
  385.       file2=(LPUPDATEFILE)(*i).second;! `9 b, Z* d  C
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! W, i7 ~& o* X9 y2 e) z
  387.       {
      X0 E* E* d9 u0 Y* M* d9 O0 o1 Z
  388.         file1=(LPUPDATEFILE)(*p).second;
    * i) G0 i% F' L  h( p$ m( T
  389.         file1->vers=file2->vers;% |' H* _" A( M, Q
  390.       }  m& s8 c5 }% k4 ]  J, M
  391.       else: _0 A5 h( V( ]. I
  392.       {: }" U+ y* d' Q4 A# s$ h
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! D2 {) L' t$ {$ p' \
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    7 ]) c+ t7 |4 L# E. [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    # L$ N7 y( r' m7 m) l$ v% ^
  396.       }- U( J1 ~0 M2 h9 r, n3 I
  397.     }9 Y0 `9 D: b1 [3 P+ v2 d
  398.   }9 t: N: a! \  @& |3 `) u8 \! @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 N- N9 H, [" p& y1 b5 s6 j4 F. R
  400.   {
    9 K  L* n" O5 J
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 B6 G2 }9 d* i) F
  402.     {
    : \: ?/ r8 @  C1 ~. j; l# \0 D
  403.       file2=(LPUPDATEFILE)(*i).second;. t( d. {+ Y- O/ l
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : B1 f9 C: `' o) T
  405.       {
    / l4 A" [0 S" T0 g% h0 |
  406.         file1=(LPUPDATEFILE)(*p).second;& @" j8 P) Y9 ~4 R' e
  407.         if(file1->vers!=file2->vers)8 i7 R  c9 W, e4 |3 l4 u
  408.         {
    1 V+ I' Y6 h2 C  @7 C8 f4 l
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; y4 y: U; A6 `& X3 m! M
  410.           c++;
    ; T6 x( S; Y( r4 T/ }: K7 O( y' C
  411.         }
    3 r% ^, I8 C. N# c' D8 v: W
  412.       }
    # L: i; r8 @6 R/ m, B* |
  413.       else
    * d; m2 q, b2 j. s/ B8 [' c
  414.       {9 d% R6 z  P( k& d
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 i/ P' B# T' g. ~, D4 p
  416.         c++;# o# Y' I! O. O7 G; T) y3 O- U; h
  417.       }
    9 {  g8 F0 l1 V" w, V) C
  418.     }
    2 w) ]: N9 `) t) K
  419.   }
    " g: k0 P1 ^' [" [
  420.   unlink(".\\DownLoad\\update.txt");
    ; j0 Q' k  z& U, E' [2 T
  421.   if(UpdateLocal.size()) return TRUE;+ N" i$ `! A7 @; f! @* p$ Y
  422.   else                   return FALSE;( k8 t( _* O! G. X, F/ F  ^
  423. }
    " y8 H' b  U3 t" O4 Q  C

  424. 7 Q, }; D9 q4 I  i, S
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"1 Y4 {1 g! o2 x" H% o1 d6 W
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"8 r( P' k! p0 d, @8 J/ z

  427. 5 H# x, z% Y/ v# |3 V

  428. # j7 `9 g9 n9 }8 X, G
  429. : O& R2 h5 u" r/ V5 D
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    9 l3 ^) k- P$ g( |' [
  431. {
    : a+ J8 r" C6 o
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    # K6 j: K' o% b$ k! x; k/ Z5 v
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); L7 H$ ~& v) ?
  434.   {0 n- y7 D, t  s  ]
  435.     char szLanguage[50];* `) V6 w7 w1 R' v9 ~: d
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, s! G7 I% o  Y1 |! n
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 F# w- s) e! N1 ], B: r
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- r9 _- p. ^' Y$ b) W
  439.     else                                   m_iLanguage=ENGLISH;
    / P3 v2 S2 x" ^* I* b4 G
  440.     char szRegister[100];
      d( \4 {) s. ?. F; m7 O; ~
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' `, B$ l6 @  k
  442.     strRegsName=szRegister;" G& o$ s7 X( k! M
  443.     char szPatchURL[100];
    5 X+ @) x0 \0 d) }" @3 ~4 G
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * v! X1 v0 w1 Z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" S8 S0 Y6 r6 |/ M7 V. [4 z
  446.   }$ `. s# F2 J4 w) W# ?* S2 N% C
  447.   else
    - {; k/ D) {3 Y* d
  448.   {9 P# o: m3 ^3 A' m
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- Z! o3 S8 d( e- I
  450.     strRegsName=DEFAULT_REG_URL;
    ( I+ S2 u2 X. O: L7 v& `% [
  451.   }
    4 D' b: p, q* P8 _- b0 M
  452.   if(GetFileAttributes("hosts.ini")!=-1)' g: ?1 u8 c0 v8 ^2 y
  453.   {9 l5 p+ ?" n: l+ ?0 f
  454.     char szIP[50];3 f. X; _4 U/ ]& v
  455.     char szDIR[300];2 f4 P" j& `  D- Z* A% q( o
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))+ z+ P- O0 x! D% d) f
  457.     {
    2 D# r- Q1 R5 l- k
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    / c( _8 ]& G6 i$ M2 i
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");8 u# S- `7 i( H7 S. f
  460.       strHostName=szIP;8 \: g0 ^3 v. P5 v: ~3 K0 v" k3 J
  461.       strHostPath.Format("/%s",szDIR);% C0 r: _6 M' R, H& b! x- n* Q
  462.     }: V( n* [. [4 x! a
  463.     else
    ! U  q! W6 K1 J% n$ z- }' g' D) V
  464.     {2 a& A* A! e; W9 }& K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 a  ~$ O- u: y4 ?% m! T
  466.       {
    " J+ h$ i1 o+ \! H) O- V
  467.         char szLanguage[50];
    ( D. R1 k  b) r% E) ^
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* n1 m0 M/ ?2 g& Z# D, e9 R* L
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' p: Y$ R& X8 G2 @( D5 \- Q) b
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # A) `. L5 C  X/ b2 F
  471.         else                                   m_iLanguage=ENGLISH;: L$ g5 i8 w  E7 e
  472.         char szRegister[100];
    3 h( P$ M) G, V) I
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : I' A2 ]# U* P' \0 c+ w
  474.         strRegsName=szRegister;
    0 K+ C5 B: \$ K- |5 Z% \
  475.         char szPatchURL[100];# l- L) ?$ k* ]
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / g/ N! O7 o. W
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  y# [! ~/ r: y) L+ o% y
  478.       }
    % d4 n! j' @8 C! h4 d/ N' L9 E1 t
  479.       else
    5 q8 C1 d. {  C% }& U* s
  480.       {3 v( `* V: j+ W3 ~  |
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 f& m# w6 Q& T% u
  482.         strRegsName=DEFAULT_REG_URL;7 @4 c6 s1 k: T' ^! H
  483.       }
      w8 X$ {, G! Q0 j% {8 |8 d9 G2 H
  484.     }/ _% o4 D! {  Y; B5 ]) |9 {
  485.   }2 m- m/ W$ g( e3 b* [, Q! X
  486.   return true;
    1 W$ K6 y/ k. o# j6 J2 O
  487. }
    ; E0 O1 T4 V3 ]% O6 g; m  Y

  488. 9 S0 C0 N0 h" e/ j# F. p
  489. #include ".\ZLib\unzip.h"7 N7 x- u8 N7 E1 F! O9 W5 p- u
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# F4 E+ x) o0 H5 I! ~) W
  491. /////////////////////////////////////////////////////////////////////////////
    4 h4 x! O5 P- Y- R' e0 m
  492. // CRevAppApp initialization) V: J5 p5 Z, W* d* w
  493.   E: ~* n& |. c% i" q$ i! ^3 j
  494. BOOL CRevAppApp::InitInstance()' V6 W/ w  @8 I  c' Q, Y
  495. {
    + {& ~& k  ~( r) T
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];' r+ ]# A8 m9 t: T
  497.   B2 V7 G' p7 r
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' L4 {. H2 @3 ^& g8 n* _: X! I
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    / c6 m. V& M1 {1 y' K! j+ d
  500.   {
    6 T5 m" y! f9 B+ i8 N7 B
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");; `8 \) r/ S1 M
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 v, \; f% ]7 W! y7 @
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 ^6 Z7 |6 b6 m: I3 W% L
  504.     {' O% ~' a2 N& b7 f
  505.       strcpy(szPath,szPathTarget);7 _+ X7 W( D* E& F, u
  506.       SetCurrentDirectory(szPath);, _: H' B) k3 r8 M
  507.     }  C+ ~; @) V; @7 [: u
  508.   }/ O" o2 Y9 W+ W) h5 ^- g
  509. #ifdef _DEBUG
    5 D( }( n/ D6 d) L0 O: t8 C
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % A0 z$ r1 x  w8 F- S
  511. #else
    + _0 i) J" G; A/ y# @
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 |1 {% Q/ v9 H! s4 M5 T
  513. #endif
    ( \% h% T% Z6 S( _
  514.   {# K" D, |& S2 f0 I& \
  515.     char tempFileName[MAX_PATH];
    & d1 {* i7 t+ A; c& ]3 O+ l4 \
  516.     strcpy(tempFileName,szPathSource);- R8 q* M; }* w1 G+ i
  517.     tempFileName[strlen(szPathSource)-12]=0;* d+ X1 Q: A3 K  n+ @7 R8 A8 c6 F
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    . q  t! M! B: |% B/ c$ u5 o
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    5 }! v. U! T1 a6 q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);/ U; {( U% O: }$ c. U0 |
  521.     return TRUE;" @6 J7 t$ J; v7 R5 D- S
  522.   }
    0 }* o2 Z! @; e' E4 t9 b
  523.   // Nuke 0118: Delete run.exe+ F1 B4 f: Z; D
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );) o( d) f% J/ W( C: c9 z) D, D; w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");3 H$ z4 E6 ^) `; T8 k$ K3 F
  526.   if(!ReadCfgFile("Config.ini"))
    . y( V8 @7 Y$ r" T' _, R9 I
  527.   {, R% i  S( |) w
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    " ~( y& W" Y' w+ ^. W
  529.     return TRUE;
    % D0 {) u( ?2 p3 F
  530.   }* g! ?( _: y3 I8 v2 X7 }% d) z
  531.   HANDLE mutex;
    ! q' j( u6 @2 I: {" I
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))1 t) y. j, W8 O! ]" ^
  533.   {
    0 G) t/ g" q" Z4 n
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    8 p4 \/ O- y2 ^5 B+ b. o. Z# F
  535.     {
    ( J% \0 X, Z; M( U( W, ?
  536.       CloseHandle(mutex);2 Z+ x% T' w# F" L# \/ r: b
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    - t. F- P" O9 O8 y/ r* T! |
  538.       return TRUE;
    4 B# g" }1 x" \4 y
  539.     }
    - u( N3 c8 }5 j+ t* ]0 a7 Y3 i) s4 Z
  540.   }  
    9 X( a8 T( y6 M* l8 t( G0 ^7 t
  541.   CloseHandle(mutex);$ p* a1 p% s8 `' s# z

  542. 1 ^9 L# `+ e' P3 d" P
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    7 y6 p7 Q  E! E( c* I
  544. ' ?/ e6 O. l! W. D
  545.         AfxEnableControlContainer();; b# ^, z# m, l9 C

  546. " _) F# u6 E; N( a# s* E$ |$ M
  547.   bCanUpdate=FALSE;
    " s: y  }. l1 n+ E% @
  548.   dwStartUpSteps=1;
    # l$ F, z6 b1 L( @! o4 h
  549.   dwProgramState=AP_NOTHING;! q  X6 G9 j/ Z9 b2 D  |" V

  550. / ?( S- }+ j0 q2 Z! G
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);8 v. w+ m7 ?+ L( h/ Q5 q
  552. . M/ z5 d8 o) i9 D# h
  553.         // Standard initialization) ~4 X* L& Z" K$ N& m  J7 Z1 }8 _
  554.         // If you are not using these features and wish to reduce the size# l9 J, O6 Y5 o& B7 Q2 j3 g) b5 F0 v
  555.         //  of your final executable, you should remove from the following$ a& p8 }- M5 b6 L. X7 `. K
  556.         //  the specific initialization routines you do not need.$ }3 t3 D) z% S

  557. 3 G( W0 o6 x8 ?# a! G% f6 Q
  558. #ifdef _AFXDLL
    5 _4 [3 C- R$ c. T
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    $ N2 r6 D/ k' Y9 E
  560. #else, g) e0 _; ]' n( _' S+ _" t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    . y; @5 _0 k- |$ a% g
  562. #endif
    3 N  Y2 z- k+ |9 R( M, s5 |/ |

  563. 6 `" t: Q# i% x& l3 R7 Z
  564.   dlg=new CRevAppDlg;
    4 M0 G  i, H- Z$ m9 @6 T0 V8 j4 o5 Q
  565.   dlg->Create(IDD_REVAPP_DIALOG);- T8 x; e8 t" @( d; R
  566.   dlg->ShowWindow(SW_SHOWNORMAL);% E4 r( w( o1 V& ^' i% M
  567.   m_pMainWnd=dlg;# C' ~+ Z; n2 m' t. y9 g

  568. 3 Q7 e) U/ N: W6 ?# {* X) u2 W
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);6 l" c& Q0 _( h" ?6 C7 t
  570. * x' ]4 A" c8 o' W) h. \
  571. //  GdiplusStartupInput gdiplusStartupInput;8 x+ ^' d% x8 h
  572. //  ULONG_PTR gdiplusToken;
    ' I0 J. J! ?! X0 t6 |) ]' U% x
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ( g- i" u" @- c8 J, Q* p
  574. - N5 H9 y8 z6 U3 |6 |2 L9 {: p
  575. //        CRevAppDlg dlg;) B- l# t* U+ p" _7 H# g" Y. l+ x
  576. //        int nResponse = dlg.DoModal();
    : h3 p# z* k. D  f& q
  577. //        if (nResponse == IDOK)/ e9 u: s/ e4 A! u2 v6 |- c
  578. //        {
    3 L5 ]$ y' M( f2 _8 x" v% P- @
  579. //                // TODO: Place code here to handle when the dialog is
    8 F; V' E* Z) v- u5 K
  580. //                //  dismissed with OK
    $ N  p$ g1 R4 f' c. m! ?9 l
  581. //        }
    8 w( u' K! d( K& h& w. {( \
  582. //        else if (nResponse == IDCANCEL)
    + o- V' D  O5 n4 @8 u( P4 M
  583. //        {4 m& E; q7 }3 L) ?
  584. //                // TODO: Place code here to handle when the dialog is
    $ a- D! O% ^0 y7 M! D
  585. //                //  dismissed with Cancel
    4 r& C! m- @" h1 ]/ m
  586. //        }
    3 L' `9 u4 s/ W. W8 ^# {! @' y% R

  587. 7 }4 x3 O) _& _8 ?4 i. g( Q
  588.         // Since the dialog has been closed, return FALSE so that we exit the9 V: q. `9 ~8 S% y+ v
  589.         //  application, rather than start the application's message pump.4 Y) m1 u+ L2 Y: X
  590.         return TRUE;
      b6 `. f% @5 w1 p4 t3 Q* L
  591. }" x; F* U3 g' b7 w

  592. & A# @. k8 G! P" t: f- h" ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ) N5 S) A% r# p+ e$ S: F" m
  594. {
    " |+ e1 x4 K4 a9 Q2 g- N$ h  O
  595.   int i;
    , c2 I+ W0 X: m& J
  596.   char *szRet;/ Z, M* d3 I$ C, u1 b0 d' G
  597. ; ]* Z( d' G$ Z) W6 g1 l6 j6 D
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    + E. \- N9 E( T9 T' O* K% R
  599.   if(sztoken)6 j* K) B8 F7 q& k; _2 W
  600.   {1 {) W& n8 ~+ F+ W7 H* F& i+ A' u' X
  601.     szRet=&sztoken[itoken];
    ; ~1 b4 A. J; D" l5 [5 J1 E2 e! e
  602.     while(sztoken[itoken])
    - J7 A1 `+ N/ V' m7 h( c
  603.     {
    ( N& ^* }" N3 o
  604.       for(i=0;i<(int)strlen(token);i++)
    7 F" A$ H& S' p
  605.       {- i  E- g( t+ @. L; S# e
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]): e' s6 T6 V# ~! G8 l. J' T( [
  607.         {
    ' w: {, {, p5 P3 S8 i/ l  s
  608.           sztoken[itoken++]=0;* w" U- g# V5 B2 R( C7 _! j
  609.           sztoken[itoken++]=0;
    6 U& c- F" U& P% I  Z
  610.           return szRet;
    0 x7 a2 p9 `3 Y5 F; ]
  611.         }" v4 c# C  h6 m
  612.       }' Z+ j0 s# k( q4 x* W' y* T
  613.       itoken++;5 w- V" S4 {# f
  614.     }
    / ~# N5 M# k. D+ Q
  615.   }
    ! T9 G# B9 m' k2 o5 n7 J0 O
  616.   return NULL;
    / g: i$ R7 t) l2 ^4 |& u  X
  617. }
    4 t% j. o, |/ m5 C; X# i6 t

  618. % r3 i; M' I2 F- t5 ?8 }
  619. void ProcessProc(long Total,long Current)8 M7 }/ _3 N, D  y
  620. {
    , |6 t. y* \; i( @4 R5 L
  621.         MSG msg;
    6 C! l0 [1 ^& b9 @  ~
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 I) ?- J" q/ Q/ n+ w) S' M1 F
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' d2 f( k  B, Y5 I) {8 Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))- ~- |3 n6 O4 _7 J, u6 @, L2 \
  625.         {
    & y  X+ F1 s+ {, x# c5 s; S
  626.                 if(!GetMessage(&msg,NULL,0,0))
    $ d* x( _5 |6 M! {( f' `
  627.                 {
    1 m% I& @- p4 A" ?; \. B
  628.                         return;
    & z3 z, U4 s/ ~% g2 d4 P
  629.                 }
    & q8 A' b( I3 H, H, A
  630.                 TranslateMessage(&msg);$ Q+ H( R2 B) A' A
  631.                 DispatchMessage(&msg);% V1 @* w2 u5 i5 X& R7 R; X+ [
  632.         }        0 b  G' l1 C1 v' y& i+ m  q' J3 H
  633. }
    - f9 m3 G: T: W9 s2 r5 E$ u& i; b
  634. : I3 X% O3 n8 N% l9 |4 g
  635. BOOL bFirstChar=TRUE;& E0 Y* T$ ~* _

  636. ' J: n4 ]; C& y/ G
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ c% {, y9 V8 P& _4 `
  638. {" f: S. w" e- H* {2 m  i5 o( _
  639.         // TODO: Add your specialized code here and/or call the base class
    ) U( d# `- k% R6 b# x* d- }; g
  640.   switch(dwProgramState)
    ( x8 P' |$ c- n& h
  641.   {
    , i, m9 W8 Q% m7 K* x& C6 J- \
  642.   case AP_NOTHING:' m- H2 L. R+ ~( G
  643.     switch(dwStartUpSteps)& ?- t- e# a+ I8 m$ i. A
  644.     {4 \) O$ g5 Z( X& |, y; E' i$ v
  645.     case 1:
    ! `5 s3 s' \: x! J
  646.       {
    , v7 M- c7 L5 h  y- v% ^
  647.         int i;
    0 `9 @% _# O$ {. e
  648.         CDC *pCDC=dlg->GetDC();! Q1 o  f0 z7 M3 H2 Z
  649.         HDC hdcwnd=pCDC->m_hDC;
    % \& n/ n& ?) N; u& O  t0 U
  650. //        Graphics graphics(hdcwnd);
    * `7 G% t- F8 g) M5 r
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    2 U9 D* e( K8 m; L  V. |
  652. //        INT iWidth=bitmap.GetWidth();
    " }/ }. w9 u1 a8 d4 ^. M+ w
  653. //        INT iHeight=bitmap.GetHeight();
    . s' O* ^8 M! H
  654. //        Color color,colorTemp;/ U: ^- ]3 A7 |4 y# m0 |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    , P& m& U6 _( H% b# C9 O
  656. //        {8 u7 B- d. W: v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    / l  L1 w. @  \* R" m
  658. //          {
    & [, d" o9 O1 a. Y! g& N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: Q3 L+ q7 V$ s
  660. //            colorTemp.SetValue(color.MakeARGB(8 D, e8 T& t8 Q+ L1 Y* P8 |4 F
  661. //              (BYTE)(255*iColumn/iWidth),; b" R' L# }) p1 {
  662. //              color.GetRed(),1 r6 ?, z) ^9 b
  663. //              color.GetGreen(),
    + u$ {, t, I9 X# I2 U. K3 k" }
  664. //              color.GetBlue()));
    4 J, ~5 w3 |* f; o( v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);4 C0 S1 e8 K0 _9 P6 q
  666. //          }
    ; ^- z7 O' f; @% |
  667. //        }
      {" S* g4 K+ \) b6 l: }$ X! m
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    : w6 q3 P* u1 o6 ]- X7 n
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' `0 T+ D8 r; P+ l( L3 _% \
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # }6 e* `! l$ E5 ?* u$ g+ Y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( Y9 P: Y0 w, n, c
  672.         for(i=0;i<240;i+=8)9 ^. C3 z6 s! C$ _, J- t3 `5 h
  673.         {) |' B7 e, E9 Q7 l; ?5 P
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 D2 W- z* x* U' H, W
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& f$ |$ a8 Q5 V, {7 i: g) K
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      A7 V, }! h1 _' X; `0 N
  677.           Sleep(33);5 r# L) H3 Z4 X& }
  678.         }
    + I( ^8 J. @# I9 X8 M, T3 D+ }3 l
  679.         Sleep(1000);
    ) {: T* }* c5 H0 L3 J+ j7 f0 k
  680.         for(i=240;i>0;i-=8)
    2 u4 p6 {, P/ ^5 H
  681.         {! x7 z4 b) A9 o( h; G3 J$ U
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% I4 H& w. _% I
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    8 s2 c( w; C/ n0 h4 A
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- Q5 N9 v0 g0 Y1 h0 ?" f3 e" V
  685.           Sleep(33);1 V1 I( X/ m* p; x6 w1 u6 r
  686.         }. y* ?- {2 v' A% u( M2 F
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    / o) `4 L3 W# [9 U+ E
  688.         dlg->ReleaseDC(pCDC);+ }1 }1 _; c' |5 X
  689.         DeleteDC(hdctar);( R9 e, W# u$ _, o/ e& o) `' Q+ Q
  690.         DeleteDC(hdcsrc);
    , o$ l: R8 s  `% T" }* f
  691.         DeleteDC(hdcorg);
    . s6 o+ J- J& ]; O6 m( n
  692.       }
    , d+ R4 T; h8 A( f
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    & M) H( Q3 E# \, }5 E1 y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' b2 w; C8 D! _; ^' [  Z8 c
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, y+ F# R2 X$ X+ j  x0 N0 o
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ! {, V! j$ x2 b& R8 U1 @+ F. q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 o# z' m2 `, ~5 H7 i/ [* @3 T
  698.       if(!Dn.Connected()); c4 t5 V8 \/ t) {, B! _! ^1 `
  699.       {
    ) C: J2 M* y( \4 f6 F
  700.         dwTotalFiles=1;
    " E2 k9 a3 h. e  D
  701.         dwDownLoaded=0;
    / O3 C. Z+ J9 N. z, h+ G" L) W  _
  702.         bSilentStep=TRUE;6 x5 v* h6 q( ?- Z7 h' G0 v
  703.         bCompressed=FALSE;
    . x$ z5 `+ R# |) z' c
  704.         strExtLocal.Empty();
      C! Z" x7 d9 U3 L6 x. G$ Y
  705.         strFullName="readme.txt";
    $ _- A# T* J& A1 e9 ?
  706.         dwProgramState=AP_CONNECT;* |( G& h" V8 d' `
  707.       }  L6 p0 V* _8 o# ^: p* n  e( Z
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    " E3 u+ F* A7 v
  709.       dwStartUpSteps=2;
    6 V$ ?. V" I3 H) c4 l
  710.       break;
    % R) q" y3 \) o: S1 }) B. ?
  711.     case 2:, w# {( d, L" l/ K
  712.       {! K) _4 |$ N* t' Z
  713.         int iEOF;9 p6 P, @5 [7 J( P4 d& Q& p! u+ U. ]
  714.         FILE *fp;
    ) E- X) r7 ?8 m
  715.         char szString[512];* ?4 a: m; g0 w0 A: Y' E
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    % M' S4 V. ^3 L! a: c9 g/ p
  717.         if(fp)
    ( q0 N! r0 Y6 i6 ]% O  J
  718.         {  ^! e8 K9 L. b; s0 \  W% t5 @0 c6 G, a
  719.           do% l1 H; X7 v7 x! ?  G/ D, v0 V
  720.           {
    1 h, ^3 H: B) b, [
  721.             iEOF=fscanf(fp,"%s",szString);
    6 b" D4 q# h$ l, m% H
  722.             if(strlen(szString))5 h, Z; L; b: W: f* `7 x8 o
  723.             {
    * I. b6 P/ t/ j* E
  724.               if(bFirstChar)4 G! n; Z+ W$ U' z
  725.               {% m, X- y! J, |5 ], H
  726.                 bFirstChar=FALSE;
    2 q% W/ c& r7 N% X* Y% W. }
  727.                 bConnectIsBig5=FALSE;% i- y# D' f: r  ?9 M) W7 M& s
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! S% x5 J4 s! F' a
  729.               }) j3 H7 s; H5 J3 d! o
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));' m" v$ A) y0 k$ i
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ( S5 p' ~5 v1 t) S2 l
  732.               dlg->m_ListText.AddString(szString);
    5 L8 h. B5 |: n5 M- d
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 y: R1 h( P& G9 u# F
  734.               *szString=0;
    7 t' {4 b) g) _6 B! _
  735.             }
    9 T/ d; a7 L$ R$ m6 t1 ]" @
  736.           } while(iEOF!=EOF);3 N  o, q0 v# X" M+ Z3 e5 s
  737.           fclose(fp);9 z. ?, T, B; {$ `& `
  738.           unlink(".\\DownLoad\\readme.txt");
    % @0 ?, M8 [; j% L8 o) Q
  739.           dwStartUpSteps=3;6 a5 Z/ A& D9 k7 z; ^
  740.         }3 {8 z0 v# E4 L: \" Y" \
  741.       }# B1 F4 N6 j9 u7 j; v
  742.       break;
    + Y% z2 j1 q* g% }3 q
  743.     case 3:7 P( R7 ]" u6 B- n! Z5 l
  744.       if(!Dn.Connected())+ o& O: ], P7 p" l8 a" w! J
  745.       {
    ! L: ]" ~  B- j; u6 k
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ! {9 v' A7 n8 x8 u& @- z1 l$ n' U
  747.         dwTotalFiles=1;
    6 a: @- g  {$ C4 h) j
  748.         dwDownLoaded=0;/ g4 Z# P: ^2 d
  749.         bSilentStep=TRUE;
    6 O' u8 D5 |6 x6 [
  750.         bCompressed=FALSE;* o# l$ E2 P: b+ g' {/ f8 ?
  751.         strExtLocal.Empty();
      e: W4 h  W9 ^. f
  752.         strFullName="checkversion.txt";
    1 X% i4 q4 v/ F1 |$ K! R
  753.         dwProgramState=AP_CONNECT;/ q5 M4 U! ]6 b8 p! k9 C3 |
  754.       }. X, l& v3 b6 h2 [' a" O2 ?& J( U
  755.       dwStartUpSteps=4;/ w% N) H9 X1 {1 n
  756.       break;& Z" l$ t* A# B( v$ [) Z$ P; M
  757.     case 4:
    - h+ d( k" x' v% ]5 f
  758.       {
    6 M  d4 w! x6 t$ q5 b
  759.         FILE *fp;0 ]1 l( K+ ?% I  e9 H! ^
  760.         char szString1[128];$ U) S7 |/ t2 r
  761.         char szString2[128];5 m: ^1 E! r1 m( x+ k
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");, |; f# e+ [) l+ R9 Y9 v$ j) w$ I  U
  763.         if(fp)
    1 z1 K8 p0 [/ M0 @
  764.         {( T0 D  x  [+ `, _+ ~* \
  765.           fscanf(fp,"%s",szString1);6 t6 p. m6 j. Q
  766.           fclose(fp);4 g: [# Q( J  B' @5 I+ W
  767.           fCheckVersion=atof(szString1);- e  ?+ l- Z7 a/ [$ I
  768.           fp=fopen(".\\checkversion.dat","r");
    # e* e3 _, Q5 R% j" r9 x
  769.           if(fp)
    % Z+ n, L! ]3 W. g
  770.           {
    $ u0 E5 x/ h2 }2 U
  771.             fscanf(fp,"%s",szString2);6 i# q+ k/ p+ Z3 D
  772.             fclose(fp);
    0 v: R3 S" e3 P9 f( M9 Q
  773.             if(atof(szString1)!=atof(szString2))
    ) h+ c0 `; E2 K; k- u
  774.             {
    ) U# |2 m) Y( N  G) J& x# ]
  775.               if(!Dn.Connected())  ^: h9 E4 @+ n' r* s6 T9 W
  776.               {
    / Z% f$ }% m6 W) I
  777.                 bFirstUpdate=TRUE;
    ' i" \) }: S( c( R! S; s9 ?6 |) o  F
  778.                 dwTotalFiles=1;0 l$ [5 G1 X; j
  779.                 dwDownLoaded=0;1 V3 [5 r( G$ \$ y  |5 U
  780.                 bSilentStep=FALSE;
    ) |3 O2 K' x" M, H) E/ L
  781.                 bCompressed=TRUE;
    : ~9 K: l7 [. I& W; d
  782.                 strExtLocal=".\\DownLoad\";
    ) E, |" [1 y# w( {) J6 k5 f
  783.                 strFullName="update.txt";
    5 q' C* J0 ~( ?8 K# Z/ H- G
  784.                 dwProgramState=AP_CONNECT;
    2 J" k7 l1 u: A8 d: a" n8 M; V
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- l. n) @* `7 e! J; ^1 n* y: f
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- R  l( i# d1 M$ a
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");  ^& U6 {2 F1 i: R3 Y% V2 q

  788. * b& k1 C0 h7 T4 J! C
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . i0 Z, N! F" W+ `  q% e6 \
  790.                 unlink(".\\DownLoad\\checkversion.txt");2 @$ y% W9 A: x* A6 Q* V* b
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    " N& [& g% h4 `% T' E
  792.                 {% e  X2 V# y4 h  w$ I
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");7 d# S: h' ]# v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" n* |  \- _$ J9 X" }
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    # D, h* K# i9 H: j
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 f4 ~+ ]5 C: E6 @7 n
  797. $ H$ F2 t" b8 [! l. S  t
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  c" o8 b$ _  u: w  r* J' u
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & ^1 O7 j" ?( Z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");- U% D+ X! O& m+ S2 F4 ~; ]/ H" p
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 D* [$ n7 I% \6 g1 E
  802.                 }
    1 E( Q1 Q9 H& D6 Y9 f" S6 e# I  G& o
  803.                 dwStartUpSteps=5;
      A0 `! K  V  ]9 d7 v. a/ ^, E
  804.               }
      y5 O  W: l1 l, _! j
  805.             }2 k3 Z& J$ s2 U% p7 a2 K
  806.             else
    8 q. _5 [, s# p1 R; d& M* [  o5 c
  807.             {
    $ m% Y, r% Q7 j% R$ S  N. p/ v; H8 p
  808.               unlink(".\\DownLoad\\checkversion.txt");
    : `1 L  [4 f7 Q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: {. p) b  X' f% j( W* `
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    0 ?. U7 c! O2 ]  P
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");9 y1 l# O0 Y6 w, w7 ~
  812. 8 P! ]- M5 w9 O6 E7 ]
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - q: x% Q+ w( K
  814.               dwStartUpSteps=99;
    ! z( F( c$ W. D- |8 T0 T' @) @
  815.               bFinishUpdated=TRUE;5 u6 e, M8 u9 D. m: a
  816.               bCanUpdate=TRUE;& S/ `7 w  Z3 Z- x: g* |- t0 X# o4 l8 s
  817.             }' G4 H1 x( ~& e
  818.           }) A" I5 b# {' f. i; {
  819.           else
    ) z$ G2 P3 ?# J7 ]* B
  820.           {$ y: F. d( Q' E+ j8 A( b' T- y
  821.             if(!Dn.Connected())
    " h5 |6 b" A  l4 |9 E. d, d
  822.             {8 g  ~! ]( m+ J8 Z% d8 H
  823.               bFirstUpdate=TRUE;8 P  \# k1 c6 D- h" V# D4 u
  824.               dwTotalFiles=1;
    1 x2 [- x' \9 m% V8 |: ]3 P
  825.               dwDownLoaded=0;
    . o8 B$ S3 o8 q* {
  826.               bSilentStep=FALSE;
    - B- w1 ~% R$ z+ ~: y8 C. z
  827.               bCompressed=TRUE;/ g, y6 a+ o2 h# @
  828.               strExtLocal=".\\DownLoad\";
    ( P6 H# B  Z) c  y5 d0 u
  829.               strFullName="update.txt";. E, ]5 e* o. _! K0 {2 Z4 h" k
  830.               dwProgramState=AP_CONNECT;3 ^$ `$ ~) o3 O0 U! j/ ^
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 [+ G6 E* `- z3 ~  p* n( u$ `2 }  G
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 i# r( b! g8 t- C1 J% y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");1 z: H* o) d* T$ ?( E+ r
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 [- _3 k, }9 J
  835.               unlink(".\\DownLoad\\checkversion.txt");
    % G  m4 N) V, \9 [6 r0 d, ~: v! Y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ! r- _8 D3 i- F& c& A6 r
  837.               {
    : f( ?; L1 b* V& u0 E  n
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    % o& u/ D* P* g2 m* H& ]0 @, [
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");$ L! w: ~5 x- K: K8 v/ y/ F8 [
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ! j& P! K7 r% y1 S/ L- l
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 m' Q  k9 G" Z. K. f" D: ^
  842.                 5 m% @1 N: w8 l/ Y
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    8 U) l# p& M4 F7 G- g1 S
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! s- D$ w6 C2 S: j9 z
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' _- Z. T  ?9 q" q
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; \) G4 w8 w1 l8 C, J
  847.               }
    * l( n) E6 \8 ], Y
  848.               dwStartUpSteps=5;
    2 x+ x4 D) `% L; T
  849.             }
    5 L0 g2 @6 w4 y! f! W9 a
  850.           }. [0 @. i* x. k; D! y% \" ]1 D3 k
  851.         }
    9 V7 D3 x+ G7 i1 L
  852.         else
    # j. `( Z8 M& f4 v9 K* D; X. m
  853.         {
    % Q7 L4 Z8 I8 |  F9 L" V
  854.           dwStartUpSteps=3;2 r; i! M( l7 e; Q. a1 b+ u
  855.         }! y2 X# R: r, ^* ^; M+ N  v, l
  856.       }
    ; {" M. v/ V6 Q0 ~/ A8 L9 V+ V' R
  857.       break;! Q; ?% H$ T/ Q3 A5 ]
  858.     case 5:
    & X4 Q$ J( U0 X- a1 z2 f
  859.       {, l8 x! D6 Q0 V  R1 K! C
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    % M& h7 d1 ^' B* G4 ^. h# M
  861.         {
    7 ~. P, O  K" J8 g6 J( h
  862.           int opt_overwrite=1;4 p/ i$ x/ J( C
  863.           int opt_do_extract_withoutpath=0;
    3 l. w4 I4 [4 ~0 ?, a3 z9 H2 r
  864.           unzFile uf=NULL;
    ' |5 |1 [1 B, r9 b: k( W4 y. b4 ?
  865.   c# u2 V  l( G* Z4 o& s7 N5 V: M
  866.           uf=unzOpen("Wsa.zip");
    ' _/ ~$ X' o( Y1 C6 e0 c7 h1 u
  867.           if(uf)
    * q' o& |  e2 O; @
  868.           {1 f  f2 t! L8 B
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    , X9 o- I3 q6 a+ T
  870.             unzClose(uf);
      t% V/ o; H; L6 |& t
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    2 B' R) E% V, D5 c% V
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");5 ], z( b/ d, W2 L8 c
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    & R/ d# L/ t/ y0 W  Q; L7 U, d
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 h$ i; ~7 A$ d1 \3 S, ]1 [
  875.           }3 n6 b# Q% X+ i4 p: m
  876.           DeleteFile("Wsa.zip" );
    0 I* S( F! i; q0 I0 [) `* {
  877.         }% h2 f0 N. Q1 i4 a

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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