CSUpdate.exe源代码

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

; d+ W6 |' W* [
  1. / RevApp.cpp : Defines the class behaviors for the application., {. C. ^; k* i
  2. //
    5 O" D' S$ t3 }& @& I

  3.   @; @/ |9 K2 c: [, j
  4. #include "stdafx.h"
    6 f- C8 y  }8 j2 v, B) Y$ O
  5. 1 ]" u6 u* }+ S3 c! C: t: w! v
  6. //#define UNICODE
    4 p& c: m" ]( }2 l2 J7 T
  7. //#include <gdiplus.h>
    3 B0 m/ H! c: j
  8. //using namespace Gdiplus;
    " B+ E- ^9 I4 G" c& Q. _7 M8 n, f
  9. % y- N1 `& o( W4 N" Z( U8 G
  10. #include "RevApp.h"
    0 |2 k  B. A/ K7 n4 J
  11. #include "RevAppDlg.h"
    , o; a. }; a! n5 y
  12. * ~; {' w! A  ]- F  R5 {
  13. #pragma warning(disable:4786)
    # ?) |1 E& i( q; J3 _
  14. #include <map>
    $ w+ N6 p6 ^+ N; i
  15. #include <list>: y" o, L' n" m; S  c, m% b& M  P
  16. #include <direct.h>; T5 y& E- V/ g3 T; r6 n8 }. V& E9 j
  17. : X9 @+ |  T% N" ~
  18. #ifdef _DEBUG- ~* s, H, Q7 m
  19. #define new DEBUG_NEW
    ' m- o/ I2 A. \+ Y- H1 y
  20. #undef THIS_FILE4 y9 h& t. p+ q0 p& `0 n2 t& @4 |
  21. static char THIS_FILE[] = __FILE__;
    6 `2 i6 n& G& `7 [; J* F6 d3 @" G. N
  22. #endif
    + P, j8 T7 e- C6 `/ {: a$ m
  23. #include "SkinResDef.h"
    $ m% O* E6 z. L) {' ^4 D% h7 G
  24. #include "ChangeBG.h"
    5 A* ~# H- ]0 W1 q$ Z% ~7 n( O* [  m
  25. #include "AFXINET.H"
    ( R$ `# H* T. J' `( ?9 {7 c/ n5 F( ^
  26. 6 E* h9 @# r2 d
  27. #define TRADITIONAL_CHINESE 0
    6 G2 ?0 K  A' F5 M( ]$ o, c) E
  28. #define SIMPLIFY_CHINESE 13 A) J8 _) v3 I% ^
  29. #define ENGLISH 28 {! G1 F& C9 \! q& j, Q4 w/ V
  30. int m_iLanguage = ENGLISH;+ I5 Q: [9 c; m' {0 C8 s
  31. /////////////////////////////////////////////////////////////////////////////
    * }$ e; ]: @: H' N; O4 w
  32. // CRevAppApp
    - I# H' ^( V9 H- p- W0 A$ w
  33. 4 G  t8 |* e+ a! m% ?5 G0 k
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)1 t# e; s2 I: Y/ H& _8 [
  35.         //{{AFX_MSG_MAP(CRevAppApp). I4 m' n2 ~1 a. m$ y) @8 U) d
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    1 c) ]8 a) o# w! E4 B: y# O7 j
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 [5 S, B4 w% f. C$ D
  38.         //}}AFX_MSG
    " p0 w8 C" e. |
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)' I" k! J5 K/ z1 N+ `8 R
  40. END_MESSAGE_MAP()
      p8 o0 R+ @* v/ i$ P

  41. , N* X6 H9 c3 J' f( W: v1 C, d9 Z
  42. /////////////////////////////////////////////////////////////////////////////
    ' R5 A- i0 p; f! \' m! w# U* Q
  43. // CRevAppApp construction% L) C7 E( q7 t
  44. + N7 k. ]& ?7 M, j) O
  45. CRevAppApp::CRevAppApp()
    ( N# p: a$ s3 Z: M$ L
  46. {8 U5 z7 @5 y' z
  47.         // TODO: add construction code here,, E& a" H6 T/ Z  q8 Z& f
  48.         // Place all significant initialization in InitInstance
    4 u+ c! u% G& E( U, y
  49.   bDisplayIsBig5=FALSE;! T' ^' S4 W2 h% J" y
  50.   bRestartUpdater=FALSE;3 T# u0 |) H1 W% `2 u
  51.   bFinishUpdated=FALSE;  |8 `' L2 `+ J4 N; K
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    % q  r) S7 U! Q3 R$ Q
  53.   InitChangeDataBig52GBKS();
    ; ^% f( W; k/ s) e. N) S0 W
  54.   InitChangeDataGBKS2Big5();
    & q; f4 c' t, W; Y  Y
  55.         //
    % a7 y. \# D- z  ^% }- r
  56.         bClickRunExe = FALSE;
    5 v" _& a3 |$ {: ?; z
  57.         //
    / }6 ?& J6 x5 S1 Z7 g
  58. }
    7 a+ L1 ^% f' p

  59. # W& a7 p, D: l* H
  60. CRevAppApp::~CRevAppApp()
    # r7 Z6 o# T1 t4 l
  61. {
    / y6 M" ^4 U6 n7 n5 A
  62.         // TODO: add construction code here,
    ( ~6 [1 f# ]7 Y# i2 c' J$ v2 a
  63.         // Place all significant initialization in InitInstance
    9 d' e; F1 k1 e. r( O6 R
  64.   EndChangeData();. M3 [& R( h2 }, s
  65. }! p2 Y" S! D% r% h, Z) g4 o

  66. 3 U6 \' k* b- v8 u' [2 y/ X
  67. /////////////////////////////////////////////////////////////////////////////
    0 K; }+ r9 Y% p0 `7 J
  68. // The one and only CRevAppApp object( @9 Y* h7 g$ B/ h6 x
  69. , K* q, a" j+ }2 s
  70. CRevAppApp theApp;9 G2 P6 g$ j2 V# S# g

  71. + P- R5 {+ A: |
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 v, r5 k4 l8 |& K' h" d
  73. {
    0 k/ d1 Z) b4 l- X2 S# B9 y- f
  74.   int iEOF=0;  o% N; W( F* H
  75.   char szTempName[MAX_PATH];# ]3 y9 ?. g) r! N4 I$ o
  76.   *szFileName=0;
      S4 r8 s  w/ p: `8 z. h+ a( K
  77.   iEOF=fscanf(fp,"%s",szTempName);1 |2 q: w7 j2 y7 g
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    4 f  H+ Q, a& [+ m
  79.   {. ?* k9 ]' Y6 T( D
  80.     strcpy(szFileName,&szTempName[1]);$ |7 r9 h& v7 h# p# Q) c* C
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    $ l/ A. G' P/ M% \/ \/ O
  82.     {; E6 v2 i) g/ K. {  y2 s& P
  83.       iEOF=fscanf(fp,"%s",szTempName);8 p8 K+ D* q! I. L8 L6 g
  84.       strcat(szFileName," ");' x, ?; O& w( K) S7 r( |
  85.       strcat(szFileName,szTempName);
    7 F: ]) l$ j0 u; T: q2 v
  86.     }6 J; Y! M. u; w' m; O5 P' v
  87.     if(strlen(szFileName)>=1)
    9 p2 w' t1 \& r4 P
  88.     {5 j# d) R% f- w0 _7 ]3 j0 _
  89.       szFileName[strlen(szFileName)-1]=0;3 E) v& R4 ^7 {9 X% V0 W
  90.     }
    & y( f& ~0 U' M/ z* V' b2 S3 A
  91.   }
    0 f& H) ]6 E, ~' F# m: A7 o
  92.   return szFileName;6 l  I( T' i/ M/ C) c3 J& G
  93. }4 N7 W* L" R9 h8 Z  g

  94. 2 I/ x5 q# W3 n* _3 V  t% y' G6 A
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile): q9 Y5 p0 L; {, T3 m
  96. {
    * t+ d* x$ q7 F% e% j1 N8 K  c
  97.   FILE *fp;
    6 E* |6 \; U6 M& D1 C; @6 h* A: L
  98.   char *key=NULL;
    ! s& j! u: u( R; P
  99.   char version[MAX_PATH];  m% @; j4 _. @* \
  100.   LPUPDATEFILE file,olds;8 h- g  `  o* C+ Y- T$ H
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 y5 n# S) @$ H- p( q

  102. : |7 @8 P3 P+ e8 ~& i0 n2 r
  103.   UpdateList.clear();6 l: O: v, F: M
  104.   UpdateFile.clear();
    0 S$ ^3 b: W& |
  105.   if(GetFileAttributes(filename)==-1) return false;
    " M6 }- G) C' w. _$ k" z) J6 A
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ! U0 i. B; @4 ?' W
  107.   fscanf(fp,"%s",version);
    , s7 t# k3 s& d2 k4 B* a
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }, ~# u$ a0 T3 o% A) q3 r/ r, o, `  V
  109.   while(fscanf(fp,"%s",version)!=EOF)
    0 C( l8 w$ e5 n4 i% }
  110.   {; ]- P4 H# ?, q: D' z1 A2 U
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 ?5 [' `0 M2 N; h
  112.     fscanf(fp,"%s",file->path);5 H, m- r+ u8 {9 H  E3 G) `
  113.     ReadFileNames(fp,file->file);
    , ]2 M$ p2 [3 d/ ^
  114.     strcpy(file->full,".");; d& K0 |$ R, E' `$ ]5 V
  115.     strcat(file->full,file->path);
    ) B! x6 ]/ O8 S: n% `/ x
  116.     strcat(file->full,file->file);. ]5 ^! e1 S' r, h; d7 z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    4 e# T" N: V3 ?
  118.     {
    9 M3 C! {, R, I8 I9 s
  119.       file->vers=(float)atof(version);" B, v3 f4 Q* Q0 w  ~
  120.       UpdateList.push_back(file->full);
    . o9 z4 a* v* q& g/ c
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));2 g+ m1 p+ f  N) E+ R+ D  _6 E
  122.     }
    ; J( c$ a$ s5 l0 D
  123.     else9 V( N; [5 x6 X8 F
  124.     {- e' n# `+ F" p
  125.       olds=(*p).second;
    ) O# R4 j& I( {
  126.       if(olds->vers<(float)atof(version)). E% |, B: T& q4 P2 r. I
  127.       {
      E% s7 U, ^7 L9 R; ^
  128.         olds->vers=(float)atof(version);
    : `$ u9 r& S' C7 H) W0 R( C* J* n! K
  129.       }0 ~& y( d: C$ E2 y8 U, z: i
  130.       free(file);4 j+ H: p4 B8 R  M
  131.     }
    3 N8 V; `0 j& s- A% u; ^- j
  132.   }
    ' B& {  t" x: z, A
  133.   fclose(fp);( ]2 E, B. Q' m
  134.   return true;; c% J, \% S1 P6 S; S
  135. }( h/ Y  l7 |+ i
  136. 8 Q8 e5 f) T! T5 X' c
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    7 u, U# G0 ^0 G- l% S, E
  138. {. F$ k& ?0 f) W
  139.   TCHAR  szFull[MAX_PATH];( m1 R% H5 F; a, f
  140.   TCHAR *token,*inter;
    ; C1 N* a; J8 s5 N
  141.   *szPath=0;
    3 ^$ J. S$ @$ L
  142.   strcpy(szFull,szFullPath);$ i! C/ ~; A, R( m, N
  143.   token=strtok(szFull,"\\/");
    " a! j5 O* s$ R* M; @5 y0 Q
  144.   inter=token;7 F* _% {, V0 u; q' ]! j2 H
  145.   while(token=strtok(NULL,"\\/"))
    6 H" G1 q* A8 r  c( l1 b
  146.   {% `) \& T! X% C5 T5 a: \! A
  147.     strcat(szPath,inter);
      b3 O. z8 u5 Y. M8 N
  148.     strcat(szPath,"\");
    1 N1 F) c% b/ h
  149.     inter=token;  s' t: u/ T8 O+ r% {
  150.   }
    6 H4 R- s6 ^5 U5 `* v! v' @
  151.   return strlen(szPath);* M3 f* r3 m6 J4 z- q+ m
  152. }: k) k5 W  w; b2 C; n5 j6 U
  153. 7 m! x$ H  H9 x' \9 V
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    # E/ _  q1 b0 a1 M4 X
  155. {
    1 F* n+ w/ Z- _  r
  156.   DWORD attrib=GetFileAttributes(Target);- r: _2 t/ J* I, Y& ?
  157.   if(attrib!=-1)- c9 h" P' H- C! D4 l
  158.   {% |- j! {5 V7 S' @
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))7 _6 s' w) M- M  ?. q
  160.     {3 y) c8 @  {; ?6 ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
      W: m! I& v4 ~3 D9 }% h
  162.       SetFileAttributes(Target,attrib);
    0 B( A5 w6 D5 c2 ^
  163.     }' ]9 X% c- p5 ~. ~
  164.   }, Q. @1 @0 G4 j- [+ L+ q4 u
  165.   CopyFile(Source,Target,Erase);
    ; ~' ]: a  R- u0 s
  166. }
    7 u5 _2 i4 y+ X( R4 _
  167. 5 s, ]7 j- R0 X; c  O) J, }9 l
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
      G8 W6 x' y3 A) y
  169. {
    , N* B' @: y4 _
  170.      FILE *fp;+ a* A+ R& K. o6 o( c5 S" k
  171.      char  szBuffer[8192];
    6 }5 ?  R3 S1 Y
  172.   va_list  argptr;
    2 N" X3 P7 N' ~; {; Y& L, T

  173.   X  h: W1 _) H1 B
  174.         va_start(argptr,message);
    # g- f5 U, l! l
  175.         vsprintf(szBuffer,message,argptr);
    * c1 z0 S+ `6 J3 c% `( k
  176.         va_end(argptr);' l5 J8 q; g* y9 B1 S0 L, b
  177.   fp=fopen(FileName,"a");  @$ G- `" v" y+ _, N3 e4 g1 H: x
  178.   if(fp)
    6 @8 ]; P; X: y' ^" e: i
  179.   {. h7 C- b- m/ m0 `7 f* j+ E- Z
  180.     fprintf(fp,szBuffer);
    / O3 d- r: i9 c6 \, \
  181.     fclose(fp);7 I4 H+ \4 Z6 p+ }
  182.           _flushall();
    9 ]. O7 d& p- F; q1 C* |( I: u8 F
  183.   }
    ! w0 r1 `; j! i5 f
  184. }
    . Y$ T+ Y. k8 a

  185. - i/ y+ ]8 U  K# `
  186. BOOL CRevAppApp::Fclearf(char *FileName)& x0 }( L. S( D! o% w$ X. f
  187. {+ [) i1 Z( X) w, [( Q% h% l
  188.      FILE *fp;  Q! S" h0 Q4 h9 r' Q" N- J( Q3 f5 U7 G
  189.     DWORD  attrib;, ?) W/ ?# t' s8 C
  190.   attrib=GetFileAttributes(FileName);
    ( y+ o7 U$ y9 A6 Q" Y1 G- v
  191.   if(attrib!=-1)
    + Q5 t& X+ ^8 ?% a0 \
  192.   {
    9 G7 L( G0 S4 i7 l
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);5 |2 W% C8 p0 S' O
  194.     if(!SetFileAttributes(FileName,attrib))
    1 H3 H8 [" Q/ U3 u9 Q) M
  195.     {/ O' {; d3 \0 d3 D4 i9 C
  196.       return FALSE;
    : i$ H% I# X3 u" X9 x
  197.     }
    # S* \9 _+ v+ I+ P; Z
  198.   }
    , A. i' c3 e  J* C
  199.   fp=fopen(FileName,"wb");6 ?8 O8 y6 s: i0 w
  200.   if(fp)
    % R- a2 w. L1 p
  201.   {5 p6 y1 @$ d" t  e
  202.     fclose(fp);0 |4 x$ X. N0 o0 i  M, N& @
  203.   }
    7 k3 @1 ~7 m  m2 Z* K/ @! y- h
  204.   return TRUE;- B5 w  j$ `! j  D7 l6 Q
  205. }& w2 r: k; t9 M4 b% T$ t) k" E; R
  206. 4 w  Q; H9 X, P, `- l# p
  207. BOOL CRevAppApp::UpdateLocalVersion(void)5 R+ {# g/ B( Q. i  J4 J, ?5 ^
  208. {" c- x; q4 ]2 q7 ?
  209.   char filename[MAX_PATH];0 U( l, I; d$ c. w+ D9 r
  210.   LPUPDATEFILE file,olds;  L& K/ F3 E4 u, i3 J
  211.   std::map<int,CString>::iterator i;" [- c$ a8 [  _* P# l
  212.   std::map<CString,LPUPDATEFILE>::iterator p;0 e, N2 J9 a+ G+ R
  213.   std::list<CString>::iterator l;
    & M6 I, F+ H( Y6 k) {4 u

  214.   d6 z9 l0 Y/ V8 {
  215.   if(bFirstUpdate)7 H" d8 u% ^. O& Z0 D9 F
  216.   {
    4 V  J: F1 c1 o; K
  217.     dwCurrFile=0;
    1 t) s$ a! o8 x0 t. [' f
  218.     bFirstUpdate=FALSE;# L6 F0 F) p; I, y1 s5 V
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 V" n! i! Z& a3 ^& X
  220.     {/ |8 g) k8 o/ Q" L
  221.       dwTotalFiles=UpdateLocal.size();
    % m4 i2 j' |, S7 X( c# w4 I
  222.       dwDownLoaded=0;
    + |* i& c- r& m% z
  223.       bSilentStep=FALSE;
    . z/ F! G, S& E
  224.       bCompressed=TRUE;$ F1 ?' ^1 z$ b* V, @$ t/ _# [
  225.       strExtLocal.Empty();. ]1 j5 E/ S# U: i3 H1 v* n7 Q& V
  226.       strFullName=(*i).second;; m4 J! O/ l4 U# ]2 j1 r/ k+ J
  227.       dwProgramState=AP_CONNECT;
    ; G$ F% N4 \9 O4 J5 X9 T- w
  228.       return TRUE;
    ( B& l4 M( d8 j
  229.     }
    7 a8 @8 Z0 f. V" }
  230.   }  f5 e8 \* D' j7 ?$ U, Y0 x
  231.   else if(bRestartUpdater==FALSE)- P3 e# @* i/ Z$ v) Y; P& ]+ R
  232.   {
    8 {5 k2 ^' ~7 R- S# h
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())% g' L) w3 n1 D/ H+ w' q
  234.     {
    " a4 E* x& ?3 u4 |$ U& n, c
  235.       file=(*p).second;5 y% c% E) X! x3 b& x
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - g9 ^7 y1 R: h" G1 d" R# K! [# f$ _
  237.       {
    ( t+ F+ Y4 E* w% V" L7 i- ?* C# O0 r
  238.         olds=(*p).second;: X$ F, T! ?9 f$ S7 i$ Q% m5 D
  239.         olds->vers=file->vers;! Y& m- l2 W1 _: g7 E. m
  240.       }5 S9 I' t  @- L, o2 r7 n
  241.       else9 h  l; K4 [# O5 P! L. Q" T8 M$ w
  242.       {
      C( }/ q, N* B8 t% _$ C
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 r2 o& k9 t3 P) u( W0 ?6 {! @
  244.         memcpy(olds,file,sizeof(UPDATEFILE));" H) |: x* Q/ `3 B6 c5 y. o
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));& m4 }! x- n# ~7 [- X, Y
  246.       }
    6 Q  M9 c* v3 U$ y/ y" U0 p& ~
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    2 R. x/ t6 e3 O8 ]
  248.       sprintf(filename,"(%s)",file->file);
    3 @# g. ]- U/ K( Z! S- _
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 E& U: g# i! V: b8 O& e
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: l. W. k% K" R# m1 q0 v/ m" |7 P; q2 s
  251.     }0 l. p+ S5 W; l; ~
  252.     dwCurrFile++;% y  [  {1 ?/ u
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    6 f  f3 N2 a  q& l
  254.     {
    ! ]. Z8 S; W, M6 r. E/ L3 r
  255.       bSilentStep=FALSE;+ x: b6 a, F, H! x& b, \  w# H
  256.       bCompressed=TRUE;
    # R# X4 I7 D1 i# @( [
  257.       strExtLocal.Empty();
    ' X% N" O1 d3 w5 M  O% i
  258.       strFullName=(*i).second;  f# r6 R6 v( d0 w" o  w! J5 c. R6 s
  259.       dwProgramState=AP_CONNECT;) j; S& h/ N1 l+ I9 F: b
  260.       return TRUE;
    ) X, z5 S3 k2 l( L+ ?
  261.     }7 p2 x* L& y4 m& v3 J; m
  262.     if(!bRestartUpdater)
    5 m; c% X/ `# z$ X6 w4 l
  263.     {' x, @* K$ K: W5 f2 z  x# L
  264.       int iCurrSize,iFileSize;
    ' q6 f) `! d' {0 u$ u# e
  265.       iCurrSize=0;
    " \& B+ F+ `; l4 X' M7 l
  266.       iFileSize=UpdateList2.size();) N0 s( e+ O  A! j5 Q) x0 `5 m- _
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    / y# t3 ]1 p$ S& W! P6 E) I
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    & M6 E6 t# _( F4 L
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");7 M3 N8 }0 p  K$ Q, l* s
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# h! H; m8 K3 z! F* o
  271.       Fclearf(".\\update.dat");3 I( J, W: Z. I9 U$ o, ?
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ; ?3 |1 ~" q2 \9 ]( }6 D/ ]9 Q# X. E
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)0 O8 E/ j6 v4 V! D) E1 A+ e
  274.       {
    ! ?2 y$ g* V$ w6 @3 U$ y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  T( ?) f9 R1 K! l+ m
  276.         {
    4 J# U0 @: @6 K! b1 P6 e5 g5 S
  277.           file=(*p).second;
    8 P, Q/ t" d# P: j+ \. }4 U5 _' q+ t
  278.           sprintf(filename,"(%s)",file->file);
    ( Z! ?& j2 Z. H6 m9 P* V7 J/ E
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 X: X$ ]2 W! y( g
  280.           iCurrSize++;
    % K6 t1 T1 u$ @* E$ k3 J
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));- F- N6 {- d; P) }3 ~
  282.         }0 b: g- h; l$ x' y6 G2 }2 a
  283.       }3 j0 `  ~% F4 G
  284.       unlink(".\\update.txt");
    ' ^; ]. N3 q, Z# L8 [
  285.       unlink(".\\update.tmp");
    : e  M/ f4 \+ N9 c' J
  286.       Fclearf(".\\checkversion.dat");* X, \. K/ H: u6 n# ]! d
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);* V1 b% l1 e; I" `% B" C( e
  288.       if(UpdateLocal.size())3 p% k$ q) D3 b# F
  289.       {
    ' k  t2 w2 A  ?6 t$ p% g: v
  290.         UpdateLocal.clear();
    0 |1 B  t4 _. y; P2 \& u
  291.       }
    % A+ A' }: M( d+ u# o  s! {# \. N
  292.       if(UpdateFile3.size())
      c3 M+ ~& g! w! u0 h; i! H7 I9 V
  293.       {4 }" L  ]/ Y( ^* A6 Z2 _
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 R6 N/ v1 ~& F4 ]- Z' h& W$ o
  295.         {/ n/ _6 Z. r* M* _* m6 X2 w
  296.           file=(*p).second;3 I& q- u8 H/ E: x$ D3 d
  297.           free(file);, w7 K" c& B3 {+ k2 U6 o( s
  298.         }
    * I: W' X: e& h1 z2 F- m
  299.         UpdateFile3.clear();# j  y/ }" u, `: q5 n
  300.         UpdateList3.clear();. L* P' [9 L' A7 z- B; c
  301.       }9 }1 S' r, V9 E
  302.       if(UpdateFile2.size())
    8 D. V7 ?0 `+ j' P
  303.       {, ^" e* G8 c  r
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* q3 o- G- u5 k# T- G8 K5 Y
  305.         {0 u- ^0 x: R/ T+ d1 j
  306.           file=(*p).second;
    ' l8 y( E: M$ O
  307.           free(file);
    4 Q+ _+ c- |) y% U* f: }" P7 t1 ~
  308.         }7 n( d" Z3 S6 \- X
  309.         UpdateFile2.clear();! N- |- \4 y4 z* m  q" K
  310.         UpdateList2.clear();
    & S1 J: U- x! c( \
  311.       }  Q  ]1 \7 ]1 J. L
  312.       if(UpdateFile1.size())
    1 c- V0 L  n4 P+ ^: V3 w
  313.       {' z0 O$ l$ [- v
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    9 l" K8 Y- A1 w7 ~: l$ {
  315.         {( ~5 j& O) j, E
  316.           file=(*p).second;
    ( m9 J: i, j3 C. Z# l8 ^) V
  317.           free(file);
    & Z! o4 \  a4 g- o
  318.         }
    ) \' ^; p) K0 {$ x
  319.         UpdateFile1.clear();
    ( v) r: Q# y7 R' t  S7 `
  320.         UpdateList1.clear();1 W" V) R6 h4 s
  321.       }1 n+ h; V, T/ b% M( r+ @
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ( l: R1 \) U8 _3 H( H  {
  323.     }1 j" b9 T9 @) |" z. x1 W/ m- J
  324.   }+ E# d" K) F- l2 k  M% J
  325.   return FALSE;& r' @$ [8 ~$ l. C3 [4 _3 s* i& B
  326. }
    + L) W2 t& `$ ]3 a; a
  327. / g$ B, h5 b* P7 V" V
  328. void CRevAppApp::ClearAll(void)
    + F+ `' v, G' l4 b) s
  329. {
    4 m0 z* `! a$ U' J
  330.   LPUPDATEFILE file;; V5 r5 o' P7 k. w) X2 r4 L" E
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! N- ^' \' o5 R; D" }; v( p/ j$ c

  332.   T- {  }+ k7 g2 o8 A
  333.   if(UpdateLocal.size())
    / w$ x$ h- C+ c' t- B
  334.   {
    & A. y+ U1 U! K2 z
  335.     UpdateLocal.clear();
    2 f. f' o+ R% M" c' T# L) f$ B
  336.   }
    ) `' I; d6 _( i1 g( S
  337.   if(UpdateFile3.size())! [( e3 m- {. c" [% ~
  338.   {
    ; n) z" _& n) l
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 g. Z! s0 l7 s( `( f
  340.     {
    " D4 C( A# \# m, M# h/ W! X
  341.       file=(*p).second;; s8 I# `1 s7 D( Q" i  m4 }3 U1 A6 [
  342.       free(file);1 O- T& Z; p( ^/ h! a
  343.     }5 B$ @. @) \' `0 Q4 _
  344.     UpdateFile3.clear();
    2 D' I5 G' l  u" F; \- B4 @6 E! u
  345.     UpdateList3.clear();
    - w; d" r, d2 v) `0 H
  346.   }
      B7 \! S" ?1 A( s
  347.   if(UpdateFile2.size()); O, d7 h0 q. Q8 T9 @0 d
  348.   {
    ' x0 L8 ^% `3 X& j- e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / p: X; }' a7 I  P4 z
  350.     {- O8 y! [) K4 s# N
  351.       file=(*p).second;9 i4 |' Y3 R6 A5 t/ B
  352.       free(file);4 l; j0 d! Y$ z& W/ `. K! @
  353.     }1 h. Q0 u7 l' q! C/ R5 @2 `
  354.     UpdateFile2.clear();
    6 S+ N: R: U" N
  355.     UpdateList2.clear();, F8 }0 w5 g7 p4 |7 B8 ^
  356.   }
    - L# g$ Z( f; e9 S( B6 a
  357.   if(UpdateFile1.size())% T; e  O% a) R) I
  358.   {/ H  _4 z! c9 S& `/ I, m: M, V/ R
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    9 c" u0 k- r/ T* L) c$ W& l( a
  360.     {# d7 Z9 ?5 _, f9 H4 J
  361.       file=(*p).second;
    , |, X, O. ^  a% l; O" x6 H9 B9 E
  362.       free(file);
    5 p$ h! f( @: ?3 s
  363.     }
    * T6 Y8 m" R4 T6 F8 C/ H3 }
  364.     UpdateFile1.clear();
    $ I- e, {3 P+ T: [* \0 I/ ]  a6 a: G
  365.     UpdateList1.clear();
    : h1 t; x& S: y. ^
  366.   }
    ( `! K/ E; r; k0 f: O
  367. }  9 C( ^% ~6 W) z+ A+ i
  368.   
    # ]+ s5 e: m$ `% r
  369. BOOL CRevAppApp::CheckLocalVersion(void)8 f# c8 g3 s1 f. z' k" o
  370. {
    ! `* Y& D6 X$ K" V* C& U; u. b# s" s
  371.   int c;$ X4 a) w' M4 C" t% l2 y* j) @- z8 Y
  372.   LPUPDATEFILE file1,file2;' w+ k# t- d4 j0 b: {) [
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    1 E5 s# u& ~4 T- f; a# q( K
  374.   std::list<CString>::iterator l;
    & X0 y# L; y( Z4 A& o
  375. + l; x1 ?& M) y1 v$ _- ~6 R
  376.   UpdateLocal.clear();
    : x. H! j4 c3 {: ?* \
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    . s; G5 A% R1 O: U  j
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ) j3 K9 O! F& P7 `6 k
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    # u' P( {& ?: ?
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ) u% M8 q1 N1 t% D6 M- y" f, u
  381.   if(UpdateFile3.size())
    - r8 O5 q' }& b2 S1 I- C/ ~& M. z
  382.   {
    . I, z2 d- s9 h- x  k
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)6 M! T( }9 ^% i5 U5 J# q0 d
  384.     {
    9 h0 {. T7 @1 ?
  385.       file2=(LPUPDATEFILE)(*i).second;+ |6 M3 }* H9 Z" }$ c
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 W1 t/ l" B7 f2 \1 {1 ]
  387.       {' V- a/ {$ {  s9 q
  388.         file1=(LPUPDATEFILE)(*p).second;
    - u; [# G5 s: k0 g$ u( i# @+ P
  389.         file1->vers=file2->vers;
    7 n& s6 k* V' @3 W. X
  390.       }- y2 S  u# n% d) B% s5 a8 k5 N
  391.       else
    % A" _$ v! c; H9 }8 K$ h9 ]& d
  392.       {
    0 [1 c- q: }7 a3 o
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 c  F6 i4 h& ?
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));8 b  j# V2 E1 E# {' N3 f
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    0 D# C' ?. W* s2 L" e# @
  396.       }# Q, F3 F& ~5 H" ?: P' ^3 H
  397.     }
    / M# f$ N5 k! F$ C; B& o1 F
  398.   }
    2 L8 @! `  O; X5 g6 }1 B! @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++), a8 S4 E. X9 q7 ]4 K8 r
  400.   {
    ) l; z! j; ^  ?" u1 [
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    0 g2 M# _5 ?7 K5 b% o) z' g# w# ?" G/ `
  402.     {
    0 n9 j7 f, }) L0 @5 z
  403.       file2=(LPUPDATEFILE)(*i).second;# z4 j1 d( M% M# ~
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + e( q; G9 J- _1 b
  405.       {1 K+ t4 X8 G9 {* v! M
  406.         file1=(LPUPDATEFILE)(*p).second;
    4 a7 S) p' [# _& v( n: [
  407.         if(file1->vers!=file2->vers)
    9 S1 s1 }% v% c, l. M( t
  408.         {
    1 f# _0 Y8 w" _; I, T' @# o
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 B4 @% U( j& v$ R* o+ h* ]9 Y
  410.           c++;9 v! J* H3 Z% o  Q* Y; c" H- v+ F
  411.         }
    % F5 g* P! a' k+ m9 _2 y
  412.       }
    ( V* [2 R1 p5 s8 a. P# {9 R9 a4 Z, Y1 }
  413.       else
    : O. O9 e" g+ N: Y1 g" H
  414.       {/ N" n! x* h$ g# A6 p/ g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; j, `9 T! Q" W4 ^
  416.         c++;
    2 D6 V5 t$ i# c
  417.       }1 J& Q9 ^( Z* I# J4 K6 W
  418.     }7 f3 J3 ]+ _. f* X! c, L, m5 t
  419.   }
    ' @8 j, S, R' W; w5 ?! i6 ^
  420.   unlink(".\\DownLoad\\update.txt");
    2 c! b9 ]$ ^6 e9 i3 |# C0 @
  421.   if(UpdateLocal.size()) return TRUE;+ ~& ~/ o4 J! ?9 j5 J
  422.   else                   return FALSE;* `# Q% v+ V3 Y1 I6 |: s
  423. }2 A; ^( d' ?! J/ g
  424. & u! \+ Q0 e" f, t) e8 k( X& z/ z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    3 @' x- J- O( k
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    $ n# A3 u. L5 F2 |& H6 O

  427. ' T. F* n: q8 B% z3 W4 N
  428. 5 i: v4 t2 |% Q. ^

  429. ! v9 x, ^  a1 ?( p# B  ~9 \9 K
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    : M1 Z' m- A: ]" z( |; T
  431. {  R5 M+ u% F' F: j
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ! H4 X8 R. o/ C/ i/ J9 q6 a
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : Y& w% [  ~9 s1 T5 }. b! J# b- P5 x
  434.   {1 k! b) n, H5 U) o8 z6 n7 X. c* \
  435.     char szLanguage[50];
    7 d( s- \! D" `5 @# Z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 G$ Z) G  d) ]0 N
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' s" f% y( u2 G- }. f6 Z% y: i; @
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 ~; I. }% S' O& W* j) s8 V
  439.     else                                   m_iLanguage=ENGLISH;
    ) ^" |6 |  e$ T) e) s
  440.     char szRegister[100];2 H9 X$ x2 n$ a* Y  Y5 m
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 x) s3 z& Q% g& s
  442.     strRegsName=szRegister;
    . j' i9 J# G( L( u9 Z5 e- Y* b  W
  443.     char szPatchURL[100];3 E9 E" z3 P: W+ |! x* ]: _8 u6 R( d
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! x' I; h: r6 A) ?$ a8 r" w
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 o8 J0 v5 j" T' u8 T+ E$ v8 Z
  446.   }5 c$ x$ F/ f1 a1 A! F6 I
  447.   else3 E* p* k) Z' R+ d2 t# H9 t
  448.   {
    0 k0 K7 f4 m% ^; c, A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 j& a! k- ]7 J6 [; ]
  450.     strRegsName=DEFAULT_REG_URL;. g, h- B0 v+ e+ ]3 V
  451.   }
    & m( _  D- S# `0 R6 b
  452.   if(GetFileAttributes("hosts.ini")!=-1)+ D/ h5 X& T! c! H! `) l
  453.   {, T- J. @6 t3 _( X) z2 T' n$ }& z
  454.     char szIP[50];3 l! P. Q& [& ~/ v. a( Z
  455.     char szDIR[300];$ a# h7 q3 P% ]9 c9 l
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 y& W; E) j" P& ?1 \
  457.     {
    6 f/ B3 C& K$ F. L- M6 d% H
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");! [- P: G" J# _/ W# b
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    % K) u- K0 |$ x  J4 Z5 u  f
  460.       strHostName=szIP;- L- u. N# U6 _$ z8 A
  461.       strHostPath.Format("/%s",szDIR);- ]; c) Q- ]5 A% r3 n0 Y
  462.     }; l& H/ Z1 w+ O
  463.     else/ c+ ?& F6 f1 d" A+ B9 d) E  m; `
  464.     {% J, s/ r8 Q  p/ ^( G% \! t
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 n7 [3 m* O2 f! \& C
  466.       {1 s* _1 a, t( W# i0 g" p
  467.         char szLanguage[50];' {+ g2 f8 g- [% t+ u  W
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 E! ^' s- X+ |( v
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 f% ]1 O6 _% `3 N. ?
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 ~  a, f7 f1 k
  471.         else                                   m_iLanguage=ENGLISH;
    8 }0 n+ `5 D; i& N# X" K, Q, R
  472.         char szRegister[100];
    - X8 I, J. V7 _& _
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / d% T0 d+ h. U. c, o) ~) W$ ]% C
  474.         strRegsName=szRegister;  @7 C! W( I' r0 w1 F8 u' i# j
  475.         char szPatchURL[100];: _) t7 {- W4 }& w/ e) X  b
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) P3 D. B% T% V1 L. Q4 t& N
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; S& B8 P# ^3 d4 [  `( r9 ]+ {' ?
  478.       }
    + \6 S9 W: ^$ }( y7 g
  479.       else
    - Q5 P  x+ Z3 n- T  L2 i8 T
  480.       {
    2 T- P* r; j: f/ w% }3 {/ q( h% C6 I
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" M5 E4 _9 E  @# n+ P" J
  482.         strRegsName=DEFAULT_REG_URL;, z1 L( V+ f, y: y/ \7 `
  483.       }- c0 t, R6 X! H+ X8 m9 t
  484.     }/ a9 d' B! s. I
  485.   }
    * u9 P, p7 m8 |6 B- s
  486.   return true;: u7 U8 V* L& c1 ^
  487. }) D+ w  T7 i, I' ~9 J0 @( t
  488. 5 X1 p7 M& F) x( G* ~6 ?
  489. #include ".\ZLib\unzip.h"0 ^% e9 s( Q+ ^
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    8 B$ r% a& b/ W* }% B$ s7 ~
  491. /////////////////////////////////////////////////////////////////////////////
    & T) q/ A/ u; c- E7 r* s9 w" T
  492. // CRevAppApp initialization$ F/ x1 ]2 o9 d2 Z

  493. " _- b$ f! y1 x! z
  494. BOOL CRevAppApp::InitInstance()5 N+ C2 b: r9 o; f1 q, M4 E5 r# A
  495. {
    4 n0 V" U9 y! D6 R3 D$ G
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    * [0 i1 s. x' i. y- e- x
  497. ) {) t- Z/ B8 s7 i; }) C7 c
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);1 u& ]' P. z, O& p* S
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))/ l$ k9 _6 j" v, O' o
  500.   {
      ]. e1 n+ h  A7 I& H' _/ i: i
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");  }1 D& y3 P0 b( I8 A
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    , Z! S  s- K) P3 M
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))& N& s4 ?" k, h1 P( S% x
  504.     {
    ' ]9 I; Q7 K9 y* G
  505.       strcpy(szPath,szPathTarget);
    0 U6 {. \. l( v0 Z% _; y
  506.       SetCurrentDirectory(szPath);
    5 p* D( `! m2 Q- V! e5 O
  507.     }
    ; {$ T$ b: P% D
  508.   }
    3 G' P/ S. f8 w! d2 u. f
  509. #ifdef _DEBUG
    ' z4 \  K: n& h% U
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), n& P  u' d/ {: X9 l9 y
  511. #else
    3 E6 R2 v9 S9 i: `
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ D! z, f5 D/ _: N: l: Y6 s* u/ C
  513. #endif
    $ Y. q. L3 `  C6 _
  514.   {
    ) @' w- p/ V+ W0 j
  515.     char tempFileName[MAX_PATH];
      ?6 W' K0 j4 P5 }* Y5 a
  516.     strcpy(tempFileName,szPathSource);8 e0 i' f- w$ J0 v  {% J) [/ ?
  517.     tempFileName[strlen(szPathSource)-12]=0;- u; }$ r7 y. ~2 r# f5 B, [
  518.     strcat(tempFileName,"\\$CSUpdate.exe");6 S- [  @; \8 B) J* f" w% c
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    - c4 b! P: i8 p2 I
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + d/ h& U& ~1 |7 C, B: j
  521.     return TRUE;$ c: I9 x1 D/ z
  522.   }5 k- `+ a. h0 v7 d# Y  \2 K4 c
  523.   // Nuke 0118: Delete run.exe
    $ E/ b1 F' S. ^, M
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );) H7 k6 Q' }. V8 M; r
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    - A& [$ E/ A, E' O: V
  526.   if(!ReadCfgFile("Config.ini"))
    " |% j- i" H( j' r# T6 i+ p
  527.   {/ C7 Q7 ?1 z* B0 h
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    $ U, a" d- w- c" ]4 z1 b6 z/ G
  529.     return TRUE;3 Q! I. k1 W5 N5 i$ ~
  530.   }& Q" Y# @$ a- I# |% N. B
  531.   HANDLE mutex;
    , B3 l" x* a2 ]# l
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))* k+ d1 n! h4 T% c& z' B
  533.   {6 l9 l- M2 M! _
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)3 m( `  z5 Z2 H, t$ j2 |5 i1 z
  535.     {
    2 N& v7 W6 W( N1 x
  536.       CloseHandle(mutex);4 G  G. y7 b5 R* d. c0 P
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    6 [# m  q4 R: ]+ v1 s5 p
  538.       return TRUE;/ d6 c7 [/ f6 {* k1 _
  539.     }- W* K) I+ Z# ~. P' Y* p
  540.   }  ( ~5 N' l2 g7 u0 G
  541.   CloseHandle(mutex);$ X* D7 A- a& q: E
  542. 8 ]. \+ Q' q$ X" i: }% X
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);7 V5 n9 K* i! T2 Y9 D  m" K

  544. $ ^! V8 O& u, t0 Y; j% g
  545.         AfxEnableControlContainer();; J: w1 S! C/ `2 M4 ?3 W$ D) R! B

  546. / Y9 N  ?. q" |
  547.   bCanUpdate=FALSE;+ X& R6 K- |: q0 w( V
  548.   dwStartUpSteps=1;# Q/ q7 g& }  y* ^8 m
  549.   dwProgramState=AP_NOTHING;- }) S' f9 c( x3 d. R# R
  550. # D& ?/ X4 E, _% b8 x8 k; E
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
      x/ K$ C( I9 n. \# X

  552. % F  I$ a7 h$ n! R  R
  553.         // Standard initialization+ Z5 b5 v" n; X8 v* w
  554.         // If you are not using these features and wish to reduce the size
    5 c. Q3 @* C4 B
  555.         //  of your final executable, you should remove from the following
    ! ?# l/ u0 z3 h' h) J: f' v
  556.         //  the specific initialization routines you do not need.$ ~7 O* T( t0 A! u' J
  557.   w% d$ R1 K% P$ R, g5 F
  558. #ifdef _AFXDLL) Z% L/ i8 Z( q  {
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 V$ J; |2 s9 v+ C. u3 {. s  g6 n
  560. #else
      Q7 ?8 F+ \6 [+ s: O. D7 X% D/ t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically- V& X8 d2 R; P5 u8 t, B, T9 a
  562. #endif8 u! |2 p9 F  z' g" |
  563. : V: [3 T4 q7 d5 w3 O
  564.   dlg=new CRevAppDlg;
    * I, r) Q1 p4 D* w2 l
  565.   dlg->Create(IDD_REVAPP_DIALOG);2 d7 H, T" q/ P) I1 a' h' ~
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    3 Y6 T& z2 B+ Z/ o$ b& c
  567.   m_pMainWnd=dlg;0 G( `. k  H+ M, x
  568. # I+ u( O0 s. X; l
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);! O) \: B2 B( B5 D  }, a

  570. 6 v' O- R+ Q$ T! n4 ^& ]
  571. //  GdiplusStartupInput gdiplusStartupInput;4 d+ R; ?; {8 z3 Z% L
  572. //  ULONG_PTR gdiplusToken;6 w  j; \: G! c+ d3 `. Q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);; V8 _$ q) B1 T, ~& e0 C
  574. " P' b* l1 W5 w; y5 w- u, @
  575. //        CRevAppDlg dlg;5 D  `, t% A# y7 c) i# J; s1 g4 @7 Q
  576. //        int nResponse = dlg.DoModal();8 @  R* [2 a( t. {
  577. //        if (nResponse == IDOK)
    $ `* L# v& b$ H( I3 n# k5 ~- l
  578. //        {
    - @, j. g3 ?! f; @
  579. //                // TODO: Place code here to handle when the dialog is
    ; I0 N( I# Z  L# F1 o% P
  580. //                //  dismissed with OK
    ) |8 D8 s) [9 u. s# L
  581. //        }
    , I: |5 E7 ^  x" K
  582. //        else if (nResponse == IDCANCEL)( [6 P" ~0 E) W& k; Z* C; K9 a0 S
  583. //        {
    # m$ L, r4 g8 I) ]9 F1 O9 x6 f6 m# u; a
  584. //                // TODO: Place code here to handle when the dialog is# `( ^- I$ G- N2 K( D" i4 H
  585. //                //  dismissed with Cancel
    , y4 s" p2 m9 A( S  H2 Y- r
  586. //        }7 q! g% U# [$ a# U! Z+ J5 I

  587. ! Q$ z+ h5 L% i5 x
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    : q5 i. `) w, ]: e
  589.         //  application, rather than start the application's message pump.
    . t* \/ I" p1 L; Z( z7 t; n5 r
  590.         return TRUE;
    2 o, d" a! o6 d' M
  591. }8 f2 Y+ T! C' G$ H
  592. 9 c) o" y) _# d2 a$ j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    + K( H/ Q# U" Z2 }4 M+ O  ]
  594. {5 h' {  ^) _8 |% N' E4 f
  595.   int i;1 _7 s/ ]  F2 A
  596.   char *szRet;
    . J) B7 K+ d2 {) q5 w* L# m

  597. 4 m1 T0 [3 j( f( u
  598.   if(pSource) { itoken=0; sztoken=pSource; }2 C2 p# w5 r+ A9 m9 P7 G- L
  599.   if(sztoken)1 V5 q5 h5 b- N4 ?9 k
  600.   {" {5 p, Y6 G6 I: f, \5 W9 E: Y
  601.     szRet=&sztoken[itoken];
    & C, {$ ~+ j, B2 g) A1 C
  602.     while(sztoken[itoken])
    2 U7 m) s* y  K0 @: O" F" T
  603.     {0 G9 x0 l% C% p( s- h  ?; K
  604.       for(i=0;i<(int)strlen(token);i++)$ m9 [, b' G& l9 A0 M" ~/ U7 f
  605.       {
    * u8 }$ U, I* P8 L7 v7 t
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    3 q6 {. E; `0 U' l! x: p. R, N) @4 t9 [( ?
  607.         {
    8 \' L" u! x8 N
  608.           sztoken[itoken++]=0;- b, u3 _1 o3 v( B' {/ p
  609.           sztoken[itoken++]=0;- }; e( F# v* ?2 u
  610.           return szRet;
      T6 M3 l) }: e8 G9 S. t. T" b
  611.         }
    * Y1 u7 A' v! J5 Z5 F4 m
  612.       }+ u! H0 @2 r. A7 w4 o' C
  613.       itoken++;* x1 N3 d; F9 L1 ?* _; k# c
  614.     }
    ( y3 X  R* \$ {$ p& R( R
  615.   }3 g1 X4 n2 u) F3 a8 Z3 e* k7 x
  616.   return NULL;( d# g9 t5 ~- [; t( m& a  \2 c; {
  617. }% a5 L$ D) y7 T; Z" Q

  618. 5 j& X3 O- Y  o% \3 O; @% ?6 ?
  619. void ProcessProc(long Total,long Current)
    ! V5 G% L7 C) z
  620. {
    ! d* m; i& I. ?4 Z; B$ a1 d
  621.         MSG msg;
    , r; ]8 W1 e4 t) @7 g: U
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    , z) G8 w3 h* |# f+ _. ~8 N
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    + u! h9 Q' d; A8 U
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 o! z5 v6 ?5 e. y9 @
  625.         {% @- T9 n5 ]+ c" B
  626.                 if(!GetMessage(&msg,NULL,0,0))+ Z( ?$ i; w/ f, Z
  627.                 {
    . Z- |7 l$ d. M1 I+ a( Q
  628.                         return;
    % u! `1 K* c. o
  629.                 }
    7 B; |) r9 ^7 C
  630.                 TranslateMessage(&msg);
    + h8 A+ I# R  D( t$ n/ a
  631.                 DispatchMessage(&msg);
    % `5 \7 Y1 w7 g3 R6 p( f+ ~
  632.         }        - \0 R& V$ q3 k% T" `0 y2 I
  633. }
    ! b* m6 R2 \6 D; x/ l3 {9 R
  634. 8 _: A9 z3 _8 p* O
  635. BOOL bFirstChar=TRUE;
    ' h+ w# w1 \) U- T! M, c
  636. 7 {: ]% b: Y3 z# C3 l" A2 }
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    " j, b# U* d* ?: T! S2 h
  638. {# G( T% D4 g2 \
  639.         // TODO: Add your specialized code here and/or call the base class( B" O% c$ g: r/ R6 f, S
  640.   switch(dwProgramState)  P/ p3 d: v. b7 p2 v
  641.   {
    9 R$ ~) N. K( t6 m2 a8 D
  642.   case AP_NOTHING:
    + T/ x2 @4 P. i3 h$ H5 B5 b+ f
  643.     switch(dwStartUpSteps)
    + Q: _5 a1 a7 m; y8 ~6 |
  644.     {
    4 ^; c! [8 r: K  U3 n0 D% V
  645.     case 1:" h& W( x( f$ l  v  b) f, V" V
  646.       {8 I! m2 X: n9 l& A$ e
  647.         int i;
    ' U: _+ d7 y# _& `! `
  648.         CDC *pCDC=dlg->GetDC();
    3 f+ m+ T6 j( u2 k0 n" f9 m( t
  649.         HDC hdcwnd=pCDC->m_hDC;
    / t  [, e) y( C6 ?+ k
  650. //        Graphics graphics(hdcwnd);
    ; J; s8 {( A- _
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");7 y3 t4 i8 m+ S# b
  652. //        INT iWidth=bitmap.GetWidth();
    " w2 ?9 }- u8 t! B$ ~
  653. //        INT iHeight=bitmap.GetHeight();1 ?9 r* |. v9 D6 S
  654. //        Color color,colorTemp;2 P  q, V+ b3 C4 X. u% D% F  i
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    1 ~$ U# r2 U6 X/ z) l. A9 _" j
  656. //        {
    4 B; r- n* W1 x: e. N8 o
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)7 S4 [1 D+ S5 H2 e) }
  658. //          {
    ' N4 v7 e8 |4 J( p$ T
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    " R8 ~$ p4 q9 f
  660. //            colorTemp.SetValue(color.MakeARGB(
    ) t  W$ x* P2 E9 l
  661. //              (BYTE)(255*iColumn/iWidth),# x: C  z1 T. L' p& q  Q3 ~
  662. //              color.GetRed(),
    . n! a9 s0 }( B# m# ?+ h
  663. //              color.GetGreen(),  H8 d! q5 ?6 v: D, m  l
  664. //              color.GetBlue()));" O* D# C% T2 _% e8 e0 P, }: i0 P
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);0 Z0 p' t5 @# |
  666. //          }
    3 H$ W6 `9 o& v5 u% W5 S2 t
  667. //        }
    5 ~( u# m0 r% ?8 a2 m
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    0 T5 t5 |9 A; Q( @. w' V  u5 s
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 K$ B+ p: B6 K' T! S
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ! m0 G" t  f% c( |! D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ O6 B5 h: c3 J8 k. d) c/ M
  672.         for(i=0;i<240;i+=8)3 `/ l, m3 S" K0 W% X
  673.         {
    ; i+ Z( s" T  m  E* v
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) {' e8 _4 S( V8 m# Y5 v, U( Q( b1 m/ k0 [
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % i$ m& r  p0 k3 b! C: \6 V6 {! i
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- w& T2 I- U4 N2 E" f% a/ Z# K' N
  677.           Sleep(33);+ M, ]1 i1 o& d7 i7 A6 l7 @
  678.         }
    ) }% @& W4 R  @+ K7 i: m
  679.         Sleep(1000);5 B% v! _$ C" u, ?
  680.         for(i=240;i>0;i-=8)
    * g" B( O2 \3 e
  681.         {
    5 ~8 f5 S7 r; Y. K$ a
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( S/ G. H, a) e& a- l0 Q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # u- P9 M% x  ^
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 R9 G2 C( ~& H( c
  685.           Sleep(33);
    ! H( R7 z; d9 ]$ ~$ p* d1 M
  686.         }9 \  M& q7 D, c6 l- j' a. {: y3 Z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);+ ]7 K+ W# b% L8 a* u
  688.         dlg->ReleaseDC(pCDC);
    ! M' R  x  I5 P+ A) h* n
  689.         DeleteDC(hdctar);
    / r8 l# i$ s6 g: W2 @
  690.         DeleteDC(hdcsrc);( Q: i9 O2 b' V- a" O
  691.         DeleteDC(hdcorg);
    ( k6 u1 Z2 w6 V2 ?5 U" R2 s' o
  692.       }. V4 E& d" |8 A, p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);4 D2 m# `+ s8 k7 C: _7 n# G
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 D1 G1 f# `- J' u1 J
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");7 t! k' F  n( M' {
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( s- L: `4 f! Y0 D. B1 s
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, G- j% k' V2 J9 H
  698.       if(!Dn.Connected())+ a2 d/ [8 P# e9 B% Z: z. A
  699.       {
    2 z2 g6 T% n3 S1 O; f( x
  700.         dwTotalFiles=1;3 U8 V: l& _$ E$ B
  701.         dwDownLoaded=0;
    & q7 k8 d/ M" @5 t, f8 b8 B$ Q
  702.         bSilentStep=TRUE;
    ) u* ?* \/ v* U% }( C$ Y! O
  703.         bCompressed=FALSE;
    " A9 n$ B6 Y$ \9 s7 y
  704.         strExtLocal.Empty();
    + h$ x5 r' O5 F, A
  705.         strFullName="readme.txt";
    & G8 }$ Q! F4 b  F8 U
  706.         dwProgramState=AP_CONNECT;
    % t5 a: N7 ^0 u1 L1 r/ C; A
  707.       }
    # g, p5 I3 e& h* h( d
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    4 ?7 {& e5 s* ]1 L; |% k4 |1 z
  709.       dwStartUpSteps=2;7 C) J" ]& ^' {& d! F' G- ]9 G
  710.       break;+ ^2 ]. f* j6 \/ }# g
  711.     case 2:
    * ~7 L& T! ?9 V# N7 q$ N( A
  712.       {6 Z* V+ E7 O9 p: a+ J
  713.         int iEOF;" `8 D) ~" V# W5 K" y  Z7 W
  714.         FILE *fp;
    $ ?' p- y/ X0 l" c$ Z' H, {) l
  715.         char szString[512];7 j; `! N, s+ Z( n( D+ p* i, ~
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ Q5 w+ A. V8 b/ D
  717.         if(fp)0 g- N+ N) @) }0 H3 L
  718.         {
    % L# e  B# H9 j8 V7 s
  719.           do
    2 ]2 W  y! N9 W! r4 e" w1 ^
  720.           {0 X# _; _2 m2 h
  721.             iEOF=fscanf(fp,"%s",szString);5 a4 p1 V; D* X; H" x& V
  722.             if(strlen(szString))
    % X2 X; W. o4 m- b
  723.             {
    ! k% P' W$ D; J/ R3 t6 [
  724.               if(bFirstChar)
    6 Y, G# @9 o7 {1 I
  725.               {
    + s  f5 a, P7 g- w5 ]4 F9 O
  726.                 bFirstChar=FALSE;
      y7 L/ Z( c3 j$ J  e
  727.                 bConnectIsBig5=FALSE;- r! o4 i  }* Y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    4 s& z& @0 E9 L* F( y
  729.               }
    / C7 z( K8 R1 B  C: l5 t  X
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));( Q2 v+ _6 V0 d7 H) M- x; ~; R
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));( ?: y) l- }+ D9 w0 d" A% B
  732.               dlg->m_ListText.AddString(szString);+ {& Y4 G2 w  z* x8 \8 N3 M
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 ^* j5 y1 H: G3 @$ ^- [$ I* K% G
  734.               *szString=0;' I0 I$ J& X7 w$ N) c8 t
  735.             }3 s/ l* M6 m4 k9 K. \5 t: X
  736.           } while(iEOF!=EOF);
    # s0 F0 W1 B2 h6 T( l/ I& v& `6 e' q
  737.           fclose(fp);) r+ _$ }8 D/ O5 y- v
  738.           unlink(".\\DownLoad\\readme.txt");
    ' ~4 F; F0 Q3 V
  739.           dwStartUpSteps=3;' S* G  G4 ~, B% |% \
  740.         }
    8 G$ K$ ^) [/ L) |' P
  741.       }: k: _* T: |8 K% B, i3 f  k, V/ y8 c
  742.       break;- R0 H% Y3 u& f  Z5 m) R3 Y+ R8 d* C
  743.     case 3:
    7 G9 @+ W" d# x3 r
  744.       if(!Dn.Connected())
    $ f- G6 d: k* m7 P
  745.       {% N5 F$ z" F' p$ v0 I' c8 R
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  Z1 \; _: p6 b5 B  j3 W
  747.         dwTotalFiles=1;' ^, `% S1 b$ L/ h( p5 i. D
  748.         dwDownLoaded=0;: P( Z6 L9 s) N. j  t' n
  749.         bSilentStep=TRUE;
    ! M6 u% a! R8 G) n! K
  750.         bCompressed=FALSE;
    ; w+ |1 S4 ^/ j5 r5 s' F7 I
  751.         strExtLocal.Empty();
    7 D; g2 I' d2 e
  752.         strFullName="checkversion.txt";8 u3 W9 G' u0 a) n( d
  753.         dwProgramState=AP_CONNECT;" m- m. C0 G: f: |- D; l* @' t5 k
  754.       }
    " q, t9 l; Z9 T' @7 V8 [
  755.       dwStartUpSteps=4;3 z% E2 ^9 S1 G) X$ x8 D
  756.       break;1 P( ]. j) T: |  c# F% x% d6 P
  757.     case 4:
    ! [1 o" Z7 y  W0 B! {. p# f5 H
  758.       {
    : H- A: H, O# V
  759.         FILE *fp;
    % U3 t% x* ?8 ?9 I" g6 `* k. u
  760.         char szString1[128];
    0 b  I" C1 A+ K( H0 q
  761.         char szString2[128];
    + A) E) `, k- R: S
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ) c6 e8 x+ g1 `: N: }6 P
  763.         if(fp)* N8 r* ^1 p: @7 b0 c' [* O; c  b
  764.         {9 }  v. |9 J; v+ f
  765.           fscanf(fp,"%s",szString1);
    ( o0 u) D# g% T' a7 ^3 c
  766.           fclose(fp);0 ^: F; j" o) S7 T  R
  767.           fCheckVersion=atof(szString1);
    ( W3 a' b# d/ [% i& z
  768.           fp=fopen(".\\checkversion.dat","r");& m' H9 y3 @) ]7 N- ^% L3 g
  769.           if(fp)
    # m7 O' H6 X* a1 U. p* K
  770.           {
    / C- o6 v* z# B5 a
  771.             fscanf(fp,"%s",szString2);
    * r. y7 ^6 y2 D; I2 w: V# b3 u
  772.             fclose(fp);9 I6 P1 A' N; ]- @& ?. M9 A
  773.             if(atof(szString1)!=atof(szString2))
    9 }6 ~9 F: ?3 \8 C* ]2 [1 m; E, X7 q
  774.             {2 l; V  r7 z/ X% }2 t5 H
  775.               if(!Dn.Connected())
    ' e2 q+ M/ E- {- j. Y3 O
  776.               {
    + N1 v0 K( p3 L8 J0 b
  777.                 bFirstUpdate=TRUE;, _& d& O5 @! ^, ~  W
  778.                 dwTotalFiles=1;9 ]5 Q7 c! ^6 f1 N
  779.                 dwDownLoaded=0;) a/ Y/ s4 |8 D2 `
  780.                 bSilentStep=FALSE;8 e! d5 O8 n( A8 r# o& h
  781.                 bCompressed=TRUE;6 q6 M7 L$ j* U
  782.                 strExtLocal=".\\DownLoad\";0 y7 I! f0 S" |7 ~
  783.                 strFullName="update.txt";! F, l2 w" i" }
  784.                 dwProgramState=AP_CONNECT;
    & _$ o2 {3 Q+ t# W! e
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % a/ F# H1 M$ X$ L. r' w9 a' k
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    . w" k# \* o- i
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . W4 }+ I$ }+ Y! n$ ?
  788. 1 t3 z& N) X" ?8 u" I
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 h7 H4 d& c8 f
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    $ X8 @- R% W2 c( Q: H
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    7 T& O1 P, y; Q& [& a" D2 m( k- _
  792.                 {' i8 t4 G( T2 ?& A* L
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");3 D; A" p8 [( o% c# N. h2 B/ M/ E0 a: b
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");9 p. {! r) t) O2 ?* e7 B; M: O& C
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    - x: F0 X8 j) S; h0 S7 a
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ f( G- ?7 r$ d
  797. $ \+ q8 J+ e2 A9 C! t! T- q
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) C6 F. L9 P3 W9 L
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! ^) {3 ]$ D5 ]2 t9 Y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 `: ~0 t% H' M) ^) R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! N; e8 M; j4 m9 w3 F+ I9 N
  802.                 }% ~7 n- q* k4 ^3 O- J1 ]
  803.                 dwStartUpSteps=5;2 J) `/ F( d# ]- R
  804.               }
    0 P! a) s/ D/ g6 B9 {' P# I
  805.             }
    5 ~. d& N- a6 C0 ~
  806.             else" H" y5 ~/ {5 o( d* x
  807.             {
    " x3 {4 j8 x: n" }% V. U
  808.               unlink(".\\DownLoad\\checkversion.txt");$ f: V2 ?% |7 W+ W
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! \$ P, ~1 F$ f+ s6 T
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 }' _. D) h! @& R
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");6 ~8 [* ^/ z2 D; B- \* B/ _
  812. 2 q( j$ n, b1 x8 ~& Z" V8 W3 M
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& [  z, I. c5 Q8 |( _, B
  814.               dwStartUpSteps=99;0 a) _* Q; c0 l
  815.               bFinishUpdated=TRUE;! h! o% I9 \2 V/ B6 o$ t
  816.               bCanUpdate=TRUE;
    3 L. L: B$ t; B
  817.             }' P% f% U2 Z  ~; L# P" r9 S
  818.           }; u" Y+ c4 f5 s/ |- c6 {
  819.           else8 i1 L5 q. A# l7 q7 m
  820.           {$ r4 z: x: {9 Q: s* A
  821.             if(!Dn.Connected())
    % X) g. f# O1 C0 X
  822.             {
      u9 h7 u9 O- b8 E" S
  823.               bFirstUpdate=TRUE;
    + C- O3 [' A. _4 k
  824.               dwTotalFiles=1;0 g$ q# i$ I- O9 H
  825.               dwDownLoaded=0;1 ]" z2 n& l9 C9 i. O
  826.               bSilentStep=FALSE;
    : c! g- k4 q8 b$ A( _( M( E' e
  827.               bCompressed=TRUE;
    ) [  V8 q$ c2 u# r8 {" `
  828.               strExtLocal=".\\DownLoad\";% E8 y0 G; v$ T' [4 |
  829.               strFullName="update.txt";
    # z4 o/ g' m; w5 i
  830.               dwProgramState=AP_CONNECT;" h6 X; o: M- B6 n2 K2 ?
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 }8 b" b/ T0 F
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ F& @0 D1 h3 x( \
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");+ i/ W% }/ X7 g- @
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 _3 s9 K. r! b! O+ ?$ h
  835.               unlink(".\\DownLoad\\checkversion.txt");( D5 `1 a5 Y7 z+ f9 r1 e' i- E
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    # `) L9 ?$ L/ |2 L, L
  837.               {
    ; N. N* n  f) K+ n1 M7 j
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    7 V, M# q) n' r, |0 _- ?  T8 e0 Q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # d2 u  m0 `' y* t& ]
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    - D5 Z( E; E9 {* L, T1 g- }9 e! ~
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! a5 Z+ e' o. G& C
  842.                
    " U: ~3 j9 R2 k
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    6 U/ _4 M# i& d  n, ]& d
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 ?% n4 \0 R! y! C0 ?9 X' F
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");5 s) F5 {1 f% g$ l% g* d3 D3 F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- @% C, N- U0 ]6 s' x# p
  847.               }+ h8 o7 l' y# _6 C+ r* V, q& X
  848.               dwStartUpSteps=5;
    / ]4 Q; K7 d; }6 I* Y; o1 G
  849.             }
    % I$ u. {9 ^3 w1 X: D& o
  850.           }
    4 {6 [8 f! Y6 {. B/ ~( `" @2 {
  851.         }
    / ?' f; V9 r$ w" F7 m
  852.         else5 e, E5 W% {5 e3 b
  853.         {
    5 g' |" b6 @& q  U' W. @
  854.           dwStartUpSteps=3;- O' Z6 I* ?; [- {$ T0 e
  855.         }
    % a% ?" l6 e1 z% Q9 \
  856.       }8 _) ~- s/ l) A$ u8 q
  857.       break;
    # i$ J7 k7 P7 |7 c) l% W+ x
  858.     case 5:
    ' @. ~* O) z( g- l7 W/ s
  859.       {- p' H  g* @' s; s8 S
  860.         if(GetFileAttributes("Wsa.zip" )!=-1), K! C; y* q% l7 w
  861.         {2 P  M7 {6 C& R: l+ K
  862.           int opt_overwrite=1;
    / x6 b( |3 j: @/ V  R
  863.           int opt_do_extract_withoutpath=0;2 O  y- e- q  K# z6 G$ O
  864.           unzFile uf=NULL;# A2 N1 b4 n/ |7 r) e, e

  865. 4 ?7 ^. f4 {! T2 H0 T8 j' Y2 @
  866.           uf=unzOpen("Wsa.zip");
    ' v0 v! @* t7 d3 r2 ~0 D
  867.           if(uf)
    * w( a1 f% @5 e
  868.           {
    : b3 T1 K" U2 m* ]
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    8 p' z9 k  L- q7 c. p# k
  870.             unzClose(uf);* r2 K+ ^; @; a3 a5 M
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    3 [0 @1 R# V# p( u
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ' _9 `% X1 E' }' z& L5 g  h
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");: n5 u$ P& |4 S- K8 R2 r
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; h; N- d6 Q  t4 s/ i/ f$ ]
  875.           }1 m, ?/ T" M( M
  876.           DeleteFile("Wsa.zip" );/ U# z0 l* G. j; k2 V
  877.         }, w- z5 b" r9 Z
  878. 3 ^# J" n+ ]* J5 `
  879.         if(CheckLocalVersion())
      ^9 A" {/ r+ M/ h
  880.         {
    7 \5 r5 C! |5 a: `4 S! A
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    - D8 f! u* z3 Q+ L! L+ a+ k
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");1 ?4 I  {4 ^1 }
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ( w1 v- d4 g5 l/ s; f1 |* I
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 E$ d' a$ W* k- _* V2 e
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);% x& Y, C0 z$ Q0 d2 i9 K1 X! t
  886.           dwStartUpSteps=99;
    ' Y& ~, S7 q$ W- c+ K; ]
  887.         }
      [# @( v! ]9 I5 J$ q; E
  888.         else( }9 t( D' M; {4 b
  889.         {
    ' f; h) z. s4 d" F4 V$ `
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , Y. n- t2 Z- a* |3 d2 K
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");% Z. f  u. E2 u- j6 F. E+ d
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
      l! E3 a6 W. y

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

; p& Z. ~- |' c! t/ R6 \2 p, d2 g, s3 r! i

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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