找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
6 r# c/ ^4 b* r- Q% v
  1. / RevApp.cpp : Defines the class behaviors for the application.$ w3 f, [; g8 |: g" @1 q( n
  2. //' r) f1 j( j. Y( i* L/ m/ n7 v

  3. 0 P6 t/ W3 P2 W  Z6 i/ L
  4. #include "stdafx.h"
      T4 S, ^8 Z( C

  5. 3 H( ]3 h3 |" L4 C: O$ h
  6. //#define UNICODE* `! k* [, a/ x! ~" I( m# w
  7. //#include <gdiplus.h>
    . |9 ]4 t  m, N
  8. //using namespace Gdiplus;8 _- K% y3 Q- k1 t% J* b6 e( Z

  9. % ^1 b# g- `9 E/ |# j' d
  10. #include "RevApp.h"
    6 z- E' a+ `/ {) q
  11. #include "RevAppDlg.h": n# B# V7 p- p
  12. * u' e! N0 A, f2 J: N# ^
  13. #pragma warning(disable:4786)3 n, V8 k+ i. L9 V. }+ n  c
  14. #include <map>6 _# X# d$ f# m
  15. #include <list>
    ! |4 A. H. T" H; V1 j2 j
  16. #include <direct.h>% a# X* H* F3 \' z' T

  17. 1 z: q, A: P, j( M
  18. #ifdef _DEBUG3 \0 J3 \3 p8 \2 o
  19. #define new DEBUG_NEW
    / O: L+ q) D" A9 Y; I
  20. #undef THIS_FILE, u& T3 I1 l* U. n
  21. static char THIS_FILE[] = __FILE__;+ _- Z% A; B8 K" r+ V' |
  22. #endif
    ( r+ y! H3 v. u0 Y
  23. #include "SkinResDef.h"
    2 T' d( Y2 S# f$ ?0 S! U) b
  24. #include "ChangeBG.h"
    1 Q( ^6 c1 W3 o. w
  25. #include "AFXINET.H") }5 p% O$ O! \: [- Q; Y8 V; v
  26. % ~. k( i. }8 Q! o: d7 D  {/ {0 [
  27. #define TRADITIONAL_CHINESE 0! r1 y4 i- b, C
  28. #define SIMPLIFY_CHINESE 1
    - S" ?. i% d: O8 v8 P, m# x
  29. #define ENGLISH 26 b4 e1 b4 D; k
  30. int m_iLanguage = ENGLISH;  F3 B' G9 n" l; P
  31. /////////////////////////////////////////////////////////////////////////////: M, N& ]$ j, q& m+ N1 B) V
  32. // CRevAppApp; d5 j% A* p/ l. t* r

  33. . e+ j, M6 C4 l; Q5 Q% ]6 U# v
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ' K& N  o: {. N2 J6 Q# I
  35.         //{{AFX_MSG_MAP(CRevAppApp)$ p9 w4 ^, Y- J4 t) g# ~, ~2 p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.) j9 x8 d  [4 I6 p! w" ~: f$ }- J
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    . d0 I8 X' u- x+ w+ h6 N
  38.         //}}AFX_MSG
    , x3 Z# n( E! B
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)* d: O: E* g( O
  40. END_MESSAGE_MAP(), t4 G2 b9 ]9 I/ t
  41. ) r2 a# r; }8 M4 \, U3 B
  42. /////////////////////////////////////////////////////////////////////////////
    9 `% v- ^3 ]: A
  43. // CRevAppApp construction
    + q2 S* a2 ]$ Z7 H7 }

  44. + h* L+ x5 o5 n, ^# T: J8 h- P) F
  45. CRevAppApp::CRevAppApp()
    4 c  B- V9 L7 A
  46. {
    + o. u2 _, ?6 y" h! W
  47.         // TODO: add construction code here,
    ( Z5 Z( S. x, E+ v
  48.         // Place all significant initialization in InitInstance
    % R! y; x5 q( y+ n" ~/ C
  49.   bDisplayIsBig5=FALSE;9 W& h; z" K/ U7 ^, [4 q: p; M- A
  50.   bRestartUpdater=FALSE;4 Y' G0 ^- j6 ]" `; T2 i
  51.   bFinishUpdated=FALSE;. l- w  m0 P8 w2 R  Q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ ~# f$ H: g9 c. t
  53.   InitChangeDataBig52GBKS();+ W1 A4 s9 E/ U' H" `9 ^
  54.   InitChangeDataGBKS2Big5();
    7 W$ o; f! j3 D7 w$ L( i
  55.         //
    / Z. C5 n8 k& H7 i2 @$ \6 J- s" i
  56.         bClickRunExe = FALSE;
    " f( e5 B8 [: v0 s$ I4 m3 a' m) n
  57.         //
    ! ?4 l/ ]* t( p1 X) ~
  58. }# X+ f  C) ]/ q5 `0 s" F' [! j
  59. ) p0 ~- g* [: ~3 q% A( z
  60. CRevAppApp::~CRevAppApp(): Q/ c' f$ r; y/ E+ M
  61. {
    ( C% K4 q. D, [8 H6 n" b
  62.         // TODO: add construction code here,
    3 Z/ Q0 j! p" J7 j" S0 z* m; y
  63.         // Place all significant initialization in InitInstance' d9 f. R# E8 k5 Y
  64.   EndChangeData();
      q& `" Q7 V" Z
  65. }
    4 c% e# P' _" S, F( n) ?4 Z

  66. 5 Y: H" @$ A5 Y5 u
  67. /////////////////////////////////////////////////////////////////////////////8 X" e* u, A) N2 N8 e* I
  68. // The one and only CRevAppApp object
    # B* w* w& G; ~
  69. ; r3 k* L7 o' u. q) [3 w# ?
  70. CRevAppApp theApp;5 [2 ?# {& R$ q3 B4 W

  71. ) N2 F/ s2 j5 u  K& ]7 z, H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : [7 ^7 ]/ }+ \  Z
  73. {
    - T' B7 A8 v' [+ o' ]( [4 i
  74.   int iEOF=0;
    . B7 R! N, H8 R1 `8 t
  75.   char szTempName[MAX_PATH];6 H9 ?0 Z  ^* }+ K' V. J8 s
  76.   *szFileName=0;
    / D( R6 T+ w. ]6 ~; l
  77.   iEOF=fscanf(fp,"%s",szTempName);' C( b2 G, u5 [- K) W8 D
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')1 k# k- R% g( j7 ]& d/ O
  79.   {; h% g# V( h5 ~3 U( p8 [1 @
  80.     strcpy(szFileName,&szTempName[1]);- n) w/ D2 P/ p/ \6 u7 S4 H
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & \! A, p' j$ e9 J3 J% s$ c* J
  82.     {
    - j3 F9 |( h4 x5 Z
  83.       iEOF=fscanf(fp,"%s",szTempName);7 R' E8 @0 [$ [* l2 y- I# n% _
  84.       strcat(szFileName," ");) ~, ^  P. d, I# }( ^" d7 O
  85.       strcat(szFileName,szTempName);
    . W! W; q6 V. Z" ]! `# n9 h
  86.     }& P: j0 B% `) s! w, q1 ?/ [
  87.     if(strlen(szFileName)>=1)
    - Q  `  w* _, y; ~6 r  S
  88.     {
    - @1 |+ o! E/ _
  89.       szFileName[strlen(szFileName)-1]=0;
    9 z  u: u8 d+ e& b7 t
  90.     }
    . I: n/ }+ B) u0 d. A7 q) q4 r
  91.   }
    ! v0 |# A# I; ~* N. D
  92.   return szFileName;& z+ H! T3 `3 {' B$ E! N
  93. }/ e9 w# z9 c+ z" I2 o1 d! t

  94. 7 {4 B. ~2 ^! |. B
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)' p# ]5 d& j) p
  96. {# L4 p% z' v8 r& _
  97.   FILE *fp;
    ( P) w: E4 A$ E5 M0 h
  98.   char *key=NULL;
    / L* Y; c  Y, a
  99.   char version[MAX_PATH];
    + w( y9 d- `% _) C" l
  100.   LPUPDATEFILE file,olds;5 y$ h/ o& W5 U; P! `
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & x; o- K0 |9 a

  102. 1 w: B" t! |4 x, Q
  103.   UpdateList.clear();! U' v+ ?8 d$ s2 E9 D8 D
  104.   UpdateFile.clear();3 C1 {! P4 S5 G% M* z8 s: Q
  105.   if(GetFileAttributes(filename)==-1) return false;* O- n& i( v8 ?2 F; z4 M& n
  106.   if(!(fp=fopen(filename,"r"))) return false;+ s9 F8 P1 X  \- ^* X
  107.   fscanf(fp,"%s",version);9 k& u) O, I% p$ Y7 k' a
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }0 P' T& R9 N' v2 X/ l- e$ S( B0 `
  109.   while(fscanf(fp,"%s",version)!=EOF)
    + N3 e( S4 j* W0 G& g0 W3 W2 M
  110.   {7 q& j. s0 X5 W' V* u
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 H% h  Q# t  P+ f1 s* K
  112.     fscanf(fp,"%s",file->path);
    ( k" N. ~8 l: M/ g
  113.     ReadFileNames(fp,file->file);
    7 J- F+ u* f$ F" G8 W
  114.     strcpy(file->full,".");% O2 e# [) y* }  F, g
  115.     strcat(file->full,file->path);( r! {. k$ L6 u  }4 [. b3 \0 n
  116.     strcat(file->full,file->file);# u& w3 I2 L0 ]7 F# S7 H
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    6 B" _. k- X6 K' f5 ^& F, ]
  118.     {0 |7 W2 K6 C" m2 ]+ ]7 I
  119.       file->vers=(float)atof(version);
    9 F% w2 q0 w4 u1 X+ q2 v) ~
  120.       UpdateList.push_back(file->full);- o$ n$ Q. M3 a3 d; ^% S2 ~8 I
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    # V' f+ |# U; {" R* v& R( ~( T
  122.     }
    1 V) f7 z8 m% l& A4 k
  123.     else. s5 o( E& d& p) i: e
  124.     {
    4 [+ P  w* e7 D8 C: h1 b
  125.       olds=(*p).second;+ D' z9 F& g) Z: B4 c
  126.       if(olds->vers<(float)atof(version))
    - Y: |: A% z! K) a( M4 R4 Y2 z# s
  127.       {
    + a/ D- @/ B; P! y6 i
  128.         olds->vers=(float)atof(version);: [8 b  G" d8 ^; T4 I% ^& f
  129.       }1 O+ T3 h& w9 M4 T! J! f" r, a6 `
  130.       free(file);
    . J9 e% d) y+ G. s1 I
  131.     }9 B" y; D2 I6 E3 A( w& ^
  132.   }8 U& M7 K/ O; p; l3 F# E
  133.   fclose(fp);& k+ M5 I+ z: p$ G' U
  134.   return true;0 i: y$ J' E, J6 h
  135. }% a; q/ ~5 s+ p* v7 u# G

  136. " o, y8 {7 y3 S7 N7 O9 J
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    3 x% P8 J) S. a
  138. {" P" z/ @0 D+ g, a# D
  139.   TCHAR  szFull[MAX_PATH];
    0 G! L) H1 h/ J2 {' W! i
  140.   TCHAR *token,*inter;7 o( L5 d8 w* }" v1 P
  141.   *szPath=0;
    ' s" i1 G( b% H2 ^# ^: A8 Y1 c
  142.   strcpy(szFull,szFullPath);! a; R3 e: K1 E9 Y$ x3 U& L4 c
  143.   token=strtok(szFull,"\\/");
    . e# D4 @# t: a% Q/ V& C- R/ W* L
  144.   inter=token;& O5 x0 @# n& @- W6 ?$ k
  145.   while(token=strtok(NULL,"\\/"))+ [0 w) Q% V0 P* G
  146.   {, w4 p$ _; j/ d% e. K$ `
  147.     strcat(szPath,inter);
    3 u/ Q. s- W* `5 a5 G" E3 H
  148.     strcat(szPath,"\");* N! _; B! C% |4 F
  149.     inter=token;
    9 \8 H* c" T1 [7 W1 q6 j5 E
  150.   }2 E6 \" ]6 U% y6 g' w
  151.   return strlen(szPath);
    - A4 T  \  M( I
  152. }
    # d: E& @, a/ b- ?! F' h
  153. ( [$ `& g4 S) J$ e+ y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)8 f/ e' N6 p5 ^( c
  155. {
    / N. r7 }2 ^) }8 }% ~) Z
  156.   DWORD attrib=GetFileAttributes(Target);
    % r, ^, r, R4 S, G( H# [
  157.   if(attrib!=-1)
    % a+ K, {' T/ ^% t. k
  158.   {2 ~2 {- N/ i# t7 a1 F6 z( ^
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    - m+ \5 @$ d; a( u* i  f) ^
  160.     {7 E% w* A3 @5 u( X: c0 C0 I
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    / w% @4 }  a$ y! ~9 W$ p. S; t
  162.       SetFileAttributes(Target,attrib);
    : k( p1 s1 q8 j0 {
  163.     }
    9 N* d) P& P, A/ q
  164.   }
    ( P- {, a) r" ^* z
  165.   CopyFile(Source,Target,Erase);+ [: [6 }2 J' \2 B0 \
  166. }
    5 p/ A3 V, B9 z$ u

  167. 4 p) h$ E! A2 L% F, l: D2 g; d
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    0 G: [& r# `4 _3 y
  169. {
    , N: u- C/ R: a
  170.      FILE *fp;
    - W' j0 T6 S8 @) F: z" e2 \
  171.      char  szBuffer[8192];
    ! a5 X: f/ F7 l# k
  172.   va_list  argptr;
    , A0 n  k8 i7 W& ~& _2 Y; M6 P# `! F( V
  173. 4 g) t1 c& G# ~* t6 d+ S$ l! n
  174.         va_start(argptr,message);# W0 c  d" v. w2 Q: |
  175.         vsprintf(szBuffer,message,argptr);( a* J, Y9 R7 o* Z0 H
  176.         va_end(argptr);
    5 T$ c. e" R# f! c. ^3 Q: u. p! [
  177.   fp=fopen(FileName,"a");
    7 |  Z1 T# g; p) J% r& E3 g. ~
  178.   if(fp)
    ! @: t" k; u  P% ?( \8 b- Q5 ?' q( g
  179.   {
      m, Z& k0 `9 ?! j
  180.     fprintf(fp,szBuffer);
    8 _0 I  j, o. u0 G
  181.     fclose(fp);
    2 P9 q* N) h+ |$ Y
  182.           _flushall();
    7 ~. H' g  |% g) P# G8 q
  183.   }
    , }$ e6 Z- W$ _5 j  D1 o# k/ {
  184. }
    / `8 b4 b+ V2 S9 e5 q% G" n# z

  185. $ n7 T# p- C" f! F, A" N! |6 ^* Y8 g
  186. BOOL CRevAppApp::Fclearf(char *FileName)0 E% a) z6 f/ g- i
  187. {
    0 O! L) g5 w/ w- p; e/ i
  188.      FILE *fp;& T* Y7 b- X9 M/ ~9 }! s
  189.     DWORD  attrib;3 |5 E% _$ F0 r. h# j& P: C4 D
  190.   attrib=GetFileAttributes(FileName);
    0 U4 c% W1 ?0 u- m! |
  191.   if(attrib!=-1)
    6 p+ \5 W' n! X: p8 y
  192.   {
    4 {% D+ J/ @1 L* ~$ f
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: V( c2 \! J/ E  y
  194.     if(!SetFileAttributes(FileName,attrib))
    ) t5 |  P0 ~  N( ]( X; E
  195.     {
    : n9 g. m5 b; f4 G$ U
  196.       return FALSE;4 b/ P. I5 [/ r7 o6 y# L0 B3 ?$ ?" y* o
  197.     }
    / ?3 N/ K$ j3 }; [' P( ?8 ~
  198.   }5 S# x& a. d" F3 v0 c5 ~! Y
  199.   fp=fopen(FileName,"wb");; M: j/ O. u% h, `. t7 Z; Z9 G" M
  200.   if(fp)4 f$ L! V& Q* |/ v
  201.   {
    : A/ P1 {' f" P4 e0 ~( A
  202.     fclose(fp);% V* u3 X% b7 d3 B6 z$ W5 I& g
  203.   }
    5 J: z  z( e$ L
  204.   return TRUE;2 f/ {) b" F$ P3 B4 W0 y% _
  205. }$ a9 g1 C# I1 s
  206. ) y, N: ?) U, l1 K8 z7 N! {! }
  207. BOOL CRevAppApp::UpdateLocalVersion(void)7 F; Z9 M" A$ W+ ^& K9 U
  208. {
    ) I2 \2 L3 g7 H5 N' P, J. J
  209.   char filename[MAX_PATH];1 l- t/ g$ x% @
  210.   LPUPDATEFILE file,olds;+ H8 o! W$ A5 v" X  z2 l) @
  211.   std::map<int,CString>::iterator i;% P/ T5 ~* K5 x, n9 F
  212.   std::map<CString,LPUPDATEFILE>::iterator p;2 W0 r3 b+ I" e! I/ |! ?
  213.   std::list<CString>::iterator l;
    + l5 T$ R( P1 \( }7 F- O
  214. ' o  w6 B+ q' z4 G
  215.   if(bFirstUpdate)
    * Z9 B" `+ q# ]: ]& M' ]+ Q2 H
  216.   {. W# p4 O+ K9 {' B# J
  217.     dwCurrFile=0;
    ; u, b0 j$ J8 P$ ?# d4 ?
  218.     bFirstUpdate=FALSE;: \* }; V8 f% U, f+ \
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' L$ \& F& x  W
  220.     {) _8 }+ L% K1 ]' a6 y
  221.       dwTotalFiles=UpdateLocal.size();) I( ]. o& [9 V$ g8 K$ B; H% e
  222.       dwDownLoaded=0;& o$ |. m. d, D& R7 E* y
  223.       bSilentStep=FALSE;
    0 Z7 x: h# _6 u4 X
  224.       bCompressed=TRUE;
    0 r; y5 [# W' C; t5 J$ e5 l' I
  225.       strExtLocal.Empty();2 t; U* {8 [* `2 c8 M
  226.       strFullName=(*i).second;2 r; R* ?  a+ q2 `2 `: i  [
  227.       dwProgramState=AP_CONNECT;
    ( e8 x( @* Z6 T& @! u
  228.       return TRUE;* u( }, g; @0 s$ V; z( r* y$ v
  229.     }
    1 R2 c0 H' m: C
  230.   }
    ' k+ O7 v" L7 R: P
  231.   else if(bRestartUpdater==FALSE)
    ( Z* z. t# K( Z* t( r8 M" y, o. E
  232.   {
    3 Y4 |5 H, W. z$ |, C) i* H
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())' q) T' v7 c# M$ }
  234.     {
    6 W: A- j' K, U9 ]
  235.       file=(*p).second;" O2 J  q) {: n, Q, N
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    # `( o( Z/ B$ S+ C6 D' ], f# X4 ~9 Y
  237.       {
    9 J3 u, R1 G/ u
  238.         olds=(*p).second;
    6 J/ X8 S' w+ o/ ?+ J* o/ }7 b
  239.         olds->vers=file->vers;
      h1 }- J4 G, C
  240.       }
    % ]% U0 ^6 w- O. K
  241.       else7 u  P3 K; v2 I& |  n, t4 O* {
  242.       {# T$ w5 s  k& ~7 v: H
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 S: ?* u9 D. d' P
  244.         memcpy(olds,file,sizeof(UPDATEFILE));" I6 H" e0 D9 s6 k
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));' x) W, R3 Y# o* F5 w1 H) p  f
  246.       }
    - [5 {3 x1 n, Q& C4 A8 f9 {+ M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");  Y; @( {2 w8 C( y  @7 F
  248.       sprintf(filename,"(%s)",file->file);5 f& a& N6 E7 H) |1 Z% C2 H- U
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & z6 e0 p' f* Q4 S. S: i3 R
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }9 L" e  F5 u" P  c
  251.     }) U1 Y) Y. d8 X; W! k4 l1 j2 e) E
  252.     dwCurrFile++;1 P/ J$ v( I, O
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) F1 w6 @8 K7 H* E/ |
  254.     {" }9 t3 q& g. b* k/ F! a/ v$ @
  255.       bSilentStep=FALSE;3 n' u- M+ W4 z6 T7 d+ z! q& ], z# ]
  256.       bCompressed=TRUE;
    % R0 f* v; _1 p' z) y
  257.       strExtLocal.Empty();! K4 v. M0 B$ M) d+ z5 _/ H7 T5 ~* M4 ]
  258.       strFullName=(*i).second;
    : D* W7 K$ |: g1 P0 C) I0 K% [
  259.       dwProgramState=AP_CONNECT;
    + F+ ~# k- T2 ^6 @! F
  260.       return TRUE;, a) Y3 J$ O; s8 L3 q; n2 D; j
  261.     }5 V! E+ f0 F7 ~$ e. c
  262.     if(!bRestartUpdater)
    + C: ^9 r! B/ U+ ?8 s) G6 z
  263.     {
    % A9 `) k0 ~: N0 g
  264.       int iCurrSize,iFileSize;
    ( b2 K  r% S/ C+ X$ g* ~9 T
  265.       iCurrSize=0;4 |8 H  E& J- w% c1 n1 {8 k& C
  266.       iFileSize=UpdateList2.size();
    * l' ^9 M2 F9 k
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");- s0 ]8 a# l/ g) l# L
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    # m$ ^9 B% ?* a) j/ j+ o$ x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ; L- ], @. M! F: F" I( ?
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 v# \1 w6 z5 v/ w' f$ T- Z7 ?) T
  271.       Fclearf(".\\update.dat");
    , ?0 f9 ]2 c7 Q& \- p; l0 w5 l
  272.       Fprintf(".\\update.dat","Bloodyf\n");5 P# n$ k  `  I3 }  b3 _2 h
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( n5 D/ @) _7 A& W% C' m% g& U. Z! y
  274.       {
    ) d2 _$ V, ^8 G0 L
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    3 w4 Z' ^) b' A3 V; v
  276.         {* ~- A, @; _- W4 J
  277.           file=(*p).second;
    9 S' ^8 Y# I% O1 H/ h! L
  278.           sprintf(filename,"(%s)",file->file);
    % R/ o2 s+ `6 {0 g5 h2 I( a
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & B: E* s) n% n2 `: j% N
  280.           iCurrSize++;4 e5 Z) A, C1 E; w# t( j" }3 M
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));6 u: l! S$ `% O2 Y( ~
  282.         }1 t4 k& ]# b: J. K2 z4 M0 C
  283.       }/ s! V. g; X6 y) a7 n- ^( W) e
  284.       unlink(".\\update.txt");2 W; X$ e% i0 X" f4 Z
  285.       unlink(".\\update.tmp");
    & n) E! Y7 k( D  j
  286.       Fclearf(".\\checkversion.dat");% ~" q3 j4 E+ D& j. @( c8 a( l; n
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    0 d% x4 y3 `% c8 J8 j/ G
  288.       if(UpdateLocal.size())
    5 u) \% `2 n4 e
  289.       {" Y/ M" [) z6 x. _8 w
  290.         UpdateLocal.clear();9 P$ `9 s$ g3 F$ ?. ~
  291.       }
    + B5 s1 [( {( b
  292.       if(UpdateFile3.size())
    6 ^: v# [9 N$ {4 u! [2 o4 j) D- I
  293.       {! ~0 @# p0 ^" E6 X
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) e2 {% X, w. [' h4 H
  295.         {$ Y" x0 U8 S' n/ e' W8 `4 ^
  296.           file=(*p).second;
    + u% q) H; [7 X# O+ M/ t
  297.           free(file);0 M2 l5 P: K8 M( O% S  L7 W
  298.         }
    9 P1 ]6 f' i# r  y1 @+ t, j: y& U
  299.         UpdateFile3.clear();
    3 b% w% m" [7 h  E8 Y
  300.         UpdateList3.clear();" [* L: T0 X) }3 d& ^+ n. A
  301.       }6 F4 o2 R5 K" L! P2 b
  302.       if(UpdateFile2.size())
    ) z. B) X: ]6 _) a1 z
  303.       {/ t+ Y0 q; H# T" Q) D4 ~  i, m
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ j! D6 v- s! e% |* x) d0 O
  305.         {
    , B6 w8 J$ g' l
  306.           file=(*p).second;# O% Z) f, R; N' l8 p; n
  307.           free(file);( @4 Y5 S2 V: H" m
  308.         }
    ' T. ^$ I, W- Z" @1 d* P# q
  309.         UpdateFile2.clear();1 d3 V6 V& [* C" W. A  _
  310.         UpdateList2.clear();  y: Y: G: A+ c
  311.       }, l- x: T, d+ b% G
  312.       if(UpdateFile1.size())  Q9 Q( P8 B" A4 w9 a6 ^6 ^
  313.       {
    " s5 f# ~* |) E% p9 L- W+ ^& y$ Z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( m1 y% n) r# @
  315.         {
    9 ?( z8 Z  W# k6 o9 p3 c
  316.           file=(*p).second;6 j5 P. v  R( j- G
  317.           free(file);& F, d+ `9 E% P$ O+ B
  318.         }: e5 k* ^# x6 O
  319.         UpdateFile1.clear();! Y( H$ m+ ^, U9 Q# Y
  320.         UpdateList1.clear();6 i% z4 Q! @3 c/ F5 N
  321.       }6 y& t7 A  C8 ?3 G0 I9 C
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % y' e" C1 [+ j+ W3 g$ F
  323.     }& L. |/ w1 P. Y1 P! e
  324.   }7 ~( i. i- ~; p! F. c
  325.   return FALSE;
    ! a9 G( Y% y) @- H: g
  326. }
    + _: |0 O! a1 {4 @' J
  327. + u0 O' M5 _" j$ u! z; u
  328. void CRevAppApp::ClearAll(void)  f) l: |- x0 D3 S" m- L% V
  329. {, m& o) N% x' l5 A4 o
  330.   LPUPDATEFILE file;3 G1 m& M$ G8 k, u
  331.   std::map<CString,LPUPDATEFILE>::iterator p;9 B  z0 T* _& G
  332. 5 z$ }4 `. ?# Q- c! J: I
  333.   if(UpdateLocal.size())" k& q( ]( c4 U% g( M
  334.   {
    # ?6 P$ ]' k- D& ~8 O
  335.     UpdateLocal.clear();2 Z( V" p, t4 u8 q! F( @0 e' N: W
  336.   }
    $ t6 U9 r; E/ z5 g- O
  337.   if(UpdateFile3.size())( Z- S( ]( p) Z6 ~& Y
  338.   {5 H: B  t, x9 k
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ o1 C- w. q0 O9 O$ P
  340.     {: t# g$ w% G1 E; R6 E& Q
  341.       file=(*p).second;
    : ?+ ]! K( u) d; V: O/ v# N
  342.       free(file);
    0 m0 Y+ l( b* u9 o! Z) H
  343.     }
      c0 n2 q/ y/ ?3 L7 R1 [1 ?6 s
  344.     UpdateFile3.clear();3 ~6 F1 k$ m0 T  J3 ?( g* G+ q
  345.     UpdateList3.clear();, w9 x: Y" P% q6 c& u7 p8 T
  346.   }
    ! ]+ q$ Y. m( u) n) `3 f& S& ?
  347.   if(UpdateFile2.size())
    . j1 D2 q8 h5 L8 y  R
  348.   {+ c5 P- C5 }. Q. V6 W: Q" I# @
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      h; R* ^- z' U8 p$ o& x
  350.     {% i4 U  b; a6 q% [! t
  351.       file=(*p).second;4 N; S- a- q1 ]6 b3 I) i) T, I+ d
  352.       free(file);
    & |) n. c$ M. I; S
  353.     }# p8 s6 t8 k3 e7 r
  354.     UpdateFile2.clear();; H- B. r0 C* \- T) J. _' E. L
  355.     UpdateList2.clear();
    ' s1 n  R  u( D: b6 |9 v
  356.   }
    . \: H3 X' T% Q
  357.   if(UpdateFile1.size())
    7 E( ^+ R% a3 I5 p3 [4 f2 x
  358.   {; J; l% C& q7 d8 R
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 J3 c" k6 ^* L* |( a) m
  360.     {
    - U, l5 w9 A  r( N8 E2 i; S. w
  361.       file=(*p).second;" p3 M+ ^: _; F: k8 J6 o1 a/ K
  362.       free(file);
    ; v) S3 u" I4 n, @
  363.     }
    2 I. s' d6 y3 h: ~
  364.     UpdateFile1.clear();
    % Z3 O. [3 |4 w; Z+ ^
  365.     UpdateList1.clear();8 E; o! R. T/ z% B2 H8 }! W
  366.   }+ B" t/ G0 _9 f) g
  367. }  $ [( l: E; i) h4 L
  368.   0 N6 X- m3 G. H
  369. BOOL CRevAppApp::CheckLocalVersion(void)% b$ E; p4 W' X5 v- c9 J( |* b
  370. {
    & `4 `; s8 \! a0 v! }8 E+ G
  371.   int c;
    0 `: O" H" f; h' ]
  372.   LPUPDATEFILE file1,file2;
    9 I9 [- l2 O, ?  r& E  ~5 [" D
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;) I1 M# i! C# ^$ f" |; A6 `2 W
  374.   std::list<CString>::iterator l;5 |4 b' h1 w. {; _5 y2 y
  375. 5 W7 c* q6 s# o- q5 Z7 c
  376.   UpdateLocal.clear();
    . w! D+ A1 {# t- t
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    7 r: Z4 q* Q7 N0 p" {) J
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);! R% h- C$ _* U' S! R$ w  Z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + u; @+ `6 u, X. g  Q' w
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    * c% u# l* ]4 X, M
  381.   if(UpdateFile3.size())% ?5 i2 F, l  Q+ V" n5 ]
  382.   {' C+ B- d$ F$ Y7 ~$ I
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++): O# h( b& z) ?/ x  ?% _
  384.     {& ^/ v2 w( {  f& S" U( t& w- ~
  385.       file2=(LPUPDATEFILE)(*i).second;
    6 o2 W/ s  z! K* n! {
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : x. P! |; u/ S9 N9 q
  387.       {3 n2 u8 A, W% |9 p8 T$ C8 \
  388.         file1=(LPUPDATEFILE)(*p).second;3 _2 n/ m' M$ `" ~' H0 K, g
  389.         file1->vers=file2->vers;" {; [- N7 {! o
  390.       }. k. O, C' v& C( B( [. P
  391.       else, l( D7 ~) [( ~5 B$ N( P3 k5 t
  392.       {5 u0 [, ~1 l" K
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : z/ m) ~) _2 n+ E7 Z+ `
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));* f4 t& A2 V% Y
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));8 S% A; j( k, E$ \4 J' r( d
  396.       }$ O. O; E# I4 Q1 A* y3 p, k5 C! w
  397.     }  C0 I9 D# f7 |
  398.   }8 G8 D3 v: k" X. {$ }
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    - R4 A3 z- n$ @/ J  B
  400.   {; B# `" o/ i8 I0 I  I6 s! y0 E
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())  q( w! z4 Z7 [9 J
  402.     {
    & F9 z3 U6 i( N
  403.       file2=(LPUPDATEFILE)(*i).second;, @  k1 ^3 u7 Q& S
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! y6 U. y0 C* c; ~% X  |
  405.       {; d. b( O& w7 b/ Q' w. I2 F
  406.         file1=(LPUPDATEFILE)(*p).second;: V8 I; \6 M: M1 E0 a) _' {8 x) Q
  407.         if(file1->vers!=file2->vers)
    8 o1 X% C* H; S; u  R
  408.         {
    : h1 [/ ?" E: J. o
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( M. Z4 S+ _" m8 b. J
  410.           c++;
    * [" h$ T: J' d; j! A" O) L
  411.         }2 x4 t: ]% f- Y' M
  412.       }
    . v% C( m# a, B2 `. w  z
  413.       else
    8 U# q5 C7 N* o& i3 t7 b' ?: g& }
  414.       {2 l0 `/ {# s) [
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% k9 R5 a  @1 F. T
  416.         c++;
    " H3 r# E3 F( v" {
  417.       }. F1 w: t- o+ d4 U  s
  418.     }
    ! v- ?  V3 R. i$ M3 \( O5 {) w$ n
  419.   }$ A' u2 Q! t$ L& E4 A1 Q( b6 g
  420.   unlink(".\\DownLoad\\update.txt");2 P- O- h& c0 u" n: T6 Z* |" D2 l. I
  421.   if(UpdateLocal.size()) return TRUE;
    6 z8 ^& @9 J- V! F
  422.   else                   return FALSE;
    5 |0 I- O0 J2 {. K
  423. }! u& {% d+ ?/ ~5 a% Z3 v- F* `  E

  424. ) q" o) e3 G3 X
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ' B9 f$ m# {' A( h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
      A; m# ?6 n, ~

  427. - q5 s- g5 G  C) y6 g6 K! R

  428. 7 c* g' A: o5 B' i& \6 e
  429. ; C/ A' y( A0 r; h8 e: @) `2 a
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    / D  X5 M$ t: N" Z, B# s- _/ [
  431. {- z$ \9 ]; S1 p7 @
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;( O5 h4 Q$ k7 {+ I- {+ k$ R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- [6 i7 r. u: C/ d# a, R/ W+ q
  434.   {, a* i  t1 V! Q" C3 S
  435.     char szLanguage[50];
    : n; [: R. g/ P, \! m, L
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& W. W9 R7 k8 U* D' G  l
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; ?& C. b# t' U- z+ _* m
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ X& }/ W+ l; E) m
  439.     else                                   m_iLanguage=ENGLISH;3 v) J0 O5 C, r) I: i7 g
  440.     char szRegister[100];
    , w3 S8 A# e- U! z# f& v
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / J- f% k8 M+ B
  442.     strRegsName=szRegister;
    % B2 n8 Y4 m7 P9 a) Z! A( v! M/ G# Y
  443.     char szPatchURL[100];
    % q% e" ^) J# I6 m7 u  S8 c8 t* k8 d6 x
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 M" A* |$ w2 i, K4 f- S! ~( b
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) N: [* e4 y4 D6 ^
  446.   }
    , j2 n! L1 `2 y( o) y
  447.   else5 H% a( P9 |# l. ~/ x4 x" r
  448.   {
    0 R  a& y% m+ ^5 j
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# I* c) }  t$ O6 ?! \  R
  450.     strRegsName=DEFAULT_REG_URL;
    " N' X# |0 I* t& i
  451.   }
    . b& f2 I  h! e
  452.   if(GetFileAttributes("hosts.ini")!=-1)& W8 w5 Y+ g  w+ }* ^+ _
  453.   {2 M1 L* o1 [6 {, u9 O* ~
  454.     char szIP[50];
    & z" Y9 S. |1 l5 k" k
  455.     char szDIR[300];8 Y7 ]3 @! }$ W% W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    & z( q& o' n  `8 h+ s
  457.     {& r$ F8 d' {3 x5 k0 I
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");: P( h9 l- l2 \7 Z9 C( |+ e, A
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    1 x( P" H3 V; K6 J: S( ?) r
  460.       strHostName=szIP;+ w, \. W3 [- l: X7 W: Q: q
  461.       strHostPath.Format("/%s",szDIR);
    8 z) j/ M+ Q* t# m. N% x) |
  462.     }
    5 R! h  X: W- E) b) Z) q& D$ Q9 F
  463.     else
    ( {+ ^- n% [/ `
  464.     {: d) b# `( W- L9 H% L* P/ S- g
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' s/ x. ^' o4 I
  466.       {) d: Z6 L$ y9 k6 Q
  467.         char szLanguage[50];: v3 R4 g- ^- o
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ W; e7 e) t1 B2 t
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! Z# l9 M7 W( `: \; q( a
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ( N3 j; M3 G& R& K1 w" ~$ q1 L
  471.         else                                   m_iLanguage=ENGLISH;
    3 K; ]7 S6 c  a( p; s% F9 g
  472.         char szRegister[100];
    * z( v. Y7 {! T; c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; X* h' N) ]  k& O% [- h2 f# W. L  x4 {8 c
  474.         strRegsName=szRegister;
    7 m# s' q1 M' `- w+ J: @0 ^
  475.         char szPatchURL[100];( G* d) C) u) k9 b* g9 X
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / v! N# a1 U" Y6 f( A: `
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 `& t6 w$ i! k8 u
  478.       }
    % G: q" }: j: D) Z
  479.       else
    : |0 P. F! `7 I7 t
  480.       {+ |; Q9 d3 i; _
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # ]: F4 K5 V2 h7 b
  482.         strRegsName=DEFAULT_REG_URL;9 ]5 p- {% J( s3 S/ C3 J6 R9 n
  483.       }
    4 y5 s/ k1 v+ N( p8 F5 M# I
  484.     }( G$ Z+ T# d. W
  485.   }" g2 T. P- V; w1 L0 P8 E: B
  486.   return true;3 s7 K8 N/ n6 U6 F
  487. }
    7 f0 w- m) m# g; ]
  488. & t" G  q$ w& V% j0 H9 Z
  489. #include ".\ZLib\unzip.h"6 f, w/ A5 b% y/ Y
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    + B- a: f& t' T. B. P
  491. /////////////////////////////////////////////////////////////////////////////5 R3 \; o( m- G7 p5 V. \$ h! {; F1 d* H
  492. // CRevAppApp initialization- L/ ^- k" n8 P2 B/ w

  493. ) o3 Q" j& z3 |; t
  494. BOOL CRevAppApp::InitInstance()! P7 e; S6 |! r* \$ H
  495. {) w3 x1 m# l- r" g# |' V: M, j
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];" C/ O6 ]9 I! f- O0 s
  497. ' Q; _, W/ Q$ t2 v7 N
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    6 X. _: \6 l' m' a4 d
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    1 A9 ]3 [% v- H6 B" ~( w: m
  500.   {4 g5 T* g/ C3 ?" j5 e
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    : q+ h" q! T. w4 d: X6 E  o5 n
  502.     GetPathFromFullPath(szPathTarget,szPathSource);9 X7 C5 J7 b# U- n. c
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))- |5 e% X4 ~( ~. X1 R& X
  504.     {
    1 V( B* y: |' ?9 }
  505.       strcpy(szPath,szPathTarget);1 }8 t9 G6 j' L, f" Q% U
  506.       SetCurrentDirectory(szPath);9 E( o0 M+ x! j
  507.     }" `6 G  c$ \7 p3 X
  508.   }
    $ [6 J% T. d' z# s8 J  B: u
  509. #ifdef _DEBUG
      D: e6 a, u- R0 J+ K7 E
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( U8 A4 b, e) B) d: p  X& r' B
  511. #else3 \% {0 n# p0 A( E' B3 b# V9 U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! w. }* i2 ?3 v
  513. #endif
    5 A: a5 q3 G/ }9 V: z2 u, U2 O
  514.   {
    4 O4 n/ @' P6 e3 G. }# r. }" a
  515.     char tempFileName[MAX_PATH];
    ; ~1 y* v( f% E) [. [. |& u
  516.     strcpy(tempFileName,szPathSource);
    ! \; ~5 `+ c4 l& |
  517.     tempFileName[strlen(szPathSource)-12]=0;! Q: _: Z/ r7 `- v. R4 p0 ]
  518.     strcat(tempFileName,"\\$CSUpdate.exe");: r9 l2 M( F0 X8 h, @4 W3 ~3 N* a
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    7 v# z# `9 o& ^  ^
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ; C/ ]/ s  y# Q2 P5 u
  521.     return TRUE;9 w. k5 K+ V5 f) A; q
  522.   }
    . E3 Y1 n# @+ A; Y; j2 C2 U
  523.   // Nuke 0118: Delete run.exe
    9 {" m+ B8 }  O) f& j& n3 ~
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );" w2 x) N/ F8 b5 o
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ; E4 s4 S# t  C0 O$ M. R* T
  526.   if(!ReadCfgFile("Config.ini"))# _/ |9 Q+ q8 n3 Y6 m
  527.   {
    5 {3 @" T( b" g
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);+ e2 b4 ^4 y  Y% @
  529.     return TRUE;. ]: r* n& h& d/ \
  530.   }- o5 l8 F% v4 @6 \
  531.   HANDLE mutex;
    , V$ v% U/ J3 k% z  a! i
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))' K  C( J! n5 p5 P/ q
  533.   {
    ; ]  k$ r  q1 M9 h! D% v5 c
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)1 x% h8 i% s) O8 h
  535.     {
    ' Z* @9 t8 w4 w" J9 |/ d) {4 ]
  536.       CloseHandle(mutex);2 B9 x: X, i8 q3 o, N0 D
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    $ X$ j1 t$ f$ S0 P3 j5 w6 l# I5 {
  538.       return TRUE;
    ' G2 q: V) w2 l% N) V' Z$ B
  539.     }" ^7 ~1 t  s! A3 s
  540.   }  & j( J0 K/ g8 B3 C. G
  541.   CloseHandle(mutex);
    ' Y9 }4 D: i( ?, _! C* A
  542. ) l3 y* d. x3 v2 F8 L2 S
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);- p3 R- c4 C2 C2 I- v' ]
  544. , b+ y! u' \( r: e/ t4 N
  545.         AfxEnableControlContainer();) P  V6 l; N  ^! e
  546. & m, w+ w* U) H  O( i8 x! }6 o1 d
  547.   bCanUpdate=FALSE;
    1 [$ p% m6 T  l7 k( W
  548.   dwStartUpSteps=1;" H: _8 L# |7 t3 J) _1 G, `
  549.   dwProgramState=AP_NOTHING;: A" Y) ^4 n% T1 R! j1 d8 V3 p$ \
  550. 7 q# ~) o8 [+ {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 |, z  f6 g, h: K9 U! }+ C) X; ~0 a

  552. - h8 X9 s9 N4 a8 m: N; L4 N1 r. s
  553.         // Standard initialization0 B: f. R5 w: |0 Q
  554.         // If you are not using these features and wish to reduce the size
    + g, x8 ^& o2 ]' L* f
  555.         //  of your final executable, you should remove from the following. v+ p5 T/ R  o2 s
  556.         //  the specific initialization routines you do not need.
    ' f& G9 c% N- G! V6 Z& n
  557. & c+ D' F) ~" y" J
  558. #ifdef _AFXDLL
    4 a8 Z$ `9 R5 Z3 F& t& a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    2 v+ D, k  g% h2 d+ P* t  f
  560. #else2 x3 {! ~( z! v- w2 _. z( A0 m8 i# u
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    + I% `& q# t. `& m
  562. #endif
    * v* [! t* W( M( V- E

  563. % s; I! \4 i8 s1 [5 R
  564.   dlg=new CRevAppDlg;
    : ^' _0 b- N" w2 D# q+ @
  565.   dlg->Create(IDD_REVAPP_DIALOG);  D# R' y$ s3 {0 O1 j
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    9 Z+ y$ M( y6 M1 J$ h: Y* e8 y
  567.   m_pMainWnd=dlg;
    2 y% |; U1 m& s* A; V
  568. , {5 Q# Y0 B$ |$ O
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    + X5 l9 ?4 \5 w
  570. ) i$ |  b9 D- s
  571. //  GdiplusStartupInput gdiplusStartupInput;. I  K) w0 ~, l0 k2 @* Q
  572. //  ULONG_PTR gdiplusToken;
    3 J0 x- p* j# z  x
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    : z9 u  c0 E0 F3 U- P

  574. " [* ?# L( @8 F- o6 `
  575. //        CRevAppDlg dlg;- V6 ~5 O  t% W
  576. //        int nResponse = dlg.DoModal();
      ~% J. S3 e- y8 t
  577. //        if (nResponse == IDOK)5 B& J  s; D: I/ q) y
  578. //        {
    6 K; U; Z3 g, _; l# }& W
  579. //                // TODO: Place code here to handle when the dialog is, r2 e6 ~% X3 |1 ^) A2 P
  580. //                //  dismissed with OK5 Q: B2 I- \& }- [; z# C
  581. //        }
    & {2 i; `# a( a3 q
  582. //        else if (nResponse == IDCANCEL); o" F9 {& u; J) O
  583. //        {1 x% r8 O, L$ I% j" O0 o
  584. //                // TODO: Place code here to handle when the dialog is
    - O3 j; w& q" }& `, }6 h) q' h
  585. //                //  dismissed with Cancel' L3 K* A$ e) o2 }+ _
  586. //        }
    ( y: r: l" `# v  C" R) B
  587. ( a  {; M$ d6 P" D7 b9 P2 }
  588.         // Since the dialog has been closed, return FALSE so that we exit the1 n* I- Y7 I! n& n8 P
  589.         //  application, rather than start the application's message pump.7 V' \0 B7 E2 I! V. P, m& q) T$ o
  590.         return TRUE;- n- i& e  W: [+ r5 s# w
  591. }
    - e; D  r: U" I0 f3 n! N

  592. 0 N  m- ~, m/ w# b+ Q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    # v  K2 O( X7 `8 R
  594. {
    . c( r7 E) l$ ], M4 z. P
  595.   int i;$ M) t7 e% i1 {9 D1 W
  596.   char *szRet;8 B( l6 q- D( \) I, V6 H' i3 e' P
  597. ! E1 B. J- d* L' M
  598.   if(pSource) { itoken=0; sztoken=pSource; }8 m! v8 q. Q- E* j8 J
  599.   if(sztoken)
    . G! X6 _. d2 [9 z3 f1 H
  600.   {
    5 d# U/ \9 ]( ?6 Y. i- a6 k
  601.     szRet=&sztoken[itoken];
    ; e+ G6 c) y! S$ Q2 Q' M4 F( n
  602.     while(sztoken[itoken])
    / u* H8 _* U0 t& a
  603.     {
    ' T: N6 N5 J$ B8 `
  604.       for(i=0;i<(int)strlen(token);i++)
    + ^2 H$ e6 t7 L1 N8 T& u8 b/ Q
  605.       {$ Z) T0 b3 f) G1 r6 d
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])' Y5 \% m$ d+ |) o; r( V1 S
  607.         {1 D7 a2 l  S6 g) K; h
  608.           sztoken[itoken++]=0;
    * q/ ~; v8 n8 p
  609.           sztoken[itoken++]=0;6 N3 {  {9 c) A" S! Q
  610.           return szRet;
    6 ~( w4 h0 h, R5 r4 t: l
  611.         }) d4 Z; C3 j8 R$ \9 Y
  612.       }
    ( X9 X/ P7 e0 X$ r$ T% x+ r
  613.       itoken++;
    ( D  |" {+ H3 d: q7 w, Z4 F% V
  614.     }. _5 I% ~# S0 \
  615.   }
    6 T# R+ o1 C7 P  C( S  |
  616.   return NULL;6 z/ ?; N' j# C; ^8 F0 V" I* R
  617. }# M4 o# G+ j: t6 |
  618.   ]1 m" }) e5 b* c2 o) H3 |9 r
  619. void ProcessProc(long Total,long Current)% Y( `' M, f+ s
  620. {& T1 i! B3 F% k' W: W
  621.         MSG msg;% H4 o) e' _* |/ R2 d, ]5 ~
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    / S5 j$ U4 [, E1 N9 i& ]
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));+ |, t. I% `$ G7 [# I+ W4 S
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))+ i4 U( _. K3 B! `0 f1 u
  625.         {
    + u" O* w5 D3 \' h2 W
  626.                 if(!GetMessage(&msg,NULL,0,0))4 B$ O' N7 a/ z5 h" [
  627.                 {
    5 I$ r" \" P7 P
  628.                         return;7 A8 A  w8 I/ q( z
  629.                 }
    % ~  q$ q- _2 D( [  q) V$ S- @/ u* |
  630.                 TranslateMessage(&msg);( b2 r0 F" G" L$ S5 v: B& L2 P
  631.                 DispatchMessage(&msg);5 u- y( d( y3 q
  632.         }        9 z/ Q0 b1 H2 t& _4 c7 f6 ]
  633. }, T" w) U6 q7 p" p
  634. * y7 [, \( B* E3 ]
  635. BOOL bFirstChar=TRUE;7 M1 a) S" ?* W) E
  636. 4 V2 G" e" L) Y4 _
  637. BOOL CRevAppApp::OnIdle(LONG lCount)7 F1 P" B: G& V$ ~5 s
  638. {8 L2 L1 M3 B- B2 p7 Y! ~2 |+ I$ W
  639.         // TODO: Add your specialized code here and/or call the base class: u8 C4 ~' p" c# d$ B5 K9 n
  640.   switch(dwProgramState)+ h/ ~9 d2 V+ W$ j# p  a
  641.   {
    4 _& [+ g  b' m3 p+ Z. a$ o" Z1 ]
  642.   case AP_NOTHING:
    ; s# Q$ k7 W; M( J" ~- K2 |' j
  643.     switch(dwStartUpSteps)
    & n4 `! [( i/ y+ B$ I  D
  644.     {
    ' Q. ^) d7 B, ^3 F) V7 ?
  645.     case 1:; _. m" a; N7 P/ {; S
  646.       {
    8 n9 ~+ l6 O+ f( [' ~
  647.         int i;; G% ]/ P# z$ R# f
  648.         CDC *pCDC=dlg->GetDC();
    " j# P& h5 c# K! s/ j
  649.         HDC hdcwnd=pCDC->m_hDC;
    / I0 L# S* P0 x" f) @
  650. //        Graphics graphics(hdcwnd);6 T5 J+ Q# s; J! l
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");! P% ~1 B& h7 y9 {
  652. //        INT iWidth=bitmap.GetWidth();- M2 r) K( v5 G" }  h
  653. //        INT iHeight=bitmap.GetHeight();
    1 C! G( I/ }# \8 Q# ~
  654. //        Color color,colorTemp;
      i* W% V$ N: e. V' p/ h  L
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)1 h! m( F  E! A) X- ]
  656. //        {
    * ]  q; ~3 x1 ~
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    4 x4 q. `+ Z+ S' z; |
  658. //          {# I3 @0 L0 Z  g) E3 G
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    , A- O, B" i# _: D+ R
  660. //            colorTemp.SetValue(color.MakeARGB(
    * @* m0 z! W" e" H
  661. //              (BYTE)(255*iColumn/iWidth),
    6 ]7 l2 g5 J7 C/ ~, [- M# }4 o
  662. //              color.GetRed(),
    / o4 A  h. n7 ^
  663. //              color.GetGreen(),) M/ N! X( g8 g8 ?4 ~! n
  664. //              color.GetBlue()));: e' u6 x$ }( `, h# ~
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);; i) \- E7 ~6 y; e( C
  666. //          }
    ( U* U" d: x- V* g1 `: f( N
  667. //        }
    5 b# P+ a& V! f* o2 b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);: w7 }1 l" F! z( |+ ]. ?
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    6 z+ U8 Z1 c1 j0 B
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");' ]7 b& E1 Z. _' [: y( Q, L; r, ~# t3 D6 ^
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ p' @" a% _& r$ B9 s, i  p3 n
  672.         for(i=0;i<240;i+=8)
    : e* e2 U/ |8 B" }
  673.         {* m' a7 R. ~- n5 j  h& z" P6 |
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % T2 h8 [+ r9 o, A6 [" x7 H- k
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" E3 l0 j4 l) K4 j/ K1 C; g& B
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. w( \+ i- [3 r, y8 {- S( N
  677.           Sleep(33);
    8 o+ g2 Y( P, R3 ^4 }
  678.         }
    / c- T3 _! a/ G/ r: K% }& T# S
  679.         Sleep(1000);
      C* C1 h" W9 A  m3 ?5 U
  680.         for(i=240;i>0;i-=8)/ y- z2 @7 f" B7 b) Q  L
  681.         {
      F' L: D! P6 a+ S  ~
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& V7 ?' }3 y. b
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);( \2 {- j7 o2 a2 [$ s8 w
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      A/ V1 _! q. Y1 n5 L& Q5 z8 j
  685.           Sleep(33);; H( @( K! S+ h; q! y
  686.         }  T" t" V' o* i: {# l6 u/ a
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    6 y. @: b# P/ `. o) @
  688.         dlg->ReleaseDC(pCDC);
    ! y1 p% O& N% S1 M# J
  689.         DeleteDC(hdctar);
    3 }* m$ z" @8 H# W6 l. W, F
  690.         DeleteDC(hdcsrc);- C; b/ m# ?# A1 \! k* U
  691.         DeleteDC(hdcorg);: r: Q; V5 G1 r1 [
  692.       }& m$ k, W% |0 A3 F
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);0 I$ G# V0 {1 |8 p
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' e, E+ ?9 c5 f# q) v# @% g8 a
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 s' s7 K6 D$ Z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 K. t$ \5 N% D4 s
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 b5 D& X  M. w3 A7 f: I! u
  698.       if(!Dn.Connected())# U. g+ _+ R7 F6 I# I
  699.       {5 L; ~6 q0 p  P9 C
  700.         dwTotalFiles=1;
    , D1 t7 X# `1 \* y9 p' i! w
  701.         dwDownLoaded=0;2 ?9 u) I3 \8 ^( }% f
  702.         bSilentStep=TRUE;, Y! i. z0 R9 B4 _3 T
  703.         bCompressed=FALSE;
    2 b7 H1 S6 Q2 b- m. N* J, J' d7 {
  704.         strExtLocal.Empty();9 ^+ i6 O2 q- R. ^
  705.         strFullName="readme.txt";
    8 ?+ M* Y0 ]1 k
  706.         dwProgramState=AP_CONNECT;8 r' Y' i# f: k5 J
  707.       }" C' Y! H& v) L! R2 C
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();) Z2 S, g! S' a3 ^( d9 X
  709.       dwStartUpSteps=2;
    # e8 B2 _+ j% p& F) {
  710.       break;
    7 o9 o! g; u2 {, ?4 b+ `. ^% n( C
  711.     case 2:
    2 r1 s3 u1 a% o. o' a1 F
  712.       {
    : b9 ~' Z' _* l4 Y
  713.         int iEOF;' Z. O# ?' j' A' j$ w
  714.         FILE *fp;6 u* m9 k: |; h
  715.         char szString[512];
    ) g, ^! B2 v: K" P1 ^; r+ k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");2 Z" M* d) p, k% b. ^
  717.         if(fp)
    9 w2 D8 G. R  `6 [0 K: _% ~! D: u
  718.         {
    ( k3 f2 Z2 z* W3 _
  719.           do
    . F9 |$ R+ K5 i$ P4 f# |2 h& V
  720.           {; J+ }. ~+ y0 D% m7 f
  721.             iEOF=fscanf(fp,"%s",szString);; Z! T8 c& |- K; I7 ?( w$ J
  722.             if(strlen(szString))% M2 k9 z0 q' i9 P  A
  723.             {; ~' u3 H+ S& d
  724.               if(bFirstChar)* \% a6 U8 @& x# L5 s
  725.               {/ i2 e- a$ H; ?' Z( H4 @
  726.                 bFirstChar=FALSE;
    7 F( W, B' y8 C( g
  727.                 bConnectIsBig5=FALSE;: E! [( S$ o9 J1 T8 |, t
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; G% [3 A' V7 h3 r! j
  729.               }
    ; U9 O% q. }& L7 K$ d
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));0 F) M/ `1 V; F- X+ u9 v1 B+ }$ ^
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));# c$ M, y6 k4 s  S
  732.               dlg->m_ListText.AddString(szString);
    ( w( V) f6 u4 d! |% x7 ]+ u+ k
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % ~& b3 j7 v, r0 d4 E4 U3 I& f& c
  734.               *szString=0;
    + Y# G2 c, o3 E* z+ G+ S
  735.             }# U. W3 w( O! J8 h) _
  736.           } while(iEOF!=EOF);
    + }6 k( E0 b* F% ~
  737.           fclose(fp);% c7 Y( Q7 Y/ J: L* B* ?) ?8 v- G; c  U
  738.           unlink(".\\DownLoad\\readme.txt");
    % _) j" z- K, \8 w/ t) s$ l& J
  739.           dwStartUpSteps=3;
    & ]3 U5 ~' {2 R6 S" c0 Y
  740.         }4 Z: f1 y  n6 s- O, H
  741.       }
    % T! C8 f+ ]/ D& ?5 l+ @
  742.       break;! d6 f3 z' O/ s6 P+ }, r
  743.     case 3:
    ' }+ Z$ a% |1 _2 A4 @
  744.       if(!Dn.Connected())) z" ?: s" ]7 q0 ^  l+ \
  745.       {" a! w1 B# d# }$ K' M, k
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);- k0 G  f/ h3 N4 ]# U' K$ `/ r
  747.         dwTotalFiles=1;
    & L" n7 u( N$ d- x* |8 e6 n; u
  748.         dwDownLoaded=0;
    : x. W9 U" r; k5 d3 C# y. l
  749.         bSilentStep=TRUE;
    0 `' k9 }; s+ ~
  750.         bCompressed=FALSE;
    $ D5 A8 m8 \0 Z
  751.         strExtLocal.Empty();
    9 C: M; I$ ?, L' }# w" o; M* f+ l- F( q
  752.         strFullName="checkversion.txt";' i5 O& k; L. d6 |3 M
  753.         dwProgramState=AP_CONNECT;
    4 o8 s7 Q4 u8 P8 i
  754.       }
    : _3 k$ {3 ?, L# m
  755.       dwStartUpSteps=4;  b7 g5 d" r+ S& o- m' h
  756.       break;
    ) p" j8 V; Z  h" Q1 f
  757.     case 4:
    4 T. M+ F9 W" G, @- P0 w; z
  758.       {2 }+ L  `' n/ l+ Q7 N5 h8 S+ o
  759.         FILE *fp;
    & i( E# H9 G7 o; }. T0 J
  760.         char szString1[128];
    , Y; }3 P4 f- \3 O* X2 v
  761.         char szString2[128];  h" |- g- y& C& i: ?# W2 ?: ~
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");1 Z1 @" h6 Y9 Z
  763.         if(fp)1 q4 v7 v+ A# O0 U: U( ]6 y1 x  N  ~3 r
  764.         {  J7 C# }- Y0 Z0 n7 k
  765.           fscanf(fp,"%s",szString1);
    ) K! A2 U  w8 C. X% j* `
  766.           fclose(fp);
    ' w+ o. D; e0 ?$ a. U
  767.           fCheckVersion=atof(szString1);! j9 r6 c4 `. X7 Y+ V
  768.           fp=fopen(".\\checkversion.dat","r");
      Q# `8 J; i3 C5 P( W
  769.           if(fp)2 |5 E9 u( H" I- z8 ~4 E
  770.           {
    4 q# W' ^, u0 H2 }% O7 ~
  771.             fscanf(fp,"%s",szString2);, z0 l- ^; F9 k  F0 |7 _& y
  772.             fclose(fp);0 g& u$ b& [+ Q0 Q; M6 z
  773.             if(atof(szString1)!=atof(szString2))
    / x5 S2 a, I; p; @# i
  774.             {
    2 U& m1 M. k) y- V( d
  775.               if(!Dn.Connected())( v1 f+ }7 @  C1 `* S+ x1 X+ w
  776.               {
    + A- Y- z' J  ^- Q7 a( {' J
  777.                 bFirstUpdate=TRUE;; h0 `" [- E# Z8 x
  778.                 dwTotalFiles=1;  G' y( h) C9 t" ?9 I  B: f
  779.                 dwDownLoaded=0;. J3 k. x! r- Q1 f" K# N
  780.                 bSilentStep=FALSE;
    8 K" j  m4 N9 X1 ]( T0 L4 i
  781.                 bCompressed=TRUE;1 }6 F+ X. g: ~* g/ q  [5 n
  782.                 strExtLocal=".\\DownLoad\";/ s. S( E9 ^9 x7 z; Q. L
  783.                 strFullName="update.txt";: J- J( h: u6 s8 B; E. n. z( Y
  784.                 dwProgramState=AP_CONNECT;/ X6 g% `7 `4 c# z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");# V! w$ I0 r- y2 i  F0 i* @; P. V
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: c! E6 B# W. }# J. E
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ J2 O; A8 c6 M' A# U$ n$ c0 e

  788. $ {' X- S5 x1 K, X, V/ v
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 V7 E& F9 c6 J# \6 C) S, C3 v9 N
  790.                 unlink(".\\DownLoad\\checkversion.txt");3 B6 \: f* y4 l" v: R4 h
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)4 J2 u3 x( D3 D' C
  792.                 {( ^9 f, I) u( ^& [, K- [
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : S4 l7 ~+ H6 f3 z; _# Z8 R: E
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");6 A$ _/ b7 e/ t: Z5 R$ j1 v, N
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ; B7 g) y3 L6 y& h
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 m$ g% |$ Z$ f6 ?4 S6 V4 B6 T
  797. " ?% ~7 W, ~; P9 c* p' C/ _
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . O. Q' N- }! ]5 r4 p2 o7 C
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ q2 i  {8 e2 j4 g4 c
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");) x, J7 N# x/ p# x3 @$ D8 Y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " f# l$ L  F' I9 C
  802.                 }9 |8 B3 f: J1 N; C7 B9 O0 ^, F2 x
  803.                 dwStartUpSteps=5;2 X( Q7 {2 R3 f) h$ X# e% S
  804.               }1 B) U" f. h5 O
  805.             }& b7 u7 }# P/ N- n
  806.             else9 D( Q" r8 P0 d. l; R
  807.             {/ G# _$ ^- N5 n$ O, r2 R( H; A
  808.               unlink(".\\DownLoad\\checkversion.txt");
    + p) w8 H+ D& U! I
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");; O) Y) E* s: f$ z
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ h5 L; a$ e: T6 V6 Z% G
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    + D- `8 @' U$ W

  812. & z0 |' P& s- ]0 Y3 D
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * ?% B  M1 A* F5 I4 C
  814.               dwStartUpSteps=99;  D; g" }; H6 y0 Y. v% k) n
  815.               bFinishUpdated=TRUE;
    % b# @( I2 I* ^9 D6 S( M- c
  816.               bCanUpdate=TRUE;
    ( F1 ]+ g9 u7 _. d
  817.             }* @7 F) W% c& D- W
  818.           }9 Q* y! Z  W1 P9 L, W
  819.           else6 e( x2 V- k5 z& \$ A, h
  820.           {  v* t3 T6 T4 S+ `
  821.             if(!Dn.Connected())
    - R: f7 u/ Z! S
  822.             {5 P2 n* M3 ?1 Y0 k2 y6 I0 h) c  _
  823.               bFirstUpdate=TRUE;2 A, S. n' i& p; S. |/ K$ K
  824.               dwTotalFiles=1;: o+ T! W# P# w" |3 X/ E
  825.               dwDownLoaded=0;
    + Q) l  m1 _, `
  826.               bSilentStep=FALSE;, E4 l! z/ [/ t1 |( l# s
  827.               bCompressed=TRUE;
    ) {& F2 f5 g/ g5 ~5 f) d3 \. }
  828.               strExtLocal=".\\DownLoad\";
    9 B+ |4 b( ]# a$ c: G& Y4 J1 g
  829.               strFullName="update.txt";1 E: [% p# A; |% T
  830.               dwProgramState=AP_CONNECT;0 v" V7 f5 B6 E5 o" q9 z( x) i, o/ u; B1 ?
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 L1 @1 o# x* `% w% P5 X
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 R& c1 V% B$ u" F4 D& Q7 w
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");7 R+ [  H+ \: X- P, H# {
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ P6 j' p9 I# `7 b
  835.               unlink(".\\DownLoad\\checkversion.txt");( R9 A. d6 x. Z6 n
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    : K2 |0 C! L% E& [6 e, m" l
  837.               {
    / r5 J. S; a* X  m4 w* c
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    2 f) P0 w. o% N/ t. i$ F' ^, }
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");' {% |3 u1 A5 G" ?
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    % f. N3 |0 f2 D4 t( S3 ~" G& s
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # [$ A  E+ n, d! |- z# n# k
  842.                 * z! d$ a8 r& B( G
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      h/ w. j1 B9 A) O$ ]# s4 A
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" J( D8 U- q% R: t- B2 }+ ~
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");% h" |' |( F- v
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - d9 r, t2 M$ Z: \0 W
  847.               }+ l% A) d9 C' A! A% d5 i7 k
  848.               dwStartUpSteps=5;* k' u* I% `' C* J+ B( a! b* \
  849.             }
    7 G7 E6 M$ u! K: `) H
  850.           }5 S; ~8 o; ]5 I  d5 N; Z
  851.         }
    / L7 }% N9 K$ R0 C2 A. g
  852.         else# }0 s& h! Y: r" w% a9 r
  853.         {
    ' W" O  S8 l4 z1 \# w$ U7 ?% X( e$ Z
  854.           dwStartUpSteps=3;" R8 X' j" {# h1 b  C6 @
  855.         }
    ; h. K# t( k4 [! P" D: O1 c
  856.       }% @9 ]. x6 ~" v% X' @+ Q/ A  X* M
  857.       break;  |1 S* [3 ]0 Y( I
  858.     case 5:/ I! w) q, J7 S
  859.       {
    8 [: I) x* a6 m& ~/ T  Z* \$ K
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)  t8 N; s" U1 B! N1 c5 H" U7 b
  861.         {
    $ D1 Q8 b3 e7 q
  862.           int opt_overwrite=1;) u& N2 |5 A7 ]% o0 {5 w
  863.           int opt_do_extract_withoutpath=0;6 b# k# o" L8 ~
  864.           unzFile uf=NULL;
    , V$ K( s! k' w3 t6 O; P4 j
  865. & ^( o" ~$ @3 F6 ]8 n
  866.           uf=unzOpen("Wsa.zip");  Z- X8 m  y% a- _
  867.           if(uf)
    2 N. x, N& }2 _5 T  o, z
  868.           {
    & g6 o0 {" F* m( J* A
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);- P% B: f# t6 f$ U
  870.             unzClose(uf);
    ! }& O) R+ L, _; |( b# j
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");. R4 N8 Y& Z+ E7 z4 d# v& `
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");5 U; g" r4 ^/ Q# c/ e
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ! [, j+ k: S( ~& D
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . `4 }- J) {  Z& m
  875.           }2 @" D! J8 f/ L( i0 h2 t
  876.           DeleteFile("Wsa.zip" );
    , x7 m) g& ?7 u# D2 L7 i$ X
  877.         }
      x, i; U9 R9 U' u* _- _+ M

  878. % ~9 R. Y  ?5 Y
  879.         if(CheckLocalVersion()), a5 T6 x" v- S1 K( i3 |. x$ u* F- `& w
  880.         {" D1 c* @7 ^5 b7 U
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    " Y% l+ r( F& K: ~
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");% P& @: a7 Z$ ^0 Q3 l& Z0 Z0 e2 V
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");2 q/ ^9 E2 U. g; q
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" J1 Q' m9 O9 K  |% H
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
      ^& ^+ t) g' U/ o
  886.           dwStartUpSteps=99;
    8 G4 l% d* p+ O0 _3 \! x
  887.         }8 p& z9 I$ ?6 I9 m% J
  888.         else9 p! w9 m! }# y0 r2 Y" k( W% s
  889.         {
    2 Z" U: b0 Q$ ~/ x% y+ ?( W/ N
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    & j' A3 f6 F2 U
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! M% r2 B4 k0 M( k4 u" @% D4 c0 H
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");! Y# n" t9 o5 Y$ w- n/ m

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

: y! B' Q5 f" \4 U, q

評分

參與人數 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-14 03:56

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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