CSUpdate.exe源代码

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

0 C" a; M3 \1 l2 \. |# ?
  1. / RevApp.cpp : Defines the class behaviors for the application.
    $ |: P, }, w7 v; A" U
  2. //
    " K" d% k& W5 _7 M6 R) @- C3 A) u
  3.   i, W8 L- t4 S
  4. #include "stdafx.h"
    3 t% I. C" |  @9 K
  5. & v+ K: k- \: T- p, ?8 t
  6. //#define UNICODE1 O/ o- Q! E9 S* B0 D3 U, l: z
  7. //#include <gdiplus.h>
    & c& I* L' z' t: G! i1 k
  8. //using namespace Gdiplus;: Z- N( M4 H8 O9 g3 n! h

  9. 0 S; w& y: o& |4 j% u. E  e
  10. #include "RevApp.h"9 t/ \( N* z6 ]  O6 ?
  11. #include "RevAppDlg.h"
    ) ]% t" Y5 \( C/ p4 D

  12. " o9 e1 t- }) l) e/ ?9 l
  13. #pragma warning(disable:4786)5 y0 x2 f$ `3 \! d& z) X# m, F
  14. #include <map>
    : J, z# p) Z  \; p" B0 i
  15. #include <list>  b5 ~9 E0 t  h% B* U0 x7 b9 ?
  16. #include <direct.h>" \' @$ T5 O$ l5 {; k3 Z

  17. ( J7 W  Y6 d4 d* \$ T# }
  18. #ifdef _DEBUG
      N/ f3 }- w; {6 G
  19. #define new DEBUG_NEW# Y- p2 r  g8 q5 u0 F6 C8 n, R
  20. #undef THIS_FILE
    - I9 \' u) r. a5 X% y* ^- g
  21. static char THIS_FILE[] = __FILE__;" z# L* c- o! `9 p8 |
  22. #endif: u' X: y0 x6 {: \7 \
  23. #include "SkinResDef.h"
    3 R: S" G/ d) Q* m( W4 X! S3 c
  24. #include "ChangeBG.h"$ h! p& i" B9 z1 |4 F' s. V4 _1 v
  25. #include "AFXINET.H"
    9 |: q7 a$ B2 ^3 |. U5 ]
  26. 8 f$ W2 b9 ^# a- |2 F. a
  27. #define TRADITIONAL_CHINESE 0
    3 \% D2 I2 a* i2 P# x' X4 S+ `9 e
  28. #define SIMPLIFY_CHINESE 1
    * A! A6 g1 @5 Y2 @7 R
  29. #define ENGLISH 2
    + w" t& C4 d; g* @5 W; Z
  30. int m_iLanguage = ENGLISH;
    - c3 f( u' m4 e& b  D
  31. /////////////////////////////////////////////////////////////////////////////
    & A9 Y& [+ M, ]' K7 o; E
  32. // CRevAppApp' z; v5 }3 h$ |% Q% f

  33. : ]: |8 }" V0 e" W; |4 A0 E
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp); q9 i* J+ }# U- f$ ^
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    - }, W  v7 U6 M$ T% ]
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.+ H; z. k& ^' ?8 m$ G, v( G
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    * }( N2 Q4 U+ X" L  N2 B- d
  38.         //}}AFX_MSG0 q% Q3 r' s/ o9 u
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)1 N+ ^2 ?' K; J2 J2 }/ y9 y, Z
  40. END_MESSAGE_MAP()
    + }9 V- t2 F% t7 T7 q5 C9 c
  41. 2 g. K! ~5 ?4 f7 L2 [
  42. /////////////////////////////////////////////////////////////////////////////' K7 H  R( m* S
  43. // CRevAppApp construction3 U1 j% A6 u$ g

  44. ) c5 h/ O- ]0 c- ~# @$ Z
  45. CRevAppApp::CRevAppApp()
    8 R1 c2 U7 g; t6 i. }
  46. {1 |/ G, l4 z  |( E8 Z7 Q+ x; U
  47.         // TODO: add construction code here,, `7 `! m" _' v- I
  48.         // Place all significant initialization in InitInstance
    ) v3 C. X3 E! X& ], t
  49.   bDisplayIsBig5=FALSE;. f" A0 h+ _* i: f1 C$ _) Z
  50.   bRestartUpdater=FALSE;- C% g6 N/ s% T" b! I6 Y& b0 k9 b
  51.   bFinishUpdated=FALSE;! o1 V8 W) B- U+ A: Q: G
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ! N! \% W' D2 w% ?: J0 E1 o
  53.   InitChangeDataBig52GBKS();
    ! t$ T) V1 E& X; @4 i) C- R
  54.   InitChangeDataGBKS2Big5();. X+ b5 T( N" h0 f! U- [- D
  55.         //
    * ?% P- h: t* I/ d0 j  k
  56.         bClickRunExe = FALSE;
    1 S7 _7 l7 h* Z9 @8 a9 t
  57.         //' a8 m# M- `4 H) Z- H
  58. }
    1 b) T; B: e" j# O" v5 C0 p* v
  59. $ n" F& ~8 ~6 Z; u) @
  60. CRevAppApp::~CRevAppApp()
    7 s  |) d. P5 [/ S' W0 [  q/ m
  61. {
    & E& v8 P, U  L8 U1 f' k3 m
  62.         // TODO: add construction code here,
    7 L/ E% _. ?" O+ ?, T% m7 n2 j/ M
  63.         // Place all significant initialization in InitInstance& w# c8 O3 I! G
  64.   EndChangeData();7 D7 s) k- y' a! {$ m
  65. }
    3 f6 \2 C+ X+ T( S4 s# X
  66. 5 e" E% w. D4 z$ J
  67. /////////////////////////////////////////////////////////////////////////////1 @9 W( p! b: @- v8 \
  68. // The one and only CRevAppApp object
    8 M. ~3 b% r  h

  69. 7 U! f' [1 V6 h. \; m
  70. CRevAppApp theApp;
    7 `6 ?2 g% X$ A/ P+ {  k

  71. $ l/ \# f2 c1 g0 m; p3 @( `0 A
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    $ i5 j0 \: l1 i, l2 E
  73. {
    7 o! n4 B/ n1 d+ R4 [
  74.   int iEOF=0;9 R+ w8 c; p. j) _5 H' n( y! \
  75.   char szTempName[MAX_PATH];
    0 [$ R: {  `$ [  w" S
  76.   *szFileName=0;7 A8 I1 T, A) Z: Q' O. \% x6 z/ a! Z- e
  77.   iEOF=fscanf(fp,"%s",szTempName);
    5 T6 e. L7 z$ k) v/ u% l& e" y; O
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')" F6 ]6 `8 v4 X% I; i- w+ h  r
  79.   {
    " T  F8 o* P8 o+ s. J# ~& ^: N8 H
  80.     strcpy(szFileName,&szTempName[1]);
    - a) |( g- W' @. H4 l
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)9 k) X; }. I6 j1 v
  82.     {* _8 c# a6 M: h5 ~! s
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & ^" ?% {/ H2 c) f) K$ q  R
  84.       strcat(szFileName," ");0 d6 S1 K* u/ |3 V( o
  85.       strcat(szFileName,szTempName);6 ^5 h4 ~, A* ~' N
  86.     }
    ; K* j. E4 z5 U; J# Y+ t( K
  87.     if(strlen(szFileName)>=1)7 H, p2 a; f2 l- Q
  88.     {
    9 ]  |% f8 {" Z& W/ |9 n8 n
  89.       szFileName[strlen(szFileName)-1]=0;" E  o) b& d- \* p3 f
  90.     }
    3 V9 Q6 G1 d+ o! j0 u' S
  91.   }: ]+ e1 @9 V' k! b. t
  92.   return szFileName;$ T- P/ Z: x3 B/ P$ j9 h* h
  93. }5 F! q6 Q6 R( r2 V

  94. 0 a/ f7 V) A1 W# F* K5 a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ) L3 E- _0 m# Q' J) W* G) C/ B
  96. {) M3 g7 O) @6 x& p; D( a: u
  97.   FILE *fp;
    , s/ m5 I$ i1 L8 C
  98.   char *key=NULL;6 @0 }' N9 P# e/ T0 h
  99.   char version[MAX_PATH];
    9 G# D$ \( ?# G6 n# L) Q
  100.   LPUPDATEFILE file,olds;
    , @* f4 _4 y% Q5 i$ u, @0 R
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    * q8 r" V. g: r! q
  102. : t1 N% t8 w8 a+ ]9 P7 m
  103.   UpdateList.clear();0 \! {/ v# B1 n, s* C. Z+ }0 Y, r  O
  104.   UpdateFile.clear();! }- ]3 _" e7 m" g  V- c5 ~
  105.   if(GetFileAttributes(filename)==-1) return false;
      K- C5 W- H6 d# _, d7 B& F* F
  106.   if(!(fp=fopen(filename,"r"))) return false;/ B: O: b( J8 j0 ]
  107.   fscanf(fp,"%s",version);
    1 u  j) a8 `  y! M
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }% Q" _2 |8 m3 T$ ^) x
  109.   while(fscanf(fp,"%s",version)!=EOF)
    3 G% O( }* q" v9 i0 `/ p/ p& Y
  110.   {
    9 ^9 y0 V- |, n* J8 x5 ~
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, G4 ]1 c+ l  ]4 U
  112.     fscanf(fp,"%s",file->path);
    ) u( T# h4 A0 I! b. Q: r
  113.     ReadFileNames(fp,file->file);$ a3 m, F$ J5 I* l4 ?& F3 ]- L
  114.     strcpy(file->full,".");4 H/ Y: {0 X# P" {3 v2 ~
  115.     strcat(file->full,file->path);
    , {! q( V4 P8 h. E! u+ T
  116.     strcat(file->full,file->file);
    + q/ g9 [7 i& i" S- ?
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    , _) ?+ B4 }- \
  118.     {9 m& x% W* s3 T8 x! R5 A
  119.       file->vers=(float)atof(version);$ c* e* o) W9 A$ Z
  120.       UpdateList.push_back(file->full);5 D* f1 d! ^3 `* b' o/ v/ q
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ( T* o3 u& r5 r2 r' @5 S% v5 p
  122.     }
    ' f2 a. w( }+ Q/ l7 r
  123.     else
    " ]& o& V& G( V. U  D
  124.     {
    3 c% h# F( w' Z, c. J& @2 Q
  125.       olds=(*p).second;8 s' S  X, U4 ]1 J3 I6 b' m# [. x/ n
  126.       if(olds->vers<(float)atof(version))
    & i7 n- l8 \2 W; F! I
  127.       {9 r3 E# W' g3 S5 n" c6 }6 N
  128.         olds->vers=(float)atof(version);
    ' p: I6 ?7 f3 X) }# @
  129.       }
    * O) U7 m& h6 V1 d
  130.       free(file);
    9 s. }: Y' K8 v7 M4 Q
  131.     }. y( R- v$ O; T" n$ P, H; o
  132.   }* P! G8 S5 H! s; m+ ^
  133.   fclose(fp);- i$ ]0 ~" J1 Q' K( \% |4 _5 l
  134.   return true;
    ( D, P5 @) C3 C6 h, P
  135. }
    . d& j9 G3 y6 u( R6 N1 F/ O

  136. 2 i$ ?2 O* w! m) e$ Z0 u* _7 ~. I, r
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)6 T3 U7 ~2 M7 u& Q0 g
  138. {7 y; x* z( V- N) Z
  139.   TCHAR  szFull[MAX_PATH];
    6 Y& v0 C& D. _4 e; [1 q" V
  140.   TCHAR *token,*inter;
      d( ?$ n2 c- ]0 ]( h
  141.   *szPath=0;
    9 |- a/ I: M4 x+ X
  142.   strcpy(szFull,szFullPath);
    1 f) }8 [; G; K: J3 K
  143.   token=strtok(szFull,"\\/");
    0 O; e' l4 G. ]8 U
  144.   inter=token;) ]5 ^# o& y! b7 \! @: ~+ m) x
  145.   while(token=strtok(NULL,"\\/"))% ]3 P9 k: ?6 ~$ i6 h
  146.   {' b  U8 S4 U; N" r
  147.     strcat(szPath,inter);
    & \( X; X) ~* D% K: s/ b
  148.     strcat(szPath,"\");
    # m- n; M) ~' ~8 w
  149.     inter=token;
    - I$ z- c) j3 m5 o: j7 u  \
  150.   }
    4 m* F1 |. n( n. Y! g
  151.   return strlen(szPath);
    6 v5 n- A' ?! n% a9 c2 T& k- R* x
  152. }
    7 x' u1 ~% m  H2 }! Q0 j
  153. 2 D+ a+ g6 Q4 }! W9 X
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    3 u3 F6 X) Y0 h0 B% [0 E
  155. {) E$ o& s/ }: V' v4 {
  156.   DWORD attrib=GetFileAttributes(Target);
    : A0 e4 ^5 h$ c. M. D
  157.   if(attrib!=-1)4 A/ D- {# c4 K: \
  158.   {: X, t' N# ~! \0 L0 c
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ Z0 G: F! I" Q. N9 c8 y
  160.     {0 A' d9 p' ?! o% ~
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);- v9 ~- [/ E' e" _# \
  162.       SetFileAttributes(Target,attrib);* Z1 F2 l& r" c: n/ d
  163.     }: p% T& I/ Y3 L5 v# E
  164.   }
    ' \* D) e9 T0 |: y
  165.   CopyFile(Source,Target,Erase);
    % |! F, G0 u# t8 J; J8 e
  166. }# ]$ U0 [6 l1 z$ b9 U" E0 z( E

  167. - ~# o$ V/ ~$ |7 E6 P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    2 ^* E: H' m5 E# a6 E3 M
  169. {
    & A, h5 ^# }5 {7 J# R7 K
  170.      FILE *fp;
    1 W( ^4 X4 u9 C2 N: T
  171.      char  szBuffer[8192];
    6 Z& I* t% L1 A6 w; C
  172.   va_list  argptr;
    & l. \+ Y% m, y  N# q: `
  173. 2 O0 j, a" w/ r) f& I6 [5 c7 k
  174.         va_start(argptr,message);6 @# R9 o- `9 j9 W9 S8 `+ P' v
  175.         vsprintf(szBuffer,message,argptr);
    " |. ]+ T. P1 J- [6 ~4 T
  176.         va_end(argptr);
    ' n% `# i( e9 b' L4 |
  177.   fp=fopen(FileName,"a");$ }& t2 ^9 `4 c
  178.   if(fp)* W* ~) A' S: b7 a3 c9 r& X
  179.   {
    1 K1 r3 _' H2 p5 j5 x+ p1 F
  180.     fprintf(fp,szBuffer);
    : o- C0 h0 W; l, o3 ~/ L( [
  181.     fclose(fp);3 F# B5 M; G) \
  182.           _flushall();% O' R7 u" u* h. M9 \9 b
  183.   }) L: @4 \9 r4 D6 i4 p6 O
  184. }: X: J6 |' z+ X1 p2 }5 Z

  185. : A# \" g$ @; H  L8 l6 I
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 C* K- b  Y+ @# j& k
  187. {
    ( X# @6 M* j$ W* r& S/ c
  188.      FILE *fp;! R% b3 K  `3 }0 i
  189.     DWORD  attrib;# }; S4 `$ ^# k! W6 c" S
  190.   attrib=GetFileAttributes(FileName);0 j9 }  j/ u5 h$ F
  191.   if(attrib!=-1), M  J# M+ \& W0 Y- W2 A  A# D
  192.   {
    ( R; w2 c9 j) m4 x
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);% U: g8 H) s3 P# p. b4 M
  194.     if(!SetFileAttributes(FileName,attrib))
      O& i& ~* s! E( N
  195.     {6 s3 R$ B1 i5 a: j) \
  196.       return FALSE;7 ~" Z: g; Y: b0 M; n
  197.     }
    ( h% f$ w# n9 x' X! X" F1 `
  198.   }) g1 \) ^7 g- H' \: h9 F7 E( e
  199.   fp=fopen(FileName,"wb");* G) u$ E- e) {- k) S
  200.   if(fp)# m" ^2 \! \! b5 L; k* {
  201.   {& E& ~7 i) j4 K# c4 r& M
  202.     fclose(fp);
    ! e$ S2 `6 @* `& m1 @. c; h
  203.   }2 r, Y1 T0 I; ?; q, y" x! l: {2 }8 u
  204.   return TRUE;
    8 }) S. |8 S' J( ^* B: ?
  205. }
    " y7 W* u& `; m% {

  206. / V) B. a: n5 o
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + R' Y/ Q8 e; f/ [  g4 G
  208. {. k2 S  F* u* N8 t" q3 }( N% U
  209.   char filename[MAX_PATH];  L2 S& }* V! Q! z, I" A' c/ k7 J3 j
  210.   LPUPDATEFILE file,olds;
    3 J3 [: a8 e  p9 h! |8 X
  211.   std::map<int,CString>::iterator i;
    " z# k# Z# K/ C- m( s
  212.   std::map<CString,LPUPDATEFILE>::iterator p;& E4 A" @( C( v' b& g/ E' p( B- \
  213.   std::list<CString>::iterator l;
    , x0 }6 ]. c7 [3 ^

  214. + o% v% k3 u' ^; s' i- J7 U1 Y
  215.   if(bFirstUpdate): f/ h7 w# T$ |2 s; T7 K$ r
  216.   {
    $ {' P- I- X. j% k! W; {' L
  217.     dwCurrFile=0;: y9 x" ?# |. X' A
  218.     bFirstUpdate=FALSE;
    6 y) k# _% Q$ i, _; d- _, i
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ A) y( F6 ~7 f( t  K9 K9 y
  220.     {
    1 a3 @9 D  E: j/ ?
  221.       dwTotalFiles=UpdateLocal.size();
      r  Y7 L( C0 S! P8 h' a% k
  222.       dwDownLoaded=0;
    $ E2 L# V+ a! c) f! J' x
  223.       bSilentStep=FALSE;2 ?3 F6 a0 G! f" r/ y
  224.       bCompressed=TRUE;8 Y" ^  V$ M6 j, U$ i. s+ l
  225.       strExtLocal.Empty();
    ; F9 G- X: Q; g5 C
  226.       strFullName=(*i).second;
    8 p- u& W. g& D1 T* Q
  227.       dwProgramState=AP_CONNECT;
      n0 ~" ^% v; n: e, A
  228.       return TRUE;8 X; p6 A* ?  w( E: u" N
  229.     }- y1 I$ @) A; ~& ]9 E/ N
  230.   }1 |9 ?  K+ Z- H
  231.   else if(bRestartUpdater==FALSE)
    ; t2 n5 `7 Q8 f( S! |/ M
  232.   {+ T( U2 K) o5 j' f
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())! J8 G# p7 u+ X! l+ i) a$ ]
  234.     {
    : t2 J3 G: y: ~" u3 L; l
  235.       file=(*p).second;
    , T! o% d  j& G, S6 D4 Q
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())5 p5 n1 A) d6 Z2 h5 Y0 T
  237.       {
    / I- b/ g7 }2 V9 i1 ]: l
  238.         olds=(*p).second;
    # K. W. e, s/ Q3 }& f* D# V4 i
  239.         olds->vers=file->vers;. u1 y: O8 r& {2 S7 w" o
  240.       }" W2 o, P- c/ |; ?* H) f
  241.       else* M  D& i1 V2 c4 T0 ~" v
  242.       {
    5 l) I$ n! C) k6 I3 u" E
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( z3 {5 a* \" H& R
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    8 {5 ~( \' u# m9 y6 |4 M7 {
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));: l" ]. M" w# l& X- B9 p' d: y
  246.       }
    7 T3 M5 {( c3 E1 u# T( [8 z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");) f  c7 i3 k8 J
  248.       sprintf(filename,"(%s)",file->file);
    3 M) l' \* E! N% @" B5 o7 ~& t4 ?
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) C2 l. h7 _8 o$ y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " c  E  L! S  D$ @
  251.     }; a! ^' o8 _3 f9 q1 ]* E8 p7 s
  252.     dwCurrFile++;
    + A% u6 N8 n4 n2 ^
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), B  Z9 _/ \- |) _1 W& u0 w
  254.     {
    0 [3 b8 h7 H& `' Q+ p! V$ Q3 D6 K
  255.       bSilentStep=FALSE;0 z; L% y$ G5 x' m' Y0 U  ]
  256.       bCompressed=TRUE;
    $ Y( `. c  n; F' c* w  I$ J
  257.       strExtLocal.Empty();
    ) ]2 d1 U- V9 K( M8 I: H2 |
  258.       strFullName=(*i).second;4 \" O. z+ ?+ h2 X7 c# X
  259.       dwProgramState=AP_CONNECT;
      ~( A! W$ D5 q* v9 E8 E$ c1 E" g
  260.       return TRUE;8 _5 S$ [# v% y) X! O8 R$ H
  261.     }
    $ b9 ]' d5 \+ {: b, g' {! a" J
  262.     if(!bRestartUpdater)
    6 z3 r& k" f# W: t  P2 o9 |
  263.     {* S9 \# s# q- B" K% v9 E7 ?4 x
  264.       int iCurrSize,iFileSize;0 W. @" j1 }, H2 W) x
  265.       iCurrSize=0;1 Z$ \& t/ r9 M; j6 S- O
  266.       iFileSize=UpdateList2.size();
    / f3 C9 F  z9 j0 `: N0 x
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");. c; @) u* z" _+ D& k' Z* t
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    7 `; }* j9 {2 W# s4 i4 f
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
      J) m, C- ]: z7 H3 S
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 G8 O( F' M( y1 j3 f% m
  271.       Fclearf(".\\update.dat");
    , A! z9 X! N3 S+ ]
  272.       Fprintf(".\\update.dat","Bloodyf\n");7 j0 y0 ^: e+ {* O. z+ l$ {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)$ X8 K  r: h( S) w9 `
  274.       {& Y. c& Z& S1 Q! H( t' |
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    4 a2 ~0 g) F7 G' X6 A# `
  276.         {4 r" P- Y  ]. }& K
  277.           file=(*p).second;
    8 q* N1 r. c3 c  j8 y9 P/ l, z( A
  278.           sprintf(filename,"(%s)",file->file);
    9 O0 {+ Y& _: m
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 q1 v$ p; F5 C- ^3 S9 M/ i
  280.           iCurrSize++;/ J* y( M2 [5 E& v4 A- Y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    , m$ l6 }9 g- @% d9 S# p; i0 d
  282.         }
    * y7 |& d: |! C" I$ w2 F
  283.       }) h3 T. r! E$ H5 \
  284.       unlink(".\\update.txt");
    , `0 X7 a; Q+ d- b
  285.       unlink(".\\update.tmp");
    2 t4 l' T2 i/ U& s- v3 d1 H  v
  286.       Fclearf(".\\checkversion.dat");! `5 m3 B# e. Y% A( _9 s  _$ u
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);) ~* z7 y) K) k
  288.       if(UpdateLocal.size())
    4 T- Z. s2 @' q0 n; h9 L0 Y, `  A4 P- r
  289.       {
    4 h9 J! m; y4 o9 ?3 U( R$ T
  290.         UpdateLocal.clear();
    - P1 _0 b6 |! E* D3 @7 B
  291.       }
    * p6 G9 i, m" H# S
  292.       if(UpdateFile3.size())
    4 I3 F' Z1 A2 t, {: b. ^& G( z
  293.       {
    % |6 N; ~: {1 I
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 J- C4 b; r0 ^' ~! i* ?
  295.         {
    - e; H0 ?. l" V8 G! E  W: Y
  296.           file=(*p).second;
    4 U# o0 }  N, K# w( H3 M, Q
  297.           free(file);- G9 C  x# l5 n- @. g5 V3 P8 Y, j5 w; B
  298.         }
    # H4 W0 c1 v: p( x+ P6 ^" J6 o
  299.         UpdateFile3.clear();
    4 V$ f2 k" R4 m
  300.         UpdateList3.clear();
    + ]+ O: q; p- D! r; ?( h
  301.       }' M% \6 T0 A  W/ f3 Z* |
  302.       if(UpdateFile2.size()): A9 ^5 g6 H7 ?0 G: q; Z3 ?5 E  O: o7 l
  303.       {, m% R' t6 A) J" S/ _  T
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 U6 O# [8 q$ v  H) @) z  i
  305.         {8 @1 [2 q( B( j1 E( L
  306.           file=(*p).second;
    / U  [1 g# X* T4 p
  307.           free(file);/ f' d9 s$ g5 i/ ?5 e0 \
  308.         }& Q5 _' e+ V9 B$ {
  309.         UpdateFile2.clear();' A4 j5 W% Z4 O
  310.         UpdateList2.clear();9 j" [1 @& Z1 |. h& ]' O# V' `
  311.       }' v: O9 d( n4 n/ X
  312.       if(UpdateFile1.size())$ q% R/ D' R! T1 W
  313.       {
    5 b5 ~0 [5 o/ ]: t
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) n# M# y/ ?6 k% i4 w6 U
  315.         {
    : U3 [/ ^, a2 A
  316.           file=(*p).second;- K* `& I8 g2 r
  317.           free(file);! S/ b1 s  X3 u  [. e6 m, ^
  318.         }. X8 B% K* {8 E& n
  319.         UpdateFile1.clear();2 S* \/ e" A% S4 I# C
  320.         UpdateList1.clear();, @0 R4 O' }- O2 A6 ]
  321.       }
    & w1 Z' \3 r' o3 u+ X$ N
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));* y) d* y( ]1 b5 p
  323.     }5 b1 {7 B& F+ {: R5 Z4 B- A
  324.   }
      Q: m# w; E1 B; i9 x
  325.   return FALSE;; b5 }3 x8 _: d9 o3 l
  326. }" {+ _- [) K* ?5 {

  327. 0 o, T, j& _6 n% B6 P- T
  328. void CRevAppApp::ClearAll(void)) V7 E8 k* ^6 R3 ^$ f* Q* I
  329. {, f7 `: R" q2 K5 g! P* v
  330.   LPUPDATEFILE file;
    ( N5 H0 e4 u$ F( K, t% P3 A
  331.   std::map<CString,LPUPDATEFILE>::iterator p;: N& A2 T* D2 T8 ]$ G

  332. 6 `' L7 z: _1 ^1 A
  333.   if(UpdateLocal.size())# k" o9 E( S/ I" ^8 I
  334.   {
    ; p9 \0 H. A6 C( r
  335.     UpdateLocal.clear();  I) W. ~8 |) r0 f& M
  336.   }! g& a, N. w  v) Q* J1 z/ e+ t
  337.   if(UpdateFile3.size())
    / V" k) C& ?2 B3 B7 n
  338.   {
    % f2 p+ a2 b- ^4 J' l* t
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 K$ Q( k9 i# V/ j
  340.     {
    ! k# o7 E; V- u5 _
  341.       file=(*p).second;
    0 X8 w: @7 F" s/ Y  O
  342.       free(file);2 s& o& l$ N6 k) m0 w+ d/ r9 U
  343.     }: x# R- Y8 _# q9 n' w
  344.     UpdateFile3.clear();: f$ g, N$ o! E# q3 d& R) j+ R
  345.     UpdateList3.clear();* s( |; F6 C' g' |8 Q  P; e( V
  346.   }
    5 ~6 c5 m8 k- E  o) ^% o3 c% ?( _
  347.   if(UpdateFile2.size())( T; D8 l5 m& F5 y" Q) u" M0 R
  348.   {5 R1 y2 c1 R7 F0 \$ M
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' N4 X* N4 [: {- a. ]1 _0 |6 j
  350.     {' {2 s6 P& S- \7 B" X
  351.       file=(*p).second;$ c: I) B* N1 j7 q
  352.       free(file);( x+ a# i' G7 r9 k% d
  353.     }4 q2 m, M7 s3 t1 e
  354.     UpdateFile2.clear();+ w' P/ `2 N9 N: \
  355.     UpdateList2.clear();
    " g) d$ m; J* L4 m9 h
  356.   }2 g  |2 w6 a$ ^
  357.   if(UpdateFile1.size())
    ! {1 b2 A: z7 J! O+ W, O
  358.   {  r) q7 B, z$ w( ~/ b5 g- i
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . F0 m+ e. \: g: }& Y
  360.     {
    ! D+ g; k+ b8 _- ]6 N
  361.       file=(*p).second;
    , v6 X3 n% S* V. y; J" U
  362.       free(file);
    , |2 f0 q: k- [+ R7 y
  363.     }
    ; b3 V8 l5 J1 r% N' H) F0 d) |
  364.     UpdateFile1.clear();% E3 X1 Q1 e* e8 R. _
  365.     UpdateList1.clear();
    / \, U* U1 A5 M2 Q1 U9 |5 C
  366.   }* X* ~: ]* x5 `% N
  367. }  
    / @/ G, ~2 Z& h- `7 C$ H9 x3 W
  368.   
    1 S8 ^1 S& W! o! G8 e$ u
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 k" }& J$ ^7 V$ T- S% q
  370. {
    ( X: q; J& Y/ |
  371.   int c;6 h% s0 I# P. `$ I7 M0 K4 @( _
  372.   LPUPDATEFILE file1,file2;* D7 g6 x/ S4 y/ i
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;2 X- U7 o* f& R" L/ Y0 F: B
  374.   std::list<CString>::iterator l;
    7 z6 B1 ?) h4 ?6 \

  375. ; K4 C( n: w" V' w- c2 h6 {
  376.   UpdateLocal.clear();2 C4 o  G. X. F5 K1 ^; [3 g( i
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);; V6 f' u- _8 N2 |7 n
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    4 j4 c; E6 Y8 g) n# E. s/ w
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    1 p! c& J. V9 l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ( W9 t; \( w% ?  o3 K( f
  381.   if(UpdateFile3.size())2 |4 _  g3 }/ P/ |
  382.   {
    - R/ W/ _; c* r1 l/ h5 i  `9 N
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)4 J: F; K( S9 r! s
  384.     {8 Q) K" o; l$ e
  385.       file2=(LPUPDATEFILE)(*i).second;
    . {4 {7 g% Y3 f+ h
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / B* @% R. @! o4 S, [
  387.       {7 G# z- L# m/ Q) A# ?+ G
  388.         file1=(LPUPDATEFILE)(*p).second;
    ! ^. \/ X# Y' {% C. e' v+ T8 h
  389.         file1->vers=file2->vers;
    " ]4 h* U# K! L2 ]4 Z3 X8 a* X
  390.       }: |! Q3 q" ^+ N5 |& t2 _: j
  391.       else8 M6 w- D9 L9 o
  392.       {
    / c$ [. y- b0 J
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . q5 L6 [/ a! m" J/ N- t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - W% @; K0 e; i* ^2 }% a
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));- w. v. p2 O1 ^8 b
  396.       }& v1 a- g2 z5 j
  397.     }& X7 y+ k& B( J# O
  398.   }
    : X& e: X: D# d
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % p1 v! x3 N2 M
  400.   {
    # \! C. @; `4 A& I+ A& w& m% B4 b
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())7 O6 n2 U4 O# L/ N: [
  402.     {# \/ X/ z, E- \% V1 s! f9 ?
  403.       file2=(LPUPDATEFILE)(*i).second;, ^$ O' X9 E+ Z# Q. i. U
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 h8 p! }! m* r) O0 B
  405.       {8 I" n: W8 f( N7 B
  406.         file1=(LPUPDATEFILE)(*p).second;
    % F) [# Z& N* W$ _$ C0 h# ^
  407.         if(file1->vers!=file2->vers)7 j. r7 V. F; [6 p% S8 v- n
  408.         {! x1 u* y3 J2 G# V
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 v. W& z; N5 j& b, d1 [" Y, ^% h- c0 ]) h
  410.           c++;/ g  V8 K$ F1 H% a" a! U4 F
  411.         }
    # V0 L2 s! f5 T* t! e  X/ L
  412.       }2 w$ L6 i, x; g% I
  413.       else) c' Z1 p7 g' ?8 {* V
  414.       {2 P' I0 o; L; w' m
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( {; o$ r( ^5 L9 z) L
  416.         c++;8 z- g/ P" H% c4 V, ?3 I# x
  417.       }! o! d' D% U' f: d9 N
  418.     }, {8 T% A, V" f/ @. e% \
  419.   }- Y# ^: b' K' X1 W1 ]1 r5 }
  420.   unlink(".\\DownLoad\\update.txt");
    1 X% b; [' t% P; u& R4 c3 f
  421.   if(UpdateLocal.size()) return TRUE;
    . H% O1 ?4 J8 Q* D% x  {
  422.   else                   return FALSE;
    2 I' D' u; C0 o" D) U$ N7 C9 H
  423. }
    - D  O4 C' b' `7 [: C
  424. ! u. I  u; X! J
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    5 s' b9 A) n0 Q% Z9 J6 W
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ! F! |1 N0 S2 s8 D. D- _- Y0 R2 B

  427. 1 z& y, H0 u" B& A% J

  428. 4 H2 g; C9 {/ M4 ^8 Q
  429. & J% H5 Y. U! ~
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    6 _6 C: X& ~# |8 y
  431. {
    ; F6 H7 w. }" t- e5 i0 ]
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    2 ?+ n+ e: J" L5 i( }: G- K8 R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , S; o' [. e; |; [6 h/ {
  434.   {* n0 C0 c5 z" X9 O6 z
  435.     char szLanguage[50];, C# {( @- Q8 R* P
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ a+ d1 T: v% ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % U4 ^8 @" l0 _. Z
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    , B0 D$ H# N3 D2 t8 j" f
  439.     else                                   m_iLanguage=ENGLISH;; j* f  n7 e5 z$ A
  440.     char szRegister[100];
    ; D5 Q$ ~3 t" l) [6 n9 j
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 i5 O( _, v; ~8 O$ G$ @
  442.     strRegsName=szRegister;
    ) X& n& r! [# Y. s3 ]4 ]7 C8 F2 ^
  443.     char szPatchURL[100];/ i; O" M3 m9 i: a9 }7 Q2 U
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ D$ j, L( U9 o4 U- f: |
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- D. t* j+ |) V" k9 k1 X
  446.   }0 H9 e; }  [) s* O' ^
  447.   else( v2 q; F. F/ p: R1 f
  448.   {
    * h0 J& m1 v& x+ w6 j. j( y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);! R! I' I3 X- X4 p1 Z  |
  450.     strRegsName=DEFAULT_REG_URL;
      j, {: Q6 W* X- ?8 r1 @3 u
  451.   }+ r+ n; M( V/ w* k" n9 b; m
  452.   if(GetFileAttributes("hosts.ini")!=-1)* e4 l% C+ ?$ g' u$ e3 `2 \
  453.   {' S: f7 ^4 j* l9 B) G( z
  454.     char szIP[50];
    ; b: m( V" o6 ]) y
  455.     char szDIR[300];
      h8 j0 A- v) k* K- _7 l
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")), U3 U  N+ H% N- ?/ y/ y4 y
  457.     {& H2 l. d6 B6 i* U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");: B3 y2 I) D! t7 g) y+ n/ E  U# m
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    : n! ^4 z. X+ N3 O* f( u
  460.       strHostName=szIP;
    $ S) B/ ?$ s7 \4 P
  461.       strHostPath.Format("/%s",szDIR);
    3 R* n  I$ c/ N( E4 [8 u  S
  462.     }
    . U1 l  k5 |1 _* N
  463.     else1 D* K$ r& L+ H6 \) T  c5 w4 O% X1 ?
  464.     {
    - U# w) U+ h% ]) ^8 J$ h+ A
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 [0 q( {  P( c5 \( x
  466.       {
    1 k5 U" X; `( G; _. T* U, S  S4 A: J6 B
  467.         char szLanguage[50];; Q9 z- o# W9 d, v: }/ p) ^& u
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& B: f" W! V7 U- Q7 m
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 P5 B  g# Z/ x9 @( |
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 W8 f* k% l& t  H) h4 Q
  471.         else                                   m_iLanguage=ENGLISH;
    9 [) P$ j9 ]( ?) ^+ k5 B
  472.         char szRegister[100];
    1 ~/ q( _, z6 W: N8 `# H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . {; c  t4 K9 }8 I* `' ?
  474.         strRegsName=szRegister;
    4 j) _) m- o- b4 C5 h; s" J, S
  475.         char szPatchURL[100];
    7 n( d8 L: k6 r4 x, f) Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ V5 [6 E4 h" J* e6 E" B
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 C3 ^/ G+ T# q& |
  478.       }
    " y3 b# }8 `0 n
  479.       else
    ; ~8 Z( p$ Y: i+ V
  480.       {5 e( \) a* C& H) {# k
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);! N& n0 C) V7 S5 S
  482.         strRegsName=DEFAULT_REG_URL;
    ; S. H- X1 j2 Q# s4 O
  483.       }
    1 W+ ^/ _5 G3 e$ ~+ j
  484.     }2 c0 F0 X% G  y/ m
  485.   }0 g: L7 t& p( a* m' t) S0 w
  486.   return true;
    # m& {! u; P3 ^! [$ b$ T! `, e* y
  487. }
    ( I) I5 M9 n( Z, J/ e- R7 ^& F

  488.   {& Q# X7 x0 i  g3 ?# H7 d
  489. #include ".\ZLib\unzip.h"4 `" Q/ y! R- a5 i. v8 @+ T
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);% S; i( b3 }) F8 I/ H( ]6 t
  491. /////////////////////////////////////////////////////////////////////////////. p/ p/ c. Z! m, W# D- d8 n, y# p
  492. // CRevAppApp initialization
    9 p  W2 C; y! {& e5 N
  493. 6 @* T( d7 F" [( m
  494. BOOL CRevAppApp::InitInstance()% M# ~# Y8 U- o
  495. {
    ; q6 a: ?$ S  |' {
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    $ U/ u0 N6 |% [

  497. 3 _$ Y9 r6 h) H2 J
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ( Q& m+ n& x- j" ?& b- i- i
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))2 |0 |1 C( H% [0 a3 f; [
  500.   {4 V- W. \2 L) ^' p; A
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");( x; K! ?8 C& L: B
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    , x2 A7 h# j) D+ K6 x, G% u
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    4 ^( q" d$ N  g0 C/ g
  504.     {
    5 t, ^& W- {. ?0 L
  505.       strcpy(szPath,szPathTarget);
    ( t; n5 ?( d$ W: J) y4 H+ V3 u4 b1 b
  506.       SetCurrentDirectory(szPath);
    - G) {, X- _  `7 F
  507.     }* i, u- u3 }( W: t# M) m
  508.   }
    ) B/ t5 |: ^) w+ h' N
  509. #ifdef _DEBUG
    . G" Q9 ]/ y& |  N0 }
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / A+ W! g2 L/ k! b5 D9 C6 c
  511. #else
    4 n8 Z& y% a# `- h- E7 r) [
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 }6 m: D5 ?3 }0 b4 N
  513. #endif
    - N0 ^# J" i4 D* B1 }6 ]6 R$ W( @
  514.   {
    " c* B% w7 [) V2 y
  515.     char tempFileName[MAX_PATH];. `) p- B* C; l9 D% v  c, R
  516.     strcpy(tempFileName,szPathSource);$ P* y' w- q! a& n- _$ i
  517.     tempFileName[strlen(szPathSource)-12]=0;
    2 Y. @) s0 g: u' A: o
  518.     strcat(tempFileName,"\\$CSUpdate.exe");/ a0 C, ^5 ?. L) k9 s! o
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);: m1 y3 X( |+ y- U
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);% f* Y5 t! @( z
  521.     return TRUE;7 Z1 b7 d( U" F4 T" c, {
  522.   }3 y9 _3 X3 E  t: g
  523.   // Nuke 0118: Delete run.exe
    / F6 G# ~- P) m! e
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    6 A# w' U/ `, X6 b) U* x# B" g! Y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");  R/ u0 H. I. u- r" D9 N
  526.   if(!ReadCfgFile("Config.ini"))4 x; |3 c. \4 z0 }1 [; Q
  527.   {
    $ j8 v! j7 k( x$ W0 j
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);% @5 C: h; K2 S  f) a- V: A
  529.     return TRUE;0 [" S/ G1 v% Y( H" s4 E/ t! [2 D
  530.   }
    / M7 a$ B: V4 Q& L/ w
  531.   HANDLE mutex;% z9 ^! d1 _( W- {' T5 i
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    5 g. u. n8 b3 n7 o; i! F( o
  533.   {
    " \& C2 k( Z, M' J& x
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS), x9 ~+ G5 H% t' x1 W( y7 O' c$ J
  535.     {
    / U& C  h9 p" Y- S! q
  536.       CloseHandle(mutex);' q; h% y/ I7 T2 U2 p% a
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ( V5 |$ t1 X1 l5 ?/ X8 c/ }
  538.       return TRUE;
    2 N( B$ ~2 G6 _9 [0 n( W9 D
  539.     }4 t' Z% T( u- Q4 o. k& H
  540.   }  
    3 q0 x# L+ w' [, i2 ^/ w* I- [3 z
  541.   CloseHandle(mutex);8 O2 C, a, F# c  N
  542. + t7 T8 b: s& p4 m
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);4 K2 ?4 W8 f* J$ o, u- o+ G! g! B

  544. " H+ F8 o4 ~% h3 J' n
  545.         AfxEnableControlContainer();
    - p8 A; Q# @+ [* G

  546. , M4 U" N  C3 G5 P0 Y" i
  547.   bCanUpdate=FALSE;! Z9 f6 J8 Y- k0 A6 `4 K
  548.   dwStartUpSteps=1;5 u8 s2 W2 R7 n$ a4 B6 _
  549.   dwProgramState=AP_NOTHING;9 }! d3 B' J* n' G2 u- T" ~; M+ J
  550. + K; [4 O2 x7 A( l% Y/ r
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);2 Y$ q7 I4 [3 O; }7 Z5 f

  552. / ^$ G) Y9 h# a8 F
  553.         // Standard initialization4 R5 D" o# F) U7 }1 c% R
  554.         // If you are not using these features and wish to reduce the size
    * P: ^2 E& g8 T$ ~8 C
  555.         //  of your final executable, you should remove from the following; s2 _. ~4 p, z% P9 }3 |
  556.         //  the specific initialization routines you do not need.& I7 ^) m- P) g, C7 ]% Z- E

  557. 1 R7 {0 \4 D% x$ e& C! K( N
  558. #ifdef _AFXDLL$ o. v% f' k1 g8 a0 P% j' f4 ^
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    9 g3 }8 Z* P& |+ R: q
  560. #else
    . r: |% {+ d) r" @5 ^
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    * _* n% H4 C5 V2 i
  562. #endif
    : w* j1 V& s+ K1 k& K

  563. & [% L4 |% z* c' T* \& W# }/ n3 H/ I
  564.   dlg=new CRevAppDlg;+ h8 K8 [$ x0 C/ r5 |
  565.   dlg->Create(IDD_REVAPP_DIALOG);4 ^$ N& p( K5 T/ H* b
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ! L! N" a' V" a+ U9 X# T
  567.   m_pMainWnd=dlg;
    " {* l  o9 Q, |3 k4 w7 L8 F+ H

  568. - e4 P  ~4 g/ |' ^
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    + h5 D/ I, ]) ~7 o

  570. $ s8 F7 J( K5 V8 w2 F
  571. //  GdiplusStartupInput gdiplusStartupInput;
    $ h+ a9 [  m6 `! ~
  572. //  ULONG_PTR gdiplusToken;
    % y& J$ q' n# K
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    $ Y4 R5 X# k9 O1 R3 j
  574. - R, H1 [; a, H1 i2 ~9 W: x
  575. //        CRevAppDlg dlg;0 D4 a7 c' N" o2 G  R- `- X' l
  576. //        int nResponse = dlg.DoModal();
    0 h6 ~* M8 H* g
  577. //        if (nResponse == IDOK)
    ( ]$ y3 ]( J* Q' i
  578. //        {$ \1 h/ f4 R1 g0 E3 v6 o
  579. //                // TODO: Place code here to handle when the dialog is" n; Z* b3 C- `  B! t" T- }
  580. //                //  dismissed with OK- n; C5 V* l3 t$ y' o
  581. //        }9 O. X9 T/ X$ \! V, H  U8 V
  582. //        else if (nResponse == IDCANCEL)5 y# U( I9 [5 i$ m6 O0 G7 B. v: g
  583. //        {
    # R- E' i& L) R# K# q6 P- b( A, X
  584. //                // TODO: Place code here to handle when the dialog is
    " d, @7 L) j! p6 v8 j, W/ N
  585. //                //  dismissed with Cancel
    - b" E' P; I$ \# k3 Q' [  |5 l
  586. //        }
    9 l- \' v8 t; {9 J* \6 g

  587. ! Q$ r6 f& s; V3 L8 A$ h: W
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ) `* f9 p" h" P1 A; t5 T/ z8 {
  589.         //  application, rather than start the application's message pump.
      Z) ]* S2 {' c' \1 n6 f1 h$ p
  590.         return TRUE;4 b  t# R! J% d# q( N% G
  591. }
    9 L3 k; U- p3 [8 I9 j' g: f2 n5 }) }

  592. - z! n+ F2 P% L( l& D
  593. char *CRevAppApp::strtok3(char *pSource,char *token)" q2 c8 d- E5 v3 L- s# L1 `  ~
  594. {7 U& C* D- V" _3 c
  595.   int i;' I2 h+ E; ~( a( `
  596.   char *szRet;+ {5 W3 z4 m/ e; K( c

  597. / H7 @. \5 v5 C5 \6 e
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    4 f" C: i- e1 R' x2 w
  599.   if(sztoken)/ V+ ]  x# V, W/ x
  600.   {5 ?- F5 H0 @- ]/ U  y
  601.     szRet=&sztoken[itoken];
    % \: [: e& F; ^! t
  602.     while(sztoken[itoken])
    6 {1 a' ^" M8 r4 \( Q- ?/ s
  603.     {
    : t7 b' X/ P( I8 ]; j
  604.       for(i=0;i<(int)strlen(token);i++)+ y! L( U# Y% N  h
  605.       {5 W) U6 t) R1 [. w2 h
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])3 a; Z, G) n/ t# p
  607.         {9 ^8 \4 F, ?8 h
  608.           sztoken[itoken++]=0;: W9 q  Q; m) c/ N# H; O* R
  609.           sztoken[itoken++]=0;
    0 w& U: R; e: u
  610.           return szRet;% O" e8 l$ ?4 g6 {8 N
  611.         }
    ) h. t; `/ n: i$ S6 N
  612.       }" t4 Y' r" v5 w
  613.       itoken++;
    9 b4 D3 Z3 u( n; K+ p3 ~
  614.     }
    5 L* o2 @+ K; m. v7 O( B7 D
  615.   }
    / T" S2 e8 p5 J$ H4 D) P- N$ F+ X
  616.   return NULL;
    ( Q' Z9 M5 r6 n- e. X7 J. @' z
  617. }
    3 c+ ?& `5 {7 W, W: S! R9 w

  618. % a# n  f! r% w
  619. void ProcessProc(long Total,long Current)! x& C$ m1 B- y' i  ~, p; \4 l
  620. {2 }0 f' G/ K! x9 ^" u3 I9 Q
  621.         MSG msg;5 G+ U6 R4 k& `
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);( ?5 j; i# ^$ T" v6 Z- N' C' C$ D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));9 z' f$ x7 H: d3 D& V! a& Q+ h& m
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    * }/ K! n* D/ k. Z2 ]3 w
  625.         {
    3 G1 |4 v% s( V7 \5 C  ]! T" d9 s6 t
  626.                 if(!GetMessage(&msg,NULL,0,0))6 U, |6 ?# M% f% m( q
  627.                 {
    " g3 S9 Q: B+ u& i' c
  628.                         return;
    * T1 z) x; U: L% y! L
  629.                 }
    3 `+ o( x( x$ y1 S' v
  630.                 TranslateMessage(&msg);, O' Z$ \( w, Y) K
  631.                 DispatchMessage(&msg);9 G* X8 D* j& \  ?* w8 U1 |8 k
  632.         }       
    1 O! |7 r" n% a2 k# c* u
  633. }. E! @  L9 O5 G! g$ d
  634. 0 I' D5 H0 Y  w$ o( C& `1 ?
  635. BOOL bFirstChar=TRUE;
    ' w4 G4 k) X' J! a% ]" G' i

  636. : |, I* t6 Q8 ?: G
  637. BOOL CRevAppApp::OnIdle(LONG lCount)% y* {0 U  f: O( i$ |$ o8 V
  638. {
    ; d. v# Y) ^. e. m( s/ t* R1 c
  639.         // TODO: Add your specialized code here and/or call the base class; h, g. J1 T# q) l* B7 f
  640.   switch(dwProgramState)- I* U1 h% Q* l2 k
  641.   {' V8 F+ F. i& w: L" f2 ?
  642.   case AP_NOTHING:! L5 E! m6 R$ ~+ @$ k8 g7 O
  643.     switch(dwStartUpSteps)9 p2 s3 h# \3 ?: h" j0 a$ v
  644.     {
    , O- L* W9 t: m5 c* Q! z
  645.     case 1:( C& q6 o+ B5 `* C8 D
  646.       {
    5 ~" }# M' q6 B2 Z! |; C
  647.         int i;  h; z0 I' S; y. K3 S* I% K# e
  648.         CDC *pCDC=dlg->GetDC();3 l- q, `: D; p* t- I: o1 M9 ~& y
  649.         HDC hdcwnd=pCDC->m_hDC;( S) v7 s8 j4 e1 C6 ?( s, E3 k
  650. //        Graphics graphics(hdcwnd);! r; p7 D" ]1 Y# U9 o1 J
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");/ v2 _" y+ A7 l# @# F! T5 B, R
  652. //        INT iWidth=bitmap.GetWidth();- m4 `9 h& }7 l  @$ I5 \- Q& e2 s
  653. //        INT iHeight=bitmap.GetHeight();
    2 ^( H6 X3 Z$ u8 n- H
  654. //        Color color,colorTemp;8 F5 H0 F* J. c% E0 A' C1 K
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% ^9 Z; C1 k& t5 C& a+ {
  656. //        {9 R% d9 f! i# a% N
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    6 O/ Z  O+ D/ _, G0 H0 s
  658. //          {
      C: P/ y; Y" E# Z! @3 _8 Y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);- P# v8 j0 l) }1 \# j
  660. //            colorTemp.SetValue(color.MakeARGB(. m: g& D+ k: D0 o
  661. //              (BYTE)(255*iColumn/iWidth),
    # o# h1 A( a" x# Y9 \5 D
  662. //              color.GetRed(),
    + y* V" x" c. E. o' O3 M
  663. //              color.GetGreen(),# W6 _% P) Z  o! h1 A) C
  664. //              color.GetBlue()));* ~! r2 {0 s' j9 x7 u6 j' G
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);; u% L+ P3 B+ W; v# e
  666. //          }
    * \( O7 L/ y; z
  667. //        }% q% S" ]. X1 L. g9 K
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);1 K0 J1 Y! y6 l# @8 Q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& h( `* ]9 M2 Z7 y3 u
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 x. q+ F  F8 J3 p# Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% c* o& P' K3 ]9 B0 R
  672.         for(i=0;i<240;i+=8), O, r% k$ l  D+ V" L7 r
  673.         {; k: a0 ]7 K0 A/ ?/ o3 M1 {
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 r: x6 P/ H5 Y9 {5 Q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! k) D6 @: q4 l7 O  v
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ X6 d$ Y( Y( k) r, w9 d8 g
  677.           Sleep(33);/ r! K/ L3 B* U) G# B
  678.         }
    8 t7 k3 d6 o% l
  679.         Sleep(1000);
    / L* J* ?  f# @5 x/ x5 V
  680.         for(i=240;i>0;i-=8)! n, ^/ c) C5 f) k5 ^
  681.         {
    4 z5 o9 z& Y: G5 ?  ~, l' |+ E" k
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 c* Q" N" O# x" `* u9 Z
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% F0 c" c2 k7 W: |
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 b( K- N5 i3 t* i
  685.           Sleep(33);4 ^0 G# d# v" O8 D0 ^
  686.         }
    " A+ R2 B. H& R& ]: ]
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    , n+ Q( f" Q& w& {8 y9 y1 `
  688.         dlg->ReleaseDC(pCDC);( y$ ], ~( G7 Z+ A
  689.         DeleteDC(hdctar);
    8 w  V9 z  V7 v9 O8 v
  690.         DeleteDC(hdcsrc);
    4 ^, [$ F- H: P/ Y. \2 i. F: x
  691.         DeleteDC(hdcorg);3 p; t) {5 W2 m. f, T$ R# Z6 ~
  692.       }0 s3 \7 V1 z& @
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);( I6 [" i; b& S
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");2 k# s4 |  I) N& Y8 G" {' f
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    - s( b1 y6 u* U/ @
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");2 ?' }4 w7 m% \) d5 T8 U, h
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- t  B) v% T( A7 h
  698.       if(!Dn.Connected())% C6 r4 r, o9 {% C/ G4 i
  699.       {
    : k+ n& ]8 ?. ^
  700.         dwTotalFiles=1;
    . m" d8 A; u, f" E2 Z# V5 }0 i
  701.         dwDownLoaded=0;
    : K; A5 x+ k# \- n, O, R. J
  702.         bSilentStep=TRUE;' D7 ]$ b# h- A7 `$ y/ {  [
  703.         bCompressed=FALSE;
      i: @* @3 `. @5 K! h4 A, d
  704.         strExtLocal.Empty();& {/ K0 C& A8 N  u# b; z. q7 T
  705.         strFullName="readme.txt";
    ( i, @* d! t- T( G& B- j8 m
  706.         dwProgramState=AP_CONNECT;  a: @1 S# J, q
  707.       }
    6 J8 G1 M; p3 G/ {
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    + @* p& _* U4 g- M$ j9 q; a
  709.       dwStartUpSteps=2;
    + D' [, C# U' ~! `
  710.       break;, U6 _. T' l8 s) p7 T+ i. [
  711.     case 2:
    ; ]. _1 M9 m$ X; ]9 b
  712.       {9 H3 e: u. s6 i- x1 Q6 d5 p
  713.         int iEOF;
    # m+ }0 a4 z% {7 A5 H) [! [
  714.         FILE *fp;* M, p/ i" {6 ~% @' w
  715.         char szString[512];
    - m! @9 U. k; U- C1 [# d$ c, A+ a  G
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' G8 w! l7 X8 ~) a& ]4 N8 M8 m
  717.         if(fp)" ^1 O5 B" P) b( P; x4 K, m
  718.         {
    & {6 m, @( V- o
  719.           do
    6 Q4 X8 ^# L0 V2 M9 f
  720.           {
    $ H* \7 r& E2 W1 s. }/ u' Z
  721.             iEOF=fscanf(fp,"%s",szString);9 D+ w; Y& ~" M
  722.             if(strlen(szString))
    " `6 Z( ^, T0 N# h, ^1 x
  723.             {% W6 ]( ]5 H- |$ H
  724.               if(bFirstChar)
    3 Q% k! p3 ?' P' k4 B+ X! ~; Z3 o
  725.               {( g- d! z3 m' N6 V
  726.                 bFirstChar=FALSE;
    $ s' i3 q; s/ \
  727.                 bConnectIsBig5=FALSE;9 E; x6 C5 M' S6 J( E3 m5 h
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    . p  E& G( M( e
  729.               }+ e1 H& T. E' m3 p! v! O  a
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 e$ y* Q' |4 @
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    5 D, |1 z# `% a" [
  732.               dlg->m_ListText.AddString(szString);7 h( X! S6 O5 g4 |& }4 O: ]
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " e/ S5 V1 f  s* b2 Y
  734.               *szString=0;9 K. B. q7 ?1 H3 K
  735.             }
    . `! ?; k1 f, E7 \  U5 I. E
  736.           } while(iEOF!=EOF);1 a$ \; _1 g+ I: ^4 |- g0 @9 `4 B4 a
  737.           fclose(fp);3 [& }3 L9 g5 n7 y, [( v
  738.           unlink(".\\DownLoad\\readme.txt");5 m& k' p9 O8 q6 Y- F2 ?( Y
  739.           dwStartUpSteps=3;
    : o- U. ~. b. j1 e
  740.         }
    ; t3 `: f' o) x5 S& C5 U& m; C0 \
  741.       }& D) ~# {$ Q( D, \
  742.       break;
    6 \; D& N% q5 x! {9 h2 K) f
  743.     case 3:
    6 K1 z' F) h* ?6 y7 L) R
  744.       if(!Dn.Connected())$ ]% f& t; V6 {3 i) P0 I- N
  745.       {5 w: Q: y, ^/ ?
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);* M! }& D; W: v8 k& N' W
  747.         dwTotalFiles=1;
    * Y- B3 t5 t1 @
  748.         dwDownLoaded=0;
    9 w7 T4 Q0 F3 T" p) k  i
  749.         bSilentStep=TRUE;0 A+ j/ ~& e5 ]6 h( U- h, @4 n
  750.         bCompressed=FALSE;
      }5 x0 w1 q& ?
  751.         strExtLocal.Empty();: q- H$ y! f' B! g, ^8 i
  752.         strFullName="checkversion.txt";
    - Y( m. H2 |# p/ m( [& B4 J
  753.         dwProgramState=AP_CONNECT;
    9 q+ Q3 y' q# u. v& `' B
  754.       }" W2 ?7 q( z7 e/ S8 x9 d# S
  755.       dwStartUpSteps=4;" q0 q7 K7 d; [$ l6 u
  756.       break;. Q5 f4 z5 S8 X. ]6 J
  757.     case 4:
    % I8 O3 p) ^6 r- E: P1 V
  758.       {
    9 w. B. }5 n9 F$ f6 \
  759.         FILE *fp;
    * l6 z" n: @4 W% A
  760.         char szString1[128];& K$ H* |$ Q4 j& L! d# X1 J
  761.         char szString2[128];
    5 Z) q; V% r- ?- m. @. {
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ) {, W8 M$ p1 y, o2 G) M7 l
  763.         if(fp)
    4 J6 Q& d8 u) h6 z+ I& D  K! X
  764.         {
    ) Y8 u6 z; a& H2 i
  765.           fscanf(fp,"%s",szString1);
    6 O- ~9 b4 p0 Y2 S+ p5 m) p
  766.           fclose(fp);
    : }, u( \# C2 }% @
  767.           fCheckVersion=atof(szString1);$ I1 g9 a! Q' W
  768.           fp=fopen(".\\checkversion.dat","r");
    4 W8 o6 b" U$ j& g5 g
  769.           if(fp)
    . S/ E6 z/ c( c3 |6 s
  770.           {/ b! S& ^) L) p$ a8 j; d  a+ H. i/ \
  771.             fscanf(fp,"%s",szString2);6 @" v( a' |3 r/ O
  772.             fclose(fp);' h; I% y) l- O5 n6 g+ j
  773.             if(atof(szString1)!=atof(szString2))3 Y' u" ?8 E4 X  H
  774.             {
    / U# O* z, v. O5 k
  775.               if(!Dn.Connected())8 v7 h& z7 ?. |+ h. V
  776.               {
    5 O/ f4 g) W- ?9 R1 |/ A6 O7 @
  777.                 bFirstUpdate=TRUE;
    8 j: m- R* k# X+ E! _( ~/ p+ ~; T
  778.                 dwTotalFiles=1;+ U6 _/ C6 Z; |2 T- c
  779.                 dwDownLoaded=0;
    : B/ b: Z$ ?6 `- }6 B
  780.                 bSilentStep=FALSE;9 i, E: C$ q6 C8 u0 U
  781.                 bCompressed=TRUE;
    2 l, m9 n3 {* k- r& D1 F2 |+ w
  782.                 strExtLocal=".\\DownLoad\";; Y  Y. h' ~( f9 [! g
  783.                 strFullName="update.txt";; w5 z: K5 a7 M: ]+ e
  784.                 dwProgramState=AP_CONNECT;) K- g" h+ W* J- H/ C
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 z( ~+ ~( r3 u# M* k4 M# r
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: d. F8 u( A, e* v" r" g# g  e
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ D6 z5 J5 d' _  S2 o

  788. ' {2 t0 x" u, E8 G5 t  Z8 E
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- L% Z3 n# O/ x, {) s0 R
  790.                 unlink(".\\DownLoad\\checkversion.txt");3 O: M) ~. [( m, F5 _# P
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 u6 N- G) K3 W; r6 F
  792.                 {; W! A, e; U! v; {" _, U; J! D
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " W( C) E4 R; X! B
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ' H1 m$ g# T! L+ F+ Z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");3 E* ]  E/ X# r0 A
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 x3 K: y! X+ Q( ~) Y
  797. & R, j  o5 l4 v- ?' G  G! i
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * t* L4 B. \# B! v; x
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' k; a/ @5 A4 Z; t1 G- M! d
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( M2 G5 n7 l- E5 |3 a
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % [5 {# H* O( \3 j
  802.                 }
    ! x6 w5 a! S4 @0 l' \
  803.                 dwStartUpSteps=5;& E, K5 g" b6 @
  804.               }. [, ~, U0 q' k) I5 e5 N
  805.             }
    8 C: M" @8 K! L% P1 q3 |, Q
  806.             else
    ! X$ y  q/ m" c5 A1 G
  807.             {
    $ B' C2 ^" Y6 F2 ]
  808.               unlink(".\\DownLoad\\checkversion.txt");
      \2 _2 h" U1 b& S  x0 S: w
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  n; C6 d  s. b3 p- u
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 l( y' B& G" N% H+ q
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ) L% M9 r7 v. F7 p! h! G

  812. - M1 ~" W8 j' c& J8 @2 W: W! n
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 O5 C/ o1 y2 s1 X) l
  814.               dwStartUpSteps=99;
    0 p/ Q. L7 O. Z+ c
  815.               bFinishUpdated=TRUE;3 @! @* A& M$ q
  816.               bCanUpdate=TRUE;
    % c8 I6 n% @7 q$ B/ E9 H0 ]0 w' A
  817.             }
    . ]+ m$ c6 @0 |- f1 C* G
  818.           }
    3 c. S5 O* }0 N5 ^# m0 _% Q) \
  819.           else6 s" K! g" k, k6 Q8 U2 h: K: j
  820.           {8 g, ]" Q; c9 l  o
  821.             if(!Dn.Connected())
    ! P4 A! {7 t/ ]: [
  822.             {
    4 L1 ?) G9 Y$ f' Y3 A
  823.               bFirstUpdate=TRUE;+ {& b7 p2 a* q0 k: d3 w4 l2 n' l
  824.               dwTotalFiles=1;* @! [8 K$ s( R9 S2 o
  825.               dwDownLoaded=0;- k6 U7 x; k  F- F- o' @
  826.               bSilentStep=FALSE;" q( U$ ~0 c8 K3 W
  827.               bCompressed=TRUE;6 F) y! u( X# G. G$ W
  828.               strExtLocal=".\\DownLoad\";4 y; {: P$ H  K/ _* }+ T2 O0 V
  829.               strFullName="update.txt";
    + [8 a  s3 w% @1 f3 b, I
  830.               dwProgramState=AP_CONNECT;
    6 z4 ^# Z* z: e5 f: t7 W- c
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 G& B( n7 K% |& s# S) y' |. v
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 P/ o' w7 F4 G) x+ t" q5 I! D
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");) o+ F/ }- I& o1 d# E  O
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ j7 |$ s7 G7 k. x
  835.               unlink(".\\DownLoad\\checkversion.txt");; ~8 y3 L9 I. i0 [$ y# |" F
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    7 _0 J) q  T: Y2 _# M& e: W
  837.               {  F3 k, N* `4 `
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    , X! d6 b/ e/ g0 o, y  q7 h/ D8 }
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");, Y  B! d4 [! Y: M3 z) h/ {
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");% A( R+ O# f- G
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- u. x) L$ _: o2 {* R/ P/ x
  842.                
    7 N9 O( [9 Z% ?. e
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 @( D0 m$ U$ @' _
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");+ d  N! v8 `1 c8 }/ `  b1 P% e
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");* n4 n$ X! M; x
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 H6 Q# h! m! G, G# u. t1 a- g
  847.               }
    7 l5 G+ u! \+ C1 ~! U
  848.               dwStartUpSteps=5;
    $ g3 [8 f, p5 _) m/ K$ J
  849.             }$ y( S) N0 Y+ n$ E* V$ a, y
  850.           }; z7 L7 Z9 `; n# v3 o, ~& R
  851.         }
    : f9 h0 J) O3 ~. e
  852.         else' `# c  m( s# j) e% K; b
  853.         {; K6 @* A* ?! M4 c) @+ i+ E' s
  854.           dwStartUpSteps=3;
    4 a3 }8 U% ?1 g$ p, E3 l+ m
  855.         }
    - q% ]% s1 W& A: O# s. g6 i3 s
  856.       }7 N& p6 n8 j/ m, {3 y# Q: s
  857.       break;
    4 C9 z7 _' _# h% Q3 p
  858.     case 5:
    3 j3 k* m  p. ^
  859.       {
    : i- l0 f' s, ?, Y1 j( T  C& V
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    $ ^& g5 ~6 t4 r, B, ]
  861.         {- J2 H" K# u: i% s4 i+ t% d
  862.           int opt_overwrite=1;& y, ~* d4 Z& t8 Y; {8 `5 d
  863.           int opt_do_extract_withoutpath=0;
    $ V  O1 ^8 x" W% k+ @' E# M" B8 W
  864.           unzFile uf=NULL;0 [9 S7 B4 l6 r: {  _, Q

  865. : ~* k# Z& t# k# S( F
  866.           uf=unzOpen("Wsa.zip");
      S1 ]+ p: F# E1 n  D
  867.           if(uf). p6 T6 y) {6 }! x/ N: S, W5 R0 E# l
  868.           {  c4 p0 a. s* _1 i6 i; j
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);& D+ s4 I' K! o9 G/ W1 G1 e# I
  870.             unzClose(uf);- N' v. b8 f: Q. x7 \
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* R* P% U' C) K9 h5 L2 X6 |
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    % q& l2 A; }$ m/ y' n7 m9 ^9 u; X' C
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ; S4 `; r2 z+ `' N3 H# [  o
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & G% u. n3 X, x. S
  875.           }' `2 W& Q  X/ i. G
  876.           DeleteFile("Wsa.zip" );( F$ K$ S# f. t$ n! |) H& g
  877.         }5 p+ E* n9 j9 M% ~, |& i

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

6 y% E  l* Q: u) @/ G9 c1 L3 v; n& @- j# z6 p* b3 Z

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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