CSUpdate.exe源代码

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

! a4 }2 n4 A3 V3 P: u! ~' E
  1. / RevApp.cpp : Defines the class behaviors for the application.
    . F9 u0 R& k! q0 y+ u9 M8 c- f' L
  2. //" ?& B8 o$ {: [' @& W
  3. - K  M* b" g6 l$ q  O$ M! F
  4. #include "stdafx.h"6 b3 ~5 b: H7 w  _( M

  5. 6 ]' q/ o+ }" F& d9 v
  6. //#define UNICODE% Z$ _- a3 Y. \  U  S
  7. //#include <gdiplus.h>' ~7 [' L8 R- k0 S6 v; U) s
  8. //using namespace Gdiplus;
    1 f: k7 W7 r2 U
  9. 7 J- d  L, G+ [. h+ [4 R9 t
  10. #include "RevApp.h"# J  j* c/ V/ z, l
  11. #include "RevAppDlg.h"
    - T. G* d# {- D$ T9 U

  12. 7 x3 o. U! t0 L$ [. p+ ]0 W* L
  13. #pragma warning(disable:4786)
    : Y3 i" d8 N0 M5 F
  14. #include <map>! ^$ j0 O2 d0 y& z2 N- o# R2 J7 a
  15. #include <list>
    ; A- j4 Q, s2 c" @7 J9 u+ G) E4 u9 H
  16. #include <direct.h>
    0 W. k% B, d7 `
  17. : i/ J2 s: |  |) L) l: G' z
  18. #ifdef _DEBUG+ R: a7 h" X' W3 M
  19. #define new DEBUG_NEW! {4 N1 [* A) ?9 X. W% g+ e
  20. #undef THIS_FILE  ~9 Y9 i7 K! Z; a8 d1 P5 P
  21. static char THIS_FILE[] = __FILE__;. U, \' \" q2 r8 e: V3 u
  22. #endif$ Q+ K$ \4 V$ p7 @
  23. #include "SkinResDef.h"
    6 j+ p; M5 w! B5 R
  24. #include "ChangeBG.h"# r. x4 }( \  y8 P
  25. #include "AFXINET.H"
    + n& P% V: ~& `
  26. 1 o( V* n+ u: [( _
  27. #define TRADITIONAL_CHINESE 0. x1 s+ {$ P$ m6 ~6 R; c
  28. #define SIMPLIFY_CHINESE 1- [9 `( s- P0 C! H
  29. #define ENGLISH 2! @( [4 k9 E7 A0 I0 ~: O# |
  30. int m_iLanguage = ENGLISH;
    : Y7 _3 r2 e, A; ?
  31. /////////////////////////////////////////////////////////////////////////////% p3 m) z$ R* y1 w* q! x% o
  32. // CRevAppApp7 i* j$ f1 q" ^8 l

  33. & d; @& A) X& p
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ) h% x* A2 y9 B
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    , s; S& ~: A2 `% b, Q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.6 ~9 ?7 Z( U3 [1 E3 m' G
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    + G# h: S% U9 q) _/ U2 Z
  38.         //}}AFX_MSG. r; c+ ~' c2 f' l; G% k+ n
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    % E& ^; k0 p  e9 D
  40. END_MESSAGE_MAP()4 y1 X: w9 B2 W' N, d1 Y# \
  41. 3 L" ]4 W4 N8 w" D' h! Z
  42. /////////////////////////////////////////////////////////////////////////////
    1 `' @4 p0 [* g; L$ P
  43. // CRevAppApp construction9 A% f& p) o& g' a- C8 ^; R' D4 v
  44. + N4 `: l* C" h4 G$ N2 z
  45. CRevAppApp::CRevAppApp()
    1 C  l( \( \% `4 F/ W
  46. {
    ; G6 L. v. B/ |! [8 U& L5 J
  47.         // TODO: add construction code here,2 G9 g) n# _0 }0 d& ^- ]
  48.         // Place all significant initialization in InitInstance& W$ N" r1 j6 U6 p( i) K
  49.   bDisplayIsBig5=FALSE;
      c# q" `! u3 E6 E/ C5 j4 X2 G
  50.   bRestartUpdater=FALSE;, u4 X. d$ s& w. ?
  51.   bFinishUpdated=FALSE;* l% W. [/ T0 h. u
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;, i$ ~; ~  m# c" n2 v3 J
  53.   InitChangeDataBig52GBKS();* W6 p7 a( U$ G) T4 p  A
  54.   InitChangeDataGBKS2Big5();: c8 o* R) U# q) P. H
  55.         //
    7 \+ |- A0 a& {; G4 t* n
  56.         bClickRunExe = FALSE;4 j9 J6 A6 Y) p3 b; Y
  57.         //8 o+ y0 `; V: Q1 Y$ P5 M! q
  58. }
    ) n! v# ]7 S5 Z% _, U; L% g: t
  59. + P3 C) ?* a3 ]1 J: ]% U$ }' g- i" P
  60. CRevAppApp::~CRevAppApp(); Z: b, e" d4 z5 z( v8 e+ R+ A
  61. {6 ]( K& ~% E$ F3 U5 t7 e6 B: D
  62.         // TODO: add construction code here,4 `3 d( r1 L% |& r+ }
  63.         // Place all significant initialization in InitInstance9 X6 [# K  f4 o
  64.   EndChangeData();
    # l# Q  W2 }4 z1 R1 E% u- Y  A
  65. }
    3 u6 \3 W5 V- ^1 n% X0 d
  66. ) w1 U; q' D. I) h2 [
  67. /////////////////////////////////////////////////////////////////////////////
    4 b; u3 G2 ]. e+ \! G+ v3 i
  68. // The one and only CRevAppApp object
    % m% d; K0 A8 h/ ?, Q6 J
  69. % W# _2 i: P/ t; B8 b6 F
  70. CRevAppApp theApp;
    0 h9 H% |& \# N3 C* z" E+ K6 @6 Y
  71. # x' L6 @4 u/ c& p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ) P4 e( W2 z* `) X' U2 f
  73. {
    ; q+ `  g" B2 z  T/ c. [% s0 o
  74.   int iEOF=0;
    ' i% y2 Y6 |' i" t& u$ G8 ]
  75.   char szTempName[MAX_PATH];
    ! |' j- Y+ p- r$ o) j
  76.   *szFileName=0;
    6 d. z2 z6 G+ @- R0 e3 |, K; D  a: s1 k
  77.   iEOF=fscanf(fp,"%s",szTempName);! e0 O' a& D- I  K
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')  ?8 Z$ ?3 n5 U2 d/ R2 e& F
  79.   {
    ! W$ X6 x" R, B! q
  80.     strcpy(szFileName,&szTempName[1]);* v: S0 E' H% I0 Q' ]8 p! j) q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    5 g/ k8 x: O7 M, O8 J* X5 I) c
  82.     {
    1 Q+ A' k- x1 }& I0 F5 s3 n) s! ~: X
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " L( x+ s" N8 ^+ f5 v' F' x
  84.       strcat(szFileName," ");
    8 R8 ?! G; {1 c. P1 N0 s
  85.       strcat(szFileName,szTempName);$ z) o2 U9 i. l% v- f- g+ e0 I
  86.     }
    * }5 ^# Z( j$ x! x
  87.     if(strlen(szFileName)>=1)2 M' T/ [6 ^/ E3 W: G( Y
  88.     {) ~7 [% A4 ^2 `+ \  `; ~4 }% B
  89.       szFileName[strlen(szFileName)-1]=0;5 \4 r( J, W; G$ |$ J* X, i
  90.     }8 W. w: P4 F  h% T
  91.   }
    $ N9 u) r9 x9 H( G
  92.   return szFileName;
    ! g1 y0 K% j* V  }; Q: k" w! b3 \7 i6 a2 v
  93. }
    / c2 f% I" D9 [0 x
  94. ; r5 M7 U8 F4 S  k; a& x7 ?7 R/ u
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ! |4 {, r( J: R7 b
  96. {
    4 o7 ?5 m& H$ h* z: e+ `
  97.   FILE *fp;" X. Y+ @9 I$ S7 J& g
  98.   char *key=NULL;* ^( n. G& s  r! Y
  99.   char version[MAX_PATH];) y1 t8 w; G1 t# F
  100.   LPUPDATEFILE file,olds;) l( O3 k: `1 o; |' @3 a" w
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 r* F/ \/ O" b( m

  102. / H$ `' p" c% l3 R7 }0 I( X- D
  103.   UpdateList.clear();7 G  W0 X( [& f2 t, o  L5 O
  104.   UpdateFile.clear();+ Q% N6 C  ?  e  o# p$ N6 a5 F1 }
  105.   if(GetFileAttributes(filename)==-1) return false;
      A" s$ }7 s% I8 k1 ~1 R
  106.   if(!(fp=fopen(filename,"r"))) return false;
    # o" Z; k4 s0 s6 v3 h
  107.   fscanf(fp,"%s",version);9 r" F. d0 E1 X( t' k1 H, y/ ]: k
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    * _6 {  |/ w3 n' G1 x! H! i4 c
  109.   while(fscanf(fp,"%s",version)!=EOF)
    5 L5 k7 I/ q( D! @
  110.   {
    " w$ k/ c% |' Q( Q9 C! d0 r
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / E% a, D0 S8 \+ r" V
  112.     fscanf(fp,"%s",file->path);
    ) ?* b' V0 i0 K( t0 d
  113.     ReadFileNames(fp,file->file);) r6 ^- p6 b! x  f/ v
  114.     strcpy(file->full,".");7 S% p9 _, Z( p' d0 k. K
  115.     strcat(file->full,file->path);5 H; ]$ p- e/ Q
  116.     strcat(file->full,file->file);  P) ]  o( x! ?2 m& r
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    + h8 o( H; ^. ~- I* O
  118.     {" q+ B( B# F( A: c7 y: O9 Z; c  s8 R
  119.       file->vers=(float)atof(version);
    % t# H8 V. O+ n; G( c
  120.       UpdateList.push_back(file->full);
    1 t/ u; t% K; {- {3 a
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));. I+ S" g9 w7 ?- Z2 n5 t
  122.     }. s" M: _1 z$ h. O* ^% [# {
  123.     else
    " I6 H( G, e; ?4 r2 Q1 P+ ~3 x  C
  124.     {
    . M0 j+ t. \& G2 v
  125.       olds=(*p).second;
    ! b1 j/ t8 {* d9 m+ Z2 h2 Q: i0 S- k
  126.       if(olds->vers<(float)atof(version))' E. R% |8 ]7 _3 y( F) M
  127.       {
    0 D& D2 }  S6 m( B2 b
  128.         olds->vers=(float)atof(version);% [7 w0 ^! s/ r3 o# r/ F6 Y% {% m4 ]
  129.       }
    ! r4 h2 t! z$ J, ?6 J) r: \
  130.       free(file);* M& V2 L- e8 N+ d/ @
  131.     }
    + X7 c1 x8 d5 ]3 n- j- S
  132.   }: ?/ u1 B. J$ c# K3 I
  133.   fclose(fp);5 R: Y9 F3 W( n1 ^$ F! q
  134.   return true;
    2 Q/ \# ]2 M% Q9 o0 H# }6 T( u
  135. }* l1 Y0 e' b5 R

  136. # _# v8 K$ h) M; \# H5 _
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)) ?. z% }) j& P3 I' f8 C3 W0 C
  138. {
    ! K! b+ J+ X; y& M4 w7 `3 i
  139.   TCHAR  szFull[MAX_PATH];
    3 T5 ^1 s, s7 ^8 {# e( b
  140.   TCHAR *token,*inter;- ~( Y- t; d2 {$ ~7 ^6 k8 d; }- {$ R
  141.   *szPath=0;
    8 l8 r) z" `4 t( K6 A6 _- U
  142.   strcpy(szFull,szFullPath);
    # C1 A; E6 M5 s7 W. h
  143.   token=strtok(szFull,"\\/");7 u/ \: L1 i9 M% {  N' I, K
  144.   inter=token;
    " O* V$ r2 Y3 Q! T8 P" d# w1 p
  145.   while(token=strtok(NULL,"\\/"))
    7 U6 _4 L7 _( U  u2 W
  146.   {
    2 k+ d9 ~4 Q1 @* i
  147.     strcat(szPath,inter);
    : ~1 T. Y7 z2 D3 x' H
  148.     strcat(szPath,"\");; b1 D: X1 `" m" C. c) r: H
  149.     inter=token;
    # V# Q; K4 x8 [! w% x( }
  150.   }9 [: [5 o+ P, x% G' b, L
  151.   return strlen(szPath);
    0 z: }5 H8 S6 ?. ^- X
  152. }# r) }: Q/ {' F! ?& M1 A
  153. 4 o/ [/ @4 b$ {: a
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ! E3 U" q+ a1 s, h/ {& |
  155. {, [5 K( Z4 D# I6 E2 G: M7 G
  156.   DWORD attrib=GetFileAttributes(Target);/ `2 d6 C3 M, w: D
  157.   if(attrib!=-1)
    9 C) N# g+ N# p
  158.   {3 P# N+ i4 `' R* A
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    3 ]7 ~! M5 \2 j  f3 @! h
  160.     {* Q5 _# A8 {9 ~, l# q
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    % t6 i8 a) ]) H7 x0 \: q
  162.       SetFileAttributes(Target,attrib);1 i0 N7 C/ V% s1 n4 K
  163.     }
    & G! h1 n3 K: D
  164.   }
    * W8 p- C2 v  y5 o$ y$ ]% Q8 B: x$ r
  165.   CopyFile(Source,Target,Erase);1 x8 M- r4 c8 h, J& j
  166. }
    + z5 c! ]* F- j. l

  167. ' r- i) {  f0 p; E; ]- K" g
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    3 N! l5 G: \3 {+ w4 _& N
  169. {, M& Z8 q6 V4 j
  170.      FILE *fp;
    4 F' b, f5 ^9 ^0 S
  171.      char  szBuffer[8192];5 n; q* q, y7 D% l8 M+ {; f; K
  172.   va_list  argptr;. j+ G, v) F- ?: R
  173. + S  ^  b- B% l7 z+ w
  174.         va_start(argptr,message);
    , h8 h) q5 s" L$ j! ~
  175.         vsprintf(szBuffer,message,argptr);
    9 g& `* K$ E3 W
  176.         va_end(argptr);
    ) ?; c* J# H; Q0 L5 F% h
  177.   fp=fopen(FileName,"a");3 g) i! E9 z! n; a
  178.   if(fp)  T4 g; k6 B. u! h! u! D
  179.   {& o3 s1 S: S- N! V6 Z  b0 [! N
  180.     fprintf(fp,szBuffer);/ s0 O* O; J* N8 S+ _
  181.     fclose(fp);
    8 U& @% \( K4 X' r' X
  182.           _flushall();: ]3 f. z' e  n7 Z1 q& p
  183.   }% O* \1 r$ ^) [$ P4 N2 |- E: ^
  184. }
    0 Y+ t: `6 z; t$ c# d* [6 H: h/ w

  185. 4 M6 w4 |# P0 A! I* ^" [
  186. BOOL CRevAppApp::Fclearf(char *FileName)/ S. \+ S4 D' f! j
  187. {
    / z% a% k6 I- L1 w- o+ Y
  188.      FILE *fp;7 S; Z/ I! {- ~( U
  189.     DWORD  attrib;* K6 e0 L) u0 h
  190.   attrib=GetFileAttributes(FileName);
    9 R* r+ s6 y3 T5 K
  191.   if(attrib!=-1)& o9 @) A- ~& _4 W) ^! s
  192.   {
    : _3 E9 Y9 i' N" h9 w. l1 x2 F
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    1 Q  n/ y7 C* R1 I+ q+ A
  194.     if(!SetFileAttributes(FileName,attrib))
    ; T+ `6 M2 Q: J  k
  195.     {! Q+ L4 j- ]- X% o* _: b' E; t0 }. L
  196.       return FALSE;
    0 i7 q" |9 [/ Q) M
  197.     }
    - w" g# C) P; a* G6 N* q$ ^
  198.   }
    2 b  s) x) ^) J/ {
  199.   fp=fopen(FileName,"wb");( u, u. \4 |5 d' q* w
  200.   if(fp)# p1 F7 `; R' {4 O7 M1 V
  201.   {
    ' e% }/ C) P6 P2 r  D
  202.     fclose(fp);5 B. U' U: [; F  r) S4 L
  203.   }
    . e+ Z1 ~, C8 v; J+ A1 h, B
  204.   return TRUE;
    ) k" V: F( c) M! P+ M
  205. }/ o) f2 f, I) d& w" `  _
  206. & p, Y7 j! {* v
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    5 U* o6 s9 \) b: x
  208. {
    0 f" R/ n9 C: k1 D
  209.   char filename[MAX_PATH];3 l; N5 ~% ~! R" u  ]3 \6 h- t  N  V
  210.   LPUPDATEFILE file,olds;4 w7 j" }7 F  }) W9 e! Y
  211.   std::map<int,CString>::iterator i;
    / n# |+ t" u: k% [' v
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . `3 @; f" Q, B
  213.   std::list<CString>::iterator l;/ g: F8 |: M4 L& T4 q' T, d
  214. , h" q. g; e* m. t! T  c8 j
  215.   if(bFirstUpdate)2 J1 h$ G+ i9 i, C* U' b
  216.   {
    0 ~! j1 f$ t( V0 M0 P$ o
  217.     dwCurrFile=0;5 D" w+ \( y% ~. [
  218.     bFirstUpdate=FALSE;
    1 c; R; G! v4 w; x4 s
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # W9 U: ]5 P2 I; q( @) L. W+ [
  220.     {
    / j8 v8 e7 D- z$ h/ I+ a, E( @! H
  221.       dwTotalFiles=UpdateLocal.size();
    * G9 Z% v" U" p9 s8 M( }* C
  222.       dwDownLoaded=0;
    # v6 [! V" V( V( A8 K2 u3 ~- E
  223.       bSilentStep=FALSE;
    2 \' K/ ^+ V7 S- |0 x6 s$ Y6 D/ y; z
  224.       bCompressed=TRUE;
    ' I9 D% B9 p  F# W
  225.       strExtLocal.Empty();
    . d& h5 |9 r9 \0 N+ L% K
  226.       strFullName=(*i).second;# f$ F/ \1 ^* |+ l% I
  227.       dwProgramState=AP_CONNECT;4 n7 K9 _! I; E( V8 f* J7 G! f# `
  228.       return TRUE;
    ' C( R$ _/ }! a% c
  229.     }
    , r  ^( ]  o- |0 ^* J) p
  230.   }
    + Y$ V1 k0 T& _- a, k
  231.   else if(bRestartUpdater==FALSE)
    # P% G9 o& I3 V$ Q* L1 h
  232.   {3 R; w, L# G( f5 h2 N$ a$ G  w
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 e2 d+ d: }; s$ B0 c# i* D
  234.     {' {, d7 X$ X# R3 R! s3 m1 n. k
  235.       file=(*p).second;
    % @* {( d. U0 O3 E) W: o, m
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())  y# u5 p3 D# ^6 g4 v
  237.       {: |: q- @6 r. B( f  t1 K
  238.         olds=(*p).second;
    , C3 V' ]$ _7 F; b- N7 K6 ~& P
  239.         olds->vers=file->vers;
    9 h: _1 |6 `7 n5 @4 y/ H
  240.       }
    0 h4 [6 I% t& y" G9 J
  241.       else
    # ~6 ^( h, s  `" O7 d, s& P
  242.       {) t% W" c3 ~, Z0 I5 f" H. w
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ K9 J; M7 j: |
  244.         memcpy(olds,file,sizeof(UPDATEFILE));4 l3 l2 e, t4 Q% r
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    5 `8 G6 @1 v& @$ @/ C
  246.       }
    6 M7 S: }, ?0 w7 x
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- _* k) ]/ Z0 Y  S& O% w
  248.       sprintf(filename,"(%s)",file->file);
    + j0 P. \! z, {: x
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : G; b  J5 ^5 m' h% V
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }2 d' x, {4 `% w1 R# |3 i
  251.     }* r; F4 m; W: k' u8 T9 w4 L* H' i
  252.     dwCurrFile++;
    / i6 s1 i# T" [/ _3 `6 d
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 I7 G- f% B+ C5 }# ^, @
  254.     {2 U$ ^: X: |& A; F. u  @
  255.       bSilentStep=FALSE;
    ) ?4 F0 K2 q/ A
  256.       bCompressed=TRUE;
    2 Q# D" B! \$ e6 Q1 z/ r! z& m
  257.       strExtLocal.Empty();
    ! e' A7 Z1 p, y2 m/ t
  258.       strFullName=(*i).second;
    & ~7 h$ C: R' `, x( y
  259.       dwProgramState=AP_CONNECT;1 `: M8 a( T2 k% f' R  K
  260.       return TRUE;
    6 n# b% V4 v1 e8 Y/ G5 `
  261.     }4 }0 C4 e) ^& I
  262.     if(!bRestartUpdater)
    3 M  Y. \% O5 l5 Z% ]
  263.     {
    ) s/ Q4 k$ t: b1 E7 ?. W/ H
  264.       int iCurrSize,iFileSize;9 H1 a* C* V5 C8 t: ]
  265.       iCurrSize=0;) B9 ~+ D# m% o9 k! Q* G
  266.       iFileSize=UpdateList2.size();
    4 ~+ z: |/ k; Y; J% Z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    " W4 f4 R8 R; E, B$ q' e/ B# m
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 ^9 I/ N& S3 I
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    8 _2 m6 ]. Y& u$ q+ A$ a& u
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' K) I) C3 n; y" X, i
  271.       Fclearf(".\\update.dat");
      E4 D" v( k% }+ ]; ~) ^; s$ K
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    8 P& d* H6 T. H
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 }: _: G( E& d$ y9 C0 X) |
  274.       {
    2 l+ I# b6 H$ v+ Z& h' L& z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())( q  p% y. w, G5 ?/ q: s
  276.         {5 X+ j( o# G! I; v6 t3 S: G
  277.           file=(*p).second;
    4 K# x: P3 H0 C  `! N9 A: h; u, W
  278.           sprintf(filename,"(%s)",file->file);; B7 x4 [( w, R) x
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 J% q( t) Q' @; u
  280.           iCurrSize++;( ^0 L; _( @. ?
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));" @* ]/ }8 y7 |5 \
  282.         }
    % l* N( H8 A0 p, m
  283.       }/ u9 `7 Z; [3 B7 R# S8 i
  284.       unlink(".\\update.txt");
    ; \! D; h2 i# l# `9 _( v$ s
  285.       unlink(".\\update.tmp");! y9 p) ?* S0 K5 }/ e
  286.       Fclearf(".\\checkversion.dat");7 n- N  f* P5 B; W( C; Z9 \
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);4 `9 `( T( y# [
  288.       if(UpdateLocal.size())3 G. m. }. V% W$ A
  289.       {/ E. O1 o- s  Y2 V6 u0 h
  290.         UpdateLocal.clear();
    6 K9 s" n" E8 q" ]; t% x
  291.       }- b8 |& h# R' Z
  292.       if(UpdateFile3.size()). K  C; d* y& k3 o$ z% v% C
  293.       {0 x5 K0 u+ f+ q* q0 Y: a6 o9 q  Z6 b
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 P# s* t( G) f4 I1 R; D" l
  295.         {% I4 Z1 a+ ]" p6 j
  296.           file=(*p).second;
    % O$ q; Q8 x/ G& \9 E: u: U3 D
  297.           free(file);  h# m# g8 l# q: E8 A" {: [) n% u, V
  298.         }8 X4 R! x1 |+ J$ Y& X* `7 W
  299.         UpdateFile3.clear();: I/ Z- z/ |) X( t
  300.         UpdateList3.clear();6 j0 x4 m" ]8 h- B- X; R# S! F
  301.       }) ]: `" q3 M1 _* B* x8 I
  302.       if(UpdateFile2.size())" _1 i. f5 ?$ H8 @
  303.       {
    , g2 C1 G% X( S- l% Y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ; ?. ^$ j5 O- P  ~# T
  305.         {& f/ Z, o2 S# k
  306.           file=(*p).second;
    , m3 m) q& G" I6 S3 i% ~% A
  307.           free(file);/ t% Y# p1 ~$ z: r' L' e% R
  308.         }
    8 M$ N6 H3 R. a7 V4 o
  309.         UpdateFile2.clear();* G3 e! m- Z! n8 B# w" t$ q
  310.         UpdateList2.clear();
    4 \- |- z9 }" M9 a5 O* v
  311.       }
    / Z$ P% K& G' d1 ^$ ]: J
  312.       if(UpdateFile1.size())7 T, o  d4 z& p+ W
  313.       {( d7 i- r1 R6 s/ _: u& X- Y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # W- R) F/ `1 R; B0 o
  315.         {
    ( y* `5 r0 O8 b1 Q, j6 X, ]/ c! {
  316.           file=(*p).second;
    / ^1 |! Q, i7 D+ r+ a6 a' }
  317.           free(file);
    0 y1 H! M; j$ Z) g( d5 T
  318.         }
    " @5 s# _! p* [3 ^  ]
  319.         UpdateFile1.clear();
    . c  A$ z! S5 k8 @# T2 P
  320.         UpdateList1.clear();. I$ l, g4 b& y1 J  O) h
  321.       }
    # m* |) [$ a; V2 z( T2 @
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));2 @' p, `6 U- f+ J% o2 U. b' o; X
  323.     }
    9 d7 h* L5 ^; B" U# D
  324.   }
    * m9 M# W5 T& M$ c: i
  325.   return FALSE;
    3 U7 }- D" A4 ^3 ^/ Y
  326. }
    , u7 w+ u! F6 C/ P+ e' r
  327. ! P/ u" a/ i. S. L7 P
  328. void CRevAppApp::ClearAll(void)
    % m; f: @0 N- c  |' }. |2 \
  329. {
    : m+ Q. I4 j4 p# J. g
  330.   LPUPDATEFILE file;1 u2 J/ ?; J( f5 n
  331.   std::map<CString,LPUPDATEFILE>::iterator p;6 _. I4 ~5 @: R9 _( P0 H6 ?
  332. % _" G7 o) ~, D2 f* |( j6 A& ]: b
  333.   if(UpdateLocal.size())( q  j+ O$ r7 d2 u
  334.   {% `* p) @4 J0 o9 d9 o, @. e3 E: }
  335.     UpdateLocal.clear();3 N# F- k  _0 _8 H) J3 r
  336.   }
    : X( T- g7 @/ l! u8 G% U4 x, x; O, J
  337.   if(UpdateFile3.size())
    & I+ Q# H. X8 ~, G4 L7 a
  338.   {6 v* M8 o: ]6 v, ~$ Z* Z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) @) V7 R9 @. w
  340.     {
    7 p: }$ r" o  t  }
  341.       file=(*p).second;, u; V2 B1 H" g
  342.       free(file);; e. A: Z! _1 x7 u- P
  343.     }
    1 ]3 C" k: B2 D; u8 a% P2 g0 L
  344.     UpdateFile3.clear();2 n5 T  P0 Q3 @) d, ^8 h2 y2 E
  345.     UpdateList3.clear();
    * E9 F! Z0 ?1 }1 X! \; Z! v/ c* w
  346.   }
    7 F) [6 N2 Q- q, h" O& v! E
  347.   if(UpdateFile2.size())% I1 b( A; g, V  K, L
  348.   {( ]; R( w; C) ?3 N8 E- R6 \
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 z3 E2 R, |& d/ N0 m1 i3 k
  350.     {
    ( F+ d( d7 n. N8 Z7 G
  351.       file=(*p).second;
    " m% {% ?, E9 @8 {/ T; j, ^+ e
  352.       free(file);' M- @& @" B& T% u4 ^
  353.     }1 S7 h# x) X; H& \( N0 C  @6 t
  354.     UpdateFile2.clear();
    : Y4 I2 {2 @' e% m! N3 [
  355.     UpdateList2.clear();: d/ C# q- _* }. c. K0 u7 A" l
  356.   }
    0 {+ J) _4 [% K) d: K0 r% O% x: `$ d" W
  357.   if(UpdateFile1.size())
    9 ?) G8 b' ^* f8 N2 h/ g
  358.   {
    & `! \5 M6 k" E/ N# p0 e. S
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). c4 F" H1 \/ F8 T  A' p; J% l
  360.     {
    4 F5 e. C: R5 I3 `& c0 n# e
  361.       file=(*p).second;
    * l- q; j1 x- |
  362.       free(file);
    * p# `# w8 `! d2 o$ m
  363.     }
    , E* X+ f! j) d+ m( R
  364.     UpdateFile1.clear();9 d/ e8 [: G6 g7 U  E
  365.     UpdateList1.clear();6 E# d/ ~+ A6 X5 E
  366.   }
    0 ~0 |8 O- n: |% @1 _3 Y
  367. }  7 {; x) N) O* R/ O
  368.   * [, p8 f; ~( J9 _/ V6 J
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    # T! Q+ Y5 i" M* C
  370. {
    ! S' b" a& k& c: a1 V: N
  371.   int c;& ^; L6 W7 O9 E& ?, P0 ~. v3 v! e
  372.   LPUPDATEFILE file1,file2;4 {% l7 @5 k- T+ @5 o
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    7 r+ ~6 O; _4 Y+ I2 P8 h& N
  374.   std::list<CString>::iterator l;& A7 f- G. W! s+ ?

  375. & @% h3 z  b$ h% Z6 S; a( B
  376.   UpdateLocal.clear();" e7 e* S! ^, r7 V0 O% E
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    6 c6 [6 M  L1 S2 m# d1 ^3 k7 K2 ~  p
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ( y. x% `! D/ k5 r+ G+ q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    4 D" N: Y3 n% D  c- F
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);4 P) z" ]8 `& r5 U( k
  381.   if(UpdateFile3.size())
    7 C/ O8 v4 i2 g& f% p
  382.   {- O0 c+ |0 m( ^5 u) [
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    * l% {& X* k* u; {% u/ ]
  384.     {
    # w3 v: m9 k( f/ a% X
  385.       file2=(LPUPDATEFILE)(*i).second;: a4 k8 a4 A2 Z1 c8 B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' n; L; o1 h2 y/ A9 e2 |1 `
  387.       {
    , }" L2 C; C' _7 q
  388.         file1=(LPUPDATEFILE)(*p).second;1 B2 E* w" d4 C
  389.         file1->vers=file2->vers;2 n; W! l' m2 l8 M8 |) I5 C
  390.       }" b( g7 Q) A1 X; }, C( [6 T
  391.       else+ A( L+ S' w$ c
  392.       {
    - M, \$ T. d4 ^! w  v" X& t
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* u/ ?* G4 r1 o( E
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' y2 m  _" i; a
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));9 r2 K$ t2 K4 Z9 j& T
  396.       }  z: N/ U, i9 F9 P% u2 X. g4 ]- g
  397.     }! s# x* L% v' u( A
  398.   }
    ! g3 q" e- |" @) _7 b
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)8 L% Z* F; Q2 A
  400.   {
    : O! m8 I2 F* o7 M7 a2 o
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())6 o, r7 A0 Y  r+ f# }  {" i" U
  402.     {( [( N4 o1 K6 a! k: N8 ]1 k' o
  403.       file2=(LPUPDATEFILE)(*i).second;
    + S. m0 d" _( _& v
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 z0 A' a$ Y+ K% m* a/ w4 i) N
  405.       {$ f& N- `( k, v" H& s4 ?
  406.         file1=(LPUPDATEFILE)(*p).second;
    9 m; X! ?4 o" q! @
  407.         if(file1->vers!=file2->vers)
    ) @9 t2 n0 d: a5 z) q# \- q0 Q
  408.         {
    . P9 A; U# D4 {! b5 z
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 {: G: s: O/ s
  410.           c++;
    * c* S. \0 K$ T
  411.         }& s: i4 c0 T0 }% D8 k3 D" H
  412.       }' n4 k* T, l  J" D/ S7 q
  413.       else3 [3 k7 }" S/ l
  414.       {6 u. T( F4 m5 b. X4 z0 O, D* E# J
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 f- E& h1 N% S& q8 x/ [
  416.         c++;
    4 S6 F6 y$ @- [2 k. y. ]
  417.       }* @+ g3 V4 t4 K5 |* d* f: B1 K) X  o
  418.     }* |# \+ M* Z3 O  f! p. t
  419.   }
    2 w( E2 \5 r2 y9 n) a1 l
  420.   unlink(".\\DownLoad\\update.txt");
    0 w/ T$ [1 N& f0 I
  421.   if(UpdateLocal.size()) return TRUE;
    % y, z# g3 J' s2 a/ `
  422.   else                   return FALSE;
    " D/ F/ E+ O1 c% t
  423. }
    3 ^; B9 X& C+ Q. k! K3 S  J' p
  424. + W  m% ]6 Q5 F. Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! X- N4 t2 u: U9 F# ~& x# l, K
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ( z. _) A3 x( ~7 u  s6 r0 R, R

  427. ! @6 o: F  _, u! c/ {6 n/ ^( r3 A

  428. ( w' Y+ e- Y6 i* r) h8 k# _) }

  429. ) ~. u7 e# t  }4 }3 F# z2 J
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)3 k$ ^) E  [; Z, \. v: v; U
  431. {
    , j* j; m6 A5 _) P7 g+ N* e
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    * t& c8 G9 M! L
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 E2 w8 ^3 p9 u
  434.   {/ P* `7 e6 G" I  B
  435.     char szLanguage[50];7 l6 |2 u. f9 V& |1 o- ^
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! q$ k" q) x- X8 `6 ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 X$ n7 b9 N8 t9 U
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& G& w) _2 V. b4 K
  439.     else                                   m_iLanguage=ENGLISH;
    0 C& S. S" ?4 `1 y" V
  440.     char szRegister[100];: f. Y& I: S! H0 E7 W
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 n% N; U: V& j# F1 j8 y8 w: M0 P5 v
  442.     strRegsName=szRegister;. ^0 U5 V( W4 x
  443.     char szPatchURL[100];1 Q- Z  Y. D1 g  y  C& t1 x
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ! N# a1 ?4 |# o2 x* p( s% o
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 q6 h( [9 n4 N: I3 {) z
  446.   }) a7 ]: u8 p) j, p
  447.   else
    / @) J( ?$ e9 U4 T
  448.   {
    4 D: d4 _* }' n, v% l
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 u% |% A: c# r
  450.     strRegsName=DEFAULT_REG_URL;3 {0 w& s, J1 X/ S  \. p
  451.   }
    $ [9 M' j: ]- D
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    2 f5 q0 t' q$ A* I
  453.   {
    $ W9 ^# u% D5 U7 j3 G
  454.     char szIP[50];( I' g6 |' g( [# h4 t( U
  455.     char szDIR[300];8 o6 d0 g: P5 T
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 T% v' a. ^1 z( j  O
  457.     {
    2 r' e+ f' v  G
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    + j4 V- p. L# V. [
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    : l; d% ^" B# o5 a2 i% K
  460.       strHostName=szIP;
    + N/ Z3 c6 }! }( A+ ]; c
  461.       strHostPath.Format("/%s",szDIR);
    5 \- ~* M. r, n
  462.     }* z! j. i% S& k  W( f
  463.     else
    2 B0 q$ o3 r) K$ s
  464.     {
      Q+ ?; r: J8 R; W& A" A
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 a: x; H& p' N% O/ \: m
  466.       {
    / d9 y' n) b$ B0 R% d( e. @
  467.         char szLanguage[50];
    $ W5 g8 W* q( u4 F, t
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* p; n! l8 g0 X0 F& O1 v4 @
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) r! J( X  t; j& B1 K/ V0 K
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 N( M5 k* L+ z& U, t
  471.         else                                   m_iLanguage=ENGLISH;
    4 k5 ^( n0 M$ `  n4 t- P
  472.         char szRegister[100];
    6 C/ `1 z; t0 s7 q0 R: B* D
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 x" N" u$ i1 a  a# ]
  474.         strRegsName=szRegister;+ G0 e3 v8 g2 q1 c) q2 c* q7 |
  475.         char szPatchURL[100];
    3 Z# n5 b. @! P" Z7 u
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - V, g: c+ W& f, E2 L
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    . B" [. J( x( K8 S) X
  478.       }2 ?+ J4 x6 F% R/ d
  479.       else1 w& C# T* M: l* c, s  B0 T
  480.       {$ {8 `( D( u9 R
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 G5 W- h/ S) ]+ v* v! G
  482.         strRegsName=DEFAULT_REG_URL;
    ' r8 g) Z) f( s/ z
  483.       }
      h/ ^* |4 d1 x' a3 [7 ]
  484.     }
    - `# A3 c. A- v+ ^+ d
  485.   }
    7 s) r4 b4 E- H9 N5 b: g( _/ U
  486.   return true;3 d# A& Q  \# ^! |0 V
  487. }
    3 h% b% q7 D( k2 [6 j. d( N

  488. ( |& N9 l# G8 W1 G2 ^- d
  489. #include ".\ZLib\unzip.h"; @) w  g8 y: _' m8 W
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    : M& O$ i3 g9 j! N
  491. /////////////////////////////////////////////////////////////////////////////
    ) U- n% k3 f5 I) Z$ m
  492. // CRevAppApp initialization6 F& F9 W- n0 B) V5 T

  493. " ?, B! ?' C! V* Z5 r$ j7 O
  494. BOOL CRevAppApp::InitInstance()
    + ]9 G/ A& o" N* F1 t0 c
  495. {. h+ ^. h9 x- B
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];+ N# B+ F, \- ^' s* W; x
  497. : N$ r: ^1 e# p1 @/ \1 |' E1 ^2 G
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    7 F$ }% y2 [* w, W7 t8 g
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    0 _3 g/ I% c4 _
  500.   {
    6 i/ B" _" G; A  s* B
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    2 g5 x5 u. N8 L, A: l* G9 c3 }: E
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    3 l1 ~# ~( i: N! e7 D# r
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))# i' R  Y0 X* ?" B
  504.     {5 u; ]7 q$ b) e2 J2 U8 C% g- k
  505.       strcpy(szPath,szPathTarget);' n" D/ f) C* V7 Z
  506.       SetCurrentDirectory(szPath);+ S  [0 C# K* t9 C" R. Z
  507.     }
    ; a# p! E" G, _/ [
  508.   }
    8 R% P2 i& |9 }( p: i* p' V
  509. #ifdef _DEBUG
    ) ?0 c1 t% _9 ]) y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! A- N( O; J* H( V6 `
  511. #else. o* R! }( \5 h! N8 B0 F$ x, c
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . {; M$ E! s# F+ N" @$ k
  513. #endif
    6 n( m  |7 E% L% L# J
  514.   {
    / h8 S0 r6 |0 P( ?& r  s$ X
  515.     char tempFileName[MAX_PATH];
    , p) o6 D4 \# M& L+ A+ q2 p& b1 y
  516.     strcpy(tempFileName,szPathSource);0 |) n, f0 F% m% ~
  517.     tempFileName[strlen(szPathSource)-12]=0;1 P( e0 f/ E" I2 m& j  J" h- G* z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    , A& A: ?) k! X8 u$ N) D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    2 r3 k1 K- @% [1 P
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* z9 Q6 o+ z! y$ M9 j
  521.     return TRUE;9 G4 H% A/ l! l/ J* W/ Y5 I' K( U
  522.   }6 K: c- h6 X' {8 N
  523.   // Nuke 0118: Delete run.exe5 L2 o( T' e" B* o
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    . n& Q& S. |. A- h
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");4 l0 ]; G+ h4 r( v; b) C# I
  526.   if(!ReadCfgFile("Config.ini"))
    1 O$ [$ ?$ v! N7 o% N4 O( }+ j) a
  527.   {
    6 J* i1 {0 y8 B- b9 c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);0 F- V4 k  j# K) [
  529.     return TRUE;; S9 A  C( a) F& m: p1 L8 S: `; e# d  \
  530.   }
    8 \( G. e9 I) F- a# z1 a" W. U
  531.   HANDLE mutex;& C0 O0 f& W0 U1 i: P5 j4 |
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
      l: x6 t% ]! D1 Z
  533.   {, }0 _$ k7 J+ Z2 Q/ Q% W. Q
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    / h5 ^+ e2 G: L: F1 Y+ ~1 Z
  535.     {
    & p) h2 H: l. t
  536.       CloseHandle(mutex);
    1 E5 S2 V: a- J' k
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * j# L; y7 j+ u3 y" V# ?- m* X
  538.       return TRUE;
    - [; ^' U+ f3 G$ p4 R. O* \, M
  539.     }0 ^$ Q! A' x6 ~! O
  540.   }  ) w" A  ~% w9 k9 L- H* k
  541.   CloseHandle(mutex);* g, T5 F- I+ B+ V+ h
  542. 8 x# X3 O3 [% O! I& }3 C# ~
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    + d; G! x# r8 _: K' G1 E

  544. # E/ q- H. F  d2 Z
  545.         AfxEnableControlContainer();
    0 h* Z% G  t' T& n3 L

  546. ' y  {! i4 ]! U
  547.   bCanUpdate=FALSE;
    - s  M! I$ _( |( E* p, |( y
  548.   dwStartUpSteps=1;. |1 F, Z- W. `) U6 l
  549.   dwProgramState=AP_NOTHING;
    ) T7 I8 V6 P9 u1 D
  550.   G, y& \! n3 J5 q" Q1 v
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
      f/ S8 }6 s. g! d
  552. * P) M! m& f8 C3 w" @+ S) _
  553.         // Standard initialization
    4 R" V* B0 z: [8 Y
  554.         // If you are not using these features and wish to reduce the size
    8 `7 Z3 T' U0 L  d) l$ m
  555.         //  of your final executable, you should remove from the following1 f$ q/ _% L  C# f7 S7 m$ s! d
  556.         //  the specific initialization routines you do not need.) r& ?  Q, W" C8 x9 P
  557. ' E1 R# B& m$ J2 c& q, [+ Z
  558. #ifdef _AFXDLL
    ! z9 P9 Z; r& h
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL/ E% A% G* l" b$ {7 O" ]! \
  560. #else
    + C9 }4 z3 ^' R2 G( o$ a. g- g1 ~: I
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically1 F  A& @' f$ J" g$ c
  562. #endif
    0 [, G* |$ |$ [
  563. ; ^4 H- m( p) ~
  564.   dlg=new CRevAppDlg;# W' D8 G8 }: O6 d
  565.   dlg->Create(IDD_REVAPP_DIALOG);8 v2 v) e' X2 Z/ X. d+ J
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ( f& @& h0 v. p1 o9 ^; g$ Q) D
  567.   m_pMainWnd=dlg;. t1 Y6 ?) C! v

  568. 9 m5 z  D  c% r3 U( C, d9 O
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 @/ |" E! S0 C8 B9 I6 V! I

  570. : e4 {5 K( ]7 p% H) K! _
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ' P4 V/ b/ L& P% i
  572. //  ULONG_PTR gdiplusToken;0 a' r  d2 o! r) |
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    + F2 b5 T3 B! v; Q( o
  574. + f/ y" `; h9 K# i" H, u* m! K) g; j
  575. //        CRevAppDlg dlg;
    & r! [9 Y" D8 L+ h! {5 u
  576. //        int nResponse = dlg.DoModal();7 ]; V, {5 T3 o" ]
  577. //        if (nResponse == IDOK)
      [# F1 y8 ^' d
  578. //        {
    . ?# l! j% I3 [
  579. //                // TODO: Place code here to handle when the dialog is! s8 d2 V. |& p3 R  q) T9 b
  580. //                //  dismissed with OK
    7 p0 T/ @  q4 Y, D; n
  581. //        }2 l) x; X! n' n5 P: I3 C5 ]8 |$ ]
  582. //        else if (nResponse == IDCANCEL), u$ E; s  \3 V6 ~5 v1 h, L. d
  583. //        {
    & X/ |# k0 d' k6 Z5 f  h, G9 [& ~
  584. //                // TODO: Place code here to handle when the dialog is
    * n8 z1 e' C" @6 z5 q
  585. //                //  dismissed with Cancel) I% t, z! o5 E2 y* f8 w
  586. //        }
    ' `) N- X* d6 s" L8 N4 ]! |& M

  587. * v8 B1 Q5 v/ Q9 p$ a! W
  588.         // Since the dialog has been closed, return FALSE so that we exit the: u  Q7 v) \) b9 l7 A3 h% D
  589.         //  application, rather than start the application's message pump.' d: p8 B' T" B  @& D
  590.         return TRUE;
    7 o9 V1 A( O! {* n1 L  s) i+ c
  591. }
    ' ?/ R7 Z0 B9 q3 W

  592. 2 G6 X0 ]; g, c/ n/ N6 Z& C: M
  593. char *CRevAppApp::strtok3(char *pSource,char *token)5 U, U% |# a9 y
  594. {
    ( E5 ?( s7 O) }1 S3 ~" l" ]& _
  595.   int i;8 q, A1 w+ p( i* U& f
  596.   char *szRet;6 E) h2 I2 i) ?( ]6 [  L+ ?4 L

  597. , j4 j2 c( }' B, O2 y5 G; F
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    4 v6 L, e& j, R8 f
  599.   if(sztoken)
    6 L4 M* [5 J, I- F! N  e
  600.   {
    + I) k) o8 p0 s
  601.     szRet=&sztoken[itoken];8 [( A1 l+ m/ D  Q
  602.     while(sztoken[itoken])6 e& s, r1 s. b8 M! R* w6 w* i" y
  603.     {
    . {9 S# S9 U& U) A6 U
  604.       for(i=0;i<(int)strlen(token);i++)1 q# P6 i+ [; O' F8 }0 n0 }& {
  605.       {
    ( K  U/ Q* q0 G
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])0 C& v: M5 G" ^, G6 h4 z/ I
  607.         {. V& }, C+ \5 i2 _
  608.           sztoken[itoken++]=0;' I$ D& C9 W' R: ^- {
  609.           sztoken[itoken++]=0;
    & s; Z- W5 V) M: K- E% d
  610.           return szRet;
      V9 i" R; h, j$ r
  611.         }
    ' _2 c6 C7 P( V( {* _' h- ^% f
  612.       }
    % D$ ?6 _& ^) \, |, Z; B# v- R
  613.       itoken++;
    * z/ Y: ?: C( W
  614.     }& C8 g# y: E1 J* u
  615.   }
    * W( x0 x/ t( P$ |  f
  616.   return NULL;
    ( O$ w+ Z+ Y+ h  e
  617. }
    ) w3 ]: o, M' N# v5 {2 [6 Y

  618. " P' N8 j: E2 ?
  619. void ProcessProc(long Total,long Current)( y1 r/ f8 z  H5 `
  620. {
    2 F* X& q0 z+ n  q# Y$ j
  621.         MSG msg;  K0 n8 f5 G, L: Q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    * E# u) G: d% w' T5 V1 V
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    & y8 a# C" O# c
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    1 x, d) _4 A2 z
  625.         {9 o4 q# D4 Y( M: T; Z1 `$ s
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ( |; [; b9 S" E8 X# O( J. P
  627.                 {; T$ e) l1 |5 N3 \$ G. y- k
  628.                         return;) q4 a+ Z6 ]+ V3 R' U
  629.                 }
    0 a4 z8 k# z- \  ?
  630.                 TranslateMessage(&msg);
    4 R/ b+ s" V2 n) R" P4 s$ Y5 T+ W
  631.                 DispatchMessage(&msg);
    3 u/ I' @0 N- l9 X# E: C! X# O) j
  632.         }        0 l' s2 T: T4 a# E
  633. }
    , p' @9 B: h7 f, Z
  634. / J4 E: V) S0 r5 Z3 v/ v5 H
  635. BOOL bFirstChar=TRUE;
    2 U3 j$ s) j6 O! B4 H' C/ h+ m
  636. 8 ~: ?! a5 k) A, X& O* T' v
  637. BOOL CRevAppApp::OnIdle(LONG lCount)! C' B( H# a, x* N$ b1 F
  638. {8 m  L* X/ e( a3 R3 q0 g/ B
  639.         // TODO: Add your specialized code here and/or call the base class3 Z. e0 X, H' |; N2 H! J' d
  640.   switch(dwProgramState)* b) P! q1 Z7 S' K& [
  641.   {* V. [- ?# |* s0 _" v2 K
  642.   case AP_NOTHING:
    ' I  j6 k  j1 S8 D
  643.     switch(dwStartUpSteps)
      Y7 {& Z. k7 \8 p6 ]' `. F( T
  644.     {/ Z/ _: l- m7 y. v* }9 m
  645.     case 1:
      U4 L. b' _, Y- q
  646.       {
    9 u# Y& N8 h6 R" G4 a
  647.         int i;. m$ Z3 A' n! y6 T: r2 n
  648.         CDC *pCDC=dlg->GetDC();
    5 @' b, |8 t' a' ^1 c, R
  649.         HDC hdcwnd=pCDC->m_hDC;
    1 V* \4 c5 o$ [) U' a2 p3 q
  650. //        Graphics graphics(hdcwnd);, |( @+ m* L% V1 a# J7 ?$ y$ W9 H
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    9 `) L- C' y) q" Q+ M
  652. //        INT iWidth=bitmap.GetWidth();5 J; h0 ^! x$ S9 u( y( q0 p" @2 {/ j# k
  653. //        INT iHeight=bitmap.GetHeight();' A0 r5 N( i  y: Y% x4 P
  654. //        Color color,colorTemp;
    5 R/ y" [3 \) |6 M! w
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    $ `( d9 n( \1 e& _! l6 D6 e3 u
  656. //        {
    " Z" k" x/ M4 N' J4 Z! j* E
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    8 H  h9 [2 g6 ~: V1 q* g& C
  658. //          {
    5 c& R8 \/ ]& M7 R# ~1 p( b) D3 O
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    & w4 f: Q- `3 K  z8 Q, Z% f
  660. //            colorTemp.SetValue(color.MakeARGB(- g1 Y5 k, u" ]! O% z
  661. //              (BYTE)(255*iColumn/iWidth)," X( F" K7 n5 y! b1 }7 k
  662. //              color.GetRed(),
    9 H! k1 e1 p6 B. v3 p( }1 ?
  663. //              color.GetGreen(),
    * y: x# M; f6 `# M0 s# X1 Z4 t
  664. //              color.GetBlue()));/ L( z* h  S  \) N
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    0 H) J" E0 U: R1 u
  666. //          }( P; V4 W" C1 d8 _, n
  667. //        }6 f! [% f# [$ h6 |; e5 |
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    3 Z; t% _) ?5 _. W" @/ n
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 B1 Z8 b# a! \3 C: U
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 }+ e( Q- o( x- K9 c) c8 l! h9 f( X. o/ M0 v
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 d1 n+ ~5 j' z# ^9 Z1 g
  672.         for(i=0;i<240;i+=8)+ z. Y  t: `( |  c8 ?5 o7 n" O; W
  673.         {
    + x1 F- e! ]/ c5 z* i5 }
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # Y: z( b3 @3 h7 c2 `5 {
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( l! o- l- H  o7 D
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & V3 S" ^7 R" U/ a7 G
  677.           Sleep(33);
      y! y1 |8 B; {
  678.         }
    $ l6 G8 m4 g3 u: D6 i* k# z
  679.         Sleep(1000);) e' `8 h) p0 K+ X4 t$ C
  680.         for(i=240;i>0;i-=8)
    5 N; i/ r% n- J; a
  681.         {
    2 X$ h1 F8 ?0 s) T. u
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      m8 S. G0 T2 A
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; B$ t( N* G$ }: O
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - M/ y" O8 C& b# p) S6 z
  685.           Sleep(33);
    : l  _& U: D! u9 a1 |. S
  686.         }
    ' F, Q* K4 v( r. H8 }6 E* C, r
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ; ^2 }7 C5 h) L3 C
  688.         dlg->ReleaseDC(pCDC);* H; ?0 w" o8 H6 Z
  689.         DeleteDC(hdctar);
    * e1 o- J3 t' ~3 e- q5 P8 V3 V
  690.         DeleteDC(hdcsrc);
    ! @$ |5 J3 ]$ o6 I$ ?; Q, f
  691.         DeleteDC(hdcorg);/ }: u  N  k* r5 r
  692.       }2 m& ^2 ]: f1 B0 c( \
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);  ?# {7 q3 F# C$ B
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");$ P1 m. S  N/ ^0 a! E, m
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    6 v, h+ P$ h( L6 b: B' F, G1 E
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    * z( g; P7 O& D) @! \. V
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 V2 ~! @3 o$ S! I
  698.       if(!Dn.Connected())
    5 B- [  [7 [' H- P, b- d
  699.       {
    / W+ R$ ~2 i& p( m# \0 z( ^
  700.         dwTotalFiles=1;
    : W& Q/ A: U4 ~6 ]
  701.         dwDownLoaded=0;
    + |- Z1 i; F' `0 N* ?1 ^# _- a
  702.         bSilentStep=TRUE;. f  s9 H# [. d2 i$ G
  703.         bCompressed=FALSE;* W7 O% j* U" t8 o$ ~+ D
  704.         strExtLocal.Empty();
    3 P* g1 X: m. c# F  Q( Q
  705.         strFullName="readme.txt";( r  u# N/ R2 j6 h* f( k7 i/ c
  706.         dwProgramState=AP_CONNECT;5 D+ u6 U4 L0 ^2 ~  U; J
  707.       }% N8 C$ E* a9 P- f! ]
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();. I6 D' ~8 u6 d
  709.       dwStartUpSteps=2;9 V2 L: K3 V. k! n9 p% \
  710.       break;
    % U" @0 F8 X, e- N! S- d/ N8 q7 n4 O
  711.     case 2:; }6 w* ?$ G1 J+ P: S2 \
  712.       {
    ) W: h3 d! k  ?
  713.         int iEOF;
    , o9 I# p. Q( q8 q6 g  N' ?! }: j
  714.         FILE *fp;4 h& _3 G6 T2 q9 i9 z: q) X/ X5 X; f
  715.         char szString[512];. z3 j8 W& s/ I2 e
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");7 ?8 Z1 L) Y  {  V* l, e2 Z0 Q* g
  717.         if(fp)/ n4 v" T: d1 H. z* U
  718.         {
    9 ]" Z. k# ~: v0 ], ?! x% i3 I% e
  719.           do
    ' l8 W# _  I5 D, U  V0 j
  720.           {
    & r2 u  }$ X' g
  721.             iEOF=fscanf(fp,"%s",szString);
    $ p2 O# ]6 h4 s  a4 Y
  722.             if(strlen(szString))' ]! U/ `8 a6 v% B+ R" h
  723.             {% N( B$ L0 q: P+ b$ Y, t
  724.               if(bFirstChar)
    ! k9 G, [& M, G* ~, J
  725.               {# z+ b4 p; n7 H: s7 ?# U6 g
  726.                 bFirstChar=FALSE;
    ( M5 k3 w7 a: L* i% v( x
  727.                 bConnectIsBig5=FALSE;* Z  N7 _2 \6 @+ D! X: u5 Z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;( U8 ~& A5 h( x  W6 K5 f
  729.               }7 o6 E" [& Z/ t) J. O0 g: K
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    7 }' o$ V* V5 w1 [
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));* {" I/ a- i. V: y* {% F4 I- L! A
  732.               dlg->m_ListText.AddString(szString);
    ) t3 u9 K; W; y; e: v8 B, B
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) S' ^$ d' V  j, x0 b4 W1 }
  734.               *szString=0;7 t+ g! x1 o9 Q( W. B
  735.             }
    ( @1 n, G7 X* f. M: _
  736.           } while(iEOF!=EOF);/ A0 O8 v8 W# x7 d: h4 S
  737.           fclose(fp);
    ! E4 |6 y0 X% M( V& V
  738.           unlink(".\\DownLoad\\readme.txt");' R# P4 O6 N( l! r8 v& ]
  739.           dwStartUpSteps=3;
    9 Y; x& i: d( r$ D6 E
  740.         }
    5 l  ^2 G$ g; y" o1 U2 i
  741.       }- Q1 c3 M6 U" |, A' J/ J
  742.       break;% r# R; T8 f1 V! ]. a
  743.     case 3:
    7 ]- Z8 x: \& e
  744.       if(!Dn.Connected())' J8 ~% j6 E8 E* Q; k2 K: ^
  745.       {
    . u, D6 S5 ?; m; T& i, Z6 C
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ( f$ R% d3 u+ C) v% d7 h1 x
  747.         dwTotalFiles=1;
    : H/ \) ]) W- u, e6 o
  748.         dwDownLoaded=0;
    4 D5 S' G- [# {4 g0 W
  749.         bSilentStep=TRUE;! u1 B  N& e! ?/ G) e( e
  750.         bCompressed=FALSE;
    " ]5 x9 e. q3 ?' O# ~+ d( Z5 v% v
  751.         strExtLocal.Empty();2 H8 S% s( S) I" w
  752.         strFullName="checkversion.txt";
    % J7 H' N% ]  A2 t
  753.         dwProgramState=AP_CONNECT;9 @  b* C5 @7 T
  754.       }7 U9 u, o/ G2 {+ L" R
  755.       dwStartUpSteps=4;
    - }6 d; a: S1 y; u4 J$ K% h5 B
  756.       break;
    ' f) G: L$ H  _6 G
  757.     case 4:
    5 U( G; e0 x; s8 C+ o
  758.       {1 y4 g4 o: f% x: N; `, H, q! C
  759.         FILE *fp;
    * i% d4 f, b' `6 R
  760.         char szString1[128];
    5 g! I! F. x! b) b: @! \5 T. K. \% Z
  761.         char szString2[128];; u' Y8 Y* B1 V/ T+ q
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");, F$ {$ ]* k& T% I0 L& U& Y, x
  763.         if(fp)
    ! Y& e, Y+ y' ?# K# l- c3 S
  764.         {! [- p: e) H8 O! p1 ?
  765.           fscanf(fp,"%s",szString1);: f) K0 T$ m. k* L6 t
  766.           fclose(fp);
    8 A- f3 t  v# ~" _0 u! p
  767.           fCheckVersion=atof(szString1);
    ! Y: L& d. k1 e: }% Z$ Z
  768.           fp=fopen(".\\checkversion.dat","r");
    3 r* o3 x( {+ T7 }5 E+ O  P
  769.           if(fp)
    " v/ s; K' L3 C; s
  770.           {' W* ~  P% U8 T1 I; _% j) L; a) a
  771.             fscanf(fp,"%s",szString2);! S2 G( C4 s  G4 y# Z# d4 r
  772.             fclose(fp);
    & ^2 i6 h8 {9 {# C8 z. f
  773.             if(atof(szString1)!=atof(szString2))3 e: I! I' g4 U, o6 W, n5 C
  774.             {
    : g, B: l8 G2 ]
  775.               if(!Dn.Connected())9 O9 _7 P) H; T, u4 @
  776.               {  E" o9 x6 W) O9 j6 R4 l! P
  777.                 bFirstUpdate=TRUE;& |7 Z/ e" G/ u! O  e( Q
  778.                 dwTotalFiles=1;6 Q2 f5 P2 B5 c+ G+ K- V
  779.                 dwDownLoaded=0;- [; K0 C+ H3 u/ u* u
  780.                 bSilentStep=FALSE;
      s! O+ r/ y& ^
  781.                 bCompressed=TRUE;
    8 f: e% z+ d3 Q7 w
  782.                 strExtLocal=".\\DownLoad\";
    & q' y- T+ F/ z1 O% m8 u
  783.                 strFullName="update.txt";: m. E4 V3 F! X- G$ g$ x+ \
  784.                 dwProgramState=AP_CONNECT;; T: k; K# c4 W3 k' H% [* e
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' T8 a1 l, ?, }0 A3 s6 g
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ M9 u  t" q$ i/ [
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");7 K1 Z' h8 j0 x! d. M$ h0 @8 N
  788. 0 u, \3 w4 d: }+ A- [
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " b! F+ ]: c! f, e& W0 \
  790.                 unlink(".\\DownLoad\\checkversion.txt");1 h" `% u6 p% ^) J# ~4 _
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    # s8 U0 |: Y. x# V+ _
  792.                 {5 H: s% B" O) D: }$ S; D
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");  O7 H6 E' ?( ~! M; K/ l. T
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ! L8 h, D; g0 Y" H3 H+ v6 @
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ( b+ F/ L! e5 `& V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- A5 x, u6 L) Q' x8 A) R, w: d  }0 L
  797. ! V- q7 [( E. U' x- a- F* y& W
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");' d. G5 a0 J  i3 Q: y  N* U
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & c6 J1 g7 E. K9 t/ ^; _' z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");, ~! S) E" U  Q/ k+ D
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- U5 [. Q# d! J  Q
  802.                 }
    $ J# I0 v$ t1 B$ |; |
  803.                 dwStartUpSteps=5;
    3 l; g' d+ y$ z& S1 K' p- O
  804.               }2 i2 s$ |$ o  O3 q. A
  805.             }0 O5 N& p; f! d+ e6 @
  806.             else$ D& K( u* G3 z; M
  807.             {
    6 z6 `+ R7 J7 \( l  j/ z( @5 T% S
  808.               unlink(".\\DownLoad\\checkversion.txt");- V1 F. I! Z( K5 V" w/ [  ~
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    6 k) T# L" Z$ u; [7 U6 d. F; ?
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");% `: x6 Y/ U/ @7 s+ J% Z. S3 r
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");, y. {7 W  I8 g: L" ^$ L+ P0 T

  812. 4 u' U4 V  b! l* H" v
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : D8 T7 y7 z3 Z/ w+ d' X
  814.               dwStartUpSteps=99;3 x( O4 ~7 z4 }& `7 D$ m
  815.               bFinishUpdated=TRUE;6 P8 b& O$ T0 q9 J6 P
  816.               bCanUpdate=TRUE;
    0 G. }/ v' f9 k
  817.             }' n* N$ v8 X' f1 _
  818.           }
    * a5 x" C1 M& b4 ?: d5 q9 `* L8 h
  819.           else& s) l+ e  A9 N& F5 S) Z6 q) R
  820.           {6 {& i& {+ t$ F
  821.             if(!Dn.Connected())0 J. g! r) M9 i# U- k
  822.             {+ d) v( Q# r) Z8 L& u
  823.               bFirstUpdate=TRUE;. @9 m( y% h6 v- c1 H
  824.               dwTotalFiles=1;
    ) G2 o/ \/ W$ f3 ^7 K$ E
  825.               dwDownLoaded=0;4 }, Y0 ~& T# n& }! D: P
  826.               bSilentStep=FALSE;& s: {% I. g* s6 t( n
  827.               bCompressed=TRUE;9 y8 D4 _1 w" ?: Y: s3 C
  828.               strExtLocal=".\\DownLoad\";7 H% D1 U+ \/ o) r# Q+ C! y  }
  829.               strFullName="update.txt";2 n& F/ J7 @: Y, }* c' k/ l
  830.               dwProgramState=AP_CONNECT;
    3 I4 j+ @9 X8 t7 `& H
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      f6 i8 J' m3 A
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% D8 l- H$ m+ z+ i* }$ B
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");( y& k! f) A; A/ d, E. q& c
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / o9 h' b+ B7 y( Y
  835.               unlink(".\\DownLoad\\checkversion.txt");' |/ @1 G' f1 I4 p- ]  y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)4 `2 b% n  z0 O
  837.               {
    . d2 k- j  I. ^- r  P, J
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");" v$ ~/ r; ?+ F& R6 r
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    8 @  O, E. P9 u6 A* R" i$ a
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    : b, e# b8 N- M, G
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # E7 R1 M- C" Z
  842.                
    ! {& G' `6 p4 [2 J/ x+ A" x
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");4 E' c$ e6 ~. @8 B- h+ r# D1 u
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! X" F" ^% [; y( _# g/ w: W
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 I, Z, ~  ]# K8 G- w; y! Z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " I  F5 a7 ^* I1 I+ R  h' G1 O
  847.               }( Z6 b7 l& b- W8 S5 \
  848.               dwStartUpSteps=5;: ]8 o" m% s" v5 U5 y' E
  849.             }
    ( Y) N8 g' a' O, q; f
  850.           }
    # t: {7 X: v1 q6 n6 H4 H( p
  851.         }( H  `# I5 ~3 P
  852.         else) ]. B( o" t2 O" b4 w5 \: o
  853.         {
    ( y/ k/ {, l0 n! Q4 [
  854.           dwStartUpSteps=3;: F2 ^. }( }# |8 k* s- P; X
  855.         }, z0 M: Y9 v1 [. |2 \+ l8 S6 W
  856.       }
    ; k) Y4 @  B" @% L6 a  `2 J
  857.       break;
    + n$ ]; N8 z' D9 w
  858.     case 5:0 \4 S$ H$ B! b0 d2 Z/ K; `+ _
  859.       {
    % k- z" \# k) i# c1 I  p& p
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)1 |2 g) h& Y% N8 R9 T' Y
  861.         {3 b1 @' X8 y* k* W% c3 k8 ?
  862.           int opt_overwrite=1;
    - s2 Q% k7 X* Q- k; b" x2 s2 d$ t
  863.           int opt_do_extract_withoutpath=0;" ~$ ~* `: D; H; k  l) g
  864.           unzFile uf=NULL;. Y& l$ F- o( Q) B

  865. ) I8 n3 ?# @. a6 Z) I6 X2 Q
  866.           uf=unzOpen("Wsa.zip");3 D3 r  h* ~: r! \8 n
  867.           if(uf)
    ) l: E4 v8 O) Y
  868.           {
    1 @  H1 t4 |* @, m. [
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    5 d) ^) x5 |) M. p) P6 d
  870.             unzClose(uf);
    * o- E# U) ?1 m- Z- F% r0 l1 M
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");5 i7 V$ x9 y/ ]9 |, J8 C
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    & F% }# ^4 y& s* h
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    & ]7 ]0 }8 Q- i; {3 ~0 B' E
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 ?9 t" j3 H  Y$ W
  875.           }
    - u9 K* W$ ~8 \9 J3 I! k/ s  [
  876.           DeleteFile("Wsa.zip" );& ?, d& @  n/ h3 p3 h) x( k
  877.         }
    ( M% g& V) C3 H: L  |

  878. , _9 ^3 P: f, ^, m4 M
  879.         if(CheckLocalVersion())( q- W+ |& j7 ]
  880.         {: J* I7 R- {8 ^  V( u
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    $ c" g& Z% _. a( c3 F
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");7 m; E0 s) O) e, g# S. l; o7 v) Z
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    4 ]1 K1 d$ F% ~* t1 o; D
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 y) `  I$ F/ B4 h  I3 U
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    6 u9 N/ |) Z' W. X3 a5 @4 j/ x6 Y1 H
  886.           dwStartUpSteps=99;
    & r3 |# F/ ]+ y/ x1 z
  887.         }
    2 R& e2 [# g. e
  888.         else
    . R" J- a6 I: j& ~
  889.         {; b7 U$ O6 W+ \7 K
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    1 ^+ i- I; I7 `" l0 ^
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");( o1 n. ~% ~/ s
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    # e, V" i( N  b) X/ R! }

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

( K; [$ g6 y5 E1 @- q" u

評分

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