CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
! Q. C- c2 b) e7 e. `
  1. / RevApp.cpp : Defines the class behaviors for the application." u! {4 H6 ~7 u6 i" T9 L# {
  2. //$ b) J+ l" |3 c, P) E0 C
  3. 0 ~7 X( W8 a1 U, S
  4. #include "stdafx.h"" n$ \$ I, G5 R
  5. , W2 u% V% k) h7 _5 G
  6. //#define UNICODE
    " ]9 u  r2 H! b5 b0 s
  7. //#include <gdiplus.h>: f5 l8 r9 p6 k( B, r1 o  ]: I% J
  8. //using namespace Gdiplus;
    7 b9 U/ [* o8 j; U

  9. ( E, ?; ]2 e& `8 w1 u1 A5 c4 v3 n
  10. #include "RevApp.h"2 x  H# n6 K) K, b2 I
  11. #include "RevAppDlg.h". s% k8 G7 [' R( t# J8 }- L4 e! n! n

  12. * l7 O. y8 q& H5 {' ?
  13. #pragma warning(disable:4786)! V2 y  @0 S" s9 E. y3 S& e
  14. #include <map>2 z' ~, y3 g8 ], J$ [
  15. #include <list>
    5 w; F+ M0 k" D) S8 I* s
  16. #include <direct.h>9 @* }4 l' V' }1 O6 C

  17. ) h; Y) d' X  M, U  p& N+ [- y8 B# y
  18. #ifdef _DEBUG
    1 d8 T! n- u2 i" A/ _/ i3 U
  19. #define new DEBUG_NEW
    ; F8 |! E( P' j2 C+ [$ [0 }+ O2 W8 y
  20. #undef THIS_FILE
    5 h! \2 D, `; \  z) L9 [9 c9 R
  21. static char THIS_FILE[] = __FILE__;
    8 v8 S( [2 S: C& }
  22. #endif
    ' _( Y; H. U- M8 b
  23. #include "SkinResDef.h"
    9 y& x8 k0 n: v# R
  24. #include "ChangeBG.h"
    ( r5 ]8 l5 [* s  A- A
  25. #include "AFXINET.H". |2 O9 z, s/ u
  26. ; _( `7 v; k! V4 [1 R
  27. #define TRADITIONAL_CHINESE 00 S0 B. k) y6 z; ?; ]: k
  28. #define SIMPLIFY_CHINESE 1
    + x/ U1 r6 |8 ?
  29. #define ENGLISH 20 Y# r( C- k, l/ O+ a8 B* L
  30. int m_iLanguage = ENGLISH;
    $ a4 W" ~: o% v. E3 g4 O
  31. /////////////////////////////////////////////////////////////////////////////2 R# c! l0 l( \( D4 M* @, ~, w  u) ~
  32. // CRevAppApp
    ; f6 }: X8 k6 D$ z( w4 ?

  33. * V/ u) e: ^* ?
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    , }* W: x' S0 }2 X( ?( q9 _* X
  35.         //{{AFX_MSG_MAP(CRevAppApp)
      a# ^: c, k# k
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    + |# ?% m7 K. `6 o  Y0 e- w# V5 m7 P
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    # s2 E* ]- f+ `) s0 H9 h
  38.         //}}AFX_MSG
    7 j' a  o0 _- h: U
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)/ x( C- S8 ]( R! F9 i
  40. END_MESSAGE_MAP()
    2 y/ e" H6 B8 m0 Y
  41. 6 A, Z$ X. J' I( G6 i; C* Y+ Y
  42. /////////////////////////////////////////////////////////////////////////////
    + G) A0 P. R( p8 l7 D/ D9 ^
  43. // CRevAppApp construction
    # @) F- G- }4 O$ R! T# B, I
  44. / n3 a1 x! N+ D# N
  45. CRevAppApp::CRevAppApp()
    0 E7 P% K' a8 W0 P8 d' P4 i2 T
  46. {
    8 D: z# ^( X" }1 B7 F
  47.         // TODO: add construction code here,$ [5 \+ x( F+ ~8 @7 G$ l
  48.         // Place all significant initialization in InitInstance
    ) P8 G7 n& w1 K8 p- O2 o
  49.   bDisplayIsBig5=FALSE;
    6 ~( h  h. }* J& w" v
  50.   bRestartUpdater=FALSE;- y4 i( A' j4 H5 Q8 g
  51.   bFinishUpdated=FALSE;
    # E: ^& O* K9 D: q3 J' w2 h
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;2 d+ Y+ s8 O$ g; ^2 }
  53.   InitChangeDataBig52GBKS();, X. B( z4 r4 n" r+ B, {0 Y% J: T
  54.   InitChangeDataGBKS2Big5();
    8 O0 R, T7 L- }/ z3 z% O
  55.         //
    2 S! I0 y4 w6 \7 q$ ~
  56.         bClickRunExe = FALSE;2 K) X( c) {: C. b: @1 i
  57.         //
    5 s3 I3 B8 U8 v% A5 _
  58. }
    8 M. M' T3 o" R/ ]  m

  59. ( @4 V9 U1 _5 X% [, L0 s& e
  60. CRevAppApp::~CRevAppApp()
    5 n: c/ w& w) L6 g
  61. {
    + M* Z$ s5 y; w
  62.         // TODO: add construction code here,
    , E, A5 s( v& {$ m! s5 k. t
  63.         // Place all significant initialization in InitInstance
    5 b, z5 O9 c  G+ q5 Q6 a1 w
  64.   EndChangeData();
    7 N+ E/ p" p* m& V
  65. }
    5 A# g; M; S+ p' U( r! a* \' W

  66. 2 O) }- P5 z' k1 {# U* S! a" r
  67. /////////////////////////////////////////////////////////////////////////////" E. O- B3 R4 I) F, N# M
  68. // The one and only CRevAppApp object
    5 f3 ?. {1 }) U2 [
  69. 4 B1 o0 a' W  E) S
  70. CRevAppApp theApp;
    ! H0 O5 U1 Q0 F, h; x
  71.   Z6 [2 X% p( N) M, m
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ; t7 x; G" x5 e% ?. u" L- O
  73. {
    ! p0 Z! {. g- V' q  p( K4 S
  74.   int iEOF=0;  U3 i& p1 `; e4 u
  75.   char szTempName[MAX_PATH];
    8 r2 h& F5 s6 l9 h) b. O5 a
  76.   *szFileName=0;/ O4 L: v1 a# ?! G; E% F! G
  77.   iEOF=fscanf(fp,"%s",szTempName);# Z  j/ `, Z/ _+ p
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& h7 m8 a: e! K$ L) y, Z. C  ?
  79.   {. o. \  g/ f5 h- M9 \
  80.     strcpy(szFileName,&szTempName[1]);( ]. H6 Q$ x; [  I7 q& G
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)9 d! k# w5 Y6 z( V3 K' L
  82.     {
      Y3 N5 W  r% _! w" L' G. o. E
  83.       iEOF=fscanf(fp,"%s",szTempName);
    9 W1 d6 }; H  M! ?2 |) B; C9 K
  84.       strcat(szFileName," ");# \$ j" i% L6 x" s7 J
  85.       strcat(szFileName,szTempName);  G; K: ^4 b8 s/ l* r  H, \
  86.     }
    , n; k! ^# W5 z7 O+ C
  87.     if(strlen(szFileName)>=1)
    + j* @# A0 z' s, |& A* I
  88.     {
    4 G) t  ^# B4 a$ j
  89.       szFileName[strlen(szFileName)-1]=0;
    2 I0 |# q- t0 S4 f2 k
  90.     }
    4 Z; K+ |, _. K7 Y  f
  91.   }/ o, H9 K' j  c" d5 \6 H
  92.   return szFileName;# k5 m8 p) f+ K7 V" i) f6 T
  93. }  G  a( U% b9 Y2 Y
  94. ) B" W3 ]) l* p/ |
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    . [' c, y8 q3 V, ?" ?/ [) m; ^+ E
  96. {0 S, k. z& \# G' w
  97.   FILE *fp;5 ]4 E4 _4 v  w; l: d& M
  98.   char *key=NULL;
    0 U8 m& G$ \1 p$ r6 o0 n' D' h8 Q( X
  99.   char version[MAX_PATH];9 U- d% }$ J" b: ?7 G9 x
  100.   LPUPDATEFILE file,olds;& F2 }9 R: p: T3 |1 N3 U4 i
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 M8 }# I$ G7 Q, F" W
  102. ' ~( k( x2 g! G" ^4 K
  103.   UpdateList.clear();
    1 ^6 W+ z% x7 Y& Z( h
  104.   UpdateFile.clear();) T6 w; R  C. u" D( s
  105.   if(GetFileAttributes(filename)==-1) return false;
    ( q1 Y1 z) ^# c( |
  106.   if(!(fp=fopen(filename,"r"))) return false;
    2 ^7 O4 s" j/ Z* Z) p, D
  107.   fscanf(fp,"%s",version);
    * w, f9 p* X' @. l3 v7 ]4 Z9 N
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    4 b' R' r- U  A3 X. C( E, u1 q' S
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ( B# B/ N9 E) l
  110.   {
    ! l& b2 \  \/ J$ G
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 j  ]2 n# q' L' S5 p& e6 [
  112.     fscanf(fp,"%s",file->path);6 c3 n% F) y  \' R$ P4 C0 B$ o
  113.     ReadFileNames(fp,file->file);( Q- m0 v  i8 q/ O; Z( V9 T
  114.     strcpy(file->full,".");3 U) E1 P  L# D0 Q7 i
  115.     strcat(file->full,file->path);
    1 P* j: m% q$ k0 f
  116.     strcat(file->full,file->file);
    , ?1 a7 l8 e6 r% p3 i4 [# z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    & B  V- Z' M) q' v
  118.     {
    $ Y  t+ e% D0 E+ R( V
  119.       file->vers=(float)atof(version);& V$ L, V- @4 S3 x+ e' @: `1 c
  120.       UpdateList.push_back(file->full);
    ! O6 S" i+ x' ?1 m5 D
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ! i+ W( j1 ?( {; a
  122.     }0 U2 A! I, ?& r3 F7 \
  123.     else! x' E8 z' I3 b8 L: l! Q
  124.     {$ p& R2 V; N1 l
  125.       olds=(*p).second;# ]" w, y' p! x7 o' y
  126.       if(olds->vers<(float)atof(version))
    . _- T2 d" A0 }5 Z. t1 `! a! C
  127.       {
    & @% w* ]2 l0 ?4 x$ k7 D
  128.         olds->vers=(float)atof(version);
    + W( i& ]- P! {# `# `, }  h5 f
  129.       }
    , _9 d1 q4 V) R0 j) z$ @0 L  J; P
  130.       free(file);
    6 `+ U- ~. G! Y
  131.     }
    # u4 R: t/ e) M( @
  132.   }
    7 s* l' s  w. u2 ^
  133.   fclose(fp);
    9 F9 x  |. L4 N; Q0 S; a( c
  134.   return true;6 [4 x: S: T' z; G) G
  135. }
    1 _* X. s* T/ h! A! f8 @

  136.   p# n. F# r$ M( m! v! N
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    5 c! _& W/ W) K, {! ^
  138. {
    0 Z1 o2 Q+ l8 n' e4 ~
  139.   TCHAR  szFull[MAX_PATH];6 F" K( Z0 M% f: f& n1 @! C
  140.   TCHAR *token,*inter;' Z+ ^0 k, N2 G  {4 h& m( g
  141.   *szPath=0;% Y. k  u4 R" e; S+ T- u
  142.   strcpy(szFull,szFullPath);
    : ]/ Q& e; a% M" O) v& ~
  143.   token=strtok(szFull,"\\/");
    6 F5 |: l3 |6 t7 C' l, l& d
  144.   inter=token;
    * L+ b+ N$ M9 N5 t% Y
  145.   while(token=strtok(NULL,"\\/"))
    ' d. \2 z0 ~+ b+ m6 D  w$ O
  146.   {
    8 \% w1 X; T* D2 z
  147.     strcat(szPath,inter);1 q1 a7 M. G' l5 C: J& ^
  148.     strcat(szPath,"\");9 I# x* v* E+ B6 C2 z
  149.     inter=token;8 s  o& ^) a* s# }  {7 h6 k, ^
  150.   }5 p) T, N/ N6 R( G. P
  151.   return strlen(szPath);6 J* R' C- f' @+ i8 ]- q' g& a/ j
  152. }
      O2 r. j0 `0 g
  153. - b. A' w( T+ h0 m3 A1 a
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)- q1 Z7 }/ P) W" J! e1 D/ r9 F
  155. {& V( R( D( [! B' D+ i$ L. Y! `
  156.   DWORD attrib=GetFileAttributes(Target);
    " ]5 t# g8 Q2 D9 C, m6 r% U6 z
  157.   if(attrib!=-1). M! H, o. k& E& {  D0 x8 Y' x+ `
  158.   {
    ! t! Y+ q1 h! [2 a3 h8 O
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ Y& A2 k8 H. R+ g
  160.     {
      {, N8 R# z# G6 `/ |( y, w& Y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ! f+ `, l6 M0 C* ^
  162.       SetFileAttributes(Target,attrib);' E1 w, i8 n* u: i% v% C6 w
  163.     }
    # ~% A, `# }2 O8 @$ t  [
  164.   }2 r3 m4 q/ l. L& ?3 G
  165.   CopyFile(Source,Target,Erase);
    : j. ^- d+ f* [+ r  J+ ^3 ^
  166. }
    # P% g' d; [/ r( @# u/ l

  167. : ~* o; [  g* g
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . H7 c! j7 ^; g7 ?$ S
  169. {6 v5 W0 {! L& j  t+ [
  170.      FILE *fp;
    8 X1 \/ V7 n+ L& S4 _# p- a
  171.      char  szBuffer[8192];
    7 k) j( S* g* P+ w+ F
  172.   va_list  argptr;$ B7 x4 N# N0 `7 q

  173. ( P" n: {4 O5 z) G; c
  174.         va_start(argptr,message);. P8 v& t8 Z6 O7 y. d, o
  175.         vsprintf(szBuffer,message,argptr);
    % h* _$ `& [. S" E
  176.         va_end(argptr);9 s5 `% l: a1 f1 ?  G" Y
  177.   fp=fopen(FileName,"a");
    ; H8 U/ r9 W4 u
  178.   if(fp)
    ( N0 k. N- W! n4 Q% G2 w3 O
  179.   {3 r' Z8 n8 a. q6 A
  180.     fprintf(fp,szBuffer);# q9 G1 v  Q+ M/ F
  181.     fclose(fp);& g9 k: `5 X% ]2 G
  182.           _flushall();
    : z7 \( f4 _* m
  183.   }
    ; \: f5 m- V1 B' H0 q0 `
  184. }
    ' y2 ^6 Y0 m( i; o* X
  185. % R8 z- Q6 ~$ Y% W1 m2 F! b# u! t2 s
  186. BOOL CRevAppApp::Fclearf(char *FileName)' e+ }1 ]$ R; A, }; G* u
  187. {
    ' F  o* n' q) W! ~- i
  188.      FILE *fp;& k! x3 U: ^- P" R, {1 S% u5 l  P* D
  189.     DWORD  attrib;! I; `  U- b9 P$ h( h
  190.   attrib=GetFileAttributes(FileName);
    6 G, R" x& I5 F# W& Q7 w
  191.   if(attrib!=-1)
    ; h( q0 @, ?3 a. l
  192.   {
    & Y9 r: F) E$ c# A% r( n: ~! {
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);$ O1 m3 J: H3 O6 N0 G
  194.     if(!SetFileAttributes(FileName,attrib))
    & p% e: Y! i2 I3 G2 [
  195.     {) H: w8 X$ A% M  F
  196.       return FALSE;7 D( H$ A1 {; e: T6 D) i' z# h2 e% \
  197.     }
    - v) y/ d8 t4 z1 m% e  \% Z
  198.   }- W5 T& E/ t/ @
  199.   fp=fopen(FileName,"wb");
    + m2 \' G( h" j3 G
  200.   if(fp)
    ) V/ B& e" p4 r# h# M
  201.   {
    : P( M+ O, O5 M& M2 q1 f! J
  202.     fclose(fp);: K* N) _, q* u
  203.   }
    ) j7 K9 y: p$ Z# k: H
  204.   return TRUE;
    8 d2 b# y! g" ~) D6 ]" N
  205. }2 Y/ L! T; z# b7 {& Z% |

  206. " ^# Z$ @3 J/ A* O  C- @- x
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    6 v8 _; Y, u* o! P6 [
  208. {
    # _& t+ U5 M( L0 y. d
  209.   char filename[MAX_PATH];/ _6 p% r; f) g' g. s
  210.   LPUPDATEFILE file,olds;
    , u5 P% s* y5 \- ]* [2 K
  211.   std::map<int,CString>::iterator i;
    ( K) n' ~9 W  l& g) y$ ]0 g
  212.   std::map<CString,LPUPDATEFILE>::iterator p;9 i# i2 F* L3 h" K- e0 J
  213.   std::list<CString>::iterator l;+ O/ U0 J! h2 u

  214. 5 M$ d( x8 n; X, d7 S) K$ ?+ N+ X
  215.   if(bFirstUpdate)# _0 \9 Y1 v* N# ~# |0 R1 ?# J
  216.   {
    ! W5 ~% A( `$ q& I% S& K  @0 K  i* E
  217.     dwCurrFile=0;# w# w' G2 i8 ^1 c
  218.     bFirstUpdate=FALSE;/ f# |' V8 u7 l' k6 j0 \3 U
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* O' g/ ?# C& L0 v
  220.     {( Y% a. ]# p7 P. v; H) h
  221.       dwTotalFiles=UpdateLocal.size();
    9 n6 T* [. q  t
  222.       dwDownLoaded=0;& p3 [: [% i% [3 j/ E- Y6 ~
  223.       bSilentStep=FALSE;: M$ P" k* }( d$ t- H, d
  224.       bCompressed=TRUE;+ y8 _6 c* W+ h% a: d- g
  225.       strExtLocal.Empty();
    $ j1 ^8 {$ d: g, e: q
  226.       strFullName=(*i).second;
    " n5 l( s! \' r0 u7 u- @, F
  227.       dwProgramState=AP_CONNECT;" X$ _+ C- K. F  s+ A
  228.       return TRUE;5 V2 C" @* I: ^5 @* a
  229.     }
    + F/ E! P( H& d. d3 B
  230.   }9 T. n/ U+ ]0 P1 O. \- D
  231.   else if(bRestartUpdater==FALSE)
    - f$ `. i' E7 S3 J$ ~
  232.   {2 w2 R% q  y+ f6 f! o
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    " V/ s/ p" Y2 }) j$ X5 _5 @9 M
  234.     {
    ! R% h$ j% K* M3 B7 Z& E8 t: Z
  235.       file=(*p).second;
    6 v/ `9 D+ a$ m% H6 F5 t* `4 l
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())% I7 \; _; x( B7 w9 S! B: t
  237.       {
    * G# v9 _0 T' x/ T" L0 E- F
  238.         olds=(*p).second;
    1 k  z% j/ u8 Y* h  T
  239.         olds->vers=file->vers;; x3 Z  ^; Z' w: v( M
  240.       }
    ' m% j3 S" p2 ]0 J+ p- Y& ?" q
  241.       else: ^+ V" A* H% v
  242.       {% T; r$ @( g$ D
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / S- m$ }7 j6 t. x( a. E6 O$ t& L' P
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ; P& E: `& G% F# p) ~
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    . X2 S; V( q& ^
  246.       }
    6 d# ?. e! Q5 Y. p, o, C1 i" t
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    0 h8 X: \- [6 i, j
  248.       sprintf(filename,"(%s)",file->file);
    " [$ Z6 c5 Y  J0 Z1 ~
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 \+ ?8 V, O+ T6 Q7 D
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    3 ~8 _; ]9 b& r& k6 V! i
  251.     }1 ?2 |4 h& r8 w; G9 z# U% G. J, M
  252.     dwCurrFile++;
    ) N3 `; o: ?0 H' A; H! k0 p
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), c- h) t% r9 }/ K: A$ I
  254.     {& Z& P; b! Q! m# Z" N- g
  255.       bSilentStep=FALSE;& M, i1 ~5 n2 y. G# U5 Q! P
  256.       bCompressed=TRUE;
      U: ]1 `5 q  W
  257.       strExtLocal.Empty();
    % ], x8 u) U  _/ S! m1 u$ ^
  258.       strFullName=(*i).second;
    3 u/ f, F# C; {8 [% O
  259.       dwProgramState=AP_CONNECT;
    9 Z" d  b1 v1 `0 g: R9 U7 H* [
  260.       return TRUE;5 @1 M  d5 T9 L5 c  t  X
  261.     }4 ]0 u) M" m) ?& W! X- G
  262.     if(!bRestartUpdater)
    ' Z( h, L# P8 ]6 ]- K4 V# x5 f
  263.     {8 t+ }) V1 ?) L" Q, ^' {3 q5 \
  264.       int iCurrSize,iFileSize;6 o: }$ e) P8 y; h5 ]) _
  265.       iCurrSize=0;! x+ `2 u* b8 d7 ^/ |' i( r& p
  266.       iFileSize=UpdateList2.size();
    / c1 B' b9 b2 q- m8 f
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");1 {1 V& \' ?- i
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");+ a4 h0 y7 v) W$ H0 @1 Y& G
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( }- z( B7 |: P* }( v& V
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 [) [3 o- c9 ?  {; a
  271.       Fclearf(".\\update.dat");
    ( g( \9 [) q5 a! {% p& J- e
  272.       Fprintf(".\\update.dat","Bloodyf\n");- D  P/ m. O  T/ D
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)7 U( i, h! V% N) H
  274.       {
    ( T" Z0 R. j: }2 b$ t
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())9 m% E/ Z2 R+ F4 n
  276.         {, J/ @9 o# i2 w( Q! J, S8 k
  277.           file=(*p).second;
    3 C7 |9 @8 h& E: {* K6 P/ M) O
  278.           sprintf(filename,"(%s)",file->file);" L. x' G$ K! \! f3 J/ w9 t* v
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% \8 Q8 h) K8 P( n% G+ D
  280.           iCurrSize++;
    $ G3 q9 G  M$ t3 e# O1 t8 ]
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));/ e0 o& F+ P) M5 k+ l
  282.         }
    6 I6 [9 O5 ~  X. N) j: ~8 L# y
  283.       }
    4 v: `" k) a' v- o1 W' i
  284.       unlink(".\\update.txt");
    - \# `# U! P& p# @( e
  285.       unlink(".\\update.tmp");) z! k; Z2 X; @, e1 O4 a  F) s
  286.       Fclearf(".\\checkversion.dat");0 C8 u: w9 O, G9 B7 |% G5 S3 f6 O
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);  U8 ~7 i% r. A9 V7 I
  288.       if(UpdateLocal.size())
    9 X2 g3 g8 s# |+ D
  289.       {1 Y; C( }2 Z+ y7 B7 x( s& h/ }
  290.         UpdateLocal.clear();" a7 ]5 i( w. I; `
  291.       }0 k2 A8 j5 |- j: d5 ]
  292.       if(UpdateFile3.size())3 k$ I) R- B3 T& O8 R; k9 M
  293.       {
      [1 m& k& T. F0 ]
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    $ C4 _( W0 a6 L- U7 E3 D0 i
  295.         {! @. k: i1 i) c8 i5 u
  296.           file=(*p).second;
    4 L: O: T9 U+ i& d8 h
  297.           free(file);1 B( E& f& c% g) B5 t
  298.         }" t$ s: h' H* K, V) J
  299.         UpdateFile3.clear();
    : k: V! T" |# e0 Z  b0 G
  300.         UpdateList3.clear();
    4 H$ l# n: T, b5 V
  301.       }
    * Y2 H- a" O4 D9 [$ M  N# r
  302.       if(UpdateFile2.size())
    / X" ~" ^& ^) @4 @
  303.       {
    7 u1 y; L) X1 d3 M* a. p* o& W& f
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* l. G8 x4 h: C
  305.         {6 ?( w9 T% Q) ~* M
  306.           file=(*p).second;
    0 Q$ t: m; G8 ^* V
  307.           free(file);: C% H" Z* K( Q. x4 Z5 l
  308.         }
    4 K" k1 z* l3 u1 L1 \1 j
  309.         UpdateFile2.clear();& k* R# e8 g, m5 W, X1 C  D$ A
  310.         UpdateList2.clear();; I+ Z) g4 x/ N' ]) T
  311.       }
    + d0 N/ e1 ]+ r+ A8 [
  312.       if(UpdateFile1.size())* ^/ o* p; ^/ b% h- I
  313.       {- M, y! m& n7 o1 ^" h" W3 Z+ p- P
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( Q; N. \6 h$ n  f0 l2 @
  315.         {/ t$ h' H- k/ E' K( b# V* ^7 }
  316.           file=(*p).second;
    ; w- F1 V2 ^& b; g$ L" D
  317.           free(file);
    2 _# G# g' z1 p* X1 P
  318.         }- \' i/ {' l  h+ N6 ]/ F
  319.         UpdateFile1.clear();
    & k* ]4 v$ F, |- d5 v6 h. r  e
  320.         UpdateList1.clear();
    . {( |/ X5 {8 z% N% ~/ ~
  321.       }! d7 Q/ `) d$ s' H( v! g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    , a; l( ^/ k: u/ _
  323.     }4 m2 }+ g, n- s
  324.   }+ ?4 z7 m! h/ b7 w! b$ b
  325.   return FALSE;) N: }( N. C8 Z8 e5 U
  326. }1 U0 c: B- r% e1 H

  327. : `5 R! b; a/ b, U4 V
  328. void CRevAppApp::ClearAll(void)* c6 t3 j4 f* \  f: L
  329. {
    1 U0 V% ~& x4 O
  330.   LPUPDATEFILE file;* ^  V3 L7 Y+ V4 x2 `
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
      y* D" R0 ]# ^* n1 `3 a

  332. ; e7 p5 j2 V2 J7 M7 V) i( M8 C
  333.   if(UpdateLocal.size())
    ! m( n/ p6 g0 F/ G: L3 U
  334.   {
    7 _4 N+ l6 v8 y. A. ]* ~
  335.     UpdateLocal.clear();" o" M2 ~- Z! o( {% S" h
  336.   }* ~& b* F1 S' k2 F0 h( _
  337.   if(UpdateFile3.size())) ]% j* `" {2 y: M0 W2 ]
  338.   {
    $ e# u2 v- i* O0 @7 Z1 r) h
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# Y/ H" R: j; n
  340.     {4 I6 V8 j; D% d( p5 m( a
  341.       file=(*p).second;; }3 ~, \; Y) M" b# F
  342.       free(file);
    9 ?' T" J+ B! U) g9 n6 S8 I
  343.     }0 D0 v# B/ P0 i8 N
  344.     UpdateFile3.clear();
    ( p( s/ w' _6 V5 t8 K6 T
  345.     UpdateList3.clear();7 Y1 V$ s6 M; f- n% s* f
  346.   }' Q! o; L6 a/ x8 g$ k% p+ J9 g
  347.   if(UpdateFile2.size()); ~) y4 E7 d( n5 S# h9 o: i
  348.   {. y$ ^; G$ y2 M
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! K' c) R- Z/ d0 q3 ^3 X! p# b
  350.     {& A( i3 O' S% j% Y6 j! ?
  351.       file=(*p).second;
    " G4 i4 o8 D/ k& d7 P$ i7 z2 i) H
  352.       free(file);
    1 O9 Q+ Z7 i/ O- `8 u5 v/ @% }
  353.     }6 @3 K. r9 I6 W; z. ?
  354.     UpdateFile2.clear();
    3 a6 }* a# [$ w6 H2 N! A1 w
  355.     UpdateList2.clear();
    5 Y3 y5 ~3 ~1 ]6 D
  356.   }2 V1 ]0 u* L3 F/ s, `, M8 k
  357.   if(UpdateFile1.size())" I/ p7 O3 i9 h1 y0 i6 Q% {
  358.   {2 H5 X: L0 K; a9 `7 b& [1 U5 A
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' l/ D* A: E7 H* B$ R
  360.     {  I3 C/ o; m% H7 ~. c6 \4 k
  361.       file=(*p).second;% y: G& t7 B* N; g, s
  362.       free(file);9 E  T$ |1 |4 N$ S/ D
  363.     }1 ^9 |/ F$ ~; {6 B
  364.     UpdateFile1.clear();1 G" A9 I8 f. o6 ^- l
  365.     UpdateList1.clear();+ S) `$ P# \! q
  366.   }
    ; d) j1 o2 E  t
  367. }  
    9 ^: P/ w% p' V0 P, V; T( V3 j" |7 C
  368.   
    - y/ ~$ D' G0 x
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ( {+ C( Q3 [/ v8 G/ K1 b) s# K
  370. {/ K! F, \6 J' v; t- M: O
  371.   int c;
    1 ?" [5 E: N1 q1 v
  372.   LPUPDATEFILE file1,file2;
    : h3 _5 B/ A2 T% u# s7 Z
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    # R: u5 v) F' i6 Z) @
  374.   std::list<CString>::iterator l;
    2 f+ O+ _, T  W6 P% v

  375. ; v- h" }; ~3 ?% k* C  p0 V, f
  376.   UpdateLocal.clear();
    3 t8 K3 i. z: R1 ~
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 h, C9 p- @0 p7 D- K
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& K; K3 {. K6 x) V* t6 }# N. l
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : N, e$ K" N7 a5 V0 ^* R- }% I
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    $ S- g. b% [# i' U1 w: q# c/ h9 F5 ^
  381.   if(UpdateFile3.size())
    5 ]* s4 d% w) }4 r; y3 g7 \0 V; Y
  382.   {  w5 d3 y7 V5 U8 v9 d4 [$ Z$ J
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    6 j% C+ J; p6 K; U: Z
  384.     {
    5 W5 U/ z9 x# ]& @
  385.       file2=(LPUPDATEFILE)(*i).second;
    ) G4 E9 R5 _# \5 R/ A
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 w2 L  r4 d. u
  387.       {# w) s" T5 F& x& A+ a; ?+ E
  388.         file1=(LPUPDATEFILE)(*p).second;& e& o8 u5 g2 b' r
  389.         file1->vers=file2->vers;
      |5 j6 D. T+ c* {8 b& g
  390.       }) N" m# o. C% E  v# Q# h
  391.       else; v% r# i$ U6 N5 c+ a5 {8 |
  392.       {9 [# G( m1 ?8 A- q3 |+ j: X
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 r$ B; y( M0 _* A" i8 @
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));6 I4 r& D7 e4 A0 q# g
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));2 Q. j1 H/ a8 y% x; A, y3 b
  396.       }5 {* g1 ^3 }/ b& r  G
  397.     }# x0 J, P9 u( Z: c( S2 r; e) w
  398.   }
    + M* O& c) }& x- C4 E
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)2 I5 r5 p% r9 q+ Q; i
  400.   {% a5 B$ w0 j  R
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ; t( l7 _& T2 t( @" D
  402.     {
    9 O/ d' K) @% g: Q/ Z. U/ V
  403.       file2=(LPUPDATEFILE)(*i).second;
    5 m5 A& g7 Q6 H' |! x
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 a/ ^9 o6 G) b) L7 t
  405.       {* `' c3 ?8 Y9 U, m( ^
  406.         file1=(LPUPDATEFILE)(*p).second;
    8 o9 s. c* ^+ h  ?+ _
  407.         if(file1->vers!=file2->vers). p% U' Y% N! R% O
  408.         {
    - N7 U. C0 T& p; A3 t
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' m* B' A2 M, W. F( H% J8 R
  410.           c++;: F2 e6 c* S  a0 c8 r, x  r
  411.         }8 p" t6 |: a! A7 ]/ e8 W
  412.       }" U+ {  Q5 |! Z8 M" C
  413.       else8 ]9 [: a- e. _% j5 w
  414.       {8 H. x0 t8 U% j! T
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 q% k$ o0 Z& M8 J7 H( T
  416.         c++;
    7 P! w* `; K" i5 V8 D- Y
  417.       }
    ; D: b* T. ]) y0 r( X$ l% [
  418.     }
    ( D/ o/ {- \3 j6 D3 O7 G
  419.   }4 e, M. p/ E: P: |( [
  420.   unlink(".\\DownLoad\\update.txt");' S& Y2 L0 o) J. L: C
  421.   if(UpdateLocal.size()) return TRUE;
      h$ Q, N. W4 T  W8 W6 }
  422.   else                   return FALSE;
    8 r' C* _* t2 K7 Q9 T# I5 p# c
  423. }
    ; G  V0 R8 i( a
  424. - s- ~6 W( A5 a7 [6 n
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    2 L! g! [; D* C* M; V3 j
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"6 F, ?: e0 u7 B, }! C& q6 b

  427. , x/ b5 w3 d5 r" B. U
  428. ' _- ~0 o2 i% m/ m

  429. 0 M$ _' I3 ~/ z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    & D# P! r+ e0 d" m0 u2 d
  431. {
    $ p/ N6 |+ ^  q$ v0 B+ h
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;% l" S/ w4 G+ H# i) s; Q! V
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 H9 f" N6 {6 d4 T9 s
  434.   {3 V4 Z+ e% A' @0 a, }
  435.     char szLanguage[50];2 ~7 \; q) T! G7 k
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / J# }' g9 @1 f7 F7 i# e
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. \, h* S5 E& C! C: y6 y7 z) C
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " F' K# {; ]/ ?0 _# I4 s/ W" i1 z
  439.     else                                   m_iLanguage=ENGLISH;
    % Y% t. u5 N4 E0 _; d& N# G1 q4 ^$ j
  440.     char szRegister[100];0 @8 f* k$ d" V6 {
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 x; d+ C/ G/ C( d& i. j
  442.     strRegsName=szRegister;& `* J4 Q# g: y
  443.     char szPatchURL[100];
    " b3 v1 ]/ E5 l
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% K" @1 N  \4 a+ F7 X
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + u# ~3 |4 k. A* ]& H
  446.   }- o7 z% i$ _# r
  447.   else: p/ t% l3 a# d8 F0 K5 K  ^3 U7 I
  448.   {( L$ P" b3 Y: j4 q
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 p7 k- X' }# ^  o0 `
  450.     strRegsName=DEFAULT_REG_URL;' w. E8 G( d  X; x( Z* E8 X
  451.   }1 w6 u( z$ V. \9 ~1 p! D0 y
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    / h7 b3 b0 \0 |
  453.   {
    & @+ o  w/ Y3 k6 \2 R" M7 d+ i6 u
  454.     char szIP[50];
    8 X. G3 j2 P0 k# C7 Q
  455.     char szDIR[300];
    6 e# Y' L: z6 h; i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    , I* d9 O9 g1 K6 o; m6 `9 Z% O
  457.     {, Y$ ]# F- }# u9 t  ?3 X- \( K% {
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");1 V/ S0 ^& `& `, ~; k
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");7 J, `% w% _% g4 h/ u& R
  460.       strHostName=szIP;
      j* ?& x+ |" C( W, }0 I
  461.       strHostPath.Format("/%s",szDIR);1 z% U- u& W( R2 i0 ~. K! j
  462.     }
    : \( W: [+ _1 n
  463.     else
    . [/ \, _3 v8 L( E$ |5 o
  464.     {
    4 \3 X% b+ Q- m6 Q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # E2 H3 H6 }6 i9 l& l. F- C. j
  466.       {% U# E8 p$ k$ A" ~
  467.         char szLanguage[50];
    6 w5 U7 g2 o, }6 I
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : ^: @0 t: {  ?6 C0 E  H
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 J. c, u8 {/ i+ q; u/ Q/ P
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . V4 I+ r5 k9 i  r9 ~
  471.         else                                   m_iLanguage=ENGLISH;2 z: p) [$ P  I( `3 P
  472.         char szRegister[100];
    . N! j6 D' A/ P8 m$ D
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 m5 P# D* e. V! |2 q4 [% s  [+ w
  474.         strRegsName=szRegister;
    2 X0 F  H$ a. R5 x
  475.         char szPatchURL[100];7 g! e3 \* _5 a! V5 p6 w
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' e3 B2 M: d+ A) R  u" ~4 @
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. {- C: @3 U" q, O) Y& T1 u
  478.       }% Y& Y2 P, C$ B7 |/ S$ @& |
  479.       else: \7 ^& C& Q& o- P  H
  480.       {# O3 n: i1 n) u
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . B7 `8 x0 I5 R; r
  482.         strRegsName=DEFAULT_REG_URL;
    & }: ~0 B, C. J7 M7 s% V
  483.       }+ S! s/ G8 D8 m0 `, }% x
  484.     }9 y! R! B" N9 w. `. V: M& p
  485.   }
    % _$ ~/ [5 F2 E  ^
  486.   return true;! \- m' Q; q; b6 Q9 B. z( p/ N
  487. }3 h. d3 O' D$ {& I$ k9 H* ~7 a3 n
  488. 4 v! E8 Z) W' E) ?' K/ R7 u+ k
  489. #include ".\ZLib\unzip.h"! r& }: K% Z2 C9 p7 ^5 g9 e
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);+ z8 `  `3 _/ P  N
  491. /////////////////////////////////////////////////////////////////////////////
    8 O7 B2 i+ }8 p) R% j# S9 ?# u
  492. // CRevAppApp initialization! q' j& X# P- P- J

  493. ; W) O" q3 l0 J
  494. BOOL CRevAppApp::InitInstance()
    9 G4 w, \2 y( R* H# B  {* |/ F
  495. {6 \) |# B; a7 q( F+ ]* Z
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    - h! ?4 D8 g* P. p( \) e

  497. " k- J4 ^9 `8 n$ ~) a
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    * V4 |( ?, s9 m+ g( A- G  S" r. ]
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))) R8 }" W( K; v# ~' ]: p2 {; s
  500.   {
    4 N5 ?$ Q9 U7 m: w$ i9 V
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ; Q' p- f4 H  N/ u% a5 t) w  n
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    * i. x1 x  ^( t- L
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ' @. U3 y! ]  j8 x, B$ ^  R4 J
  504.     {" n. R  O7 M# P7 f% k. H$ h
  505.       strcpy(szPath,szPathTarget);
    - ]) _( Q# a' r5 ]- W
  506.       SetCurrentDirectory(szPath);
    ; X, P; R) W' E$ h" R0 S$ P& h( J# I
  507.     }
    ) k, ~# o- ^! @
  508.   }
    # S& z$ q$ U1 \! a
  509. #ifdef _DEBUG$ x% f2 A) {5 [" |& \; u' i
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  {6 j' y9 r$ s$ `0 w1 |4 x0 ?
  511. #else) g5 t' b( k: e+ k  E" H! h6 Z. K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ' r) E6 e9 n& M: S3 r
  513. #endif
    2 o2 S% L4 J1 C$ O- e  R% C
  514.   {) V! A& [1 d3 ^
  515.     char tempFileName[MAX_PATH];
    ' M  ^8 U0 J6 D. o! g' c
  516.     strcpy(tempFileName,szPathSource);, A+ h$ ^# f+ I3 K# x6 M
  517.     tempFileName[strlen(szPathSource)-12]=0;) i5 o- g* N7 E& g
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ; A$ j! P/ y2 n1 k8 K; @6 M
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ' k2 X) T' h. I$ \% w
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);4 U- ]- _% U* ~
  521.     return TRUE;
      A7 D" z6 h: s3 `6 @# \
  522.   }: Y; E+ L' V! R& B* p- E
  523.   // Nuke 0118: Delete run.exe
    3 n- g* u) T5 u# `! }# K
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );* R$ }9 }" d- ^# `
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    # b5 \1 y/ _7 f  X7 n; e
  526.   if(!ReadCfgFile("Config.ini"))
    8 Z0 a$ u  N8 w3 w; N1 }: t
  527.   {. o" Q. S. o( J. y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : Q% J3 f/ @! {- a. U9 e" o( L! m
  529.     return TRUE;
    3 |" N9 c, ^: ]( X/ Q# }! t& K1 ?3 a
  530.   }# M! a7 `! o" R5 J) D3 g. j$ d
  531.   HANDLE mutex;
    9 `. E' O! i& h3 p7 S' y/ h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))! D% _" h3 `# n/ p
  533.   {
    / L" V" Q  U/ Z. K: s) j# {6 [, [
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    # n* S8 @8 O5 }8 ?$ M7 N: V; H
  535.     {$ C6 x9 q/ [" n, s* O" ]
  536.       CloseHandle(mutex);1 A( h5 z" |3 t$ T, D  n7 Q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ) X' i6 N1 }0 I7 b9 c3 S0 M% _, A
  538.       return TRUE;
    . ^$ p! j2 Z3 q) n9 ~2 _& G8 Q$ G( {
  539.     }4 U- g5 j. y6 b
  540.   }  
    % b; G, D) h9 y# \4 q2 z
  541.   CloseHandle(mutex);
    0 ~3 B( m0 b! B1 b$ Q

  542. 5 Q% j( Y) c" a- H& y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    + o& t; \- C: d5 D% j
  544. 4 ?* I# `' O( S
  545.         AfxEnableControlContainer();
      O7 M/ q% L2 F6 [
  546. : z* i* I4 d/ N5 M+ w" v
  547.   bCanUpdate=FALSE;
    3 w. a- l- j" v2 v# l
  548.   dwStartUpSteps=1;
    4 S' H- h, f6 |3 `5 X) M, c: d# {
  549.   dwProgramState=AP_NOTHING;
    # f# \6 k# e, t; |
  550. ' b4 q  e) H6 U* S
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. f7 l7 e* R# l: d5 R6 Z
  552. - x3 [9 O' m! A- g
  553.         // Standard initialization5 C+ T" L& o; l3 `9 d* R
  554.         // If you are not using these features and wish to reduce the size
    ; `1 X/ P9 u6 l
  555.         //  of your final executable, you should remove from the following
    8 `" W) |- z  w* W6 E8 g
  556.         //  the specific initialization routines you do not need.# k3 g  n* e. t7 _2 }, {- `

  557. 2 U1 k" e. T, w  R
  558. #ifdef _AFXDLL7 q4 c6 p# a" K) b" P- A
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
      E6 T! X; E5 b! u
  560. #else4 d. V4 |! L( r4 G, d. x, s
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically5 W: ^/ o+ A' }) |: g3 G* ]
  562. #endif. X+ D% g9 I; X9 w: a' }
  563. 0 M( _0 j; H5 d, Z, a, Y
  564.   dlg=new CRevAppDlg;
    7 @: E% N  g! K1 x8 P2 M
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    1 E+ x4 p6 }  d" u2 u. `" g+ o
  566.   dlg->ShowWindow(SW_SHOWNORMAL);, T/ g4 d4 `, ]4 \: B0 k
  567.   m_pMainWnd=dlg;9 G! C0 @- k1 ~# U- X( _
  568.   u5 S& x" S& n- w/ H: W
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    2 \; L: N" y/ y" W9 o3 V

  570. 2 Y9 W1 i' ~  c0 P& @* R& l
  571. //  GdiplusStartupInput gdiplusStartupInput;
    0 z& t% K: }; P7 S
  572. //  ULONG_PTR gdiplusToken;! H8 @, {) i4 Z, R
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);  H( |8 a/ Z5 b4 ~1 k% C
  574. / ~# A- i4 I) k: Z' |  L
  575. //        CRevAppDlg dlg;
    5 N5 ]* @& q; r) ~, R5 L) k
  576. //        int nResponse = dlg.DoModal();
    ! F) w7 d1 |7 L2 E
  577. //        if (nResponse == IDOK)% l/ ~) U6 p8 f1 E4 i+ J
  578. //        {
    9 _/ r/ w% U: ^) Q3 s- M0 `
  579. //                // TODO: Place code here to handle when the dialog is9 O# v! k/ I, W7 c0 w1 q+ i
  580. //                //  dismissed with OK
      Y8 r' A5 @/ r: I# d
  581. //        }! _" E6 P! Y, d7 Q
  582. //        else if (nResponse == IDCANCEL)
    5 N7 `. l$ L8 o1 g2 F
  583. //        {
    ) k) ?; D( W6 H' Q
  584. //                // TODO: Place code here to handle when the dialog is8 |2 W$ z! H& \9 E. j+ R% }
  585. //                //  dismissed with Cancel. O+ R2 ]; z0 o! d/ _
  586. //        }5 s6 |* N+ P, V
  587. 0 `  A. f. e+ c
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    8 R& h- N. o2 M4 ~. s9 t% \: _
  589.         //  application, rather than start the application's message pump.7 t- s6 E. p/ \, Q8 l+ k% O. i
  590.         return TRUE;% @: c1 m6 f" |
  591. }
    ' n/ n/ r& X3 q( r# u8 c

  592. ; {/ W% M5 V* V
  593. char *CRevAppApp::strtok3(char *pSource,char *token)4 L* L  d% U% G) a7 T8 K; }' c
  594. {
    / X& n5 v. V' e# |
  595.   int i;
    & k$ @! q, C' ]# ?7 P2 N
  596.   char *szRet;& t9 P# \  J: M# U
  597. $ v3 J  `9 `" [8 t$ Y
  598.   if(pSource) { itoken=0; sztoken=pSource; }9 X" y  T, q0 X/ x6 @* g
  599.   if(sztoken)
    7 K& B6 ~1 ]+ A: k( w
  600.   {3 w# m" S9 w7 l3 p8 M* ?
  601.     szRet=&sztoken[itoken];  L7 |" u" Z- i% N
  602.     while(sztoken[itoken])' {% t3 B; Y: m8 Z8 T
  603.     {; u$ G4 o% R2 m8 X! z! K6 h6 N
  604.       for(i=0;i<(int)strlen(token);i++)! T6 {0 k( s% ~! f+ V# Q! a
  605.       {2 K4 m0 M  G/ W5 o  F/ ^$ C7 i% z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])4 L, }& U; t% y: i$ O" D" a. Q
  607.         {
    $ }/ k. |9 ^" V# p: H: `
  608.           sztoken[itoken++]=0;
    % b1 d- [, T# r
  609.           sztoken[itoken++]=0;( O# n; ?2 g1 O9 N7 r3 q! k
  610.           return szRet;. l) F3 P' l: g% J
  611.         }
    ' C! M" q9 |6 r
  612.       }
    % K; Y) Z& S9 e; a3 W; \- {! J9 ~; F
  613.       itoken++;1 e/ j& j/ s, @. G7 x/ _3 T4 v
  614.     }. ?3 ]8 {7 N8 A6 Y- t
  615.   }
    1 Y3 b7 a+ ]. [
  616.   return NULL;
    0 l3 g7 J( ?& c: x
  617. }; ^; J: B* V% M  |

  618. 4 c& O  Y/ X; J  P. [2 P: M
  619. void ProcessProc(long Total,long Current). w* _+ B+ J% x* |  c
  620. {& P- S1 u- G6 `; `7 n, M' X
  621.         MSG msg;& ^& h! }5 u* w* h
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    5 V* d! q1 J/ w; L+ H" m& a2 L
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' P8 F& X1 p# L1 u' D( C( I  {/ V
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    : \3 v8 \$ r* q: B/ L3 u# s
  625.         {
    ( E/ p4 \$ G$ w# {$ u9 T
  626.                 if(!GetMessage(&msg,NULL,0,0))2 N# b* F3 v3 \8 S. v
  627.                 {
    $ C$ [( T; u; [: C+ o4 P
  628.                         return;
    % z* y. Z$ Q1 A$ B1 u1 j
  629.                 }/ E4 }, c/ b+ H
  630.                 TranslateMessage(&msg);& I1 v+ s/ r; c# V
  631.                 DispatchMessage(&msg);
    - n1 X5 R: O3 G; I8 ?
  632.         }       
    ' U/ f# P6 r, B4 g. P
  633. }
    7 G1 n& A0 R3 e% L& K, I

  634. ) l3 e/ ~! _7 ~
  635. BOOL bFirstChar=TRUE;$ w: }; I  U9 I! [
  636. ' `/ H3 L" C- p+ k. b/ g. i
  637. BOOL CRevAppApp::OnIdle(LONG lCount)4 J, K5 [% D7 J& a1 f- u9 s3 j
  638. {
    ) n4 j4 f2 |7 I- r, P! K# n5 z) @1 q
  639.         // TODO: Add your specialized code here and/or call the base class
    : k' N, z: I7 n  d6 w' c
  640.   switch(dwProgramState)
    ! @+ D" l' K& v
  641.   {3 U: U; x8 S" P% s7 K
  642.   case AP_NOTHING:/ G: D" q0 a: F/ W5 I' D) ?" F
  643.     switch(dwStartUpSteps)- y5 l2 g  }1 @4 A: c6 D, c
  644.     {+ a) e# X& p& ?3 ?& u
  645.     case 1:5 v) I: H* c4 f# _# j- `
  646.       {
    / j; B" m* P4 e! m9 A: y9 b
  647.         int i;: X0 v# @; u# y5 _/ m- O
  648.         CDC *pCDC=dlg->GetDC();
    , X2 S8 ]) T" e( X( D( S6 E
  649.         HDC hdcwnd=pCDC->m_hDC;6 o! B3 X' T5 T0 Y2 D; ]
  650. //        Graphics graphics(hdcwnd);
    % o8 H8 s2 s/ _! R, A
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    * x. P8 `6 n7 C$ h, a9 m9 Y
  652. //        INT iWidth=bitmap.GetWidth();
    0 Q1 L/ d7 s1 n" l
  653. //        INT iHeight=bitmap.GetHeight();+ d) o5 _7 X7 I7 S
  654. //        Color color,colorTemp;
    6 s2 {/ Q  T! b) m) O3 y3 o
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & n; f' k9 [- ^% y# u! F% z
  656. //        {; T8 C5 t& z4 H$ V7 N7 I8 `# f7 p
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    0 G( p! H6 R/ h" }* }6 X* K6 @5 T
  658. //          {
    ; r4 k. W! Q. Q  M' d, R
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ! M3 ?, h2 i# p2 I/ `3 s# w
  660. //            colorTemp.SetValue(color.MakeARGB(% `* K5 @- K% w) w  v
  661. //              (BYTE)(255*iColumn/iWidth),% l$ A) ^, c# x8 Y$ {- s
  662. //              color.GetRed(),
    + n7 L4 M+ m/ V" S+ U+ `7 q
  663. //              color.GetGreen(),
    & D' l0 j5 R' B% }" g5 N
  664. //              color.GetBlue()));
    ! R- E7 @3 s0 z) B; `- J0 a
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    5 e& ~% E  u7 M
  666. //          }3 l* C2 w* Q: z# V
  667. //        }1 ?9 J/ }' h" d  l
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);7 T8 {! p1 S9 X; g% Z/ t
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: u+ o2 Z; v+ E. v
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( |, U9 C. T1 j9 o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ E! d8 \6 y1 F! A9 }
  672.         for(i=0;i<240;i+=8)
    2 z' F, S) G! e( V- v
  673.         {' A9 F4 X: O, o: M- _
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);8 @* l; H5 t6 d8 E8 w$ }# N8 p
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # e" O. P, P: Q+ W1 t/ `: ~
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 R; d+ X% q" H9 B
  677.           Sleep(33);
    3 U* E4 X6 O3 i: y- c2 J6 F
  678.         }
    # s4 `/ X) {- `7 Q- ?, E6 a5 n# b
  679.         Sleep(1000);3 }  ]- c) H1 V) g
  680.         for(i=240;i>0;i-=8)
    ) ?! m! Y, T! {5 w
  681.         {5 J/ M5 [6 R. J$ ^- u
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  R* }7 `0 E# ~( ?5 F. Q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, w  T' S5 C# |% y6 [2 `, Z" C2 k
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - Y/ y+ K8 t! L
  685.           Sleep(33);0 |$ a7 d' V  T! w
  686.         }
    2 c* l0 M, f" N. o; {9 U; K
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);7 n9 y$ p: K* b" k  }' d3 H. a
  688.         dlg->ReleaseDC(pCDC);0 ]" L  I! f( Y; r" }
  689.         DeleteDC(hdctar);3 e6 m2 D5 E+ C
  690.         DeleteDC(hdcsrc);7 `  a/ Q: Y7 D
  691.         DeleteDC(hdcorg);% v3 G' J7 @' j6 {& `5 M6 `* k& v( r
  692.       }; b8 Q& E) q4 {0 J; }% E- A
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    - Q. V3 t5 A* U' p
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ( F7 t, Y& y0 l7 R) w4 V
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    : {. E/ b& J6 r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 n5 h/ X1 D2 V
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 @1 W! _7 f' z" F) U
  698.       if(!Dn.Connected())
    8 f& |8 f% N% i
  699.       {
    + c/ f! U" Y% _: P) ]$ p' G+ [& x0 E
  700.         dwTotalFiles=1;5 Q" ^% _8 `" d' y
  701.         dwDownLoaded=0;1 q# b5 _# N  K3 U. \$ L! i: g+ k
  702.         bSilentStep=TRUE;& o2 U& X' d1 O
  703.         bCompressed=FALSE;* \: ]7 C/ V8 ?; f
  704.         strExtLocal.Empty();
    ! D: d3 D. ^) n: J. N
  705.         strFullName="readme.txt";
    ( a7 B5 ~4 ?) x7 p! @: U' p& J
  706.         dwProgramState=AP_CONNECT;" ^' D; P& Z9 U9 o$ W
  707.       }' v0 @0 G5 @0 Y0 A
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();5 |2 ?5 ~* K- C
  709.       dwStartUpSteps=2;5 L2 a; K- q8 ~
  710.       break;9 O4 z, P! G8 L/ w
  711.     case 2:
    8 U& s7 U) @* `8 P8 x
  712.       {
      y  y$ S- X! S0 t) O
  713.         int iEOF;) ~/ Q* ?9 l6 Q# w
  714.         FILE *fp;
    / m1 u' P9 e" V; y9 x! b0 ?. v6 f# ^
  715.         char szString[512];
    1 J* z# U: M5 B  U/ V
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");& Z/ V' Q3 }. A' F* U2 F! d" Y5 A: n
  717.         if(fp)  s8 E0 f8 r; @9 F4 \' k
  718.         {
    4 Q6 f% E0 ]: O( L% \# w
  719.           do
    2 J+ t4 J( `4 Q- T1 a4 o
  720.           {! B$ d9 o0 p; b5 O0 G# ^4 V
  721.             iEOF=fscanf(fp,"%s",szString);
    , Y7 r0 {& M/ ]4 f
  722.             if(strlen(szString))
    ( H& C( U1 M  l
  723.             {3 L4 t2 C  A6 o/ s- s3 h8 y
  724.               if(bFirstChar)
    % J) a7 [% }# o& D* s8 [) G7 t" O
  725.               {
    # W7 K. P0 O! D, b0 S, ?
  726.                 bFirstChar=FALSE;
    6 s. X  v$ U% ~; r
  727.                 bConnectIsBig5=FALSE;
    - U7 F$ ^5 L4 V( {6 {8 v5 n' Z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 w$ I' a* x- R* }
  729.               }6 R; \  c- J6 ?) d
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));) j! A. o4 J. Y0 {# P, i
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    2 u; Z/ i( ?9 d! h4 P
  732.               dlg->m_ListText.AddString(szString);- s) m. J1 `5 l3 U% [+ q5 _
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 g# a+ \1 p! k1 W
  734.               *szString=0;+ a5 q! q& J" C; j& I
  735.             }
    & l# \1 `' B1 T) V( h
  736.           } while(iEOF!=EOF);
    ) a  H4 L% Y% V( l0 U1 |
  737.           fclose(fp);
    5 _0 |, a/ R/ c# m& m
  738.           unlink(".\\DownLoad\\readme.txt");0 l* o- M3 K0 {8 n! T8 Q8 L& D
  739.           dwStartUpSteps=3;
    # L- o* B; @8 b: ?2 E) D/ R
  740.         }* H0 l2 t% W1 j6 h9 k; V3 R
  741.       }. B6 s: L; d; l& @
  742.       break;7 \1 z1 |& |( L, l4 z
  743.     case 3:2 ], ^/ k4 p9 t' J" V, S( }
  744.       if(!Dn.Connected())
    : |( A! @/ ?1 R6 k2 U* p' d3 a
  745.       {
    * R" i0 O* ~/ {/ G) x( V3 o
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);# z( j: r3 L+ d* ]; b- G- k
  747.         dwTotalFiles=1;
    # i4 T) ]' s/ ^# H& I7 U' d# G
  748.         dwDownLoaded=0;
    8 N! R9 i) U0 b- i- m- P3 z% @# p3 B. W
  749.         bSilentStep=TRUE;
    0 ^( P2 T7 a1 O+ H! b" e" o) E9 }
  750.         bCompressed=FALSE;* B( _7 f0 X! u1 R7 F9 m2 B  Z! v
  751.         strExtLocal.Empty();( J+ m) G& V% {# S4 c
  752.         strFullName="checkversion.txt";
    / Z0 l* t7 v  N1 T$ `/ O
  753.         dwProgramState=AP_CONNECT;
    4 _6 b5 N# X+ E1 S  c- ^6 H5 c
  754.       }: m3 f1 E. R0 \  q3 [( d5 ~
  755.       dwStartUpSteps=4;
    ) ]' A) W  O" }' @
  756.       break;
    7 \7 C9 O, d( g/ Q
  757.     case 4:8 E7 A  G( Z. U3 x5 L' H
  758.       {2 o7 B. E& X  x) j
  759.         FILE *fp;
    9 a1 K: _6 E' d7 n# e9 A" @0 C
  760.         char szString1[128];- \1 [" j( e$ r% A7 z
  761.         char szString2[128];
    ! C* ]& \$ p$ s$ Z- Q! Y
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");" |, n7 U' Q3 r# S0 ]
  763.         if(fp)
    ! T/ ]2 y" v: W
  764.         {# p' ~& |% M( M0 _4 ]
  765.           fscanf(fp,"%s",szString1);
    - d4 j; E, n" t" L: G+ r6 l1 r9 u
  766.           fclose(fp);
    ! K4 ^$ j; E: v6 V7 ^0 l
  767.           fCheckVersion=atof(szString1);
    ) F% Y4 F. w1 p; v+ M+ F
  768.           fp=fopen(".\\checkversion.dat","r");$ X% _# l% l% f( V
  769.           if(fp)3 T( E9 J" t! l, V
  770.           {1 P' Z4 ]* ?% _0 [* O8 }) c/ n; M* E
  771.             fscanf(fp,"%s",szString2);/ x) v; i$ E* n( ~% _2 E% h
  772.             fclose(fp);4 B3 Q' \+ X1 b  V0 e8 f5 ^
  773.             if(atof(szString1)!=atof(szString2))( |+ P8 y) \  X" K- o1 [/ X6 \. K
  774.             {
    + |6 A$ \8 @4 H' |, }& T- N) F
  775.               if(!Dn.Connected())5 G5 \9 a- o" f8 G, [7 F9 N9 m1 F
  776.               {9 ^9 o# @9 p$ J3 b3 l) E- Q, ~
  777.                 bFirstUpdate=TRUE;
    7 P% v/ ^- o, m
  778.                 dwTotalFiles=1;
    4 E; W. t) W' w1 U% Q( O, X
  779.                 dwDownLoaded=0;; @8 Z3 ]1 i/ b+ v
  780.                 bSilentStep=FALSE;
    2 l3 {4 @$ w. [
  781.                 bCompressed=TRUE;
    % @8 x/ b0 q2 K% s
  782.                 strExtLocal=".\\DownLoad\";4 X3 H% T: A7 f/ F# F  }
  783.                 strFullName="update.txt";& N$ Y$ g9 I4 m
  784.                 dwProgramState=AP_CONNECT;+ {  @. O: W$ q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) v" C4 [* w0 A/ ]. ?; N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 m& o2 U) e+ A* M5 l+ ^
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");* ~; J1 w, Z) C1 j& u1 D

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

" f2 s7 w4 C; n- d3 D- Y, D' t* u* a& l

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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