找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
$ g3 Z# l( G: u. c
  1. / RevApp.cpp : Defines the class behaviors for the application.! E* k2 j4 h/ C: H4 M! v! J1 h
  2. //. D* B2 U' {/ W- l. d7 F/ ~* ]
  3. : p* y% G$ _( O8 @& e. q
  4. #include "stdafx.h"
    / T* Y" E) {4 U" X

  5. ) Q, l0 s' [  y' S
  6. //#define UNICODE7 x- F2 Y! a* J: o
  7. //#include <gdiplus.h>
      y) w7 {% X- Y8 B
  8. //using namespace Gdiplus;+ q/ X4 U1 C7 n0 U' \( r

  9. 7 A+ X& ]$ J9 d+ n8 w0 ~8 c
  10. #include "RevApp.h"
    / y$ |8 N  a, a  @5 g- H
  11. #include "RevAppDlg.h"
    ; G" o9 _" ], i: W" Y

  12. % \" [' w8 E% F& }" K4 j
  13. #pragma warning(disable:4786)8 {* _# _- s/ o& ^4 X, p, N
  14. #include <map>
    % l& x& N7 ^+ {. Y! M. i/ f
  15. #include <list>
    0 y3 ]3 P- I6 s* `. @( Y2 x
  16. #include <direct.h>
    ; e$ R& ^2 g( a! Q2 o

  17. ; M5 l" x" R  ?8 T) _3 a9 B
  18. #ifdef _DEBUG: `6 j# N& x$ V: F; ]6 l9 W& E
  19. #define new DEBUG_NEW
      A; P( Q% o# f! x4 Z
  20. #undef THIS_FILE) Q- j  O9 Q6 W" I$ s1 H% I1 K) m
  21. static char THIS_FILE[] = __FILE__;' L: O) _; U( V1 Q$ |8 H
  22. #endif6 Q+ X/ `1 q! N( F6 O* L
  23. #include "SkinResDef.h"
    : S6 J% o7 H9 U$ C$ n1 \& O! x
  24. #include "ChangeBG.h"
    ( L7 G% c2 r6 A) d( N- n$ L
  25. #include "AFXINET.H"
    ' _' Y1 L( _+ q+ T& p

  26. , E( F5 f0 @' I6 }& e
  27. #define TRADITIONAL_CHINESE 0
    ; }1 ~) `/ g, K0 v8 _6 g3 `9 Z
  28. #define SIMPLIFY_CHINESE 1
    . h" n1 m9 S3 F% D
  29. #define ENGLISH 26 E; a: D( e$ X1 c* T( ]. i% [
  30. int m_iLanguage = ENGLISH;
    % i/ S( Y  B3 n- w# |8 l0 [9 s9 E6 N
  31. /////////////////////////////////////////////////////////////////////////////1 ?3 j7 e/ c& t, U7 n
  32. // CRevAppApp* [% }- a8 \4 d8 ]% F, X: R% e

  33. : s7 J' h  e3 x+ _2 |) u
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)( q* m1 O" \$ V+ @
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / V% W$ n8 u7 g/ H
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.! R5 s+ o5 N* \7 A
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    / i5 ]' B1 ^8 h( ~
  38.         //}}AFX_MSG, o: F. [+ y4 x4 @4 w& p: X/ H! N$ N
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    6 v( N6 ]& u! o* g5 ?
  40. END_MESSAGE_MAP()6 w  ~0 s3 r" ~' M; m2 R- h  s& b
  41. . u/ z, Y# n3 r: V; `
  42. /////////////////////////////////////////////////////////////////////////////7 Q& ^  O- m% L8 H" C! _3 q% E: E" d
  43. // CRevAppApp construction
      p+ k0 S2 a% |6 e) ^; ~
  44. - ~( |! ]* C/ v7 f; O
  45. CRevAppApp::CRevAppApp()
    9 x6 Y, b4 C5 A- x" A
  46. {
    2 l: r. H& F( h. v& I/ i
  47.         // TODO: add construction code here,
    " t( k5 r2 O2 j! b" _8 k* G
  48.         // Place all significant initialization in InitInstance
    : O2 I0 @/ ]# q. t/ b
  49.   bDisplayIsBig5=FALSE;; v2 x' }- Z4 w/ Z' ^! ^3 F
  50.   bRestartUpdater=FALSE;
      ?0 P" y7 k' s6 b6 X  C" z
  51.   bFinishUpdated=FALSE;
    9 F( o* S0 R9 `2 ]8 N" P" r0 e
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ; t$ F  X( u% G+ b: h+ D
  53.   InitChangeDataBig52GBKS();4 L0 |2 ~) y- m8 W
  54.   InitChangeDataGBKS2Big5();
    % e% J% l) F. j9 D/ {
  55.         /// u& p7 n5 A. L$ v8 h5 U
  56.         bClickRunExe = FALSE;. Z' {8 p  ?. b1 a" K7 b7 S
  57.         //# O& P* Z  q! \
  58. }
    ' `: V5 U5 L" O
  59. / w& M7 v! F! A9 n6 g
  60. CRevAppApp::~CRevAppApp()
    3 E1 `- ]+ r7 m0 P% k5 P
  61. {
    ) J8 X9 k8 o- R$ E
  62.         // TODO: add construction code here,
    8 }3 |2 r, F! G+ K; j% o! i; O
  63.         // Place all significant initialization in InitInstance! [/ ]* @+ ~! Y) c3 m& b: y
  64.   EndChangeData();0 Q8 I6 F. x5 E( k1 V$ o
  65. }. M0 p9 F" S0 U7 m5 d; Q

  66. & l9 M3 O) R0 H
  67. /////////////////////////////////////////////////////////////////////////////- p# x" k- T) S0 `& E% P
  68. // The one and only CRevAppApp object
    ! k! d( b. ?2 O# M/ M3 m
  69. 7 Q6 Q- R0 }: j5 Q0 B
  70. CRevAppApp theApp;+ y! |- y5 K) h1 |; ?# p
  71. . z3 C9 o9 p! E
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)8 _+ w4 _& R) o$ o0 f3 e
  73. {
    / b1 x5 y3 V& W* W1 n7 g+ V
  74.   int iEOF=0;
    + T4 j7 l  ^: {1 H( l' C$ O
  75.   char szTempName[MAX_PATH];) J, I4 G& `; W) T# M
  76.   *szFileName=0;
    , N) B' }4 Q; ~9 [5 P
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & o. [, t" Y; d% E
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')" f  Y9 U! B- @1 `. w9 a8 b3 Z, r9 Z0 H
  79.   {
    # ^2 q' L3 x, k% }3 @' G
  80.     strcpy(szFileName,&szTempName[1]);' I' {; p! s8 z4 f* n) w  ~  ?; M
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    # N( G2 ~; G( a& v
  82.     {
    ' I  ^; p, o9 i
  83.       iEOF=fscanf(fp,"%s",szTempName);: ~" L* u. Q( e9 m& F2 n7 F# b9 f
  84.       strcat(szFileName," ");: l' b; z5 H' T0 b# r
  85.       strcat(szFileName,szTempName);3 k0 |" e" `* E% f9 L& ~$ l
  86.     }
    9 _+ H3 ]6 b4 Y% A# U" }; p
  87.     if(strlen(szFileName)>=1)
    4 t7 b; c/ B1 r5 b$ a
  88.     {  z; |' d5 R9 G
  89.       szFileName[strlen(szFileName)-1]=0;8 o0 P% f) k! k; a$ R4 a& |
  90.     }
    , M6 v2 K+ x- W  \$ t
  91.   }
    # t7 R" O4 E! |6 V4 K
  92.   return szFileName;
    & P* z0 ~+ Q9 G5 p# {, f9 g
  93. }
    ! j: X1 `- b$ `% I

  94. 3 e# X( I5 k: {) w$ v0 t6 [
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    0 g# b& O4 g/ m) q$ P0 e( P
  96. {- D4 B  a) m" w5 `3 h2 b# @
  97.   FILE *fp;; F& l# o$ u1 |/ W6 I+ E
  98.   char *key=NULL;
    0 N& j8 Q9 E7 f+ R8 t6 L% ^. `  |1 @
  99.   char version[MAX_PATH];+ V5 D1 ^& S& e' L) x# c7 ?5 f
  100.   LPUPDATEFILE file,olds;
    1 n1 e" G' s( N. x  x9 F/ L4 }
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; C- c7 r+ M, [% M$ \3 O: D1 |
  102. 5 }- o* Q5 [+ H7 W+ X3 q$ t- }
  103.   UpdateList.clear();
    , T, j* C4 i" F2 v
  104.   UpdateFile.clear();/ k3 T+ ]6 q$ C/ r6 P' q6 @. m
  105.   if(GetFileAttributes(filename)==-1) return false;( @7 q, y3 Z. v! o4 F
  106.   if(!(fp=fopen(filename,"r"))) return false;. U' h! u' _9 x. J% P
  107.   fscanf(fp,"%s",version);- U  M; I+ h( j4 Y2 z( ?" F
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    # V% D! }, Y$ ^
  109.   while(fscanf(fp,"%s",version)!=EOF)
    8 @) m" N/ d- \8 _4 c/ o
  110.   {+ I# Z$ ~# d' u9 o9 v' A
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , a, \0 g. d8 [
  112.     fscanf(fp,"%s",file->path);
      E$ t* x! {& q0 \
  113.     ReadFileNames(fp,file->file);$ f, ?/ T& {' ?; v7 j: V* q0 \( ~
  114.     strcpy(file->full,".");
    8 a. F& H  l9 a+ K+ S0 J
  115.     strcat(file->full,file->path);4 j9 d( q! x) S7 c0 o9 U
  116.     strcat(file->full,file->file);
    6 C, P7 K2 W2 T: f9 N
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())8 e- @8 k+ J$ m" R# t
  118.     {3 D; Q- w, j, l' S
  119.       file->vers=(float)atof(version);
    : ^- L# |5 Q$ v# N+ C& @& u$ ^8 j
  120.       UpdateList.push_back(file->full);
    " @% m: F: g# G: p, G
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    * S- Y1 e, D" i5 p7 `6 ], d5 o
  122.     }
    ) m3 C2 R' T' M" R, G" y
  123.     else; v0 ?( m  Y* r3 s, U
  124.     {5 K7 w" m. v; o1 v3 C) @4 U3 D
  125.       olds=(*p).second;
    % ]4 V3 C; Y' n
  126.       if(olds->vers<(float)atof(version))
    % v( M' s: n0 a9 h, v
  127.       {
    6 `# n4 |& h) b; R( Z* x2 G
  128.         olds->vers=(float)atof(version);
    8 K0 d' Q/ k& w8 `
  129.       }# j) S- u) _% g
  130.       free(file);
    ' f9 o9 n$ h$ |3 U
  131.     }
    : u: ]. n' I. o
  132.   }& Y! _+ d. ^1 z5 d
  133.   fclose(fp);
    5 [! o/ X' c( Y2 S' `5 ^3 g7 H$ }: U
  134.   return true;$ C" l, t8 v' n3 \' r- d+ I
  135. }) e5 N  r; o+ Y: w' j$ ]
  136. ! h2 e( r) N' p; u- t5 G
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    & Q6 d( U; ^$ X- Y
  138. {; I; h, a. q- g; Y- z
  139.   TCHAR  szFull[MAX_PATH];
      b) R% d  K- f1 L1 V
  140.   TCHAR *token,*inter;8 V, S! U5 r8 B7 g/ Q+ j
  141.   *szPath=0;( r( a; @( S/ m6 b2 u' I3 L
  142.   strcpy(szFull,szFullPath);3 }% D, ~9 h6 l" X/ v) p- O
  143.   token=strtok(szFull,"\\/");3 _+ W- F9 b3 r/ l
  144.   inter=token;. }# N2 X$ g- \- u4 [
  145.   while(token=strtok(NULL,"\\/"))
    9 T- T' Y5 D( ^: K/ A
  146.   {1 Z! B  C8 k. \9 {
  147.     strcat(szPath,inter);+ h! i3 `+ y& ]: p
  148.     strcat(szPath,"\");: Y' L5 i% \$ S6 i# w* [" \% g( `
  149.     inter=token;4 g  [) k8 A4 c: G
  150.   }
    7 c" g; v: p2 ^5 R5 D
  151.   return strlen(szPath);, z" G) ]8 h) U% A, j: \5 e
  152. }" h3 h0 v: K; r' T( _' X1 f
  153. 1 s( h) Q$ S, P4 E- Z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)7 [5 a; o7 \$ U; ?# w
  155. {
    % B* A# r' }  m; @' S, ]. K
  156.   DWORD attrib=GetFileAttributes(Target);
    ( K9 w. t; U' X- a. |! |! c
  157.   if(attrib!=-1)2 U: z; Y, x: E, w' k' H" H5 k' H
  158.   {7 y% z# h5 f" d2 N3 R& w. u
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))" j6 u  S7 i$ H, O  H
  160.     {8 F% q" i9 o. K. i8 r2 o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    - I! R4 t! D' @5 B1 h* x; M
  162.       SetFileAttributes(Target,attrib);
    1 n% m3 b& j& B, O, e! J& D. z1 N4 O
  163.     }
    * @" D8 u# o9 z
  164.   }
    6 `" @6 u3 N6 B6 f, B
  165.   CopyFile(Source,Target,Erase);/ a0 R: n! e: w& |& A8 J
  166. }
    0 Y. `3 _0 x1 w- B  L: e2 ?

  167. # v) z" g  _0 T; C* U6 b$ ^) C! e
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)1 |" z/ p$ Q  y4 w; G2 G  n
  169. {
    + k/ D+ o! z) Q* J
  170.      FILE *fp;5 e4 k# S- H; X4 m; O  {) |
  171.      char  szBuffer[8192];/ F, x8 {7 F  F0 x
  172.   va_list  argptr;
    " O0 ^" a& ]6 m4 ?: h" A' t- ^+ u
  173. 0 u+ l& _. c2 V8 y8 A; x
  174.         va_start(argptr,message);
    . S4 R: ]+ u9 r; [( w
  175.         vsprintf(szBuffer,message,argptr);
    6 H' @1 }1 c/ M# f
  176.         va_end(argptr);
    * K: E, t: y/ s9 D
  177.   fp=fopen(FileName,"a");
    3 C  @* N0 H) g$ o/ ?2 g
  178.   if(fp): L2 E  J( Z+ A7 k
  179.   {1 i7 u1 _8 E" b# Y9 w
  180.     fprintf(fp,szBuffer);
    / I% |8 `- u" l- m
  181.     fclose(fp);
    / N% }; }3 ]. q/ A- i* z
  182.           _flushall();
    " [2 u' T6 ?' }3 j
  183.   }
    $ ~% M/ J; N2 Z8 v# \5 A  q  F
  184. }/ W& u6 K$ Y% m/ b/ A! f

  185. , U. u& T9 i. r4 O
  186. BOOL CRevAppApp::Fclearf(char *FileName). z6 k9 N* v/ z# R# Q+ B# N3 w& h
  187. {* d" L) c! n7 q& u8 `
  188.      FILE *fp;; q1 X! R4 |6 B, p2 @4 p
  189.     DWORD  attrib;5 M% T% ~' `6 n6 X: A, Q
  190.   attrib=GetFileAttributes(FileName);
    - ~5 Z3 |' B( `& N- i% t4 b' t- Y
  191.   if(attrib!=-1)
    9 T6 K+ }2 E6 P( k% C% w9 Q
  192.   {! g" {( H% ^  z! |9 b, J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ( p4 S/ L# L$ `% X* O
  194.     if(!SetFileAttributes(FileName,attrib))9 T) U- F. n- D
  195.     {0 ]! |, u4 B; h5 a& b( Y0 i! `
  196.       return FALSE;
    5 D+ P7 E1 r1 {% o, l
  197.     }/ m" V. j8 w4 V* M1 Q
  198.   }
    + j4 i7 V: n- a  d
  199.   fp=fopen(FileName,"wb");
    ; d8 z  `, d. p1 w4 N7 _  F
  200.   if(fp)3 y3 Y, d) n  y
  201.   {3 ?" X4 s# j0 n6 m% Q
  202.     fclose(fp);" ], M6 }+ C) B7 ?* J5 P, U
  203.   }
    0 f5 ]( f) X5 g9 q3 P  }
  204.   return TRUE;# D; i" v, G$ j
  205. }! v' q. M, m- A* a. h0 Y

  206. ) i( R1 W5 ~: b' k
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      r" d! }, ~1 \
  208. {/ ~. {1 ~9 ]# X% ]' D0 a' K+ R
  209.   char filename[MAX_PATH];( I' @) r- z+ r% D% t4 ]
  210.   LPUPDATEFILE file,olds;+ T- g6 _6 P) x
  211.   std::map<int,CString>::iterator i;
    , y8 X5 t2 I9 C: d5 j
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    : s3 i! C" y8 q$ z* x1 x$ L
  213.   std::list<CString>::iterator l;
    / ]+ k; P/ H: W; q) x" ], l) T
  214. ! W) |+ [5 B; Q$ a
  215.   if(bFirstUpdate)
    , o, R8 t3 r" C0 j$ P  d
  216.   {
    / F$ i" J" ~" h: b7 a
  217.     dwCurrFile=0;. d1 F4 ]- Z  r6 b9 ]% M
  218.     bFirstUpdate=FALSE;$ e- l3 ^$ D9 M( L2 v1 a  [
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 ~3 j4 c4 W) N: I
  220.     {, h1 z) e! K& {
  221.       dwTotalFiles=UpdateLocal.size();
    % R# F. f- ^9 B7 K. u2 r
  222.       dwDownLoaded=0;0 D- |% m+ d) j2 Q6 _% I: ]/ Q3 C
  223.       bSilentStep=FALSE;
    ! O) a: B  Q4 j- N' Y( Y
  224.       bCompressed=TRUE;7 ^2 T" A0 _3 X- f+ r
  225.       strExtLocal.Empty();& M, P' p7 i; Q  A' s# l  w
  226.       strFullName=(*i).second;! J2 w* r! u& o: E% \/ U! ]1 I
  227.       dwProgramState=AP_CONNECT;
    ! R7 E% t/ z, h* `9 w# j' e6 I: o4 V
  228.       return TRUE;" j* M- Z: w) i+ i' J0 a* z
  229.     }
    ! H5 T" H8 q4 @* S. H
  230.   }( c" ^" o0 k3 ^
  231.   else if(bRestartUpdater==FALSE)
    ) A( K# [1 P( ?
  232.   {2 t. u8 f) v" A/ V
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())6 t8 @; g! a$ N3 d
  234.     {
    ' [( ^0 D4 |1 I. a. K
  235.       file=(*p).second;
    % Y0 `; d% W5 a3 p2 I; `( T
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ) C* E( ^. q0 Q; |! u6 V: x5 I
  237.       {* D0 S1 v' ?# ^6 p5 m6 d5 E
  238.         olds=(*p).second;
    ) d  x& ?' ^7 Z3 |& @  M# A
  239.         olds->vers=file->vers;0 R, h$ z& }% m, H
  240.       }' G4 w& o% F3 \$ Q. L0 _) J4 `
  241.       else
    ! t- y# {9 i- z. i$ |% o
  242.       {% W* F# X: u5 w9 ~
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) x7 x, h# I1 }' Z
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    5 c& F' A5 C- [5 l7 T: c. B5 r
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ! |9 E& W5 k1 V* a+ ~. I6 x& M' g
  246.       }
    ' J! u0 h& t4 p: a& Y) p
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");* Z$ C/ T7 X( y
  248.       sprintf(filename,"(%s)",file->file);
    - g! F! e5 w% o/ S2 P: V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % Y) J0 `. G) L9 c( ]# a$ F
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }5 H% ]3 b9 H0 ^" F% C
  251.     }( j& M  A7 E# a+ x$ q" W
  252.     dwCurrFile++;# q% \# T; h1 e# v- i
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& y6 J. `$ ^) y, }" H7 A5 z6 P- W
  254.     {
    " j& z2 e+ f- P) Q7 p; Y
  255.       bSilentStep=FALSE;
    . F: Y- E6 }  ?/ e7 B4 s9 z
  256.       bCompressed=TRUE;2 h7 B9 S* ?1 |* j( ^6 E
  257.       strExtLocal.Empty();! t' U5 P  {6 ~3 t9 t4 ]
  258.       strFullName=(*i).second;
    $ `( Q% e2 O; W5 H+ W) H0 q
  259.       dwProgramState=AP_CONNECT;# D" f! _/ C$ [- G2 q. ^# C5 m
  260.       return TRUE;# x' M/ s6 ?( ~3 l" d( e
  261.     }
    , V' C! y+ E( |, N  j' a( S; s6 m
  262.     if(!bRestartUpdater)
    ; a0 M# G; H. h: E$ w. ^; o! Z
  263.     {/ }/ H3 l6 ~6 S9 M
  264.       int iCurrSize,iFileSize;
    4 W8 g5 ]2 }4 d7 Z9 @" W, N+ ]
  265.       iCurrSize=0;5 {; G& r2 l- G6 x& S. `# n" g- _
  266.       iFileSize=UpdateList2.size();
    1 _, Q1 d3 l. ~8 I9 R4 ?
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % s+ n) P1 ]+ \$ B3 O
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    % ~) S. @" I& a/ q3 I0 U( g& a
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 t1 p0 G* J" L2 m
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ i3 L$ @0 q- x( m' V' \
  271.       Fclearf(".\\update.dat");) E# N3 `5 D* G% W% S- u
  272.       Fprintf(".\\update.dat","Bloodyf\n");: Z8 V* F, @9 y) D" N
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " k" s" I; }9 H  e3 Z
  274.       {
    6 }6 L( w0 a& p, v" d, X
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())* G  r* {, i" y5 _. N' ]4 U
  276.         {; P- p4 G: {8 H" C, L& \
  277.           file=(*p).second;& r5 N$ M6 M0 {" O" ~
  278.           sprintf(filename,"(%s)",file->file);7 p# h( H9 L/ `" I
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) D9 j# t3 b, F: `  ?
  280.           iCurrSize++;
    & I8 U) K) Z5 r) k" C
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    . ~1 [$ j6 q2 S- A& B  i- J
  282.         }0 H( G5 [' ^" i/ O7 _) F, S
  283.       }0 T$ {* `1 I" O$ ?! `$ V
  284.       unlink(".\\update.txt");) Y% i  `; ~: O! P
  285.       unlink(".\\update.tmp");0 }) _* J( }" H, O
  286.       Fclearf(".\\checkversion.dat");
    * O% Y, Q; g9 F7 u) O# L
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# b# ^( ~' x( Y4 u6 Q: N
  288.       if(UpdateLocal.size())
    8 X4 P0 r" k: O3 R1 ^8 \
  289.       {
    4 Q3 v7 T9 \1 a7 m
  290.         UpdateLocal.clear();
    3 V/ c' R" T! C3 \( T
  291.       }
    ' P! Y; n9 g7 H5 O$ m, p" K
  292.       if(UpdateFile3.size())1 B: K; n' U) @& y9 N
  293.       {$ n. s  ~& S9 Y8 a8 ^* P+ C
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) t% a5 g2 K4 t+ Q- d
  295.         {
    ' j. b8 b6 o1 \+ s
  296.           file=(*p).second;5 `2 `" \% p' [% X
  297.           free(file);
    3 w& r9 K' ]4 c* T
  298.         }
    2 N' ~1 Y) i7 k5 k
  299.         UpdateFile3.clear();. F% v, R3 G5 x' G/ K# o
  300.         UpdateList3.clear();( E' T. h$ ~4 E' L' P. ~
  301.       }
    6 z2 E* y9 @1 M8 O
  302.       if(UpdateFile2.size())
    3 f, B" S# x) [* z
  303.       {
    ) {( Z8 _& [. T7 N" m. K
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). F- k- }) ~9 I6 P! ~5 I2 z
  305.         {
    ) J1 x  [, D7 @( m/ l
  306.           file=(*p).second;2 m% S8 O( |; b, A" [" r) ?6 I
  307.           free(file);2 u4 A( F: @; e; b3 S& y
  308.         }
    - x* R* _( z, I4 k: c3 a9 j4 y
  309.         UpdateFile2.clear();4 V0 @5 _0 S" P: `
  310.         UpdateList2.clear();, [4 C, n. M; d5 y' J& f3 s
  311.       }  j" G$ ~5 }( m  q7 s
  312.       if(UpdateFile1.size())- p9 K& R7 Y# t0 p
  313.       {9 X2 T- ~" ]+ X3 b
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : f5 P1 ]: G6 @2 G: w) d
  315.         {. v1 \0 G+ ?" U7 t, r; n! G1 V
  316.           file=(*p).second;
    6 l) K$ K9 [; e5 D
  317.           free(file);
    ; O% I3 [3 B$ y; E% q. D
  318.         }0 m3 {) [- }6 Q, a( ?) B5 a
  319.         UpdateFile1.clear();
    - u; i% a  w0 R7 O
  320.         UpdateList1.clear();' y5 u$ {+ N" U. c2 T1 J
  321.       }
    4 f2 L" z3 g$ {. L% I
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ) `( _1 @2 ~, W* A
  323.     }
    - h) g! i  @& n6 J8 |
  324.   }3 I) U4 W: u: J$ P7 ]
  325.   return FALSE;) o, B" M) m4 ^. o/ W7 l* M& d% [2 R
  326. }2 q- X& V; o( U3 S7 @

  327. ( l7 ^, n7 C; y3 G/ F
  328. void CRevAppApp::ClearAll(void)
      [9 u- q2 h7 S! K! s
  329. {+ Q9 f# [) p- P8 E4 O+ l% {
  330.   LPUPDATEFILE file;' K- F4 K7 _9 D* O# r0 M
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * i+ f. W, G$ m2 [& |9 f

  332. / P0 X$ q- F; U
  333.   if(UpdateLocal.size()); f8 F0 E3 @$ _: a
  334.   {) f5 ~' M+ W5 ^) b! H4 N, [6 P4 Q2 P
  335.     UpdateLocal.clear();
    4 U5 Q; r' p+ z9 B, B$ h$ a
  336.   }
    6 Q+ o& t2 F7 @7 {; k1 |
  337.   if(UpdateFile3.size()): s7 J, F, j: D" I1 p5 t
  338.   {
    + I: Q. }* e" I7 x8 n3 G- m3 {
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , B3 R, U9 p6 H5 R2 r1 W9 @
  340.     {
    + M% r8 G6 g1 P7 h* o: O; E$ ?
  341.       file=(*p).second;1 R3 f# [5 I7 f% I* ^6 [9 T7 h! v7 V
  342.       free(file);$ o( o& D9 H" E! x, J! h0 L
  343.     }8 Z. O1 h' x$ O9 `
  344.     UpdateFile3.clear();& m6 K. a3 H9 Y" g( e% |: m+ E' D6 K
  345.     UpdateList3.clear();* l; p+ `" |4 }  [, ]( A
  346.   }
    : p% d$ F) t/ D
  347.   if(UpdateFile2.size())+ n0 ^' U: O" [" E- u" E
  348.   {
    7 {8 j9 K4 D" ~
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! R8 `& i2 G% T" Y/ y0 I, I( j" }# x
  350.     {
    7 `; m9 O3 s2 Q: _- N* }& h
  351.       file=(*p).second;
    - j/ s4 u$ Y, |2 a
  352.       free(file);$ t& X# f1 o% A1 u2 Y
  353.     }
    2 d' f# |; k+ J8 N
  354.     UpdateFile2.clear();0 X3 @3 @+ n' ~: |
  355.     UpdateList2.clear();) @& [# {5 [* N. K- q: p/ s
  356.   }  _/ M" M( B) V8 `  @& p/ q2 l0 U
  357.   if(UpdateFile1.size())/ o  }  T1 `* T- w
  358.   {
    ( J( R) D9 [3 o/ f5 y, S
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 k! P6 v$ t) H+ g7 A) l! [
  360.     {7 m$ D5 U8 w' w
  361.       file=(*p).second;* `3 Q/ i  K& R
  362.       free(file);
    7 O* k* ^3 U# H( q% ^7 t4 o
  363.     }
    ; \- X/ C, H( `8 ^0 X
  364.     UpdateFile1.clear();
    4 X& x& ~, `& ^) h2 x4 e: v# i* G
  365.     UpdateList1.clear();
    * c# I. ?! u6 K" Z
  366.   }" S3 W. ?* A! s3 A
  367. }  ' p" C+ i7 t' c/ o
  368.   
    1 ^2 u/ s* E/ F2 i
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 O- F. U1 @* [3 ]
  370. {, \# ^1 s& z: [; Y8 \3 K; `, t
  371.   int c;; P5 z# |3 |* t4 v* M& M) D( [$ K
  372.   LPUPDATEFILE file1,file2;
    ! t/ J$ w, D3 O0 [0 E
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    $ `: V1 g+ x8 d9 r6 u: o# H" t5 [
  374.   std::list<CString>::iterator l;
    # h/ p# E- U+ k; U9 w# \. O) v  S
  375. * ?' D9 l8 _6 k  M5 n- i
  376.   UpdateLocal.clear();2 l* T( L# E* H; `2 @
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    " c8 M: W/ ^3 b& ~- ?
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);" R4 v$ b5 k2 _1 ~1 j  ~+ s
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);4 x: @3 H/ ~* z. n4 P" V
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    + w/ M$ [! i! j: C9 x* j  U6 p
  381.   if(UpdateFile3.size())) L: B- i6 Y9 T$ s1 P
  382.   {* S* m1 e' [% J8 p8 p3 ~. L0 e
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    % \6 ^0 J* |, t' U7 B: ~: r
  384.     {9 }( I$ Q8 S) d5 [/ N2 G* q2 `
  385.       file2=(LPUPDATEFILE)(*i).second;: R' E' E  m2 C- o, o
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( F, S+ x1 w; b! N
  387.       {
    ( [; q# g$ T, W4 w
  388.         file1=(LPUPDATEFILE)(*p).second;
    7 C5 |9 p: S' j" Y+ c/ {4 \) s
  389.         file1->vers=file2->vers;
    - q1 F. K3 |) K1 P" X8 E
  390.       }6 E3 m1 q5 y6 l5 O# `# r5 q
  391.       else
    ( g2 r% H" @  X. e9 c" a( q/ Q
  392.       {
    0 z& n% [, ?; G
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# Z( U" a+ ~. h% D1 I9 s. S
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));. d4 E( |4 F! ?
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    5 v" z2 C" i2 Q& t
  396.       }
      ~+ D! P1 g6 l5 x
  397.     }
    , ]2 L- V( A5 l: h: w' S
  398.   }; _6 x4 a: K3 x& w1 e' f: G; x
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 m3 m. P# u; g
  400.   {7 f& J9 C. q  Y% d
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())+ O0 R6 a2 d( s/ R& N
  402.     {  S: T6 J  a3 P. M3 a  ^, \7 X
  403.       file2=(LPUPDATEFILE)(*i).second;/ a& T7 T& j" G& M3 M
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& D# i/ K$ m. f! C
  405.       {7 ~# s: m* Y: \; Z
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 u4 P/ f! g; |) Q3 ?
  407.         if(file1->vers!=file2->vers)4 M+ A% o3 |) v9 |" ]  G( U
  408.         {9 o  E( b* z3 Q2 i
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! z1 n/ g8 `4 c0 {" z
  410.           c++;
    - Z0 D0 E1 c& l7 e
  411.         }
    . a% @. u+ X/ Z% I8 N, d: M/ Z
  412.       }
    0 h$ x: L# ^# A  z# H; G/ _" W
  413.       else
    * w' w; i" n3 u2 [# |
  414.       {0 p: K3 q2 u2 h$ d+ D* }
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - ?* I, o7 i2 C
  416.         c++;
    $ w/ F) d5 E+ f6 d: m
  417.       }
    & E2 m4 i% _" L  G, W; e0 H
  418.     }3 x4 D. ?$ F8 _' I; G: x- x! J7 B
  419.   }
    / F8 s3 ?+ a, ^, S1 J
  420.   unlink(".\\DownLoad\\update.txt");! Y$ b3 ?* _) c
  421.   if(UpdateLocal.size()) return TRUE;6 k8 }& F/ J" }) z0 J7 r
  422.   else                   return FALSE;) H" |8 l8 I8 ]
  423. }! d, F5 [$ A# }9 S! s% k, ^

  424. ' J; @. ~, M! i9 y( d+ x
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    : d1 D" \5 a; {! V, h9 H3 L
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn", y  R2 [' L0 w. y

  427.   n: l, J1 c6 l5 Z; y1 n2 U

  428. ( g* d' p9 {$ @, t. @* u

  429. 0 F! b% i2 O5 I  T) o
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)/ n% T9 D, _8 H4 S* y' Q
  431. {
    ! m! j/ }$ s9 ]
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    / p3 t# X- R1 C% g* C* [
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 `/ d% b$ w) Q6 J4 F
  434.   {
    6 p( v+ P: Q6 t% I7 y/ B
  435.     char szLanguage[50];# Y5 E$ L, v/ h4 C8 r4 ~1 \9 b  P
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ B5 f8 V. S$ m3 N3 V
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; D4 d8 Y7 g! s, m4 U6 P; B7 g+ u
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 M8 }) ^+ q$ K. C3 r5 n7 s
  439.     else                                   m_iLanguage=ENGLISH;# q; L* D3 k3 S5 G, m. U
  440.     char szRegister[100];" y! S2 V6 Q6 i& f
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 ?" V& f) V" L0 g1 ~3 T$ \  r
  442.     strRegsName=szRegister;% ~. H: `* G6 z
  443.     char szPatchURL[100];
      H% A7 B4 @6 a$ N- J4 i. z
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * _9 z5 N$ E& \- {2 i5 o& t. U
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + H9 n  H' U7 r1 |9 ^
  446.   }
    # B: o( ~3 Q5 d. U
  447.   else9 ?- o  D3 f$ e7 {; N5 D" N
  448.   {$ Y2 j' P! k0 Y, v* L0 W
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; }' |  y% W) F- r1 x' a! v
  450.     strRegsName=DEFAULT_REG_URL;
    ) R: d2 D8 l1 n5 h
  451.   }. l1 e$ J; t2 m' K! r6 f
  452.   if(GetFileAttributes("hosts.ini")!=-1)5 F+ y9 w: g1 w  L" Q
  453.   {  R( E1 y1 _3 O! H
  454.     char szIP[50];" v; E* B, B1 O5 m
  455.     char szDIR[300];
    # m$ r: V. Q# h9 G& K
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))7 `4 _1 l! I2 C, Q, D" p, H
  457.     {
    4 n& }! S% w, H& y% v: G
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* e" Q' ~/ T: j8 M1 F% e& S# t
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");) `% f3 w! ]8 _( r
  460.       strHostName=szIP;: `' {! G9 O* u
  461.       strHostPath.Format("/%s",szDIR);7 ~0 Q- I" A* P% z2 t) D
  462.     }8 G) X8 j- d9 r0 O4 j7 |
  463.     else( y6 N7 e6 ]& y* y
  464.     {
    : Z' R2 R7 ]7 C5 ?% G
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 v5 x; r8 _2 c  `# d3 C
  466.       {: U5 P7 s) j( {% |. Z/ S& h$ [
  467.         char szLanguage[50];
    ; P" \. y: ~' Q4 R. O
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: @1 \" T, d" y4 J& G$ Y2 P& D+ H
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 B" X/ Z, L4 s9 o4 w" {0 ]
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  v  C& R/ b- r: o9 ~7 f* @8 H; t- X! ?! U$ \
  471.         else                                   m_iLanguage=ENGLISH;
    / n5 O- W. |4 A. s: D
  472.         char szRegister[100];
    % l+ m" Y6 W% [3 X
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & u9 t) F5 x. d5 v/ ?& }1 [
  474.         strRegsName=szRegister;
    # i8 ?. W2 _. m/ h; L! f8 i
  475.         char szPatchURL[100];' m9 |/ l; i, I. [7 S  f! H
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 b0 r6 X) M# o" s, H
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( i* M" }, m2 y, `: M. M
  478.       }+ B' r. e$ H+ K- {" h- q  a
  479.       else
      w+ m% H$ f8 \! b* a) G: h
  480.       {4 m# D/ E3 D, y3 V. l) t. L1 t" f
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) }: ~1 }- o* z* B& u! L( _
  482.         strRegsName=DEFAULT_REG_URL;
    5 ^8 H  S5 Q+ f& m
  483.       }3 Z1 V' ~7 x1 Y( U9 A7 c, [
  484.     }1 L  @! a) J: H1 B- r7 Q+ h+ ~
  485.   }
    $ N# o. r! @: v& r' E+ X) R
  486.   return true;
    3 |0 q! |5 Q/ h
  487. }  O% e5 P4 C% W' M

  488. ( B$ E9 D, R& L0 V5 ^! n4 t1 G/ z
  489. #include ".\ZLib\unzip.h". t- q, x9 [6 }  d
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    1 x$ e1 p+ B2 G3 C& S
  491. /////////////////////////////////////////////////////////////////////////////+ Y9 b8 w1 G9 l3 ]$ Y7 a  T6 P
  492. // CRevAppApp initialization3 V6 Q- q# W# _1 m! B. k2 U

  493. ; v: [1 [! j# n/ ^, u8 M
  494. BOOL CRevAppApp::InitInstance()
    4 M% C2 e* Z  j# R1 m7 @3 a: v% R
  495. {% b5 n4 R  I3 \7 M$ H, _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ) `: i4 P/ `1 O7 }& u

  497. ) {% u7 a9 U8 x( w! g
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  U% u+ r5 @- g9 p8 a
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)), P* D" C1 m+ \: _& Q# D( ~
  500.   {) O9 [2 c  ^2 _$ z! M) {7 R4 i
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");( Q+ @5 @; d" R% L6 b) J) W, a
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 ]" K( L% A5 S2 F/ h
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))); P6 h/ D0 K( m+ k; S/ N
  504.     {
    + A  g+ r) D+ T9 Z  C! n! O
  505.       strcpy(szPath,szPathTarget);0 q: r4 x4 z* V; [( m: L7 t. N
  506.       SetCurrentDirectory(szPath);) H$ R2 d3 X; q; k: @4 o8 x
  507.     }
    % X1 ?3 ~# |, E5 J
  508.   }
    ) }( O! ?( ]; |$ B: R
  509. #ifdef _DEBUG- t/ C" N( J- q; U. e" ~7 {
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + i5 p* ?1 h: ^( F8 X  x
  511. #else
    $ I) v. Z1 e6 d5 J
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% X( K* N/ R- N/ b4 T% L1 h5 y
  513. #endif7 h# m! e0 }! j4 s/ @
  514.   {+ ?4 g5 L* x: [
  515.     char tempFileName[MAX_PATH];+ ^' U) B' ^! _+ C7 R$ A/ y
  516.     strcpy(tempFileName,szPathSource);6 e- b' E' k1 D7 {" Y6 ^# ^, j) \
  517.     tempFileName[strlen(szPathSource)-12]=0;; G/ q! h5 u, t% B7 @
  518.     strcat(tempFileName,"\\$CSUpdate.exe");5 x2 v7 |( [3 k0 `1 U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);) Y3 v  X: ]* `! E: `
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);# ^" Q6 K" x, v) }  M$ A
  521.     return TRUE;0 `; T( Z6 F/ ]0 N6 O# |" V
  522.   }
    " h9 a; j, \9 J# \5 P5 ]
  523.   // Nuke 0118: Delete run.exe
    * W; D( b) B# d' H+ a7 a
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    / B; a! z, m$ ~8 [8 o, I( f% y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");$ k0 b: D; i4 S& }* N, I6 B3 C( Y7 r
  526.   if(!ReadCfgFile("Config.ini"))' `2 {8 S* z' |$ |" [: B; Q3 o
  527.   {
    2 ^& {4 v- J# k# G+ v3 U" ~+ i
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);1 v) b% E0 {* V
  529.     return TRUE;7 `4 g# u2 f6 \% f2 V  A
  530.   }
    # s; T! K) |( D, Y
  531.   HANDLE mutex;
    " S( `: L% D) h6 D. c
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ) i6 i: |: a6 n& X- B' Y
  533.   {4 ~: k& H6 a: W, n. A0 W+ L3 t" ]
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    8 Z  }8 |/ O2 H5 V2 M
  535.     {
    7 {1 s4 ~+ W' z" g
  536.       CloseHandle(mutex);
    $ ?) v- D8 R& w. u+ d1 Q. @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* w( }" P( [, Q; H! A9 f# n* F+ K+ ^
  538.       return TRUE;/ y& Y3 {0 K, _/ Z. O
  539.     }: ?+ }/ m/ A' a
  540.   }  ) @3 \% r, A8 K. N! C* M# i4 Z
  541.   CloseHandle(mutex);) ^( X" E3 d' }  e0 Q3 x: {/ B

  542.   X9 X  [4 l9 ]( |4 J1 o; A
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);; l! W( D! s" w6 ?/ m

  544. 9 s) Z/ _' B5 k4 W* G7 p7 A, p
  545.         AfxEnableControlContainer();7 F% i/ j4 K5 ?- T8 N
  546.   n6 v) B; q: @; j! C7 q
  547.   bCanUpdate=FALSE;
    ; W" y# w6 t- A; o; x  K' F6 M
  548.   dwStartUpSteps=1;
    . ]+ M( C) [& o. K) T+ }# P
  549.   dwProgramState=AP_NOTHING;/ k  ~5 s, }9 `% L0 r
  550. ! g2 `  p) y2 Q: C; c8 V3 n9 B8 ~
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    / Y# Y/ f' L9 Y; N9 N/ }

  552. 2 o6 i3 i) w' X5 m3 X  q
  553.         // Standard initialization
    ' U4 E/ {; Y( O' Y  i
  554.         // If you are not using these features and wish to reduce the size. \* W; P* v* H) S. i' e& B) k9 Q
  555.         //  of your final executable, you should remove from the following& O# ~, @7 P# L( ^0 a
  556.         //  the specific initialization routines you do not need.
    ) i) X$ {8 D# g. S
  557. 4 l8 r7 s4 f/ P0 x9 ~4 A, c9 n+ b
  558. #ifdef _AFXDLL
    0 a8 M' [' o  n/ M
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ( i0 B9 C& T; t& I- y) C, G$ r
  560. #else8 v8 H5 O, I2 v& ^, {5 K3 P
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically1 @6 K2 H8 s* @  G8 _# x
  562. #endif
    3 y/ O+ M" _; D( ]% O' U- O3 n( k" E. z
  563. 3 u  V9 z. S/ N. I/ |' H
  564.   dlg=new CRevAppDlg;6 d. A3 f& b! D" E/ M2 g5 P% W
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ) C6 P% e2 `3 e' y6 h! P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    5 F5 ]- L2 q, W
  567.   m_pMainWnd=dlg;
    % P: X, o4 K% m7 Y
  568. ' X0 Q. Y, a6 ]# A& I; J; ~
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);' O: _* Y/ b8 w1 ^  E7 P# Y
  570. 0 H% y) J* @1 v( C
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ) ~2 _# d5 i, o) t/ m2 g8 D
  572. //  ULONG_PTR gdiplusToken;
    / f- ~% T, N- [' Y- X" x1 ^5 k
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);' Z) \- k0 n3 z5 i
  574.   R4 u: k6 X3 n0 w0 J' e" s
  575. //        CRevAppDlg dlg;4 G% a- R5 ]8 P! ?8 J" [- w) V
  576. //        int nResponse = dlg.DoModal();
    3 f7 m. m( v$ V6 B5 s) H* X
  577. //        if (nResponse == IDOK)0 |+ b8 `' d# L
  578. //        {: R* z; {; S" N6 s7 V% ]. M
  579. //                // TODO: Place code here to handle when the dialog is
    ; ?; D" C# n% S* P
  580. //                //  dismissed with OK7 ~! ]0 p- O  B$ D. q
  581. //        }1 _% P  k2 ]- ~, R. J/ n8 G
  582. //        else if (nResponse == IDCANCEL)+ W/ Y7 s& R% q% m8 t+ G
  583. //        {
    7 T+ P3 @8 k; @- y  H9 h0 ^
  584. //                // TODO: Place code here to handle when the dialog is
    & l! i( E. g, J. Z0 F
  585. //                //  dismissed with Cancel
    ( B0 T0 J2 E3 N% r
  586. //        }
      ?# M0 F9 k0 D( [# G( R

  587. & J6 G# Y3 }+ ~# G+ U+ ]
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    3 }: q7 V5 t/ ^3 i% i1 Q: h! c3 ~
  589.         //  application, rather than start the application's message pump.
    6 v8 L$ g# S* l1 s4 C
  590.         return TRUE;
    2 n4 n2 w# ^7 @- @% C+ N! F: P
  591. }9 a3 D, X6 {6 P+ S3 \1 ?* L: E

  592. 9 j7 ^9 M, d4 `# Q" p2 a& v
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    3 M8 F# j/ M7 s  Z0 C  f
  594. {
    4 Q; E) h: n3 G6 x0 v$ y
  595.   int i;: B$ D" j, l0 D0 ?/ k
  596.   char *szRet;
    ) b3 l  B( d$ o6 Y8 z0 n/ Z

  597.   [' x3 c7 R9 w# N( L1 ~. D
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    8 w, ]8 a: E: U# A& k7 Z( }7 z  j
  599.   if(sztoken)
    + M. B  h; E( L& l3 l: F
  600.   {9 r( j: G' H' d% O
  601.     szRet=&sztoken[itoken];( m/ n8 b0 j1 z+ l# V
  602.     while(sztoken[itoken])
      M& q  s7 U+ ~0 G3 d0 N+ Y/ `
  603.     {
    8 D' _6 @' f0 }, f1 H
  604.       for(i=0;i<(int)strlen(token);i++)
    * W7 }- z5 ^' f$ o, i- u+ o2 v
  605.       {' j4 F3 {  Z' B* `! f
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    - a+ v8 S2 ~2 O- |
  607.         {2 A& J: |# Y) [! r- \3 J) N
  608.           sztoken[itoken++]=0;
    . V- f& G- G; ~; e5 D9 h5 X: [% j
  609.           sztoken[itoken++]=0;( ^, O) w- Q7 ?& y0 ^- Z
  610.           return szRet;
    & P! _+ z, V1 \) s5 ~2 P& H
  611.         }* P! E! q( A- ]  j% Y, O+ w
  612.       }
    8 K7 u4 E3 X5 e6 _
  613.       itoken++;8 o$ z1 y. r$ l
  614.     }0 x' W2 k% }) I/ C# n5 }3 Y% }
  615.   }& v/ ]! I9 s: E# p4 e( k$ u
  616.   return NULL;4 f8 N) R" R" @& `8 p
  617. }
    & @- y: J. P* c- p) V( c

  618. 7 m5 y5 V8 i' W, H
  619. void ProcessProc(long Total,long Current)
    - N( ~! X2 }0 ~" |/ {
  620. {8 Y1 f1 J2 \7 G( Z% z
  621.         MSG msg;! i* b$ f% i; y, @! X4 L( |& [# O9 V
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ( v$ `. J$ A; \' x9 D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));3 ~& T2 x- t2 Q& }& S: J
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 t; [4 t. @* D+ n
  625.         {
    ; l* ^# u) T/ e% q$ T
  626.                 if(!GetMessage(&msg,NULL,0,0))7 u/ C8 u' Z+ _2 ?
  627.                 {
    2 h$ B6 q5 H; E7 g2 q* P5 O; a+ Q
  628.                         return;
    9 [5 k9 W* a/ t, n2 N! g9 L' t3 ^0 S
  629.                 }
    , g% l3 m- G  G$ o
  630.                 TranslateMessage(&msg);
    " s, \) t: `' d. ?- `) d
  631.                 DispatchMessage(&msg);
    - k3 Z3 s- t" t  d
  632.         }        , U+ I7 B( _& o% F
  633. }
    * W0 R3 _3 K2 o3 z, @+ ]$ U

  634. & L5 M  s- B  [3 A0 H1 d7 b
  635. BOOL bFirstChar=TRUE;
    , M3 ?# X( B( _/ H3 P3 a* N! {

  636. ) p/ K6 q( f# V* A- H: y# b
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 d- B7 T/ S6 \
  638. {
    ) \- L* q, K  |0 @  F5 D. U
  639.         // TODO: Add your specialized code here and/or call the base class
    ) X. I1 d# a1 I: C5 o& z
  640.   switch(dwProgramState)
    0 W. j2 t$ b1 }+ A- X: ?& a1 Q
  641.   {
    , F5 J0 \1 y) h
  642.   case AP_NOTHING:* P5 U) Z( e' x& \$ Z: n& s
  643.     switch(dwStartUpSteps)
    # j- {5 b% a! R4 j8 Q5 w
  644.     {, g' X$ j) Z2 T0 P! ~( f5 Z- k
  645.     case 1:) }7 v/ h" I3 [) K
  646.       {! I4 v# ]/ a+ a
  647.         int i;
    . j5 v$ a/ m- \
  648.         CDC *pCDC=dlg->GetDC();4 h9 L" h1 O; W: S6 o
  649.         HDC hdcwnd=pCDC->m_hDC;
    ( T) d: B, Y& i$ ^8 X/ x* j" l# B
  650. //        Graphics graphics(hdcwnd);
    9 \2 ~6 x( h6 E, `# [
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ) ~) `7 Y6 k$ U( W; w* l
  652. //        INT iWidth=bitmap.GetWidth();
    & n% t' m, D" Y6 X! C$ x
  653. //        INT iHeight=bitmap.GetHeight();
      P' ]7 ~: M8 P# ^* s: C
  654. //        Color color,colorTemp;* l" B9 ~, b  N. d' M
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ Q6 Z; H  ^5 m  i+ u7 _% O
  656. //        {- [' _, f/ h) s/ q$ S# F) i% b0 A
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)( @/ c, l0 U# K/ ~) ~4 ]% P$ k+ B0 b
  658. //          {, f7 b! ], \( W
  659. //            bitmap.GetPixel(iColumn,iRow,&color);8 v' w' P2 @2 L( R" ]" d, H
  660. //            colorTemp.SetValue(color.MakeARGB(" ?/ O6 H1 _3 |( W5 V2 L2 x
  661. //              (BYTE)(255*iColumn/iWidth),
    4 p; H( c$ h4 l8 o9 l3 i' j
  662. //              color.GetRed(),
      [9 ^" ?  q/ C' F6 z
  663. //              color.GetGreen(),
    - D2 T+ q. o7 B0 h& {% Y
  664. //              color.GetBlue()));
    : J/ Y' J) d/ Z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);) A5 Q* Y- F- \' M
  666. //          }
    7 g. X3 j3 J% [7 `! t
  667. //        }( G! y: }* j, L) Z: K6 A& y* x. f
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # g, n8 N& r2 o# @7 F
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : |# g& U+ K- K5 W' \
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    $ d5 O+ `  a9 V
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , ]6 h: A; Y0 A/ z! U9 x: b9 I
  672.         for(i=0;i<240;i+=8)8 V  ?  e3 G4 h; j0 e6 O+ D
  673.         {# F5 Q' D/ i2 i3 _. m) ?
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! l  b7 \1 w5 u; W- P* P
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. ?. R5 a  E& F2 d
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( ?' {8 F* [: P0 H$ b- r) T$ M% T+ c
  677.           Sleep(33);
    # q5 _  p- u: I7 r9 L
  678.         }8 Q: G1 h; A" ^  S" v; ~
  679.         Sleep(1000);
    2 P$ E# x" D' r
  680.         for(i=240;i>0;i-=8)
    & T& S7 {. i2 o  U5 g
  681.         {0 g: o- a3 T6 C
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  c" U6 ~% h* K0 x  b
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 N4 X( `. g. k' _7 n" q; A$ n) Y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ ?7 N( p$ r% G  {% v3 s4 M
  685.           Sleep(33);, ~# u; [4 Q% e) p8 ?- `
  686.         }# R2 g3 \9 J% J9 t1 s# I
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);% e+ g. v  e9 I- {' [) l" y3 q
  688.         dlg->ReleaseDC(pCDC);6 o6 \3 ^( Y* H- ~$ w$ C1 i# R
  689.         DeleteDC(hdctar);
    3 U) `! W, Q2 l' H( b
  690.         DeleteDC(hdcsrc);
    " G) T- }( k& F( B
  691.         DeleteDC(hdcorg);
    $ @! B* h4 Z* e" m
  692.       }
    6 R6 X- y; F0 M4 ?, D
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);- {( @! n9 c8 Q. b
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    $ u) `; E( ?- [  M3 q" \
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");! `! E, F1 G  \, U. W! K9 M4 c
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    / a2 T/ D3 H" A6 E$ P% M7 C. {
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% d9 q+ I& b1 x7 G9 F( ]5 J# e
  698.       if(!Dn.Connected())' F4 e. M0 V' E7 U, ~: C+ l/ u
  699.       {
    - N* l5 z8 B% F5 |8 N
  700.         dwTotalFiles=1;
    ) U. Y3 J( U$ k( B
  701.         dwDownLoaded=0;: \% w2 {  t: i5 A
  702.         bSilentStep=TRUE;  d# B1 B) ?1 ?8 r
  703.         bCompressed=FALSE;
    , Z7 A) S  ^5 i- R
  704.         strExtLocal.Empty();3 o- X# z# v' p
  705.         strFullName="readme.txt";) N0 g6 Q$ H! x2 Q! w
  706.         dwProgramState=AP_CONNECT;& N6 n. w( E3 F% U- ?; c5 X9 T
  707.       }" i: k, k5 j3 V/ X9 O9 G  x
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();$ {% [' ]' a' ^
  709.       dwStartUpSteps=2;
    4 B/ c  L0 m. O. A4 A
  710.       break;! a( r6 d4 E2 @/ ^! S( @
  711.     case 2:
    & ^/ y$ L1 I# V
  712.       {) J5 l" T# v/ _3 Z* D# D# h: T, l! k
  713.         int iEOF;0 _4 h9 K4 ?; ]" V6 W! A  m
  714.         FILE *fp;  M3 L+ p1 \( e) j, y% f& k0 w
  715.         char szString[512];# m8 a1 [7 j: o5 N& l8 ^2 x
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    0 B+ N$ z& b* z
  717.         if(fp)  f1 f2 `; e0 ~
  718.         {) |# r" u# H# }# X  z0 S
  719.           do7 B1 Q/ Q; i# j0 `( ?/ V/ j
  720.           {2 U1 I: L7 T$ ^. C
  721.             iEOF=fscanf(fp,"%s",szString);- X1 c/ D; n5 O7 L$ m* d
  722.             if(strlen(szString))( @1 n: b+ H9 w6 |, z/ B- f
  723.             {
    1 k% v" D/ H* i* k
  724.               if(bFirstChar)* U$ M& l* o/ O& O5 }/ C
  725.               {
    & j+ @* r+ K4 d, V" c
  726.                 bFirstChar=FALSE;7 M+ @& }: V; Z+ U$ ?2 M% v
  727.                 bConnectIsBig5=FALSE;1 @& H& V2 K3 }/ E8 T3 S3 T- A! }
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    , Q# A8 i* x5 J
  729.               }
    / x; S: V0 s3 H6 }
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));: N; @; X  H* f+ z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));( @9 \" X, y  y% I
  732.               dlg->m_ListText.AddString(szString);1 w9 S  W$ t; d
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ ~  f7 v  R7 h4 F# I
  734.               *szString=0;4 R/ r  G; Z" V: ?
  735.             }
    2 M( X' X$ H* S! N& l, T: }
  736.           } while(iEOF!=EOF);
    ' o5 B; b0 a, O$ G9 C$ w
  737.           fclose(fp);, X  r- q; G$ a5 h* N  j" I
  738.           unlink(".\\DownLoad\\readme.txt");/ p- N6 B; x+ ^5 }& ^$ k
  739.           dwStartUpSteps=3;
    7 f& n" E, W3 d' P  V8 z+ N6 p
  740.         }7 N: p# O5 Z. F+ b7 L
  741.       }
    ' z& r8 m) i8 ^7 [
  742.       break;
    ; f3 k. d5 z4 W2 B; I% ~; [
  743.     case 3:2 n$ w  i# F* T* H! X9 a1 x
  744.       if(!Dn.Connected())4 C% m# Q8 _. L3 z/ A* v
  745.       {
    ' f9 {. K$ ~- t2 P0 j
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ) l; f2 \* d1 D! h% x
  747.         dwTotalFiles=1;
    ) P9 F" O+ e% x- i3 a6 N! e3 h
  748.         dwDownLoaded=0;; c8 p9 P. v, |- ^( y& L" k5 Q: D
  749.         bSilentStep=TRUE;
    6 a- o, K% R1 s, f% [; K1 e% O
  750.         bCompressed=FALSE;
    : L7 M4 F6 `5 |$ `. |2 J( t
  751.         strExtLocal.Empty();
    6 J: t  o7 B8 e6 {9 u
  752.         strFullName="checkversion.txt";( C1 ^8 L* B7 H* t3 K: l
  753.         dwProgramState=AP_CONNECT;1 u# M* ]4 @1 a5 w5 R6 w+ X" k
  754.       }  |7 A- g1 y' |' Z8 \
  755.       dwStartUpSteps=4;
    ; a  d" Q& D; ?
  756.       break;
    & Z/ V1 b- C2 z- V- r+ n" Y$ e
  757.     case 4:7 q, `  D2 t8 J6 ]
  758.       {( P9 `) o3 q/ I/ ]/ |
  759.         FILE *fp;
    ! W  N5 e9 m1 L; B
  760.         char szString1[128];6 G5 U6 s7 T0 ~. c9 z. Y
  761.         char szString2[128];7 j$ \2 t0 M0 T% d8 J8 U
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ( b9 b- L' y" }3 H9 o
  763.         if(fp)
    2 ?& L/ V0 F: G* S) s
  764.         {6 {% l+ R, A. {. Z2 C. A& `7 U
  765.           fscanf(fp,"%s",szString1);
    8 \$ K: M/ {, H, ]1 T
  766.           fclose(fp);8 b4 o) ]& Z! _' j3 R' y; u
  767.           fCheckVersion=atof(szString1);( F5 S7 z9 ]5 O# k# {
  768.           fp=fopen(".\\checkversion.dat","r");/ h1 P' c: h0 h3 V
  769.           if(fp)
    - X5 Y! p# }: |1 p
  770.           {
    * R  n! C% {; [) G2 A
  771.             fscanf(fp,"%s",szString2);8 m2 f' X. E! o0 y9 W
  772.             fclose(fp);
    - Y7 K7 R4 `, Q% ^
  773.             if(atof(szString1)!=atof(szString2))
    1 D# q$ [, H' ^* d( l5 m
  774.             {; D- s; A" o% f5 h+ [4 f& n. D+ E
  775.               if(!Dn.Connected())
    - w4 \  T  N7 N; Z' y% G2 y
  776.               {
    - \' b. V9 k# {2 n6 S) q! j' B
  777.                 bFirstUpdate=TRUE;
    0 ]# ?3 b8 H. f* O
  778.                 dwTotalFiles=1;
    % B' ]9 I# \. K3 O6 m
  779.                 dwDownLoaded=0;
    2 P7 u0 Z7 A% `+ J+ H
  780.                 bSilentStep=FALSE;
    & |( f, V5 M8 L% f5 V( a! n
  781.                 bCompressed=TRUE;$ w8 _. W* Q9 l  c% `  r$ f( s5 |
  782.                 strExtLocal=".\\DownLoad\";. T3 G8 v) v* p
  783.                 strFullName="update.txt";! V* W2 J! o) F2 R/ U5 E8 W/ }
  784.                 dwProgramState=AP_CONNECT;
    ) d  Q6 q" |3 P
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. u) Y( B4 g5 Q. q- a# g; b9 T
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  @4 Q& [% k' p/ {% d
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");+ P; E0 A2 F# X* k; ?6 I0 a& N
  788.   u2 C( L; X1 q, a
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & R' b) v% a! T, ?5 E% p
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    + ], N, a9 [9 U/ Q) s* u' l
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)! m( [# W' f: K) z3 ~
  792.                 {
    ; I) H. a: G. r" H, o
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");9 ]! K6 q5 F2 r; C3 q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    3 ~+ _  `5 Z3 L4 `) Q8 [
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    1 C& q, ?: n% P# n' A% Y7 ^8 D
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& J, J0 g7 d2 ?6 ^' m$ I5 w

  797. + u$ C/ \" _* E$ g; B$ o3 t$ H* l
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      C2 E6 l$ d* j/ ?1 e" o' y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; E" q8 R1 y% @% R. Z9 G' U) T0 Z" C
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    $ P6 o! \7 u  [% _0 N% A: S
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , J2 q9 b, K( @' V3 P
  802.                 }+ X. y0 Z' ^# C1 n, u+ C
  803.                 dwStartUpSteps=5;
    0 y9 {  h$ p* j4 j8 K
  804.               }
    % J3 ?1 d: v: j- e( F$ x
  805.             }
    ! r8 A1 b8 X3 f6 D0 B; j
  806.             else
    / ~  w+ i0 p; s8 o
  807.             {
    ! b, i  t7 [- r) ^0 l6 \+ P
  808.               unlink(".\\DownLoad\\checkversion.txt");( e4 Y) A8 N3 J5 u
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 D' U) O* \( [! n+ E% H$ A6 d0 L* Y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    & H2 \+ X* z! v2 t
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    : Y7 [3 y9 Q9 N# ~' `

  812. ; X" n0 _% Q, y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " v. ?0 V& B" y/ N: P9 |& p: I2 y' l
  814.               dwStartUpSteps=99;6 m4 T8 I4 v- L. G' ?
  815.               bFinishUpdated=TRUE;
    ) J5 K/ x; q( A+ O* {8 S( t+ h
  816.               bCanUpdate=TRUE;
    ) I6 R: N* R+ i2 z7 r. y
  817.             }' L# k8 M9 d! {/ O7 `
  818.           }! i/ \1 s% l, }5 N0 A) a" ^
  819.           else+ }4 S, C* ^- ~
  820.           {# f" ?2 P- s/ c% {, w, q& t( u
  821.             if(!Dn.Connected())
    2 k1 t; w* C$ T: N0 Q' s6 T6 U
  822.             {
    5 p  D- e4 r0 ^$ j7 |) k
  823.               bFirstUpdate=TRUE;
    & E7 P! \- Z0 ~1 f2 [2 T8 h
  824.               dwTotalFiles=1;% f/ K, O8 `4 F" J0 \' Y$ A% A
  825.               dwDownLoaded=0;7 V% I" S, f% n
  826.               bSilentStep=FALSE;0 y9 J% F9 [; m  _2 Y0 b/ y; ?2 ~
  827.               bCompressed=TRUE;
    - k, {/ _" Y5 f5 q% G
  828.               strExtLocal=".\\DownLoad\";, l- v: s$ V, B
  829.               strFullName="update.txt";
    % a" Y; P1 p; L/ B
  830.               dwProgramState=AP_CONNECT;
    % o; ~+ g! ~& M8 }
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 u. k$ V+ a8 w0 I3 a, _1 F  M
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " Z- \+ N( f- C( w2 [1 H
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");: T& v$ O( V# h6 q5 a) H/ |
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 h- i$ P" a* D- O) x
  835.               unlink(".\\DownLoad\\checkversion.txt");
    8 O. ?: G( k* H- x
  836.               if(GetFileAttributes("Wsa.zip" )!=-1). m7 i2 I6 \% z* b. y3 ]* T$ J
  837.               {8 L# Z( `6 u7 S& u- v* }
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");' A& Z6 [* |0 \8 W% U0 `
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    - B. w8 M4 B( o' v$ E3 j
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    " c2 j- ~& \; K3 Q$ ]5 z4 @2 ^
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 Q/ H) ~- }" e7 X9 A. d8 [. a
  842.                 9 x- c) S+ R# }) ?/ z% }4 z3 p
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    6 l( f5 p5 y2 [6 \
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) v) M1 f+ F: T6 M2 c7 X0 @5 ?
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 j! ]2 ?, M# M2 E! v/ T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 P8 v* m% Q- o& I
  847.               }
    , y9 h( Z% R, ]8 J$ M5 ?: D6 Z
  848.               dwStartUpSteps=5;
    , ~6 b, z% f3 [- t. a2 F4 J
  849.             }& P! W$ q' R3 z0 L
  850.           }
    - [: y- d( g8 {% F$ K( _4 a+ t
  851.         }- `3 Y1 Y* Q1 E- |2 ~
  852.         else
    ' n: M+ D1 I9 E& _( {
  853.         {
    ; E. v' a! r: U0 L( U1 K
  854.           dwStartUpSteps=3;
    0 w  @, V$ `! I' {
  855.         }2 q) f7 w+ J8 l) V
  856.       }
    * G( \$ f* o# ~1 M( G
  857.       break;* T- W& l: D% c7 g& B, w9 L" H; ^
  858.     case 5:
      \+ T8 \" l0 Y# a! I, M- F* d% J
  859.       {
    ; r8 u  k# _5 s# T
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)# x  [! V1 Q4 L3 s$ c% N# g; q* @
  861.         {8 _; ~+ |" A: @5 P. h% F; T
  862.           int opt_overwrite=1;; C7 ]8 |& b& P# o
  863.           int opt_do_extract_withoutpath=0;
    0 g) ^7 q) l" e8 q3 s1 j
  864.           unzFile uf=NULL;. W1 V  }4 s) H7 d- x
  865. 4 v" }; E5 D4 J: O
  866.           uf=unzOpen("Wsa.zip");3 S  a  |" O9 m/ @6 E
  867.           if(uf)4 d- {3 T5 h9 p2 y6 l0 M6 f, Y/ Y  a
  868.           {
    + R; L! ?/ J# |% K) F; i7 @
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    . J- ~5 L1 e2 S& }! W+ K6 B
  870.             unzClose(uf);
    7 I- l& x9 c1 [, i4 b+ _# c
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    : D3 ^3 c- Y" S& B& A: P1 c6 J
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");! c, J& ^. m& J" D* p1 U' L, S
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ( _" X1 b# z! j! Y0 P4 M( n
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 v* b% b- t' ?2 I2 P- g+ Y
  875.           }
    8 u" s+ d5 n3 k! N; B0 Q1 ^
  876.           DeleteFile("Wsa.zip" );
    . A2 o/ D# I1 H% Y
  877.         }( e; n. A. X5 p% Z0 d, t

  878. ) z) F, Z- t5 j  j; n8 ^
  879.         if(CheckLocalVersion())# G8 i- R/ Y( {9 C' ~
  880.         {
    7 G2 V7 m" K) L0 x0 o
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    - y% V* d7 e9 V( p# B" t
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");, c" {/ k1 ~4 w- |! a
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    * l% y( S4 H2 r
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 I. b! J9 T, A% b# f, E9 {+ U) u) o
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);7 a/ v! Y2 Z" q6 e
  886.           dwStartUpSteps=99;
    - D/ v+ @) D( {2 A* }0 U0 S& d- G
  887.         }
    8 X* j9 p7 X! ]1 d* i7 V7 L
  888.         else, W: h/ ]0 ^1 S" K4 D
  889.         {9 N9 X5 v6 a8 J9 O' ?7 T9 K
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , b# @0 q' _5 W: h3 U  Q6 N; j- l: x
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");1 I1 V* i0 j4 Y, W; a
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");* T5 C& K- O7 T+ Y

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

5 X) e& i2 W' M+ C5 h6 n* y; R- l. S

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-11-28 15:08

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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