找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
4 v, O' ?( G) B
  1. / RevApp.cpp : Defines the class behaviors for the application./ r0 i0 v0 e9 C3 f/ o$ z1 G$ N% Y: ]% s
  2. //
    ; q6 t% |) h5 Y  N
  3. 4 I3 Q$ J3 u4 o) q3 N- G
  4. #include "stdafx.h"; O/ O% R+ F6 E" _& d# X, U" g4 D5 j5 w

  5. 7 }6 |1 g6 ], V
  6. //#define UNICODE+ ^+ k8 ^" ]* e& u  e2 \
  7. //#include <gdiplus.h>9 L5 [( d: B( B; J( z* ^  U: l
  8. //using namespace Gdiplus;. @3 \" \7 x0 [% |7 m

  9.   r' A. f: a+ p
  10. #include "RevApp.h"; i+ f5 y3 b' F: H7 |0 R1 L0 ?
  11. #include "RevAppDlg.h"
    6 s# w$ i; J" H0 D: o
  12. 9 v- W8 s6 L3 |0 t
  13. #pragma warning(disable:4786)
    , y0 R& P  C* e& P- j0 f6 m" m
  14. #include <map>/ |7 S5 t# ?6 e- ~1 N) t/ ?9 @4 @" |
  15. #include <list>
    1 Z+ S5 O$ V* m/ H+ C7 ]3 I
  16. #include <direct.h>
    ) v8 c0 w$ o3 [9 R4 S

  17. 7 r5 E9 x% p0 A( z2 H& |  |
  18. #ifdef _DEBUG# |6 n* Q. G0 V( ?  R4 U
  19. #define new DEBUG_NEW
    # p  n. H6 a7 w$ k8 D& |
  20. #undef THIS_FILE
    * s! S/ c' t  p, x+ {
  21. static char THIS_FILE[] = __FILE__;5 B2 x, b) i% L  N1 q
  22. #endif+ Q8 t) |7 r% C9 n  J# p2 ]9 K
  23. #include "SkinResDef.h"& T+ v9 Z8 a, [1 }- Y
  24. #include "ChangeBG.h". N+ U/ C& x' l5 |2 R6 a+ C
  25. #include "AFXINET.H"- p2 O. A6 ~, V, p7 Q) m6 [
  26. % _5 o: f0 K9 F1 y
  27. #define TRADITIONAL_CHINESE 0
    8 m' O2 }/ U9 ]6 C8 y% E# }
  28. #define SIMPLIFY_CHINESE 12 H, q6 O0 ?) O8 N# c) S
  29. #define ENGLISH 2
    % A. ^2 H: ]( j4 x, \; f
  30. int m_iLanguage = ENGLISH;
    2 V& ?+ Z1 O+ c3 y+ Y4 n
  31. /////////////////////////////////////////////////////////////////////////////  D: e! v- Z; X- Z! M( z: ~. D
  32. // CRevAppApp
    $ o! `9 s  a+ d8 F# @

  33. ; L  M* K+ L; b; L: A) e6 r
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    2 `4 X0 k& u- `# J5 s
  35.         //{{AFX_MSG_MAP(CRevAppApp). ~+ m  b8 }* j: w. K" v& |
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    % g, J, a% Z4 i# k& N! c; i6 w
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    + h; z! r' x+ F3 {7 ]7 Q0 o' N
  38.         //}}AFX_MSG2 A6 C+ @& [9 t; |  \$ D
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    $ z4 [* f: _6 m
  40. END_MESSAGE_MAP()
    6 n+ A, Z9 U8 L

  41. " J4 p. K9 j, R$ J, G
  42. /////////////////////////////////////////////////////////////////////////////
    . H5 T$ ~& L( F  x2 s
  43. // CRevAppApp construction
    4 d" E5 @, i- A# \9 R& L

  44. 2 q! h( h8 O. G) j  r
  45. CRevAppApp::CRevAppApp()
    ) [1 _: o0 {6 F/ E5 Z0 I
  46. {( s  R" b3 f5 J5 P: u1 F! m
  47.         // TODO: add construction code here,
    " j* X- Q8 ?7 }5 J
  48.         // Place all significant initialization in InitInstance' b; Y& s! ?; Q5 N2 R4 {6 v
  49.   bDisplayIsBig5=FALSE;6 W4 t# Y1 ]; _$ Z( ?
  50.   bRestartUpdater=FALSE;/ W5 w$ P0 [$ s. D4 n  D
  51.   bFinishUpdated=FALSE;
    : M5 b% _& }7 q; i' d: h
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    # O( g. t( _9 @9 p( Q! Z
  53.   InitChangeDataBig52GBKS();
      X% H9 ]; J% o$ `1 ?* _
  54.   InitChangeDataGBKS2Big5();( ^# z$ B& Z  Y) {' C- |
  55.         //" Q" C! K7 i. Q* @
  56.         bClickRunExe = FALSE;
    ( I0 @; g2 D, {2 Z* O' {+ M
  57.         //* [- h8 p8 [6 T- ?
  58. }
    + Y$ f: Z! t, Q1 K" d" r' H

  59. 0 W7 f6 N, _3 q7 E% X4 q# V2 D
  60. CRevAppApp::~CRevAppApp()" F$ X8 m% E; Q3 i
  61. {
    ) T4 [0 P: A- u
  62.         // TODO: add construction code here,
    / [; W( t/ L& z) ]: Y6 ~, R( h
  63.         // Place all significant initialization in InitInstance
    . o+ l- P" k) E4 h8 ?, V4 @
  64.   EndChangeData();
      f  z( s. w) ?9 A# R) i8 Y1 ^
  65. }
      e  P, e6 I: D; w1 m7 Y+ {0 A

  66. , r0 R% ^* W: F8 m5 `
  67. /////////////////////////////////////////////////////////////////////////////$ e! [" Y6 h5 U& e; D
  68. // The one and only CRevAppApp object
    * z2 J: q' j7 N! v
  69. 7 m# a$ s4 F/ m- }5 B$ _8 _  k. M
  70. CRevAppApp theApp;- J' t  h1 @! w# d

  71. 9 ]# r1 j. ^" y, a1 U! |2 c
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 j% J, L. b* t' x
  73. {! q" O7 C# Y+ n) L
  74.   int iEOF=0;# e$ i6 M" b- F$ m0 x7 }, I& T/ l  Y
  75.   char szTempName[MAX_PATH];
    6 }! R% E; Y+ ]( ?1 I
  76.   *szFileName=0;6 I9 ~' p# |2 Z' K" n
  77.   iEOF=fscanf(fp,"%s",szTempName);: w- d" o6 e: t" r% I; A5 F3 e1 N
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # n- A7 K1 G! R/ z& S4 o
  79.   {# B) T  x- S# |7 u
  80.     strcpy(szFileName,&szTempName[1]);: q' |; _+ v6 ~( E  v
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)5 j/ h8 r! X9 I* k  t# A, x8 Q
  82.     {
    8 ~2 [: Q+ T) ]% }9 t
  83.       iEOF=fscanf(fp,"%s",szTempName);' r. V" E0 q( R, K# a
  84.       strcat(szFileName," ");
    & A& O" G' a* H* g5 E
  85.       strcat(szFileName,szTempName);
    * `0 s6 N1 T$ X+ r8 U$ S! z% m
  86.     }
    1 r; _# n8 k( ~: }  b$ e
  87.     if(strlen(szFileName)>=1)
    5 h' c& l' D- V" m% b; D9 Z! r
  88.     {
    3 \* M5 O2 L) |% S0 k! i
  89.       szFileName[strlen(szFileName)-1]=0;! p) r" Z) u, c( D& K
  90.     }
    # h. L) y8 T0 p2 \, c- Y
  91.   }: l9 ]/ P: ~, L! t: G# Z9 p" a6 Q$ s
  92.   return szFileName;
      V- h( N" r5 }- ?) U6 E; T" t
  93. }0 n% {7 @  p  B% o; p

  94. 2 b/ l0 F, D5 p" q# C
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    $ ^  p1 f6 m0 X: z& Y5 A3 S" i8 V
  96. {+ X2 t' c! y5 ?6 _' [
  97.   FILE *fp;
    0 `, S$ a; t% h) O( L
  98.   char *key=NULL;/ p) }: N* A& B' j/ r( W8 M  l  a
  99.   char version[MAX_PATH];
    * d7 P. q! }4 G5 A& [& J; Z: G0 C
  100.   LPUPDATEFILE file,olds;: U! p& _, `6 t! X/ |' M/ J
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( s" }: K+ r9 S$ V6 [; z
  102. " E! S- Z* [  ]8 l% I$ t" }
  103.   UpdateList.clear();
    ) [. `! s0 s' j( I7 j! r+ E
  104.   UpdateFile.clear();  T: O9 ^& I! P8 z7 @+ Y
  105.   if(GetFileAttributes(filename)==-1) return false;5 K6 X6 J! E  k5 D  W# q6 h
  106.   if(!(fp=fopen(filename,"r"))) return false;1 ^# r- q2 U6 k/ K" \- v' ~6 F
  107.   fscanf(fp,"%s",version);: q& {* X# b3 Z# F/ t
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }: ^" O: j' G' w$ }- c/ d
  109.   while(fscanf(fp,"%s",version)!=EOF); m: k7 e7 _+ Z& x+ @
  110.   {# W! M, t% e' o% U5 L
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" W, v7 t2 `2 m; G* ?* |
  112.     fscanf(fp,"%s",file->path);9 Z$ q( f( h4 Q* A
  113.     ReadFileNames(fp,file->file);) T) ^) R. Y) Z* k' Q0 v
  114.     strcpy(file->full,".");+ @' H+ W- l# c/ L( Y: G( a- V
  115.     strcat(file->full,file->path);* H2 N5 b- o! k% v4 k  a
  116.     strcat(file->full,file->file);
    7 I' ~  S( y# u9 H: L
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())9 x' S$ E) I/ T3 x4 P0 H
  118.     {
    7 e% g4 b: I# q3 J9 W
  119.       file->vers=(float)atof(version);7 m' w+ b9 J" F1 A- d6 {/ j; U
  120.       UpdateList.push_back(file->full);% f) N) G/ l0 i( c# M& X
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));1 e4 k8 r" _: W: _: y
  122.     }
    2 l; z9 c# L$ B; Z3 N- Z
  123.     else- }. h, ^- P: o. `& Y, }
  124.     {9 p- g' m( L: [9 y  {0 E" h
  125.       olds=(*p).second;2 J* `8 I9 Q4 n6 S  J
  126.       if(olds->vers<(float)atof(version)). t  [- T. n3 M2 k% T( o
  127.       {
    1 \7 k: J& y8 U# J
  128.         olds->vers=(float)atof(version);
    $ ?0 C" h8 v$ T7 @  Y6 R0 b6 _4 ]9 `
  129.       }! o" G6 |7 r5 e- V: B1 e0 B
  130.       free(file);! f8 q- Y3 |) B, o* S
  131.     }
    * \$ g6 m2 `1 I( l6 n, w
  132.   }8 M9 M6 L. x. E; j6 M( G' Q
  133.   fclose(fp);( Z7 x' N) q: a7 b
  134.   return true;! F; R! h; m; Y5 d$ S: }$ U, k
  135. }
    1 g5 ^: B3 F. S" K/ j; r* g

  136. 4 s* P5 b( d7 X% o" q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    4 r2 j' i+ L+ J
  138. {) s3 E  w  R7 f& G+ X% j6 @  i6 O
  139.   TCHAR  szFull[MAX_PATH];
    1 w5 J, c% c0 }: _6 V2 K. I- a
  140.   TCHAR *token,*inter;4 v0 N) X% E* }
  141.   *szPath=0;, I! P2 F7 v* S% M" K, A2 o/ ^3 }% D
  142.   strcpy(szFull,szFullPath);" n) [/ ~  Q" z' C5 N) l) |
  143.   token=strtok(szFull,"\\/");( \/ ~9 M# d& ]/ ~
  144.   inter=token;9 @" a, Z" y6 C  j$ Y7 V3 Z
  145.   while(token=strtok(NULL,"\\/"))+ `, Q. E$ x+ _- J1 F) D! r
  146.   {' G  y. k3 G& H; `
  147.     strcat(szPath,inter);
    3 p( L# h( }# q- y4 a: u% O
  148.     strcat(szPath,"\");
    5 E- J  j4 o0 u$ M
  149.     inter=token;/ A' j3 b# |) d2 u4 `, [. I: _
  150.   }! U( k+ V4 S: R  [; E7 u; W, _
  151.   return strlen(szPath);! b8 p# `; q. C7 q! H* y5 {
  152. }
    * n1 j: [+ g" [9 I1 Z( W8 S5 {

  153.   r4 e/ r7 ]% \/ J1 t' I
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    " |7 R: R/ T, w8 N
  155. {
    0 Z9 y- s- n% ~! e0 g% s  ^: `
  156.   DWORD attrib=GetFileAttributes(Target);
    % z( K/ U3 n% }# X  v* o/ s
  157.   if(attrib!=-1)3 s' N" [$ l% `4 }8 H# Q. z- b
  158.   {
    & B# m. ^/ _# w! m* j
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))% @$ R1 T; t/ F% M5 j
  160.     {" `4 k+ {2 e+ f& g7 ]' v
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);0 C5 x" o) S6 W
  162.       SetFileAttributes(Target,attrib);3 V, F: }3 i. z  O
  163.     }
    2 ]: f4 A" x# M( a
  164.   }
    / ~. W$ b) l( I% n# C) A
  165.   CopyFile(Source,Target,Erase);. G* T+ [& Z! K+ J8 d( o3 i
  166. }
    9 c& R! P1 h! K% B  C
  167. ( N: w9 I- H0 t8 D% y* g
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...): F6 Q. e5 v  `1 T' {1 H* {$ c; O3 A
  169. {
    4 l7 o9 r# I: V) w" D6 ^& E
  170.      FILE *fp;
    8 m6 b* D/ |. X
  171.      char  szBuffer[8192];
    # O4 x, }/ t6 |& y; `. f3 [
  172.   va_list  argptr;3 ]2 B* c! _3 _: S# y8 C

  173. - n( b: H/ U, N" o
  174.         va_start(argptr,message);9 M- _" V, _5 L0 b* S" c: b& \
  175.         vsprintf(szBuffer,message,argptr);
    ( J3 m% A+ o6 u+ z; e/ w
  176.         va_end(argptr);3 t) O* l! w* j9 N
  177.   fp=fopen(FileName,"a");
    5 M: a$ T7 U& Y$ u/ k
  178.   if(fp)
    9 E* Z0 M$ d6 H, z- Z( T9 w
  179.   {
    * N% ?$ M; o) h0 v, L0 j
  180.     fprintf(fp,szBuffer);
    / G  Y5 L3 X" W* q
  181.     fclose(fp);
    / l$ a% R" |$ Q
  182.           _flushall();
    , V0 F' s- w1 {4 }, v4 \: r5 Q/ W8 d0 \
  183.   }" U3 V0 W2 f& h  @6 w" l# Q
  184. }
    5 R" E# V2 M4 w$ D
  185. ( M/ X( {' v1 b. C. G
  186. BOOL CRevAppApp::Fclearf(char *FileName)! q, t$ K$ @* E' L
  187. {4 j: Y/ J5 u6 c$ S0 f' T
  188.      FILE *fp;; _5 N/ \3 v& D- W- u
  189.     DWORD  attrib;1 H7 h, e- B. d; K( Q) I# K) o
  190.   attrib=GetFileAttributes(FileName);3 n& M/ h8 K1 X2 h! W
  191.   if(attrib!=-1)/ O2 O  m3 H7 Q7 N: u- N
  192.   {, p! _- K- v- L( p
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    " S; _& \) e( |% O( m+ p2 j0 z; f
  194.     if(!SetFileAttributes(FileName,attrib))
    8 i! {1 N8 ~: o" E& q
  195.     {1 P( ?+ ]7 o4 C1 ]' D* o
  196.       return FALSE;
    7 W+ {8 Q6 |; y! g, Q
  197.     }
    3 ~7 F; m# K0 a: {9 u
  198.   }5 |1 n- U1 `4 |* m
  199.   fp=fopen(FileName,"wb");
      r+ q2 j, n! w3 E* \5 J
  200.   if(fp)2 B/ Q+ n! \* d1 @2 t  X2 C* G
  201.   {/ s5 u1 K& b; r# O9 S
  202.     fclose(fp);3 G: f, j2 s2 k% C- [2 r( H5 y  }
  203.   }4 R! q( ]- y# f0 Z
  204.   return TRUE;( i% G2 Y2 S! H3 h
  205. }
    8 ?4 ^7 G9 K0 T  o6 s* e7 S7 C! R
  206. + m7 s2 F/ n, N! V" C' l6 [
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    " [0 h; l5 |1 X9 Q1 v
  208. {
    / |  E+ F9 ^, |! u. w9 k, I
  209.   char filename[MAX_PATH];
    5 @3 q/ n! Z4 X# Y9 S! I5 X
  210.   LPUPDATEFILE file,olds;
    # y5 H- I1 N. d4 s) h! Z
  211.   std::map<int,CString>::iterator i;' y# n7 _) F0 q3 W; i! G  R
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! Z+ Q  w0 F9 K; v1 }  J& Z8 }
  213.   std::list<CString>::iterator l;# L9 I. q8 Y0 E, y
  214. 9 [; B+ o7 q6 e7 A1 ^/ R
  215.   if(bFirstUpdate)
    " b* [5 I! Z8 N( h1 Z/ x! J. D
  216.   {1 M1 |! ^5 {7 {7 w, n" U/ |
  217.     dwCurrFile=0;
      ?8 g! P1 H3 \
  218.     bFirstUpdate=FALSE;7 w4 y( a3 M* B; u! R8 L
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & I% \  O- R" ?0 P' K
  220.     {$ @9 w& j$ [: E* t* N6 _
  221.       dwTotalFiles=UpdateLocal.size();
    * I* c+ L( K* q% q3 S" G
  222.       dwDownLoaded=0;, \, {8 x; v: R# S- @
  223.       bSilentStep=FALSE;( R1 I4 {( w, M3 c- D" F0 s6 Y- @+ p
  224.       bCompressed=TRUE;( p, c2 M% H; W3 r8 O+ F
  225.       strExtLocal.Empty();* @( F1 F. G) Y9 L$ T$ T
  226.       strFullName=(*i).second;) z- D, p2 t# j2 A; w
  227.       dwProgramState=AP_CONNECT;& d4 P- Y6 T! H) F+ G
  228.       return TRUE;
    : |, R$ y. p( |+ w2 H1 H' k/ V
  229.     }0 \5 F2 y" R7 X2 j+ r2 X
  230.   }
    / s6 C0 I6 |) x
  231.   else if(bRestartUpdater==FALSE)  }% M2 X# t" [' c! N+ {
  232.   {- w: A$ L% q% i# c9 c/ ~! q! x" C
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    0 \8 }: F+ E( s! O& s" o6 `7 h$ z
  234.     {4 y& k. F) a) g) V1 Z
  235.       file=(*p).second;
    6 i7 l) k9 p* Y5 b  f1 @, U
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    5 A$ P' G+ y1 I' K: f( d
  237.       {/ N% Z, O8 x/ M: P9 y
  238.         olds=(*p).second;
    - f: k. }( ?! Y1 N: J0 B
  239.         olds->vers=file->vers;
    # J7 [6 A% b& @; P( V, n% b/ y2 h
  240.       }
    6 `+ v2 Q" q/ Z# B) u
  241.       else
    1 h  a. a6 R7 E7 H& S, W  b- y
  242.       {- ?' R1 X1 ?+ R4 E* f
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 S% v8 J  ^) s% d
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    $ a, w7 j0 n$ c  S+ k. K# z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ' q" N5 D" B3 Y0 y! c
  246.       }1 v4 n9 c' _6 M/ g$ i$ v, h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 X% `$ V4 P( K( n# B# s8 M/ l
  248.       sprintf(filename,"(%s)",file->file);
    7 a2 a, Y$ z9 L" f  Y( u: g- J
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : F# j" R4 a: @5 ?7 O# Z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    + u2 M: L- m  k# @, v
  251.     }
    / `% m* R. j! A& T* t: @. D
  252.     dwCurrFile++;
    8 Z1 C6 j; u& w% q/ j' y4 W
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' p$ Q% B9 Y( T- S* ~
  254.     {* j6 e( A9 o% X% Q% _0 C7 t; d
  255.       bSilentStep=FALSE;! G# _6 U7 c3 f& ?7 O6 e/ w
  256.       bCompressed=TRUE;
    ! K+ r/ d" t5 f# s% W* ?
  257.       strExtLocal.Empty();$ H0 Z" v$ Q; [/ y. I
  258.       strFullName=(*i).second;
    $ b, q  {4 ^2 c" f) X* |7 S
  259.       dwProgramState=AP_CONNECT;! m5 e9 G$ _" U! t
  260.       return TRUE;
    + U6 Q3 _1 c+ K8 O: B6 z, j
  261.     }
    7 B- h& {1 D& x/ {" t: p; r
  262.     if(!bRestartUpdater); Q) v/ X8 z) z4 P% n
  263.     {
    , @0 g4 S! i) X0 E1 e9 D
  264.       int iCurrSize,iFileSize;( l* T* K. s; [8 j
  265.       iCurrSize=0;
    % C" n' ]' Y9 N, l
  266.       iFileSize=UpdateList2.size();$ n5 r+ w( P' F/ @2 ^' e  z0 f. h
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    , h" l0 J0 G' c
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 n% h+ H9 b( U; a6 u
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");* P" I5 y* `) z9 u
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! E5 A& t6 I% W5 i
  271.       Fclearf(".\\update.dat");2 t( R0 D; ^5 m0 k: }+ E# r
  272.       Fprintf(".\\update.dat","Bloodyf\n");( M' Z% Y) ^9 G4 t
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)9 g* O$ s4 I. \) q; m5 F' Q
  274.       {
    $ \: y" `" a6 w  A
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    1 h! u5 E, y" q) o1 Q7 c; E
  276.         {4 \* R2 `9 [7 Q. Q
  277.           file=(*p).second;$ H& l' u2 @0 m) C* Y& Y: h  \' q
  278.           sprintf(filename,"(%s)",file->file);. X% Q8 i6 _  P7 g
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 B" V# d$ _9 ^+ B( ^9 U3 w1 L+ W% f# R
  280.           iCurrSize++;
    # }/ ~& Z( |" W9 x' m9 d) Y# x
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    , b3 z  R: B. ]% n$ h' [
  282.         }3 f% E* ]2 y, J
  283.       }; Q! E: o7 w6 ]7 P9 E
  284.       unlink(".\\update.txt");
    6 \% M8 }6 P- g5 h1 J( W6 Y  z
  285.       unlink(".\\update.tmp");
    / v# p5 R3 F9 {, Q
  286.       Fclearf(".\\checkversion.dat");7 W7 v6 @7 J# x
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    - P( ^% R; z" ], X7 q* |9 W# H" q
  288.       if(UpdateLocal.size())9 N. ?; n( y" R& a7 X  C' L
  289.       {6 b: Y! V7 n7 h4 v. W
  290.         UpdateLocal.clear();0 Z: R/ Z* y6 D% N. I7 M0 \
  291.       }
    , |2 F2 A# Y! `3 A
  292.       if(UpdateFile3.size())9 Y# c! ~6 u. ~
  293.       {. J. ~2 Y6 p/ }+ L% C8 t3 R
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 {  i) a5 L. l, R8 y6 C
  295.         {
    . H( B# x+ U: Q  D  E
  296.           file=(*p).second;! M/ `' X. F- v2 S
  297.           free(file);" i+ j2 f, x8 z$ K& B8 }
  298.         }
    # N$ _6 j8 J  I+ ?# W& a  x3 L
  299.         UpdateFile3.clear();
    6 x& a  L6 z# H
  300.         UpdateList3.clear();# i3 P* G+ G3 j1 T- |" v2 t, R% G
  301.       }& G; e+ P) [4 |% A
  302.       if(UpdateFile2.size())
    ' p; |" P" Y7 C# Z# C
  303.       {& J4 W7 [+ }" ?& ?9 X0 a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ; V2 h& m$ ?- H4 q
  305.         {
    , x/ e3 M# j8 p% A
  306.           file=(*p).second;
    - x# y/ z( B6 m5 ]; ]0 j9 m) m
  307.           free(file);
    $ m5 B$ T( U+ C0 ^
  308.         }
    7 \( d, W) o& `
  309.         UpdateFile2.clear();: {" F) o3 q( t& b8 I
  310.         UpdateList2.clear();5 U! @3 p) c; R" r9 s
  311.       }: c; G% m  D; H5 X5 F+ j  n# @
  312.       if(UpdateFile1.size())1 P& z7 j) b$ V' C( Q$ f
  313.       {+ M8 h* ?1 L8 I* ^& t
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& l, y9 P1 v$ I5 |# V* C9 p
  315.         {
    3 X8 C& Q9 i" ]7 U. z
  316.           file=(*p).second;9 C* Z4 Z) E; e1 p2 p& _
  317.           free(file);2 [8 z. X2 n4 ?
  318.         }" t: a, M& Y6 k' E# a! N' f
  319.         UpdateFile1.clear();
    - j! G; [/ {, t) r" ~+ W
  320.         UpdateList1.clear();
    6 C* n  i  h& c: s! {. r( k. @9 R
  321.       }# \* K- F. @7 }# z: f: E7 k
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ `% T* ?* d3 K- C
  323.     }
    & v8 [" h# {& [* ?2 N  ^
  324.   }
    ( g8 m  @- c% V6 h( X* i& X: j
  325.   return FALSE;
    " G8 g% _; F2 o0 g7 x% a/ k
  326. }
    1 L7 P# E9 l- @! v5 D4 X; v
  327. 5 j: P* k* S  G$ s' ^
  328. void CRevAppApp::ClearAll(void)
    7 b; N0 O  l( q$ y' K1 ^
  329. {
    - S) k' x4 W& ^
  330.   LPUPDATEFILE file;
    % K. Z( K% s% e
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    , l- P3 J' u- ^( p) l5 z# l* [- ~
  332. 9 N8 V$ y! u0 z! h: _: E
  333.   if(UpdateLocal.size())
    ; V& P6 l9 G/ f* L2 H4 m
  334.   {+ i6 h) B$ a4 v( u' k5 S$ t
  335.     UpdateLocal.clear();
    4 v( W8 S+ Q6 v3 A0 o  R9 {, n+ Q
  336.   }
    ; g0 g) a4 B7 z4 U: n, c( U
  337.   if(UpdateFile3.size())
    9 u. E, r, F8 |/ Z5 H# J" S
  338.   {
    ( w4 Y* P4 E0 u
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! ?2 ]6 w& Z6 \* F* |# s
  340.     {
    + D* C+ {8 Z' @
  341.       file=(*p).second;
    8 K3 b. S4 f+ k9 t
  342.       free(file);
    " a! g6 d9 f. l2 c& i
  343.     }# p/ T3 I) a' Y$ Y
  344.     UpdateFile3.clear();. g% M( |. ^& x" Z5 [' C8 s8 I' H
  345.     UpdateList3.clear();4 |3 Q3 c5 w5 H# |) B" o! z+ C6 i
  346.   }1 j; k: d0 x) ?9 m5 @# C
  347.   if(UpdateFile2.size())6 V5 ?4 [. C1 G3 D8 m' T5 H
  348.   {$ q& w5 e1 N+ d7 l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)) Z+ U& |: `* ]; W
  350.     {
    $ h( p1 l9 {& Y/ _) ?0 g
  351.       file=(*p).second;5 e1 X$ Q" O; {: u/ }- W
  352.       free(file);
    % f* Q4 C2 V. r$ q6 H( C+ S
  353.     }4 T# ~, L9 ~9 A; q
  354.     UpdateFile2.clear();+ {  ^, f1 g! f& F2 s- Q$ ^
  355.     UpdateList2.clear();/ t- V+ ^8 {/ k! y
  356.   }
    . T2 [0 t4 a) m, q' t
  357.   if(UpdateFile1.size())/ q) K% L: u* s: t9 ~: G! f# R
  358.   {
    . ^/ B0 \; J3 W6 \
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* z  j3 R# j8 U9 I: R' T; m
  360.     {
    - f1 W* H9 [- }
  361.       file=(*p).second;3 K% [. ^1 O- I6 i  W' U& g% W
  362.       free(file);# r3 D9 u5 e" K( I  B" Y: }6 }2 p) k
  363.     }
    ) ^% h* Y. T7 e6 r, A2 o0 X0 i
  364.     UpdateFile1.clear();7 [0 E) \) r% |6 C9 J! M
  365.     UpdateList1.clear();
    6 L' P6 ~3 _; z9 u
  366.   }9 ~7 }( E8 Z( {4 n" Y
  367. }  
    & q: w7 L" {& E  M( x- c% Q; M" t( k
  368.   ( t- O, O! {7 s# f& T2 n1 I
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    & G4 j  }3 }& d2 x9 {' i8 U
  370. {
    * B9 t6 H( Z. t9 c
  371.   int c;
    8 ]. H: T7 q1 O6 _3 a; F
  372.   LPUPDATEFILE file1,file2;
    ! _: U' }( ~5 M( G, t9 J
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    " j4 e2 A8 B3 A* c
  374.   std::list<CString>::iterator l;/ S9 f' n$ g, k) s

  375. . \6 m8 O' p% w8 I# I# g
  376.   UpdateLocal.clear();5 H) L* X/ c8 @  F$ y* t8 P
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);9 P+ A3 o1 W1 y! r, d$ [" \& B, z8 t) h
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);3 d) g& X+ Z/ L
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);( g+ Y( m: g5 R& G0 B
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    1 N8 @* g* O6 |* ~& E2 H
  381.   if(UpdateFile3.size())
    * Q  c) ~  A' O  J) ]
  382.   {
    2 A5 n' A- C( T2 R2 Y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    . j# s; F8 b2 [' k
  384.     {
    4 g% R8 q/ d& ]+ c- _
  385.       file2=(LPUPDATEFILE)(*i).second;
    : y( T3 Q/ N/ z" X; E! h, t4 X
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* g0 H- |; c- v; S) t
  387.       {
    6 {4 F9 C( Y& E. R0 ^# W6 P
  388.         file1=(LPUPDATEFILE)(*p).second;
    % j- X: m! Z) p& ]; l) C* _
  389.         file1->vers=file2->vers;# {# Y2 F& q! |8 ?9 n
  390.       }+ W7 N) Q1 |& n
  391.       else
    2 b2 H) R- A+ ]+ Q: `2 Y
  392.       {
    ) H  S* b% R/ }/ C  {2 e0 }
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + E) {( b: @! x+ f
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    % g2 X: V0 B! E3 A
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));2 L# v. p" X0 l6 M$ Y
  396.       }
    3 z2 `% Y8 J7 ^( ?; r$ t$ j- X
  397.     }7 A! U, ]$ b, f: b' a3 P: x1 v
  398.   }! B0 Y" a" J' a, N; H& K$ y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & P" [  M* ]9 z
  400.   {5 e7 q* J+ a& {8 `! V& t
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
      @! l) }' R' A9 C$ s1 v( W3 |  S
  402.     {) m) A: j: h8 H0 k' t  `0 F& V
  403.       file2=(LPUPDATEFILE)(*i).second;
      H9 B/ d% K8 R- B6 H
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; U8 x* S5 |& O, k8 K
  405.       {8 a% j4 _0 C0 b0 K( _% m
  406.         file1=(LPUPDATEFILE)(*p).second;
    ( Q+ @. r. Y# q8 J$ P9 |
  407.         if(file1->vers!=file2->vers)
      g& u5 k" }$ x9 D  S# q! i3 \- C
  408.         {
    # h3 X/ L- r/ g5 y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 N( r& O$ K2 T5 {. e+ S+ X
  410.           c++;$ M: e: l  o" V* u
  411.         }0 i; @& m" x& A3 [. ~2 |5 a
  412.       }
    9 t* n+ ~* c" m+ {5 l% a; t
  413.       else
    ( i5 J  q( v6 X3 q/ i2 S
  414.       {8 l$ g5 F6 S# X$ @5 P( a3 U0 j
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! r! L0 L* L7 C
  416.         c++;0 A, _, L, Y) a9 Y% M( V
  417.       }
    ; P7 q4 T8 Q- t4 X) H8 j
  418.     }
    7 y' @7 {, i2 U5 r: M0 m6 s' ?
  419.   }6 u3 P. P& L6 O: l( `* z/ J
  420.   unlink(".\\DownLoad\\update.txt");3 \4 ]  I" F; ]
  421.   if(UpdateLocal.size()) return TRUE;/ W: w8 I5 z! p) t6 v
  422.   else                   return FALSE;
    1 v  M+ a. i8 y3 l
  423. }
    . y+ G) i, D8 Z4 Z' t. ?
  424. ; M  m$ F5 Y7 ^5 {5 C/ r5 k+ {. {
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"  J7 E3 J' D0 R3 e! i) P4 f- F, _" m
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"7 Z( }' n0 n2 C* ?' z

  427. 2 S1 u9 w. v% d/ _$ K% y

  428. 9 R$ Z5 U/ `, e6 ]6 T

  429. 7 J1 t# ]- F' A- w
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile): m0 s( b# z# x
  431. {: J( Z2 N- Q6 i$ M# h1 ]  Z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    1 I; e1 p, d2 q
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ r/ c8 D4 K0 S: e! L
  434.   {
    ; c5 l( A+ M+ ~' O5 E
  435.     char szLanguage[50];
    " k& Z  m# C  u/ s7 S4 [9 s
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : V5 l0 u6 v3 U3 q1 b5 s# k; `' \
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 ~7 N3 G1 g' V" t9 ~6 c
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ d2 W* B, h7 Q6 R7 d! \
  439.     else                                   m_iLanguage=ENGLISH;
    # X7 ]# S9 _0 e, R$ J# k" _1 q
  440.     char szRegister[100];4 \) H2 F$ X) q+ r0 g  b
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + D2 @- ?3 A7 k6 k. q) M4 v( `
  442.     strRegsName=szRegister;4 P6 I8 A: T! j. D. M3 B
  443.     char szPatchURL[100];
    * P+ [, [8 W8 P1 \9 E( |3 w
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' N* L, e% b0 l; O" z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 Q  }9 ?) G1 b( y3 Q
  446.   }
    . ?: }: E5 k& r0 ]& Q5 F
  447.   else
    ( H+ U$ Z8 f+ B0 e7 ^+ z
  448.   {
    7 w0 x2 N" G1 S5 q1 ^
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 a8 Q# w, y( n. R2 X; m2 I1 a
  450.     strRegsName=DEFAULT_REG_URL;1 g( P3 T6 I% U2 B; W3 ^
  451.   }
    # ]  H/ a: Q3 E* O! F
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    4 s* G9 V1 m9 }" L& l* k
  453.   {# \4 w; A' u- \- u
  454.     char szIP[50];+ c! p# U8 p0 W7 Z+ @, D0 ]
  455.     char szDIR[300];
    6 ~8 c# v4 p. x- I. R  J4 v$ E: Z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 t" p6 u  m3 f. t; c  {+ q
  457.     {) [; M/ S) t3 C+ @
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    - t/ R7 Y& G7 l' V
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");( L0 c0 q; p- U8 X5 P4 d
  460.       strHostName=szIP;! S& H0 }7 I! \# s8 j9 n
  461.       strHostPath.Format("/%s",szDIR);! ^4 U* k4 ?+ ]- [4 p, W. e
  462.     }3 m3 \0 l( C! w( V( P% L$ Q
  463.     else/ J0 ~# ?# v0 d- |9 Z1 O' c
  464.     {' f! y; v+ c3 S$ r
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& |; J. L& f4 p. l1 E, A  f2 C
  466.       {
    : c; ]* o$ P$ z8 O% S
  467.         char szLanguage[50];
    . L: H" k: d- z  d5 C$ j4 x
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " m7 q5 `8 a3 c
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& B. x7 k5 u# L$ ~3 j9 x$ U
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 _# d* T, ~* D6 @+ S
  471.         else                                   m_iLanguage=ENGLISH;
    2 I) _  s( D: o7 o
  472.         char szRegister[100];' X5 j2 i2 X6 j: o) E. f
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# U, g; ]8 k8 }: U
  474.         strRegsName=szRegister;7 N: |2 {* R" P7 P1 a1 P
  475.         char szPatchURL[100];2 L2 E& h8 c7 |% t; _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 T$ }- E3 q; |+ j- J5 c
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + z9 t" H  X% k% Y# P/ X' a% z$ R
  478.       }( a  \( \0 y/ `: o2 c: o. S
  479.       else
    # f! s' C1 ?! ^: f
  480.       {
    6 J7 k3 {* Y! Q0 B8 c7 I0 s# \
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) J3 \! F. E. R- V  N2 N* Q: r$ m
  482.         strRegsName=DEFAULT_REG_URL;. L# ^6 c( ?$ b" }
  483.       }% J2 z% P8 \/ X- q6 m9 m
  484.     }' v4 g6 t, U4 b- e) M
  485.   }
    ; O, S4 }$ y% Q7 T! K
  486.   return true;3 H/ [! w$ v" K
  487. }+ w; \) ~+ G! Z5 c8 R5 P# d) K3 t
  488. 2 m8 j1 `/ H, v; x* Z6 |
  489. #include ".\ZLib\unzip.h"0 \5 S. p. E" ?8 E9 e8 i1 v
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    3 b  n7 x' l" ^' }  n. n
  491. /////////////////////////////////////////////////////////////////////////////: e1 d& v; p7 ]2 O3 v
  492. // CRevAppApp initialization# @. R' p' T  h% w' p. {* N
  493. / a% G  ^+ a& N& `6 L
  494. BOOL CRevAppApp::InitInstance()
    2 \% X- Q( N2 F# c4 m
  495. {/ Y! n$ p# q9 U
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];0 o3 n4 I" k. O- t* N% Z
  497. ! e9 R, d" k+ I8 c: k' P) h$ M2 _
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ) D  m6 M' B4 y9 ]9 C' P
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))1 e3 e# \7 A) m" ^6 N% N8 ], K0 y' j
  500.   {, N/ j4 e5 r! Y! G
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");8 M" Z0 @- Y  O+ ~( H9 e6 E
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    1 M2 A* d$ S5 G8 k. n
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( |: e8 f2 c6 g' ^: x
  504.     {
      q  \0 x6 I# k9 |' ~5 r, i0 S
  505.       strcpy(szPath,szPathTarget);
    % V, }/ r, u3 H1 [5 O
  506.       SetCurrentDirectory(szPath);5 v; ^1 p8 m  I6 D+ r+ U
  507.     }
    ! [! O# j3 u& a# Y7 Q/ J
  508.   }! C( d6 n$ Z0 f7 _  M% F
  509. #ifdef _DEBUG& C: e1 V2 ^0 m/ G
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    & N7 W7 N2 Z* t! I' q
  511. #else& D$ U" H9 x  T: m
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) L( k3 d, l( N+ k
  513. #endif* P" v0 a+ B# U, }9 |
  514.   {" s8 K9 z9 G6 \" ~/ [
  515.     char tempFileName[MAX_PATH];
    # M* m+ x) h. c( e
  516.     strcpy(tempFileName,szPathSource);
    3 D3 m. [+ C* K' C
  517.     tempFileName[strlen(szPathSource)-12]=0;2 x& V$ y7 b; ^, u
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    0 n# F4 a7 k* O, }1 z/ Q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    & ^& {( u9 @$ @6 A( W
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);4 Z0 t. t& c. ~' e$ ~% D5 p: y6 H9 ^  ~! \
  521.     return TRUE;
    ' \, v( G0 h0 q: Q$ h
  522.   }
    ; I8 G* S3 z' j$ U# n
  523.   // Nuke 0118: Delete run.exe* X$ _$ Z9 ?! r- D$ G" G0 Y% q
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    4 F+ \: L1 F9 @
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    0 O. s% o2 y0 v! M! F: F
  526.   if(!ReadCfgFile("Config.ini"))0 Q1 x$ w+ v: _
  527.   {
    % Q) m! Y& }' @% L' z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);% P  s* ~0 _0 E: m7 _
  529.     return TRUE;0 h/ ]! U8 K, b+ O% T' X* p4 N
  530.   }
    : X+ i$ z" t: f% I5 L- A$ q0 a- M3 X
  531.   HANDLE mutex;
    / H; S9 k% ]  K$ E
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    - `" j6 ]: m* M. Z, r
  533.   {
    * ~( V# m3 S$ c2 Z: G: j1 l$ D' t
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)( s: i( K% Y- v  x' F3 u( u% e' g
  535.     {
    $ e# P. w2 y4 T* p# R+ D, n
  536.       CloseHandle(mutex);; {# a) k( ]& `" c
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);: `, K$ F2 k3 l/ d$ A
  538.       return TRUE;/ }. [0 p2 {& ^* J9 f4 A
  539.     }
    7 ?! z+ `: K: q  ?
  540.   }  
    * B' m8 {7 b9 Q" ?* I
  541.   CloseHandle(mutex);
    # S9 t; m& p% [. _, ?: V2 a. ^4 J

  542. 3 k& @+ b7 V! |% h& d  z8 z: e
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    + ~1 D# V  a7 ?; c+ E$ n6 W0 j
  544. : N, K, K' |+ ]8 o5 D( \
  545.         AfxEnableControlContainer();
    $ a3 q3 Q$ x  P( y$ o+ d

  546. ! t. q) i" s0 T2 V$ n- U
  547.   bCanUpdate=FALSE;9 V/ C) z7 |$ K' e0 r$ O# X) f
  548.   dwStartUpSteps=1;
    " I) I& h5 ~2 a/ S" b5 @+ A& }+ u2 w
  549.   dwProgramState=AP_NOTHING;
    0 a6 Y* R1 u; X+ g/ ]) w4 K- X
  550. 2 h0 H9 K( m0 ^& u5 I
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    % {& C  [; ^1 ^0 w4 g, n9 Z

  552. 3 S: {1 f& ~" Z, Y4 I( x% ^! T
  553.         // Standard initialization
    3 ]" |" b2 _7 P; A/ n- w7 A
  554.         // If you are not using these features and wish to reduce the size3 O- [' g9 R5 b+ Q/ n/ c6 V8 R1 \
  555.         //  of your final executable, you should remove from the following# k" e1 x# E6 _" C) Q
  556.         //  the specific initialization routines you do not need.% v3 L9 W, u3 Q7 w, r, w  A& p, e

  557. * i6 q% m9 Y$ ?& ]! _6 W! p) C
  558. #ifdef _AFXDLL
    6 ^7 D7 w, `3 P5 r5 @0 Y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    8 l. N9 K, ~6 p
  560. #else
    % B; g1 n) `5 R, v; B0 l
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    1 o  i7 t. x5 g( Z" D
  562. #endif
    7 P8 j% w7 W" p# w

  563. 5 G7 n( \; M% K6 e+ [" I' x
  564.   dlg=new CRevAppDlg;
    5 q$ O5 J7 I; n2 e* d/ _
  565.   dlg->Create(IDD_REVAPP_DIALOG);  I  \+ ^4 Z; S3 d3 v
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ) G8 @1 b8 T: |7 y, c
  567.   m_pMainWnd=dlg;8 ?  \* X1 f+ P. s6 \. B/ h+ o
  568. " k$ x) Y2 Z* H2 `) e+ G
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);6 S3 `9 t" p6 a7 A. t: a

  570. . Q% O8 a/ c2 `) J
  571. //  GdiplusStartupInput gdiplusStartupInput;8 i1 t% f0 o/ Y8 F0 p! p
  572. //  ULONG_PTR gdiplusToken;
    1 T) a' z" Y5 v' d& a( H5 L
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    # E7 W# L5 }1 w! h' ?1 ]

  574. . P1 c; O8 ]6 `$ \, @& u, _, J+ i8 u
  575. //        CRevAppDlg dlg;, e" Z  z6 g7 a0 P% D- m
  576. //        int nResponse = dlg.DoModal();! n  ]. |5 P) l1 }& P2 O+ l1 a) N
  577. //        if (nResponse == IDOK)0 L( v0 K8 y) y  R  q$ s3 y
  578. //        {, X; M5 o% `/ A1 b, b$ G
  579. //                // TODO: Place code here to handle when the dialog is
    " @: K: |" J6 [7 f' L4 r8 D% O- m
  580. //                //  dismissed with OK5 O3 x1 Q7 H4 N2 L4 c- p
  581. //        }
    9 Q* b5 F$ S4 i8 R" v. @# u
  582. //        else if (nResponse == IDCANCEL)! w- `6 h( }( t5 o: l& S
  583. //        {
    $ T. s  M+ e( }) v# X
  584. //                // TODO: Place code here to handle when the dialog is
    ! E9 l* B% ~1 m, l1 R$ o5 K
  585. //                //  dismissed with Cancel
    0 }5 Z" e: D$ a
  586. //        }/ `+ E8 J! q% `6 M9 d

  587. ) z( b8 c' \& S$ O, s# y7 W6 p2 [
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    6 h) A5 s# {  }! G
  589.         //  application, rather than start the application's message pump.
    ( I* N8 L$ I5 g2 U; a! q- l7 V5 c
  590.         return TRUE;
    : ]0 r: Z9 `/ V6 Y3 G
  591. }
    % m& u& A$ Z& D9 W% t9 Y
  592. : v6 @3 ?! x$ L+ Y7 M$ j* f
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    4 _. z" T( \1 {9 |( U) t
  594. {
    * a5 M' a* @( W  ]  s
  595.   int i;
    " Y6 H& B0 X9 R$ v% X9 I
  596.   char *szRet;4 _% }4 F6 @/ D7 \& Z
  597. 0 z. ~  b8 K2 `; `
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    % z6 q* A$ A9 J' m0 {/ D7 T$ H# h
  599.   if(sztoken)
    + m2 t+ i) f& }' q7 G$ U( z
  600.   {& T# E+ C( d8 \6 R# T  [) X
  601.     szRet=&sztoken[itoken];- C  k  \, `0 h
  602.     while(sztoken[itoken])
    # ]5 G+ Y  Y/ X: o0 L. R$ `
  603.     {
    $ x( k8 V$ x: m5 r, X* z9 P
  604.       for(i=0;i<(int)strlen(token);i++)4 o# l' n3 z; b6 o% i* Q/ H: x
  605.       {
    ' Z9 @. e; h, }* q' C( Y# O0 s( s
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
      X( t( Q2 ?- m7 n- P
  607.         {
    9 o# s6 s% i5 r6 h$ x' U
  608.           sztoken[itoken++]=0;+ W7 Z4 I& `+ B% z/ {: V5 L
  609.           sztoken[itoken++]=0;2 L6 a4 m3 k3 I& @3 P' D  d
  610.           return szRet;; v8 \& G% Q* A/ z1 G
  611.         }$ ?' R! K) X2 p& E8 R+ ^
  612.       }
    * N2 r( s+ {- n+ E$ B
  613.       itoken++;
    ! H7 N2 ~: L( d+ w; u! R
  614.     }
    9 x( z$ x! `5 h
  615.   }
    " z! L4 x* o7 Y  z* s* T' t3 s; h
  616.   return NULL;
    % |0 p" X/ c/ C. p" i; Q
  617. }
    6 `: X* }2 N& [1 {# x: Y- C9 j8 u  ?

  618. 6 w2 C1 ?8 k- a1 P. e' v
  619. void ProcessProc(long Total,long Current)
      s7 ?9 j: r/ c5 D
  620. {
    0 ?( f6 n( _4 ?1 d, S# q6 p7 ?
  621.         MSG msg;7 {( q" t* @9 }3 V
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);+ \6 R# P3 P8 X7 {# F, N( h$ }3 q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' F, J5 w  S5 ]
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))$ i6 h$ ?* q; p" z- Z
  625.         {
    , U% n" Z, p! ?" ~  L' k
  626.                 if(!GetMessage(&msg,NULL,0,0))
    / ^4 R; U/ k. E: y1 T  V) h% `( |$ M
  627.                 {. B/ t' k8 `& j! j9 M/ G
  628.                         return;
    ( Z+ G- `. L" F+ }: P
  629.                 }& w4 H5 R$ E7 j# n% I% r/ ~" r7 G
  630.                 TranslateMessage(&msg);+ R+ H' r/ D( Q8 R% R
  631.                 DispatchMessage(&msg);
    8 g# O& N/ |2 b, }, N- v1 e
  632.         }       
    / M- m! f2 Y) i/ `/ z. s
  633. }
    + Z$ o6 e+ ^9 [, j- q

  634. . Y! U& D5 g1 ?
  635. BOOL bFirstChar=TRUE;
    3 m2 C6 j7 d0 A) B+ X1 J
  636. 9 h& L& s2 a5 \
  637. BOOL CRevAppApp::OnIdle(LONG lCount)5 ?+ s) H5 E8 z/ F5 `1 g
  638. {0 L# W# S3 @$ a. N  m
  639.         // TODO: Add your specialized code here and/or call the base class
    ! v5 k0 l0 x# \) _$ W4 J- `
  640.   switch(dwProgramState)" i( N0 N% I( ]5 \6 O+ R
  641.   {
    % \3 ~! [+ M# h: n
  642.   case AP_NOTHING:; T+ q+ V' @9 R! u/ }% }/ k" B
  643.     switch(dwStartUpSteps), x" J, L9 u6 n' T
  644.     {
    7 U6 Q) a, s9 v
  645.     case 1:
    / X* }$ z+ q  P" v
  646.       {
    + M, |# Y+ m4 ?( e. ]
  647.         int i;
    ' V  M8 U3 Q6 u$ ]; B
  648.         CDC *pCDC=dlg->GetDC();0 j( Q, U* o- d3 S  A7 z& b
  649.         HDC hdcwnd=pCDC->m_hDC;
    # E' |9 X" }' b7 ~
  650. //        Graphics graphics(hdcwnd);
    : `" M; r8 K7 K/ e0 N1 y3 o
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");+ W# f! C+ `5 M8 D) D
  652. //        INT iWidth=bitmap.GetWidth();
    * L2 A1 d/ I3 e5 x6 A* j- @
  653. //        INT iHeight=bitmap.GetHeight();
    , V+ r) Q/ M/ t" V: b( H* K
  654. //        Color color,colorTemp;
    ! w- M9 U; m, m5 F
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    6 H* C6 E) p# |6 Z
  656. //        {
    0 @# a" V0 y& G/ F, `: R. u2 H
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - J. |8 i' ?8 g- c6 b: t1 C& _8 a
  658. //          {
    5 X% x2 F8 J( H4 R6 G2 q+ m
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 v/ T1 b6 Y7 Z8 o/ u9 [5 q6 Z" n! a
  660. //            colorTemp.SetValue(color.MakeARGB(- }6 e' d# a, q5 q9 e
  661. //              (BYTE)(255*iColumn/iWidth),' B8 \% G5 R# t4 ~, ^+ E$ O
  662. //              color.GetRed(),  ~" i4 L* e0 W) i
  663. //              color.GetGreen(),
    0 n( l8 X- L" t  i/ G+ j' E
  664. //              color.GetBlue()));% m' M1 X( V% \4 w  n9 T
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);; q! u: r5 |% a$ Y- p8 p
  666. //          }& \2 K' w9 `# S' k& J
  667. //        }
    , t6 u0 q7 U/ J
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    4 s- d% p8 ]6 x' c0 A6 f$ E
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + m, N6 n* z8 y* h) o8 E7 Y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 Y3 A1 w/ {$ [& T% I( u
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' l' o; f: o% I5 P6 b" u
  672.         for(i=0;i<240;i+=8)! W. w# B; f4 [, v/ a$ O3 }( o
  673.         {
    ) k/ ~: P/ i4 Z; I3 C
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  e: f5 P8 B1 x6 X0 [
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    2 V% [* f+ H+ _/ P- ~# }8 b7 x- U
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% w- y, E6 i! W2 ?  V3 N5 N* Y
  677.           Sleep(33);
    8 h& `- g- Y- n/ o: z
  678.         }
    " T5 y, U. E, r" Q$ t2 v: u
  679.         Sleep(1000);
      w. f2 I7 h  |- B$ O4 ^5 K3 Q4 W2 q
  680.         for(i=240;i>0;i-=8)
    & {9 y' f5 q5 e* Q
  681.         {8 ]) @4 x" V+ L' J
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . B* a1 x) F5 ^, U  E# X9 N$ ~
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ E$ a" y, L( F" S8 j2 w
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- e5 m/ B  u, E3 K; t
  685.           Sleep(33);# `/ ^# |. E6 p- q4 ~
  686.         }1 R2 b# @+ r5 R0 X' Q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);4 K3 T2 y7 D# F. }: H; {8 k/ z
  688.         dlg->ReleaseDC(pCDC);
    9 x2 E5 ]3 t3 C8 n& G4 i
  689.         DeleteDC(hdctar);/ t& K- D3 ]0 [- F) ^
  690.         DeleteDC(hdcsrc);" L% @. y$ _" E) ]" A
  691.         DeleteDC(hdcorg);$ I3 n6 I# l" d' |. n7 t
  692.       }
    ; B0 {0 ]9 ~% L+ l+ p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);0 p2 S- u( X% k! N* Y0 D
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    * S2 T: j8 |2 q7 T/ {
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");4 n" Q/ B5 R: r2 z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , G7 f/ P0 |! n, w
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , L& v; J8 G1 F6 s: X
  698.       if(!Dn.Connected())
    ; l9 j* c& E8 A# d0 H9 n! F
  699.       {
    % J, e* B& }1 z( H
  700.         dwTotalFiles=1;, a2 m* D) H8 J, h8 r$ h- G
  701.         dwDownLoaded=0;; k" a/ f4 x3 b6 C
  702.         bSilentStep=TRUE;
    6 H2 \2 f2 `$ W( j
  703.         bCompressed=FALSE;) n1 u" {( l) q/ C
  704.         strExtLocal.Empty();" T: q5 V& `3 E& M* o- r* w
  705.         strFullName="readme.txt";
    - O" Y; V# O+ D! Q1 T( h
  706.         dwProgramState=AP_CONNECT;1 F1 [0 I$ x6 A3 P/ w
  707.       }
    2 ?) V( ]7 Y/ a! M' x
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();& c  x! u# z: o" d! Q) W% s2 |
  709.       dwStartUpSteps=2;
    7 _1 {4 [5 N+ Y6 u$ C" F2 m
  710.       break;6 C- p( x% j  M" m# z
  711.     case 2:
    % k$ M5 `6 v# k( Z
  712.       {
    5 L& G- {1 w: J. T  R+ t2 k9 ]
  713.         int iEOF;+ }! G) M! C$ p1 {4 o" B
  714.         FILE *fp;
    1 l. f& X; X* O
  715.         char szString[512];
    3 I' a' s  N0 [, [/ _! |. a
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ; J& n9 E5 E+ ^. n* H4 u+ M& ?
  717.         if(fp)
    " L/ a& y) M  m! a* e
  718.         {
    ( z) W3 I  `8 ^8 h8 I0 P+ \
  719.           do
    ( y& q# p' W! Y; K+ S, N" S
  720.           {6 w, }+ ~4 \6 p& C- [2 s, M1 L" k+ y
  721.             iEOF=fscanf(fp,"%s",szString);# H( \* F% E  E4 b
  722.             if(strlen(szString))
    , u. b2 E3 c+ q# i
  723.             {
    7 F- i, }" v- X# g. L- P4 T$ k
  724.               if(bFirstChar)
    7 A2 @. m( ]8 ?3 p& A4 X" }) j
  725.               {
    * o7 y' v0 H9 h4 F8 v" t6 z, u1 u
  726.                 bFirstChar=FALSE;$ L7 U5 T: D1 R3 D* `6 l* k
  727.                 bConnectIsBig5=FALSE;1 I+ ?  i- l: h
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    5 \2 h# H; l0 {4 x3 i$ ?1 J( W
  729.               }0 J* F: a0 |$ E+ {" O
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    " w) s# s- ]* T3 K  g- N/ f4 M0 @
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ( [- r* f4 Q" S5 A) t3 @* u
  732.               dlg->m_ListText.AddString(szString);1 S) O; m$ }3 z/ X1 Z, E( u# B4 E  Q2 l
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : Y2 ~) H& j6 T* A/ _1 r2 q
  734.               *szString=0;
    8 r6 [1 X7 N9 U. a) r8 F
  735.             }
    / P0 f; }; B% L) X
  736.           } while(iEOF!=EOF);9 v( [2 [2 p& g
  737.           fclose(fp);1 q+ w# q" z' i8 r4 j) M, Q* k
  738.           unlink(".\\DownLoad\\readme.txt");% T* A1 w( X+ Q- L
  739.           dwStartUpSteps=3;0 f/ J: _* b# w" L9 J
  740.         }$ k  |  x2 Z+ g+ _( M2 T$ u8 A/ R
  741.       }
    - E0 l3 h3 }& J$ C- U" W* r
  742.       break;9 I0 w! [- a5 {- W
  743.     case 3:
    & A. ?" F# o. L
  744.       if(!Dn.Connected())2 u& m- s9 Y7 ?4 q0 w
  745.       {
    ! C# z2 `7 ?) e6 i
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 B6 `6 X: @5 o2 \8 f$ ^5 r3 S0 v; F
  747.         dwTotalFiles=1;
    6 t: y9 b# a0 d- \2 S) D' Y
  748.         dwDownLoaded=0;
    4 r  i( x1 e* y7 N
  749.         bSilentStep=TRUE;
    & d/ Z$ s$ Q0 m! H  P0 T; F
  750.         bCompressed=FALSE;
    3 m( D4 D, m9 m
  751.         strExtLocal.Empty();
    % O- m2 U; B2 f# a9 e& H' X9 j8 {
  752.         strFullName="checkversion.txt";( N. d! h6 V) g
  753.         dwProgramState=AP_CONNECT;
    : e% T0 P' M( L
  754.       }
    8 L# U' _' F* R
  755.       dwStartUpSteps=4;
    7 H7 ]& U+ M: U0 L' g* a
  756.       break;
    ) n  l/ r# H3 r; D
  757.     case 4:7 @$ C* X4 Q  y! h
  758.       {3 V( M" E$ g% o! z0 H, e! z+ B
  759.         FILE *fp;; D( E. f' Y2 m. A
  760.         char szString1[128];4 `3 k; _: F3 _4 N+ Q7 Y: ^: w, }
  761.         char szString2[128];( T& i+ X$ i4 Z7 e1 Z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");2 |( z6 S; I* k6 O
  763.         if(fp)2 Z$ F% @" {8 b9 C
  764.         {; _9 Y- N2 r8 Q
  765.           fscanf(fp,"%s",szString1);2 S% Q/ J' W# A" i7 s1 g4 Z; A, i
  766.           fclose(fp);* |! t; w1 j0 @! A4 |: H& T2 d
  767.           fCheckVersion=atof(szString1);& Y5 f# T- B" ?& R. G& F% E. A
  768.           fp=fopen(".\\checkversion.dat","r");; B( U* f2 G6 I3 y
  769.           if(fp)
    1 Y, K+ O" {/ d* O4 \- [
  770.           {
    ( [- ^9 ~! j! S% e6 @& f+ G
  771.             fscanf(fp,"%s",szString2);
    - x1 b5 x2 v3 G' H
  772.             fclose(fp);
    & Q1 ?; R8 v& v: ?, f/ c
  773.             if(atof(szString1)!=atof(szString2))8 D/ x* L3 K' i+ J4 Z0 [
  774.             {- ]3 d+ }2 B1 T8 R3 L# [
  775.               if(!Dn.Connected())
    . o% O( e- }2 s5 s, W! g9 m& Y
  776.               {! m  D& v( `+ t2 [9 w  @5 v8 m3 W
  777.                 bFirstUpdate=TRUE;
    % p, t1 z0 T/ P, X' v* s! [
  778.                 dwTotalFiles=1;3 V7 f$ b9 L+ u: Y  F/ X3 H
  779.                 dwDownLoaded=0;
    , D$ D: }8 a+ J! v9 m7 {( L6 r
  780.                 bSilentStep=FALSE;
    & D, w  J* o6 p- f
  781.                 bCompressed=TRUE;/ Q  X1 e% A6 Z/ R# C
  782.                 strExtLocal=".\\DownLoad\";
    ) |$ F7 a- Q. I4 a8 j
  783.                 strFullName="update.txt";
    1 w! ]# o8 U5 S7 ?0 O7 J
  784.                 dwProgramState=AP_CONNECT;
    ( D4 @2 [) X& A  n; D/ D
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) n; ]7 A( }) K
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" \' s& B9 e4 z  P5 q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % L6 p# k! X5 U

  788. & ^2 i! G5 K4 o+ T5 v' f
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . Y' Y: v9 B. ?  j  s' w% ]' Y; K
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    % d* D- O. }/ Y. `
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 B8 N4 P; ]/ y1 }" q; K* ^
  792.                 {
    ! x6 i4 H3 M2 Z$ v
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    4 D2 M, ]: q; P' m! E5 E8 ~
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");- n9 r8 Z  ], n+ @8 i
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    & J+ Y' T; f  I0 d1 v" F
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; b( W( Y7 n8 j

  797. : Y$ R, l1 {$ W2 w; Y/ E
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) h9 o+ x! K# G8 D
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% \" M" R' N& \5 P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    " k$ C2 D  Y2 r+ w# _0 m9 p
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 [$ ^# c9 T; Y8 ]
  802.                 }5 Y2 c# G7 L  u) V% ?5 L% _8 J( ^5 H5 ~
  803.                 dwStartUpSteps=5;! a  ?. Q- n9 m, P* V
  804.               }
    6 Z: U& }/ C% w$ H. q
  805.             }2 b; \* a& h$ P$ \
  806.             else! a& m4 v( N3 e# T
  807.             {6 r$ K+ [. V; L
  808.               unlink(".\\DownLoad\\checkversion.txt");
    " M# p" z. W6 s# {' Q+ q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    7 Y: X1 S) w4 _# q6 J1 v7 e
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ M3 h2 X8 Q' n: \
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 j8 X$ o4 S: Y: X; B+ j2 A
  812. # N! r" x. |3 o1 s' X( r7 _3 [' a
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ S6 w1 ]- T. T
  814.               dwStartUpSteps=99;
    : L& G: x$ w" U
  815.               bFinishUpdated=TRUE;
    # \9 J2 H0 P, x# N; a
  816.               bCanUpdate=TRUE;
    * L0 X! I, w4 |( e2 B9 B
  817.             }
    0 C. I7 K- \7 T% U; V
  818.           }
    1 `9 d# |- `8 \0 d9 y: W0 o4 W8 Y
  819.           else; _* o7 D& s# b- F- `
  820.           {
    1 L5 y( O+ @7 u0 L1 J+ l6 i, N; H
  821.             if(!Dn.Connected())
    * @% P4 v- x& M" v3 Y8 g- M
  822.             {
    $ n( k$ C7 N! w! Y
  823.               bFirstUpdate=TRUE;
    3 j; S! s6 n9 K, z' {3 B
  824.               dwTotalFiles=1;
    9 M7 B+ d0 `! {8 b3 U2 G7 v; W( E, |
  825.               dwDownLoaded=0;% c; R7 k7 e# |* Z( V
  826.               bSilentStep=FALSE;
    * e: D& ~: Q& i
  827.               bCompressed=TRUE;- t( J# e" X7 T/ n
  828.               strExtLocal=".\\DownLoad\";3 f& d1 L2 T4 ^) W1 |- a; @7 {1 b
  829.               strFullName="update.txt";: p! k' w+ a$ B% K. s  F
  830.               dwProgramState=AP_CONNECT;- K9 |1 P6 W# v( ^: y1 K
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( b7 N( u* B+ L4 }* m! e
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 u% P* R4 N7 }' _
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");5 N. T! v0 j& S+ D, L( v- {
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) }! A& [/ M9 w6 z
  835.               unlink(".\\DownLoad\\checkversion.txt");
    2 i2 x9 K* q& f7 _( o7 j8 ?
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)6 g' G) X  H, y  O
  837.               {, @! N7 z* r( }1 e) _
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");; @4 \4 |% i* G. Y  E
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");  @) M0 f" d- I
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    " e( q# s* Z2 S! e* u- F
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 v: |1 Y3 C0 C. ]. S' W
  842.                 ! P0 a# n  k' @' R
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ |1 D/ G5 Q5 n. J
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + D: }( f8 }$ x) S0 I/ @. r
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    # Y4 O# i8 T% m, P
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 h$ N4 |3 @" E8 b; K2 D- N
  847.               }- k1 R1 y; }' x
  848.               dwStartUpSteps=5;% L) T" M( D: r* j* w; e5 ?& D! O
  849.             }
    & q# d  s$ z6 V; E
  850.           }
    . t# |! h' c6 A( e/ a
  851.         }1 _( c* L/ {9 n8 o# @( d0 n) _
  852.         else
    ( _% X2 [. n4 P: i" X
  853.         {
    7 l+ r% k& j( K
  854.           dwStartUpSteps=3;! f# W- A1 E: U  [
  855.         }' s7 w/ s+ D6 K# }  e
  856.       }! R! K% M: s- I- \. |, M# b8 j% c
  857.       break;$ R5 Q( O6 p' d9 G  M4 F& r4 o1 b/ K
  858.     case 5:6 {. x4 w, p, J
  859.       {
    ; F3 ~2 i  h* P) s$ Z
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    6 a: t& F! ^/ n& P5 A1 H. Q" J- l/ e
  861.         {
    6 H8 L+ p# o- G& F+ x
  862.           int opt_overwrite=1;
    , p% T- j) d( t, x
  863.           int opt_do_extract_withoutpath=0;, H* q3 @& w; ^8 ~9 H
  864.           unzFile uf=NULL;
    3 [. R$ n6 X! V# \3 y2 n/ J5 s

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

9 P* g) w: h( ^) y+ Y
0 p( m5 J6 ]1 i+ w0 P+ v

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-28 14:09

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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