CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
; W7 a( |2 J; `; x9 i
  1. / RevApp.cpp : Defines the class behaviors for the application., @! d" P  f( a, [4 e
  2. //
    . I$ z& A2 v( r- l
  3. ; b: n# ^  R! t
  4. #include "stdafx.h"
    1 a7 G( q# z3 w+ S. i
  5. ' g) H- Y+ |$ z1 i; [
  6. //#define UNICODE3 d# R, i! L; V. L$ s
  7. //#include <gdiplus.h>+ ]! @  u0 W  ]! _
  8. //using namespace Gdiplus;: ]* S- R: i5 n" g# f1 p0 a
  9. / R/ U4 A: [' y0 @
  10. #include "RevApp.h"' ]1 _" r6 f/ A9 y% \3 E
  11. #include "RevAppDlg.h", A  r! b1 D8 H4 d+ I7 \% P0 w

  12. 8 u- i5 i" H2 f/ H1 h  ]
  13. #pragma warning(disable:4786)
    : |0 O" z, A% g  L' l8 Q3 `2 o
  14. #include <map>
    ! ~. j! Z( v7 W+ |8 W
  15. #include <list>
    1 t5 U; E( Z" a$ h  j7 w/ [+ I
  16. #include <direct.h>
    4 a+ n4 @: c8 F! r' `

  17. 9 F- i; d4 b7 i( p$ Y1 F
  18. #ifdef _DEBUG5 w2 k" O% n: J& a5 O. I( D$ v+ P) W
  19. #define new DEBUG_NEW
    6 x- X6 f, c$ f7 |6 I) i
  20. #undef THIS_FILE' i$ C; v( V/ N6 `. w- R
  21. static char THIS_FILE[] = __FILE__;8 I  W6 q4 ^5 ]7 ^+ W' k5 j
  22. #endif. \* I7 w' K  P- j5 V# E% s
  23. #include "SkinResDef.h"; ?3 C: Z" f. j! e8 \* R
  24. #include "ChangeBG.h"
    ( {) W( T) Q0 b: j% I8 {/ f
  25. #include "AFXINET.H"/ k% ?& Q, t+ i) V; w1 X& [

  26. 5 _/ F3 n) d+ W$ w/ Y# t/ c: t
  27. #define TRADITIONAL_CHINESE 0
    3 w/ e, l3 X/ C. H- [+ V( n; q
  28. #define SIMPLIFY_CHINESE 18 ~1 x7 m. ~) c& E& m; I5 R
  29. #define ENGLISH 2
    5 g& C7 a; s6 ^. ?: s3 ?
  30. int m_iLanguage = ENGLISH;3 z  \7 W9 ]1 L, N/ W1 u) f
  31. /////////////////////////////////////////////////////////////////////////////
    # s8 p* g9 ?/ ^' _4 x& }% t
  32. // CRevAppApp9 D8 t- Z: j# w% g# ]. l, M; F

  33. 6 j- O2 l. `* o8 x- W# H/ }+ Q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp); |# p5 Y6 y: d  w; N/ k' H! t
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    9 ]. f8 ^3 a' e9 ^/ I( W$ k" N0 m
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.  {$ ~0 E' M7 m0 {
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!8 s3 w1 Q% }( C+ b/ {3 H
  38.         //}}AFX_MSG3 t3 n8 D! `, d4 L
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
      ~7 T" d* b: F, b( J
  40. END_MESSAGE_MAP()
    % L! Y& ?6 i& J5 O- m/ _0 S

  41. 7 s7 h! B/ s' T7 o' ~
  42. /////////////////////////////////////////////////////////////////////////////
      j! O0 |: @8 i) Z& i
  43. // CRevAppApp construction& p, h0 ^, z" o4 I. G  L8 s8 r
  44. 5 s* B( w4 p& l+ l
  45. CRevAppApp::CRevAppApp()+ V0 Q4 P; o6 {' r, G9 d
  46. {( d; W# W( D# {  }" J* r5 Z( O9 W
  47.         // TODO: add construction code here,
    : ^! O# T* r2 g; t
  48.         // Place all significant initialization in InitInstance
    ! X% O% `  U4 ]% N. m9 w+ l
  49.   bDisplayIsBig5=FALSE;+ c+ e. Y& Z1 i# X% t
  50.   bRestartUpdater=FALSE;
    - @* }4 `& A7 {' u2 {
  51.   bFinishUpdated=FALSE;
    / \2 C9 z3 A$ D; E/ ~' P9 z* U
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;( j' l5 @& v) `9 c* m. `% d! P/ m
  53.   InitChangeDataBig52GBKS();( p  I7 r) v; R0 z0 h
  54.   InitChangeDataGBKS2Big5();
    . ~' ]. l8 i- D7 C% \' W$ A8 h/ F! [
  55.         //( c! o6 y9 C4 h6 ~# n: d' E5 Y/ K
  56.         bClickRunExe = FALSE;  x/ ~4 Z8 P8 L" i% _
  57.         //" k3 h. b8 u: Z% s6 v4 [
  58. }
      E, T- I. b4 s5 _% c- O8 A' t4 `; v+ C

  59. * T: @7 V; g' q, _4 W& A' S
  60. CRevAppApp::~CRevAppApp()
    9 W( T9 I  Z! i3 m. |
  61. {
    ' v7 @0 j3 W* [" M% V1 [) s, B+ n7 F
  62.         // TODO: add construction code here,6 G% v( c' b9 a" B7 O
  63.         // Place all significant initialization in InitInstance+ q1 l4 I! a" r3 p' S6 n" r" {
  64.   EndChangeData();
    ' Q, o' y' t' N4 t9 L7 b
  65. }# \- P+ G  ^) Y( O# H" C

  66. ' k; d* @. T6 m9 Y. O
  67. /////////////////////////////////////////////////////////////////////////////
    8 z9 |4 r0 N% F- N
  68. // The one and only CRevAppApp object
    0 ]5 G4 V% |7 L9 ~3 I6 {

  69. / E) l8 X% ^" m; t) n- k" G, a; z
  70. CRevAppApp theApp;
    ' s0 q0 `3 g, l. Q

  71. 7 B) m" k, @; Z6 X/ a
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)5 J, ?1 m; X% O/ e' d" l+ w# T4 Y. N
  73. {
    ! Z  D5 J! V4 D! z3 l
  74.   int iEOF=0;4 C) V9 j, l1 x! m7 n5 _! P( M
  75.   char szTempName[MAX_PATH];  {: J+ ~& E* ~0 w* P4 \8 U
  76.   *szFileName=0;, o1 e- D6 {. t( d, A0 z
  77.   iEOF=fscanf(fp,"%s",szTempName);1 \, ~7 G" T6 W0 i' `( R' Q/ p
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')% f9 l; _) s$ k$ G" f
  79.   {6 X8 ], B5 H) F6 K% B  o2 u; m
  80.     strcpy(szFileName,&szTempName[1]);
    - b+ Z0 p9 j, X/ L& }. C, c5 I
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)1 ~( M9 f+ y6 k
  82.     {
    4 u! N3 t7 E8 ^5 Q& J. ]7 H
  83.       iEOF=fscanf(fp,"%s",szTempName);
      X1 {8 I" F, F8 J, ~- v- R
  84.       strcat(szFileName," ");' n" q* O& L% J% q2 U
  85.       strcat(szFileName,szTempName);9 G* d6 g& c& k9 P! T
  86.     }
    ; E' _3 V6 E& e: P9 k
  87.     if(strlen(szFileName)>=1)
    - N( u% I0 V6 f' O" e, ~
  88.     {
    ( Q8 O4 p2 D& H& {# t4 \4 }9 A/ Z' D" a
  89.       szFileName[strlen(szFileName)-1]=0;# s+ u7 h- w+ r  h
  90.     }
    : M- k/ ?; ], x9 W5 i7 c+ |8 m* G
  91.   }
    1 d9 K( [  x; j$ M. m2 D3 h6 _
  92.   return szFileName;
    - C$ n5 k3 E' }, U
  93. }% _2 z4 i& h) n$ D

  94. 2 q0 `8 p1 J' l& z% {3 T
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)) O" Z* Q! _& u/ p+ d$ X: w% e: X
  96. {. E* M! {$ u8 L% Z- S& u
  97.   FILE *fp;/ f& t- c* Z1 N" r7 t
  98.   char *key=NULL;
    ' j. p- K* R; L5 p" K; Z
  99.   char version[MAX_PATH];) p1 u3 V5 q! n7 a$ l* o( X" E
  100.   LPUPDATEFILE file,olds;' m( |: K: }" J3 g# v9 Q/ X
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , m3 e. W' w; n& [

  102. # Y/ \9 T$ C: K( K2 D( W
  103.   UpdateList.clear();
    2 h8 p! i  A. J7 P4 q$ z4 F; _0 ]) ^
  104.   UpdateFile.clear();( q" t" m8 N3 O. F: e, P
  105.   if(GetFileAttributes(filename)==-1) return false;
    ) ~  J; g; O  h6 Q) C! ^
  106.   if(!(fp=fopen(filename,"r"))) return false;
    7 U; }1 V0 A4 r% A+ K& [0 w7 p
  107.   fscanf(fp,"%s",version);
    - S/ w" x. {7 d1 T) Q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    4 w8 p1 [- ^6 k5 l  B" N
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 v1 Y. T$ F; ~- A6 z0 B
  110.   {& x3 o: c; {" {! C' m5 o  e4 D
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 s4 w- d1 q* F9 ?2 Y/ s
  112.     fscanf(fp,"%s",file->path);6 ]# U, _/ M6 |" o" e
  113.     ReadFileNames(fp,file->file);9 C7 T4 y  E9 |% O% m
  114.     strcpy(file->full,".");
    / _. X) p& C$ L
  115.     strcat(file->full,file->path);' P# T9 ^  k/ P: ]6 p) V' k, O
  116.     strcat(file->full,file->file);+ X, j2 z2 c5 G8 k
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())4 w' X0 S5 w, W: b1 O) f
  118.     {9 k  e6 X& W. A5 B  p; b# @( y
  119.       file->vers=(float)atof(version);
    * X/ `* ~1 ]( k$ I( n
  120.       UpdateList.push_back(file->full);% N: m! B% a( S1 T8 y% Y% t& L7 K
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));( y7 p  Q. }9 B& m  d$ v5 i! J
  122.     }0 K& b4 k5 M- ?" H1 O$ ^' K& O
  123.     else
    & w6 h+ v8 B) Q2 M! R
  124.     {* u  E5 R- h" ^" r  d
  125.       olds=(*p).second;2 ^2 y  n, I+ _3 u7 i! ]4 I4 h
  126.       if(olds->vers<(float)atof(version))- P' N! Q; b+ X- C! E. R) w/ W
  127.       {) U; D8 E# d5 o* k
  128.         olds->vers=(float)atof(version);. L! n) Y& m% [/ _
  129.       }* B. x5 B4 P& J8 c5 `8 T; W
  130.       free(file);' A7 z. t2 r3 Z6 P
  131.     }0 o% u% |# X3 m( F# w2 X1 [
  132.   }! o, u0 Y' V# Y( T
  133.   fclose(fp);4 T' ~+ N! f$ d3 m6 G& l" O
  134.   return true;- H# N' V0 m8 y, c, ?8 \! f
  135. }" J0 \. V* f1 E/ ]! C
  136. 1 f( K# z8 ^6 p8 S+ ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
      s4 P. X, s6 T( a# ], p0 n
  138. {
    5 N. X* Q' y9 j# @2 K; b3 W2 _
  139.   TCHAR  szFull[MAX_PATH];
    ! m" Q" E( _# ~4 k3 O6 G
  140.   TCHAR *token,*inter;+ k! V. h4 B, |! f1 M; p
  141.   *szPath=0;# v4 r: ^7 T' n$ }- @/ j- M
  142.   strcpy(szFull,szFullPath);
    * P/ }# ~( o1 Q( R4 M
  143.   token=strtok(szFull,"\\/");
    ! N& U- [) v' k$ C) X1 R# L' O. x
  144.   inter=token;) j6 }4 k, P) }
  145.   while(token=strtok(NULL,"\\/"))
    ; q. N" ^/ Y, b3 `3 d  E: k# @: c% w
  146.   {
    2 z5 `, I0 X( W8 a5 i& z. G
  147.     strcat(szPath,inter);0 A9 x: D* m. c. I0 F2 K+ Q3 M% t
  148.     strcat(szPath,"\");
      y9 Q) |& c* W' X9 o+ P9 w3 C
  149.     inter=token;" R5 W9 h; J/ E+ V7 \, X, u& C- D
  150.   }+ G- q+ H- H' P
  151.   return strlen(szPath);4 ?4 F' y" B7 {4 V; T2 p
  152. }, J* V& E& z, n# |; C0 ?" @

  153. - i) Q7 A/ ~/ q: ~1 C& L5 \
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    0 L% H7 ?; b& l
  155. {. `+ ~! M- |8 m4 F2 m+ {
  156.   DWORD attrib=GetFileAttributes(Target);/ ^' y. m" h: B, V. Q
  157.   if(attrib!=-1)& s! U( `; _& |) }
  158.   {$ S6 S+ U! b4 k4 Q" _) f8 U3 }
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    8 W* s2 g1 j' k% \9 B+ O- w
  160.     {
    7 K' T& y; V5 X8 Z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    % ^9 F+ o* f; L* h( v
  162.       SetFileAttributes(Target,attrib);  u& Q6 n1 s9 u8 j' ?
  163.     }
    ' L: ^7 ]7 E( d3 t6 H) S2 n
  164.   }
    $ l( i' {  {; O* R8 j% D) _
  165.   CopyFile(Source,Target,Erase);
    " M  z: A7 Q9 `. U, B. o
  166. }6 @. E7 Y7 {7 i4 ]/ B9 M  Y+ T1 p3 ~
  167. , M8 P# f+ M4 I1 i% y4 X/ t( z1 f
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    6 F1 T. O4 U  s/ E& p7 X- T
  169. {- f8 P" r/ l) ]3 {& h" X
  170.      FILE *fp;% I2 v( |2 B3 v5 I
  171.      char  szBuffer[8192];+ P5 H$ M6 K- L$ w
  172.   va_list  argptr;
    , W0 o3 `" J7 I( G! Y0 Y: }; L# A% G

  173. 9 j: P7 h! b1 v  q& u# e: l
  174.         va_start(argptr,message);
    $ u" `* p, ?( t& q' U
  175.         vsprintf(szBuffer,message,argptr);& S8 k  m( S, ~  U
  176.         va_end(argptr);! h( D. N4 \5 H3 W
  177.   fp=fopen(FileName,"a");3 \" H/ b7 Y6 G/ O
  178.   if(fp)
    ! K( N: ~; k& I" v
  179.   {
    # ]8 S. Q, k3 m$ N
  180.     fprintf(fp,szBuffer);
    6 K. o1 k* e. @3 \% J
  181.     fclose(fp);
    # c) k3 h$ Z. f- y$ G1 N
  182.           _flushall();4 D0 R/ q, P, p1 k
  183.   }$ E9 n0 c! e* j
  184. }
    - o0 ^5 m( _' W8 Z
  185. 1 Y  V) s6 Q0 d
  186. BOOL CRevAppApp::Fclearf(char *FileName)' P8 t2 f# ?, |+ _" X
  187. {
    $ C; U7 A! K6 h
  188.      FILE *fp;8 v* x0 e/ G3 [# S: ~7 n/ p
  189.     DWORD  attrib;
    & q+ v2 n) l; l
  190.   attrib=GetFileAttributes(FileName);, D+ n8 Y$ y3 A
  191.   if(attrib!=-1)6 f* ^; E4 `% o
  192.   {, G- ^/ S9 _: S, s) l8 K2 @
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    & x* X. p/ Q. [( r1 [
  194.     if(!SetFileAttributes(FileName,attrib))
    * K' V7 @& c& c& M" ?
  195.     {
    7 }5 b" D: B/ q* ^/ u
  196.       return FALSE;$ e% A: z1 K/ t
  197.     }
    ) I* ~% \: A% f3 f: @
  198.   }
    * c  r/ R8 s/ ?9 M( f
  199.   fp=fopen(FileName,"wb");
    4 D- n- B5 m, j4 q4 }
  200.   if(fp)7 q( L7 S7 z% T, w1 r- p( G
  201.   {
    9 w* G3 r3 q5 ~1 O* p& @
  202.     fclose(fp);
    8 f) O  ~" D( V& a9 v
  203.   }) P' F" o1 [; x5 P4 A! L( O5 y& k
  204.   return TRUE;# d* B* m! Z% w; r  m6 l: J
  205. }
    + L/ j$ W$ G1 s; ]" V5 ^" [

  206. ! M2 ^6 t* w4 o
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    # ?* [  V- W% [4 Z1 j
  208. {
    % O* S& p$ Z- x/ O' n
  209.   char filename[MAX_PATH];  P$ X8 i" h9 W; A0 h. n% W7 [
  210.   LPUPDATEFILE file,olds;  g$ l0 L$ i0 E9 B4 @- ~( A
  211.   std::map<int,CString>::iterator i;, l, S- B: ~( i8 @, Y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 r2 a2 L% t  x1 ^
  213.   std::list<CString>::iterator l;
    : ?( {- ~+ _4 j1 d! A

  214. - m! o3 f! V. R( M# k* _5 C( \
  215.   if(bFirstUpdate)4 ~9 p% h' S4 W" e0 ?' P
  216.   {
    3 f: }: F, Y; W' F& @  R2 _+ _* R
  217.     dwCurrFile=0;
    8 h$ p; d3 p$ s$ J' }9 a
  218.     bFirstUpdate=FALSE;
    1 j! f; W8 r) t: p6 f! _! g
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) k) M' T7 o4 l8 a& S9 A) {; j
  220.     {
    5 d% G- H4 m8 x
  221.       dwTotalFiles=UpdateLocal.size();
    8 J) A. T" {/ U* N9 S4 Q4 Q
  222.       dwDownLoaded=0;5 y0 R3 M0 ?+ O% a' {- A
  223.       bSilentStep=FALSE;
    # _& E; A: ]) N% {
  224.       bCompressed=TRUE;# W; R6 v+ ~6 ~' C+ \* k9 ]0 l" C
  225.       strExtLocal.Empty();
    # `2 X) Q! C2 J  O. l! u
  226.       strFullName=(*i).second;
    ! e6 {& _7 u1 D8 X' N3 u1 S+ x
  227.       dwProgramState=AP_CONNECT;3 M$ }) M3 B+ n: F& u4 a5 i6 `
  228.       return TRUE;
    ' \- ]8 w8 p5 l! e
  229.     }
    + ^$ _3 M6 H% P1 }4 q& i1 d# M# b" Y& s
  230.   }
    & u: O8 x0 W+ R/ a3 U
  231.   else if(bRestartUpdater==FALSE)
    0 E1 |+ r+ @# S% Q; m1 o" n
  232.   {( E& E: Q( _; u7 O. b6 z; x! x/ j' ~
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())/ Z9 z  k) H/ |- d* q9 @& b
  234.     {
    ( I/ D/ W2 W8 |5 B1 u
  235.       file=(*p).second;% Y. w# J% H% W# f  Z
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())1 J/ g1 ~- i* r0 c
  237.       {! P/ K  [4 ?! [! v
  238.         olds=(*p).second;8 f1 [$ [9 u+ R# I3 c! O
  239.         olds->vers=file->vers;
    1 _- w& T( ~( N; z! T' f; `
  240.       }& m! R, ^" `6 r- K2 [
  241.       else
    8 D( w" n- ]' N+ s
  242.       {% Q: c6 }3 x8 r  ~! K# l
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 ], h* d; ~% f, s. V4 }1 k
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* r& Z* U6 g9 n) {8 r
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    & l8 p- G  ]- o7 }; o- a% p- Q. @
  246.       }
    * x) `- L- S2 V2 {9 y: s
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");$ v# K- ~! W7 x$ ^2 u3 ?
  248.       sprintf(filename,"(%s)",file->file);
    * f3 |% O' _0 ?  G
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 J/ Z# U. t$ n- o* a
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    0 u( O3 X  s, t- R# d3 n
  251.     }( b7 y' w* C8 {! p" [
  252.     dwCurrFile++;
    # I5 X! E- c! b! ?) }) U: }$ Z- c
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), B7 O& K& _. r1 [' [
  254.     {
    , F3 R6 L' |; E
  255.       bSilentStep=FALSE;
    ! L$ y7 }1 ?3 @
  256.       bCompressed=TRUE;
    # I  s& E; V- a% ^! S
  257.       strExtLocal.Empty();' S+ B0 K" K+ i, ?
  258.       strFullName=(*i).second;
    . i: k# G" S% ~: x
  259.       dwProgramState=AP_CONNECT;
    8 L; `" \3 l% Y8 C6 e; ^$ ^* ~
  260.       return TRUE;: c: q7 D0 }4 T2 o' U- G6 x/ j. G
  261.     }, S+ P& O8 ^1 h
  262.     if(!bRestartUpdater)
    ! ^! Q- L2 M* Y; m/ |% x3 i
  263.     {) U& @) i, `8 `8 ~! e' s4 {
  264.       int iCurrSize,iFileSize;  _, b1 b/ ^* u8 J, Z3 O; c
  265.       iCurrSize=0;8 ]$ \5 \! z1 g+ S/ T
  266.       iFileSize=UpdateList2.size();
    5 [0 s6 }1 [* V  ^# s* u. `
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    7 @/ T; R1 n, ~" L# b6 T
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");% y' c4 C" t9 {
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");4 C2 ]9 r% J  |  e1 L
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( x3 Y2 M8 z3 D/ K0 W- ?& `
  271.       Fclearf(".\\update.dat");: v- |) d! P- p" ~4 i4 \
  272.       Fprintf(".\\update.dat","Bloodyf\n");, \* M2 f! ~' c5 K# }
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++): e, z$ Z2 u, o* D/ [. l
  274.       {
    ) p8 g; U% I. E
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())$ c& r) T' d  g5 h* ]2 M
  276.         {
    4 D( u6 U. D# w) p
  277.           file=(*p).second;
    $ A/ h/ Y- [; x  E  S' v7 C8 M
  278.           sprintf(filename,"(%s)",file->file);
    . `" o" x6 S8 f' o3 q8 A: l/ V$ G
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' Z7 v0 _/ ~4 Z& x6 j: q
  280.           iCurrSize++;
    , n/ m  Q1 S+ T' S
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) q" R. @! K) f+ P
  282.         }/ S$ t8 P% {* m+ D2 |
  283.       }
    / X( Q8 w# ~0 |$ @4 J
  284.       unlink(".\\update.txt");
    . }9 @$ ~+ V0 A. v4 b7 l( `
  285.       unlink(".\\update.tmp");
    " ?4 H) o2 g) N& g6 i
  286.       Fclearf(".\\checkversion.dat");2 k# P: r( n7 L; m& \1 F& G
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    9 h; l4 s8 Y0 K0 @& ~
  288.       if(UpdateLocal.size())
    6 k- T% y1 n+ T, i+ ~5 {/ e* U# b" v
  289.       {( [/ d4 \& `% {/ k
  290.         UpdateLocal.clear();5 g1 u6 L  B: Y0 @
  291.       }2 q9 |2 s& P9 M5 p- x( f% ^
  292.       if(UpdateFile3.size())' _; |7 O6 e- S
  293.       {
    + g! t/ s) m% L; C7 t
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  P7 C8 Z- h  a3 N$ T
  295.         {
    6 Q& L. x$ V  B9 r0 p: {/ W/ M8 e
  296.           file=(*p).second;
    * s/ L7 n/ H, `5 O: f
  297.           free(file);! U% q8 }) ]" ^4 Q3 J+ y
  298.         }
    8 e+ h& M1 H! U! R- G2 j: a
  299.         UpdateFile3.clear();
    1 H" ~/ _" o. G0 _; N! x
  300.         UpdateList3.clear();; j7 m/ }5 Y" x8 o
  301.       }
    % Y5 P+ k8 j0 ~5 _& o5 |2 x3 o
  302.       if(UpdateFile2.size())2 z3 P# l! v; y2 f' b. {
  303.       {
    ; w; b- D! |6 ]! r
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ X0 D: j( L4 ]( {' B
  305.         {
    0 M& H& z0 W9 r+ Q; g2 ]/ q7 ]
  306.           file=(*p).second;! e' G3 E( |; b7 Y$ j
  307.           free(file);+ @2 c; {7 F# `1 Y2 p3 r
  308.         }
    $ {0 ~. P' ^$ W& L& d& t
  309.         UpdateFile2.clear();, S% W0 K. d4 C. F# c& i
  310.         UpdateList2.clear();
    + i  U% @/ K: H, v
  311.       }" K7 R5 I: j& Q- C2 ]! V
  312.       if(UpdateFile1.size())
    6 ^2 m# K/ o1 L  D
  313.       {, O; O( {% [$ h+ j, r; `6 V6 V
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 p. N* ?( k' s7 i( D2 y+ @8 R
  315.         {2 y# D0 F( P% `" o$ J
  316.           file=(*p).second;
    / r, Q/ s+ c& C0 ]  E
  317.           free(file);
    " P  \5 d5 g* p+ b
  318.         }
    ! G! @3 }! r& X0 ]3 L
  319.         UpdateFile1.clear();7 k: x! D+ g" r3 k3 }6 u
  320.         UpdateList1.clear();' j& E$ D: O$ V( I) C3 a& @
  321.       }
    0 O4 y% G( f1 g2 w0 z8 v' W
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    : U6 M6 H- I$ B/ F( C7 n0 M
  323.     }+ W/ Y3 {  u$ {7 m
  324.   }, z% {, k% c  Y
  325.   return FALSE;0 |$ r% X& a3 a! r% m5 |2 R1 d
  326. }6 l7 y; f+ i% Z6 l- Q9 f7 b

  327. + U7 j  m5 c! y
  328. void CRevAppApp::ClearAll(void)6 D3 H0 e3 f4 u1 i# p6 {( E: k
  329. {& R9 V" {% B7 J' X
  330.   LPUPDATEFILE file;
    + U/ a6 s9 E+ R% Q& W! m% N
  331.   std::map<CString,LPUPDATEFILE>::iterator p;  O( ]9 L- }) y
  332. " J* S" m9 |% X7 H$ m/ D, R
  333.   if(UpdateLocal.size())
    3 d" v0 c  Z# }5 @4 v" e- [% y
  334.   {! b2 B( Y0 J& L/ q
  335.     UpdateLocal.clear();
    $ ^- I5 |; H8 r. r
  336.   }) d3 b& T) i. K% C2 w* M) m
  337.   if(UpdateFile3.size())
    ( h: |, g3 ]2 g3 `
  338.   {, ~0 E8 x( [1 q4 |  {2 U+ A
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# |7 @% G; Y4 r/ V' R1 W
  340.     {! Z( b& b' V/ P* \8 w& u& K" p
  341.       file=(*p).second;8 ~* `: e3 r( Z* ]2 @1 ?  T% k
  342.       free(file);( E9 C0 Q1 y. W( b
  343.     }
    . I. P' m8 b, l+ p" s, Y
  344.     UpdateFile3.clear();
    $ s1 _6 k7 a: q( f8 r5 q0 j6 o
  345.     UpdateList3.clear();7 H( Q. a1 Z8 R9 w- V* x+ [# `
  346.   }1 o* g. |  J( _' t
  347.   if(UpdateFile2.size())1 t0 k( ~- ^4 J( A
  348.   {8 |) G) X; @2 d! k6 s5 Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( o. A, e, Q# Y0 @/ q
  350.     {
    3 M: \" \8 `, g: Z6 z* ]
  351.       file=(*p).second;7 j0 E3 W* l. h
  352.       free(file);& d/ y) b  [: _9 P1 d
  353.     }0 \6 y# E4 g, f' i& X
  354.     UpdateFile2.clear();' N/ m9 [3 e1 f
  355.     UpdateList2.clear();6 R8 f/ Q& X3 B+ C9 z3 p. s' {6 z( |- n
  356.   }* U* `* I2 v8 x: W$ _! f
  357.   if(UpdateFile1.size())) s* L# A. \  ]& I  A4 n8 w  u
  358.   {
    2 p/ E( l- _$ C
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # X$ i3 ~- `0 [0 K% s- J
  360.     {
    0 y5 e# K& k% i2 i
  361.       file=(*p).second;
    ! z+ F5 ~. T  y7 g0 B& i8 i- G
  362.       free(file);% e* s! e8 l6 Y/ W1 C, K& q
  363.     }
      n! v3 U/ Y; j! C3 z* i+ l0 h; P
  364.     UpdateFile1.clear();
    % L- [: f4 I  y6 u' t
  365.     UpdateList1.clear();% w' N0 d: ]' ]5 U8 s
  366.   }& [& m9 e5 t2 n
  367. }  & r) N5 }% S- M( ~5 q5 y
  368.   
      \2 w# |7 C8 |& v
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    - ?, q. Z. W$ h% w1 v; E
  370. {1 e& w  Q0 U" _5 c
  371.   int c;
    % f- n4 i5 V$ g9 U5 [& [5 V6 I9 d
  372.   LPUPDATEFILE file1,file2;
    6 G: q% X9 M3 e' [( L
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;+ ^; `! k# i+ o0 F8 Q
  374.   std::list<CString>::iterator l;
      n  M" N$ }( z3 U5 S, r

  375.   M+ ?8 \7 i( N: k* F
  376.   UpdateLocal.clear();0 b; O5 q. c" X& }6 u  u- \& x
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    # C8 f- w. v. g% S/ Z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    # z: _" |6 w1 Z# |5 i
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ a4 ~* p, v  H( Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    : k8 w6 F  e/ H+ T# g* U
  381.   if(UpdateFile3.size())4 ]+ o9 V" E6 i8 Q' l5 q' d; W& v
  382.   {
    5 r' }( o* J* }9 w5 \) e
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)1 d/ \8 ^/ W3 Q% J1 w$ I* p: z
  384.     {
    , L4 ?, [/ H* t# O( ]6 g5 A
  385.       file2=(LPUPDATEFILE)(*i).second;$ j' Z# C; O% P" F
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 P- L2 x$ _/ M7 t* j" D
  387.       {
    ! a" M4 s3 R$ w5 v+ s# V6 P1 K1 N- E
  388.         file1=(LPUPDATEFILE)(*p).second;
    9 ?9 @0 _; a2 X1 K
  389.         file1->vers=file2->vers;
    ( c: \& {3 E+ L( c" d4 @
  390.       }8 y, R! u$ e, [2 o  w
  391.       else
    / k, C$ Y7 b6 f
  392.       {0 m& _# w7 W. E1 A$ ~
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 L: v; n3 e* U) D4 U$ Q. n
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    : W1 `; F" p* G+ I- p8 M; x2 _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    9 p& @" S6 V2 J9 b( p
  396.       }
    . V" o: E! S, I: X( L  f
  397.     }* |) A5 ?3 H: c7 H# g
  398.   }4 b" y+ x' |! b+ s
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)3 z+ y2 C+ O/ q9 F& g1 u5 E, d! g
  400.   {7 d! r7 j# J3 T% M' D" X  Z; f0 c! s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    # Y) Y5 S! S8 T
  402.     {; n9 l9 E9 k. ^8 C# Q: B; g
  403.       file2=(LPUPDATEFILE)(*i).second;1 U& N( h5 X2 o( E
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 u& ^4 J# u1 ]: C% f/ f4 ~0 P
  405.       {
    " ^  o" Q9 Y) v' ?1 `
  406.         file1=(LPUPDATEFILE)(*p).second;8 f  v* A+ Z- i0 D. [
  407.         if(file1->vers!=file2->vers)
    4 d; d- |9 S2 s5 D1 ?* b1 W. t8 B
  408.         {: h4 N/ ]+ ?. K2 l) f6 @
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! K1 T( }6 h& h' F: h, T$ K
  410.           c++;
    7 n- @/ n, H% z
  411.         }
    ' z/ |9 l, Y" J0 y4 X
  412.       }
    * ^" R# c  N/ z- X2 _1 Q
  413.       else. [! l5 @* r% b# `' G0 C
  414.       {
    ' L! r7 B! s9 J) G- S: l% r  T2 G
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * }9 k2 \: t! t& y3 ~
  416.         c++;
    . d: E# c( l. h
  417.       }" _$ \6 ]& ]9 J" m
  418.     }
    6 Y, B$ m. `, D- G/ ]% @& h
  419.   }- N4 g3 ^+ n# `0 i
  420.   unlink(".\\DownLoad\\update.txt");1 n$ y9 M  {4 q1 h: S. h
  421.   if(UpdateLocal.size()) return TRUE;2 w! F, q( L8 [+ [$ u$ c2 Q
  422.   else                   return FALSE;
    4 i; m# m5 R5 X) ]8 e3 [" o. L7 E
  423. }6 d0 z' v* x# |% I8 {

  424. 7 K8 j( V' E3 Z( t8 G) D
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 o# t5 [2 K4 ]( I2 y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"" S% p  j8 i5 Q1 I, [

  427. ) t- l0 j4 o: u. k/ O

  428. ; b" z; C- U) v( j% ]( X" i, R

  429. / x9 |6 u4 O; H+ v6 b5 }) m1 R
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ i. L8 {9 C. L3 d: n9 d
  431. {0 ~/ h) b5 P2 u- _# O1 q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;" A. I" q( Y- d
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " I. c9 Q  L$ G. k# x! d$ I) a. j
  434.   {
    & |) T  g  ^& O1 _3 E( X
  435.     char szLanguage[50];; Y8 w/ P/ s# \5 M5 [
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 S3 u, R6 X# k4 \
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# g8 X& N5 J8 ~/ d) G# t- n
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;( I% d; ?: f( [9 H5 E% n
  439.     else                                   m_iLanguage=ENGLISH;
    + |# i2 f. M5 h  }$ ?5 x: g, v
  440.     char szRegister[100];
    0 `% M3 |" f+ s. G5 h2 x
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 [' U  {/ R* z! f5 S' Z
  442.     strRegsName=szRegister;% G$ p; ?$ i. |/ F5 A) J6 p
  443.     char szPatchURL[100];  U) v0 ^3 ^" ~0 L! l' D
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ @5 Q9 J* z  Q( f5 d- z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 F) G" ?/ E2 G
  446.   }
    % g! ^3 R- R9 d: l* l' M
  447.   else5 R& J3 V* }( x5 N9 y% M5 [
  448.   {" p! w- Z1 @6 }# m4 j+ r! J$ q
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) i0 F$ R! {9 U$ ~0 Y8 v
  450.     strRegsName=DEFAULT_REG_URL;$ R1 K  n* I1 _/ A
  451.   }9 i* d" N: I5 d! ~, J
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    9 v- A# k; b- F% r9 v$ }1 J  }
  453.   {. N- f) S' z! S: o% _
  454.     char szIP[50];
    : h6 ^, a1 h, v
  455.     char szDIR[300];5 g  ~* Q; \" f4 a+ X# T
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))3 N9 E: u$ ]9 y5 e. {. C! U! j- F, U
  457.     {
    . }( v+ h8 a  x  s
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    $ M0 D2 j0 ?9 A0 ]' b0 n; a* S
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");7 ^6 v0 j& f2 T) C0 S; |( l
  460.       strHostName=szIP;
    2 e3 C; k  |  E7 R
  461.       strHostPath.Format("/%s",szDIR);/ m7 ~* h' c) }5 d* F) e
  462.     }0 \2 v6 h: ]( e, V0 A9 b
  463.     else4 v; z9 e5 u& H7 [1 a
  464.     {
    ' w4 i2 d- M7 t4 j1 v( b3 k& H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , f) H% `7 z8 w- B
  466.       {7 V( n, p2 c* `8 r* t
  467.         char szLanguage[50];
    8 S3 x3 `3 R" w% F" @- @" A7 r
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    7 v) ^; D) U& J4 r  s7 ?
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;( ]2 M. s& M8 b$ f7 r
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' t0 C% {( Z; g6 a
  471.         else                                   m_iLanguage=ENGLISH;
    ( ~; Q) b* @+ L' o
  472.         char szRegister[100];
    7 c+ L3 e" A  T- V) w
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : G' j$ B4 V& [0 M/ w& z
  474.         strRegsName=szRegister;1 V- ~9 g) {& t! @
  475.         char szPatchURL[100];+ E3 I4 P% N' f
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : A& L1 |  S6 T8 l
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    0 s. B7 B  U( l' [3 J  b+ K
  478.       }) ]8 z8 F: W" x0 ]4 }7 X: l
  479.       else
    ( e; E6 O4 U4 R' |
  480.       {
    ( ]* h4 e# u: Q7 x# I! b
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 @- m( D' ?& }( d# t: Z
  482.         strRegsName=DEFAULT_REG_URL;" Y; [3 r2 A' R1 w) v3 [! G
  483.       }
    ) t$ [# P' w4 a" A: X
  484.     }
    + R: Y1 \6 [! F* o2 l+ N& ^
  485.   }' s- c) [* |, O' C
  486.   return true;
    ! t" J4 t( T, y# P7 Y
  487. }9 o0 G% ~6 o! m5 c

  488. 2 G8 \& ?% w  @9 D# X" l
  489. #include ".\ZLib\unzip.h"9 g; Q, K9 R+ x6 i
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 T$ i! X2 h- V: Y' p# |. m
  491. /////////////////////////////////////////////////////////////////////////////# G. k# x) N# H2 ^+ C! l! \
  492. // CRevAppApp initialization5 z: {% g7 y. [8 `3 S9 `: V9 o& ~
  493. : }5 {' v( ^- ^$ A. j
  494. BOOL CRevAppApp::InitInstance()  e3 u( y1 ?1 g8 K( y  }
  495. {
    3 V9 M& |9 C' {. A
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' S% r8 t4 B4 D: Y; L
  497. + I- K6 e+ y) Z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);: H: x& w; r$ H& M" c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + x' Q1 ^; U% l9 W' S% ?
  500.   {
    5 g4 {1 m4 T( I% P* \: O2 J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    0 Q( i6 {: i/ i7 r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);% T5 g3 ?( H3 `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    1 N- h! a* y5 |' F$ q5 p* w8 b
  504.     {8 K, H" |" w$ |8 a* q# O. E6 p
  505.       strcpy(szPath,szPathTarget);4 i" Z( T6 a8 s
  506.       SetCurrentDirectory(szPath);. `. L: P/ e$ F2 ?" C; I
  507.     }
    % T" h. \. r+ e/ A
  508.   }
    - B1 t6 t* A: @1 D( t) q3 S
  509. #ifdef _DEBUG/ }8 ^& l& Z; l! T  W- s% G
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 {7 l6 b0 o8 ~' }! u) Y) t. s$ \0 i
  511. #else
    * K, E& c+ C/ t% ?; i
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) R3 k  ]- k0 t/ y8 m4 F( X
  513. #endif
    , c' v3 e& G. }/ V
  514.   {! f- s7 R  k; u4 ^! d4 b1 R" L
  515.     char tempFileName[MAX_PATH];
    ' K" b6 Y0 E- ~" Y* ?$ ~5 e5 o! w
  516.     strcpy(tempFileName,szPathSource);2 `# C! ?- @2 ]  {4 ^
  517.     tempFileName[strlen(szPathSource)-12]=0;
    : ^: w" t9 `- [: G5 M, `- g  h. y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");# p6 m( d% d2 V
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ( n% X3 i  z6 B; u# m3 A) A
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    , g  j$ y8 D; I/ Q: ]# t7 h
  521.     return TRUE;
    : R; m  X" B* V* G# `
  522.   }
    7 k; S+ a. k9 G( V
  523.   // Nuke 0118: Delete run.exe
    2 H$ {) r' i0 H3 Z3 l7 Y% J
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );- N# J3 o* Y1 u- B
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    5 j0 Z' k, q, Z
  526.   if(!ReadCfgFile("Config.ini"))
    / e7 ]: V, b  q
  527.   {8 ?; y. C+ s  a. ^6 ]2 g) l
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    3 R3 C) N; ^( Z
  529.     return TRUE;
    - x- P% v, U0 k- L% V- P; P; \5 I
  530.   }
      `# j9 b" j+ s6 p' U5 l6 a7 H
  531.   HANDLE mutex;
    5 ~* D- W6 H/ T. q! _! B6 u
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    , w* q1 s1 ~7 x
  533.   {" h% B9 }& x) L& x0 z. b; p# z/ J
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 \" q* x* {+ v' d
  535.     {
    ! y( T# s3 J8 x
  536.       CloseHandle(mutex);/ T9 M5 W7 }5 T- Q4 Z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& W' d4 I; _7 j; S5 z7 z
  538.       return TRUE;
    1 `6 }3 }4 X* Q4 H6 q
  539.     }
    ! t; {- a: B4 e3 `1 L1 f
  540.   }  , p- q7 \% \8 I8 m7 C! H  A
  541.   CloseHandle(mutex);* h, Q6 {* T3 o: s4 G5 `

  542. ( k7 o, d' b7 c6 @
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);& g' X  h$ ~. M0 E

  544. 1 M2 P  R6 [) `% c
  545.         AfxEnableControlContainer();
    ) K- Q; A9 {$ M, Z" o% V
  546. 4 j7 v7 G- ?( n: n8 ~
  547.   bCanUpdate=FALSE;1 Z8 n  b6 t( k* d2 w# t
  548.   dwStartUpSteps=1;( C; \+ {) p' x4 h' R. y/ k7 o
  549.   dwProgramState=AP_NOTHING;
    & L! Y# z% |  q9 q( i0 E" p
  550. & L  F- d1 m% ?0 i% i1 |% Z4 v5 x8 Q! F
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ' M( R& L& T/ S! ?5 A2 e

  552. 3 @& X; D. L: J  O& I
  553.         // Standard initialization  e) b) G' u; S: L
  554.         // If you are not using these features and wish to reduce the size
    ) R( {% }* Z8 i0 x6 z
  555.         //  of your final executable, you should remove from the following; s) i6 o4 f$ N8 R
  556.         //  the specific initialization routines you do not need.7 V% \! y# c  Y9 C

  557. . R. n. l1 m$ d. p- v) {
  558. #ifdef _AFXDLL
    6 F" J  H$ S9 |8 b; J: W
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL! Y. b; Z' j& `
  560. #else. E( k, l  d3 m
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    4 _+ _7 q* I: K5 U% W
  562. #endif4 B1 i: s5 H! p

  563. . m# G' Z5 v6 m2 t4 @9 {  j8 P- g
  564.   dlg=new CRevAppDlg;2 f8 U  {2 R4 M- S% G8 ?1 d) E
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    6 v" n6 J9 u# `: ^5 Z+ q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    4 W4 I' j% ?8 N; L0 f
  567.   m_pMainWnd=dlg;/ K7 ]2 ~: t) a

  568. 7 q' x- {! C6 I  o
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, }$ }' t6 s% m
  570. 8 [) V% e/ n6 l
  571. //  GdiplusStartupInput gdiplusStartupInput;$ [+ q: S/ b9 I8 N4 M" j/ {
  572. //  ULONG_PTR gdiplusToken;
    . I/ Y  l7 C6 _3 R4 E# P
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    / T9 u" y- w' U6 P

  574.   K3 m) j' Z0 z) b
  575. //        CRevAppDlg dlg;
    % T2 x7 y: ^# j: u" K2 z' W. v
  576. //        int nResponse = dlg.DoModal();7 w% X: s" p8 r5 S0 d
  577. //        if (nResponse == IDOK)5 ^( e! d* T4 ^' E
  578. //        {
    + n$ Z7 S* X7 y7 ^. ?
  579. //                // TODO: Place code here to handle when the dialog is; H! H( K" J; S7 y( W' z
  580. //                //  dismissed with OK
    # j, s' R' \6 l2 \* O
  581. //        }) Q8 ]9 B- c0 x, Y. I( _4 `
  582. //        else if (nResponse == IDCANCEL)
    4 A, k: O3 {9 _$ W
  583. //        {; A5 A; p# d  A4 s
  584. //                // TODO: Place code here to handle when the dialog is
    ( t$ ?4 I8 O4 T5 X9 d
  585. //                //  dismissed with Cancel2 u# v& U# L3 k
  586. //        }* w6 M+ T/ g: b6 y' G6 D6 f( e
  587. - i* K7 F" w% ]7 R  R
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    , f2 Z  k' X% J% b! @7 Q6 g0 u8 @
  589.         //  application, rather than start the application's message pump.
    ( @2 _/ Y* J. @% T7 @  s+ c
  590.         return TRUE;/ m/ U0 ]9 t; \/ g- f  `
  591. }
    - M3 D' o: J! o" O

  592. . s% y3 b/ A# r0 C" F; E' I
  593. char *CRevAppApp::strtok3(char *pSource,char *token)) v+ z" G% n7 u5 |$ c! H
  594. {
    ; v$ k" _% Q, R& H
  595.   int i;: A1 n( t3 B( _% `3 n) M* `
  596.   char *szRet;% u6 v0 y! T2 g8 ?3 [5 Z+ w* y

  597.   {+ x2 J! S/ q# i1 p' T* ]: L( m
  598.   if(pSource) { itoken=0; sztoken=pSource; }: r: ~8 [% W4 g
  599.   if(sztoken)% Z+ u1 i6 m8 j# o# j( e' D3 T  o7 t1 [
  600.   {8 J6 T2 c" i* `' d& L
  601.     szRet=&sztoken[itoken];
    9 W5 I, k# j% [8 x( |1 Y7 y$ M- H
  602.     while(sztoken[itoken]). C& D7 s2 y/ X& H
  603.     {5 C) b5 T: t  j+ A* S: N
  604.       for(i=0;i<(int)strlen(token);i++)
    4 h! K. S" ^* N
  605.       {
    * j/ w" z  o6 H, u  P  z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' p; v7 d. S6 a( ^1 U2 I9 ~" t4 k
  607.         {
    " A6 Q, Y9 V0 n9 r; ~
  608.           sztoken[itoken++]=0;& f( `+ c$ K0 U
  609.           sztoken[itoken++]=0;. A. _) x  U; N4 R0 ]! F! Q
  610.           return szRet;
    0 e3 ?. l5 W& b: A  y  [8 o
  611.         }
    ' u8 ?, `/ l( R2 A
  612.       }
    + \0 ~2 d& D5 r5 v* F; @( Y
  613.       itoken++;
    : h3 y/ c2 M( A0 W. R
  614.     }2 F' i! Z* j0 k0 ?; J
  615.   }9 [" Z  w( {  h" @# q2 X& g, R
  616.   return NULL;
    2 x9 E0 A3 E9 k- s9 P& P5 [7 j
  617. }
    - T: ]+ b9 ?6 W+ Q8 k3 U$ ~) x
  618. ' r! z/ S) K* N! Y) G4 {
  619. void ProcessProc(long Total,long Current)5 g0 U% \* p- f' i
  620. {
    $ @2 W' F7 s9 E0 h2 N- U1 ?. P
  621.         MSG msg;9 z; C3 D# i) P, n
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    , u& a7 F- B( n' M
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));. I8 {% L% i6 p+ r  b
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    - z" y- d# j* B4 V% G' G$ s* y
  625.         {
    % ?- J  ?% R5 K+ [
  626.                 if(!GetMessage(&msg,NULL,0,0))
    1 Z7 J# r% v8 ?; \& S
  627.                 {
    8 I/ t$ e5 O) A3 {, a4 I. _# c
  628.                         return;1 j, ?1 x) A2 M! O
  629.                 }' r6 \, n8 J' b. Q- \
  630.                 TranslateMessage(&msg);7 F2 T' D% m2 G! |* b1 B
  631.                 DispatchMessage(&msg);( N5 M& L; R2 I$ W& f$ b
  632.         }       
    / e; W- X. B+ Z1 B: C
  633. }
    ; J; q: c0 \* V, n* ~. i" z% o
  634. + K0 s, R, F9 O% G; c- D* b
  635. BOOL bFirstChar=TRUE;
    . v4 D# X' t& c5 U4 M

  636. , [. S) M0 P$ @' U8 B: o3 C4 `
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ I  a% Q. A9 [) C# P* M6 H4 R& q
  638. {9 g. J, _* U0 W& I
  639.         // TODO: Add your specialized code here and/or call the base class
    5 i  ~/ u/ k, w3 E3 U& d% w
  640.   switch(dwProgramState)
    4 k1 }( J7 \' F: e+ z
  641.   {
    5 c) a) ^4 r* e( C8 N% D
  642.   case AP_NOTHING:4 y" k# N9 w+ e1 m3 Z% G
  643.     switch(dwStartUpSteps)
      h6 ]. m1 _& a2 {4 ^: Y0 v
  644.     {. g) K6 {, |! D# h3 O8 _
  645.     case 1:
      Y4 o( Q* R: [1 J# \
  646.       {
    " ]  b! E7 C% [8 y1 Z* Z7 |7 k
  647.         int i;) w8 m' [* O- k3 I
  648.         CDC *pCDC=dlg->GetDC();
    - b: o+ K- p% C& q4 y
  649.         HDC hdcwnd=pCDC->m_hDC;& F5 m7 I) e" `
  650. //        Graphics graphics(hdcwnd);! E' P, s/ f7 M1 _$ q4 R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");# k: D7 ^- q3 [5 t
  652. //        INT iWidth=bitmap.GetWidth();
    0 K0 ^* T) Z* Z; L
  653. //        INT iHeight=bitmap.GetHeight();' q, Z: |8 `) R9 N6 H6 S2 Y- K
  654. //        Color color,colorTemp;
    $ m1 S0 Z4 E! v, `! U* o
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    % G/ _: ]' h9 G4 G: ^
  656. //        {# X( y' [: c6 u9 S, B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# p2 [7 ?4 G: k% v; r' I
  658. //          {
    : ?9 J: E" L  W& d+ F" ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ; f2 j: Q! b- `8 c* Q: |# M
  660. //            colorTemp.SetValue(color.MakeARGB(# H% _: i7 C( t% n1 w/ I! I
  661. //              (BYTE)(255*iColumn/iWidth),% z* I6 P# w" }( p! d; T& c
  662. //              color.GetRed(),6 p- b* D9 s* g5 x/ \1 u( [& E
  663. //              color.GetGreen(),) y# }2 l) m$ {: C% X% D2 ^
  664. //              color.GetBlue()));9 H2 _  _( c$ I! h* B  b: X
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    5 V' e! `. a( F% `7 v) N" Q
  666. //          }
    " d* ^) K; T# T* T' _
  667. //        }
    2 s0 \( g* R: `" H4 O/ y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    9 F1 J, @. r( f# N9 X! K# `
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - C7 Y5 ^3 `; `6 L# F) i* O" ~. f& _5 `
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");7 e; ]* P3 R: ]( f6 \$ f2 D9 K& G, Y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      ^2 h( |4 F5 u: v6 Z: l8 ^9 r
  672.         for(i=0;i<240;i+=8)1 F& u6 ~- Q* l: s9 W
  673.         {
    / Q+ o+ C0 Q; f! r) A
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ V6 B* h% c1 x( f: ]  F
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 M* A. a. _' w0 a# S7 I$ i
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( ]+ B  A3 _" b0 K$ _- w$ \3 W. Q# H
  677.           Sleep(33);
    1 d& k0 Q! ]" F
  678.         }
    3 K0 X& d) O- y6 y2 ~" C9 J
  679.         Sleep(1000);- l3 V6 k" G) x7 e! |
  680.         for(i=240;i>0;i-=8)
    " W# x( |8 S  @4 c7 G5 c
  681.         {
    # ^3 O/ g) ^8 E3 c6 K( P
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 H/ [! Z* |+ a( ^6 ~
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" G4 I+ g9 v6 \7 l8 G
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" k! B6 m; Z. ~6 Z# l: X
  685.           Sleep(33);
    9 M% C3 D) V4 T0 N: }
  686.         }
    9 [: r0 C& s  u* ^% |' T! M
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);+ `( h$ Y% f9 b$ @& u. G
  688.         dlg->ReleaseDC(pCDC);6 |: K8 R' l8 V  f5 ^/ ?0 R7 Y
  689.         DeleteDC(hdctar);
    5 g; C6 F) O( k) F% h
  690.         DeleteDC(hdcsrc);
    6 B. o! j8 m4 S( ^
  691.         DeleteDC(hdcorg);
    ) G8 f& i9 Y6 H: X# t7 r( i, ^
  692.       }
    # U( \1 C# X; k7 l& R* Z8 ^
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; g' c7 S0 y& S  }( g9 \* b0 u+ F4 j
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    7 }& ]- X& d! u# `8 n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");) C& @5 N9 y; a
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    6 k9 e$ t/ O. y# _+ g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 Z. s3 w: d8 G  d( h
  698.       if(!Dn.Connected())
    $ v2 E9 i" [' T& f% g, v' z: `2 m
  699.       {: v9 n2 @9 o) P+ A
  700.         dwTotalFiles=1;
    . g# L; Y: C3 X2 i5 E5 U! f, |/ d- V6 A
  701.         dwDownLoaded=0;$ d& J  u7 i3 q$ `! s
  702.         bSilentStep=TRUE;
    * g9 n1 g2 W" z' z; M
  703.         bCompressed=FALSE;: F- [- L8 O3 u, s; l$ s, l
  704.         strExtLocal.Empty();
    : r' k0 }* _, p/ }
  705.         strFullName="readme.txt";, q) K. q6 q+ E% h0 ]2 v( T
  706.         dwProgramState=AP_CONNECT;
    " l/ K) M3 w: U1 F3 k: V# e
  707.       }+ t3 K7 n2 w1 A; I- U' s# m2 g
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();& L: X6 G1 L& \3 ^
  709.       dwStartUpSteps=2;% Q; h5 M) [; t( m- @
  710.       break;
    & g" W+ M3 J3 l  ^+ d0 e
  711.     case 2:
    3 ^6 N' l" @4 Z% m. F3 q
  712.       {
    8 r1 C/ a1 }% q/ V2 T: c, K
  713.         int iEOF;
    ( A/ `1 X( B; C. I: S; c! N
  714.         FILE *fp;) j/ Q" i2 W5 j( k; r
  715.         char szString[512];* F4 R* a0 e4 e: i! z
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    : D* a; [5 \* C
  717.         if(fp)* Q" R2 n5 y7 p% `: P5 n
  718.         {
    ) j8 s3 C# K6 t: _; {, H3 `" H
  719.           do9 F* n, f: N: r  v
  720.           {
    0 {/ x9 z4 u! A2 G( v
  721.             iEOF=fscanf(fp,"%s",szString);
      @+ l' z6 F1 ^& z
  722.             if(strlen(szString))
    ) b: D# u( ~4 A  E% S. R+ ~" L
  723.             {
    ) z+ E- a* L' {7 D& U
  724.               if(bFirstChar)  v4 g9 H9 N! X- B9 Y/ e
  725.               {
      I8 K* p8 z3 y. v5 R8 ]
  726.                 bFirstChar=FALSE;
    1 h3 f3 S7 W, ]7 {3 A
  727.                 bConnectIsBig5=FALSE;
    - M+ v( S3 l/ S1 u" n3 o
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;: h. \* g  a' j' k4 s! y
  729.               }, f- a( k8 o7 u5 m
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 N5 l6 `7 g8 Y9 I
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));" g- l3 ]0 M. [0 b1 |
  732.               dlg->m_ListText.AddString(szString);- o0 L5 I2 L' p/ k( X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 G1 {) W" b9 [) R9 f) Y' k
  734.               *szString=0;! E, h1 o- U7 N1 s; H6 O. H
  735.             }# f/ |5 ~( j" e7 C
  736.           } while(iEOF!=EOF);9 O5 }1 a0 g1 r* S# h: W( q( O
  737.           fclose(fp);7 r. g% L& x1 c7 R; h, }6 H
  738.           unlink(".\\DownLoad\\readme.txt");2 Q/ c( U6 _6 V. U  u
  739.           dwStartUpSteps=3;: k0 j, j( R4 x" C. N0 y0 ~/ c* |* \
  740.         }( K6 `% f& A3 Z' W3 p
  741.       }
    ' s; m1 i; F5 B
  742.       break;
    ' O& v+ Y; [+ u1 X
  743.     case 3:
    $ O, q3 ?2 P' [+ G3 R' n/ v) H  m
  744.       if(!Dn.Connected())
    2 g8 \5 t% ~- j' v3 d
  745.       {1 ?% j1 l, i0 v" }! c/ J; @
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    1 w: `1 q8 B: T1 h% P+ H
  747.         dwTotalFiles=1;
    ; u+ E8 C. P, V0 q1 A4 ~
  748.         dwDownLoaded=0;
    : {0 S8 a' W( x( k# a$ J; L
  749.         bSilentStep=TRUE;
    7 W, Z4 y% [# a8 m2 O! n
  750.         bCompressed=FALSE;$ n9 r; D: b: I: V
  751.         strExtLocal.Empty();
    $ N2 e. {  u! Q8 D! D
  752.         strFullName="checkversion.txt";; L5 f4 g1 m6 w8 k- Q& V" {
  753.         dwProgramState=AP_CONNECT;
    ' H" {& U* p. Z- Q, l* u( b0 z
  754.       }- M6 ?& S# q  A, q* G, r9 h6 r
  755.       dwStartUpSteps=4;
    3 _) b2 y9 r8 W% E
  756.       break;. f7 i3 ^  ?6 G; P0 {
  757.     case 4:7 F9 L- o; {& d4 _
  758.       {' _0 j2 `# U0 r+ e/ v# \
  759.         FILE *fp;, n/ W# |  O. }5 q, p, ^/ |
  760.         char szString1[128];
    ( f" Z. S5 c5 G! t5 E
  761.         char szString2[128];1 M* H* Y4 j9 R
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    0 m" |7 U% L8 @  E( |) K5 g6 g. k7 c
  763.         if(fp)
    1 ^( k$ N7 {& z2 ?# R: B9 A
  764.         {7 N8 N: n; g' @8 O9 S( E/ F
  765.           fscanf(fp,"%s",szString1);( \0 S( R5 u+ G2 ~, J5 C
  766.           fclose(fp);" k" _( n7 z  X* ]- f
  767.           fCheckVersion=atof(szString1);
    : {: W' F, I* F! Z2 g$ W# C
  768.           fp=fopen(".\\checkversion.dat","r");
    5 O! k& C4 N* t" t+ j* _( c
  769.           if(fp): s) w% e5 l' o2 \
  770.           {+ R2 ]& d5 R% h) Q+ d
  771.             fscanf(fp,"%s",szString2);! N. V4 ~0 a7 _
  772.             fclose(fp);
    ' N! J( V9 T6 k- g( Y
  773.             if(atof(szString1)!=atof(szString2))
    - M9 F( [! O' v
  774.             {, F) H/ B9 m1 J$ p9 O. P6 U
  775.               if(!Dn.Connected())
      T( ~: X. W: T) I
  776.               {
    * X8 Q9 @8 Z( g/ ?! Y
  777.                 bFirstUpdate=TRUE;
    ) b: M1 u6 d; o! b3 T# l2 J
  778.                 dwTotalFiles=1;
    3 l& \: `3 b/ B) A. L" V
  779.                 dwDownLoaded=0;6 d9 M9 ]; v( M8 h, A
  780.                 bSilentStep=FALSE;- X& B  E( G" ?. {; e9 F* I5 b
  781.                 bCompressed=TRUE;8 |4 C3 n! ~& Z9 i, T2 _5 b- x
  782.                 strExtLocal=".\\DownLoad\";
    % ^! ?( C: V" G$ u
  783.                 strFullName="update.txt";
      Q" ^/ q* K& F& \& y
  784.                 dwProgramState=AP_CONNECT;3 I) p- g0 @, n1 M
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + z' a& f( M9 v4 @) O' A' l+ M- c
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & S2 z/ s3 h0 Y: U6 i/ u2 w
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
      i1 o5 }( j6 Y7 r

  788. 5 C% y( x4 T4 _2 E, z& L& J" A- x: k
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* K: z3 N! D0 U
  790.                 unlink(".\\DownLoad\\checkversion.txt");, c( f! B' Y2 V1 o$ S
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    7 D7 G1 c5 G( x) a2 i( `
  792.                 {
    ! ]6 D. T% \% |; ]/ D
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");0 _3 N5 Y' p; V% {" u% t
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");- V# i7 ?. o- ^/ N$ y9 t
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 O& Z1 \4 W$ X7 F0 K$ k& ?* b
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 A3 n  P. a7 j2 D( j

  797.   C+ o" W& o2 ~
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");* T" a. y8 v/ H4 z- `+ S7 Z
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 q1 p0 w% c2 l4 e7 u
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; L- M* v# |4 G3 |, G
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * n: ^" H7 i  V
  802.                 }; m" N9 g2 x. p- p6 \
  803.                 dwStartUpSteps=5;* Z* O* R  \  e, T- f" ~
  804.               }
    3 g4 @$ j6 G8 v: J) V
  805.             }) q7 E+ b& x* X+ k! M
  806.             else7 |( i) T4 s$ G+ s& y' U( h( z
  807.             {$ C6 s  t: O0 Z8 B3 G: g
  808.               unlink(".\\DownLoad\\checkversion.txt");
    " T! y; Y$ ]% x
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 f8 a) m1 b8 t1 \' R
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 a3 T7 \9 a/ J5 M1 g( q, N3 Z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ d7 K2 _2 P9 z% v5 ^- S4 z
  812. ) F  V- i; U# _0 n) j  z" P
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 M  W/ F3 W2 `/ A) l  q6 f9 C4 L
  814.               dwStartUpSteps=99;& ]% O1 z, ^- b
  815.               bFinishUpdated=TRUE;
    # S" K0 z/ b3 j  H" S
  816.               bCanUpdate=TRUE;
    & E# v* |7 q  }) O
  817.             }1 |0 y( [; q! i
  818.           }; m: S2 v: c7 V5 y4 A
  819.           else2 v% |7 ?2 d( n8 y* m
  820.           {  {: I8 _1 ]; K, ?. Y6 U
  821.             if(!Dn.Connected())
    % \3 K4 O& W1 A
  822.             {% q( S" h) X; M, }& y0 j
  823.               bFirstUpdate=TRUE;
    ' ]" [3 Y- G" Y4 v) W2 `* q5 n
  824.               dwTotalFiles=1;# I2 i/ W' a7 g$ D, }( P
  825.               dwDownLoaded=0;: I' S5 I/ f4 b: v. `- P
  826.               bSilentStep=FALSE;
    5 N! g. x+ f3 {8 Q" g: v* A% q+ B
  827.               bCompressed=TRUE;& i6 ?7 F- ?: c$ u$ g& z
  828.               strExtLocal=".\\DownLoad\";
    / F, u' U  s' Z* U
  829.               strFullName="update.txt";% r' |5 U  L3 P* c, t$ I; _
  830.               dwProgramState=AP_CONNECT;  d+ w# A0 y; q  J
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. d9 K- x3 R: V1 H2 |! Q7 A5 B
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");! G+ x( `. Y; E4 `/ Y& D
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 X+ c( R$ p; Y: @
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; H" h2 O  i0 n; f
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 U( f6 T! ~! r& w
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    0 J1 K$ E' E1 h0 a! ]
  837.               {
    + g/ p$ N7 R7 `% d  T. K4 |" @, m3 h8 Q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    & V* m* }% O, K
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    2 u1 g: `& Z; o
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    % N# b& B5 x, g
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & P4 A1 d9 o6 t0 k5 K0 }- [
  842.                 6 R$ t: _7 |# n( @
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ v5 H) G: B& Z3 T0 ]0 _" S; R
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # h* K4 W- b$ I& ~& ~, w
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 `8 ~* i$ ]) E5 }! Z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ k5 C' Y$ b% F5 I
  847.               }
    % r2 ^& S3 c/ m7 P" Y
  848.               dwStartUpSteps=5;
    ' F1 m! o5 C& L1 L# o  P# \
  849.             }
    , x3 i. W0 }% Y. n
  850.           }
    ( f  Q' ^* W) l' x
  851.         }
    - c" @5 ~' O& k6 R3 M
  852.         else
    : x# m1 {* D7 C8 }; Q
  853.         {, U( K8 D' @9 J% _
  854.           dwStartUpSteps=3;
    & i* }% f9 G1 s) F, s  W$ Q
  855.         }
    ) ?: E: I5 H9 e# U* V
  856.       }
    % Q) _2 Z( Y) t
  857.       break;
    * v- d' U% D3 P3 w4 K
  858.     case 5:
    6 A$ k) z; N, D4 d0 y
  859.       {
    / y! z2 z: x( Q; W2 T. P
  860.         if(GetFileAttributes("Wsa.zip" )!=-1), m$ v6 L" f3 S1 C
  861.         {" }9 _( m; ?: E9 L! O- D
  862.           int opt_overwrite=1;
    1 P7 v: s2 x% z
  863.           int opt_do_extract_withoutpath=0;
    * {2 P2 w1 K  ^9 q# [) `
  864.           unzFile uf=NULL;" L0 \  R# i2 R( l  r! u) X0 |2 X

  865. ( s" d* e) u; m
  866.           uf=unzOpen("Wsa.zip");
    : i! g, s; y( _0 v
  867.           if(uf)
    - `3 d: Q2 ~  T$ Y" N# a
  868.           {" \+ G  |# E" b. A' x- Z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);. F) P& j# S" w1 Z, @0 t$ o/ M! ?
  870.             unzClose(uf);# n, j7 T7 [  K+ f
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");6 k5 |" }; F) H2 E/ {8 }: S
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");; f/ F7 _) T" X* Z* a, o
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ! m" j+ t/ H8 F9 x
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 `# V7 V  |2 J9 f$ P2 M  u
  875.           }6 x! H. [9 z, O0 w
  876.           DeleteFile("Wsa.zip" );
    , ^7 Z, k9 N# ?( q  R0 c% _3 t# _
  877.         }
      }3 D$ v! L" @1 ?) y# i

  878. ; X6 l/ v! Z+ V% ]# N8 ]
  879.         if(CheckLocalVersion())
    ( Q$ D2 x, Q* _" D( k
  880.         {
    4 W$ }/ ~+ W# Y; r1 H$ G
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");" _$ e. q& ^3 ?5 ]: X# J4 z
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");/ X) ^) c2 W5 R* r% o' r3 R
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ; Z" b8 R7 F' P: ^6 d
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . s9 I' i- v% ~8 E, |
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    * m! j8 B  h( {/ t$ C" ]7 r
  886.           dwStartUpSteps=99;
    : ^0 K! `* Z# i. s; g7 R' K
  887.         }! @% }" c8 D/ E6 D. l: M
  888.         else
    , Q+ `) t& g- E
  889.         {6 E' U/ {! c' o( Y. f, N/ \1 {& `
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    6 W. c- {' a6 x! p
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' [* C! ]4 e  C( T) N
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");% B4 V0 n2 K( Q6 l

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

2 S; ~$ l% @2 j3 R4 e1 L) t3 I
1 R+ p! @- O4 u7 J; k

評分

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