CSUpdate.exe源代码

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

& ?7 Z, N: c* U* Y) k
  1. / RevApp.cpp : Defines the class behaviors for the application.
    5 V  @! H9 A9 D6 D, `
  2. //
    , E" B* G. o* Y/ k

  3. 0 N0 f% Y9 ^0 F- a% M  I6 w, c+ f
  4. #include "stdafx.h"
    + W# L5 T. I- l/ \8 g

  5. , @7 }0 y# E2 O- t3 R* j
  6. //#define UNICODE0 w* }# W- j4 {& M( N. h
  7. //#include <gdiplus.h>
    9 F. w3 T2 y* I6 N3 C
  8. //using namespace Gdiplus;9 |# X3 {' _' b6 ^! V4 q# f
  9. 3 z- G+ Z' x* I  Z5 ^
  10. #include "RevApp.h"6 Q3 }- I' j* @" m
  11. #include "RevAppDlg.h"
    - t: _) g  H4 B
  12. 5 X, k0 j. i$ b' y, F8 M& u
  13. #pragma warning(disable:4786)
    9 `4 ~& ^# H4 t/ R) {; `
  14. #include <map>
    + d9 w7 N- B" t& J4 S
  15. #include <list>  L3 W- i! {) \1 b4 Q' p6 u
  16. #include <direct.h>* R) F1 ?0 ^$ u" z$ ]
  17. + W  i' B2 Z3 u+ f' x7 V! L
  18. #ifdef _DEBUG# n7 k( N6 k. t' X% K5 w
  19. #define new DEBUG_NEW. ], z: ~; Y4 |# c
  20. #undef THIS_FILE
    1 n/ g" F2 A6 E  n% E1 S5 g
  21. static char THIS_FILE[] = __FILE__;
    + Z+ \; f$ I  a4 J- N3 t
  22. #endif
    + x8 i0 P3 k0 Y- Q* A
  23. #include "SkinResDef.h"1 C5 ]* _, S% o
  24. #include "ChangeBG.h"
    : W) o# {. ]6 x5 Z1 Q0 I6 r. }. G
  25. #include "AFXINET.H"6 R8 }. Q1 ?9 g" q0 {; v* L6 g" T# x% b

  26. ( k* Q: E. v; L) ?+ P
  27. #define TRADITIONAL_CHINESE 0
    ; m- ]& d6 @' @# g6 }; g
  28. #define SIMPLIFY_CHINESE 1- D9 q4 r1 J3 [
  29. #define ENGLISH 2
    2 n5 L9 H1 ^, V/ o8 S
  30. int m_iLanguage = ENGLISH;: @- }0 {/ T7 h" d8 h
  31. /////////////////////////////////////////////////////////////////////////////% R; c3 _2 n# V( Z" W2 [' @: [- ?
  32. // CRevAppApp: z, I% D' r: G

  33. 7 ]3 G6 P9 a7 \7 Y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)2 i1 S; z6 ^9 W8 n! X5 D# P  n- X% Z
  35.         //{{AFX_MSG_MAP(CRevAppApp). |5 W9 k( z$ g$ m2 f1 }& H6 c
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. G# b* U; N. B9 `0 I, e
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!( L0 c4 y; w4 u( b
  38.         //}}AFX_MSG: F/ S5 W. j! c0 U
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    4 U$ V6 O' B0 ]' H, T
  40. END_MESSAGE_MAP()6 [% m4 P' v0 F9 Q, C$ y8 h( |0 _

  41. ' \: c% R# |. ?* H2 G
  42. /////////////////////////////////////////////////////////////////////////////
    1 p5 K( i$ H3 w1 y( @( w# ^
  43. // CRevAppApp construction
    + W/ z: p  m/ ]/ g2 z2 T3 C7 [
  44. , N* |/ b' [2 s( D7 v' {! G
  45. CRevAppApp::CRevAppApp(): c8 k* A' M( b
  46. {$ B' p. h+ k! ~# `# y/ \6 z, m, N
  47.         // TODO: add construction code here,8 T% x8 Y) g. V
  48.         // Place all significant initialization in InitInstance
    3 T1 F( r  x% I- ?3 i% q
  49.   bDisplayIsBig5=FALSE;5 U: s5 u1 R7 a  Q! v5 [. m
  50.   bRestartUpdater=FALSE;# P7 R: ~5 K9 ^. x+ W
  51.   bFinishUpdated=FALSE;
    * A4 c7 [, q$ }8 L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;& c9 y0 I& A/ p2 [  R
  53.   InitChangeDataBig52GBKS();( W( x- ^' O  j( s
  54.   InitChangeDataGBKS2Big5();
    2 V- @( b( J* y! n
  55.         //7 l" N0 }/ x- T% b$ ~' G2 r" J
  56.         bClickRunExe = FALSE;
    6 L+ O, X# X( j6 g/ q  r
  57.         //5 a# u2 B0 s4 Y+ ]6 N2 ], U
  58. }
    + f# X3 h. u9 }5 f
  59. : T4 u) [% J& w+ K
  60. CRevAppApp::~CRevAppApp()! m: U; I) k! l9 ?$ D/ P+ x+ U4 C0 P
  61. {0 \  ]! s- I9 P5 y6 ]7 w& N# H7 y
  62.         // TODO: add construction code here,6 W% r2 h5 d$ {. R1 R, `
  63.         // Place all significant initialization in InitInstance: v9 X, U, U$ e, `$ T) q& {/ Q8 u$ D4 K
  64.   EndChangeData();
    ) D( M9 c: C2 G" F' z/ [& B
  65. }7 t, H0 K! L% z: Z' W% J/ }
  66. 6 B4 j: C9 ^' b9 {* {
  67. /////////////////////////////////////////////////////////////////////////////
    9 ~4 x* n7 e9 B- B* g& D* Y0 i
  68. // The one and only CRevAppApp object9 F/ {. R+ B; _& Q2 A7 f
  69. , H7 B- y9 L9 W! B
  70. CRevAppApp theApp;
    * @+ T3 S, }' j( G) \0 J; D& d
  71. 5 t7 Z  x  q$ r. X, p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName); p9 s6 l$ @! _: b- O6 q( y2 C5 m5 ^
  73. {+ D* Q4 x6 M; P# Q* {! Z: V9 m
  74.   int iEOF=0;
    " g4 U- {$ @: d; Y" K; s
  75.   char szTempName[MAX_PATH];
    6 ^. L3 Z( u( n' `! g+ p. I
  76.   *szFileName=0;
    7 z# _* R$ t: D
  77.   iEOF=fscanf(fp,"%s",szTempName);
    4 g+ X: m# Z, l; q
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')7 D6 V! u+ k( z# @; f
  79.   {
    - G, U( |& l% t: |0 V: Y- \5 i1 d5 H
  80.     strcpy(szFileName,&szTempName[1]);
    - U8 {5 j: A/ `
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    - Y% u' E0 S6 C* h7 u% d
  82.     {
    $ T3 w+ [9 P6 Y1 W& l1 `5 H* x
  83.       iEOF=fscanf(fp,"%s",szTempName);& Z. J* X& d1 H9 T: H. V
  84.       strcat(szFileName," ");5 h. L8 C3 Q' c2 d
  85.       strcat(szFileName,szTempName);" J3 e4 A% D- C3 _$ M
  86.     }
    ) z, f6 `3 P) n3 l2 ?: A
  87.     if(strlen(szFileName)>=1)) Q; ]  G1 t& i/ D! @$ q3 F
  88.     {/ g% ]) k0 j+ F% Y+ a$ m5 I
  89.       szFileName[strlen(szFileName)-1]=0;! m! c) r' i+ M8 M0 |
  90.     }3 l/ i) M& N4 K- F  {
  91.   }
    3 \- S2 t4 V# m/ S. b' A
  92.   return szFileName;
    - ~2 `9 J* g( w7 N" c& h! D
  93. }
    3 M$ \, t% A6 A) Z* B4 n; u6 R+ q* }

  94. $ W& M7 b! T7 y$ r0 Y) n
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ' e0 T! k5 _, n- @
  96. {8 d, z7 b8 z' o, [3 G/ D
  97.   FILE *fp;: f+ U8 }. H" U, J5 e1 }
  98.   char *key=NULL;# f- {5 n+ U  P2 z* q- v+ b! A
  99.   char version[MAX_PATH];. [8 _6 z2 V! X# R
  100.   LPUPDATEFILE file,olds;
    3 z7 d5 G- O, _
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
      A* _3 ?6 Q. n+ d% A4 N( M7 U2 x

  102.   N5 i# q) R0 r, ~
  103.   UpdateList.clear();9 m; p# {- }- P/ f$ r5 M$ u* P9 S
  104.   UpdateFile.clear();
    4 J6 i$ O1 L% }4 L
  105.   if(GetFileAttributes(filename)==-1) return false;
    # \' W3 `8 h+ k8 L5 f3 x& L4 k
  106.   if(!(fp=fopen(filename,"r"))) return false;# G8 t1 A, |$ d4 _0 [6 o1 O
  107.   fscanf(fp,"%s",version);  `  @: d8 M% m$ t: A. E) H
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }( F5 t  N! b* R' d5 q  R2 l
  109.   while(fscanf(fp,"%s",version)!=EOF)  U& p9 b5 H' e$ w2 B, _6 `6 ^
  110.   {6 n# k0 K0 b8 ^9 T  l+ I
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ ]7 t6 s0 A4 l# C- w6 o2 o# N
  112.     fscanf(fp,"%s",file->path);
    5 l* A& I; C! `
  113.     ReadFileNames(fp,file->file);0 g8 Q, f. J# U0 J# H8 c
  114.     strcpy(file->full,".");2 P; @% a( H0 V# u! ]7 D1 i% C
  115.     strcat(file->full,file->path);
    " h9 _( b3 F8 q: v- N, ^: R
  116.     strcat(file->full,file->file);) J' K9 u9 z3 l5 e7 j6 F+ H, e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())' ?4 V; v6 K6 X( e- c+ g
  118.     {
    5 v  D+ N6 `" D
  119.       file->vers=(float)atof(version);; d$ K3 ?- O4 K  _3 c) c( y# `
  120.       UpdateList.push_back(file->full);
    % Y* |& R4 U- Z
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));& I7 b# w$ E, F* H
  122.     }
    : }% A0 J/ _) b* e/ h, e
  123.     else5 W! x* _* s$ |, l2 S6 J% u
  124.     {
    2 z  k, {4 p0 Y( O
  125.       olds=(*p).second;3 n' s3 |; D! n. j+ t9 Z9 f4 E
  126.       if(olds->vers<(float)atof(version))
    ( g  e4 g" c9 u4 k
  127.       {+ Q0 G; ^2 M9 D
  128.         olds->vers=(float)atof(version);2 f3 ?+ P3 \# f0 m6 d7 A  a
  129.       }
    # I5 {; ?3 @* J4 }3 I+ z" l
  130.       free(file);, y0 X& t6 j5 ^" |
  131.     }
    & s. A$ ^7 K: a4 T
  132.   }
    - r+ f! b8 h+ c2 `0 |. A
  133.   fclose(fp);
      D$ L5 Y/ M" m( t8 a' U$ K+ p
  134.   return true;7 o7 j, `3 N+ C* s
  135. }2 b8 i, `9 Z, k4 G# @! l1 x8 L, T
  136. 3 \; |4 }: K  n5 G2 \4 _
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    8 A$ k( M0 _/ X( b, z" r
  138. {) ~: s# {" n* L& x& P7 D
  139.   TCHAR  szFull[MAX_PATH];3 d' Q$ a# u0 S1 }$ L' U
  140.   TCHAR *token,*inter;
    8 T2 u% }7 A9 h/ \
  141.   *szPath=0;
    4 O$ x1 q' ?) `; v9 P% M1 \
  142.   strcpy(szFull,szFullPath);( O( S" Y2 f) I0 J% u" L* A
  143.   token=strtok(szFull,"\\/");: K6 }6 w6 W' {- Y. @- M* K, n3 U
  144.   inter=token;1 n& T. |9 Z! ]
  145.   while(token=strtok(NULL,"\\/"))
    ; B5 ?6 v/ Q8 k3 q, ^* X  [! F
  146.   {/ E, r' o, ?: A& k% n
  147.     strcat(szPath,inter);
    0 \) c* K2 W2 a( \4 S  P3 H, v
  148.     strcat(szPath,"\");5 ~0 @) ^# z5 e
  149.     inter=token;1 G5 G* p' H, ?5 s8 C
  150.   }. e: I  s- |: x1 e2 U# D' c
  151.   return strlen(szPath);( u/ Q7 E  J& e; R; {
  152. }1 f0 c! R5 a* `+ R; C* Y2 \) T

  153. 3 P; y# [9 B5 A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    $ }& L! O! A! e9 G6 q/ ]$ Z
  155. {5 b' E% e6 e3 m
  156.   DWORD attrib=GetFileAttributes(Target);
      G; W/ h( Z! E+ R5 V- u
  157.   if(attrib!=-1)
    3 q( h6 W% z" r- u  G
  158.   {
    $ ?9 V: x4 g* {5 P" E
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))! o6 L% ~% h+ Y9 Q7 K
  160.     {
    9 \: \3 N5 J- }- R
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    4 \' l- W( T! f3 w: X' I; ?
  162.       SetFileAttributes(Target,attrib);
    & }2 q" j2 I0 k7 U, ^! t  S
  163.     }0 ]& b# ^! ~+ G
  164.   }
    0 d. d# L0 i6 X  v% `2 m. Y
  165.   CopyFile(Source,Target,Erase);
    2 ]  G9 R6 Y. a& O+ C- [$ i/ b
  166. }2 G, x2 i5 I7 k4 k9 d* b% S
  167. " G2 b$ T0 v  t9 r( d7 X% ?( E
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)! s6 y: e* @! g" ]
  169. {
    + _# J9 T2 x! `7 g( s4 g
  170.      FILE *fp;
    ' B" x. l( F! _
  171.      char  szBuffer[8192];, j- t5 E' ^3 z& C
  172.   va_list  argptr;
    & t5 q$ e5 {' [4 ^& L

  173. ) l! P8 ~  U2 Q2 E' T) h! @9 m; ?
  174.         va_start(argptr,message);
    5 g; L5 x/ ^+ o, Q, \( G% t& p
  175.         vsprintf(szBuffer,message,argptr);
    # r* z/ Y9 a# b$ ^" M8 X
  176.         va_end(argptr);9 `% B2 {" m# e( [/ H9 l0 f
  177.   fp=fopen(FileName,"a");
    : o, c# L) ]/ O
  178.   if(fp). E% l  U. `/ C
  179.   {" {0 @/ j+ v8 q5 c* P" A
  180.     fprintf(fp,szBuffer);
    ! S3 l. r. R, Y
  181.     fclose(fp);8 E3 q! h8 f, E9 Y6 y% x+ C
  182.           _flushall();
    ! H& ^' u5 p4 V/ M8 q- k
  183.   }
    # ^! f* H( P9 y- }3 |
  184. }  {5 q- M$ f2 \5 S1 \$ I
  185.   X4 N! a5 z' k' |6 {& t  s" M
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    8 Y/ E; E! I( d$ R& q; U" T
  187. {! k' `7 a. K' L/ g1 x9 ?  t( ~  J
  188.      FILE *fp;
    : y& T) T& K" ^2 `
  189.     DWORD  attrib;
      }+ t: j' e5 S# h& l. @
  190.   attrib=GetFileAttributes(FileName);
    9 c3 e& z& U! r
  191.   if(attrib!=-1)5 `- A5 ]  M! m1 \0 ?1 ?
  192.   {0 t+ i  X5 h; x: \$ {& m0 }
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    7 s6 O  \# b4 n6 w, {5 t% A' S
  194.     if(!SetFileAttributes(FileName,attrib))3 c8 @0 b8 Y* r  o. s; Z6 ^
  195.     {
    $ _. q! }: [" X0 I. v! ~3 F2 U
  196.       return FALSE;
    , `9 ^7 K& B) `9 L* C* ?1 O: C
  197.     }& c% P# O. U. [9 e/ ?
  198.   }; G) W! H, O4 p8 L: f
  199.   fp=fopen(FileName,"wb");
    8 \! _0 u1 t: R7 \5 Q# \7 q
  200.   if(fp)& R, \5 l9 s) q
  201.   {
    8 M: M* l( K- ?3 j' n0 J; l9 v
  202.     fclose(fp);6 H0 c/ m( j( f6 ]5 u
  203.   }
    ' f/ z9 V0 k0 L6 ~& c* R: i2 T+ p& s
  204.   return TRUE;1 }% s, V. K( E* l! `* H/ t& `
  205. }
    ' g/ G! q2 p( M5 t% v" K2 K4 c  l! w
  206. 7 F* q" A& q6 Q" B% Q+ n! S( m) q
  207. BOOL CRevAppApp::UpdateLocalVersion(void)1 x# G5 d4 q  Z7 `; V) o
  208. {
    0 Q! m2 D$ b1 |
  209.   char filename[MAX_PATH];  e- A" M" [' e! G3 M6 U
  210.   LPUPDATEFILE file,olds;- n) x5 p8 k* Z: X) d7 {% T
  211.   std::map<int,CString>::iterator i;4 n: \/ A; x0 P; V
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' u' L9 t! K  J* Z
  213.   std::list<CString>::iterator l;$ t! \# \( a* k6 [) z* U

  214. 5 Z& I2 \  p6 I1 Q) ?; z
  215.   if(bFirstUpdate)5 G3 k; L  {! ?: P, @5 l
  216.   {
    ( t. \; o! _8 G! r' M& Y
  217.     dwCurrFile=0;
    1 l& o! C# H/ Q1 y
  218.     bFirstUpdate=FALSE;/ k- O5 z! F- n  V4 N* H: g
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). y1 R7 q1 L  V: O# m
  220.     {2 m! k5 ]5 D5 l" y
  221.       dwTotalFiles=UpdateLocal.size();
    3 k7 A! Z1 V! Y% ^  F
  222.       dwDownLoaded=0;/ q, ?* L1 m! n3 C& O% p. {
  223.       bSilentStep=FALSE;* f* V; |- R$ _
  224.       bCompressed=TRUE;
    6 X' Z) d, R4 y% x- Q3 q& L1 K
  225.       strExtLocal.Empty();' R) k1 ?: M9 v
  226.       strFullName=(*i).second;
    + u0 ^+ w3 _" \& n) C) i" G0 T
  227.       dwProgramState=AP_CONNECT;
    " {# t0 H! ]4 M4 E% W/ U# l- {
  228.       return TRUE;% \4 V6 D/ w, \. H% F9 {
  229.     }
    . r' n9 L, x) N# Q5 a! P  a+ }
  230.   }- c- J6 u9 U1 d4 {6 J& x7 J
  231.   else if(bRestartUpdater==FALSE)
    - R; R4 K/ y. z& x9 i/ n
  232.   {; ~* r4 X; O# a* v# z, T7 R8 ?
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    . R6 t* O% U$ m
  234.     {
    * Y- _- T. Q* n/ A
  235.       file=(*p).second;& s6 S- w( x% }9 V6 w
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())' i9 @/ J: Y/ M* X, v
  237.       {$ S8 _# q% C% a
  238.         olds=(*p).second;
    4 R) l3 ^6 e9 s; k0 r- _: }) u
  239.         olds->vers=file->vers;/ y6 F7 q  J& T, e9 N) M, x$ Q
  240.       }
    ! n) Z) _% p2 o2 d; m) Y# c& z/ |1 }. U
  241.       else
    7 R$ D2 B1 q( L+ t3 w
  242.       {) T# X5 n9 F5 n) O
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. n! c: `# R! F5 N* f. [
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    , ~( ?4 a6 I: u" t. K4 O
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));' x1 O) g2 V! c( ]
  246.       }, q- M* e/ w) B) l
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ! t0 Y  }) E* @, H! W3 \
  248.       sprintf(filename,"(%s)",file->file);
      N. ?3 q+ Z/ v+ O" J
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 Y) x6 ~- h. [) G1 c! ?
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    1 \% B& c8 s( g" L5 S
  251.     }8 Q7 A  S0 L5 L7 {. i# l
  252.     dwCurrFile++;+ t# j( n# i: [6 E+ S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), P7 n' U. Q8 R3 {2 G/ J1 t0 `
  254.     {2 I! G; t( Z, J0 b5 C/ I  h" }1 {
  255.       bSilentStep=FALSE;
    ! ?+ N" q; I/ d- h: X8 w; A6 q
  256.       bCompressed=TRUE;- M! H/ n: f0 y) Y/ `, g( i
  257.       strExtLocal.Empty();  P; N, T& ?5 T$ w9 {$ ?' \
  258.       strFullName=(*i).second;1 V/ {0 H/ N, k; P' v6 e5 Q
  259.       dwProgramState=AP_CONNECT;
    , x7 m; H& [: @/ n
  260.       return TRUE;
    ! U' b  f# i9 A6 @4 H
  261.     }
      `' I- V6 x* R5 ~1 y1 \" r3 |" }! v
  262.     if(!bRestartUpdater)0 P0 i' b7 F8 e7 s9 G+ c
  263.     {) R. S, g. j  d: T' v
  264.       int iCurrSize,iFileSize;9 R) n" `( i$ a" R) T
  265.       iCurrSize=0;6 b4 T# v& H. C+ m2 H' q  x/ n3 n
  266.       iFileSize=UpdateList2.size();
    ; [. S# J; s8 j" H, Z1 m' w  |
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ' U" _7 I5 t- b3 H# A; `) q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ; {7 ?3 C- s. b- Y1 Z0 S
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    # a' u; z1 N5 B. Q4 f9 S
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      X/ U  u/ W1 L/ d0 N; I3 ^
  271.       Fclearf(".\\update.dat");
    : J- g- ~2 ^# H8 ?: o3 U, _4 W& v0 C
  272.       Fprintf(".\\update.dat","Bloodyf\n");2 L7 v, ^3 q8 ~: V. o
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)6 ]4 t( R  z/ h% T  C
  274.       {$ J- [2 k  s" S- {5 h0 {
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 v0 q: [2 x, N, ^- S% U* U2 D
  276.         {
    / }' Q: P; ?! v
  277.           file=(*p).second;
    ) R* j! ~1 e$ J, u
  278.           sprintf(filename,"(%s)",file->file);1 e0 |* t/ }3 j: z) D
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / ]# S4 b, I, O8 e: l
  280.           iCurrSize++;
    # v! c8 a& a# _. S
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    0 O& Z- |% D, ?( Q: C
  282.         }
    $ j. Y- u' G! K& ]
  283.       }+ C9 J( y; V9 s1 A' l0 @' b% S$ {# x  v
  284.       unlink(".\\update.txt");1 |( \0 v" s  k3 F3 o2 |0 x- b
  285.       unlink(".\\update.tmp");
    * y$ w7 r8 t8 {
  286.       Fclearf(".\\checkversion.dat");1 h& d8 {  w) n: G) t
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ) X. ?5 i' m% |) B  r
  288.       if(UpdateLocal.size())9 O  N% o' K$ D8 L5 z& t" g5 H& c  C
  289.       {
    1 Q. x. S6 V! E
  290.         UpdateLocal.clear();% W- W& b6 h" o
  291.       }
    4 M8 i$ A5 q- @% w% H
  292.       if(UpdateFile3.size()): g. o( |* A  ]2 ~; B! c
  293.       {
    5 `+ t6 ~; t& q' h
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 R1 z2 B& ]" _: Z
  295.         {; @/ W3 y; |8 d5 v
  296.           file=(*p).second;
    : f# j$ d+ E$ t, b& b# n+ r& [/ w
  297.           free(file);
    $ C1 N& n+ y; o3 i6 C/ D
  298.         }
    8 I; q4 d5 t" Q' C
  299.         UpdateFile3.clear();
    2 J7 d! C) U* a+ B
  300.         UpdateList3.clear();
    " H' I: R. ]1 ~0 `9 J  u
  301.       }: K- ~/ ]/ {' R( P8 o- D8 N
  302.       if(UpdateFile2.size())# Q5 f7 T" w! s$ F; v
  303.       {
    * x3 P+ e# t: D( p3 ]2 O5 w
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ L" ?; r9 B5 Y+ c  e) u0 U7 z
  305.         {5 z7 U  Z9 {; r8 T
  306.           file=(*p).second;2 u& f9 J  y, \, U# r) t0 O
  307.           free(file);2 n- d9 u/ n$ b' G! v1 O7 w! I
  308.         }( k3 |( \7 H7 V! i' H3 S. L
  309.         UpdateFile2.clear();  C0 Q; |1 _' j* B+ u0 X5 v) Z
  310.         UpdateList2.clear();$ ?: |. U; f. \+ P
  311.       }, |3 e* C: `2 h- L* ?6 J2 b7 Q
  312.       if(UpdateFile1.size())- y' X( g4 k3 A/ d; R
  313.       {4 T0 _5 H) C1 y$ m( U
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# b8 F# k5 {0 f0 v
  315.         {  f7 k5 t7 K/ ^
  316.           file=(*p).second;
    ' A: V! g& ]/ p" v- G
  317.           free(file);6 k# K/ p% c; J% a8 E7 |; z
  318.         }+ @; M# h9 b5 x$ }0 R% E2 x! J+ T
  319.         UpdateFile1.clear();* e& E% W* M6 G- D0 e0 Y
  320.         UpdateList1.clear();4 g, M: d2 K2 e2 ]; r( N
  321.       }
    / i9 @' h% I/ ?  f& R# t
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    - t) q1 v* L2 F
  323.     }3 G  Z7 f# I8 ]6 Q( i2 |* A6 A
  324.   }. \# O1 u6 m" r8 ?9 g/ h) t  E
  325.   return FALSE;
    3 M9 s- m2 S. H$ y3 Q( @4 |* f
  326. }
    ( t: w9 O5 u# Y' K* x, C
  327. * h' J; z) m# @  w) `8 q1 s( ?
  328. void CRevAppApp::ClearAll(void)
    ' D) F, S; B7 ^$ k$ c
  329. {) x  E( i; H  J6 X: H; n+ q7 w0 k& a; |
  330.   LPUPDATEFILE file;
      O! a0 n" \" Q% N- }
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * n9 {5 T+ e5 Y: S- f

  332. 5 ]& q1 {4 `7 m9 P' {* r) V
  333.   if(UpdateLocal.size())
    2 X: l9 f  ]* w9 j: k& E- C
  334.   {, i* H! ]* u, b6 s1 S) o
  335.     UpdateLocal.clear();
    ' f- q" }$ f: U, P1 K
  336.   }
    ! G# |: \$ t% U6 y! \5 x
  337.   if(UpdateFile3.size())4 q$ ~& Z4 N# c. U- x
  338.   {
    ) l+ K0 G+ i' T) {/ T0 U
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)2 r" I* B) }* \. }' A
  340.     {  k7 v' ~' \* R' a; n4 m' o
  341.       file=(*p).second;
    / ?1 |$ c+ C% ]$ c  B3 O
  342.       free(file);- ]! ?' A5 ?& G# V! j% O) {5 l
  343.     }
    ) O% t, m; x  b5 f( N  f* r: ^; S/ `
  344.     UpdateFile3.clear();2 O3 n. w7 v# R1 a, x3 O
  345.     UpdateList3.clear();
    ' w; d# f) z7 i' v
  346.   }; W2 W  `- l' i/ D$ \  C9 r
  347.   if(UpdateFile2.size())5 H! s  j. v6 J: s
  348.   {
    0 j  G# F, ]; G
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# w' k/ n( t& J2 a. [
  350.     {
    0 x7 g% v- L' ]: h7 x' V8 G
  351.       file=(*p).second;8 ~1 k! N/ m, {8 C; k* K7 T% a& E1 V
  352.       free(file);+ E& K2 f- A, w9 U1 J$ f
  353.     }) ], J) x" D4 b" A( d
  354.     UpdateFile2.clear();/ u$ J/ I' B$ h
  355.     UpdateList2.clear();
    : G  r0 g' q* h$ A( w
  356.   }
    ) C* H$ i4 u6 K& P/ y
  357.   if(UpdateFile1.size())
    / k* a: D6 K, s3 k/ i9 H
  358.   {( o% y, W/ c5 d
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  u$ a6 W$ y% R
  360.     {
      A- t4 E2 f" E+ q+ v9 Q
  361.       file=(*p).second;
    ( n) m* W  f% H; P- D- i5 U
  362.       free(file);" c. E" ?5 M, {
  363.     }4 c+ [$ @2 H/ Q- Y. R' P6 Q( u
  364.     UpdateFile1.clear();
    . t% l/ F% S# o/ i4 _
  365.     UpdateList1.clear();
    # v/ R; j3 U  @
  366.   }8 j" M. {. C6 s% T  C# M
  367. }  
    7 T/ q+ j8 J) J8 a: p$ L" ]
  368.   7 b# l1 ?1 D& {: X% G
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    4 a" F% k9 Y! A& K' G+ t- t
  370. {
    2 K$ R6 I; G0 A% O' f* ~! }
  371.   int c;! P, Z1 u! j) `* T. o: L+ z/ A
  372.   LPUPDATEFILE file1,file2;1 |8 M2 r9 g; z% W0 ]3 X
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    / r# P1 o4 e) T, h; ]8 r
  374.   std::list<CString>::iterator l;  H1 e# m+ c& d( E/ n
  375. 6 v* I  ~" t, r
  376.   UpdateLocal.clear();0 w6 O0 z, W! P* D: s0 |/ @" _% R( v$ {( Q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ) Y% Q1 L6 J! ]& X. O0 ^
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + V/ t$ e# T* D# ?8 W0 R
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ( i* H/ @7 x8 e$ e( y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    / \; v: R' r* \3 U' ]* g* }5 u, M0 N; y
  381.   if(UpdateFile3.size()). v1 }8 {3 j- b+ E/ a
  382.   {
    * i1 K  \% {1 F5 T
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)2 @8 }' _. S" r- I+ H, v5 ^
  384.     {
    % Z$ v: P0 Z0 @9 T/ H) r5 Y7 O4 m
  385.       file2=(LPUPDATEFILE)(*i).second;
    / |/ I4 Y8 [1 V  T
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / R; H- s7 V" P  \6 N
  387.       {
    4 U# H% a) J7 C2 u9 c, n
  388.         file1=(LPUPDATEFILE)(*p).second;
    # q, y: w, s0 @% T
  389.         file1->vers=file2->vers;
    + b8 C) m7 |! t
  390.       }' Y. O7 |' Z# z, X" P/ ~
  391.       else% g. X. N0 a  ?) o
  392.       {
    4 ^, ]2 E2 g' n  ^5 V& c' Z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 R# O9 b; q: S- P
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( `- K1 X' a4 e" |: ?$ x' ^
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    0 ?; D# m: R9 v8 w! ~  l4 g
  396.       }
    9 q% \! e, F$ H% [
  397.     }
    3 E1 R+ M- E" D  ^
  398.   }  I% I" m! f) \& O8 U; E6 H
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)5 S- V" d1 T" |) ~# H1 H+ I8 B
  400.   {
    ' E$ v+ n5 C; V1 {# b
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())& D4 |+ q3 w1 ?( e; z
  402.     {
    0 c% q# k( I0 Z
  403.       file2=(LPUPDATEFILE)(*i).second;; A6 K0 h2 P  B& ?
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 B) y5 D/ W0 f; S
  405.       {
    1 m6 G2 h7 @2 Q
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; F  N/ y0 i6 t
  407.         if(file1->vers!=file2->vers)5 l+ W5 N+ `7 P% {9 a7 u0 U# g- o
  408.         {( h0 M3 }( E, ~7 `' k5 z0 j
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ; C  ^2 r1 U2 O/ `' }8 ?
  410.           c++;
    # {1 ]9 [& P6 E: {2 Q: u
  411.         }/ f/ R6 N7 j, Y. }
  412.       }( h* s& z" Q. C. v  W1 w( K, {4 K- |  h
  413.       else
    2 Z0 y" G# k6 l: u% H4 V9 v
  414.       {
    # s/ z7 d# F9 Q, \+ m* z
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 q8 r, C) A' [" G& p
  416.         c++;
    8 _& W. n5 k1 C+ P, W
  417.       }: Y1 t" D* _3 Y) A
  418.     }
    1 h/ U8 _4 c* `% j* ?+ @/ [$ `
  419.   }1 \  t! X4 \3 O
  420.   unlink(".\\DownLoad\\update.txt");- i6 `; j' {" T
  421.   if(UpdateLocal.size()) return TRUE;
    9 q/ f0 x& O( H: V+ k$ O
  422.   else                   return FALSE;
    3 O" Y$ W3 b) d4 X% H
  423. }
    4 ]* D( m  Y0 i6 }
  424. 6 p" S8 |& A* c9 C2 r* C# O3 U" q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"# v5 d: r) E3 X7 L" Y+ S" G) d
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"4 q6 c: a3 Z  b# d  I5 E( s

  427. 8 @; X: C5 a; p( S9 j

  428. ( e+ S( c( s6 D" j% D/ A( I; D$ Q
  429. 8 |. b9 d+ b* e1 T# }$ V
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    + e1 w1 c1 e9 e. Z) n$ h5 s! x9 P
  431. {* d) @5 I$ b5 I, G
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    - n' S7 j- n1 ^
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 r: X5 h  r$ a  n5 l+ _* f# F1 ^
  434.   {4 |1 D# R9 }3 A# W' b/ e
  435.     char szLanguage[50];
    3 H: v$ D4 {9 v  \9 L
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; _3 L3 L, A( L7 x# R
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , O) y9 J: g$ _' ?- C, I+ S  R
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 P% k, l1 L4 B3 y% o
  439.     else                                   m_iLanguage=ENGLISH;
    " w' e% k6 Z. b9 r8 e- t3 R4 i
  440.     char szRegister[100];
    5 A& F( Z- M2 ?& r- W2 P
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" Y/ c; N4 a. w5 z$ k9 j
  442.     strRegsName=szRegister;
    & ^8 H9 U7 G7 ~0 \( G, t0 ]
  443.     char szPatchURL[100];
    . R- ]3 T3 g1 W# ~, b; K
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ e. g  F$ c- [1 |# K- P4 A/ h
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " d8 G0 m- j0 g. T# I5 L3 e) w
  446.   }1 P. k# S% h3 Y
  447.   else
      Z% G9 U( }& E% i8 [, Y
  448.   {3 K1 U" {2 c# _5 Y; ]
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; d& ^, E7 S/ h/ z' a! X/ r
  450.     strRegsName=DEFAULT_REG_URL;
    ! ~! k) l6 U9 p& I0 K( y; [, Q
  451.   }
    ) c! }2 J/ I$ C/ {3 G
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    9 R$ E) _% G# D* g6 b7 b
  453.   {
    ; C' D8 s5 [. p+ X* {
  454.     char szIP[50];
    0 |/ U1 n' x0 T# j! V
  455.     char szDIR[300];
    & A8 ]# r" v) {4 v' G7 f
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))  J: N! Z) h0 W. k: E
  457.     {
    $ h4 N) P6 L  U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");6 e0 J* V5 Q. Q; l
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");6 l+ `. O, T2 f6 {0 V5 m
  460.       strHostName=szIP;, Y2 o; A3 q2 @- m2 o2 B0 z
  461.       strHostPath.Format("/%s",szDIR);% k: f* m2 G) n6 Q1 y
  462.     }9 `) ]7 `. M, W3 R! ]# c
  463.     else. T5 X$ p, Q0 i' l
  464.     {( ?! _% D' I# n" ?% h$ v
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 b; A" L3 F- h" I$ Q" W- v
  466.       {
    $ g( i7 ^& E6 W1 q4 P
  467.         char szLanguage[50];8 _8 _$ M# J- V  h0 c
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 u+ J  Z% q: A  g8 A$ ~4 N
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: c4 W' d* |6 y- U2 k
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 ^' \8 }. `( \  n+ A# ]0 ]
  471.         else                                   m_iLanguage=ENGLISH;5 F2 n6 C4 |$ ?1 X, ?  F) U
  472.         char szRegister[100];' d  ~$ n; m, q7 E; A& w7 j
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' v( |2 B5 z& o# O  t" t0 D- D( a/ h
  474.         strRegsName=szRegister;, A7 l# A' @  s, M2 X/ |% x
  475.         char szPatchURL[100];2 u8 l+ U0 [- K) G  R1 V8 R
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% F/ n" S3 t- l& M" W6 y
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 |- j- S# h+ X8 }% \' F
  478.       }
    6 n7 ?$ U- Y0 o2 ?( ~8 J" Z+ g
  479.       else# l( \5 |' F  B
  480.       {
    " e! U! U6 \- z. Z( o/ k
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ n: _- q6 f& s0 g' f6 W. z0 e
  482.         strRegsName=DEFAULT_REG_URL;
    & ?. r6 J. H! n+ ]- U+ `& T( V
  483.       }
    ) m( M" ?/ D' h* T* Z/ A0 S, G  e
  484.     }
    " L2 M. Z8 E( V. k* h
  485.   }9 r% l4 }) Y2 q4 l" R  m. x2 \/ q
  486.   return true;
    6 \# w! u; m. d8 m+ f- w. }% z
  487. }0 \$ z+ C1 i1 ~5 L& F- Y
  488. 6 g5 Q8 G) O; h; J
  489. #include ".\ZLib\unzip.h"( T6 h& a7 Q6 L  h, \  ?
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);7 k  m2 q; _& w" V( r, g& b
  491. /////////////////////////////////////////////////////////////////////////////6 p7 k6 ^6 O' N( M) `
  492. // CRevAppApp initialization6 f! ?! p3 w/ h  {0 k3 ~

  493. 5 _3 w' W; `$ G& _
  494. BOOL CRevAppApp::InitInstance(). ~# ~" D5 ?( M. _- {# ]# \4 c5 c7 M' u
  495. {
    ! z' c( `) v$ g3 m" l4 D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    5 y  T) i! }! _6 R4 n' C* e/ ]

  497. 9 z+ R- ]- q7 X; ]7 C! L+ U/ }
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  H$ h2 f; C  L
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . k6 K2 J( Y. u# ]* R# K
  500.   {
    1 ?; x9 i4 _1 b0 v9 |
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    4 E0 a3 F' w- D* k) u4 W
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: k- V; @1 [, u* X# D2 {
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    5 h0 Q/ ^+ W. d2 n7 f' _0 `
  504.     {7 _. v' L# N7 ]# N
  505.       strcpy(szPath,szPathTarget);
    ( |8 a- T8 R/ D4 w) k1 N
  506.       SetCurrentDirectory(szPath);
    & O3 t. m( ?2 x
  507.     }8 q. W5 O+ j% U; m) ~
  508.   }
    / R/ O+ _; i& I' `' x1 ?8 s
  509. #ifdef _DEBUG
    ' V% i1 \  N) ^1 U6 v! C
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 K2 ^" ]  y2 J. T. D. j
  511. #else
    3 p1 M" r' m* A# _3 k! i
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) P) z3 w- m* X9 w# Q- W4 m
  513. #endif
    * W( ?  f* M9 K1 x- N/ e
  514.   {
    % J* F# c  B/ ]3 Z0 n: z% L: L1 x
  515.     char tempFileName[MAX_PATH];
    : [! b5 J0 W3 n  n
  516.     strcpy(tempFileName,szPathSource);2 h3 k* B% i9 _+ A" j$ }
  517.     tempFileName[strlen(szPathSource)-12]=0;, B' Z! o6 v+ R- P, t
  518.     strcat(tempFileName,"\\$CSUpdate.exe");( ]0 h8 H7 I. S$ O7 @
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 t& y! `: x, }3 t+ ]5 P2 b
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* |8 ?1 @: f5 ]  \
  521.     return TRUE;
    ! _% Y+ `1 }/ m& [- U" C
  522.   }, ]3 C, |2 W1 n3 j
  523.   // Nuke 0118: Delete run.exe
    3 Q" ]/ [/ v7 {  k) X" h+ R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );/ }2 n& j4 F2 A# O- B
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    9 Z$ R5 l1 i" Y' m8 N+ y4 r+ _
  526.   if(!ReadCfgFile("Config.ini"))! n) ~/ T! n' V
  527.   {
    : d3 ?3 k- c+ u+ A
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);( p( W$ T6 I  \" E$ N3 `: q+ j
  529.     return TRUE;
    . ?$ _( X; @0 c: Z9 b  g
  530.   }
    2 |; f+ }, j" o$ m+ j
  531.   HANDLE mutex;
    , `$ W* k' v! d/ W8 k
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    0 n! [5 h  |5 j$ U% u
  533.   {
    6 @0 L; ]- l3 T$ @2 x& l7 E
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)$ v0 t* s' W/ N6 F) c9 N9 p' n6 H
  535.     {
    - e8 Q  p7 R7 [* S
  536.       CloseHandle(mutex);+ h6 [% a' e. \) [4 B, m
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);8 m# c" s0 Z8 V+ u
  538.       return TRUE;1 A  d6 L- [( w
  539.     }" X% n% _% ^; z
  540.   }  
    9 N! }# u/ Z5 ^
  541.   CloseHandle(mutex);3 z$ ]  R, E0 A5 a9 j. y
  542. - r3 O* T1 h) A4 T. Z# v$ Y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    : @! F) k0 K$ T# r4 z5 C( I

  544. 0 c' ~- t% w" e" p3 D% A
  545.         AfxEnableControlContainer();) [+ D+ x( e: }/ h

  546. : {* b3 t/ }! k" B) @8 N
  547.   bCanUpdate=FALSE;
    : r8 |9 L9 H0 d  R1 i
  548.   dwStartUpSteps=1;
    " @( N0 C+ g+ a5 n% k
  549.   dwProgramState=AP_NOTHING;) l) ~2 @3 O2 L/ T1 |# s' c+ Z

  550. , C3 R# j8 A5 T( }; ]
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);) z  g6 m/ z( e% w; F
  552. $ l- l; L# p, X
  553.         // Standard initialization
    : t  n  p( v' |4 N" c
  554.         // If you are not using these features and wish to reduce the size
    / A; {+ q0 X( w' {0 n# x
  555.         //  of your final executable, you should remove from the following4 u  x1 q5 h2 T" G( g
  556.         //  the specific initialization routines you do not need.
    ! g. z3 w% a6 k5 y
  557. 1 K5 D1 W6 }% W* C6 w* h2 |' Y$ h
  558. #ifdef _AFXDLL9 o, K) X+ V! R4 q. q! z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL# d/ h1 l2 a& `# V
  560. #else
    ; Q1 P# H+ R+ s
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically# Z: D- u  x  q. b9 N3 {
  562. #endif" x% C& L3 z. c
  563. 0 W% \/ G  Y! Z' Y! _# J2 [- M5 ]
  564.   dlg=new CRevAppDlg;3 h9 Y4 K$ G+ A9 ~4 s: d( K3 z- Y% h
  565.   dlg->Create(IDD_REVAPP_DIALOG);, t& \/ B1 f4 K& A1 E
  566.   dlg->ShowWindow(SW_SHOWNORMAL);' B. ~6 r4 n! v
  567.   m_pMainWnd=dlg;, p7 p1 B; Y0 a' \
  568. # L8 \) ^1 d: H) k  F9 A* A' K
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);: l: j% |; E7 }4 H$ h

  570. + q! i+ z0 h: E2 a6 ?
  571. //  GdiplusStartupInput gdiplusStartupInput;& c# a. V, q7 Y
  572. //  ULONG_PTR gdiplusToken;
    : W. S. H$ K( y5 l. A0 W  p) C
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);( M3 r: U" F) C) r6 p& W% t

  574. 9 L+ h) ]' R/ E9 f* M# D) S9 ^
  575. //        CRevAppDlg dlg;
    & y% ~2 h% d: ?' |- B
  576. //        int nResponse = dlg.DoModal();3 r! N6 m# x8 t5 e
  577. //        if (nResponse == IDOK)
    ; m0 C. i( Z1 Z  B$ D
  578. //        {
    - k0 u  V7 Z$ u
  579. //                // TODO: Place code here to handle when the dialog is
    4 d( O- |+ p. E( O; [( d* G: |
  580. //                //  dismissed with OK7 u# p- H% i1 U, [
  581. //        }+ r& c+ y6 ^% A8 }
  582. //        else if (nResponse == IDCANCEL)+ s+ h  n4 i) g7 M
  583. //        {
    % D3 Y; w3 q/ r9 W
  584. //                // TODO: Place code here to handle when the dialog is6 t: j" g1 \! ~8 M
  585. //                //  dismissed with Cancel
    8 g2 s# f" O4 g" c+ V6 C
  586. //        }
    + y+ W1 p  j/ ^$ b9 R
  587. / T* e& N8 {6 C$ D' @2 Y( q
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    1 P$ T2 M, Y# P2 \* M
  589.         //  application, rather than start the application's message pump.
    % D8 u& w' ]4 \. B7 i' G" b' Z
  590.         return TRUE;
    9 r  T4 f( c3 M1 q* i
  591. }
    . ]1 O" B" a, a- V3 ]5 m! G

  592. 2 D& {  L: U7 C  p- ~, p
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 V& Z& R( z' }' b' I7 h4 D
  594. {: D$ |4 C* b/ G% e5 U
  595.   int i;" f2 W3 H, p4 w  Y% N' U: I
  596.   char *szRet;; D% ]# {6 A& s4 Q' _: R9 a

  597. 1 v1 `5 h' \' u4 ~( S
  598.   if(pSource) { itoken=0; sztoken=pSource; }9 Z% y) a% s  K: W5 I. l# k, D! c
  599.   if(sztoken)
    + p. H3 b2 @+ u) m1 R
  600.   {0 C& A5 t( ?# W5 Q
  601.     szRet=&sztoken[itoken];! b, n; r, @7 e+ F) t
  602.     while(sztoken[itoken])
    5 \6 K3 h8 g6 U. `/ t7 ?
  603.     {
    9 l- O- w$ w3 v3 W: a
  604.       for(i=0;i<(int)strlen(token);i++)  M4 L7 \  F* ?! v! z
  605.       {# V3 ?: G$ U8 x* O' H4 S7 q* g
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])  A* Q* |" t. Y- _  c
  607.         {5 Q# ~; f3 V0 z: ]+ t
  608.           sztoken[itoken++]=0;$ C& x) ~/ u5 p) ~
  609.           sztoken[itoken++]=0;0 _' I* L/ I( s* a- z2 D
  610.           return szRet;
    $ O  r" T9 M0 w. Z0 e1 I
  611.         }& l9 R, I" e5 g
  612.       }
    5 F( D6 E. d' ]7 Z
  613.       itoken++;; s& N% |3 A! C! w
  614.     }" D/ I/ t/ a, @
  615.   }
    6 T7 ^6 Z, X  q: e5 G
  616.   return NULL;
    2 k) H7 J, |7 W. y: l) y! C3 g
  617. }" X- U9 C( S! \0 f
  618. # P/ j2 b) I1 @3 ^9 h
  619. void ProcessProc(long Total,long Current)
    & ?/ G  b" W2 \
  620. {
    6 @3 q& m6 c3 Y" |
  621.         MSG msg;# h' p5 v2 g8 E8 C2 ^
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 K% `; o" r$ }& h7 [$ W% v
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));! @$ f' B1 f; H: u# h+ T$ j
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ! x- H4 q$ ]2 m
  625.         {/ W+ J% R/ i, T* n! H: e& R+ W% e! j
  626.                 if(!GetMessage(&msg,NULL,0,0))2 k( b8 q2 ?5 X, t
  627.                 {. v+ X( w! U9 b! B! K
  628.                         return;4 j' T4 l, C0 S/ V6 v0 q8 E
  629.                 }- b- S2 C3 w0 s: G: g4 p# K% `
  630.                 TranslateMessage(&msg);9 z& w+ c* c' t& ~/ l6 B" ^% P
  631.                 DispatchMessage(&msg);
    * S' ]( a$ E; c! ~' q
  632.         }       
    ' }: \7 j% Y3 E! r; F0 ]7 d
  633. }: d& L- U4 d4 h0 A

  634. 2 m! b/ H1 A* F2 g0 `" g
  635. BOOL bFirstChar=TRUE;4 Y2 c. Z3 u4 K+ j

  636. ) x6 G9 A5 u+ O1 F2 R
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    " n' a' \6 j% B$ B  S9 ~
  638. {+ [  P2 P5 S; i
  639.         // TODO: Add your specialized code here and/or call the base class* w+ H. j  a, k) K
  640.   switch(dwProgramState)  {) \) ~% g' [! L, p9 y; c$ v8 t
  641.   {
    - E5 K& q8 j/ b8 H
  642.   case AP_NOTHING:% R+ j9 L* M2 G4 S3 J
  643.     switch(dwStartUpSteps)
    / ?' Y  N- R+ \3 B/ ]3 ~1 N0 O) u
  644.     {
    3 o  ?8 t( ?# Z# b! r, _6 [0 r; g
  645.     case 1:- x: H: ?) l* I* V! k
  646.       {# T% V  Q, `$ G& W( {
  647.         int i;
    % O4 M$ L+ e  }9 k2 I8 V
  648.         CDC *pCDC=dlg->GetDC();/ Q7 S  R5 O3 K- D1 V9 c) U2 M! T4 o
  649.         HDC hdcwnd=pCDC->m_hDC;
    ! F5 [) [& [2 }, W
  650. //        Graphics graphics(hdcwnd);
    # H( Z- c2 B8 {" [5 X" O( ?* k' Z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    $ B) B" {, v# f, l
  652. //        INT iWidth=bitmap.GetWidth();
    4 U: U$ E- g# n' T0 M6 X/ t
  653. //        INT iHeight=bitmap.GetHeight();) m% g2 X, x: p
  654. //        Color color,colorTemp;9 u5 J% s8 i4 E* ~0 P& x
  655. //        for(INT iRow=0;iRow<iHeight;iRow++), A4 N, P! ^$ z6 o4 ^# w$ A2 ?6 I7 X
  656. //        {" w( E$ C' Q% m
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    2 T. V3 H) P" n0 t; S, v
  658. //          {7 Y$ m$ S5 Q' `
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    6 O0 i( K$ [! C% u4 A% o
  660. //            colorTemp.SetValue(color.MakeARGB(( B3 ~, N: B* [
  661. //              (BYTE)(255*iColumn/iWidth),
    : I: P4 F& r3 f
  662. //              color.GetRed(),
    - e6 j8 l; \' N6 Z; V" F) a. G5 H
  663. //              color.GetGreen(),7 Z# r9 x2 z# G. v/ o! ?' q
  664. //              color.GetBlue()));6 v( `* t' h3 R7 M% }" l6 r" B% [
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);" @7 O8 _( B0 D  ?6 T  J
  666. //          }
    + }1 o% `7 ?$ t& I8 ~2 u
  667. //        }( F3 v0 g' ]3 f# Q2 p/ @- Y: T
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);7 N! N' R; @; {' E1 S5 Y$ n+ I
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 [6 W, Q/ ~: r
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    4 E% M7 r1 L6 M/ s! E7 c
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 l2 f3 P, K9 _$ M
  672.         for(i=0;i<240;i+=8)2 [8 v( Q7 Q# _& r/ g, a
  673.         {! r4 g. m+ o$ S' ~( P: g
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) ]( C# g. F5 X- i
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 k! ~$ r! K$ _' X0 m5 E1 {
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 }- q  r* K# d1 H  s. u$ N
  677.           Sleep(33);+ y1 Y6 ^5 w) R4 ?
  678.         }: O8 |1 ~, e& ]. W# d# U+ ?$ c
  679.         Sleep(1000);
    & l) l" l/ |+ [! g/ o+ P  E
  680.         for(i=240;i>0;i-=8)) f- H9 o! i- U$ H
  681.         {" {, F/ z$ i, S, `0 t
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% |4 X$ G+ t! d$ l5 u8 ]; U5 J
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 G" W" F9 l, x
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ J) Z; X5 \6 e
  685.           Sleep(33);" E. i5 H! R! N9 K& T
  686.         }
    , M. |( N' ?$ V
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);6 b  W8 w; o0 d! J2 n
  688.         dlg->ReleaseDC(pCDC);0 i/ g; p9 u6 r
  689.         DeleteDC(hdctar);
    % E8 z& ^! F8 h) L. X& m! v' J& C
  690.         DeleteDC(hdcsrc);& ^; m1 y. I" f+ s; X4 k/ F- o
  691.         DeleteDC(hdcorg);4 m; r* A% }$ i- J+ r$ [
  692.       }
    5 K0 H4 T: J* L3 Z3 g% }/ R
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);0 o2 h! x) p- k4 J+ j, W' \7 L7 H" C
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 y% l  c" D! ]+ y# X8 i5 G
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");* {+ d  ~, y* L( ]
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    6 Y1 l! {6 Z4 b. |
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & Q: o, K: y" Z% u
  698.       if(!Dn.Connected())9 ^' b) N% `/ {; x" f6 e2 k) n
  699.       {4 P; Q9 K  Y7 n
  700.         dwTotalFiles=1;
    & r' F* z5 v7 f+ o
  701.         dwDownLoaded=0;) m- ]" s( d( x4 y3 {3 ~
  702.         bSilentStep=TRUE;  u# Q% N8 U3 ]% x9 `/ c
  703.         bCompressed=FALSE;/ l7 {, u' A) p; p
  704.         strExtLocal.Empty();
    $ F$ j: ?7 b2 J% \5 q- T
  705.         strFullName="readme.txt";
    : S) {4 c( o3 ?( E
  706.         dwProgramState=AP_CONNECT;7 Y* O8 c) ?7 t; ]7 i, f
  707.       }( F' Z$ Y; p3 R+ f# W) e/ Q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    " I# ?, L! p6 x/ j
  709.       dwStartUpSteps=2;/ U% |$ t% r" O$ z
  710.       break;
    # L! X' b) ~) B7 Q
  711.     case 2:+ o  q! e1 t  j+ E5 H! H. X0 [, Z: X
  712.       {& o6 j+ s! t+ y6 S4 l+ |2 {* m
  713.         int iEOF;
    1 v9 N  c! m. ^" X3 V' y  }
  714.         FILE *fp;; R- d- I1 ~3 J) \7 K% y
  715.         char szString[512];
    % J% X4 }* `7 ^& H
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    4 @5 N# j3 k8 ^: ^' O# f
  717.         if(fp)# H& @3 T( }$ l* l! K
  718.         {4 ]& G3 s% a" b0 h" m- H
  719.           do
    " d/ d, K: T4 d* ~! `8 n
  720.           {
    0 ~+ w# y6 [1 t- w2 Y
  721.             iEOF=fscanf(fp,"%s",szString);/ N2 k, G  `! Q; b+ S4 [7 l
  722.             if(strlen(szString))
    % n# B1 r! v. D3 C  O" \
  723.             {+ h, `' x  R' x$ l
  724.               if(bFirstChar)
    1 Z& Y$ Z4 A; f$ N$ H" ~
  725.               {4 I. z- m! B0 }6 _( V8 {
  726.                 bFirstChar=FALSE;0 T7 g7 v( p" W! B, z& `  S
  727.                 bConnectIsBig5=FALSE;
    ' [' {0 s  g3 G
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; B& p( t" F7 M
  729.               }
      t3 J( J9 _; V
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));$ b, q$ ?9 ?0 P! D" ?) f
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));1 w5 z! q# L" T8 r8 p. d
  732.               dlg->m_ListText.AddString(szString);
    # S; ]2 n/ G0 p5 m3 [* U
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , I0 i: C0 w" l
  734.               *szString=0;2 n6 w) L5 a) c2 h8 H0 z- s7 R
  735.             }
    7 }& W: J7 G8 p) E6 |4 k% t& o; ^
  736.           } while(iEOF!=EOF);+ @& |) O* t/ w
  737.           fclose(fp);, W0 o6 `% o3 r  v9 ]. k5 ]
  738.           unlink(".\\DownLoad\\readme.txt");
    ! S' v$ w6 C, C8 Z4 I1 C1 A
  739.           dwStartUpSteps=3;
    % X$ W! r$ E9 o" m5 Z9 T/ G
  740.         }
    + B! Q( m5 R1 ^6 j% }- c  H
  741.       }1 K7 d( n  \7 M5 ~3 x( ?
  742.       break;: R( D' z5 ^: y* U) f
  743.     case 3:0 T/ I1 h+ u6 \$ ~
  744.       if(!Dn.Connected())/ \% g: Z0 P) u6 K
  745.       {8 ]: K( a& c% p  Y5 u' {
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    7 ~/ i! n( [# D( m- ^. {
  747.         dwTotalFiles=1;7 ]- T: C+ `8 K1 k+ A& c
  748.         dwDownLoaded=0;
    0 n5 F$ I$ e( E; a) o- F
  749.         bSilentStep=TRUE;; A$ q5 J1 R+ y$ }: D7 I' t
  750.         bCompressed=FALSE;8 f, J; @+ p7 {: P! _
  751.         strExtLocal.Empty();. u+ B. i& C5 \7 N) W$ ?
  752.         strFullName="checkversion.txt";& f& y; b. E7 v+ e6 e2 @: K
  753.         dwProgramState=AP_CONNECT;3 |% u2 ~, `$ G) d
  754.       }+ g6 `7 S; J! S; d7 L
  755.       dwStartUpSteps=4;
    9 t( \% @* y+ p6 ]: C# N
  756.       break;
    $ d; Y& o; J0 L+ G! Z
  757.     case 4:& F3 e+ s1 \) n0 U0 a! L) U) L
  758.       {
    $ ?- u1 z8 M) U) A! Z
  759.         FILE *fp;' V/ y6 h2 ^; \( u# u! g  h' R
  760.         char szString1[128];
    8 [) h, V3 R, F) e1 b+ {7 a
  761.         char szString2[128];
    . H2 k" C. V+ c' g# r/ Q
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 _2 b; L/ @% }  T
  763.         if(fp)
    ! Y) ^" M7 l# W1 R
  764.         {+ p1 s( H" U8 q6 [
  765.           fscanf(fp,"%s",szString1);( p+ b1 H! t8 j# J$ F/ r
  766.           fclose(fp);! }- O1 d! H& I3 w5 y  P
  767.           fCheckVersion=atof(szString1);% g. e1 f8 L7 Y2 v4 P0 s
  768.           fp=fopen(".\\checkversion.dat","r");8 v0 L3 P) e3 q) z9 I# f
  769.           if(fp)
    + P& j5 w7 j4 X/ d: A9 U
  770.           {
    8 O! R4 e7 `+ K# k+ k6 p5 c
  771.             fscanf(fp,"%s",szString2);
    5 a5 _% P. n5 N& S" u) m; Z
  772.             fclose(fp);
    # r2 G. k2 T* Z# W3 Z, `/ S6 u
  773.             if(atof(szString1)!=atof(szString2))8 _" z& Q( |7 S) [( y4 w" `
  774.             {
    0 x6 v% i, b+ N0 b5 Y$ z0 W' k
  775.               if(!Dn.Connected())  A/ \( F. M( J0 h9 f
  776.               {2 K" C' y$ y0 q  w1 w
  777.                 bFirstUpdate=TRUE;
    0 t$ I) p/ v. P9 T' o- r# N
  778.                 dwTotalFiles=1;
    9 p4 v5 ]3 {+ Q/ @$ Z  e
  779.                 dwDownLoaded=0;3 }, r5 T$ U" A8 g7 G4 @
  780.                 bSilentStep=FALSE;
    7 ?$ p5 q# _4 }* g
  781.                 bCompressed=TRUE;0 a, F( o) r+ a3 y3 s
  782.                 strExtLocal=".\\DownLoad\";
    # ^5 h4 d  n1 R! F4 p
  783.                 strFullName="update.txt";
    ) S8 c! k( ?% T+ @+ d' S6 z3 |3 y3 m
  784.                 dwProgramState=AP_CONNECT;/ |1 f3 ]6 H6 |! G( D+ g7 c
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' w; a# d7 O! _7 a) ]8 |6 U; R" a
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    + M! x0 q/ @$ A$ X+ k8 x, Y/ c$ M
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , X; \! ]1 b4 Z% C  W  K' K' T% p: ?

  788. ) t1 e  T/ A( f+ ?: i
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ k$ F( I8 Q- i3 y8 v# ?) J1 n- N
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ( N" C* q# v7 C# @! R/ u) e) ]2 h
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)* t/ X. S% p. f5 {
  792.                 {# H' z* `6 ~% I9 Z$ e" g
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    4 N; [- h+ @* {) h/ R$ i. A
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");, u! r1 G8 m$ s" ?
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    1 ]) f8 k7 X4 Q" o. z4 {
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 c+ U6 X; `! r4 e# A( W2 ?
  797. 9 r: X! K/ f& V
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 y+ i. n. e, I
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 }& G  ], H( B- |' |2 t
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    % \- y- r3 d- U; s1 R) E. @
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) q6 y! K( w& \6 _  e# B$ z
  802.                 }
    ) x' j/ U+ f. [+ p  y
  803.                 dwStartUpSteps=5;/ }% q% e, V9 U6 h, r7 w
  804.               }$ Q5 V- l% e! }
  805.             }
    & n- n1 O. ]. K* {
  806.             else
    1 y% D+ {5 h" K
  807.             {, R) Q/ M: v5 f
  808.               unlink(".\\DownLoad\\checkversion.txt");1 t4 }4 @( N0 a' w  H4 o1 G2 Z$ U
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! l# p- g/ w8 p" J& I
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    * S' m0 x2 y; Z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");. ^4 q8 i& c8 ?5 ~+ R3 j  F, l
  812. , W/ o$ m" D5 o
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / K* B' T: `& O  E  }* o. U6 ?
  814.               dwStartUpSteps=99;
    7 W+ F) z" Q  H' w* J1 i+ ~* l
  815.               bFinishUpdated=TRUE;6 f7 U) Q) U9 R( r, h: u( t1 B
  816.               bCanUpdate=TRUE;
    2 [, x/ x& R! u9 l
  817.             }4 e1 g& |- X% q" _1 |
  818.           }
    # ^! D7 M2 n$ ^, O- I
  819.           else/ U, j+ N0 |! r
  820.           {
    % A$ G8 |- d( [9 n
  821.             if(!Dn.Connected())
    # J0 e* _5 w6 J* w
  822.             {5 ~5 {( g5 y5 B" M: u
  823.               bFirstUpdate=TRUE;$ Z* D9 O: c5 e( C4 s0 e
  824.               dwTotalFiles=1;! A' f2 a8 j* H1 x
  825.               dwDownLoaded=0;- _1 s5 J: ?% |( V  p* U4 G
  826.               bSilentStep=FALSE;
    5 D! {* r0 C3 H/ C
  827.               bCompressed=TRUE;
    % m* F  |4 ]5 j& J  i' R
  828.               strExtLocal=".\\DownLoad\";
    , v9 I& S; v& \: w
  829.               strFullName="update.txt";& Y6 V0 V8 n& C0 w* @
  830.               dwProgramState=AP_CONNECT;
    5 k% V' Q* i4 B3 {9 V! v
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( [; i7 G$ V; h& z  U
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ' v$ N( [; h0 V
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");& q0 {3 L- Y* c
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " J% \/ L% O% ]$ p, w
  835.               unlink(".\\DownLoad\\checkversion.txt");5 \# k- t2 T1 b  u3 L2 ^
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    & K" Q  @& n) R$ \9 T
  837.               {
    + ?" s) d, S! X. v
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    " Y! V- T! b+ M6 }% @7 c8 k+ K
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");' O; ]$ y! G) ?. {3 m  }
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    6 E7 l' @5 G1 d8 G$ T
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! z0 Q8 \, z! k4 G& R' T
  842.                
    6 T0 W6 f- J7 ]
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    6 M) e3 F8 Y; M, Z0 a, D; L
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ( S. f  `* D3 t/ x! ]# J4 b
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");& \, a0 Z' S* `: |6 |, ~
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% y: d2 `6 h% k1 t2 M8 _4 ^7 U
  847.               }
    $ N$ G$ V: Q9 O' ?/ X
  848.               dwStartUpSteps=5;+ O7 e4 G/ \" i8 n7 _. x5 O; e
  849.             }
    , u# u  ?0 L& Z+ _
  850.           }
    8 o/ ?1 [. \; W! v  [  m  N
  851.         }
    9 ?; r  q/ Z  }1 V% d1 x
  852.         else$ o- G- R2 b0 E' C8 ^
  853.         {, Q7 ^2 ]1 u& d  `( W
  854.           dwStartUpSteps=3;  e  a0 m& L" M, I. v* U4 ^
  855.         }) t" N/ V* A4 m0 p& ]2 E
  856.       }2 _- l' f  r: i( c0 N/ g. G; w
  857.       break;
    9 B5 L) \4 K" h( X5 b+ ~% u# D5 i
  858.     case 5:
    * W. e3 L3 m7 s$ s! U5 z; u
  859.       {
    8 ?' ?3 p  C4 A( ?. W4 |
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    7 h. q/ B. I$ a3 H
  861.         {
    $ X5 E+ ?# X3 r2 `5 {; d. q
  862.           int opt_overwrite=1;
    * F7 g4 \: X" \
  863.           int opt_do_extract_withoutpath=0;. F# ?8 e/ P& ^- R2 g5 e% o' t
  864.           unzFile uf=NULL;
    ; G5 {3 O' e  G: |! f, X6 ^+ Q3 F

  865. ( ?2 v+ q9 X5 h0 o. w% K# T' P( o' v
  866.           uf=unzOpen("Wsa.zip");
    4 z/ e' J/ e# G* r2 a& j) h
  867.           if(uf)! V9 t! J2 Y. n. B- H
  868.           {
    + o9 l$ |4 O) A) x7 ]2 p+ F/ ?
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    5 m& G7 @5 K" q( b, s0 ]
  870.             unzClose(uf);. Z1 E& u& G$ m5 _( C* S$ f: U/ F7 W. E
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 |" C% Y, l3 {4 z
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    # r& p1 M5 X- v% k7 n  a
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    * w% U9 j; f- g2 Z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 n/ ]# i" I3 Q: l$ u
  875.           }
    9 v. d, g/ O6 Q* z7 q
  876.           DeleteFile("Wsa.zip" );
    9 C$ L1 C5 F' t, H
  877.         }
    6 J2 M7 @$ y4 ~: w- n
  878. - o% f$ ^# F3 M, E8 u+ n" |
  879.         if(CheckLocalVersion())
    1 P* S4 t7 ~8 u, w
  880.         {
    ( X6 J1 ?; N! I& k
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");9 Q* q( D( T3 Y2 G
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    / ^& n% S; a2 S/ {1 X
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");( [" |! K1 s, b( F
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 n; ?0 h; Q3 S3 H$ Q
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    / z) e. t* M& h- p6 u& h% c  t
  886.           dwStartUpSteps=99;3 Y9 f4 D" l: h' o
  887.         }( Q! i# \- q5 V1 B+ I6 E6 K4 r
  888.         else7 N) L8 R- A& k, H
  889.         {. ]" r7 P6 S& T  e" J
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- r3 }) D0 o; K3 r) j8 b6 S
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 R8 ~% o5 @; j
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");- v% e% {( G- s4 s! `/ v% ~

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

$ q# G( }" W- {8 D9 X. b0 l# g4 Q- R# q1 C# z3 M- `

評分

參與人數 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客服返回頂部