找回密碼
 立即注册

CSUpdate.exe源代码

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

, C/ x8 e' z% B0 o5 f
  1. / RevApp.cpp : Defines the class behaviors for the application.: A  V) c8 ^6 K3 j& k8 \
  2. //$ E, |. T. |1 v1 H6 X: Y
  3. 4 Y& W5 T# Y: N  V& H
  4. #include "stdafx.h"
    : m8 L: V  r8 r# F

  5. ' [* ^- u0 }/ b6 I: }! {* [) N& D9 n$ S6 ]
  6. //#define UNICODE. K: a1 k* ?! Z- L% L0 M
  7. //#include <gdiplus.h>3 \! V9 l! m5 @
  8. //using namespace Gdiplus;
    0 B& x4 v! u( w5 e7 i5 X# `% R
  9. , I1 e6 u2 d- ^+ K$ t+ L- J
  10. #include "RevApp.h"
    . M5 b' x* c: e; b
  11. #include "RevAppDlg.h"
    - ~: O# r* V/ n* ]
  12. " U, I% X: h0 c' w9 _. F3 C; E0 N
  13. #pragma warning(disable:4786)
    & ]3 V5 d5 m2 I) y% n( T
  14. #include <map>
    5 T3 B* D$ g% P
  15. #include <list>
    6 F/ |) t$ m$ D
  16. #include <direct.h>' t* X/ d' `- i2 p
  17. * t3 R* ~9 [  @; w9 r7 }( s
  18. #ifdef _DEBUG: i( }" w1 \9 b+ R7 O6 |
  19. #define new DEBUG_NEW( N1 n1 h) p; T# m& v
  20. #undef THIS_FILE4 p* U: p: |( ?  N
  21. static char THIS_FILE[] = __FILE__;) j. l$ v+ Z4 w
  22. #endif
    ' I( k. x* j/ E9 Q* ^) G
  23. #include "SkinResDef.h"
    4 g/ j% Y7 z- t& Q+ U1 ^: }2 w5 `
  24. #include "ChangeBG.h"
    # B6 p4 w6 H0 Z9 C: W/ b- x) U
  25. #include "AFXINET.H"
    3 m1 b& t) Z3 q4 k0 X8 c( r5 [/ \0 m

  26.   d: ~& c) }* p: W9 u9 T
  27. #define TRADITIONAL_CHINESE 0
    - a1 I/ d0 B6 |1 c+ r) Q; z3 K
  28. #define SIMPLIFY_CHINESE 1. v  k% z0 c( W( Z) U( L
  29. #define ENGLISH 2
    9 Y7 p- A3 E/ [+ s/ \8 V+ @" s- Q
  30. int m_iLanguage = ENGLISH;
    " g1 C; [( g6 A$ q; ?% _% K
  31. /////////////////////////////////////////////////////////////////////////////: @2 d! o- a5 K4 W: O. \& {9 G
  32. // CRevAppApp  d8 r" g2 @5 _+ g; T2 H
  33. , e3 k* g, k# a, L1 z7 }
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 ^. ~2 _, }; `3 ?
  35.         //{{AFX_MSG_MAP(CRevAppApp)% F5 E4 J2 [- |* B+ j- x
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.* t# @! E, i) z" G" p, a, x
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ; ^$ a& q6 W; Y6 l
  38.         //}}AFX_MSG
    ' X7 X& V! ?  S+ B. k8 \' S0 f
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp), f8 z2 w. Z; M& G: k
  40. END_MESSAGE_MAP()
    $ q2 m+ b8 K, k; c

  41. ! h2 b/ H, L( M8 y
  42. /////////////////////////////////////////////////////////////////////////////6 V" X3 t0 N9 @9 y
  43. // CRevAppApp construction6 p, h- N  P) y  B: a  c
  44. ) I# \7 X. h1 m, x6 F, I+ N
  45. CRevAppApp::CRevAppApp()* x9 E" e" J6 O3 {/ ?
  46. {$ v% m- a2 y8 [/ x! c
  47.         // TODO: add construction code here,
    . X) j4 q* w$ L$ j' b+ Y4 o+ U
  48.         // Place all significant initialization in InitInstance5 _& n  Y* {% I: _' \% v0 o
  49.   bDisplayIsBig5=FALSE;
    # F! e/ ~; y4 \& e  Y
  50.   bRestartUpdater=FALSE;
    2 d1 \# t9 Z, I% k3 s# }
  51.   bFinishUpdated=FALSE;
    2 [$ G1 k6 v: z: [1 E3 E
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;% c# Z, h3 k- A0 e9 j0 g2 I% U1 c
  53.   InitChangeDataBig52GBKS();0 u2 s6 T) |2 D8 i& L  x
  54.   InitChangeDataGBKS2Big5();
    : V9 Y& R( {* F
  55.         //
    7 ^& Y8 V4 C3 y3 _* H' b9 l$ G
  56.         bClickRunExe = FALSE;
    $ e& H5 m% K' ~7 U
  57.         //
    2 s( Z2 h$ j/ T4 r: l$ n
  58. }
    " O& u9 r/ w- m8 u2 ~! U
  59. ( a( M- H+ I# z8 C8 W8 t
  60. CRevAppApp::~CRevAppApp()
    * `, C" A0 l2 U
  61. {- r" `8 z& z, C/ E1 G
  62.         // TODO: add construction code here,
    0 [5 N2 q( X8 f9 U7 P! H
  63.         // Place all significant initialization in InitInstance  e  I( g  g' G) L6 v
  64.   EndChangeData();8 o2 B/ K. J# i8 h  H
  65. }7 I) B+ h; _/ o/ x  p! c  J( n
  66. % ?4 U, V8 \6 u8 b2 F, v
  67. /////////////////////////////////////////////////////////////////////////////
    % C6 K9 _0 _, ?0 p8 Z3 V, D& Q. Z; v
  68. // The one and only CRevAppApp object- ?" Q" U( V) V4 |4 Y% X; E

  69. : W' Z% r. V/ w, O3 K4 v
  70. CRevAppApp theApp;7 n  R$ f) Y7 t8 i  f
  71. 7 |& c: @) C8 G, T5 s
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)# a! Q) e# W4 _) ]# O% f  Y2 o3 o
  73. {
    ( d& l" p- y! N  O7 i* Q  }
  74.   int iEOF=0;
    6 r& n$ ?) N- s/ ~, K
  75.   char szTempName[MAX_PATH];( F0 p- d  I; K, P
  76.   *szFileName=0;
    ! }& R! o, Q8 D
  77.   iEOF=fscanf(fp,"%s",szTempName);7 H# a6 @$ T0 |
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    & p: O+ d! N" D& |1 O' T0 ]
  79.   {
    6 d6 u- x* O5 b9 }, m
  80.     strcpy(szFileName,&szTempName[1]);
      P0 h' F8 x9 b( r
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    " y9 b7 U" G; I/ I- a/ F! Z: I! F
  82.     {/ s# C5 B1 A3 C+ z
  83.       iEOF=fscanf(fp,"%s",szTempName);8 x5 @: v' G$ ]8 r0 ?- A
  84.       strcat(szFileName," ");
    ! t: t( @' A8 b2 W
  85.       strcat(szFileName,szTempName);' y( x6 ?! A! K0 B. P
  86.     }
      `% a; G; D: }
  87.     if(strlen(szFileName)>=1)  @$ U! F( T( L" e4 M% y
  88.     {
    # ]9 L9 h/ w$ u; G; Y
  89.       szFileName[strlen(szFileName)-1]=0;
    % @0 V4 q+ k  Q; {3 f4 L& u
  90.     }
    4 Y  D& f$ z( x) `( [- O% b
  91.   }1 Q6 T( F: Z% F( m( T6 t# }% [
  92.   return szFileName;3 V+ }7 g7 E% O1 b
  93. }
    . a( z6 C1 g& h

  94. 3 f' c1 u0 ^* Y9 E7 i
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)& B9 ]6 h  C! P, i- p
  96. {5 D. z" o0 o# W# G9 Z
  97.   FILE *fp;
    3 s; a2 d5 V" u1 U5 y) X
  98.   char *key=NULL;
    + j- t5 }* D5 F  h' G" C8 D
  99.   char version[MAX_PATH];
    , k5 @3 ^3 L& X+ i6 p
  100.   LPUPDATEFILE file,olds;. `! J) J: v! l! A* {
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! D8 q/ i7 i8 I. o
  102. 4 b1 L" m0 \- b7 Q1 F
  103.   UpdateList.clear();
    # J: O8 t- X7 \- g6 j
  104.   UpdateFile.clear();
    . W  u! N7 N5 E
  105.   if(GetFileAttributes(filename)==-1) return false;
    ( ~1 d. k% H: m% r' ]5 [) A
  106.   if(!(fp=fopen(filename,"r"))) return false;
    1 V  U) B' @$ f
  107.   fscanf(fp,"%s",version);
    ; I( i, t1 a3 P3 z5 e( |
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    9 g4 c+ C0 t6 I4 H, }
  109.   while(fscanf(fp,"%s",version)!=EOF)
    , T! F0 S( \( M2 Q0 Z; o* N. S
  110.   {
    5 b1 Q& u5 e; v# v& g0 m6 T
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" \9 I( j3 Q: w' x/ I# d0 v
  112.     fscanf(fp,"%s",file->path);
    * Q0 [  F8 {% B
  113.     ReadFileNames(fp,file->file);
    " t$ Q& X( X0 S6 d8 B* i
  114.     strcpy(file->full,".");
    ( f) V0 W1 a6 U% z
  115.     strcat(file->full,file->path);
    & A$ b7 e# ?6 ]! T" W
  116.     strcat(file->full,file->file);7 Q' W. B9 y" L& `" U( x) Z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ! f+ p. L" `! @0 M" z4 B' u
  118.     {6 ?% a' e5 O/ U: T. G. h
  119.       file->vers=(float)atof(version);
    7 U1 P% P4 [6 I9 q- T3 p
  120.       UpdateList.push_back(file->full);4 _2 F( V4 R0 Q* N# f8 c( V7 c
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    : g0 a7 _: C  g$ R+ c* [  \6 J/ q
  122.     }. B$ {- _& s  X
  123.     else4 E4 R; _1 L4 n7 |7 m( R
  124.     {* W' C( [) d7 n7 y, x5 k- T  t
  125.       olds=(*p).second;
    6 r/ W5 u% d- A% R  N( c( G1 d
  126.       if(olds->vers<(float)atof(version))
    4 P6 E1 R: O: Q& a  ?
  127.       {$ s! J& t+ K6 a3 ^
  128.         olds->vers=(float)atof(version);3 R; ^' [) J; z" K6 s. U
  129.       }
    1 g  @6 i% K5 M! A3 b, |6 S
  130.       free(file);* j8 ]' E4 Z  m" J) ~0 `6 \4 U- W8 u2 H8 G
  131.     }9 b. _$ X7 b! e! F3 a
  132.   }
    6 M. D; M5 p8 z
  133.   fclose(fp);
    + P( F! b. H9 n$ H( X9 S" {
  134.   return true;
    8 E2 g6 @  H1 i7 Q4 ~& S( `
  135. }2 V( V  K0 `& V# U' U

  136. / L8 ~. }1 x$ h" d  [. k7 @% c2 o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    5 X7 m+ O  O, C; f$ L( f' O( o8 W
  138. {- b$ L% T4 L' L; F8 J5 O% A
  139.   TCHAR  szFull[MAX_PATH];7 U' Q' a. T$ y3 k- @8 s
  140.   TCHAR *token,*inter;
    - y7 L1 R" q+ j! K& B
  141.   *szPath=0;
    9 }" a) _) u: e- ]7 `) v0 T
  142.   strcpy(szFull,szFullPath);" J) C3 D! _5 G  J  q
  143.   token=strtok(szFull,"\\/");+ H5 u0 t* z# w% S4 J
  144.   inter=token;
    " P$ A+ d' T2 x
  145.   while(token=strtok(NULL,"\\/"))
    : \; U$ S4 N& n5 u9 f4 X
  146.   {6 `0 f2 H- Y, ]! t8 n1 D# H, ]# J9 s/ y: c
  147.     strcat(szPath,inter);
    ; s: h1 U4 m2 i8 @/ D1 I: v
  148.     strcat(szPath,"\");
    5 ?) m- v3 k; Q1 Y* Z+ i( O* Q' }2 g* z
  149.     inter=token;6 r- f4 X( M# _- R* A5 a9 o
  150.   }
    ; N- f: ?5 m. A+ M  d( \, X; V
  151.   return strlen(szPath);
    5 x' d& S. Q+ g, x0 Z
  152. }% D) _# r) H0 @1 l4 o; i: i% C
  153. + c2 q# {$ N8 K5 C
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); l. ~: w2 L7 u! j. A. F1 `5 k# v
  155. {
    " [' e2 l; L* Z0 d  M
  156.   DWORD attrib=GetFileAttributes(Target);7 T! A% C& B- t& h- A7 o
  157.   if(attrib!=-1)6 @# r! }) r* j2 e
  158.   {
    ( ^9 F+ f3 S2 N, p6 T  o* w
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    + r* s/ j' B' ]% _/ |; J5 B
  160.     {) Y& g. T" D/ l" F% N+ L: E7 v
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    . t/ X5 [# u1 `5 ~$ w$ h9 P6 D
  162.       SetFileAttributes(Target,attrib);2 w: Q2 {5 D/ j; R- [  a- C
  163.     }
    - \/ J% p2 m* t, d  x! I. j
  164.   }1 z4 D* `' r/ N9 [8 O: n. h) ^
  165.   CopyFile(Source,Target,Erase);3 j) e! j( q9 v3 m. l! z( Y  J2 }
  166. }
    # z; |0 a8 _0 t/ L* k

  167. # D: @  E7 r0 X
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    8 Y  G- p( N3 K
  169. {
    3 O: Z1 V& O+ I! g. d1 a8 ^
  170.      FILE *fp;
    & m) Z9 E+ ^3 U& i: |  _2 w9 w3 B
  171.      char  szBuffer[8192];4 a+ d5 X* `4 r1 z! h+ j$ ~3 c+ Q: s; D7 U
  172.   va_list  argptr;$ L* y/ \- [) D$ {; \& r/ U9 V

  173. & c6 p8 j7 o6 F, b' u4 k! Z. z* T
  174.         va_start(argptr,message);4 P, H" V* d; y3 L( n1 v: n
  175.         vsprintf(szBuffer,message,argptr);
    , g* `" z8 U/ ^
  176.         va_end(argptr);2 g$ _- G% l: t2 t+ ?; Z* p3 `
  177.   fp=fopen(FileName,"a");3 g4 i, C6 J3 o  c
  178.   if(fp)
    ! `3 S8 o& _6 h6 O) k
  179.   {
    5 }, [- X5 V6 e9 z" T9 n1 T
  180.     fprintf(fp,szBuffer);
    6 u6 p, W# G7 V" e9 a* N: Z6 d/ }
  181.     fclose(fp);
    6 y  c9 K1 U! m. |- X+ Z
  182.           _flushall();/ e( ~! _: G) \  P
  183.   }
    4 d, ~9 g7 n) u2 X
  184. }
    ' c' r4 n, k) U. o' @
  185. & I* {& ]  c7 Q( h; D5 Z& e$ n
  186. BOOL CRevAppApp::Fclearf(char *FileName)# m& F, @& f" x( d+ M
  187. {# C- R, \" z: c& l: E( V; y
  188.      FILE *fp;
    ' U0 P3 R# m8 A* Y% Z
  189.     DWORD  attrib;
    : t8 _; m: e3 d$ D( D  ~# K7 ]
  190.   attrib=GetFileAttributes(FileName);/ r  |& t9 W4 l* s. I
  191.   if(attrib!=-1)) `5 T" r; p4 {4 W* c! M
  192.   {. _  F2 I; T' Q/ U4 j3 V" ~
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ; s$ E. ~, y4 o2 g  p: F- {4 q, \6 z
  194.     if(!SetFileAttributes(FileName,attrib))
    8 M: k/ O9 T# b1 g% D! |
  195.     {
    : K( }0 s* m$ g! C+ P! }
  196.       return FALSE;- ~3 V2 M; V$ K( T4 g# W
  197.     }* K, m1 `- \$ t. k9 n1 Z* i
  198.   }
    4 S" |1 s4 ^* L3 J2 p& ^( P- S
  199.   fp=fopen(FileName,"wb");
    " l! U' k1 Z5 r- j5 H7 |
  200.   if(fp)
    / q2 _* ?2 a! g; y
  201.   {; H& B" T/ r: e* {
  202.     fclose(fp);
    9 ~: d) \& N! d! b
  203.   }
    * }: h+ q) r/ S! _& d: C; B, c
  204.   return TRUE;; B1 b" {: n6 v! O( N, n2 E
  205. }
    : }9 Y( K. n! _/ n
  206. ; C0 k& ~# T, S
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ( b. a) g& ]: G8 M
  208. {
    " T  [* R% \  f2 U  K, y+ G" w
  209.   char filename[MAX_PATH];
      f4 |: C0 v" @' j  B# U% ~! ]3 A
  210.   LPUPDATEFILE file,olds;
    + X/ ?# L$ |- U5 A* t& u
  211.   std::map<int,CString>::iterator i;( I9 i7 @" _: x7 i3 {7 T+ f; {$ f
  212.   std::map<CString,LPUPDATEFILE>::iterator p;' Z3 ]! h) @) K$ ]4 c! h$ F3 C
  213.   std::list<CString>::iterator l;
    2 r/ r! k4 M  B' q5 {6 V* e

  214. / T" d  S2 F5 t1 o* b& l
  215.   if(bFirstUpdate)+ |. c. t0 `2 W0 Z, f/ n
  216.   {. p# z' I7 E- H* `9 U
  217.     dwCurrFile=0;
    + x% T9 Z$ m9 [5 f- A& r8 T  r
  218.     bFirstUpdate=FALSE;
    1 F0 N& G9 ~0 I- r0 ^2 c, ?
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + `4 x% B% P( B, w; C
  220.     {
    % @+ Q' I) e* b
  221.       dwTotalFiles=UpdateLocal.size();! |0 S% x. J% N7 Z6 ?
  222.       dwDownLoaded=0;
    * C: T) [' u+ F
  223.       bSilentStep=FALSE;
      ]& _! a5 ]1 ]* M( T# j4 l; `: N
  224.       bCompressed=TRUE;
    & A" o9 G& p7 O8 ]
  225.       strExtLocal.Empty();1 u" X0 R( V7 g, r: N/ [
  226.       strFullName=(*i).second;* n$ A3 c8 U; j" ?  M; }" Z
  227.       dwProgramState=AP_CONNECT;6 ~" U- o- |( R; u- ^
  228.       return TRUE;
    , ?8 P- r1 E0 X$ Y; Y7 j
  229.     }# c3 A' O) ^3 A( S& _  \. n
  230.   }! p" V/ n4 k' M4 A) E( Q
  231.   else if(bRestartUpdater==FALSE)( G% @, y& S+ p7 T
  232.   {, t/ b8 O  _+ h$ H6 T
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    2 N4 \4 k8 l" s" a- ]7 Q; L
  234.     {  q, j  J* g" `' c% b
  235.       file=(*p).second;
    $ N1 y9 ?, Z+ h/ |: I
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())4 f) ?$ W2 j. r( j2 q5 Q8 i9 n" g0 y
  237.       {
    ' m2 D0 e) ^  \& g
  238.         olds=(*p).second;6 U7 z7 v0 A6 \! g9 j$ w0 ]# B
  239.         olds->vers=file->vers;
    9 c9 s0 F4 o: _+ c; _
  240.       }! z1 |8 m$ t- s2 q& m6 o# A
  241.       else4 E1 z! Q9 ^( L' a) v1 j# C1 O
  242.       {
    . D3 ~: v4 L) ?& i( q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& Z, b, g4 P- C' d
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    / @9 x' X, \' K+ ^0 w# N
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    4 f* c( j9 u, T( s! n% u
  246.       }* ]8 K5 S) Q' Y% R1 O) r+ |
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");& @' @0 g2 h' Y  v! w( W6 P
  248.       sprintf(filename,"(%s)",file->file);* b/ h. v9 w9 o
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ( S+ O* z: E( i" o  j
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " \9 Z9 G. h8 e1 a
  251.     }7 Y' a* J9 ~; H0 {/ Y  G2 X
  252.     dwCurrFile++;: ~& \7 Z5 c1 \2 N$ F
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , _$ ~8 e4 |* T3 B) H# `$ M# ?
  254.     {
    % j" V) @, V: F) S1 [! A
  255.       bSilentStep=FALSE;: W& T( [$ X  Q  {
  256.       bCompressed=TRUE;
    # P- n' s1 R, K; R" w
  257.       strExtLocal.Empty();3 K; v2 _3 n& f: p  a
  258.       strFullName=(*i).second;& I7 w: D. n- X5 Y7 [' O
  259.       dwProgramState=AP_CONNECT;% d! }* ^: l2 g( |0 n9 q$ r2 x
  260.       return TRUE;
    5 ^; ?4 k5 z' Q: W
  261.     }
    / O8 P, Y: }7 ?* v
  262.     if(!bRestartUpdater)
    * X8 S! T+ c7 I8 P; H% h
  263.     {
    ! J2 `+ y& \; v
  264.       int iCurrSize,iFileSize;
    & X; p% a* y8 {. \, [3 E
  265.       iCurrSize=0;
    0 I: D2 }' S4 y. W
  266.       iFileSize=UpdateList2.size();# A: K  U$ S4 M8 d/ @- c& z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    6 X5 d3 _9 U2 w4 K3 |4 F% r
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    * u" k, K4 H2 u) D/ G8 Z8 V
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    5 K% g8 v- A- ^) ^( ?
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: @' o) i5 V* ?1 ^2 b, I0 k
  271.       Fclearf(".\\update.dat");2 n- A  O$ t' d5 }( F2 d
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    3 x# s" j( X% S. e
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)# ~, t1 c- q; |8 Z) q, k
  274.       {
    " j# ^8 d6 v, H2 v0 C1 X
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    + `" r! |. P) @( O* x
  276.         {
    ; m% g+ R6 y! f" N  e" ^
  277.           file=(*p).second;
    8 v- |1 H+ a; D" h
  278.           sprintf(filename,"(%s)",file->file);
    " Q2 m- n( Q7 c+ S' f& u) O3 B, E4 [: W  Z. ^
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % W& d0 }, h8 M6 O" c8 M" ]8 c% _! G
  280.           iCurrSize++;
    ) w& _2 u' O) i. Z5 Q" u8 T5 Q$ X
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));" {1 D6 T5 N2 Z# z" v9 x
  282.         }
    5 g  D1 t: j5 S# B
  283.       }
    3 f$ {) r0 y3 ^" z' ?8 s; z
  284.       unlink(".\\update.txt");
    ' d1 e" q$ j7 ?. c# t1 e1 p
  285.       unlink(".\\update.tmp");
    ) r( q# p* i& n  _+ I# I; {, W
  286.       Fclearf(".\\checkversion.dat");
    1 `* t! i1 z+ v$ l. }( j
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);) b! Z/ ]( x# }  k: N6 x# _3 ]
  288.       if(UpdateLocal.size())
    3 B% d- {6 ]6 M& m9 T" `
  289.       {& g+ c. h( v. {
  290.         UpdateLocal.clear();/ ~( v7 p. N' V! {
  291.       }
    3 c- n$ j% k% `
  292.       if(UpdateFile3.size())
    , }) N& Q1 l/ [# @1 d% l- Y' d
  293.       {
    & O0 U/ M' }, o5 s
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) Q, n2 C3 Z6 m
  295.         {
    + L; |3 A0 S) u/ o5 ]* k
  296.           file=(*p).second;0 W& }! z; v: s, a
  297.           free(file);
    ) ~" H! I, |' c" D( r
  298.         }$ n4 z6 r3 E* E7 W  q) A9 {
  299.         UpdateFile3.clear();, m4 J; Z7 e, I
  300.         UpdateList3.clear();
    0 v3 v7 \9 S2 X% w
  301.       }
    : e& l) P" y% H& L, Q0 l
  302.       if(UpdateFile2.size())- E0 U/ g4 f% E& o) [3 e1 j
  303.       {
    $ h- M. F- M( H, l9 Y4 z
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 I+ [; G1 }3 ?+ f9 X. N% D
  305.         {/ f6 k) ~/ j' N7 d9 J# O
  306.           file=(*p).second;3 ^7 M) a, }) b  Q1 B7 b2 @
  307.           free(file);( W9 @! O5 U$ }; J2 w* y; _7 |
  308.         }9 e  y0 l; q  A7 X# G0 v
  309.         UpdateFile2.clear();
    2 j  y  z( b1 V( \  H& `
  310.         UpdateList2.clear();
    5 ]( N7 o6 Z( J* X# ]
  311.       }
    % C: U! M  q# c
  312.       if(UpdateFile1.size())
    " K% X1 Q. i. a+ `+ r0 u% r
  313.       {
    9 P( G+ J4 q; \7 H7 i7 y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      q% ~3 h& i/ W: x+ l1 z
  315.         {
    3 x% X8 {" i- ?6 c# b# M
  316.           file=(*p).second;
    7 E7 f' {3 t3 u
  317.           free(file);3 t/ T: k) ?! c
  318.         }
    - e7 }3 |. X$ W' o; q
  319.         UpdateFile1.clear();
    % J, u& x# @- a9 S
  320.         UpdateList1.clear();
      H1 B6 ?  m1 h+ c& K: g+ B4 P
  321.       }4 R" b( r' a5 q' ?
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    1 [! x0 _; g" [, S: z/ S
  323.     }% Q0 w, z! R) h, t
  324.   }" E/ |9 w9 m2 J% O6 n* w3 [0 u
  325.   return FALSE;, o% O( A. j; N% u( y, o
  326. }! U4 o( }7 j6 q2 R2 L$ z4 E
  327. 2 y" g* M) l. e- C2 k' O
  328. void CRevAppApp::ClearAll(void)
    % \6 J; P. Q, @. S! k9 e
  329. {
    3 O4 T- g7 S. `1 X: }
  330.   LPUPDATEFILE file;4 O8 A" H" E# b0 e. c  R6 f) w
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    % U) c9 K/ e+ y! c9 ?7 I! E
  332.   E! g9 T5 [) t  |1 |: E: C% t
  333.   if(UpdateLocal.size())! E/ J7 Z3 b# R8 b4 w( A  W
  334.   {
    1 i$ ]9 }, o! S; p( x5 u9 m
  335.     UpdateLocal.clear();
    $ ]2 q( }1 G# T* V4 i# U
  336.   }
      K0 y9 P" ~2 l. P) u$ ^6 K$ T
  337.   if(UpdateFile3.size())
    3 y2 K; ?+ X0 X. m1 G% w% T: [
  338.   {' P' d8 O" q/ L7 M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      E+ c6 E7 e* y2 ~9 r, y+ V* K
  340.     {$ y- k8 O  ^! I0 {& [- L3 @
  341.       file=(*p).second;
    . |1 V: \' p( d. A4 i
  342.       free(file);
    1 B: k) x* R2 i- I5 x0 U3 Q
  343.     }; X  T4 @7 Y" L$ ?7 x
  344.     UpdateFile3.clear();
    ! }( s! l5 o( N
  345.     UpdateList3.clear();2 W& I6 p, @* p, n9 G; j6 a
  346.   }* M/ z  s  R, [
  347.   if(UpdateFile2.size())# q8 d: p: I* W( S! V" |4 C( o
  348.   {
    0 D9 }) ?/ T0 i+ c
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) d3 L: }/ V1 Y6 _8 U
  350.     {: D+ z7 N1 B9 L" M% R
  351.       file=(*p).second;3 ]- {& A: J% C  n% V0 m. j$ U' H. Y  J
  352.       free(file);
    0 I& r6 ^" z/ t. ^
  353.     }# X" s9 m4 t# d* _
  354.     UpdateFile2.clear();& g2 D- m% G8 n
  355.     UpdateList2.clear();) k5 \5 N( g/ `& Q' E5 b% V: i
  356.   }- r7 w- O: E, M4 z$ B
  357.   if(UpdateFile1.size())
    7 ?8 k7 f0 Z) L( X$ }
  358.   {+ c9 f4 p* I( G6 `6 c5 N
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 Z" [& c+ }/ D" m
  360.     {
    - [1 J# g& ]) C) ~
  361.       file=(*p).second;
    * w" R8 A: ]" Y- k0 F
  362.       free(file);
    6 `2 F( }1 }8 N$ X& ]* Q
  363.     }2 s! q# A+ N* s& O0 C9 X! k1 x# W
  364.     UpdateFile1.clear();; J- ~9 W3 V6 _: {5 \+ Y5 I
  365.     UpdateList1.clear();
    3 ?( |4 }% w! F+ m6 `; q# C3 R# o
  366.   }2 s: i- X' M4 B$ u
  367. }  
    3 U+ u* N0 J$ `+ s/ e$ r  D
  368.   3 t# h- _0 _4 o; X* i5 i
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    " a/ H4 q' S& H- m3 Q0 J9 F
  370. {! X6 E% n; [8 I8 g# e1 }7 h% }7 [* e
  371.   int c;+ c# j! E, |8 ?" i% O
  372.   LPUPDATEFILE file1,file2;
    3 i/ _- l1 y( p  U6 a
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ! A! _4 z" P4 r/ n0 M) ^
  374.   std::list<CString>::iterator l;/ |% B2 u. o  E" l  |
  375. 1 m3 j7 X. L( |: T% R: d8 g
  376.   UpdateLocal.clear();* `  {, I5 I. y! R1 i
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ( j8 b9 |0 r" K" |: C  X
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ' u" }- r& [5 k2 s6 w, T
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    & w7 Q( p- y' t3 B4 |
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);) T( k. V4 T9 S+ m) c
  381.   if(UpdateFile3.size()), u% S0 W0 p: g* A
  382.   {8 V8 a+ x- H5 f. g+ W7 r- B
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - A) m5 U) k& `% A1 k8 x. P
  384.     {4 x) }+ S% P2 q$ U- Y3 T
  385.       file2=(LPUPDATEFILE)(*i).second;
    # `" g# b: {* g$ b
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" w2 Q7 G0 i) q8 w* P! H. l7 o
  387.       {
    7 |; s4 P( e  s
  388.         file1=(LPUPDATEFILE)(*p).second;) ^6 V. u# o4 I% [$ D+ T1 j
  389.         file1->vers=file2->vers;+ w. y4 B5 z" L- T* |0 y. W1 J; E
  390.       }6 @; q  [3 E$ m+ D
  391.       else
    & X/ ]8 c0 M. q8 w! X
  392.       {; |" v. e5 E, \) [  O: R
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      o5 \" P8 O0 q( `
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - Y# }, B. j* d# f  d6 w* S
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));( P; v) \5 N2 o# v$ k5 c
  396.       }6 X0 w# E" P4 r" {: H% q
  397.     }  g0 u  u; K0 N% B( ]
  398.   }& t  y* D# K! n8 O; E$ A
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)  Q% v$ f2 _  F7 ~/ o
  400.   {
    5 I% m0 R$ l& _6 h! X: J" P3 ^4 e4 r
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())5 r9 C. S+ y6 N$ d; D
  402.     {1 M# h$ \2 v  k- e# v% \
  403.       file2=(LPUPDATEFILE)(*i).second;8 I4 Y( O+ b; q8 J$ j
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) C  U0 e* Z7 _3 m( m
  405.       {% q4 C- S0 K/ v1 f+ K
  406.         file1=(LPUPDATEFILE)(*p).second;2 J& Q# s/ ]1 K
  407.         if(file1->vers!=file2->vers)
    ' e: w! H4 c8 A0 C# n0 O
  408.         {
    2 A: W# e  q4 d( s6 H
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 w1 o# Y6 w; u& D; F" w
  410.           c++;3 r, `; ^% ], ?: b; }) c) L
  411.         }
    9 k# P% k- b+ U! |* i$ m9 K( O
  412.       }& z* r! j' ^3 B  H5 a# u( M
  413.       else6 I/ q: m# T; [' x4 S  k. Q
  414.       {$ _/ R) o# v+ p2 P# u2 k
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" F* W' ^1 O( x
  416.         c++;
    / a. ^0 U2 f. K/ r
  417.       }
    6 k8 N4 ~7 x' \  E8 o/ p& s$ _
  418.     }
    ' d) w6 d6 Q# u- v; c+ {
  419.   }% O9 L: X5 r7 g2 j! C$ r
  420.   unlink(".\\DownLoad\\update.txt");+ x& ?, i! R3 z) u. m" j7 g
  421.   if(UpdateLocal.size()) return TRUE;
    ( [% @4 M4 Y$ M, U
  422.   else                   return FALSE;$ ^) C+ m! A3 B* f" ?  T
  423. }
    ! h0 s4 c  t$ B9 A( X5 e
  424. . y5 k, C* d* z4 O+ N0 Z; c
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    4 O* f7 A* @' J. n% P
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"6 I0 P, E9 b) b4 `9 i0 M
  427.   r1 u1 ]3 h% X+ j+ \  b) g

  428. + x1 y3 Y7 X& x4 d7 t8 |& P  F
  429. : [) z! S; j) P' I' _3 K
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    8 w, ^- m+ K% V" k; U! P
  431. {
    % d$ u' H7 h: u2 w. e5 r
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;; h: W) u) ~- l9 ^! D: v3 g/ F
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 f0 x" @+ C2 N; \& P
  434.   {: ]0 J0 m5 V1 M; \/ f
  435.     char szLanguage[50];# f$ ^/ ?- ^/ h, e* \9 b, A) |0 ~
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 e9 y$ {- q7 C+ l- }8 T6 T" \
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * x- c( O2 B9 ~+ P
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      z, J) ~# \3 S2 d' h5 Q* l' O
  439.     else                                   m_iLanguage=ENGLISH;
    ( |8 I' h4 s4 }" m' b
  440.     char szRegister[100];9 p; d* u) l: C+ F
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    3 A. n. @8 |' j* a( m+ |7 a# X7 Z( A; Q
  442.     strRegsName=szRegister;+ v8 R1 P5 i$ n# u- e: P* l: k+ [
  443.     char szPatchURL[100];. v2 P* _5 l% [; B& `9 E( L& E5 U
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& F3 Q  [$ U1 A: E' P. u1 V: f
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & `7 a1 s" s" W. F
  446.   }& N# }/ h/ z% z* @8 p8 g
  447.   else
    6 B' T4 j/ J( c
  448.   {
    - m0 K$ j) u- U4 H- \: d0 n' O
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 u& d/ _6 ]% m' e9 j
  450.     strRegsName=DEFAULT_REG_URL;
    6 O9 G- @  s% g9 `  L
  451.   }
    . Z- @* n$ f; v  p4 P: I
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ) Z, M1 ]* t- e0 \% ]3 O. }
  453.   {7 }& O/ H0 S" W* J
  454.     char szIP[50];! E" A( P, f( T9 A2 H
  455.     char szDIR[300];
    3 m. a6 e  w, W9 D3 i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ) `3 U" P6 F/ n# j1 G
  457.     {. u' y* T, W* M1 G
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* N4 O8 m) t7 k/ E
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");8 \7 y; T* ^1 j, T# U
  460.       strHostName=szIP;8 n2 Q9 @/ X- N" u, @  R1 ^) m
  461.       strHostPath.Format("/%s",szDIR);
    2 B4 S4 ]' }; f9 m3 a7 D7 v8 c4 F
  462.     }
    " n5 v0 k6 ~2 p; g% f
  463.     else
    5 J- y8 I5 m1 U3 U
  464.     {& D! p: h) ?0 J& v3 }
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* o# w- e! A- V' F3 k2 \; C
  466.       {' ~# Z' W; `" Z' Z3 s& Q- Z
  467.         char szLanguage[50];
    " }3 a) k) l$ f! q, P5 {
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");# K  N% e3 D0 k' \5 t0 T
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 ^% Y# m9 _9 b4 V% w
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ M& S  N$ J# c# D* ]
  471.         else                                   m_iLanguage=ENGLISH;
    ! ?# Z% e: x5 m, a, e9 z
  472.         char szRegister[100];( _( A0 \' B: S( j1 t' n( h
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- d) @! h9 d- i- ?0 L2 ^) z* I& K
  474.         strRegsName=szRegister;
    ) T2 n: u9 \1 \- @2 M
  475.         char szPatchURL[100];6 C$ G; U" O' q7 S+ ^
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 `+ ~) ^& X' b& \. [; M
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 I1 ^8 \' Q2 e' P& m6 c
  478.       }9 @2 r. b- K, X3 U; m$ q: W) S
  479.       else  k* {- M3 R8 Y
  480.       {
    # O) E% b! M1 Z* {) V, D
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( b) z  I$ U) y( E& b) o8 S+ D/ s
  482.         strRegsName=DEFAULT_REG_URL;" A0 E" S$ ?0 S6 E; ~
  483.       }% o3 Z- B& n. g
  484.     }
    ; _& b6 B$ W2 z5 I1 A
  485.   }! z$ _' |2 d0 q$ v! G6 Z$ }) h
  486.   return true;
    ' L; v9 d! @$ N, C8 p, H4 _1 l
  487. }
    4 p2 v8 V6 y( {- w1 X
  488. : _5 X1 X3 Y& Z
  489. #include ".\ZLib\unzip.h"
      V5 |( W- Y) l# U' {) L2 S  a
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    , D, _& [  ?4 d9 F! U2 f
  491. /////////////////////////////////////////////////////////////////////////////$ u) i6 r, z) e2 \9 C1 Z( j
  492. // CRevAppApp initialization
    7 _' Q" p1 L5 O0 V. p
  493. 7 B9 N4 c+ F$ T  E- X- [# L
  494. BOOL CRevAppApp::InitInstance(): j/ @, p' n- }8 D' t3 u
  495. {) x, }8 n- A' U1 P  _' M; M+ B( E
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    & @0 ~0 |. Q5 ~
  497. # t- H9 r) z9 X4 |+ E4 }& E
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);% B: n% z4 r) m5 d. n6 c$ F
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    2 D9 d! i8 ?% ~* E7 \6 s
  500.   {! D1 e% s- u' `' V" v, P
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");/ v% T$ e0 D8 E( [5 y, a, {# N3 ^
  502.     GetPathFromFullPath(szPathTarget,szPathSource);/ R8 T8 G8 Z" S5 I
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    . U/ f3 H  b  ]! S/ M7 D
  504.     {9 `( {! M9 ^+ O" x
  505.       strcpy(szPath,szPathTarget);2 v1 k) |7 P7 D% `
  506.       SetCurrentDirectory(szPath);
    - c7 }/ w8 q. ^5 c( d
  507.     }
    7 ~6 G5 t9 _+ w8 C; [
  508.   }
    * K6 f$ }+ T, P9 i0 \( h: @7 W
  509. #ifdef _DEBUG
    $ E/ y9 Y! a3 V& E6 V" S! V
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 ?0 r3 T1 \6 L' N3 e, j3 U& i2 r; f
  511. #else
    , M/ R3 V- \& S& U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( G3 f' \+ m7 x% ^+ G
  513. #endif  r" [; t% J- m- L* S
  514.   {8 G  h4 C' v* E  H
  515.     char tempFileName[MAX_PATH];
    2 P4 f! j7 I( O
  516.     strcpy(tempFileName,szPathSource);
    & }1 ^* q2 X8 z2 J3 [
  517.     tempFileName[strlen(szPathSource)-12]=0;: c2 [8 W" b4 S( Y5 m9 Z4 y+ U
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    $ U+ z% T6 [5 F; ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ) n6 L( n8 x8 g1 k0 T6 B$ H3 J
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    8 k& h) c) q9 S( G6 L8 O; q
  521.     return TRUE;
    * n8 T' v7 F2 J* V( e
  522.   }  j1 W3 g5 x6 l: `1 Y6 N- \7 s$ A
  523.   // Nuke 0118: Delete run.exe' w3 x* m& O1 d1 W
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );$ ^5 w8 \9 S7 e. S/ s
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");# O% m" ^  J& k$ f1 D
  526.   if(!ReadCfgFile("Config.ini"))8 j3 C5 }3 ?- O9 T
  527.   {2 M$ k; D) T! Y0 U$ y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);, u" ?% ~$ y& i6 ^) d1 |
  529.     return TRUE;
    3 f% s) }$ K# b/ F. D
  530.   }8 Y5 G/ d0 U) }9 z
  531.   HANDLE mutex;
    , c, `5 O; Q% x9 `* h9 o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))7 b! B; ~& N( \4 S* ^
  533.   {( q: K) z4 x) @% O3 O7 @6 A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    3 D& ?& P% r' s, s4 K
  535.     {, g( W0 D; t/ _/ F, T
  536.       CloseHandle(mutex);& p7 ?9 V2 ?+ h. j" O
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    7 j! P& @% C0 E* p$ i. w/ [+ f
  538.       return TRUE;
    ( i; Q" I- q) x4 M+ H& D
  539.     }
    0 p! d4 ~6 {2 I9 q' C
  540.   }  
    ! P0 H) @% n) o
  541.   CloseHandle(mutex);
    3 V5 w* X4 C7 E3 E' S# x

  542. 1 V9 @( Y* X% m+ Z4 ~
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # s, ~" o* t# l, f3 Q$ T

  544. 4 X& _3 U# @" @4 J+ P* z
  545.         AfxEnableControlContainer();
    / S  r  f  f* O& R! m0 [
  546. : c2 R) F' o6 m$ [' T1 Z# }7 x
  547.   bCanUpdate=FALSE;4 X1 m: D3 d' c. m" E7 N
  548.   dwStartUpSteps=1;
    # m7 D* f0 |) q
  549.   dwProgramState=AP_NOTHING;
    4 s; y. N; Y( \' v2 L
  550. 9 Y+ e% A4 V$ X' x1 G9 c0 p
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);& \  Z! v7 n: c4 l2 l2 j
  552. / e7 @5 K, E' h; C/ H6 ~: G
  553.         // Standard initialization9 T6 F8 e9 e$ `# A/ ^+ u
  554.         // If you are not using these features and wish to reduce the size
    & N3 f# Y. J3 g7 ^# \
  555.         //  of your final executable, you should remove from the following
      s9 p9 T' [3 Y8 f& d8 e
  556.         //  the specific initialization routines you do not need.: ]# T! ]" v' `( S% R* P$ A

  557. ; O9 @/ O8 C" X% M# n0 X+ z5 T
  558. #ifdef _AFXDLL
    " A5 W& _9 N4 ]
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL  e# D8 _9 _+ A% t
  560. #else# h& c/ g. ?2 T7 S, o6 N
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ b3 A6 F* t/ x% f; d
  562. #endif% Y: R: b% g- z, Z5 o: \; V

  563. 3 a' i# l) M9 ]" A  Y2 U& s
  564.   dlg=new CRevAppDlg;
    " |( _2 x0 i5 u  D- X; A
  565.   dlg->Create(IDD_REVAPP_DIALOG);  Z& H2 f7 C/ b/ t( N. j
  566.   dlg->ShowWindow(SW_SHOWNORMAL);1 z; ~! R8 D3 B4 K4 J
  567.   m_pMainWnd=dlg;+ L( A+ q; h; D/ P0 }

  568. 2 Q3 T9 P9 V( Y/ N: R
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 S0 {- v9 w" R6 t2 ^6 F* O
  570. - x, y6 I5 [* l% ]. ?# q
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ! i9 S9 S$ t2 t5 V
  572. //  ULONG_PTR gdiplusToken;( z$ X/ T5 A9 G. V0 f  b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);8 Z+ u3 M! p5 {% z/ G1 q* \

  574. $ e7 b8 C* D( j8 g+ i. P0 p& z
  575. //        CRevAppDlg dlg;8 h8 u7 z9 g/ c' O' z. e
  576. //        int nResponse = dlg.DoModal();
    % h; j5 L' ~* ^1 ^# s; O+ h- f
  577. //        if (nResponse == IDOK)
      m& q( |$ c3 |& I1 O' N, j
  578. //        {
    ( f2 B/ X/ Z. Y7 g# E
  579. //                // TODO: Place code here to handle when the dialog is
    ( T8 _" f" |% T& v
  580. //                //  dismissed with OK9 N& C/ w2 E; U
  581. //        }
    2 s6 Y7 ^2 Q0 a( _: J# j
  582. //        else if (nResponse == IDCANCEL)7 M& q* l5 n5 o4 _6 S
  583. //        {
    . w' |+ M0 I# h( E
  584. //                // TODO: Place code here to handle when the dialog is5 w6 o$ B2 ]+ B) R3 |. r- p
  585. //                //  dismissed with Cancel
    3 y) h3 q( x* C, q9 v' q
  586. //        }
    , Q/ i2 [7 s3 x

  587. # t  d* m" N8 t4 n8 s" q3 N
  588.         // Since the dialog has been closed, return FALSE so that we exit the6 n( v+ a5 Q: B  c8 }: e
  589.         //  application, rather than start the application's message pump.
    " R& o$ R5 O& x! C( o: S2 `0 g
  590.         return TRUE;
    . V; a' w4 H  e) n+ q
  591. }" ]' s9 t, k# ?; P& M6 u7 g9 M3 o
  592. 1 e- @) }% C7 b0 h
  593. char *CRevAppApp::strtok3(char *pSource,char *token)7 h- D' }( {) }, G6 r& Y9 i
  594. {
    ' Q. b% _# E, t2 C
  595.   int i;6 X4 w/ C; ]% `: s
  596.   char *szRet;
    5 h& b% s4 s# Z, h- J5 L0 u; G" k  w: W
  597. * A, z: k# F# e2 q+ g, o
  598.   if(pSource) { itoken=0; sztoken=pSource; }9 a" q8 t" D' n: S3 S) a/ v* J
  599.   if(sztoken). W$ V( c5 i; j4 j# a
  600.   {# T+ m+ F9 c! d5 a* ?
  601.     szRet=&sztoken[itoken];
    8 q! f2 c" U! x
  602.     while(sztoken[itoken])
    + d4 o: ~, u' F7 E$ K8 ~$ p
  603.     {& ^$ v( [1 J8 K. q
  604.       for(i=0;i<(int)strlen(token);i++)/ q3 T! T+ P! t8 {: P( `* h6 _
  605.       {
    & q$ B7 C/ F/ U8 f; _9 H4 s
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; J/ m( w& T* }+ C
  607.         {! p7 W. Y" G% V% p2 s$ x) y0 d
  608.           sztoken[itoken++]=0;; S; m$ }7 r+ }+ t  y+ @
  609.           sztoken[itoken++]=0;% K( V; p/ N; N1 O5 J3 D/ J' o
  610.           return szRet;6 {7 S: V5 ~4 X" H
  611.         }1 g1 Y0 W' C) I+ h( R$ Y6 i7 O1 Z
  612.       }( {7 |/ {9 X0 q% W6 Q' n9 B: }
  613.       itoken++;% ^" @$ c. l+ d! b* p" n% V+ K$ b
  614.     }' W! g2 @0 T- Y' |
  615.   }' T9 f) j5 u7 V: t
  616.   return NULL;) c3 F; J6 ~7 t8 r0 O
  617. }4 S7 K8 U* K7 r
  618. 5 n) E$ t; s. X
  619. void ProcessProc(long Total,long Current)( z% E4 \. L& D0 K
  620. {3 b! l2 L7 r9 s& t
  621.         MSG msg;* }0 b, i( I6 R( w: S
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
      V  G# G5 w- g" O
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));; e, v# L0 u6 Q1 b
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))0 W4 b- B. i+ e  }% p# X* f
  625.         {! g2 |/ @  u) T! a, S
  626.                 if(!GetMessage(&msg,NULL,0,0))
    9 K- M9 v* K" I9 j( ~+ Y. T+ N
  627.                 {( Z8 W1 {1 U. ~# T% [$ W
  628.                         return;
    + l! H: A5 a" y: R
  629.                 }
    - M! d/ u# [) i% f# M5 a& y
  630.                 TranslateMessage(&msg);( Q7 n/ |9 T$ ~' I. y) I  j
  631.                 DispatchMessage(&msg);. |$ M  H0 B* M4 G  k
  632.         }        3 B3 V+ l2 m& H+ Z5 j
  633. }0 Z2 h) ]9 \/ l0 Z1 \* m

  634. 5 F  V; _# D4 g. a, A9 K* T) Q
  635. BOOL bFirstChar=TRUE;+ z# k* x# Y" @3 p) J3 S  V

  636. + j$ V) @: i: O  n2 b3 C- N
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    6 G. _5 t, R) @' U9 F7 h! d: j
  638. {
    ' e% L& _' f2 L/ z5 `/ E6 q
  639.         // TODO: Add your specialized code here and/or call the base class
    ( v% T- Y; w% C8 Q* J6 L1 S3 q3 v
  640.   switch(dwProgramState)- L8 \2 M( X, a  T! U; R
  641.   {
    1 d  v8 J! r( `9 b( B
  642.   case AP_NOTHING:6 o9 w: C" f9 r
  643.     switch(dwStartUpSteps)1 ^! K. }2 v. g; A% R% y& L
  644.     {" J6 n" A9 D: u; J6 W2 ?% ]  V" D
  645.     case 1:
    # G( J) N9 t: b7 w2 q6 Q! J6 j5 D
  646.       {" {3 y7 R) ~9 {  m: P* P; K  k
  647.         int i;
    4 k8 N2 W1 L$ E( k% p5 O+ M
  648.         CDC *pCDC=dlg->GetDC();
    % a2 N7 o0 ~' V3 Z/ ~! _: B9 ]7 W
  649.         HDC hdcwnd=pCDC->m_hDC;" k9 _5 k- S% s0 R5 G1 X( n7 x+ Q+ q9 x
  650. //        Graphics graphics(hdcwnd);
    7 Z# r6 U7 J( ~0 m8 Q! f
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 u0 z% L: U( C4 m1 \
  652. //        INT iWidth=bitmap.GetWidth();
    ; A8 v" R% q! ]2 @  |( ]/ [4 N2 D
  653. //        INT iHeight=bitmap.GetHeight();. w: _# |4 B! O
  654. //        Color color,colorTemp;
    . F; m( r3 B# [( C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    5 u- g4 b0 E8 B) g" \9 G" @
  656. //        {0 g# b& C6 F* h- X/ e+ X5 _
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)9 |4 t; B3 t  k# x- V
  658. //          {
    8 c6 Q1 f1 N5 W1 c: {+ ^
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    4 ~4 P9 O& p) L
  660. //            colorTemp.SetValue(color.MakeARGB(
    " C( o: M$ P. A' A3 V/ W
  661. //              (BYTE)(255*iColumn/iWidth),
    0 f1 Y' i2 ~- A$ A. U; j- g
  662. //              color.GetRed(),
    5 M5 M- o5 W* s  ^$ i  p
  663. //              color.GetGreen(),% U7 p7 q+ N& l! M" M1 A/ x3 ]; \
  664. //              color.GetBlue()));* [8 B; _: w3 b. k3 o
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);( v6 S/ c! @/ |( I1 W% u( t. A
  666. //          }$ d( F+ M2 c; i9 _4 H
  667. //        }
    9 E' Z- P9 Z- p5 a8 V" p3 C
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);* c9 C6 E% A$ W7 m
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; Y6 i4 Z# A' u1 H
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    5 b0 `; S' C! r7 K
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% m' v3 o+ ?: l$ M( y
  672.         for(i=0;i<240;i+=8)0 P) c* ^, m0 Y# k
  673.         {
    ( R) r  ~: r0 p3 E# Z
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 [" F0 z% @# P
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : \5 V% @, N& M9 N8 W. M
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' h3 L+ T; r5 j: z! D4 y5 s
  677.           Sleep(33);/ q0 ^+ F( \8 h: C& t
  678.         }1 ]9 q/ u' Y8 x2 Z1 i
  679.         Sleep(1000);' |4 I( B1 Y  u2 w. J: z: G
  680.         for(i=240;i>0;i-=8)
    1 l: Y! a* k1 x
  681.         {2 X$ L5 o4 K/ Z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % }: C4 D! s. q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 g8 M+ e7 n0 K2 \; p" S! @& V
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 {9 v: `) I! ~1 e
  685.           Sleep(33);; m6 V8 g8 ?3 n7 L( _! Q& f
  686.         }3 R4 h# n1 j) x  h+ K- P) ]
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);( Y' c- q3 b0 x; |) I. s
  688.         dlg->ReleaseDC(pCDC);
    , m* V" z! K' N# \
  689.         DeleteDC(hdctar);1 C8 D8 m# g2 o. ~3 u, |
  690.         DeleteDC(hdcsrc);
    . Y! w9 `) C) g, Z. ?
  691.         DeleteDC(hdcorg);
    / d& b: E9 O+ [. _- G& Y2 m$ y
  692.       }1 j& B7 j2 J# t) W2 ^
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    8 o' ?' K: z8 O  L/ _( u8 i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");+ `/ {: o: S* a3 z3 A
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ( }9 J/ n( ?1 g' w; V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    & ^- ]4 X8 V2 ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* f3 E( P" o. Z' l6 N
  698.       if(!Dn.Connected())
      Z+ C; {: E( o% g' ]  P: Y
  699.       {
    ( b0 n' m: L. i3 z& F$ b% C' z
  700.         dwTotalFiles=1;" u/ x7 H$ I! p4 i" S
  701.         dwDownLoaded=0;
    ' ]/ u% s1 Q4 {6 C3 B1 s. p. i
  702.         bSilentStep=TRUE;
      o# |$ G9 T$ x  a9 Y
  703.         bCompressed=FALSE;
    ; _: o9 ]  ~- a) x8 k
  704.         strExtLocal.Empty();
    8 V& |2 l% i' H1 y
  705.         strFullName="readme.txt";# m) K) P) U" E6 M% p1 O9 R' M, a. R
  706.         dwProgramState=AP_CONNECT;
    3 y" a& K* ?( Q
  707.       }% Y# f' T( r$ |  Y4 e1 W7 }2 z) I
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();% L( ~% f! t5 s7 Y8 \
  709.       dwStartUpSteps=2;, O) `; E% _# F
  710.       break;
    " `  T2 ?3 [- q! B; ?$ a
  711.     case 2:6 T, Y. |( M5 ?! C, R  w
  712.       {  W0 n  o8 Z9 k5 \
  713.         int iEOF;9 l4 D, ~* c, I" a
  714.         FILE *fp;
    3 i3 r7 Q+ Z- O; ?$ _. r8 n
  715.         char szString[512];+ U5 F% |4 `1 N) m+ q3 a5 `) n
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    0 P, Q1 Z% n9 v" k  u* i  d+ @
  717.         if(fp)& j8 C/ ?/ P/ K0 F4 N
  718.         {
    ( S6 O# e6 [4 T! a# F$ ^9 s
  719.           do
    . l; m) q! P' ?8 @
  720.           {
    & z; U5 P7 T( `9 e, H% a5 s; ?" @
  721.             iEOF=fscanf(fp,"%s",szString);
    3 X8 r9 y! k, c" s$ R3 t
  722.             if(strlen(szString))
    + p7 e% T& B8 }# L; b. C
  723.             {7 G% h+ ~. B0 o$ F) y6 N! }
  724.               if(bFirstChar)
    ! {+ j$ Q3 M! \8 l! B
  725.               {
    8 H$ @3 n! ^$ b0 s3 j
  726.                 bFirstChar=FALSE;( C6 d* z+ g/ b) `: b& M2 O/ |
  727.                 bConnectIsBig5=FALSE;
      h$ Y2 w9 e( P" b9 R
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ) V/ ^; r" g7 y) K" A4 x
  729.               }, n$ i& ?: s  V; m, x
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    # B# r! N8 v% c) r: ]6 D
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    5 F9 e7 ?9 Z/ f& T- l- O
  732.               dlg->m_ListText.AddString(szString);! E5 v! j9 e% J0 X! d) ]9 a
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) _/ G' F3 u3 j) k
  734.               *szString=0;( ~$ Q  ]0 Z  J0 G
  735.             }
    # }' R& C- q% H/ S2 b
  736.           } while(iEOF!=EOF);: U8 h$ i7 a3 c4 x: s
  737.           fclose(fp);
    ' f, e' [/ `1 A! L, Y
  738.           unlink(".\\DownLoad\\readme.txt");
    + b) _6 Z  s, Q$ q3 h. [
  739.           dwStartUpSteps=3;- p! c; l; e2 V( v- M
  740.         }, h# N' s' ^* D  Z8 ?- i
  741.       }' o: `0 d, s# t! @
  742.       break;, ]- g0 x5 T) `, m9 c- f8 @$ y
  743.     case 3:; M! l4 K( h8 _) z" ^
  744.       if(!Dn.Connected())$ A. n; x" E- e- ~
  745.       {
    # V/ {  V9 w5 L8 ^1 K% h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    6 C; T0 ]! }+ r2 Q
  747.         dwTotalFiles=1;# t- P  A% N  M8 f7 ^
  748.         dwDownLoaded=0;# V# o  G4 n! l7 ?2 c' ~
  749.         bSilentStep=TRUE;
    + M  I% C8 T( W; x
  750.         bCompressed=FALSE;
    . @# ~( s# M4 U  V8 [" J
  751.         strExtLocal.Empty();
    - h# J7 o" K9 H5 w1 i" n
  752.         strFullName="checkversion.txt";" j  j2 E: g$ f
  753.         dwProgramState=AP_CONNECT;
    ! k! E" b* X* ~4 K! g" Q! z* @4 y
  754.       }+ d7 W. i% N5 |! z8 p) S! n
  755.       dwStartUpSteps=4;
    # e5 C! w  A" o' R2 u1 Y
  756.       break;: Y: f* \; v. @6 D4 z* N  [) A
  757.     case 4:1 E4 Q/ D: i5 Y+ ~' D
  758.       {
    ) ^% _4 F& B' i; d# i& c0 G
  759.         FILE *fp;- u/ w5 A! m, l- ^- C0 g9 W
  760.         char szString1[128];
    0 l6 a, ~6 M7 g7 u2 s3 |
  761.         char szString2[128];
    1 d& c! a' w, {4 _, i# L
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 `: \* `: y& r0 z/ |
  763.         if(fp)" o0 e( R( b5 B/ K2 P% o" d
  764.         {6 I' V% R2 _8 v3 @8 b) K
  765.           fscanf(fp,"%s",szString1);
    3 \0 Y% P8 e. j' \  x0 g5 E! K. w' E
  766.           fclose(fp);, x9 f" u4 @! Y1 ^
  767.           fCheckVersion=atof(szString1);1 R; [$ |" H5 g1 G6 @: A
  768.           fp=fopen(".\\checkversion.dat","r");
    ; W2 G# o4 B! x1 y
  769.           if(fp)
    ' h& u3 K5 f* |5 r
  770.           {+ ~: s7 d1 g( V6 l8 G
  771.             fscanf(fp,"%s",szString2);# B' h& ]! A: P6 V  S
  772.             fclose(fp);/ k: V; O6 P. M8 r6 l% j
  773.             if(atof(szString1)!=atof(szString2))
    $ B' |8 C" t  ?
  774.             {
    + _$ ^+ Q5 _6 u9 E3 ]# r
  775.               if(!Dn.Connected())% ?. A; ?5 s, y3 H/ ~* S; d
  776.               {
    1 ~1 x( ^6 C( e$ ~) |
  777.                 bFirstUpdate=TRUE;- g6 m3 u6 {9 {8 C0 i
  778.                 dwTotalFiles=1;
    ' {& g2 x  ]5 t: ~8 ]
  779.                 dwDownLoaded=0;
    : R1 ~- m0 K3 e" w6 s' [! D8 a. t0 ^
  780.                 bSilentStep=FALSE;8 r. ~) R, b3 m7 w" P
  781.                 bCompressed=TRUE;
    , c# Z* N6 y! {  V" e5 F0 p) t( C
  782.                 strExtLocal=".\\DownLoad\";( T1 X1 p0 z0 A1 v
  783.                 strFullName="update.txt";9 V3 N7 ~+ ^. }; M6 w, o+ B% p
  784.                 dwProgramState=AP_CONNECT;
    - _) m2 R4 a5 ^1 {; S
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' N" ?/ x& i: ?- P& e9 h
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) i  M! t( k) F2 w5 j4 X
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) c2 q# w$ A9 f6 m4 N  Z
  788. 1 j  K! z' |' ^0 k0 B" N
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" }* u3 r* ?4 H2 w7 T
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    - C8 ^4 c7 }* s' n
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)* b1 ^) q0 g% ?# Q5 N) e
  792.                 {  {% d+ C9 y! m+ ~! h& q4 Y/ p/ C
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    , H6 F: H! J1 ]6 H, {8 o% i3 l
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");, f& H* o9 h4 N8 s# d
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    4 ~9 ^. H7 L0 n* K$ A+ m
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 r6 M! W2 b/ S8 r$ @% I  z
  797. . V0 R. `% X( h; p! ?/ l! I
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 ?; j/ C: d' S2 r' P9 b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& X7 Y" h, S2 Q$ S# S
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");; k. w1 D4 ?8 D" n
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* f+ s- ~$ q' g! e
  802.                 }
    ' j6 {$ F) o4 P
  803.                 dwStartUpSteps=5;" Y) @2 B% z/ m+ y
  804.               }! f1 G* F" d2 _( ]
  805.             }
    ' P9 a6 Z+ K% l& Y( v
  806.             else
    3 b/ i6 t. q2 [# C$ l
  807.             {4 a: Z8 ~2 |( ~: k7 J
  808.               unlink(".\\DownLoad\\checkversion.txt");% l7 b1 y+ v! `! R* h9 i# Z2 D2 L
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");. Y3 e+ _. h6 D2 o6 r- C
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& L- M: Q! J% m7 ?8 M0 u
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ( [! r" I" w6 _. K
  812. + }. n. t8 C1 J
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . L9 ]" l7 j5 N2 e
  814.               dwStartUpSteps=99;
    : ]; T5 j4 R/ b3 V5 W
  815.               bFinishUpdated=TRUE;/ l% l0 T+ O$ `) j: U
  816.               bCanUpdate=TRUE;; |0 z& W0 N- q2 h! X
  817.             }+ f) w! D8 S9 \! Z
  818.           }% Z, {! V" V5 I: O3 |; q
  819.           else+ e' ~0 I/ M( X3 L) W5 S
  820.           {
    6 f! l# C* y# _- D# o3 Y& e* @1 v+ x
  821.             if(!Dn.Connected())
    5 w. X* [# h8 s- o, V
  822.             {
    - e: i) S1 T( f. J
  823.               bFirstUpdate=TRUE;
    ( v# Y7 Z* t# y) ]
  824.               dwTotalFiles=1;
    + s: v9 ^9 w  [$ l* V
  825.               dwDownLoaded=0;* F5 ?1 s. y' i$ q) d
  826.               bSilentStep=FALSE;
    $ U* p  m) V) N) X
  827.               bCompressed=TRUE;" W! q. E# x/ e$ S; l
  828.               strExtLocal=".\\DownLoad\";
    ( M% O" p) d- i
  829.               strFullName="update.txt";6 G8 L! m4 M& y  ?
  830.               dwProgramState=AP_CONNECT;) q) d- P4 L$ [& D" F+ Q  l. }
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & M- S: j" p  ^! j# K
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    $ Z3 z" ~# H% X. P* E' U- k! P: ]% W
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");) s  Y" b8 {" a1 v) S1 V) j
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % D- @2 A/ i6 j0 n# ]
  835.               unlink(".\\DownLoad\\checkversion.txt");
    6 `0 j7 F, ~/ X) ^3 s) G
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
      t$ G( {0 j2 l2 B
  837.               {
    ) B: E. C; r' d6 ?+ c
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");8 s" e; X' @5 s- u" N. a
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # B4 E# K. O) m0 C3 i0 o# I6 e
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ' T' U" F. j& W2 G9 ~4 k1 j
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + {7 x" ^9 l' q
  842.                 - V+ w! W$ F4 Q' t' D
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + J; q  z( ]: O- e5 Q$ s
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) O- j! S: R# R0 F
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");* p( d( }0 R( M  {
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ Q+ q# R, a" i( G+ w" `! e
  847.               }
    / m1 }$ T" ?9 H& u6 e& j
  848.               dwStartUpSteps=5;
    * m3 \- \; p4 N) g1 x
  849.             }$ c+ r4 G3 ^) i+ W$ a
  850.           }$ j0 \: R- m/ ~7 {9 t9 D- H+ f
  851.         }; D7 t# Q2 ~7 S$ _/ _5 p
  852.         else$ t6 J/ e; O" G7 W% g! m" V( _- s. v
  853.         {
    * T0 X5 Z2 K8 d4 v2 ~+ v
  854.           dwStartUpSteps=3;. f% v+ ]: \' E: W
  855.         }9 y0 E: W! _3 b2 p4 j7 L8 R* H
  856.       }
    8 S- ?# ]1 C  d$ s$ _# A% M' f& b
  857.       break;/ i! J1 V7 u+ Z2 b/ f
  858.     case 5:: ^" p  d' v5 v# o
  859.       {6 q4 _' |( s# m' [0 M
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); g* c  ]$ p/ G. p/ b) t6 e
  861.         {
    7 J* C0 F4 m- F- R, Q7 h" E
  862.           int opt_overwrite=1;
    9 E+ E/ w4 V" V; n: V0 c
  863.           int opt_do_extract_withoutpath=0;' A" H9 q- s3 K* @5 b
  864.           unzFile uf=NULL;4 D8 M% A: L9 A* ^& h( y) `1 P
  865. # N8 x: ?7 Q6 h3 o
  866.           uf=unzOpen("Wsa.zip");$ {8 j# |9 N# O/ O
  867.           if(uf)% [, z6 W) x; D
  868.           {
    * X& e8 \9 ]& K7 B! [
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);2 `. ^/ Q/ v/ r) A8 i+ I' M/ |+ z
  870.             unzClose(uf);
    " p2 _/ \. {) k# y* m8 d3 y
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");" c! a! \6 P6 h; [6 w
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");% J! _) P5 d0 X0 @
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");' ?3 |$ j% S4 R4 f+ \* x3 j/ t
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 z7 ?8 H* p* W6 F3 Q
  875.           }9 M2 j8 |# B3 y7 {+ g/ D3 v
  876.           DeleteFile("Wsa.zip" );
    ) y4 H1 ?+ e! Y9 \% i
  877.         }" c1 M* C& u$ i" e! o5 g

  878. 8 ]9 q3 K! r% C1 Q7 J) v2 y
  879.         if(CheckLocalVersion())) i  M& |. e" G+ ^
  880.         {
    3 h7 q& d& q- B+ G$ O' @) G  r
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");9 r# C; O+ y& d2 t. d, M& q
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");/ t; r3 N( T( d; \2 s) \3 G* j
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ) b8 x; n- V) z3 ^
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * a' Q2 a" b/ M' l! h
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    , p/ T" b3 H" l  t- _3 g7 |
  886.           dwStartUpSteps=99;
    ! f+ Q% b0 \7 b) o; B% k  F
  887.         }
    & g: E' U- B2 J8 v+ l
  888.         else
    % _5 ]) ~8 n1 J' J- l7 B
  889.         {
    ( G8 o7 s4 h7 Y  L' G$ x+ `( _
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: k2 c$ G& \! X' e0 F; |
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) ]6 v+ z; S" y
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 k, ]3 U* r4 Z0 E

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

8 j2 w2 r) X9 `$ U9 a1 E
6 _' h8 L  d/ V' B5 T5 p8 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, 2026-2-3 01:23

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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