找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
) A2 F- W7 T/ n4 j
  1. / RevApp.cpp : Defines the class behaviors for the application.
    " m0 H+ u, `# H' T* \2 m
  2. //( |& R) w; Q6 g2 ^3 K

  3. ) l: c# A' @9 K5 _
  4. #include "stdafx.h"
    - {+ E1 v- `' |
  5.   S& R5 U$ A2 V2 L
  6. //#define UNICODE
    / c# N1 E5 z% x4 k' o3 Y3 s& D. y/ q
  7. //#include <gdiplus.h>! r# e4 x) g: h- t1 q4 A" v
  8. //using namespace Gdiplus;4 _  y& }& n2 I% t6 r, w$ ?) {# T

  9. 2 |6 Q- `  I9 t& f  r5 J
  10. #include "RevApp.h"2 F0 z  y$ B2 B! S' B! g
  11. #include "RevAppDlg.h"
    2 B4 W7 U! ?: K( Y/ U

  12. $ R. x+ d" G* s0 B( f7 F
  13. #pragma warning(disable:4786)% `9 j+ @! i: _3 n& W
  14. #include <map>" z0 i% V$ \. N- q
  15. #include <list>4 \5 G% w" q7 H6 v  u7 N
  16. #include <direct.h>
    6 v8 d) H2 I; v& A3 H
  17. 4 }# |% N: d, Q8 \( k, U
  18. #ifdef _DEBUG6 F* C& A5 y) e( i0 H" [4 D; I# ?
  19. #define new DEBUG_NEW
    % R# q9 M3 p. y, D
  20. #undef THIS_FILE6 M' O2 {1 h7 k2 M( i
  21. static char THIS_FILE[] = __FILE__;
    - b- @' E* }" ^5 A8 ^7 i9 Y
  22. #endif
    8 E0 C' z( [9 z. P# @
  23. #include "SkinResDef.h"
    + @% a* a" P# B  k
  24. #include "ChangeBG.h"6 r+ m. k9 Y/ `/ V# c
  25. #include "AFXINET.H"
    8 v1 x3 J! B# z5 t# S1 v9 ~. @8 \

  26. % K% [! l+ L9 r
  27. #define TRADITIONAL_CHINESE 0& G6 }; H1 n" Y/ w5 U. ?
  28. #define SIMPLIFY_CHINESE 1! Y2 [# k0 [( M8 _5 i" I
  29. #define ENGLISH 2- j: i6 h9 F! t* |
  30. int m_iLanguage = ENGLISH;- Q) f" |" ~. l6 x) ^
  31. /////////////////////////////////////////////////////////////////////////////' f$ p; q$ y1 V
  32. // CRevAppApp. Y& ]- P  x8 n
  33. 8 x' j. Z# J6 z9 h  h# ]
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)9 d8 L) r3 H6 b- c$ q9 n9 d1 c
  35.         //{{AFX_MSG_MAP(CRevAppApp)+ x0 [& i0 ]& n
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.3 [  r0 t  t0 @
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!. q5 q0 d% ]  g" C
  38.         //}}AFX_MSG
    * M6 X3 n% r- d0 C
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    " X- ~; J( S' F+ }
  40. END_MESSAGE_MAP()- ]0 p, A+ M: ]" A. {! O
  41. 8 r5 C2 [( p6 G' r/ v" c. S! ^
  42. /////////////////////////////////////////////////////////////////////////////
    , m  C, G6 U& W
  43. // CRevAppApp construction" n* }/ \2 I# i8 n* `# R2 Z' M
  44. , L* C- i9 u- `+ _
  45. CRevAppApp::CRevAppApp()
    ! s- A  C& o! O9 Y
  46. {
    ( O- S) g- g/ t" d' [
  47.         // TODO: add construction code here,* B" |$ }! r- P. a7 j9 P0 \
  48.         // Place all significant initialization in InitInstance
    ) E" f" {5 b% j/ q0 w7 s: i  ~8 l
  49.   bDisplayIsBig5=FALSE;
    4 n. v4 T. J7 H0 K
  50.   bRestartUpdater=FALSE;
    5 B' k; ^/ ]: g- l* y
  51.   bFinishUpdated=FALSE;
    0 C  t% X8 f7 f
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;* M( l& B' I% }' ^" i4 F1 \2 [
  53.   InitChangeDataBig52GBKS();6 D; v! A' s' D. L
  54.   InitChangeDataGBKS2Big5();
    3 z5 j- O4 c. G0 y$ b. Z8 W
  55.         //
    0 S7 e: H+ M* q! W  M
  56.         bClickRunExe = FALSE;& X- K5 |0 I. y7 h7 d1 [0 I
  57.         //
    * I# G& j& X4 c) n1 Y  L' J
  58. }& f# f: R: O/ M' }7 w% ]
  59. ' S2 a. }. Z/ f2 R
  60. CRevAppApp::~CRevAppApp()" L! u% t4 g9 d4 D( \9 U+ E
  61. {, W5 V0 l& S6 F7 Z6 l4 ]# J+ s3 i2 K
  62.         // TODO: add construction code here,0 e' B' G7 F2 W8 F
  63.         // Place all significant initialization in InitInstance$ _1 U2 a$ I( m3 i  O: b
  64.   EndChangeData();
    $ }, h4 m  \$ V5 `% g8 p
  65. }& Q) u4 o5 e7 _1 \  E+ @" v

  66. . V" S6 ~5 L3 D7 \  p  N
  67. /////////////////////////////////////////////////////////////////////////////
    3 F; z* N3 M$ I6 n) W
  68. // The one and only CRevAppApp object! l4 W# F( b# R* w
  69. 1 v9 B; c: g! w- D  s
  70. CRevAppApp theApp;# R/ p7 i- j4 l! M: H( N. X! h+ ?$ N7 s
  71. ( |  B7 w/ @: b& {
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)1 s, L1 `7 A3 Q, p4 m6 _
  73. {
    6 M9 i% w% \7 W' ]$ B
  74.   int iEOF=0;
      K3 M6 s7 q' L5 E" r
  75.   char szTempName[MAX_PATH];2 a4 u4 a* W( d0 y" d: W4 Q
  76.   *szFileName=0;, l  ?  }  _2 C2 b3 z
  77.   iEOF=fscanf(fp,"%s",szTempName);
      E: p0 O% k9 {. ^& d6 u; b- Z
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')9 b  h# ]! t4 n  A
  79.   {
      B3 |( p, a+ G
  80.     strcpy(szFileName,&szTempName[1]);  D. p, F: V0 B* |
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)7 r& @' f/ u3 k( v2 A( M
  82.     {
    , a* a- ]' W4 W, s" }
  83.       iEOF=fscanf(fp,"%s",szTempName);2 @7 l+ R! N! ^8 q. w$ ~% w+ c0 e
  84.       strcat(szFileName," ");
    " Z0 b# T2 g) B) e9 G' X
  85.       strcat(szFileName,szTempName);! Y3 k  L2 f0 U- x4 N+ L9 W7 B$ F. D
  86.     }
    9 _, [4 f: I+ U; F
  87.     if(strlen(szFileName)>=1)$ E/ o; |$ y  q
  88.     {" U9 g* d3 n1 F3 N2 \2 N- |
  89.       szFileName[strlen(szFileName)-1]=0;
    2 M5 [9 l9 o, B0 s& o* a% B0 G
  90.     }
    7 ]$ {/ f( v- j# M
  91.   }
    5 q/ }$ u' D' P' H2 v
  92.   return szFileName;. z' P6 T  T: k! @7 }
  93. }
    ; T+ V. `- D, O  s# ]6 H. h( t

  94. + o/ w2 D9 L6 ]! C9 D+ a" \6 C
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( [# V/ e; K* x8 m" a8 c
  96. {. P! S9 H$ S- y- d0 e
  97.   FILE *fp;
    2 g; a0 R, J+ ^: x; V) n
  98.   char *key=NULL;
    8 c5 Q$ x% g, o1 F4 ^0 |
  99.   char version[MAX_PATH];* B5 U" F( {- E/ X( N2 v9 c
  100.   LPUPDATEFILE file,olds;
    8 q3 H0 Q+ t% I- z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;0 l8 g# V; S2 _5 z2 e7 Z
  102. - ~! t2 X1 n. Z7 {2 X# g- _$ f
  103.   UpdateList.clear();
    ! C, z7 n- p3 a
  104.   UpdateFile.clear();
    # T6 s- H6 M/ l$ Q% w
  105.   if(GetFileAttributes(filename)==-1) return false;
      ~$ j- J' l, z7 S; O. f5 U
  106.   if(!(fp=fopen(filename,"r"))) return false;; K% c$ b8 O3 s! ^6 w8 e
  107.   fscanf(fp,"%s",version);
    / V* }  d+ R6 m- H; w- I
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }0 b. N: M5 N9 H/ O* O
  109.   while(fscanf(fp,"%s",version)!=EOF); R  D- h  u  P) b
  110.   {
    2 Y) p" |% D. R8 V! e8 W  {+ l* g
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 s7 v* E& t; s5 b3 M- I
  112.     fscanf(fp,"%s",file->path);( r7 P$ l& }+ y# J
  113.     ReadFileNames(fp,file->file);
    3 y+ V1 ^( |. W0 |# T/ C* g
  114.     strcpy(file->full,".");# U( n8 t' n3 h: a
  115.     strcat(file->full,file->path);- F6 F- H% c! y/ m% S
  116.     strcat(file->full,file->file);1 B0 i. J: T, g, p" b# K# O
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    6 J& b* i6 U. t7 z- D$ p
  118.     {$ R+ E+ f5 P; U& D& I3 A
  119.       file->vers=(float)atof(version);( J$ c5 i: d1 c5 v! Z- U/ a8 ]% S
  120.       UpdateList.push_back(file->full);
    3 q3 `: K: @- a1 I2 B* W8 [- P
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 r6 V& W4 O, l- y
  122.     }
    1 r2 B9 T4 h/ E, A3 [7 y
  123.     else
    : H, w  \8 Y% @# Z9 V/ P
  124.     {0 o/ E4 s# N, z' Q8 m
  125.       olds=(*p).second;1 V! N4 P( ?; G1 O( \- j2 v
  126.       if(olds->vers<(float)atof(version))& [3 a: c: ^* H) C7 c
  127.       {( l) i. i; O# _8 i2 z7 {
  128.         olds->vers=(float)atof(version);2 S0 _+ C8 W! u& K$ Z
  129.       }/ N' P) S9 {: h& w& k3 X+ Q
  130.       free(file);
    . }5 z! w- n: {
  131.     }
    , |* S. I1 x; I+ g! P
  132.   }
    , _3 y& i8 Y$ u, m& X+ e8 l
  133.   fclose(fp);2 T' X/ l8 n3 r7 `
  134.   return true;: p8 z; s7 G# u# k, O2 J
  135. }
    & ^3 y6 q) m4 h
  136. 0 k; ~6 k# [4 [2 v- X. I- b
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  K, r/ j4 H, s4 A8 f
  138. {
    5 |: L0 j2 A2 J2 d& L- P' i
  139.   TCHAR  szFull[MAX_PATH];
    4 X5 T" B( c( k" \
  140.   TCHAR *token,*inter;
    5 ~2 b0 Z* j- ^. X3 c5 p* I
  141.   *szPath=0;
    % v$ L& m- J, a  S7 o
  142.   strcpy(szFull,szFullPath);, G6 M1 M% a4 H6 N. w, J" W9 [
  143.   token=strtok(szFull,"\\/");: B! B$ O: ?! V/ }5 L) c
  144.   inter=token;
    ) s+ ^( R: ]9 A6 @9 Q9 D
  145.   while(token=strtok(NULL,"\\/"))+ b# W* Z; [% u
  146.   {
    : {, u6 }% }! N5 P& s' p
  147.     strcat(szPath,inter);
    6 E4 v* H  t! P  a& }) l
  148.     strcat(szPath,"\");
    $ @3 P, a' Q5 m. D% C3 M
  149.     inter=token;( f0 w# W  a4 t' I
  150.   }6 f2 c2 F7 r. V# ^1 q$ I
  151.   return strlen(szPath);6 s0 `. s, t4 M" A
  152. }- R8 u4 U8 O" e' ~; m' i; j
  153.   Q! f" `/ B. Q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    : x% q; v' `. V; S3 m2 k/ a( C
  155. {
    # n  r' }& X* h
  156.   DWORD attrib=GetFileAttributes(Target);
    5 C& V* A2 ^0 U3 Y9 U
  157.   if(attrib!=-1)
    $ I, C2 {' y1 r* w* v; x
  158.   {
    ' Z  c/ Y4 B4 T* c
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ a% `' g5 h0 S$ Y% Y
  160.     {
    / N, L$ l& g! W5 ~2 q: Y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);0 T$ s4 h. K. z: L6 i% o( @
  162.       SetFileAttributes(Target,attrib);, q$ p1 l9 g; R6 w
  163.     }- }) k4 T1 C% W* p8 ~) {' O
  164.   }
    4 Z$ a7 J& B, w+ j# I6 }
  165.   CopyFile(Source,Target,Erase);( o4 P6 ~) K# o2 x
  166. }
    9 v/ L. I' P, b6 }' V) M2 q  m. K

  167. ) E5 u8 z( P+ p1 I$ O
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ( {+ M/ J, S) ^, t. w
  169. {
    7 I; H5 [; C+ z) c! C8 G5 n
  170.      FILE *fp;
    0 {' @* `& L' S0 q( r
  171.      char  szBuffer[8192];& K- l0 H4 @6 J  u, E: \+ m8 A
  172.   va_list  argptr;( h- ?7 I* U( I8 t

  173. 3 n  O1 n2 P* T# v9 U
  174.         va_start(argptr,message);7 F' U1 P* A8 B2 x0 ^# E9 ?- F
  175.         vsprintf(szBuffer,message,argptr);8 D' r( ~, N6 W/ e7 Q
  176.         va_end(argptr);0 x, y$ i( h+ O  e4 R6 o5 ?2 G
  177.   fp=fopen(FileName,"a");2 N! ]8 V# P" ]
  178.   if(fp)
    * t& v$ w# ~/ w/ t
  179.   {
    9 T8 J, i6 T# H  \- W" s
  180.     fprintf(fp,szBuffer);
      a" t6 O. p" k0 Z; ]6 w
  181.     fclose(fp);
    " a: [  o- D& D0 k5 I; R# C
  182.           _flushall();$ {9 _: k, `  B( d4 s# I5 N
  183.   }
    4 X0 N/ e4 Z: s, Y
  184. }- b% j- D. Y  D& i& g# j

  185. 9 B% P' l4 ?$ F; I
  186. BOOL CRevAppApp::Fclearf(char *FileName); C0 O" `( C. d5 l
  187. {! x' L, N( H5 ^+ @; |
  188.      FILE *fp;' Z2 }! P& f  A0 P
  189.     DWORD  attrib;
    0 o8 n' l. S' {
  190.   attrib=GetFileAttributes(FileName);
    ) @( E+ p; `5 z# d+ n
  191.   if(attrib!=-1)
    " y$ P  @3 ]. s3 X
  192.   {
    $ V7 O& j& d- j2 O( z! G
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ' \% n$ k0 q4 ?
  194.     if(!SetFileAttributes(FileName,attrib))2 k% M7 n% Z1 J) o  m- X
  195.     {1 K. E9 ?% Q  p5 p$ D+ X- F3 |
  196.       return FALSE;
    $ Z2 C( }& Z$ [
  197.     }) g9 Z% w7 B+ \, S- W' i- ]
  198.   }
    % @  B8 C: T0 A6 `( a
  199.   fp=fopen(FileName,"wb");
    9 f6 ~$ g4 Z& f2 E
  200.   if(fp)
    . I. Y: e4 ]2 Z; e( v
  201.   {
    ; _1 G( W4 ?  C) m/ Q* F! @9 G
  202.     fclose(fp);
    7 w2 g3 Q  @1 n' ]6 d  y  }4 B/ x
  203.   }
    ( c- X+ g1 c7 p# K
  204.   return TRUE;8 ^. y8 C# E* e1 ]1 t
  205. }% C! ~9 @# O; z2 T' A$ M1 G

  206. ) y5 w5 `9 @% n5 t5 @, ~
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    , d0 R& i" u; k1 g# Y( Q1 A
  208. {" K1 T  u) V, Y1 V, k
  209.   char filename[MAX_PATH];, c+ H. G9 u* p0 q
  210.   LPUPDATEFILE file,olds;
    5 p2 @7 d- w4 V7 o
  211.   std::map<int,CString>::iterator i;
    ! ]6 L: a5 C9 a+ `5 Y! e
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) ~" V; o* E5 N' @
  213.   std::list<CString>::iterator l;5 Y+ K' X9 h0 z7 Z

  214. 3 F0 I3 g' v$ ]
  215.   if(bFirstUpdate), u& Z5 `8 @" h' J
  216.   {3 x' g3 J) N, f! P. F
  217.     dwCurrFile=0;
    " e- ^1 p' A: a
  218.     bFirstUpdate=FALSE;7 K9 j# T* M& n. e0 Z' o
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())7 z" |$ n! i# v* ?4 g
  220.     {  {- [, i$ e, F' l
  221.       dwTotalFiles=UpdateLocal.size();4 o6 q' B0 J' B4 V6 m' \
  222.       dwDownLoaded=0;
    # |+ l% o* w9 \) n# ^4 z  w
  223.       bSilentStep=FALSE;, B/ i" Q) @! W/ Z/ U: Q6 I
  224.       bCompressed=TRUE;
    ! j1 U) q" _1 W
  225.       strExtLocal.Empty();( E7 j! i3 u) l4 b8 V3 S
  226.       strFullName=(*i).second;7 D$ h1 `( x8 D* o0 O6 X3 `
  227.       dwProgramState=AP_CONNECT;
    ; z0 n" V1 [; `* d! p" S
  228.       return TRUE;
    * f" l4 A) l- R
  229.     }
    ! W& H7 B$ A: T8 z8 D5 B" q( P
  230.   }
    4 Z: W; V1 \4 {; p- F) x0 [* H8 A
  231.   else if(bRestartUpdater==FALSE)# P7 @; i) P( I0 ]/ t
  232.   {. B0 d: S. Q3 \# H1 t1 I
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ' a3 O5 y' T2 ~
  234.     {
    ' w( c2 q: q: I" T
  235.       file=(*p).second;
    # ?9 U! I7 p, l- `! y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    . ^" h6 z" m* C3 R* u% K4 z* O
  237.       {
    % C& c- q" S' i  t* e
  238.         olds=(*p).second;
    # e5 Q& T5 @/ Z( B+ V. R2 n/ ^% j
  239.         olds->vers=file->vers;
    7 c  f( u6 j2 s6 H
  240.       }) \$ H+ D; J* [  d8 F
  241.       else
    * W& E7 X' ?. a  R) N  |& d- |
  242.       {
    $ y  s3 X& J+ A2 v* _
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! @: `& g9 G$ m9 q8 j% d
  244.         memcpy(olds,file,sizeof(UPDATEFILE));- E9 r! F* Q3 ~) S, g% @
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    : N( n+ Y8 @; O$ ?, e
  246.       }; b0 h" d1 x8 F
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    8 q$ ]0 h5 p' l. e/ T$ q
  248.       sprintf(filename,"(%s)",file->file);* M# d; V) h" L& z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) @8 B8 p" L/ x9 ^+ W
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }' p! Q  S2 y0 r( e# O
  251.     }
    1 Q4 p+ R5 {3 `: i2 _
  252.     dwCurrFile++;
    6 T0 H" h/ W5 \
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), ?" @  O" ]. U
  254.     {1 w; Y9 u" x. [) p: N! O# Z
  255.       bSilentStep=FALSE;
    7 W4 d: L8 J9 ]( o1 q" u
  256.       bCompressed=TRUE;7 |9 n7 }$ y9 r$ v% }4 K+ `% G, R
  257.       strExtLocal.Empty();8 [& V" r% W* U7 L9 `$ j3 c
  258.       strFullName=(*i).second;2 _6 ]: U% [9 t% ?% f
  259.       dwProgramState=AP_CONNECT;
    ! f0 p! e6 l" s6 X% C3 H* @
  260.       return TRUE;
    9 Y- F! j4 K- G, y+ o
  261.     }5 h1 L/ a, q0 J5 v5 z0 N* Q* q
  262.     if(!bRestartUpdater)! G# _( M# N4 g0 _% w9 l
  263.     {: d7 K& k. ]5 |6 n3 Y
  264.       int iCurrSize,iFileSize;
    & w& o6 W! T8 p, J* Y% N9 W! n' v( A
  265.       iCurrSize=0;6 O0 O1 p- U8 {: B: J
  266.       iFileSize=UpdateList2.size();
    8 u) w# }' z  W! g6 ^" l9 k
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ( V- d: U6 d! H
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    4 L  l+ O# {$ W) P9 o4 w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    * C0 J1 A8 D  {- K3 Z: U6 e- x
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# E6 h$ |4 P  [3 B8 e& k& I5 h
  271.       Fclearf(".\\update.dat");7 O# H1 a% G5 I1 {; a$ o& d# G8 h6 x3 ~
  272.       Fprintf(".\\update.dat","Bloodyf\n");. M/ f* ]7 l" P% w! {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( S; ~. g9 {' l) c
  274.       {
    7 c* S# `, y/ ^9 V
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())- D# A8 Z8 \# f7 I# r
  276.         {
    7 n8 N: W- G& H7 [" F0 V3 L
  277.           file=(*p).second;. V& d$ _) o" D, k. }
  278.           sprintf(filename,"(%s)",file->file);  }) N- l$ x0 ?) Q- s0 U, P. F
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 i( L& h: r. c- ?+ Y8 J$ S
  280.           iCurrSize++;. T$ j" W4 d4 o+ m: }
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: @/ U4 E8 d! [& _; r, l9 |- i7 r8 B
  282.         }4 O$ T/ h( t9 R2 [6 i, Y: T
  283.       }
    0 m7 i1 o8 V- r$ c: F
  284.       unlink(".\\update.txt");% b6 T& O2 Q1 D  i) i. |
  285.       unlink(".\\update.tmp");. u, c* T9 }/ I3 |
  286.       Fclearf(".\\checkversion.dat");
    3 @  T7 R, {0 Q  y, z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    + X( O+ P& f; j: C2 k( E
  288.       if(UpdateLocal.size())4 ]8 l" m# z) t  _. M) p
  289.       {/ L5 X  @+ M2 a0 P! ~
  290.         UpdateLocal.clear();9 f, M; A- L" \  g: ]9 @
  291.       }* [+ C( P- I9 J9 y6 p( `; r
  292.       if(UpdateFile3.size())
    $ q! G; X9 W% ^/ i! n
  293.       {3 B# K$ W; }& l) }* K7 |
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , \0 X$ S4 S. M& p0 x/ o$ H
  295.         {
    . J3 d, p) w. v) R: Q! k
  296.           file=(*p).second;
    # ?1 l- Q( Y. W2 L
  297.           free(file);6 U/ V% F* H' ^& N0 ]
  298.         }
    - N4 C+ C5 d- z
  299.         UpdateFile3.clear();: D, Q2 Z1 {0 t" L& l, u
  300.         UpdateList3.clear();
    + |6 T  W1 R$ k8 R3 C3 q, b
  301.       }
      k4 F( J7 B& w' O$ c
  302.       if(UpdateFile2.size())
    - v- L7 m( `. U# k4 `
  303.       {
    $ i) h+ f; y+ B8 V; x- p
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 M3 S) q, S$ M( P* |6 ^
  305.         {
    " u8 z& l0 y1 g  u/ z
  306.           file=(*p).second;9 F. o* b. X5 `8 ?. h1 Q9 W( N5 ?  k
  307.           free(file);; z- J: H/ i* B4 e& \+ W  o
  308.         }
    : l" p" e/ F+ ^- Z. X- C3 x. l; M& {5 v
  309.         UpdateFile2.clear();% C: p& `: K* {& F( b; g  i
  310.         UpdateList2.clear();
    + v9 E. Y3 V& i* k; G; k2 q5 `
  311.       }$ {% l7 }& T: b% i9 i
  312.       if(UpdateFile1.size()). E7 @4 `2 u/ b3 I) _' P" N
  313.       {9 R% P: m3 P! [# x0 [: g
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" K8 ?+ m0 L+ Q+ z/ w% ^) E
  315.         {
    ) u/ T. ~! K1 G! C$ Y( U! ]
  316.           file=(*p).second;
    * w* t( n% G7 N. h' S
  317.           free(file);
    2 f& I1 n+ J0 e2 @/ A+ [
  318.         }
    . j% u# P- E5 Y$ Z5 F
  319.         UpdateFile1.clear();' s+ U$ ?. w0 s/ t  }0 E
  320.         UpdateList1.clear();
    4 X6 y7 X. {8 D9 U) t# h$ k8 a
  321.       }
    & [: M% |) O, x4 _& J
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    . B& ~) n* t4 H4 u- `- k, h
  323.     }; n1 l* \' Q% G) P3 s
  324.   }+ M' D  D+ n/ P/ d2 C) i; b5 s
  325.   return FALSE;
    ; e; u8 m  A+ O* ~+ \
  326. }
    . t5 h; l$ g" J$ |) k5 j
  327. 5 E4 m2 b2 u2 R" D( L* L  _
  328. void CRevAppApp::ClearAll(void)5 S, }) G- \& @5 O$ I
  329. {
    1 L7 s' y$ O/ o7 u, x3 M# x( v- W
  330.   LPUPDATEFILE file;
    % Q+ }- H3 \0 M/ d: g* ]
  331.   std::map<CString,LPUPDATEFILE>::iterator p;5 N  \$ J5 |2 @1 W; V$ V
  332. 3 T% v$ ], _0 |/ `3 i% F% ^4 A
  333.   if(UpdateLocal.size())5 {3 D  z" q1 Z7 l7 Z3 N: b
  334.   {
    8 Q4 ~9 B7 x. s9 G2 D: B
  335.     UpdateLocal.clear();6 Y* F- z- {: E3 U6 q5 V
  336.   }% G  D; n: \% l) Z
  337.   if(UpdateFile3.size())
    0 K7 b) A9 D& D  ]2 q
  338.   {0 i5 S/ a8 v* r5 ~6 w1 P0 ]  C
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . u2 E! l9 Q* b0 F. x( y+ N
  340.     {0 C* W# M4 ]5 D6 D: i
  341.       file=(*p).second;* Y3 o$ ?. N: J5 H
  342.       free(file);
    $ I5 O! Z9 \# R# W) U
  343.     }( j& H/ t' @$ m$ f# ^% T
  344.     UpdateFile3.clear();
    + d1 @, B2 f5 w$ |& f
  345.     UpdateList3.clear();
    4 q; A. H0 g% t% V& J9 s1 H
  346.   }
    - K6 g% b. [. F( o8 m
  347.   if(UpdateFile2.size())
    : M0 l' p& T) N; t1 K
  348.   {
    ! [* M. l& ~2 ]6 K/ |+ ~' r
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 d# K0 _! f! f, E# x
  350.     {
    / z( w5 q6 B. o# F" P) o$ y
  351.       file=(*p).second;
    / t, {& P/ V$ n% y$ v. V! W
  352.       free(file);
    . ~: z: M! f- L  L
  353.     }( B4 Y) s! E/ f% h! e0 J$ d$ m! Y% s
  354.     UpdateFile2.clear();. E7 @, F8 S4 T) F- j
  355.     UpdateList2.clear();$ C% O) |9 P) c9 n8 }. ?# c
  356.   }
    5 M- b! |! q7 Q6 o) Z
  357.   if(UpdateFile1.size())& g; C% t4 |- L+ u
  358.   {
    $ c- l4 @' S- P  t5 s1 e
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + ]3 c+ z% l+ K3 j4 ^
  360.     {
    " c$ l) k& R& X* g; [3 Z
  361.       file=(*p).second;+ u" n( m0 d/ i; O9 y
  362.       free(file);
      b( Y$ |9 y' I  F/ l
  363.     }
    5 a8 U5 b7 p; Q" M, M# D& e5 p
  364.     UpdateFile1.clear();
    - X! Q( w  c/ N9 I" C
  365.     UpdateList1.clear();
    0 v9 g5 ^3 w  g: f! s# y
  366.   }" Q. o% i2 G! I) I1 m9 \( V5 L
  367. }  
    : D0 _* B4 c* y- V% W% x! `5 N: Y& R
  368.   
      D# N( L5 v% t* d+ }1 q# ^$ {4 Z+ Z8 S
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    / s8 n. h  W; f/ A
  370. {
    + `6 `+ [0 \" ]' d$ q( ?1 e; k
  371.   int c;
    5 N/ F0 a/ r; X3 g3 L! H. ?
  372.   LPUPDATEFILE file1,file2;
    # h4 }3 M7 D( {4 i) V
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;& v9 x! Z% c! R
  374.   std::list<CString>::iterator l;2 f% R: h( l+ J" @! p+ p: }

  375. . s  @6 K4 I% _) h" \
  376.   UpdateLocal.clear();
    2 x, R4 B2 C9 J  `1 N( H
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    $ ^. E$ w$ K7 s% `
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& H4 J* K) i1 H' Y# W+ R- t2 r
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ) Y' C  e9 r$ W  z$ {; Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 ~; }! V1 j- R
  381.   if(UpdateFile3.size())) z3 ^( J: h8 p! a5 m
  382.   {, F$ L" e: ^5 c" l# h$ @
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - [# n: q7 E+ C2 P# i4 U; g8 L
  384.     {( V$ w2 L8 T; v# F5 U
  385.       file2=(LPUPDATEFILE)(*i).second;$ S+ l0 J# Z* ^; O/ ?; _$ ^7 H& f; a7 t
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) ?' ]' P8 m( `& x9 [2 X
  387.       {) ~! p2 T: P/ H# k
  388.         file1=(LPUPDATEFILE)(*p).second;
    ' s% h" x6 v6 t7 G2 T  a" P& d
  389.         file1->vers=file2->vers;, Y6 [+ ]; X! _" X
  390.       }
    + h' p7 _( \" a9 K/ |' ]  o, k
  391.       else6 a! Y/ S7 p% f/ o" D% n$ M0 d
  392.       {
    1 M& I5 a( y: x# m0 x  [
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 P( ^3 r' ?7 B+ M6 S5 n$ ~
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    7 I& k8 ?0 e9 |" x" Q+ q
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));. g2 `# Q1 V5 ^* o- d9 [; d
  396.       }) t, |5 T" j' I% l2 F8 d3 T7 O
  397.     }
    * ^0 x( c/ i: t5 j+ }: j( f
  398.   }. G* n4 V- t7 ?# U" @. r! m
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)" g- D9 E8 R2 g; b8 x
  400.   {: J' e1 f& p' s* r$ `. c* _1 x
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' T* }- c  Z" U/ N+ |7 }5 q
  402.     {
    $ {; p6 K. H7 I! r4 P; q# a1 t
  403.       file2=(LPUPDATEFILE)(*i).second;5 i! k) O8 @0 G; n; L% `# Q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 b: {8 W; q+ q: ~4 m5 r3 }! C" I
  405.       {
    9 r& o0 Z% v: t$ I$ O
  406.         file1=(LPUPDATEFILE)(*p).second;
    / y& W4 U: b% w2 u
  407.         if(file1->vers!=file2->vers)/ U+ V$ a0 c3 w- B
  408.         {8 z0 P. u4 s; f! f+ p9 r* ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! \  \) K) Y! ]0 j2 l& H4 d
  410.           c++;& H# x/ W4 v! ]! y9 ?$ Q
  411.         }
    % k* P; ~6 E0 I  O" ^8 e* p
  412.       }4 g1 v7 K) c( x
  413.       else
    # P* B7 d0 C* U5 x6 [, b
  414.       {
    2 f  E: k4 d6 i/ M
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 T7 K0 i; ]/ Z- m" z( W
  416.         c++;
    & t" \' f6 ?9 o& E+ P
  417.       }
    9 `+ X; w; q, R( r' g3 f
  418.     }) l( b8 O. V3 p! ]' G  a# [
  419.   }% K8 `% D& \4 ?. m) M/ p
  420.   unlink(".\\DownLoad\\update.txt");9 g: {! R/ O$ J6 S
  421.   if(UpdateLocal.size()) return TRUE;
    * h. f! {% T& a4 Z# [) o1 b2 J
  422.   else                   return FALSE;
    : F7 b. `1 ?9 y
  423. }* u7 J. x6 d* X& W! T) ~8 l

  424. - Y. m" p' |1 ?& i& W
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    9 O: e0 \5 ?# \9 |, J3 {# K
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"( j, x& j$ h6 m: Q7 H' _" M

  427. 9 a; G4 @: h' T0 Z

  428. * x/ }' T* J# m) b
  429. $ I0 l. ^& H: q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)& B6 ]$ e6 O4 W4 m9 J9 d
  431. {
    & t! e+ _# Q+ A; |1 K  Z! ^& z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;- l1 a& O$ l- I3 S+ X
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 a+ u7 f8 U6 r. t0 Z, l
  434.   {1 y2 q1 K4 K( H4 P7 ^% B
  435.     char szLanguage[50];+ U* l- E  x8 o. c
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- q- g% m6 i0 A
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% m: \2 l, \6 M& V- t! ~* l
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + T5 A3 c1 E( t, \
  439.     else                                   m_iLanguage=ENGLISH;3 k$ R7 n! X& ^1 M2 [$ t
  440.     char szRegister[100];9 v. E, x) S3 r8 m( a: y
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' g( Q1 |9 x# u/ `' _0 z
  442.     strRegsName=szRegister;8 g: M+ s7 ^' R" O; B' @5 T, L
  443.     char szPatchURL[100];
    / k2 I+ B' q# R/ d
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 N6 N& t) a& b9 t1 s2 ]
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      ]9 g' z; c0 c* x# |
  446.   }& P) `9 |+ f- D
  447.   else
    2 g/ G* c$ j' ?" B: N
  448.   {
      Y8 Z6 d) Y; T" [7 M8 t* J2 f9 h
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : V* `  i$ }& A! D! p& l3 Z+ n
  450.     strRegsName=DEFAULT_REG_URL;
      I& a2 m; c) ?8 O
  451.   }5 @: J, L% ^) t4 u3 ?- w( ?! ?6 g
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    . q+ a9 g, g  G( Y8 c$ Z
  453.   {
    + |1 \' b, \9 e9 \! u
  454.     char szIP[50];
    $ l% @* m3 ~4 p6 y, D
  455.     char szDIR[300];; Q$ `9 }; ^) W7 W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    5 D6 k- x7 E7 h$ i! P- e9 ?
  457.     {0 W' J. V; K, S% ?! v4 p; E. Q) y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    3 \" e  S$ R3 Y3 H3 D# _
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
      g/ M& }6 ~8 d
  460.       strHostName=szIP;6 t" K8 l) s, g7 j4 X, d
  461.       strHostPath.Format("/%s",szDIR);
    ) }+ r/ l# U* j3 V, s0 A/ s- ^; k$ s
  462.     }
    3 x% [$ b" x- Y1 T
  463.     else
    5 p2 z1 i0 s- r; R  N9 E
  464.     {. U- n; _" o( j7 V: U* v( T% n1 G) y
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 b: n+ A( V7 c
  466.       {* m% Y" m+ H+ Q# d. `2 B7 x
  467.         char szLanguage[50];
    / @. N' f; p+ B# u' {2 y$ ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / u7 V9 W8 K4 l" a2 A
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # H' q9 v' T) S* L0 e! |/ S
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 A2 J/ p$ ^/ j! v4 M( r
  471.         else                                   m_iLanguage=ENGLISH;* D: D7 @- Z- [4 j) q4 h- p
  472.         char szRegister[100];8 T+ G) l2 l* m: x
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! Z9 F$ `/ a' o( X2 L. U4 U' j
  474.         strRegsName=szRegister;
    ' V0 H& F* Z/ s# ]3 p( Y" K
  475.         char szPatchURL[100];) j5 y0 z* {. p6 `% ^! i9 V
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ W% ^  k1 R( H4 u( w# u$ H8 ^
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : H9 i, ~  l' `; A/ x
  478.       }
    # b& g$ U0 a3 q' C& S
  479.       else
    , J3 R. Z4 E. k3 e( R8 e
  480.       {3 I2 u, {& g% d0 [! |
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 Q2 z9 a3 ^+ q: y/ W
  482.         strRegsName=DEFAULT_REG_URL;
    : M* [" V1 }- y7 A
  483.       }
    : P6 X- J2 U& z
  484.     }
    1 }' C! a( z( l! V; ]: h6 K1 d1 d# b
  485.   }& n; y% O; m' d9 b$ q& i( U9 a
  486.   return true;
    % [& f: D9 _5 c& n+ N
  487. }' y# M' E1 |0 u2 o5 P2 c

  488. 5 m- _& x  B6 t& j7 i0 e. K% A' ^/ X2 }
  489. #include ".\ZLib\unzip.h"
    : Z; X$ @$ \' ^* C  ?
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ' Y2 Z- }8 B! |
  491. /////////////////////////////////////////////////////////////////////////////1 \) B: W2 o; \, R( F8 ^  q
  492. // CRevAppApp initialization
    7 c9 t  b2 R% A1 i
  493. 2 d0 V, j7 }% E& b6 r- `0 A
  494. BOOL CRevAppApp::InitInstance()) S. k" z2 z) T8 k8 r4 K3 Q
  495. {
    ( K) B- T5 b* g; K
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    0 o+ K! v% d6 i! M+ \, {; _! R

  497. , B( @3 I& p/ E  V5 k! a) E1 s  q- B! G
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    " c! q1 J( b- }0 E
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    , s* Q. B7 ?7 g, Y% i9 w) ~
  500.   {
    % ^, K9 ]/ ~* B+ J$ {* X
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    7 ^) O5 T0 r/ Z  {& @1 z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);, }, x' ?1 n$ }9 x' h/ k: z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))6 p& ]+ [8 [, c5 i% R
  504.     {
    ; j/ i7 C; v. Q( P3 a) w
  505.       strcpy(szPath,szPathTarget);; {4 |% p7 }1 a8 g+ R( F0 p
  506.       SetCurrentDirectory(szPath);# N5 x  e3 A4 I, K! z+ M: ]' H$ X
  507.     }3 P: T6 [/ H# ?: l; Y
  508.   }" K* |! ^  W* I# [
  509. #ifdef _DEBUG' J+ b* b8 ~9 f$ ^/ T* a2 o
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); X- \3 r7 X" p# i) B
  511. #else
    4 w+ A/ n, b6 y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 @& G$ I4 R9 S% X& L' d, O) ^/ K
  513. #endif- w2 ^. n8 N' Y5 X) W8 c
  514.   {+ t. ^: y9 U1 N7 \; R
  515.     char tempFileName[MAX_PATH];$ |$ t  D9 r, z5 H" N
  516.     strcpy(tempFileName,szPathSource);4 u2 b! p; N* t9 Y  `% S8 u
  517.     tempFileName[strlen(szPathSource)-12]=0;
    6 b' B: X0 P8 M  O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    % \2 R9 A' b4 `1 O% A0 ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);, s  T* H; L6 s* c2 c' |$ o
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    / Y9 G' Y4 y% t  a5 B1 M! v4 X
  521.     return TRUE;" u6 H9 I# e  ~3 ?2 u% t* F
  522.   }8 u4 w- c; m5 N6 T* f  j# F
  523.   // Nuke 0118: Delete run.exe6 V7 K; y# L+ Y4 z7 Q2 P+ R+ X/ B
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );0 H& W6 U1 l0 U  F$ J6 k( J
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ; i6 C! z$ A! \% }9 d/ t
  526.   if(!ReadCfgFile("Config.ini"))7 u) u, @/ T; v& t! E4 Z7 G/ Q
  527.   {( U5 `9 e, J2 r* B  Z" _
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    7 u1 Z, p  t* @
  529.     return TRUE;
    / B- ?7 x, e9 y. F# x! `! Y
  530.   }7 x2 l" L$ k8 D2 F
  531.   HANDLE mutex;
    ( P5 m4 O0 c& i& p+ U
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 X( s: N  a" U8 p" F/ V7 I0 [
  533.   {3 {  D% u, _6 P6 J' G2 q$ B7 Q
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ( W7 L. X2 c# p( d$ x4 \
  535.     {
    0 u6 Z$ t  a  _8 g
  536.       CloseHandle(mutex);! v+ ?, M9 n  q. H. d
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);; s& z, U/ i. R  w
  538.       return TRUE;
    2 Y. s! ?, U( E9 ^& B1 e
  539.     }
      I) K4 g% ~5 `+ f  w/ `7 H* ?
  540.   }  ( s( s7 s+ y% x% t7 D
  541.   CloseHandle(mutex);% K0 \. `' b( T/ D2 }, A

  542. 1 j5 F2 |7 k$ ?: e; e5 ?
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 l8 t  ?: r9 B, G5 n9 G
  544. 8 f* q! _, F9 i7 J/ a1 r! ?% S
  545.         AfxEnableControlContainer();' ~. [5 [" Z9 z; W4 L

  546. ! w" Q8 ~$ e  Z  W. I7 m9 c2 H4 k
  547.   bCanUpdate=FALSE;3 n, B' D- c' R2 Q
  548.   dwStartUpSteps=1;( j/ W; m+ B3 R! Z. q
  549.   dwProgramState=AP_NOTHING;% g" A! J" z3 T; d

  550. 1 \: W, M; g9 ?/ P; W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    * a: |* x# f; A2 `% O
  552. , A7 E8 x- a! N/ t! Q1 {
  553.         // Standard initialization
    ! Z1 W5 x, y! [/ N$ j8 k0 Q
  554.         // If you are not using these features and wish to reduce the size* a( @+ ~7 w( `" p4 B9 V
  555.         //  of your final executable, you should remove from the following" p7 P; O- p+ S  d0 }' S! M
  556.         //  the specific initialization routines you do not need.
    + h) `( U/ z7 \
  557. . G5 D2 ~+ d3 {
  558. #ifdef _AFXDLL, U8 S  ^" q, ^% ^, M4 t
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL2 Z9 ?% j: B8 T5 k9 z; A
  560. #else
    6 J$ l/ |( L% W5 [' e6 _
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ J9 m" b  L1 v. F
  562. #endif1 W+ t, }  o4 \: i0 b

  563. . M' n4 E8 l) F" [" y" o5 j( \. P) H3 m
  564.   dlg=new CRevAppDlg;
    * V9 H, Z4 S: L4 j, ~1 r
  565.   dlg->Create(IDD_REVAPP_DIALOG);8 X8 @% L  n2 ?/ {" `5 }
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ' [) j! ^! ~5 P! B8 J  y$ ], l$ n* U
  567.   m_pMainWnd=dlg;
      p5 a/ C9 p$ ~! \
  568.   L5 `6 v+ d, z% q" C
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, d2 W; N* z: h$ m) w
  570.   d( ~& Z" O" x4 Y3 h7 S
  571. //  GdiplusStartupInput gdiplusStartupInput;. c( |$ j% y( c( Z; U
  572. //  ULONG_PTR gdiplusToken;$ h2 \8 b6 R4 R& K  {
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);* c2 U+ a: F4 ~* b, j: q; J) E- @

  574. . P  Z- g0 V8 I* i9 Y% L
  575. //        CRevAppDlg dlg;
    / k' D& Q/ S. B: Q3 K
  576. //        int nResponse = dlg.DoModal();  }# K* q% }; U7 H+ i3 O" z
  577. //        if (nResponse == IDOK)
    7 I# T0 n2 G+ G7 E( @6 \9 c: }
  578. //        {
    , _4 u; i# ]4 V
  579. //                // TODO: Place code here to handle when the dialog is! n' d, q7 s; H0 @5 R$ ]
  580. //                //  dismissed with OK
    1 Q% d% n& b. Z1 _+ e0 P
  581. //        }
    % Y, W8 g$ u) Q, h' k1 M
  582. //        else if (nResponse == IDCANCEL)
    0 e* I2 e8 `8 A) m1 p) v
  583. //        {# A: s6 J! h' }/ e& [1 {4 o( Q
  584. //                // TODO: Place code here to handle when the dialog is
    4 ~& g/ u! R; m  O8 C$ {+ y0 A; R' M
  585. //                //  dismissed with Cancel1 V6 c3 h. H! v! H: k
  586. //        }2 j$ {5 _9 `1 v* P  F, U' Y1 p
  587. , p. {# |4 r6 x
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ) ~8 [) w# [# d+ C
  589.         //  application, rather than start the application's message pump.
    - I# a" o# G1 b* _$ E/ I
  590.         return TRUE;$ N$ w, W. t+ ]; p% u$ |
  591. }; k. o; T' q; s: |6 f
  592. " N! t% U) p, L- a8 d* t) I* ~) `
  593. char *CRevAppApp::strtok3(char *pSource,char *token)2 g! K: p5 _; C
  594. {# j0 j6 D7 u/ L' i0 |! T
  595.   int i;6 F1 @+ P$ F% E% i5 \  s5 s6 K
  596.   char *szRet;
    , @; Y6 I" I" k  G6 @) V
  597. 6 q4 f- R; m6 u- h! ?- Z, E
  598.   if(pSource) { itoken=0; sztoken=pSource; }# z- L4 v4 v4 t; P- T: \9 `
  599.   if(sztoken)' B' a- e$ o( R. n/ w
  600.   {
    7 H4 N6 Q5 s  E0 t
  601.     szRet=&sztoken[itoken];' L7 w, ~3 @+ n# h) q1 b; p# M
  602.     while(sztoken[itoken])) J! i1 E0 @2 P' ]
  603.     {% u$ |6 O3 V% b! N; ^; v2 }6 m
  604.       for(i=0;i<(int)strlen(token);i++)
    0 d% P- H3 ^! r! j
  605.       {$ y7 N0 K/ a3 J/ d$ {0 x1 Z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])7 _$ r5 }. D9 d1 i
  607.         {3 `- U& q. M1 K, Q9 _0 v9 t7 t! N* w$ O
  608.           sztoken[itoken++]=0;
    9 T% h6 z9 ?5 {2 a
  609.           sztoken[itoken++]=0;& }! i+ m: Y8 M8 k' t# B
  610.           return szRet;
    - ]8 [% z2 D: w9 I- z4 _4 m! F
  611.         }' C# n8 z. O7 K4 |6 E1 N& i
  612.       }% n/ O# I# x- o5 r* a) g/ T
  613.       itoken++;
    : f1 U4 V3 }- E# h6 o
  614.     }
    2 a% s0 A4 h& k
  615.   }0 i8 o1 r2 o: f7 P: G
  616.   return NULL;, k7 g6 P! G6 x# g* L+ R( P' r) c
  617. }+ t% Z: I( D7 L3 d% {

  618. 0 \* r! M2 G& [. c( z
  619. void ProcessProc(long Total,long Current)) s; a' M. `: f: D4 O- l) w
  620. {- b" m  Y* I# ]* ]  W" i
  621.         MSG msg;
    / |: C- m& t& J  Y4 V* ^" j
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);4 [6 W% T* j5 N! A
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));( c- ^- J( w6 g% M! J
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    3 J% M& {% _, E5 C( b3 u
  625.         {' l9 X* ~* \/ w; F" V1 `
  626.                 if(!GetMessage(&msg,NULL,0,0))
    2 V6 I9 x4 o. o- u" }4 f+ i
  627.                 {) S0 }. e; s9 P
  628.                         return;$ f, u+ I8 I5 _, o4 e
  629.                 }
    # Q$ w1 _( S$ `* [! k0 |9 S6 B% u7 j
  630.                 TranslateMessage(&msg);: S, f) B+ R! F# H# E( Y# t
  631.                 DispatchMessage(&msg);. \! P2 U) U* b9 T" @4 k: T% u$ f6 U
  632.         }       
    6 e- d; |+ t4 r5 k9 ]9 M) s4 ^  @
  633. }
    ( h# |) Z& A* \4 i1 R8 x1 g
  634. 8 r* F( W# t; F6 S
  635. BOOL bFirstChar=TRUE;9 t& O' I3 h$ H# E
  636. 5 ~$ Z4 Z2 f$ @5 [. }% _  a
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # l7 N6 R' _+ T
  638. {: s" s8 u% A) W& g% W" j( M3 W
  639.         // TODO: Add your specialized code here and/or call the base class4 a' o3 b( W$ p- q0 G  U% D9 o
  640.   switch(dwProgramState)" o8 \8 B9 _# Y% Q+ V
  641.   {
    7 X& M% z9 ~1 R( M# d7 e% O
  642.   case AP_NOTHING:
    5 \) U/ K) J4 F4 q. Z8 W; K
  643.     switch(dwStartUpSteps)
    ' i" ]$ ?. U4 a& ]3 F' Z
  644.     {2 r7 S/ c! z6 x# m7 V  j
  645.     case 1:1 t- ]; g) z3 {! e
  646.       {
    ! ~8 o- ?1 ^7 ~6 }) l. ~5 N+ Y
  647.         int i;
    ( l# Q. R0 l9 m* g
  648.         CDC *pCDC=dlg->GetDC();0 I2 h5 c; I! z5 w0 x" @
  649.         HDC hdcwnd=pCDC->m_hDC;
    + h9 l& I! [5 w0 K, A6 ?
  650. //        Graphics graphics(hdcwnd);2 {2 y% [) ?9 U4 H# R: ?' n
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");8 y4 G* S  T, o% [( e5 c, q
  652. //        INT iWidth=bitmap.GetWidth();1 L4 W$ s! k4 y7 m6 J, a
  653. //        INT iHeight=bitmap.GetHeight();' h. N1 X/ a5 A: u
  654. //        Color color,colorTemp;* j6 s% P+ F- _* w
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)# m" p  W1 I8 F' }  V- L4 J
  656. //        {
    ! a$ o* W& o) j/ C
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)/ x# G5 m; k( ]% x& o: u7 b, R
  658. //          {% G9 s; p) }  [/ g5 J
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ( {( M# g0 i- F; ^8 h2 ~
  660. //            colorTemp.SetValue(color.MakeARGB(, B% W/ m+ y' q0 X6 e
  661. //              (BYTE)(255*iColumn/iWidth),
    & r5 n% ?2 L! H
  662. //              color.GetRed(),* a7 f! c5 |; x: t$ A& _
  663. //              color.GetGreen(),
    / u' M: U& m7 ?" l7 H) o: w# E
  664. //              color.GetBlue()));
    $ S3 e7 l6 U+ v- O
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ( o" k8 r  y% X5 ~3 @/ t
  666. //          }
    2 s, w( Y% K' y/ ^/ i' m+ a
  667. //        }
    4 Q4 a. s( b- B$ }5 H2 p
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);( P6 V2 H+ O2 U/ {: d- X* G
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 B* m" j. r0 b2 T4 l/ Z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 C& M7 L& |7 o4 G/ I
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 @3 h( c/ E$ ?3 {0 c
  672.         for(i=0;i<240;i+=8)
    # j% N5 U9 p7 a+ N: b- j; s4 N; V
  673.         {
    5 i' @9 R1 ]5 d8 i
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 O" R! a0 e$ @& `: r7 v5 Q# q2 n
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ @) N" i0 e6 q0 Z, G3 d0 b6 G
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ c( X6 u1 m9 I' \* r
  677.           Sleep(33);7 r9 z( V* e' a
  678.         }: I. _" j& Z4 y( F2 P1 X
  679.         Sleep(1000);
    ) A, b, ~4 O" k) A" B6 U! Z) y
  680.         for(i=240;i>0;i-=8)
    % x0 [) c# S1 J" }* F
  681.         {$ G$ y  B/ `8 s
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * ~& J) ], f, f5 N
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : k- M8 l6 b& s; A/ A
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ {1 q' F$ v9 `3 J
  685.           Sleep(33);' O/ t0 b+ X6 `* O0 W
  686.         }
    4 g: V9 |- Q! g: c2 {' x
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);) q/ P4 h" l8 d4 V! K: ?
  688.         dlg->ReleaseDC(pCDC);
    * T0 C% k7 j6 t/ {+ v) K1 @1 d4 v# a
  689.         DeleteDC(hdctar);% s4 R7 M# x! j0 a
  690.         DeleteDC(hdcsrc);
    3 B& A8 s# ^0 \, r7 L0 l& A7 V
  691.         DeleteDC(hdcorg);" a: c$ D0 I) c* s) X3 w
  692.       }
    4 i9 X/ N0 P$ |* e0 ~% M
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ( N3 O% I5 S8 e' w) ?
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");3 I( Z: Z1 K& c: P/ ?
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 ~+ ~$ K( J9 d5 k2 ]& W, I# r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");/ }% z5 v- B. T5 C/ ^: N$ Y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! {  d; C0 S6 b) {* f" I* c; J* k3 |
  698.       if(!Dn.Connected())
    8 P) I& @4 l4 k* i
  699.       {
    8 t  b' L. }6 _7 u
  700.         dwTotalFiles=1;
    4 x- A; x/ y  `
  701.         dwDownLoaded=0;2 A  N4 [: C3 b8 t% Y
  702.         bSilentStep=TRUE;
    ! l( Z8 H4 l' W
  703.         bCompressed=FALSE;% @8 m4 S' q. A2 u7 o8 u! [
  704.         strExtLocal.Empty();+ c- J7 v. c) w/ O8 b% j
  705.         strFullName="readme.txt";! W6 R: S1 r* L; q
  706.         dwProgramState=AP_CONNECT;; v% g* R" F6 ~, N1 b/ j
  707.       }
    9 H0 ]8 d! e" C) i. d  F9 S. s
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();; v4 X0 U. o/ w) f% X& }5 e
  709.       dwStartUpSteps=2;
    / P& F1 j! b8 E4 v" O
  710.       break;
    / D( d. D7 @- d5 l
  711.     case 2:
    ) p# w2 H. t3 x# Y; _8 i8 F
  712.       {+ \* j6 d: _( N. \- Z$ b' y! ]
  713.         int iEOF;( _+ d+ j, G) E. c& C$ A+ `; U
  714.         FILE *fp;0 Y" F- \. j& Q, ?% g3 i
  715.         char szString[512];1 b  W5 k6 C1 k6 V, M# x
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");- r+ H7 _% A- a9 g+ Y
  717.         if(fp)% g% y1 D  a) f. _: E
  718.         {
    9 v0 x9 b7 ?. ?5 l. b
  719.           do
    & Y3 L2 f# _" W. }' N
  720.           {
    ! N  p9 T/ a3 K
  721.             iEOF=fscanf(fp,"%s",szString);% r$ W# E$ Q5 G8 Y1 V
  722.             if(strlen(szString)), y) b8 R# D$ C  I) z5 ?- b6 B: e
  723.             {' t/ C5 T" ?7 L) g' A8 P  a
  724.               if(bFirstChar)
    # {7 K- d8 r+ \
  725.               {: L8 `2 Y: _0 O  M8 _( I8 I: f4 L
  726.                 bFirstChar=FALSE;
    - J! t( X  `0 n9 }# q3 ?4 p* y
  727.                 bConnectIsBig5=FALSE;) B+ f6 {8 R7 O$ H2 ^- y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;. i( M- P) j' ]/ {6 W; d
  729.               }
    - e2 x; i4 \* k, q9 R8 Y" u7 Z* W
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; u# E' X. L4 q3 o
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . i; z+ ]/ C9 g# W0 C2 X3 o8 c7 j
  732.               dlg->m_ListText.AddString(szString);
    2 u8 r  t0 C8 X6 Q  P3 [- P9 R
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 i5 K9 C0 W1 f% R8 O1 n# `. W) @
  734.               *szString=0;1 K: B& u7 e" ~+ I& v% {
  735.             }
    , z/ R& u" U+ A- |+ l# u& X. o
  736.           } while(iEOF!=EOF);
    , z  [' {5 H7 @4 g( @( y; O
  737.           fclose(fp);/ r, j/ H9 A0 v8 N0 ~- \' f
  738.           unlink(".\\DownLoad\\readme.txt");
    7 G! T8 }; j- I) R( g6 Q; O1 X% H
  739.           dwStartUpSteps=3;9 F5 N" u! n0 O
  740.         }7 [5 |5 Y& z, C: d: s3 n
  741.       }8 O- J) i. d+ q0 S/ @0 L) c8 e# h
  742.       break;( J! ~, C7 o' [, P
  743.     case 3:
    $ [9 B( O5 ]) L$ y  T
  744.       if(!Dn.Connected()), Z3 d1 G! c+ ^/ N
  745.       {+ f& b: a6 x9 ~$ |2 J
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);/ L$ R  k" D: z( Y' D6 `
  747.         dwTotalFiles=1;
    8 a: ^! f) c) N, E0 ~& @; x
  748.         dwDownLoaded=0;
    : ~4 ^$ R/ o  U: s
  749.         bSilentStep=TRUE;; R8 [- `# f# i9 _: i4 k% n# r" G
  750.         bCompressed=FALSE;- i# Z' g+ ^  d3 u! ]! d
  751.         strExtLocal.Empty();
    & a4 |; v! |0 @4 }3 o
  752.         strFullName="checkversion.txt";
    , B# u: E  f0 ~& J8 Z/ j. X6 ^
  753.         dwProgramState=AP_CONNECT;
    * X3 q% g# U, z
  754.       }
    0 C8 R" K9 N" ]- D
  755.       dwStartUpSteps=4;
    ( @2 m; Z0 y1 r2 f  q
  756.       break;) Q. w) X6 j# Z& g( d: a0 w  \6 f
  757.     case 4:9 {% t7 l9 Y3 d3 i/ w4 u& Q
  758.       {9 p3 @0 u6 Q! T" Q+ }2 A, e
  759.         FILE *fp;2 s! R# e5 @$ b' }( h
  760.         char szString1[128];
    5 Q8 x- V5 d! q) F8 Z6 \
  761.         char szString2[128];
    ( Z7 f  J% T- m$ J! J' q" q7 A
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; m  t+ g9 o, W$ l+ `8 r  G
  763.         if(fp)
    ! v3 L# H, G& ~% t. f+ q
  764.         {6 Q$ D0 s7 @5 b7 g- I
  765.           fscanf(fp,"%s",szString1);
    7 Z8 _  Q0 W& g3 j. M9 v9 K: ^
  766.           fclose(fp);
    + n/ D- v& X, s& l
  767.           fCheckVersion=atof(szString1);
    9 N/ b0 S6 z# G9 h- S) ^( n$ [
  768.           fp=fopen(".\\checkversion.dat","r");
    4 @4 C( k3 @) k3 i+ n3 t8 j3 J6 p, i3 v
  769.           if(fp)! Q3 G9 ^; b/ Z+ j$ d8 ^
  770.           {( {* h. K6 L  k) b; Q6 `6 i
  771.             fscanf(fp,"%s",szString2);
    8 b- l6 x/ F% h9 s0 F' @. m8 m
  772.             fclose(fp);
    & T" {: a( @. q( V! o
  773.             if(atof(szString1)!=atof(szString2))# t6 B$ j7 Q( `8 q1 K
  774.             {+ }# y" T& T1 H: ?
  775.               if(!Dn.Connected()): W1 V9 B; q. H' W6 q& Y
  776.               {
    8 M7 ]7 }* v9 X" t2 Y( L
  777.                 bFirstUpdate=TRUE;! }) |2 ^5 |! O
  778.                 dwTotalFiles=1;( o, @& H( q4 w% t5 x: W2 r
  779.                 dwDownLoaded=0;; p' \. J3 x9 Q! N& a# c3 g% e
  780.                 bSilentStep=FALSE;
    . R/ y: j6 Y" L3 K& \# {& g$ I
  781.                 bCompressed=TRUE;/ f( ?; |& n" @( ?/ z5 Y+ W
  782.                 strExtLocal=".\\DownLoad\";: e8 M  d. ^1 A0 N4 B% p
  783.                 strFullName="update.txt";" K) V+ G6 N* p% {4 ?
  784.                 dwProgramState=AP_CONNECT;
    - s; P& d+ ~9 g  u! b0 J
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " a7 i( Q! [! y3 H
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( J0 x/ t5 c, G9 \* L  k' S( I
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");9 i% y4 J& G6 n- m1 e, ?: V% z
  788. : J# L4 o( G; D' q( D8 v
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % {6 a" ^7 b$ U3 W% ^. L
  790.                 unlink(".\\DownLoad\\checkversion.txt");0 m0 c; C2 h: i" P; Z5 p) D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    6 Y: u3 B' }1 g; t& J! k
  792.                 {" G0 A, e. [+ P: l, t+ }) U
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 \6 l* E/ U0 D& w
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");. g- a+ o6 e0 f- c7 F$ B4 k: N
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");3 L1 j- {( f0 x2 U8 Q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ {1 u: Y, T$ Y( R5 I/ `2 z
  797. ) B! @2 t/ H$ t* E6 o
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; p0 j% a6 f: ^  G
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! \; P8 B; _( k9 ]+ Q
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");4 Z2 v6 N0 k0 x! g
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % x; B' ]/ t4 L# G, u2 H
  802.                 }: Z7 Z* A7 V( J: ]
  803.                 dwStartUpSteps=5;2 a6 x. A4 e1 a/ M$ d- u
  804.               }1 y3 N; \2 o/ s- Q! _7 x3 @
  805.             }
    1 k1 k% U( z  v/ w& @3 D
  806.             else) A7 L7 r5 @* M2 x
  807.             {
    % D5 E3 \' M( S1 e7 U
  808.               unlink(".\\DownLoad\\checkversion.txt");/ p1 k6 j# b; F4 n
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      F- w* A, [  L: Q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");; _( ~9 b' O; p* o. z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    * L: ^6 m, q0 a& [/ y

  812. 0 r' N) b! c) c3 ~* k+ ~& J
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 e4 V: X/ K, P. p8 ?) O
  814.               dwStartUpSteps=99;
    1 T; x: L9 [$ T
  815.               bFinishUpdated=TRUE;& j- y4 o/ Z& E) ^
  816.               bCanUpdate=TRUE;
    - X5 _3 i# p1 p6 _
  817.             }
    * M1 h% M5 n5 \
  818.           }1 g/ Z( `$ V' w2 e
  819.           else
    # x- Z( E% I) p7 v( X$ w$ x, S( m5 ]! p
  820.           {
    2 q- X: i9 s1 {8 J/ V9 u  `1 n' V
  821.             if(!Dn.Connected())
    / W0 X3 n3 b4 y# p% h
  822.             {5 b. a( f" U" W* c' i- w9 {
  823.               bFirstUpdate=TRUE;
    9 n) ^1 I. P3 K2 f( ~8 ~/ d$ r( Q* c
  824.               dwTotalFiles=1;
    8 P6 F) Q/ o; u3 x
  825.               dwDownLoaded=0;
    & Q! c% B6 N' |
  826.               bSilentStep=FALSE;/ B7 r9 ~, V2 D! ^# K
  827.               bCompressed=TRUE;$ u$ ^" O' `# ]6 ~! M! Y
  828.               strExtLocal=".\\DownLoad\";
    * m; P# K; X3 j
  829.               strFullName="update.txt";/ u; ^- x6 \! |- F: ]3 d* y
  830.               dwProgramState=AP_CONNECT;# N0 l$ B$ g6 Q5 V* u4 w, [
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ V8 P5 S$ y; B( r7 s
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 F" t8 l% E( k" R0 g
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");0 t/ ?: a1 b1 v8 e4 p; A3 B
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 A' \( c9 b7 t9 ]* ^
  835.               unlink(".\\DownLoad\\checkversion.txt");
    5 `. Z' ]- p  a0 [* j8 ?% r
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)* `' }4 Y9 |3 a
  837.               {+ ^* |; a1 m  c& U' K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    & i: w$ l7 `3 ]( V0 j
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    0 }7 X' @% s) D1 D2 k) b: s5 K0 O
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");6 l, \$ e4 R1 L( }* H' n- l$ i8 S
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ n" G6 x7 }' H5 F1 S
  842.                 ! m9 G4 H* F- @3 k8 y5 V3 b5 }
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & g5 H- J) z8 ^+ J+ z  @0 T
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 D2 h: S4 @( @* V2 l/ f8 \6 z
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - u0 m% u$ K( N$ b
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 h9 A$ g; _# h! a( i* }
  847.               }+ f, X3 o9 S( h4 y; u
  848.               dwStartUpSteps=5;
    3 _1 x2 K! c5 X& R% C
  849.             }; F  c3 W, o# @, i. X
  850.           }
    & J" P: J7 Q3 J  t/ X
  851.         }2 P9 t) X. y% n# b
  852.         else& J6 e& Q) _7 z5 ?5 q/ ^9 V
  853.         {8 X6 t" o  ~4 Y# m4 T3 S$ n& I/ R1 s
  854.           dwStartUpSteps=3;* z2 _8 u3 V  d5 l( O
  855.         }7 H; d4 A; o( @3 q: o$ I
  856.       }5 L7 v3 D+ a3 P9 @! D9 T6 o3 I
  857.       break;0 a% O5 c% q+ u6 @9 Q, K
  858.     case 5:  s  t$ t  p+ i3 o% [
  859.       {
    1 ^. t: @, f: G/ z4 A. [2 A
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)' d0 r# N6 I4 i/ w
  861.         {
    & O9 l* K9 S9 x% A% S
  862.           int opt_overwrite=1;
    2 [1 V& C8 l$ a! a) ~& a
  863.           int opt_do_extract_withoutpath=0;9 Q/ k) D" Q$ J) Z4 V3 x' I
  864.           unzFile uf=NULL;
    + k; g+ F/ H7 h; y; j$ l, w, V$ G
  865. 9 M( S; {( Y' E; p
  866.           uf=unzOpen("Wsa.zip");
    6 U* x' }' E0 o( ?$ i- j
  867.           if(uf): z1 J0 a  B7 M
  868.           {; v+ \) o3 `; U: v9 }$ n
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    2 r, t6 _% W3 d. f! f0 m
  870.             unzClose(uf);
    , z& i0 Y  I' y2 O, u: l( x4 l
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");  W/ `7 A: V- T- C/ X1 ~2 b
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");( Y7 U1 O. n- x" f0 m0 L( M
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ; `0 \9 r' d. u7 b; }
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 S  J1 u" K( E% e( H& e
  875.           }
    8 y  s7 P& O" \+ s9 d! ?2 x$ m8 x$ R
  876.           DeleteFile("Wsa.zip" );
    0 \4 J( H7 m& T9 }6 R4 ?3 J  a
  877.         }! j% a7 k- t" k

  878. , x) I2 o+ ?6 V; s2 K
  879.         if(CheckLocalVersion())! ?5 y3 B+ q3 ?: I- C
  880.         {6 a9 H/ r2 f9 p) M: D: U  W, g
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");* n) i$ f7 F" C
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");4 [( z$ M) Z. m$ w" P
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");! S6 t7 t1 X/ H; h" C
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , _' `& X7 I% A2 g  r) S; ~9 K6 k
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    " ^  G! p( |( P
  886.           dwStartUpSteps=99;; \1 i& `: s4 C& |' `) l/ r) L% i: u
  887.         }5 t8 E( L: m% a+ A* V. o  G. u
  888.         else" P/ H6 X8 ~: ?& S0 F/ A
  889.         {
    ) E4 y5 K. @" ~; L+ q' s
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");$ q; _/ R. P+ o+ l- N
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 m: _" {1 ]% d
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    & M* a9 w/ L; k* Z" ?7 z- N

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-5 13:07

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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