找回密碼
 立即注册

CSUpdate.exe源代码

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

; x$ R& ~2 T( W
  1. / RevApp.cpp : Defines the class behaviors for the application.
    / A! q. I  x+ q. I1 f
  2. //
    / P( }- _8 B% r) ~7 `5 ]

  3. & E# E5 z" f8 z4 q6 `
  4. #include "stdafx.h"
    2 o' j7 @, E3 E* B, o% ~( Y
  5. 6 N2 j6 n: d" \/ M; m* x9 H7 X( r
  6. //#define UNICODE& Z- H/ F" T0 Q0 Y6 U$ W7 D2 F
  7. //#include <gdiplus.h>
    5 @9 K) b6 r) n2 @' M% B
  8. //using namespace Gdiplus;
    ; q# w+ T: y: k  U! r0 a! c' \

  9. # k( _- w5 e+ k& b! q+ J5 ~9 X9 V
  10. #include "RevApp.h"! q' J! Z5 D; }) @
  11. #include "RevAppDlg.h"
    - B# |4 T5 i) W3 A& {' R

  12. 4 z' V4 f, ?) e) B4 O2 D! K3 y( o
  13. #pragma warning(disable:4786)
    6 n7 {0 G# m0 B# P' F
  14. #include <map>
    ; B6 T% j  w7 \4 R
  15. #include <list>
    6 l* `2 W; ?1 U% \
  16. #include <direct.h>3 ?1 a, t' H+ I& h, ~) }

  17. , A* c: N5 j( M
  18. #ifdef _DEBUG
    , i! R$ {% s- V6 S% v/ w3 U2 v" G! W
  19. #define new DEBUG_NEW( b* ^% ?8 C* i6 ~) v  ]/ V! U
  20. #undef THIS_FILE
    . R8 r6 m2 e$ ]. x
  21. static char THIS_FILE[] = __FILE__;
    8 ~+ |' I7 R( N/ O' J. o
  22. #endif# d) {4 n7 X- H7 z, y
  23. #include "SkinResDef.h": ?9 d& l  v1 i
  24. #include "ChangeBG.h"9 \- S# ~! |' W  c
  25. #include "AFXINET.H", X& C, w7 y8 \
  26. 7 M. c( T% I' Q+ q( Z$ @/ W2 Q7 a
  27. #define TRADITIONAL_CHINESE 0
    + i. r$ {! n& w3 X7 B
  28. #define SIMPLIFY_CHINESE 1  f, A# [& w0 W) d! c: @
  29. #define ENGLISH 2
    . G" w# [5 x9 b8 Y
  30. int m_iLanguage = ENGLISH;
    9 o" l! D, J% A; d( a
  31. /////////////////////////////////////////////////////////////////////////////, |: I' M$ K3 }7 ~& p/ G) P0 H0 E1 @  Y
  32. // CRevAppApp
    ! k( Y9 e. p1 w" t4 Z9 r. J: l, x; ^

  33. ( Z8 t( z2 g6 \: B
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    8 _% U8 g' _8 J' p1 _6 B; A# g; Z
  35.         //{{AFX_MSG_MAP(CRevAppApp)# a9 _8 m& R& {! p5 ^7 Z+ c
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    - K- x: p2 O, i% n  d
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    . m0 E- x' F- e3 ~
  38.         //}}AFX_MSG( l1 A/ L! `2 w( j3 v
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)' O( n# c7 V/ X! w
  40. END_MESSAGE_MAP()
    8 O7 _7 d  @3 b4 \/ _. C- a% g
  41. 1 m! z$ L3 L' t
  42. /////////////////////////////////////////////////////////////////////////////, p6 {0 u& Z8 x5 s
  43. // CRevAppApp construction) ]; B, k8 o5 Y" E" l/ ?4 c& @7 x

  44. / K0 v7 F. G' Q8 I2 O
  45. CRevAppApp::CRevAppApp()
    * ]" G$ ^! ]6 ^
  46. {
    " E1 A9 c& T2 p8 E0 Q! J
  47.         // TODO: add construction code here,
    ; ~! n$ o8 g6 |, F7 f5 ~8 ?7 n
  48.         // Place all significant initialization in InitInstance
      g2 y/ s* K; i& Y) V
  49.   bDisplayIsBig5=FALSE;
    / u. M; ~( a6 B% u, \
  50.   bRestartUpdater=FALSE;
    + |8 W6 r1 n+ I, \2 z
  51.   bFinishUpdated=FALSE;
    - H0 A' F7 s9 A: T% S6 P
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;  s# T+ z* ]5 ?" C3 F1 O& M6 W1 N
  53.   InitChangeDataBig52GBKS();
    0 E! l( r& C$ u9 K7 o1 ~4 ~0 A
  54.   InitChangeDataGBKS2Big5();3 O8 o& @& e" Y- A
  55.         //
    6 ?; [2 ^' o; C* [+ E8 x: C0 b
  56.         bClickRunExe = FALSE;
    ) Z6 h/ W( @! ?3 J. W
  57.         //
    + b1 `+ u) P+ Z% e/ Q
  58. }' M2 ?+ S! r, X- u  _. Q! p3 s# B

  59. , S  I. e/ b8 I) j" p+ r) q
  60. CRevAppApp::~CRevAppApp()4 p6 m  S" m" e
  61. {, t1 G9 O) q# W
  62.         // TODO: add construction code here,' _$ r& U' i4 l3 ^+ @
  63.         // Place all significant initialization in InitInstance  c+ p. ?+ _2 s0 }2 L
  64.   EndChangeData();
    6 }  c( t3 N* N
  65. }9 V. k3 u0 d0 [, h
  66. * K4 }7 X4 j7 A$ T5 _7 ^& X2 A
  67. ////////////////////////////////////////////////////////////////////////////// w* }5 p2 D$ \% b2 S. p) B" ~7 [
  68. // The one and only CRevAppApp object+ \9 K5 Z# I/ Q' m8 W
  69. / b0 N" g5 k6 ~- `( W
  70. CRevAppApp theApp;
    4 _% I' q  |$ Z1 ^& B  ~

  71.   ~- O, A8 W; v# ~8 ]0 D
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    " V5 |  w- z6 ?' C% i4 f: w! c
  73. {8 k! T  X6 n( p1 X% q
  74.   int iEOF=0;
    , g* t# q9 C: Y9 H. ^& u
  75.   char szTempName[MAX_PATH];
    3 J# c& }5 d7 x6 z4 H1 h
  76.   *szFileName=0;4 |7 ?# b- o8 c
  77.   iEOF=fscanf(fp,"%s",szTempName);3 G, C% O% N/ o1 U3 l
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    % V& V5 h! e! I* Z& h, B
  79.   {
    0 k6 h; p8 f9 f5 g3 K& v# T
  80.     strcpy(szFileName,&szTempName[1]);1 _+ U0 G- X0 Q! L# V; Y1 R, x4 K0 I
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    6 F' t0 d" J4 s4 G
  82.     {
    ; M" m# b3 G* R' k
  83.       iEOF=fscanf(fp,"%s",szTempName);
    6 B! B2 r& d* H; J, @3 H- J
  84.       strcat(szFileName," ");
    + h) t+ v0 ^5 f4 a
  85.       strcat(szFileName,szTempName);# e5 |& }( W, R2 w- ]3 O, V3 }
  86.     }
    & D; C$ [0 g8 C8 {! w
  87.     if(strlen(szFileName)>=1)2 ^0 [( L% B# A% q2 u) `+ n( }
  88.     {- G* N9 T: X) I/ O! L
  89.       szFileName[strlen(szFileName)-1]=0;
    5 {% k4 u+ |- y* b
  90.     }
    # L7 t0 i1 u% O( O" [: c
  91.   }
    ) E  R: m+ A3 J- `* Z! U6 @' x; v
  92.   return szFileName;
    6 j! }% T! O0 H8 s8 ?) P* J( P+ {9 ]% g
  93. }* J" s& ?) X- {6 l/ L6 \# m

  94. " {$ g, T% L% K- P1 c+ V
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)! [0 n) s0 w# D8 Y% `0 _
  96. {. e4 Y6 Y+ s& h
  97.   FILE *fp;& O4 ^# y9 W& s0 d
  98.   char *key=NULL;
    , w# U8 y" B; b/ I
  99.   char version[MAX_PATH];
    % I# f4 _, T4 ^) N5 r
  100.   LPUPDATEFILE file,olds;$ f# K  O3 T8 V
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    + l8 I4 M" i/ t# b

  102. ' Y! |& ^3 M  A" }. {! y% V2 V
  103.   UpdateList.clear();
    1 \: w. ?3 G" U4 i7 Y
  104.   UpdateFile.clear();
      ]. J! A3 k, |% Q( F& \. |0 S9 M
  105.   if(GetFileAttributes(filename)==-1) return false;
    5 F% M0 C) ^9 N4 P
  106.   if(!(fp=fopen(filename,"r"))) return false;' Q9 u8 u2 }: C3 [( L7 Z0 y
  107.   fscanf(fp,"%s",version);9 d/ L3 x% b! \3 k9 Y; f" c
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }0 D& {/ s7 n8 p" n) Q
  109.   while(fscanf(fp,"%s",version)!=EOF), ?( X5 c6 ~0 ^
  110.   {; r8 E9 P( a+ R. P, q; n  s, J' y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: O' F0 L1 ]5 ]. r4 K" u$ _
  112.     fscanf(fp,"%s",file->path);2 E' Z. L8 g0 l& u* M
  113.     ReadFileNames(fp,file->file);" a# E. J3 }& S: f& h: a6 P
  114.     strcpy(file->full,".");6 _- g" a! ?. v( K% h+ w
  115.     strcat(file->full,file->path);, ^8 L5 q. f! v6 q; w! G9 g+ K
  116.     strcat(file->full,file->file);) O. }" @2 e" P2 |' S/ r) W1 t
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    * @+ _8 J0 A$ n; ]$ l  A& r
  118.     {
    + U  j% \( k4 ]: J5 e$ E
  119.       file->vers=(float)atof(version);7 Q# B7 L; P7 V" X0 q
  120.       UpdateList.push_back(file->full);. b$ Y4 p0 S+ c& T
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));- p7 ^6 W3 ?6 J# b/ @
  122.     }: e' [# j( V+ h4 |
  123.     else* e9 H; Q, _) {" `7 s7 a! R
  124.     {
    ! U: G. H  c  j! _" c, w$ e
  125.       olds=(*p).second;
    : y3 v7 g1 Q# Q4 l7 }
  126.       if(olds->vers<(float)atof(version))% v$ A0 v6 `4 H2 L9 O
  127.       {
    / B  n3 X- T5 B( a' m7 }
  128.         olds->vers=(float)atof(version);
    ; H* |7 x+ J; v, u4 t& z0 t
  129.       }" [7 O/ k; ^' v( c9 b
  130.       free(file);0 O6 b9 ]1 r4 w7 R1 I
  131.     }3 E+ d* |, q- z; J+ a
  132.   }" j0 [: @# q/ b8 S0 U
  133.   fclose(fp);* a& e( Z4 q9 V" o  G1 u& E
  134.   return true;$ Q  ~% v# b, J
  135. }) `5 d" {. A* ~6 e; |( a

  136. ) V* c4 |! |, Y2 m3 m6 N) v7 y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    8 Q3 ]- {  V- g+ _# F, L
  138. {
    , u6 t, c" O0 n- |& @' \/ s" x
  139.   TCHAR  szFull[MAX_PATH];" h2 G5 B1 O  f, F8 E* o7 Y
  140.   TCHAR *token,*inter;7 O$ P- v, N1 A! U! U
  141.   *szPath=0;
    % c9 ?5 Q9 r: ^4 j) z  I
  142.   strcpy(szFull,szFullPath);" c% b: c6 z5 S  `
  143.   token=strtok(szFull,"\\/");
    ; @4 X* D, X6 W" E9 T: ^" [
  144.   inter=token;/ D6 Y& H7 J/ _, i
  145.   while(token=strtok(NULL,"\\/"))1 b& O( \7 z; H2 [. R, ~
  146.   {0 r& C; E5 o7 b# X0 J* T8 l8 Y& a# Q
  147.     strcat(szPath,inter);' r3 u) g+ ?2 s- u
  148.     strcat(szPath,"\");
    / b7 D* ~0 S6 P6 n
  149.     inter=token;  G( w& e. o% j( f* Z7 Z
  150.   }' S( }5 g  s. w  k9 ~" G. T
  151.   return strlen(szPath);
    / H7 _% S7 v3 X* m% e0 i8 k( w
  152. }
    4 {! x# j+ R6 ~9 B- x

  153. 7 ]& x# W4 Z! n
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)" I% K4 ^% {$ e3 Z% D
  155. {9 G% |5 c8 h0 K3 S1 O( J
  156.   DWORD attrib=GetFileAttributes(Target);) g  g6 I9 t9 Z
  157.   if(attrib!=-1)
    2 V  _( C' s2 i) O
  158.   {0 s6 U) ~+ Q% m6 q. L
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))8 ~& b$ n2 {' T2 j' F0 v
  160.     {
    ) \  E( Z4 L; t
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ A) b! }3 q8 @! J% M- W+ M
  162.       SetFileAttributes(Target,attrib);1 D4 n* e8 K) W2 U; I0 Y7 v
  163.     }
    , s: }+ u0 Q5 d0 b0 N
  164.   }
    1 r" i, P+ Q0 O, k$ ^; s: p
  165.   CopyFile(Source,Target,Erase);1 n' s0 [, L, O1 g
  166. }
    " T- d1 {8 U9 S3 B
  167. . K7 Y& z6 N0 T
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    1 Y/ C. @3 B+ i& ~  e) G' g- S2 ~
  169. {
    $ @9 N) l' b" r
  170.      FILE *fp;5 t* e# n$ s7 y$ n( Y0 x, G* k
  171.      char  szBuffer[8192];2 H! b& z  e6 u! X: c' m- I
  172.   va_list  argptr;) v1 ]+ H4 m6 ^

  173. * D; Y. o1 c: J; j1 ^
  174.         va_start(argptr,message);
      p2 ]$ ^. ]" r
  175.         vsprintf(szBuffer,message,argptr);
    ! I0 [/ ~+ Q  m- V
  176.         va_end(argptr);
    : I8 C4 F. p7 T; y! _1 ^/ V# o. k
  177.   fp=fopen(FileName,"a");" R& N6 m: N& S! |
  178.   if(fp)
    1 y2 U) X; t1 V; Q% W
  179.   {* G7 U3 W: ?" D8 r
  180.     fprintf(fp,szBuffer);1 W; u, H8 `3 C2 n2 f" C1 ~& V
  181.     fclose(fp);
    2 L9 R: y8 ~8 e5 N- D/ r* g' l& |
  182.           _flushall();
    3 S* @6 O" w) \9 G3 g
  183.   }
    % I3 r6 M' \) \8 s0 I  `4 n) w
  184. }
    5 E9 V- G9 h* y

  185. 4 n7 T8 J$ a  h, r4 f# D' ~- n* m
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    1 `4 @' R4 I! {) o4 F
  187. {& ?# F4 Y/ z8 D" D
  188.      FILE *fp;& ~0 J1 }) v4 E0 k* W
  189.     DWORD  attrib;2 N8 f# ]6 W/ E# f: T4 ^# t
  190.   attrib=GetFileAttributes(FileName);& }6 b  Z) ~) `# q1 G3 A
  191.   if(attrib!=-1)
    4 ]0 N7 d5 V5 n# u
  192.   {* R7 q6 D' ^7 Y! O- u& a( r
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    7 }1 B2 n* f' o$ G
  194.     if(!SetFileAttributes(FileName,attrib))
    3 p3 i3 m# w) \) [( a1 \! ]6 n9 a
  195.     {2 ~0 g- T2 P* m0 \4 W+ i- Q
  196.       return FALSE;5 E3 U0 l; U6 R  Q* q
  197.     }* k% k) K1 E' p0 L+ n) U
  198.   }
    1 n, _! Z1 L) ]( Y) x: `
  199.   fp=fopen(FileName,"wb");
    ' }' x$ N, p' D# r  y& v
  200.   if(fp)1 X0 _+ x# |7 T% L" n% J: x( a
  201.   {/ n0 @  m4 c% f% ~4 N5 a" ~9 [/ D& q* g
  202.     fclose(fp);
    8 a+ [. [# l% r$ h' s
  203.   }) X& C/ m9 V" h/ J$ h# Q
  204.   return TRUE;6 Y& ?4 H* }1 q5 a, [7 K
  205. }  b6 a' z+ S8 @

  206. % C( a% n3 v/ l
  207. BOOL CRevAppApp::UpdateLocalVersion(void)' n( c  s8 v6 W: A# d5 P
  208. {
    9 G5 N# m& K; O0 b( t$ H% E
  209.   char filename[MAX_PATH];
    . w; F/ J, v3 A6 k8 @4 j
  210.   LPUPDATEFILE file,olds;
    8 a! {. n" U3 {( [& |7 G
  211.   std::map<int,CString>::iterator i;. P5 B; e% T( j% Z0 J& f
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 d9 Y, c* i* c7 H1 m) K, {4 H
  213.   std::list<CString>::iterator l;
    + n5 G: h- z9 H: w$ d2 ]- E, t

  214. 7 G- b7 U# E5 Y! i' K% B
  215.   if(bFirstUpdate)
    ; M5 j# ^3 f' l/ S7 x/ e
  216.   {# K  ^5 F" {- c% Z, d
  217.     dwCurrFile=0;
    . J$ N: S  S6 z, x
  218.     bFirstUpdate=FALSE;
    . i/ M. W% |: a- f
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , }2 t/ ^. S& S$ O( J# `% t: g
  220.     {
    & \8 b. ^+ D  f! _, N/ r9 n
  221.       dwTotalFiles=UpdateLocal.size();
    ' ~3 N& ]( s0 h- {
  222.       dwDownLoaded=0;
    1 {' Y- A9 A% B. ^
  223.       bSilentStep=FALSE;
    # c9 n' x. \. k, f& I. i" M0 S
  224.       bCompressed=TRUE;: p2 c. _* a% p/ K
  225.       strExtLocal.Empty();! x# \+ g$ F5 X) l/ U
  226.       strFullName=(*i).second;
      b+ s8 f; r' P! X+ r
  227.       dwProgramState=AP_CONNECT;
    " V% p" S- ]% X! J
  228.       return TRUE;: f% E/ e/ x+ q
  229.     }. S0 X; A0 F0 b" v- o( d
  230.   }( G5 |- ~' H- S/ p/ ^
  231.   else if(bRestartUpdater==FALSE)
    5 x0 \* J, ~  `6 g4 k0 ?. U
  232.   {" X" w9 P6 a! Q" T" C% |% b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 D" G( u+ i+ ]7 {; m: x$ U, `
  234.     {
    8 G& q% s% ?7 V1 ?; v. U
  235.       file=(*p).second;3 M' Q# M7 p) @8 t2 q% e
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())* d" g' I0 Y# a% e
  237.       {0 {8 X6 k1 l. x. u
  238.         olds=(*p).second;4 m" |5 k- |& u* P4 b$ |$ X
  239.         olds->vers=file->vers;
    7 \' k1 s% Z- b+ `
  240.       }* k" |2 }  p( O3 B
  241.       else% _/ ]: e! L0 D, D3 _2 Z# c9 {
  242.       {
    ) z( u3 K9 Z7 ]. \2 s. x
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 `8 i4 `; i8 l6 G4 c4 ]# z, ^- m
  244.         memcpy(olds,file,sizeof(UPDATEFILE));% |2 [- ^3 A* `7 @; A/ w( G5 q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    , J$ y: B5 [; H1 D* D" b4 L
  246.       }
    5 h2 ]& T! m& X1 j5 V7 [; p
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    1 n- {6 y$ l$ ?2 [
  248.       sprintf(filename,"(%s)",file->file);4 Y+ x, `, @3 @/ d
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 s- P( N. j0 |4 N4 x
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    / e; b+ y. {, }
  251.     }2 p5 p2 _0 B3 `
  252.     dwCurrFile++;4 K% k% |2 n' c
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- j, `' _5 ?% G3 W( C5 Z
  254.     {6 m1 l0 k3 J) Q: b# I& z' N
  255.       bSilentStep=FALSE;
      i+ |0 U, n& F- g& D8 l
  256.       bCompressed=TRUE;
    # v" Z4 F, ?- [
  257.       strExtLocal.Empty();
    , w/ N7 X8 g% S5 E2 X
  258.       strFullName=(*i).second;  E( M1 ~4 Z. O- k
  259.       dwProgramState=AP_CONNECT;
    3 \8 F; |) A9 Q0 U
  260.       return TRUE;$ j: d; a1 z2 n9 N4 P
  261.     }
    ( u' w) F0 ]0 I7 f% z
  262.     if(!bRestartUpdater)
      B& F0 `4 y. j: v5 K* C" |2 p; y$ F
  263.     {  k) ]1 G+ ]  [6 _' g" V
  264.       int iCurrSize,iFileSize;
    + T3 C; _2 I+ H* J$ W8 ]
  265.       iCurrSize=0;4 o3 F' P* f+ G! ~
  266.       iFileSize=UpdateList2.size();/ q! Y+ a6 [6 {1 [
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");" O$ X$ n' _$ I1 ~7 S
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ( O) j) W+ _5 f# r
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    : t* j% \( x+ v& `* C# O3 v, ]
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + m, ]3 {$ w& n- q* r8 |+ b
  271.       Fclearf(".\\update.dat");0 n4 {8 ~. W4 W9 b
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    8 W% G0 w. t/ o  U; ~2 {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)" V* e3 h# K- \
  274.       {, T) u/ `3 ~* N8 l
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()), S: S6 l3 |5 r* M' v  S  G
  276.         {, C9 b" k: @6 n6 z+ d
  277.           file=(*p).second;' M. i0 d/ W! U" Q: d
  278.           sprintf(filename,"(%s)",file->file);
    # l' _& _1 p' r) h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 p) _( W" C, y3 a
  280.           iCurrSize++;
    4 P7 C. _* \3 C* ?) F/ X2 J
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));- v- s# K. o$ ]# f, t1 a  W' p5 \2 z
  282.         }
    $ c1 a1 \( a2 g8 D  \# M' R4 ~3 E7 d
  283.       }* c: Q3 E" A# l/ a4 ~$ E. f; d' P- S' m
  284.       unlink(".\\update.txt");1 _/ ^' ^. E; A8 T
  285.       unlink(".\\update.tmp");
    . d6 \- N8 B+ A/ S3 I
  286.       Fclearf(".\\checkversion.dat");
    ) K6 H3 X, d( U. ^
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    " d0 E7 w  z4 J5 d; O, [
  288.       if(UpdateLocal.size())1 D4 c7 n4 e9 g- @
  289.       {
    # W8 \6 c2 g: X8 B
  290.         UpdateLocal.clear();3 P( }9 T. Y: ]
  291.       }8 x; r8 d+ n9 ~( @1 t; P% x
  292.       if(UpdateFile3.size())
    # j% @% [3 ?* Z" l0 F
  293.       {/ s) Z- Y: S, d& Z; T& x2 h  x# q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - Q- d1 v4 Z. v6 ~- J
  295.         {: |$ S! S9 N4 _+ a3 p- _; V: V
  296.           file=(*p).second;8 `4 R0 y: h# i
  297.           free(file);$ N% K% R. L, \3 ~- _
  298.         }8 ~1 n2 @2 l  v2 m+ i5 S5 a7 L0 u# r
  299.         UpdateFile3.clear();
    ' c# {) I; H- W, Z
  300.         UpdateList3.clear();+ j7 E9 h4 u& l6 V# h8 m
  301.       }
    $ V# y) l0 ^$ E" g# \7 e
  302.       if(UpdateFile2.size())
    5 P' K# k8 S  v0 |4 M
  303.       {# W1 ?% y. ~8 w" ^8 ^/ D0 m( G
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)6 p: K! z- @, O$ L% C% B7 m9 G6 r
  305.         {' c# f1 [+ y! v. T+ `1 s
  306.           file=(*p).second;4 J8 E) Z) s- @- c* z) c
  307.           free(file);
    6 W6 n! ~# H; z' ]% r" W
  308.         }0 N" g1 X: o( I. o8 c$ I
  309.         UpdateFile2.clear();
    1 t0 F8 r8 d5 j0 z" W. M
  310.         UpdateList2.clear();
    / h/ O& H' {; K2 c" r3 C; c
  311.       }
    ! Y0 i# a) ?6 P( B1 B' x, ?* |. S
  312.       if(UpdateFile1.size())
    8 J4 e' I- p0 |# l/ ~3 @# A6 D
  313.       {4 A2 f# z6 }2 W  K' p0 w9 C
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* \/ p# P) Q9 ]0 [
  315.         {
    , f1 l3 z. n' T. }0 W. s, E" `
  316.           file=(*p).second;
    8 b+ W" u$ a* s' i% o6 n* S7 y; K
  317.           free(file);! v/ O/ S6 w6 c# S4 J
  318.         }
    : k; m1 l$ `. Z# v+ s/ T
  319.         UpdateFile1.clear();# A7 `  e* B3 j* t8 ^+ f* j2 M
  320.         UpdateList1.clear();" N  I: p- S1 q, j2 J5 h+ C; U1 f) b
  321.       }
    - [; r+ q6 F& j# w/ D
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    $ r! }+ F* m8 B$ R& \
  323.     }
    # z& P! H4 p1 f$ ]( E0 Q0 r
  324.   }6 A8 x/ N7 P5 N# ]6 U8 K. \
  325.   return FALSE;
    & U* ]2 R. v5 H$ ?& s, ^8 O
  326. }
    2 o- L* j$ w- x& z; k2 d( J( W8 M

  327. 6 O3 p" b3 V+ t* z3 u. a2 h; S0 F
  328. void CRevAppApp::ClearAll(void)
    & V* ~) L( q/ [* [3 A9 R% _% E
  329. {. S' }1 w2 W* j* T. g3 q
  330.   LPUPDATEFILE file;2 Y' M% _) d2 B) x, ^; j* |% A9 h' W- f
  331.   std::map<CString,LPUPDATEFILE>::iterator p;$ o3 P( D) ~9 \8 p6 g

  332. / V7 E7 R. `9 W. ^
  333.   if(UpdateLocal.size())
    ( C  G2 W# n. l$ S
  334.   {
    " h- U' D4 N9 @6 O% a7 \! S
  335.     UpdateLocal.clear();
    6 o0 m( M; F! H  a
  336.   }" H& j: ~) j; J+ E
  337.   if(UpdateFile3.size())3 s7 K3 K$ b5 h8 c6 F, w
  338.   {5 }, q$ C% F+ u
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 r8 u/ e- Q) b' R" K
  340.     {
    , N; P7 d6 [2 x# T8 k2 |/ E
  341.       file=(*p).second;
    : i. |% `4 H; u* Q  g
  342.       free(file);* O7 z7 w) `# B5 ~
  343.     }
      R& p4 E+ l* P- }6 }0 r2 J
  344.     UpdateFile3.clear();9 O+ B7 _# l/ Z; S; ]( ~5 B( G8 L
  345.     UpdateList3.clear();7 R/ ]- q- {6 `& `+ [2 k8 o
  346.   }. {+ ]4 {0 m) N- D
  347.   if(UpdateFile2.size())
    " m% O- {: h" r$ H$ N0 E. I
  348.   {. L) t& H0 |! `% M8 w
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)5 k5 B" h! g# a
  350.     {
    / B# w) L% M  F9 K* k2 A- k- h
  351.       file=(*p).second;
    " p& v( z, `" `! R0 ~
  352.       free(file);
    7 R; M4 g) w, ]% ~/ H& d
  353.     }" }. a6 Z+ A) w& v% D3 N( l
  354.     UpdateFile2.clear();- \$ _: g% e: c( }
  355.     UpdateList2.clear();: C0 C6 @7 v% h$ i) P' D  n/ Z! g4 ~
  356.   }
    1 s' y3 Z! u- T& j
  357.   if(UpdateFile1.size())1 x3 Y( t! F  K" z. O& ^% ^
  358.   {+ s5 i0 o' f0 Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" c5 I4 Y$ t' K9 i- q
  360.     {9 \8 L5 H2 s' ?6 ?" ?/ i9 H, R, Z
  361.       file=(*p).second;* N1 D! X0 B6 |% k
  362.       free(file);
    ) r+ X6 M) Y8 k8 t* o
  363.     }5 l& f0 g$ j- h6 D% o& T- L
  364.     UpdateFile1.clear();" A. N+ e" X% V8 v( `: s
  365.     UpdateList1.clear();. ^% N0 O% z- u/ i
  366.   }7 e: b+ n9 v; l8 h
  367. }  
    , u" g+ W4 H% h/ t( c8 W
  368.   % P+ B1 i. H% W, q1 L+ ^
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    7 o' F" {5 E4 m
  370. {
    - U, |: \( V1 I. f
  371.   int c;$ |/ }; J2 M( a' P. I' M; V4 d3 Z
  372.   LPUPDATEFILE file1,file2;
    0 K6 w7 |0 B3 ]) L* V" O4 E. M
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: N! d/ }( \: D; l7 l8 v
  374.   std::list<CString>::iterator l;
    ' ]" g6 o0 S! d5 d' d% _6 N6 e

  375. 2 G& x* z; b1 T/ t' U! S( t6 W
  376.   UpdateLocal.clear();) Y0 W4 `4 _' b: |! S1 X
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; h0 K% ?1 v( w& ~. i
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);0 S' D8 ?0 b1 }
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    % z$ e6 s+ ~3 j1 {& p; X. i7 y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' v6 c4 v% b) [, |
  381.   if(UpdateFile3.size())
      ~3 c# S& B" V' k  ?' h
  382.   {
    $ a9 G# J# C* J' }) L0 h/ n" w
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    " o1 O$ ^* U; C2 U% ]9 t
  384.     {
    & D# w7 K% K( \( Y
  385.       file2=(LPUPDATEFILE)(*i).second;
    & q& p( k1 ^; m% J
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; Z# o8 }+ H' }' R, e% n! W
  387.       {
    3 i7 _; a7 B0 U! c8 F
  388.         file1=(LPUPDATEFILE)(*p).second;) z8 R7 O6 M2 d5 g5 o
  389.         file1->vers=file2->vers;; e, o2 o: C3 x- G4 T! M
  390.       }. F0 M: {! J& x3 M  m! |+ K
  391.       else
    - [* s' ?2 }% g
  392.       {- b5 A& |/ m" |
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 z, g6 ^2 d3 [5 F4 G' t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));) J. X3 F% }/ M( T% N. N
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));) ~9 A, p, t" Z8 l' g, {
  396.       }' d7 n  }3 D- l' T' Q, {
  397.     }
    . B: b, j4 w) [2 U
  398.   }
    # k! f9 A1 }4 T! h2 L7 M
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 P6 Z# w5 O" Y' R% l# b
  400.   {# X2 E' b5 w3 M
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! g( `0 f7 I: v" f7 N7 R8 _
  402.     {
    1 r4 G: a$ g+ k8 `
  403.       file2=(LPUPDATEFILE)(*i).second;: }9 R3 b+ w% N
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    % C1 }, D- `! P& V& p3 G1 q% l
  405.       {: b3 w3 m1 Q6 \; Z( `4 j, o  b5 L
  406.         file1=(LPUPDATEFILE)(*p).second;
    0 ]7 R7 h, `$ K! p
  407.         if(file1->vers!=file2->vers)( y- q( b+ j$ k
  408.         {' Y2 O* y! n- J) C% y; J" Z8 [
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( v1 J! t. I! Q; Z& E
  410.           c++;% b" i: w/ e3 V( r/ D
  411.         }( m* t( O9 o7 E8 Z( @
  412.       }+ ^8 Q# p  V  C1 g+ d  o6 g1 u
  413.       else
    1 Z" S8 I: z& |# d1 E) h
  414.       {! a9 e7 t8 Z+ y* v* f+ u9 \7 y7 n
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 k; W& Z$ m1 J
  416.         c++;* l, \* W0 |6 w( D4 G" `1 e; p% v8 P
  417.       }
    + w  g! ~9 ?" ^* ]2 G6 I- ~
  418.     }# j$ t, I% R( c2 H8 o# B( M
  419.   }8 E6 ]' h& E. P# A8 v2 }
  420.   unlink(".\\DownLoad\\update.txt");. n9 e3 T. s5 T# V
  421.   if(UpdateLocal.size()) return TRUE;+ C; E( d0 b( d2 U& d8 n
  422.   else                   return FALSE;- ?) Q( K0 A4 G
  423. }
    0 U; k6 p7 O3 m* v& @6 z8 T: L( L

  424. ; q; M; {2 G6 j' L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/", |5 }) T& V# }+ W4 d
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' P4 r7 ]0 O0 \, O
  427. 4 G  Z: @- u0 S$ F0 l) @5 I7 J! W* w
  428. 2 l" V9 n/ N, f! M
  429. ( }3 O  l9 Z" E. R9 `
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 o. R! x. U0 u: X* m, F
  431. {* }' C$ c* K9 e3 n9 t# q7 I% B
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;8 v. S) k4 I4 P6 E
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 k+ D, e6 N' c2 L
  434.   {
    ( V9 [% r; h7 p  s
  435.     char szLanguage[50];
    . K( a5 N& n, {9 n7 Q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " R& l& Y  p; n7 E
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & r  t# D8 I; f) u1 s
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . \% z/ d* t! r' g) Z. k; {
  439.     else                                   m_iLanguage=ENGLISH;+ S# b+ s" M" d" u: I- x) a7 Z3 G
  440.     char szRegister[100];
    4 F6 g  y+ J0 F/ T( T! }1 H
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 e* _) a' I) _5 H" A
  442.     strRegsName=szRegister;
    ! c- p* t3 W" a* ]' W
  443.     char szPatchURL[100];3 h* C  x: k- u# N
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' U) W: u& r  C
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 s, s6 e1 \6 S9 h  Y
  446.   }$ {& `, S1 r7 m6 h" W
  447.   else
    9 A. j; J9 p  K6 e7 K
  448.   {
    " E8 r. ^4 p' e
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  s- C( Q, r6 i( f* h
  450.     strRegsName=DEFAULT_REG_URL;! O) D$ M2 O# j3 `" g1 s
  451.   }9 n! B2 q! m$ Z! o
  452.   if(GetFileAttributes("hosts.ini")!=-1)4 P9 J8 ]7 Y" G& H9 E, _8 J+ O1 [( y. l
  453.   {
    ; Q! n% ]: X6 T2 m( J& \
  454.     char szIP[50];& O/ J2 w) D4 P7 |: b7 ]
  455.     char szDIR[300];) F/ r2 b6 [" a1 `: Q, E
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))3 m' k: K; M* A' }, n# X
  457.     {; I' M9 O- c' S: P3 m, ?+ H
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ) y$ T0 _* O$ Q- c, U: C9 T
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    3 H( I" Q- S. o9 Z
  460.       strHostName=szIP;6 r) w- s  t/ c) S5 i2 K
  461.       strHostPath.Format("/%s",szDIR);5 k8 Q1 x& s# B, O
  462.     }
    $ ^% J0 D: `8 ]# h" |" j
  463.     else
    ! v+ d8 r! i0 z2 C9 V& l! y  [2 [
  464.     {6 V  Y- F! `& N9 E: \
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 r7 E. d8 w8 S( d: o& e
  466.       {
    / q! m- b0 h% w* U
  467.         char szLanguage[50];
    % B8 p+ ^3 M! c1 q2 Y! c" k
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : f4 j% |# }( s- P9 e5 P
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 R+ G; n2 j7 W6 W# M
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . ~( e: C) N+ c9 W7 P# e0 g
  471.         else                                   m_iLanguage=ENGLISH;" m! V: w' w$ w$ R
  472.         char szRegister[100];7 b" f) J* L$ v/ A3 h" x7 ~
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) i$ L% ~9 B! U4 `
  474.         strRegsName=szRegister;$ c; H- m9 I1 K3 p( |; d  _6 {; o
  475.         char szPatchURL[100];
    6 E7 b4 s; \% i1 ~0 \+ \# S% g
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 a/ b8 f, }& p# P, V, r
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - f3 n' _) J7 D: k* I& x5 D* `! _
  478.       }2 _: L7 I3 `/ j; u/ E7 O* D3 Y
  479.       else
    ; u- ^! R( T- h: U9 C
  480.       {
    ; `8 s8 N1 y% p- X4 l; _
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ ~7 z2 I# `' B: M$ }
  482.         strRegsName=DEFAULT_REG_URL;9 F& o$ p; e) \
  483.       }- V2 s# }5 C* p$ W' P
  484.     }
    # X: h, n$ y* _: d* p( G: M7 j
  485.   }& U" ?4 P# C* D) `8 l3 W
  486.   return true;8 p3 g: H; @& `* h1 l6 y
  487. }, |4 D7 ]4 M# \! y' `
  488. 8 p3 A( Q- t! f- a* D/ P$ `
  489. #include ".\ZLib\unzip.h"
    : S0 X' f- g1 q1 {; E+ H# e
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    2 i/ ?& S9 y& z! i
  491. /////////////////////////////////////////////////////////////////////////////
    + \1 f, b; ^7 \2 T9 m3 p' ^
  492. // CRevAppApp initialization# i4 o$ y: E/ k7 Q- E3 u$ W
  493. " e& l% \# C- M7 H4 {1 {
  494. BOOL CRevAppApp::InitInstance()2 m0 t8 P* d, Y( j9 d* a
  495. {
    * v' d9 V& R5 H0 Y: C' Y; i
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& N- b. D% g; H* E. X' k

  497. $ W! w+ T! M! _) S6 j; m3 p9 B
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);5 k" `. W5 Q# p) K, _3 W  |2 @4 ~' W+ Q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ( z6 ^/ ?0 q. Y/ {% c
  500.   {/ Q+ @  `$ y/ {3 U
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    : w* L+ [% \3 L- O7 l
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 ^8 g: S2 H  W: P3 T
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 w6 X2 `; x" }7 C
  504.     {; V. q# c$ G6 n( x8 g3 B
  505.       strcpy(szPath,szPathTarget);
    7 Z, @' N) Z2 G
  506.       SetCurrentDirectory(szPath);4 i0 d* P$ x; ], e4 j
  507.     }6 Z3 ?1 p4 F( @, {9 N  r; y3 B
  508.   }8 j& D8 `) f  U% ~+ z
  509. #ifdef _DEBUG
    - j) A# x# I& ], c( F
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 ?4 b4 R( N4 X' V" w% G
  511. #else
    . j* c4 R) C  i" W. o/ ~
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& P  \& C6 u5 a
  513. #endif
    # Z+ \, Z+ Z7 ]5 Y
  514.   {
    5 F0 R" C% ]& y# `( ^( v( k  R" I! J! o
  515.     char tempFileName[MAX_PATH];
    9 j0 l9 i; o$ T
  516.     strcpy(tempFileName,szPathSource);
    2 A! u) A- `3 g. I: _- V) z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    : L; y: a5 A0 e& H8 C7 n5 L+ O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    $ q0 g, J* ]+ |+ i3 j! Z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    - D: R  A* Y$ g" i6 {; ]1 C2 s
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    0 [/ [. n% V" A  d2 F' m
  521.     return TRUE;+ G1 g) }7 J# j; T9 _# \
  522.   }- r  l/ `1 _0 }# c5 m  ]+ f. o7 _) d; P! E
  523.   // Nuke 0118: Delete run.exe
    . q, Q. R$ r, s$ U2 {; P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ) [% h2 `8 }  I3 C$ r
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");4 f  Z% g, ]7 |- d- ?) r. t$ O
  526.   if(!ReadCfgFile("Config.ini"))2 K& Z! E8 w* M$ z
  527.   {1 A8 T; H( J7 {" M4 _
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ! N9 H& H  R! y
  529.     return TRUE;
    4 H2 v2 `2 f# s
  530.   }
    # R* O9 C7 ]+ K/ J. A6 ?9 s% f2 j
  531.   HANDLE mutex;4 K& b5 a& N  U# Y- }
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    & X; s8 o) {2 j0 B0 O
  533.   {
    9 L' J* e/ a" j/ l
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)( `& ^: J$ @, u; L
  535.     {
    4 r8 H; E4 u% E' E3 E
  536.       CloseHandle(mutex);
    . i; ?# n& [4 o  ^% Q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    0 w4 d; y8 ?& A, s) `
  538.       return TRUE;$ M3 R! Y& H' U- g  Z$ K1 t5 j
  539.     }
    + V; u0 R! O+ D6 q! N, e" ]% \0 o5 u
  540.   }  
    , t" d1 Y% ^& h; F3 P1 x5 Z
  541.   CloseHandle(mutex);
    3 ?" l) [. W( @3 h/ j

  542. - s0 S3 f& k1 L% f
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);, K, o- _7 U7 g  l, i+ u- G* A0 _

  544. 6 s! ?2 L0 A. c
  545.         AfxEnableControlContainer();
      A) Y: l2 s+ k; A& e  b

  546. ' P3 r1 P" F$ f; j8 e2 J' j/ d7 t
  547.   bCanUpdate=FALSE;
    8 r' G# O% K) x# J1 F6 s0 B8 E
  548.   dwStartUpSteps=1;7 _5 B9 E9 |$ ]& ^
  549.   dwProgramState=AP_NOTHING;+ Y: m; ^& c2 |  M

  550. ( ?- R  {( ?' z) h
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);3 z9 L5 A8 d& F2 n' f( @; j
  552. # K1 z3 N# M3 H, X
  553.         // Standard initialization
    / j  s! ^: Q9 }; G7 r
  554.         // If you are not using these features and wish to reduce the size
    7 l! m, ?/ x5 H5 @# W  p! b
  555.         //  of your final executable, you should remove from the following
    6 {/ {* D. z/ l5 l
  556.         //  the specific initialization routines you do not need.$ n( t- K' X7 K2 K& h

  557. / i# b. `& l9 i" Z# \8 S$ [- s
  558. #ifdef _AFXDLL
    # ~$ ?! S( W4 T, ^( s; ]) H* u
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " k6 k8 [$ d4 v! n
  560. #else
    4 a7 c. S  j1 M7 K- ?
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    7 _( R$ L$ ?4 p, a$ @
  562. #endif! Z9 ^4 U# H' q& \9 u
  563. 1 @1 T/ |- g# A: U$ C: `/ d
  564.   dlg=new CRevAppDlg;
    ) f: `/ |  N7 k3 M# _5 ]
  565.   dlg->Create(IDD_REVAPP_DIALOG);! E. V" A4 h. U3 J) a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);/ S( ~$ L+ D& n3 [
  567.   m_pMainWnd=dlg;6 Q, n/ k) _* n6 e# X

  568. 8 r* G! E$ y* c  H$ ~3 h/ N' Y7 ~
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    6 ^8 R! a" P; Z, c
  570. ; S! H/ t, x: I5 \! R6 m
  571. //  GdiplusStartupInput gdiplusStartupInput;, x* M& `. T, ?& A: }
  572. //  ULONG_PTR gdiplusToken;4 Z2 h3 P% s+ ]8 M+ P! H, M% X4 x
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);! S3 O* K6 |! S* T6 H* N

  574. $ H9 y  }/ D# e
  575. //        CRevAppDlg dlg;
    * j4 P! E, j2 \! f& h- n5 {
  576. //        int nResponse = dlg.DoModal();
    3 Z4 S9 }/ f( E9 t9 G7 u  m
  577. //        if (nResponse == IDOK)
    0 A' j7 f/ V8 O; F! e
  578. //        {
    , s- V- [) j. t6 O4 |) v+ @1 _
  579. //                // TODO: Place code here to handle when the dialog is3 A8 d& ]& s  z- y+ h6 J
  580. //                //  dismissed with OK
    # Q  A2 ?$ O3 _% l2 E( n3 U
  581. //        }
    5 W7 Q' F/ }2 _# p
  582. //        else if (nResponse == IDCANCEL)$ j! z$ O6 N' ]
  583. //        {
    ( ^9 t, L$ c- X7 ?' T
  584. //                // TODO: Place code here to handle when the dialog is% e+ X9 ]7 ?0 }& B* P
  585. //                //  dismissed with Cancel0 Y& U/ d* g% _
  586. //        }: Y1 s9 e' j; }
  587. 1 X2 C0 \% G6 c. y& u/ g# g, ^
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    + @2 L: S% e2 t+ m8 i. G% M
  589.         //  application, rather than start the application's message pump.
    ' j: B. C# Q, B  Y
  590.         return TRUE;& d% b( V' o2 D. V% i$ ?
  591. }
    0 g$ q0 A4 u5 |% I7 T! N$ N

  592. . T& F# S: v, Z# F" z$ @. g) Y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ! r) w, v4 N4 N  ^( s
  594. {
    / e  k/ p& q0 f  w! u3 Y
  595.   int i;
    : i1 G9 l9 V" ^9 H
  596.   char *szRet;* G: G4 s0 ~" s

  597. 8 b1 U0 t9 p! W; h( C+ N
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    : h: A% m9 R5 \; @5 P' J: F$ _* N
  599.   if(sztoken)
    * v8 V7 x; \- V8 {" v; @
  600.   {# }9 s3 a4 A! ^) J
  601.     szRet=&sztoken[itoken];
    9 E" w: I5 p; O4 S: K, }
  602.     while(sztoken[itoken])! i$ l: X4 B* ?* d$ d5 y" N# Z
  603.     {9 U' c8 `$ s, d0 b6 w' k; g
  604.       for(i=0;i<(int)strlen(token);i++)
    # W( D- X8 i! m( o. B, K% C4 ^. R
  605.       {
    3 H) z7 B! h' e" U4 [! G# L
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])2 m, N# d, P; }; E
  607.         {' f! C8 v$ b; w' q1 @
  608.           sztoken[itoken++]=0;
    7 o9 [* k  @) P  i
  609.           sztoken[itoken++]=0;7 j. ]8 G6 X( D
  610.           return szRet;/ j1 i; j; q5 ?( y) d
  611.         }" k6 e8 U* S" \0 I  Z2 T0 _
  612.       }
      c- W- ]' }9 |! B6 }$ V
  613.       itoken++;
    , i- t. \9 n1 K
  614.     }
    5 a# H) e* z7 Y/ r  r$ @# I
  615.   }
    / g, A% T- _' o" ]) T
  616.   return NULL;' w  A6 `  N4 Y# s/ ^& U* C+ _
  617. }
    ; i( Q2 A" J8 Y! G4 s

  618. - P  Z% s+ j, @) E
  619. void ProcessProc(long Total,long Current)* E; y8 r, T  O2 m: K9 b+ c
  620. {" B- l1 z2 y( w* {9 _) W; l
  621.         MSG msg;
    2 O$ L1 D9 l# N8 z! j
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);, T( [/ U- z) R/ [' M
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    . v& I) t+ J4 F- d( c
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    8 n# L- O: J1 ~6 O4 u, J
  625.         {+ ?  ^, |) n, W8 b( f5 P! ?+ c
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & s) r% W1 t/ R& v; s, [
  627.                 {1 E7 j7 K7 ^: a
  628.                         return;
    7 J4 r+ l3 v/ Q
  629.                 }: e+ W' F) K3 D! F' x0 e
  630.                 TranslateMessage(&msg);/ c+ P, M5 R5 O: }( }# C" {& \
  631.                 DispatchMessage(&msg);
    ' S+ A, A( {7 p, N- F: g0 H& A
  632.         }        & R; k' B; }# D
  633. }$ `# U0 ~' f# |. \# P6 H
  634. 3 A% j7 N, }8 X9 d. Q
  635. BOOL bFirstChar=TRUE;
    " f- a/ {. `3 o% U! j1 x& _

  636. 3 U/ k" B; ?' b% r6 ~+ Z$ S
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - g/ t# M0 b0 C) q* }3 A: J
  638. {' }5 v( _: t$ T  L! Z
  639.         // TODO: Add your specialized code here and/or call the base class
    ( M1 d: d( k' O4 }9 D4 ^& J% a
  640.   switch(dwProgramState)
    ' g$ {6 P% J# L: ]: O
  641.   {
    . r4 N( E( M5 K, G  c2 U
  642.   case AP_NOTHING:' O. l/ m; j3 {2 T5 z+ v
  643.     switch(dwStartUpSteps)( v/ \/ j/ n% F3 ?
  644.     {
    & m8 p  m* |4 R
  645.     case 1:- E9 H' w1 A( }' g! ]0 w. Z
  646.       {
    ( X" c, V7 E; v8 ]! a6 Y
  647.         int i;% y2 F  N+ E0 ~( |! M# T) z
  648.         CDC *pCDC=dlg->GetDC();1 N6 `& ?! q* M9 m  ], K
  649.         HDC hdcwnd=pCDC->m_hDC;6 p8 C5 d5 X* J8 A' ^: A& m7 {$ Y; Q
  650. //        Graphics graphics(hdcwnd);- K- `& N; I$ X- M5 C; L/ D0 s0 B
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");$ R& W3 V+ ?* {# _- r
  652. //        INT iWidth=bitmap.GetWidth();2 L3 t* W& o/ z' |
  653. //        INT iHeight=bitmap.GetHeight();  Q+ ]$ E1 {) d* A' B
  654. //        Color color,colorTemp;  n/ l8 G1 I6 @( R8 V( G5 ~
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)4 h9 l4 O& x& f2 B/ d
  656. //        {
    ) z, h) |6 b% M1 Q; @5 h  b2 A
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    * T# h* f4 t7 E, `7 ~/ T
  658. //          {5 b7 W+ r2 g( U4 u: {5 M
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 V5 [% ~- W, u6 y- L
  660. //            colorTemp.SetValue(color.MakeARGB(
    6 N* A+ v. _# z' O9 C- g9 t, q
  661. //              (BYTE)(255*iColumn/iWidth),9 u" z. q- e3 }- N2 W. \
  662. //              color.GetRed(),
    ) n; B5 @4 @9 V  F# l  P4 E- c
  663. //              color.GetGreen(),* z' r  U( G; C- T5 ]
  664. //              color.GetBlue()));3 a( Z% [/ P4 `: m1 b  b
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    5 D* O! k" t( n6 T, }# N4 s
  666. //          }
    5 e% C: p. p' E, c" g) V6 i
  667. //        }* H  U* |3 i5 R3 Y' K7 E" j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);+ |; t  F  f1 C- v  o  H5 K% K
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");4 g( N7 Z' }: \0 C1 Y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");) J1 ~9 K) _( J  r
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      N" ^3 t  x! A/ D* V
  672.         for(i=0;i<240;i+=8)
      l8 L% r$ q6 D6 o
  673.         {4 ?8 q) b. U4 }6 @1 L
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , ^$ [, V# Q+ o. K; N1 C0 w
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 O, b# @+ v0 `/ n  w& b
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ u4 Q* d: }! ]# f* q+ _
  677.           Sleep(33);
    ) w+ u. ]1 N( p+ A# j! ~7 b
  678.         }9 a; \! E* P1 w: [- U& d; A' ^
  679.         Sleep(1000);
    9 T5 r- {/ j7 B. I0 S# S
  680.         for(i=240;i>0;i-=8)
    6 z; m, T9 w* `7 D$ s
  681.         {8 ]5 [/ z; s/ h/ C
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 ?2 ~4 S9 f2 r6 J  j& F( w% B
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: j! \$ Y& R7 v
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* c; }% x4 Z$ }# ^) p' _+ O# W
  685.           Sleep(33);! q; K6 t' j6 @! Q
  686.         }
    * A" G3 c) m4 b1 r& q8 F% Z2 @) m$ Z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);" v! c/ w. [' n* r8 d
  688.         dlg->ReleaseDC(pCDC);9 K1 W  X7 y' K5 W8 i3 @. ?+ ?3 S0 O
  689.         DeleteDC(hdctar);
    2 F% e$ w& y3 ^) k3 d6 E# Q
  690.         DeleteDC(hdcsrc);
    ! m& B& W& e+ Q' x2 o. F# {
  691.         DeleteDC(hdcorg);9 G1 R* r7 ~( Z
  692.       }
    ' z* b# `* l6 e0 w9 U6 E- o/ @( R( C
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);1 N) O) {4 }  j, S1 v1 o
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");+ x8 z8 U- L- `  ^0 R1 Z, E4 U% L
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    8 s, e! \6 _4 z- E/ K- Y" b& f, a
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");! z1 S) v& C; x- X: h1 [2 v
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; X  K" s6 {/ O3 k2 W
  698.       if(!Dn.Connected())+ l0 c+ j  b  f2 k' k8 f
  699.       {
    % X% S4 A0 N( K8 b0 j7 i
  700.         dwTotalFiles=1;
    0 q% j: R7 i5 ~
  701.         dwDownLoaded=0;
    : D& }( Q" c+ A6 `
  702.         bSilentStep=TRUE;
    + P0 j. V% t6 Z( d7 J: f
  703.         bCompressed=FALSE;
    $ a2 X1 ]. C. I/ O* K" ?' z& v9 O
  704.         strExtLocal.Empty();: `, {# b/ [1 d
  705.         strFullName="readme.txt";- n& @, j0 t4 W& l
  706.         dwProgramState=AP_CONNECT;. v9 q: P& E! E
  707.       }  g. h& v6 ]* X( D
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();  T6 R1 c# n( k" }! K
  709.       dwStartUpSteps=2;; ^& w0 X4 [+ Y, j- c' E5 R
  710.       break;
    1 Z& \; X* V6 t7 F0 O
  711.     case 2:, O" B+ [/ A5 W  w
  712.       {
    0 P9 d. s+ c5 C3 c9 y
  713.         int iEOF;
    - ^5 l+ E$ K, ?; o4 O
  714.         FILE *fp;
    ! m% j( C" E5 S9 u9 p2 z' @+ X7 p+ P
  715.         char szString[512];
    + u6 A1 B8 q; s2 c% E
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");/ w, r% f' C/ ^2 w8 d# R/ u
  717.         if(fp). u+ B' E( C- k( P$ z
  718.         {' Z" J# g$ F- L3 `
  719.           do
    ) s  l. S1 K& z
  720.           {% B1 O  y$ _6 m2 X2 p% U4 C
  721.             iEOF=fscanf(fp,"%s",szString);
    0 P! l5 s9 t4 v, ?. W: D
  722.             if(strlen(szString))
    * B1 ^: q+ w9 r- z/ q9 b; P
  723.             {* J8 f3 a2 W' f# N
  724.               if(bFirstChar)3 ^  n! V- D/ N+ \& b! D' t- H- q
  725.               {
    5 k4 }) g6 ]5 T) `$ B8 {
  726.                 bFirstChar=FALSE;" Z" }4 o% P3 v8 j: }( w) B, M
  727.                 bConnectIsBig5=FALSE;( w/ [2 l6 U. s$ ^3 v
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    1 Q2 X5 [' J/ v7 z
  729.               }9 e. ]/ x3 z. k5 G
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));0 K6 j" m) |5 ~* m% t6 {* u8 K
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));1 h/ e+ F5 V/ _9 S6 V9 A
  732.               dlg->m_ListText.AddString(szString);  @  i+ _! G8 `. g/ r) b
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ L' x* w; t! m: v
  734.               *szString=0;
    2 K9 r$ y* {0 X9 x! _5 Y' a1 a
  735.             }$ Y+ i3 Z0 X- z6 f6 ?' f' }
  736.           } while(iEOF!=EOF);' [+ j2 V' C* l# l- z9 C2 [4 t
  737.           fclose(fp);
    7 y2 F3 U+ `! ], X9 q
  738.           unlink(".\\DownLoad\\readme.txt");, _9 L* Y: v! R! g
  739.           dwStartUpSteps=3;
    ' d% h6 F# R) M5 c- I) j
  740.         }
    ' k! q4 P- N: l" j9 N4 i
  741.       }
    9 m6 i( d8 R) Y' N2 Y: ^  k
  742.       break;7 R* [/ i* b/ T0 t( B) r
  743.     case 3:
      A5 B8 t( u) \, g% F6 _$ \
  744.       if(!Dn.Connected())5 q/ ^$ F& B- J0 _
  745.       {
    ' k& n% R7 R& U: v! Y( w( H
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);; p1 X4 r  F7 A
  747.         dwTotalFiles=1;
    & T# Z, r, w8 n& j
  748.         dwDownLoaded=0;
    ! i- o" r6 N- r9 U# n
  749.         bSilentStep=TRUE;' ~8 ~; R* K9 Y, `; k: Q1 e
  750.         bCompressed=FALSE;. D! z( @( ?( i: K" }! Q
  751.         strExtLocal.Empty();
      ~  f; \/ j0 c- x' T9 W* }* |9 y
  752.         strFullName="checkversion.txt";% \7 \% V1 t* }& y1 s6 {
  753.         dwProgramState=AP_CONNECT;& {2 o9 ~: G3 @* h0 O; ^8 S
  754.       }
    . c+ g* q3 `! |, P0 p
  755.       dwStartUpSteps=4;
    ; d  v. y+ {2 ~( c2 c; W, y! s
  756.       break;, h) v6 r  R: i9 K2 L
  757.     case 4:3 T( ~5 [& ]4 i+ x0 a# o) y3 J- x
  758.       {
    - U+ F+ \8 Z2 u9 s! y$ X
  759.         FILE *fp;
    2 ]+ u' m  H6 m% @1 L/ H- i
  760.         char szString1[128];+ t! i. K6 X- g/ ~3 x- h1 ?
  761.         char szString2[128];5 \5 i4 l5 r, m$ v# L+ [" w
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    7 ^- M* Y$ m+ }- _) D. T
  763.         if(fp)) A# @: r/ O' r; b' A% _& L2 s. J8 g
  764.         {
    0 D+ M" D6 _; }, S6 ]- }
  765.           fscanf(fp,"%s",szString1);
    / K* _) r$ ]0 {9 K
  766.           fclose(fp);
    ; _1 w7 b) O4 U9 b- w7 G5 h7 F
  767.           fCheckVersion=atof(szString1);+ m1 C* m' `% r9 D1 b3 ~# ?$ Y# ]
  768.           fp=fopen(".\\checkversion.dat","r");
    5 O/ y- {) V& e8 J: y& j( S
  769.           if(fp)7 G8 s  `$ l' L* Y7 Y3 v
  770.           {4 G, |4 w1 k! P+ [
  771.             fscanf(fp,"%s",szString2);
    - N0 r* M1 E+ e; |* _; |, {
  772.             fclose(fp);
    , q2 Q4 m! j* }. e8 u  _  o0 i1 L
  773.             if(atof(szString1)!=atof(szString2))
    8 h; Q, \( t$ S8 Q5 u( a9 P" g. Z
  774.             {" {6 |, U8 v& ?8 z
  775.               if(!Dn.Connected())$ u" ^& K2 s6 r: t; [4 a* [/ u
  776.               {3 G* M/ }. S) T# V4 I
  777.                 bFirstUpdate=TRUE;
    * A  m3 n0 T' [* Z5 i8 d/ e9 F5 ]
  778.                 dwTotalFiles=1;1 s2 q" n/ E3 W5 n* H" _4 {5 \
  779.                 dwDownLoaded=0;
    : z; ~! Q( f3 k3 _
  780.                 bSilentStep=FALSE;
    , [+ S) h0 h4 _, A8 g1 e
  781.                 bCompressed=TRUE;
    0 R- Q. D/ {3 i" C
  782.                 strExtLocal=".\\DownLoad\";0 }6 f( M7 j$ [- @% E' B
  783.                 strFullName="update.txt";
    ; B# p' S; Y: p+ A5 a! _  k
  784.                 dwProgramState=AP_CONNECT;' w% D' q( u" y6 x8 w
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% V6 F! w& B  M( Y9 u
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 d7 J1 W1 g6 u. p
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");9 y; v6 {, j; [! p# d

  788. / `$ U. x' H% K: D2 v
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 _; ^/ I/ I9 ?* Q. ?
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ! x% T0 j+ g5 B: m9 T/ \: n. \0 r
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    8 c( s, }9 [# ?. a" n
  792.                 {
    + m1 w0 b+ z9 y# ~8 Z8 o& `
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");% U: X  k. P- M! h, c' ?
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    1 ~' ~% e5 T; z3 D
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    4 u) ^# M" b3 H0 g) i
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! A8 m# F# c8 P; t
  797. - d- d( |6 Q& p
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' h! G# Z, c# d. F2 O
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ y  i5 I6 ]# ~$ k% k- ~9 @
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");7 _% p/ j2 m3 a2 A  ^7 q% ^
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 F+ C. W& ^2 O# r7 k/ x2 O
  802.                 }  B+ ]7 g( _4 d
  803.                 dwStartUpSteps=5;
    6 T# g0 A) P% o
  804.               }
    5 Z$ N4 c1 C. H$ H7 H
  805.             }. j7 S. K+ S  a! ~- [9 J  l
  806.             else
    " H9 j0 x; }+ x3 j, y3 w
  807.             {
    0 J8 c; k! x# g8 A
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ( y/ [% V' E3 f9 |
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 F8 b4 ]' b0 f
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");6 W1 X" ~8 o3 k1 `4 X' c. _
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");6 M- J# m9 o, a% q5 Q' v9 _

  812. ; I; i. _: r& C
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! n/ @" ~* S% G: x7 V& p
  814.               dwStartUpSteps=99;
    2 E% t  E* V6 l3 \
  815.               bFinishUpdated=TRUE;( u' Z# c% ?- E2 b; Q
  816.               bCanUpdate=TRUE;
    ' Y2 b% e& M( t) B' b0 C' k$ M, k
  817.             }
      Q& n, J$ @" n8 R4 G
  818.           }& {9 w# U+ F  J' [  _/ [
  819.           else9 D1 O) W* Z- k
  820.           {& V. n: N3 I9 ]1 d. [  P! i( B
  821.             if(!Dn.Connected())
    3 {' X$ H8 z2 b. O
  822.             {6 `9 q) R7 w+ E
  823.               bFirstUpdate=TRUE;+ O, @2 e; ]! s9 {2 `+ F
  824.               dwTotalFiles=1;2 O4 k! n0 D3 H2 D
  825.               dwDownLoaded=0;9 d6 t+ j0 q6 C, n: C
  826.               bSilentStep=FALSE;2 ]5 J% s1 M; I# a
  827.               bCompressed=TRUE;4 a% r% M* [8 |/ P/ B* V+ \" d: y
  828.               strExtLocal=".\\DownLoad\";
    1 c& h% x. G& X- M$ h
  829.               strFullName="update.txt";
    1 d9 P" @6 [( z( I* K/ n' h
  830.               dwProgramState=AP_CONNECT;
    9 C# Y1 l5 ^8 p% r, |) g6 W5 N
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # G9 a4 L% M0 I7 C
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ; L- M& D9 u- U: A5 o# y+ D1 M
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");- @- y8 e& ]5 f3 R
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * Y/ U3 R1 A0 n
  835.               unlink(".\\DownLoad\\checkversion.txt");( f% D3 S+ l$ ?5 F# D2 G; F
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    & o6 ], {- Z9 i) ~( T6 f
  837.               {
    1 l: g. [8 E. O2 ]0 O6 R4 [( n
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");) N  p$ g+ @0 G7 d
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    - F0 Q2 o1 t7 S2 a1 J
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");$ V8 O5 Q  {2 Z: r* J
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - }3 }& ~1 l9 _3 l( m& T
  842.                
    . R. O; C- j$ k8 s" T8 N* s% h
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  \  O; f  Q; i6 [# X/ r
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 G' O. B% y$ ^- R! Y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 w; ~5 D0 w( e
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! H; `% J$ l7 ~% \. ?
  847.               }
    : o, c; x9 {$ ]3 J
  848.               dwStartUpSteps=5;$ e/ t% x0 ~; s! R+ q' a6 \2 a1 C# h
  849.             }
    3 [& E+ l  p% b" B% E  G
  850.           }1 f2 R$ ~5 U' l2 w$ E- I( F
  851.         }( |  [; J; Z% s. z) t) v1 a6 |. R
  852.         else/ X6 M2 d1 ?& |
  853.         {
    % C0 M$ G( N0 {, F
  854.           dwStartUpSteps=3;
    , I: Q8 X' ?' J4 n$ U* }6 x5 a6 M
  855.         }9 D2 ~: h1 a3 H6 v/ o) _* k
  856.       }
    $ `! \$ u" v1 Q
  857.       break;
    / {, a" e, G& p$ a! K3 P
  858.     case 5:) N* @" ~7 B; ~
  859.       {
    ) M6 S& }, O% P( o8 r! k6 i
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)4 N7 r) U' U* I3 \* _; M
  861.         {
    4 D* `! W3 _: @5 O: Z* @
  862.           int opt_overwrite=1;  @0 t- L0 Z" H/ R" X8 a
  863.           int opt_do_extract_withoutpath=0;
    2 N" J( A9 i! I% W
  864.           unzFile uf=NULL;
    2 P: k( z# l4 A& L/ H- _  g

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-20 21:32

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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