找回密碼
 立即注册

CSUpdate.exe源代码

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

1 @5 x4 {9 R! [1 l
  1. / RevApp.cpp : Defines the class behaviors for the application./ }0 I$ A; I8 k
  2. //
    4 X  [) y) U4 P" R  u- d! P

  3. / L! e6 x( r$ l6 z" O1 j
  4. #include "stdafx.h"3 S: X6 l3 T' L3 I

  5. 4 ~, Z' b* o  P; M
  6. //#define UNICODE
    3 Q8 V# T' F9 A9 ~' O
  7. //#include <gdiplus.h>
    # J3 f, _+ J% t" T8 {5 W3 K2 @
  8. //using namespace Gdiplus;6 _8 G! b9 s9 a5 w8 _3 D

  9. ! h$ @, f3 ~3 Z. [5 W
  10. #include "RevApp.h"
    " d" s* K4 b6 G' ~5 G1 _
  11. #include "RevAppDlg.h"4 b/ f0 Q# t3 E# I, T* ^" o

  12. ; S, w. G9 {3 [% h* F
  13. #pragma warning(disable:4786)
    3 M! G  D# F1 |! s* I- b
  14. #include <map>6 p9 J* I5 e$ a# b3 Q0 Q1 p
  15. #include <list>
      W- ?1 {5 r4 S% A% U- z9 m
  16. #include <direct.h>
    - Z' n& [  n/ ^! ^0 k7 _/ _; o

  17. , L$ b) B! b  g5 `/ c* L" N
  18. #ifdef _DEBUG& \* q: @! p1 ^$ c- }+ M' u5 X$ e
  19. #define new DEBUG_NEW: ^. }! `6 Z1 g; I, c
  20. #undef THIS_FILE
    ) G  P% p* m: i0 A/ ?* }. `+ }7 Q
  21. static char THIS_FILE[] = __FILE__;$ `5 {' u) p& a( h, R5 y1 @
  22. #endif, u  ~! G" I. G7 y3 G. f
  23. #include "SkinResDef.h"- H4 D# g8 T( [' a
  24. #include "ChangeBG.h"
    9 s) g8 u' u, ?
  25. #include "AFXINET.H"; j0 W4 k) m$ u% ?+ `
  26. 7 S' h. j: v& y% s, o! I$ Z% {
  27. #define TRADITIONAL_CHINESE 07 K0 w* @# j' Q3 S  Y. E- r
  28. #define SIMPLIFY_CHINESE 1
    ) F, [- `8 R5 H3 N
  29. #define ENGLISH 2. c2 G7 |" R7 j
  30. int m_iLanguage = ENGLISH;
    7 ]  K* N' T. T
  31. /////////////////////////////////////////////////////////////////////////////0 H( i/ z3 ]  P+ G4 ]; ~
  32. // CRevAppApp  n8 G9 u# n' O' V- f/ }9 i
  33. ' M; }/ H9 l& i9 @! K" k
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)8 l% K- Q5 E' p# H" c6 j
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ' j, R4 a, j) K( H2 o& d
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    0 `/ ^8 O8 u& }5 A( v+ B
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!8 ^: W' R5 B+ Z- `' b& {7 `
  38.         //}}AFX_MSG* @. D! s+ X) m8 A( B
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    & A5 q% f( Q8 \1 C+ P: v
  40. END_MESSAGE_MAP()
    - Q& a5 _) {: r+ _' `& y
  41. . U# E5 s' d' e5 [
  42. /////////////////////////////////////////////////////////////////////////////
      p) _* A9 e6 M8 G
  43. // CRevAppApp construction
    , P& d: s0 X0 N1 R  N) |: I6 u

  44. - \" l$ n% a* ~
  45. CRevAppApp::CRevAppApp(); ~+ k, A4 C% s5 S( S% j/ ^7 V4 Q
  46. {
    7 S  |: J! _# l% Q6 i9 |3 C
  47.         // TODO: add construction code here,/ v: P+ z9 I6 X/ E' _2 ~( o
  48.         // Place all significant initialization in InitInstance# _8 R! ]2 Y7 H+ k. P
  49.   bDisplayIsBig5=FALSE;' v# z; `3 s  s( h9 H
  50.   bRestartUpdater=FALSE;/ m% S2 I3 P# n" B2 E) S
  51.   bFinishUpdated=FALSE;7 p  z* z" w6 Y4 |2 p
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    - \' f$ y. ^( h/ q% N3 t
  53.   InitChangeDataBig52GBKS();
    & H5 I1 k0 d7 a! b5 Q, u
  54.   InitChangeDataGBKS2Big5();" a& o7 i+ P# v& U
  55.         //
    1 Y7 q& x, r' J+ y% ]
  56.         bClickRunExe = FALSE;
    " [- r9 Z) ]2 }
  57.         //
    3 ^6 d0 ^4 F6 v% Q% s. \# {- J! }
  58. }
    5 H- V! ?5 b$ \4 H, w+ G

  59. ! |2 a$ k. u3 E" @6 K6 F7 O
  60. CRevAppApp::~CRevAppApp()8 A& P- h8 n+ x1 G" \6 h
  61. {
    + M" m+ b3 J7 H% [- ]
  62.         // TODO: add construction code here,: v# L2 M& @- l+ r/ Y9 V
  63.         // Place all significant initialization in InitInstance
    2 r2 W: P1 B% S2 }
  64.   EndChangeData();: x1 v5 ]0 l/ X
  65. }
    ! J4 q' {3 Y* j6 o
  66. ' \- o1 S$ e2 X: k" e
  67. /////////////////////////////////////////////////////////////////////////////
    9 W( y" r! n  O8 |: r6 h1 A7 H3 b2 N
  68. // The one and only CRevAppApp object8 [3 b, c$ B' ], A

  69. 4 S2 [! w4 A$ y
  70. CRevAppApp theApp;
    ( I( t. A4 l! U
  71. 3 E, T9 `7 K3 T' r4 A8 Q
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)% x* m6 Z5 f) ~( u1 O$ ?/ g$ L
  73. {
    ) |$ `' H: y1 @7 f( ~1 y6 k% w
  74.   int iEOF=0;7 K( T$ _7 ~# a! e& ?$ V, {' y# e
  75.   char szTempName[MAX_PATH];
    + D' y4 Y( B) y! z5 N; |5 O
  76.   *szFileName=0;! r* u0 X9 |9 U' y! Q2 J9 n
  77.   iEOF=fscanf(fp,"%s",szTempName);8 m9 `6 K5 y% m" y/ P3 H: U
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')6 M* L, C) ?7 |
  79.   {
    " N. H  ^* b8 z
  80.     strcpy(szFileName,&szTempName[1]);& q- i; @% D' ]* ?; D5 j9 [& ?
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ( _! B+ X8 h2 |6 p+ `$ Z1 e
  82.     {
    9 c, d/ R* v, W4 _$ I" i6 Y
  83.       iEOF=fscanf(fp,"%s",szTempName);; V3 H: b' c* a' |
  84.       strcat(szFileName," ");- F8 ^# V" J) T# p7 I; z& t0 d
  85.       strcat(szFileName,szTempName);# K" Z/ |2 \$ f' ]9 t. E
  86.     }
    0 H2 j, o8 @, C/ V
  87.     if(strlen(szFileName)>=1)
    , b/ a( l+ m0 [3 |( Z) E& e
  88.     {! X  Q( A7 |8 Z" m' P! L
  89.       szFileName[strlen(szFileName)-1]=0;" }' Y2 {3 s4 }4 _) N; N1 i
  90.     }
    ; m$ @. i3 Z/ n/ M( y! n/ R. N
  91.   }
    ' Y. B1 I, r9 D; f/ A) ~* Q  l
  92.   return szFileName;- i2 h' q; U7 w. K5 R( Q
  93. }
    & n4 H* t! R0 h# s& U0 G3 T

  94. 4 y8 S$ b# F1 r7 v: j* Y: o$ e
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)* a+ i. W3 l0 B" d
  96. {& W4 N5 W) a$ y
  97.   FILE *fp;  K# d7 d( g2 P' l$ v
  98.   char *key=NULL;
    & y+ a9 x2 e$ ?
  99.   char version[MAX_PATH];
    7 V/ y$ [' j* D$ b/ n$ z
  100.   LPUPDATEFILE file,olds;
    ) q$ ]9 k) t% J' f. Q+ u
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & y4 I7 b' a  X4 X" g

  102. " h* n5 Y3 G, I* |/ v! K/ j4 M5 q
  103.   UpdateList.clear();
    / Z5 X; J1 r: d7 A! b$ ]( o. s
  104.   UpdateFile.clear();
    * z7 v" E: g" @. u$ S
  105.   if(GetFileAttributes(filename)==-1) return false;& y) `7 c& T$ q( p! p0 Q
  106.   if(!(fp=fopen(filename,"r"))) return false;6 c) J% ^! {# I# Z. S
  107.   fscanf(fp,"%s",version);# q0 S0 Y( U) o4 G; s6 w
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }$ r# C  w7 O3 _( [5 d  {/ _' G
  109.   while(fscanf(fp,"%s",version)!=EOF)
    6 i5 H2 w, a9 H5 Q/ b
  110.   {  g% o  r/ n9 ]' Y( S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / G2 y' V+ }( [( p9 p
  112.     fscanf(fp,"%s",file->path);
    4 Y0 O+ V/ F3 C0 G' Y4 [
  113.     ReadFileNames(fp,file->file);, Z: v3 |9 K6 I/ d2 N+ T' F( {* F
  114.     strcpy(file->full,".");
    0 }' N: m1 h7 `0 l2 L+ P
  115.     strcat(file->full,file->path);' o: o& \) W8 G
  116.     strcat(file->full,file->file);
    $ N) {" X1 I% F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    6 e6 _+ E2 i. R: w$ |7 b8 W
  118.     {/ T2 U; @1 D8 z- J
  119.       file->vers=(float)atof(version);8 c7 @: t1 s0 p" r
  120.       UpdateList.push_back(file->full);
    0 g4 n( ^: k! X9 m- j
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    7 W& h/ E, ]; M0 l4 Q
  122.     }( y0 Y9 c. Q0 k! |2 n
  123.     else
    * I) X- a* x& |1 l7 j
  124.     {% O* J/ [! i" C
  125.       olds=(*p).second;
    1 u) }/ X7 O. S" h5 P' B) ~
  126.       if(olds->vers<(float)atof(version))
    : H( O  |  a# V; Z5 i! G
  127.       {
    ' W: h1 X1 `9 B8 R. U) f% Z
  128.         olds->vers=(float)atof(version);4 w" k+ i0 z* i
  129.       }
    # z3 ~: O1 X; J  m- L7 j
  130.       free(file);
    " \3 P0 N: X; r' I$ `4 h
  131.     }
    / R' a6 N( r. }. o& _- I. ^% J
  132.   }
    . s% s6 {7 q' z3 l6 u
  133.   fclose(fp);
    : E- l; r- k+ l9 }, A/ z# M6 M
  134.   return true;2 G% f. _, x" v1 Y; [
  135. }
    % ~( l( F3 e! L4 U; k. x! u6 `

  136. ' m6 V3 k, A: N
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    5 t( t) o9 f. L) D& o
  138. {
    - v! s* o; y( f3 S% P8 Y
  139.   TCHAR  szFull[MAX_PATH];
    . E# h2 g! M* e' R& N# ?+ t* H$ d
  140.   TCHAR *token,*inter;- q+ H  i; k. A5 _+ [, G# k
  141.   *szPath=0;" D! k2 E  h- M# ^; Y6 F
  142.   strcpy(szFull,szFullPath);2 T; n' }% c+ Q# w. T, l( K" J% f
  143.   token=strtok(szFull,"\\/");
    $ _& @: ?, ]' ^9 V
  144.   inter=token;- ~9 F0 z( |! T1 W
  145.   while(token=strtok(NULL,"\\/"))
    4 J9 c7 Z) {2 |6 H) K
  146.   {
    & z- q  B9 w0 D: e4 S! t+ }
  147.     strcat(szPath,inter);
    7 @- p3 W) B7 ]$ k- m
  148.     strcat(szPath,"\");* @; |5 v6 o; j( O0 Y) L
  149.     inter=token;( R+ p2 x- h' h% T) R* w+ @& J
  150.   }+ s2 j7 H- K7 H  V8 q. ]0 C
  151.   return strlen(szPath);
    , C; v! K: N5 m1 ~* ^" Z
  152. }& L8 ^8 y8 V6 x1 \
  153. * e5 v- g8 F' Z: k5 N
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)9 F/ g; u) ]& b( u/ r. ]" Y* o( I
  155. {9 D$ K, X1 ?; z- ]* i
  156.   DWORD attrib=GetFileAttributes(Target);7 `3 |. n' t3 M+ z$ i( w! Q
  157.   if(attrib!=-1)' {$ S- z( d: Q6 f" Z
  158.   {! \, Q1 S7 u6 {+ v
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    / [, p( K8 i5 ]2 T4 P& P. i, t0 F, l
  160.     {
    1 ?; l* [# I, E. |8 O
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
      e8 q: H  ?: o' o* U
  162.       SetFileAttributes(Target,attrib);
      y5 J0 J) V0 ^" k0 P: K
  163.     }& z% c0 p$ Q' n/ _
  164.   }
    5 K2 x) t+ e& I; t/ B' g# v) v
  165.   CopyFile(Source,Target,Erase);* F7 i4 W; n4 U- a. j' c) N
  166. }
    - \7 g' Z" I5 O+ h. }0 r0 P8 G
  167. 3 Y$ ]+ u( u0 L6 U( d7 _+ ]" R; V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)6 M+ k2 l" N* A
  169. {
    + Q5 Q# |: T4 {2 M7 w( F
  170.      FILE *fp;% M/ C" N5 W8 J
  171.      char  szBuffer[8192];% E5 I- t/ |7 M1 \7 a- U; a0 ~
  172.   va_list  argptr;
    9 o' G( m1 ]( `- {
  173. 7 H9 s% Z5 m" {" l1 q) w! U- ]# h8 v
  174.         va_start(argptr,message);  I0 v9 q& p3 {
  175.         vsprintf(szBuffer,message,argptr);
    % ^0 {/ G& d: y0 Y
  176.         va_end(argptr);! M+ o0 V. g$ i. O' J" B" _
  177.   fp=fopen(FileName,"a");4 n3 c0 r, ^: P
  178.   if(fp)0 z( S. O2 o+ J* \
  179.   {6 \  C  l$ B' d! M
  180.     fprintf(fp,szBuffer);8 L( }2 C( x: u: ~# `. k8 g2 p
  181.     fclose(fp);, d. P% R, N/ \% t0 e
  182.           _flushall();# z, L8 ^/ n9 W" r* q' x5 Z
  183.   }
    $ A  D- x( [: p, O
  184. }6 B* v: z/ A8 Z* ^  y1 j9 k9 b  A: F
  185. 1 v# u  @4 i& U" B9 U: c* ^9 \) E
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    . G6 H4 t+ M/ }. m- F. D  _! D
  187. {: @: g! x! b1 T
  188.      FILE *fp;7 b6 I. E2 b7 o7 u+ i, A
  189.     DWORD  attrib;
    $ k8 F9 A% p* ?4 v" N; A
  190.   attrib=GetFileAttributes(FileName);
    7 u) ]- V' `8 Z" q' B  `7 X4 o
  191.   if(attrib!=-1): B, W/ l- m7 E& \
  192.   {% U0 c- g; z: I2 H7 x: Y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);6 P, |% `# }2 F7 [4 G- @
  194.     if(!SetFileAttributes(FileName,attrib))
    ; D4 k" D) z: i- C- A! `
  195.     {
    $ t' L5 _/ ?$ a8 C* g- }5 ]- k
  196.       return FALSE;- T; U2 c+ O2 h: N9 s0 {$ E; C
  197.     }& ~- {$ Y8 e1 ~+ K1 p: M
  198.   }
    , n0 @; A, ]8 _  {: ]: {5 F
  199.   fp=fopen(FileName,"wb");8 A/ }# |1 ]& ]& f" o7 S, a  n
  200.   if(fp). l) ?& A! t# ]3 z6 z  J
  201.   {
    - U3 Y; e$ j$ U" i+ j
  202.     fclose(fp);+ l; K/ T& l9 z8 ?
  203.   }
    $ g  t7 @4 ]8 t! a: ~
  204.   return TRUE;- e  B3 r( M  q: R
  205. }, \4 s$ Z  k$ ]# O6 B8 j1 c
  206. * s* M0 }3 K6 ]+ t* s0 G
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    * Z* k3 K( Z& D; a
  208. {
    ( d7 N! y$ d( ]( c) l* q
  209.   char filename[MAX_PATH];
    % i5 `- L1 V2 [) o
  210.   LPUPDATEFILE file,olds;0 Z5 M- M; m# D# |7 X$ B
  211.   std::map<int,CString>::iterator i;* s6 _/ l9 |2 n9 c" z5 w
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    + q. q+ h, Y8 A8 C$ Q) O
  213.   std::list<CString>::iterator l;  Z- [. y7 H9 z6 Q, O. [
  214. * D: Z9 i! T6 X- {. k; _
  215.   if(bFirstUpdate)
    * Q3 H7 W% X9 A5 Y+ Y; F0 z
  216.   {9 D7 V2 m& N9 S: R
  217.     dwCurrFile=0;
    ' i2 J- ?+ A8 a3 t- ~* ]# G+ e
  218.     bFirstUpdate=FALSE;
    7 I' m9 G) f6 A3 F7 J+ R7 E; ?
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / w6 Z4 K, Z: T
  220.     {- C  E- T: s6 n9 d$ o, C7 G! {  l& U
  221.       dwTotalFiles=UpdateLocal.size();6 A5 ^& x. I8 o! h* Z$ I
  222.       dwDownLoaded=0;' b: j3 ^9 T7 t
  223.       bSilentStep=FALSE;  w# ?% r. }5 i. o
  224.       bCompressed=TRUE;" @( [4 F! |8 l% C/ ]/ ~
  225.       strExtLocal.Empty();$ j% n% W9 ]" _* {& u  @
  226.       strFullName=(*i).second;' l* R: k, f" e/ j7 k
  227.       dwProgramState=AP_CONNECT;  C6 H" n$ v/ N& H
  228.       return TRUE;( R, I  r* E; E" ?: i* s
  229.     }; c1 R5 [% Y5 D; a
  230.   }
    4 x, ^7 B7 Q6 f( K
  231.   else if(bRestartUpdater==FALSE)
    & ]" l' |3 ]5 e, k8 h5 H/ Y
  232.   {
    + D) L* _7 ?% A1 m
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())7 Q7 e7 r# ~- P, _8 [* Q" K9 c: `
  234.     {
    $ L. [8 Z/ ~* V  w( n7 G- Q
  235.       file=(*p).second;
    4 u+ I) g7 j4 \7 u
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    . G/ U8 w5 l, N" n
  237.       {$ E) U) A+ H7 G; [) r$ v
  238.         olds=(*p).second;
    $ [' V. s  h3 c# g
  239.         olds->vers=file->vers;
    4 o  r" r5 T0 E4 A7 a
  240.       }
    + i6 t9 [# n1 F5 _/ _9 k
  241.       else
    9 F, g5 k1 g/ ~4 D( C$ J* r! A
  242.       {4 Z2 t! q! Q  r5 @/ n; G! f; H
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* Q( g& }3 }2 C- y- L* p* H* X" T
  244.         memcpy(olds,file,sizeof(UPDATEFILE));% h, [( O* L8 W( r) D* K- b! H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));* b0 a$ Z! W$ u+ @
  246.       }% P8 v: X& H7 q  w% b4 K0 L6 G2 J% Q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    " \$ A) y% f2 `. a- x7 B! v
  248.       sprintf(filename,"(%s)",file->file);) ^9 T. r% U! T; {, c& M
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 c$ a2 }$ f% K% W: l9 P
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    4 d+ L# ]7 e) `1 z( b  C# {& C; e) P
  251.     }. T; w, E  }) i" v, w( S" {
  252.     dwCurrFile++;- C0 ~& e' D9 M' t1 Z7 e* A
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 q4 A) _8 P8 F
  254.     {7 Q8 z; R- b/ m1 U. I0 U! k0 U# X
  255.       bSilentStep=FALSE;& g! |0 v, |) I- v( Q
  256.       bCompressed=TRUE;
    " n' D, g* ]. \" P9 t2 Z7 X; ~5 p
  257.       strExtLocal.Empty();
    3 u. s; u; [5 h/ o" A# ~. [* q
  258.       strFullName=(*i).second;$ D5 @( x$ ]1 q. Q2 ~
  259.       dwProgramState=AP_CONNECT;) i; f: S- O0 \
  260.       return TRUE;
    9 x& v6 Q4 s7 D
  261.     }: @0 U  `3 y1 L! ?, X( [
  262.     if(!bRestartUpdater)( Q2 W3 Z  G& m/ q& x0 Y  c; Y
  263.     {6 U2 x3 @! t+ F9 W* ^
  264.       int iCurrSize,iFileSize;
    9 N+ g% u6 {: E+ r% _
  265.       iCurrSize=0;
    2 J& G+ g5 g4 m: B
  266.       iFileSize=UpdateList2.size();
    1 I: Z' |% q9 c1 P' T4 e/ [5 z2 d
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . e( }: h) @( ^2 X5 x( y; z
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ; \% P1 m; G' _( m# Q# L5 c
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");" N* r: f. J0 l
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , o3 L2 ~  |$ R- |1 g' y
  271.       Fclearf(".\\update.dat");
    " t8 \5 w  }- ]+ f  F4 Q
  272.       Fprintf(".\\update.dat","Bloodyf\n");( Q. _" q! w+ I* }- W
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + `6 C0 u7 \7 N2 P. E
  274.       {
    4 a9 Q: P5 v/ p8 [# {- a) v
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    $ g5 d! }1 M/ A+ p; K5 ~$ A
  276.         {
    * r6 g4 K3 Z" b2 A/ o7 D
  277.           file=(*p).second;+ d% R4 d7 Y! V+ s2 P
  278.           sprintf(filename,"(%s)",file->file);
    & C) K. c* z1 T7 R$ h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 |5 K# O& N7 i5 r2 C* a2 O
  280.           iCurrSize++;  r0 l% F- w, h. O' O/ B( [
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) v& m, {4 q6 J! B3 E4 l
  282.         }/ m' z2 u7 ^2 B6 i' V6 h7 A
  283.       }
    + k- q( R& I" _8 q% U
  284.       unlink(".\\update.txt");
    / Y: S  |5 `. Q) F9 X9 }" S
  285.       unlink(".\\update.tmp");
    7 r2 a6 q3 b6 v: d2 ~0 ?
  286.       Fclearf(".\\checkversion.dat");
    7 o  s8 P. \) a2 f! }
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);7 I, U. K6 d& Y# q
  288.       if(UpdateLocal.size())
    % @& r, G* @: M) F
  289.       {9 V, m- H. W7 S% w3 h9 U8 U4 z
  290.         UpdateLocal.clear();
    3 M* l+ j; k+ @3 U% X* p: T2 m& [
  291.       }( h6 N# [% J! i# a4 f! n
  292.       if(UpdateFile3.size())
    , \0 ]/ {" e& U  m0 i" ~
  293.       {! P& L9 V+ ^% g
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; e, P6 G: l1 t( b0 h- ~9 N+ q
  295.         {0 `2 B5 u$ ?/ H7 d# U
  296.           file=(*p).second;
    5 L/ c+ p2 _- _
  297.           free(file);
    # k1 _5 |# I& u
  298.         }
    8 W. N: M0 |0 W* T
  299.         UpdateFile3.clear();
    9 D6 z2 C/ Q8 P$ L9 j" b1 ^8 j  ^
  300.         UpdateList3.clear();3 N: y# q9 P( i. R
  301.       }8 O* Q$ B, J. \. Y5 U5 l
  302.       if(UpdateFile2.size()): L0 Q: I- h$ D2 b5 H
  303.       {
    $ c! ^2 I4 U& K& W, \8 Q7 }
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 p- `4 _& H- J
  305.         {
    4 w$ ~2 y: j- r
  306.           file=(*p).second;. P4 d8 a( s4 d+ u1 {. j
  307.           free(file);8 ^4 S5 H! \' N) v; {  w
  308.         }
    + k6 S& u; e0 A, g
  309.         UpdateFile2.clear();
    ( ^1 Y! A) C, g* O* U( p
  310.         UpdateList2.clear();& u  w4 q4 x" n+ I! t& d5 D) B5 Y
  311.       }2 m- H& S8 }) j8 E6 p* X& I* j
  312.       if(UpdateFile1.size())
    , j0 C4 C7 y& s
  313.       {' ~2 B- ]: w* s: C  T4 X1 f9 Q3 [
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 Q: c9 ?" J: Z$ E. c9 P
  315.         {) d3 J( v4 R# O1 X8 ~
  316.           file=(*p).second;+ {/ B( R8 E) H. g+ T
  317.           free(file);4 g4 ~- k* q3 p% A3 m  I
  318.         }+ N$ h- U! i$ J: Q3 \& m
  319.         UpdateFile1.clear();# y; o) Y( u% m5 z5 L+ k
  320.         UpdateList1.clear();+ H, z& v6 @) j4 a4 R$ R- z
  321.       }
    4 i, m3 e& Y1 K
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));6 p: I# \2 ^" T; r5 w% y$ \
  323.     }
    ; U+ M0 ~8 f: i2 V
  324.   }
    % B( H: p; L! n0 R9 p$ m  i7 o4 J
  325.   return FALSE;
    , q( [7 ]5 @0 @& N- t4 C
  326. }/ |: ~, a3 |( z5 T* s

  327. 2 ^" _; z: S/ k& e1 k5 @" Q
  328. void CRevAppApp::ClearAll(void)
    5 R' C7 w# h$ Y& }# @- u* B
  329. {& x" Q" ]1 S' S# }" c8 W( ], A
  330.   LPUPDATEFILE file;( A. i+ h" a7 q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 k5 V4 Z& ~0 v* l3 M0 V% x

  332. ; K# [; O" K4 l1 [  q1 u
  333.   if(UpdateLocal.size())
    ) b7 m7 B! c' ?% O1 @
  334.   {) X' n9 _* v, p7 ~  q+ B: [
  335.     UpdateLocal.clear();
    2 N) o+ J4 F6 r: e- q
  336.   }
    ) w9 D# c% A: k) z2 l) i* e# p
  337.   if(UpdateFile3.size())4 b( b3 K# w! w2 R8 k! G
  338.   {( N% {( c* Q* `- ^' U. |" R
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! y% ], ^0 k% D8 c. k, z; |
  340.     {! Z4 _4 m  X/ Y9 A9 O0 x0 }6 B$ z, j5 f
  341.       file=(*p).second;
    ) C3 n! u9 X# ~3 x3 u, H
  342.       free(file);
    7 z4 Z% O4 Z' z
  343.     }( r. ~. p/ P) d5 L' C9 Z( C4 x
  344.     UpdateFile3.clear();
    + R# \6 i" g/ {, x# Z5 H8 N; |
  345.     UpdateList3.clear();
    4 H% E- R' J4 M/ z/ M% i/ Q
  346.   }
    & u7 t; W; N$ F
  347.   if(UpdateFile2.size())$ M- W& S( c2 i: U7 o2 O9 \0 W1 [
  348.   {
    : N! m' S1 p, r) _! d1 V: f$ f
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    9 d4 |9 S. C. c- P
  350.     {
    6 S/ ]" p- o4 m9 C
  351.       file=(*p).second;. Q7 f  ^; O$ q) B3 q
  352.       free(file);9 I- f  t5 o% W5 I+ H: h) R9 f/ D
  353.     }
    9 V9 C8 I( m! O' R, I
  354.     UpdateFile2.clear();
    6 C! Q; T; w# D: S! \3 v
  355.     UpdateList2.clear();
    + ?& X8 E! U. q1 y5 e$ q$ A
  356.   }# S7 G* ~# r1 b( l' ]: r' z
  357.   if(UpdateFile1.size())$ A7 E/ H, x) G( s) \' L  F% l
  358.   {. ~  b3 Q4 a2 C4 M1 ?' q; Q
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' b) Q+ F0 ~! T! p/ D/ k
  360.     {% `& S8 E: C9 Y
  361.       file=(*p).second;
    3 B2 |; u9 U% y8 G2 E7 r6 i$ r
  362.       free(file);  k+ G' o; m) m. [1 V
  363.     }
      T* N+ C4 y6 f/ ~1 p, J: y2 z+ w
  364.     UpdateFile1.clear();' H5 a) i( ]: T/ M
  365.     UpdateList1.clear();
    1 ^5 [% t% A" ?% ]1 _6 J" ?9 P
  366.   }
    * l5 o# |" L, z4 o+ e7 A
  367. }    I$ N& n* W' J
  368.   
    $ p0 R! E' E1 {. `  P
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    / x) e7 l: y8 I2 K
  370. {7 }! s6 I0 f' J' t8 F' s: X  x
  371.   int c;( P+ C4 a5 M  y8 M* l. b
  372.   LPUPDATEFILE file1,file2;
    0 `5 ~& ]2 J' Q
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    # Z7 b1 U6 e% h4 R2 |6 Q" d
  374.   std::list<CString>::iterator l;
    ; w7 e2 B9 x3 D7 i; e7 r+ r
  375. " U- y: l1 l+ m' R7 S2 z
  376.   UpdateLocal.clear();
    ) p. ?$ [" Y! ^7 G: Q" f
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      R# y. Z/ G' \% T
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . Z7 t7 W( T, `$ I0 L3 y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' j8 q% }* Q6 Z2 R% j
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    $ |7 F, [  I" I4 O6 J+ E! `
  381.   if(UpdateFile3.size())
    5 L/ q1 X+ C: f. ~4 N0 l
  382.   {
    0 R: ?7 C* u0 {4 V
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    8 }  Y2 R0 y4 T* B( t! \
  384.     {  W2 ~" p4 _/ y' i( H
  385.       file2=(LPUPDATEFILE)(*i).second;
    ; Y" i  Z0 e. x7 e; B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' D: D0 [. o* t
  387.       {, M& w5 B9 G" g" ]
  388.         file1=(LPUPDATEFILE)(*p).second;
    % O) K6 Y% Q2 T) v
  389.         file1->vers=file2->vers;1 F) u, w* b! {& g  q+ q7 a- K
  390.       }( ~4 X1 H% a+ {( k/ E2 k; y$ t
  391.       else1 P1 |6 |6 ^0 I1 Y
  392.       {3 s; Z6 V+ w$ S4 Z# ]% k5 O4 {& ~) P
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 y6 Z! E! H& w, _1 ~
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    , j) j) D! Z& g2 x: ]: h
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& ~& X$ Y8 O; G* F1 H9 v" v
  396.       }
    - i! e, s' C& p5 L$ ]8 Q( c
  397.     }
    3 G# N3 @2 L) a
  398.   }
    " l: [2 @9 j  \5 X
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 a& o5 e! @* h8 |8 {
  400.   {
    # `. Q2 Z5 m! H, E8 L2 q; u4 g
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    / v5 H  o1 a) y* g
  402.     {
    # ]/ V0 G. }  Y, r( _2 ~3 r; p
  403.       file2=(LPUPDATEFILE)(*i).second;5 K5 p8 f7 Q9 E" ^  @) S3 A
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 y0 I# J5 W  P, g5 ^' y/ P8 G
  405.       {
    5 g& M6 ^4 m0 X# R
  406.         file1=(LPUPDATEFILE)(*p).second;% y6 n% e1 Q7 @9 o
  407.         if(file1->vers!=file2->vers). h' \6 C% j; X
  408.         {
    % X; ?2 m+ X/ U( o. s3 u0 @
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 Z9 f/ i3 [8 I$ P; N- b( ~
  410.           c++;
    * E. q) s6 a' ~( K8 F
  411.         }( Y. X, ]+ v4 e0 g7 Z$ g
  412.       }
    8 C' N- c& H( n7 S# v6 m
  413.       else
      e  x1 i" N2 B
  414.       {: n& N2 P$ y1 e& B2 r: j" u. ]
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 F3 v8 `/ |. q0 F! w  g
  416.         c++;
    8 ^* k6 F: ~' B: `) \8 J: ~
  417.       }8 d6 E2 l- d2 ?8 _  m$ y+ E% _
  418.     }+ q/ r( s( h' h. D
  419.   }
    8 `: h" g0 B* B
  420.   unlink(".\\DownLoad\\update.txt");
    * V& p3 C4 o* E$ U
  421.   if(UpdateLocal.size()) return TRUE;0 A0 S9 M2 C8 E7 r
  422.   else                   return FALSE;
    % I1 O. ]; {% V& s
  423. }
    ) E( P1 @$ g* }: d1 b( y# n. U

  424. $ U( j0 n+ `& v* _$ r( c6 Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 N2 x$ l2 U2 I4 r3 I8 c3 s; V( n; Q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ( g4 B& J. ?4 ]3 p& X

  427. * q# _9 L* S( S' ?2 B
  428.   l* F: A( v. t' u/ I3 e8 o
  429. ; W5 u& u) x9 v  d7 a4 w9 b& N
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( i/ ~  r3 ]5 e# c1 W. ^8 c3 a
  431. {7 u5 g4 O" Z6 |6 j5 f9 `( f
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ! v' p; y6 _) l2 i. p4 i3 j
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % o  ~# ~- n4 b8 [; j6 Z5 J
  434.   {3 a- ]/ l+ Q$ M3 t. B! F4 \3 ?
  435.     char szLanguage[50];2 i( f0 {' m) E  e( W0 |
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( m9 s; u9 g7 p! I0 D: g! g- ^- C5 g
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ w% o, E7 p3 J3 y. g' }0 W
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;% S& Y' g! C7 b/ C9 w9 b2 V
  439.     else                                   m_iLanguage=ENGLISH;
    # n/ D: X& W$ u# c/ x) N# v
  440.     char szRegister[100];
    ' q) A$ Y  A+ p9 X: q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");$ r( G% Y' ~; d! S/ X
  442.     strRegsName=szRegister;$ v. q4 y2 q& \
  443.     char szPatchURL[100];
    9 u; `' ^5 h. Z
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ W, t2 l6 {9 Z, L' Y6 C
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      X; j/ `0 K1 d* {6 n
  446.   }8 x; }1 B3 Y5 h; ]% i0 J
  447.   else  ]7 w" ]" e( w5 {; |; x$ r# Y
  448.   {; t, u% v$ d' l
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 |0 }1 [& {$ A( N' b
  450.     strRegsName=DEFAULT_REG_URL;
    * _) H+ O( u$ l8 j! \# [5 `( d
  451.   }' W, b0 @; v' g$ U$ B4 Z+ {) {
  452.   if(GetFileAttributes("hosts.ini")!=-1)1 I# o) w# T+ \. E- O1 l. r
  453.   {1 m" s; U% K4 C- A& g
  454.     char szIP[50];% b+ I/ C) ^7 T9 F- F. u; g
  455.     char szDIR[300];  {; }2 T* I' b1 M
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))9 p6 m1 n7 ^- r- ]( V+ j
  457.     {+ ~+ {7 [7 b, r5 T: ]8 j& l3 V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");# u% F0 a, ~) ]1 C( c
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
      C* \, k  p8 ?% I7 k% v4 J
  460.       strHostName=szIP;
    ) o- ]  n: R) _) ?1 ~! X* u. T
  461.       strHostPath.Format("/%s",szDIR);& h4 d5 F. n' [) d0 }
  462.     }
    6 L  J) K! \* ^* B8 ]% ]0 j& D% ]
  463.     else
    . u8 V8 V2 D) A! R6 m, ~1 R
  464.     {0 _. U. D% e  E$ L$ }% {6 D5 {
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- D% m! |- |! H
  466.       {) N4 o: d( Z: |3 p$ [
  467.         char szLanguage[50];$ [7 z6 v  K3 e. m$ |
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / g2 \, Y4 d( p
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 D5 @& W' V/ h$ ?
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 n, G3 ]4 ], m6 n' F5 x/ b3 d
  471.         else                                   m_iLanguage=ENGLISH;4 Y% C& T0 Y! w- g) i. c1 j
  472.         char szRegister[100];* X) r' r+ c8 ?: w! a
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  i$ |$ r1 N, D1 W% w. l
  474.         strRegsName=szRegister;
    ! [3 F! G0 O- x* w
  475.         char szPatchURL[100];. Z& F8 D4 k8 g0 S5 Q& U
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");0 k1 L1 V$ d+ X
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 R# L& w; B2 O. }$ n% w0 C9 k7 ~" w9 W
  478.       }
    3 t- ?# u- I! i3 O) T4 l/ \0 T
  479.       else$ r$ R$ a- C! c: b* ]
  480.       {
    5 Q$ a8 j0 B! l
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 \5 i8 \9 O( A. v$ U. Q
  482.         strRegsName=DEFAULT_REG_URL;
    # j* x- D) S" [7 @9 }6 n* U
  483.       }) y) x4 n0 E/ W/ y) I
  484.     }, Y( l( v$ A: u1 l
  485.   }
    7 v" ~3 F2 }/ ~* I- u" }
  486.   return true;
    , u8 u- R* H- U* T( I
  487. }
    0 H0 X/ e) d6 h+ N
  488. " X5 n/ p/ G/ G; g1 c
  489. #include ".\ZLib\unzip.h". {# t" ~% d/ K* B, o
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);) w& c; X. @0 d+ `% b
  491. /////////////////////////////////////////////////////////////////////////////7 J: J+ L/ L6 |& p
  492. // CRevAppApp initialization
    , C- o4 A/ R. n7 e2 Y

  493. . X" a& {& H% U! B! @. n
  494. BOOL CRevAppApp::InitInstance()% j0 [  f' L  k1 U2 q
  495. {
    - y5 |( S. Q2 o& J* p
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    3 C' y7 X. _, l
  497. 8 J( d2 B8 ]! {, d" D" {; L! c3 H
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' a9 X% u; z. \9 ?5 \1 }: g
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    - f6 w4 n/ ^. r: _+ e: y
  500.   {
    $ t) U, S, c8 v, F
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");# ~: g& Q0 n' `" v
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
      l! R7 L8 w! d3 O& E/ z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    & ?: m- A+ [. S4 p
  504.     {
    0 l% {  V, ?9 s, _  }
  505.       strcpy(szPath,szPathTarget);
      Q2 m! s9 K1 r6 j9 D- C2 Y3 I( m
  506.       SetCurrentDirectory(szPath);, K7 W! n* N5 O/ V9 e: t. z
  507.     }
    ' `, o" g3 {- X0 _" x7 f9 i
  508.   }
    * `7 S+ T# o$ b; j8 [
  509. #ifdef _DEBUG
    7 Y: m# @6 d2 l* Z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 `0 v- i3 s2 k5 u5 A: n& [1 ]5 W
  511. #else( Y/ j1 H2 W7 v4 b- M# v
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    : F( Q( k6 m2 I& c
  513. #endif9 A! H) h. i/ _! l3 r
  514.   {% @, f1 X$ L; k9 t/ X
  515.     char tempFileName[MAX_PATH];: X; X0 |  @) T; U; M8 w
  516.     strcpy(tempFileName,szPathSource);5 T& ^% M& E8 n! S
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( u4 m# y) R* g3 \1 Z% s4 H
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    1 R$ E! q6 k$ ?) v
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);" _: A& F" z( o5 C2 [2 h3 Q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    % j; e# A" A8 }# E# B3 A# T; Q
  521.     return TRUE;
    - b- g- ^( j, L( [7 z7 g
  522.   }
    0 A; K9 o' F1 |+ ]
  523.   // Nuke 0118: Delete run.exe9 Z0 p- s: w" [  t
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );0 E+ y+ R0 `4 c6 ?" F
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");8 b% v& Z( l$ b5 k7 K$ t0 j
  526.   if(!ReadCfgFile("Config.ini")), s" i1 L  h3 n( Q
  527.   {
    2 y: T; I7 y  {4 _( p* I% Y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 u4 I# y% H" r1 Q* P
  529.     return TRUE;
    / P) v3 b' a/ p+ c) O
  530.   }
    % o; {# w* k/ }2 {6 }
  531.   HANDLE mutex;
    ; [3 F! Z! M5 U
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ f  l& J+ ^% |9 ]2 o! e8 F+ P
  533.   {
    + D5 t, w; L; X+ ~. Q( s( e  r
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ) F5 K, ?0 p2 E: f, i
  535.     {1 Z: d6 {% @  _* L* R7 f1 ^
  536.       CloseHandle(mutex);
    ! E2 u4 o3 W1 Q' {6 x$ \! |' I
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* v" T) R" R1 H8 X
  538.       return TRUE;
    2 Z; u$ `# g; n4 f" B
  539.     }" x- v* Q. d, n$ L2 ]* p
  540.   }  
    , h1 C4 z  K- D# {5 h- E
  541.   CloseHandle(mutex);
    ; d; p( U4 i" F$ E8 B$ N

  542. , \6 X2 e' `- ^0 q* h1 f
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    1 J# k- J! T" T1 _; \

  544. % M- u# D$ b  [
  545.         AfxEnableControlContainer();2 A& a/ k4 J  Q9 f1 t' u0 O

  546. : ^6 r8 r; @4 M  C7 U, ?1 ^
  547.   bCanUpdate=FALSE;
    : c. e0 A3 P) z. U
  548.   dwStartUpSteps=1;$ ]9 c! U8 j5 g2 v
  549.   dwProgramState=AP_NOTHING;. S( \- V$ ^; z
  550. % v# ^9 z' V: e  P% }  q" e
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);- |" K( v5 |6 [" ]0 b/ A) l, J! _3 j

  552. 5 ?: E- l' j* S  R9 x, y& l
  553.         // Standard initialization
    & i/ i# I) d8 C1 X1 O
  554.         // If you are not using these features and wish to reduce the size9 u6 g9 T& Y4 k8 d3 X0 @" z6 ?. S, S
  555.         //  of your final executable, you should remove from the following
    2 p6 ^5 _2 S1 [: l/ F  T: O
  556.         //  the specific initialization routines you do not need.$ p( D+ H: x. n

  557. * o: \0 |. Y2 c. X" t" ~7 T( w
  558. #ifdef _AFXDLL" }, v, l0 E- |2 _6 `! w# k' Z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
      s3 y$ F0 i9 V9 G5 E% E4 `
  560. #else$ d. P' E+ ]0 z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    4 Q+ ~2 t# I) S; F. v
  562. #endif
    . w  P4 K& q2 z( c) k. ]4 l

  563. 7 Y6 r% [! n  {
  564.   dlg=new CRevAppDlg;7 W+ u, n5 p4 c" J* P4 d( S; T
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    0 @$ T3 ~4 r. K, T
  566.   dlg->ShowWindow(SW_SHOWNORMAL);. ?* _0 e* _6 _" m& L, P; _" I
  567.   m_pMainWnd=dlg;
      r5 }4 O5 h3 |9 }7 Z# Z

  568. ! A! M& W$ n1 i" [3 o' S. X) s
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);% G/ O0 m  K" k9 ]( H$ F- D
  570. 0 ]* C- P& w& N  n# }
  571. //  GdiplusStartupInput gdiplusStartupInput;7 [+ ~; b2 p) y; J- d
  572. //  ULONG_PTR gdiplusToken;% X  `+ D" C3 {* z
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    6 [7 i& L# V( |$ ^

  574. $ N1 b+ \. t: w7 r5 z, m# I# E/ x4 e0 Y
  575. //        CRevAppDlg dlg;
    6 F6 U' e- n) l
  576. //        int nResponse = dlg.DoModal();  \5 x) ?& a$ x/ t
  577. //        if (nResponse == IDOK)6 R9 |! J8 y; r! \
  578. //        {
    , h. N& X7 g2 H. H, H3 @
  579. //                // TODO: Place code here to handle when the dialog is2 N) p* Q) ?- u( I" n7 ?- [
  580. //                //  dismissed with OK' e1 Q2 U, @# p: k' g
  581. //        }) S5 h: O$ Q( I6 {5 N& X
  582. //        else if (nResponse == IDCANCEL)# Y+ C; k' N, J7 K, O3 b
  583. //        {  n* O# a' z9 w4 Y0 f5 H
  584. //                // TODO: Place code here to handle when the dialog is
    9 q8 U( \0 m8 X# a! \; Z0 X+ y* L& I
  585. //                //  dismissed with Cancel9 S1 ^$ }; Q/ ]. M3 _; A' B  R: T
  586. //        }5 S7 g3 b; M/ `

  587. $ Q! ]  s3 _1 @( z: H& Q
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    4 |% W- l7 M9 Y' y
  589.         //  application, rather than start the application's message pump.# A6 I) A/ B4 t2 e' _! [
  590.         return TRUE;
    . {. X" ?# `1 O! `( A# b
  591. }
    : f4 _5 o" R- V
  592. / x% q" m$ D- d  i) ?; N6 P& {
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * ?" v1 e5 f  m5 l5 I* U
  594. {
    ( M$ o8 k5 l4 t, T6 J4 m& u# a
  595.   int i;
    4 p% T& P1 Q$ q7 `2 r7 c6 G
  596.   char *szRet;& D+ K$ a, q% a( d0 D. o, n

  597. % n3 y2 e, q0 o6 r. v
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    8 [+ x0 n) g* N( W
  599.   if(sztoken)+ K2 C9 k# ]# Q& U3 _+ S  c
  600.   {; k6 R  V, X. V; P3 S
  601.     szRet=&sztoken[itoken];
    1 i1 \3 [% ?7 a, e1 n  q* ]% P
  602.     while(sztoken[itoken])
    ! j& S5 J% X6 h+ t8 X$ {( R
  603.     {
    / X: S' r: h  a) {
  604.       for(i=0;i<(int)strlen(token);i++)) f5 {" l; M) f" F1 F9 k
  605.       {" h: @. o. ?+ N  @- y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    , h0 _# s$ g0 ]8 A  ^  M) ?8 [
  607.         {
    + m/ O$ H/ t" F  u
  608.           sztoken[itoken++]=0;
    : j& G6 M5 ~3 Y& j
  609.           sztoken[itoken++]=0;: m, b4 W: `! C% X; ]7 n7 L2 \
  610.           return szRet;6 m) t9 ^: K) q2 W& H
  611.         }
    & ^+ x5 m7 p; @8 H5 \
  612.       }
    ' X# q$ c  Y: d+ x, w: H) r  A7 Q  O
  613.       itoken++;
    * V4 g& [) k8 m9 o/ ~4 ^
  614.     }4 B# g; Y. w4 E+ Q
  615.   }3 W. j1 m# z4 }8 ~7 `4 Y0 ?: L
  616.   return NULL;
    6 q) X& f2 z! C2 h2 i( `
  617. }
    ( ~/ m9 G. b1 H& a6 ], q

  618. & K# A& l. _) R1 g; o
  619. void ProcessProc(long Total,long Current)
    & T, e: D" a2 i: O! ]
  620. {+ o* K9 U+ T" e) h, E5 _' a+ w
  621.         MSG msg;4 V: f5 T1 V  I* m
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);- z9 d6 a( K. Y) x- I7 _% S5 b8 F/ ~
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ! j+ Q; K/ {) \0 K* A6 h) ~
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))9 w( D! e' F' E+ g' @  V8 \3 j& J
  625.         {
    4 w! p& e3 Q* R1 |6 h
  626.                 if(!GetMessage(&msg,NULL,0,0))2 t: E2 z7 i! p% f; n! t' V
  627.                 {
    ( u4 |0 H" V) G  c4 M+ V: H
  628.                         return;
    7 n. E8 W, @4 I* C
  629.                 }7 F3 Q; k/ q% ^  P2 ~: j" D0 U% A
  630.                 TranslateMessage(&msg);
    5 ?* p1 u* R9 s
  631.                 DispatchMessage(&msg);
    * c6 l! ~. p- S4 M" p
  632.         }       
    $ y# v0 U+ G" e
  633. }
    & T) f( o5 V* ?. G" c8 p) h

  634. 3 m% g  w& p/ D) Q: z2 o" K
  635. BOOL bFirstChar=TRUE;
    # }1 Y' C8 P0 N7 d9 c3 m2 @7 W& @
  636. ' t$ o" _' V5 X
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # d- D* \& w& v6 Q( h& \
  638. {
    , x0 h& K- H! b9 f. O- [
  639.         // TODO: Add your specialized code here and/or call the base class
    3 a5 M1 ~* \6 t+ E. Q; E
  640.   switch(dwProgramState)$ ^3 o3 {6 G7 h+ c, h) z
  641.   {. H; ^! j) w) N% E! D7 O/ S
  642.   case AP_NOTHING:
    4 ^+ U" G4 _" R# n' q
  643.     switch(dwStartUpSteps)$ e+ K# _* \# t! q
  644.     {
    - T: l" k* C* i7 }) l  R
  645.     case 1:
    & `2 Q7 V# S5 V( {, t
  646.       {/ ?& ]6 D$ R8 l
  647.         int i;
    , [2 V2 J0 A2 L. Z& l
  648.         CDC *pCDC=dlg->GetDC();  l+ ]7 ]( V1 V; b2 l: \: H( ?
  649.         HDC hdcwnd=pCDC->m_hDC;* @& d# E* \  G
  650. //        Graphics graphics(hdcwnd);
    . g( D2 `, j- O! r( H) d& x
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    6 ?- L7 W- d& x8 P' j
  652. //        INT iWidth=bitmap.GetWidth();8 k; ]7 J0 w6 O  E5 w
  653. //        INT iHeight=bitmap.GetHeight();
    6 i* m+ t" w1 s% h4 m
  654. //        Color color,colorTemp;# w' }& J+ m3 L* L7 y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++). t$ |; L1 n7 d; G1 J
  656. //        {
    2 s( k# M! @* Q- R/ \' X
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    0 x. B' P4 i9 `7 {6 q( x
  658. //          {
    & t( B$ {3 H" x& e
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    % s% r+ ]* u) q( f9 \# g
  660. //            colorTemp.SetValue(color.MakeARGB(7 ~* s1 f3 {9 p/ n6 I: {1 S& i& V
  661. //              (BYTE)(255*iColumn/iWidth),
    7 @4 n9 w! I9 E7 N
  662. //              color.GetRed(),9 }; }3 U5 D6 Z& c+ M9 ?+ x
  663. //              color.GetGreen(),; [& M; A# l# P( c/ r! H0 K
  664. //              color.GetBlue()));
    ' S/ t5 H  S/ L* Y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ( Y% a8 o" U8 }% O6 e
  666. //          }
    * }( a9 p9 ^, g+ \7 j2 ~8 S
  667. //        }
    5 A, k& n2 _. b; X4 T6 U( a
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ' ]9 ^$ l. k: R2 C2 |1 A; G
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# k" ^: s$ c+ ^. B
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");0 m/ W  M* Q8 B
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ }7 q3 }. E9 @1 r8 B
  672.         for(i=0;i<240;i+=8)
    . v$ w$ d$ E4 U! h
  673.         {
    ) N+ g* O; u: e
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : U  i7 u* @2 o! w, [, y2 d
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ \1 E# C- X; K1 R0 n
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ L; L4 i% V9 j6 H2 h2 h; Q$ X6 D" A
  677.           Sleep(33);
    2 ]* X! l, c0 u
  678.         }
    " |6 Y$ A' m& y
  679.         Sleep(1000);
    4 D  d( _5 C* \
  680.         for(i=240;i>0;i-=8)
    ; r4 F% `8 f8 p" @, N
  681.         {
    4 f5 [0 l  J! a% `! C/ n
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 [$ f6 j2 g2 g6 V8 \* }/ ?5 V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 Y1 ]- H! {9 [( g
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" [/ k1 \( c& I4 j* ]" q% X+ U4 q
  685.           Sleep(33);
    $ ~3 r8 v  b7 b2 d+ _5 ?
  686.         }9 B6 o: d2 h7 [
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);4 P& M. n& S) U3 V, n" z
  688.         dlg->ReleaseDC(pCDC);% o9 L3 O! L2 d) u8 d
  689.         DeleteDC(hdctar);
    ) S% T; K( p0 f+ C1 F) j" |3 [
  690.         DeleteDC(hdcsrc);: q5 p& @2 m4 D5 b+ R* r
  691.         DeleteDC(hdcorg);
    1 y# B. C! s% }. J- h
  692.       }% n# Y1 Q7 R3 {8 T9 G4 U( c
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);1 G8 q1 S$ A" `, }& }% h) o5 T
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    - }* r6 q6 ]% z0 \$ n$ _
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    + E. {* ~( g+ M
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- ~/ U8 r! X4 d8 P. v& |" N
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : G1 p' P1 i& Q2 z6 a$ Q
  698.       if(!Dn.Connected())' H0 l6 q8 f+ S  V6 o
  699.       {; y: Z/ R+ L9 a5 j! U/ u
  700.         dwTotalFiles=1;
    9 u2 F, B  i. R& T6 t# K
  701.         dwDownLoaded=0;
    2 z  m9 u7 i* t- Z" a
  702.         bSilentStep=TRUE;* F6 B3 J/ B2 U' Z7 }3 O2 e: d2 q
  703.         bCompressed=FALSE;& X$ W, G. `1 X, J
  704.         strExtLocal.Empty();4 t8 ?5 X6 m3 U( F6 Q! ]+ a3 ^1 k4 L
  705.         strFullName="readme.txt";" r, |4 K5 K4 ^) [* i! K
  706.         dwProgramState=AP_CONNECT;
    ' o: ?# m( ?' E' ~9 O
  707.       }  l: p2 r6 B0 Q* c$ c8 E/ g
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();' ]+ t4 ]' ?( T" U% A
  709.       dwStartUpSteps=2;* E7 H. j8 ?5 H; U1 `% p
  710.       break;
      w2 ], e  O: F
  711.     case 2:0 N( \; J! K/ c% Y7 F
  712.       {
    ' a  Q+ [! P) Z' g5 |  A7 P, W
  713.         int iEOF;
    , O/ S6 @: y3 ?/ X
  714.         FILE *fp;$ b- N7 T) U! D* F
  715.         char szString[512];( u3 q' D6 y& {# Y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    + q  S) Q' V* V! C
  717.         if(fp)
      H& Z4 W) Q0 O! T
  718.         {
    / ]3 w* {, m' \, ^2 c3 _
  719.           do9 N  D+ o3 ?6 c9 F' a0 p4 q' i
  720.           {
    / k: B5 q  X3 e9 M, D9 B; O
  721.             iEOF=fscanf(fp,"%s",szString);
    5 D; p& V3 ^# ]! h, v# r2 S6 ?
  722.             if(strlen(szString))
    4 O2 l/ P. x0 d* ^# X
  723.             {
    ) J1 G! Z! M1 ^3 G
  724.               if(bFirstChar)
    ; }6 W; R$ j+ }+ t2 ^# t$ |
  725.               {
    9 L0 p* o$ T' E) Z6 J+ H
  726.                 bFirstChar=FALSE;
    , k) Q& y" x5 e- A6 k$ E& ~
  727.                 bConnectIsBig5=FALSE;- u8 B5 x. K, i9 r
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;* R/ Y% y0 u% ^! P# {& b8 Y2 [
  729.               }0 p( B- y3 z) [( p' B$ T. ^' U+ `) _
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ( b0 H; \9 U6 _  m
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));: u& ^- C* _$ E7 |* L
  732.               dlg->m_ListText.AddString(szString);
    6 b$ \, H/ R+ c
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 ^& {. E0 Z* m- k/ `3 G4 U% _# O
  734.               *szString=0;
    : V9 R" Q2 e4 x$ C
  735.             }
    ) D1 A4 g2 @, T0 x1 I- g
  736.           } while(iEOF!=EOF);& f$ e1 Z1 ]2 o: r# h" a
  737.           fclose(fp);
    . g4 |$ ^7 U3 p! b
  738.           unlink(".\\DownLoad\\readme.txt");
    ; q0 M! s# S1 d0 n/ {3 V
  739.           dwStartUpSteps=3;5 j; p8 Z2 |7 e2 ?
  740.         }( b5 _' c5 ~" m& a
  741.       }
    8 I' U" n' ^* G' m1 ?) B
  742.       break;/ f. Q5 s$ t9 T  q
  743.     case 3:/ R# B& r  h8 ~# l5 D9 T6 P
  744.       if(!Dn.Connected()): N- r4 u; ]) i4 Z7 W" Q
  745.       {0 P8 ^) G5 z1 v( L$ G: \( L7 w9 \
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    9 B0 k* T7 I1 b! M
  747.         dwTotalFiles=1;
    ! m: j( S+ T% I! i6 C3 T
  748.         dwDownLoaded=0;
    % z1 y. x+ k+ N3 d
  749.         bSilentStep=TRUE;
    ' g/ i. E6 ^, g2 x- w
  750.         bCompressed=FALSE;
    7 z; _$ M  P) \* \. f
  751.         strExtLocal.Empty();
    # K! T' e: y5 ?6 G+ ~/ C2 r5 F& S
  752.         strFullName="checkversion.txt";, m& T% M8 m% `; l3 E
  753.         dwProgramState=AP_CONNECT;% N! I9 I3 T& I+ r1 p3 ]6 z3 G% x& w
  754.       }# s) ~" a2 H6 y8 @0 f9 ~# }0 d
  755.       dwStartUpSteps=4;' e8 A# ~" J/ e* t) j
  756.       break;! Y: e1 p# Z  R0 U* B
  757.     case 4:
    3 n7 `$ ]& c" x! ?- F, j$ s
  758.       {
    : [  T4 V) r! [" F' P  i( j+ B, q
  759.         FILE *fp;' A- Z8 V' t6 I. B: ?; {' e7 j4 @
  760.         char szString1[128];
    4 e& B3 o5 z7 R' r  r- S6 u
  761.         char szString2[128];
    3 F# A. `% V$ g" M' `  q' q5 U) o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");; s. E* n( s1 J  @
  763.         if(fp)5 K5 W, W8 Y6 `8 R" I: r
  764.         {
    ) A9 z" f8 X1 ^: e/ N" a
  765.           fscanf(fp,"%s",szString1);" p; o1 J- n8 I9 Z1 P1 t
  766.           fclose(fp);. e6 M% k( G3 J4 D0 M; W& `- y- ~
  767.           fCheckVersion=atof(szString1);$ [: J9 L$ [. b5 g
  768.           fp=fopen(".\\checkversion.dat","r");' A, B& e$ o/ B) P& t5 a( w1 @
  769.           if(fp): K$ G! u% K9 X; R
  770.           {
    , ~9 a  d6 ~: ?( }9 `- j0 \  K
  771.             fscanf(fp,"%s",szString2);
    ; y: a( M6 ?3 }, {1 o. S
  772.             fclose(fp);/ F6 d' p( K* w  a8 K; ]
  773.             if(atof(szString1)!=atof(szString2))
    * M+ S7 L5 o1 J5 _) X2 n' N# ?9 _
  774.             {
    $ z! E( _  Y& [  O( W
  775.               if(!Dn.Connected())
    ) o2 _* f  k* @6 w8 O( X
  776.               {, A( Q( d" O9 R* U( K/ }9 t0 L
  777.                 bFirstUpdate=TRUE;
    1 d. k: }5 T  o8 @2 i  `0 r1 d
  778.                 dwTotalFiles=1;& u# T' ]5 V& _1 c8 W' `
  779.                 dwDownLoaded=0;1 A6 _1 Y+ a/ M7 S; P: o& u- J5 w
  780.                 bSilentStep=FALSE;
    . E+ G5 s0 K( k! p
  781.                 bCompressed=TRUE;
    ! ^4 r/ S) [- |, ?: _
  782.                 strExtLocal=".\\DownLoad\";. x, w! \% M4 m# H9 A0 w
  783.                 strFullName="update.txt";% x5 z0 Y. `) d/ n% [# W
  784.                 dwProgramState=AP_CONNECT;2 l. |/ Z. D. t9 X2 w! y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 ~# k2 i. j* C1 f/ f
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# J5 i8 s; v! ]/ `! s; D
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");5 g3 U3 p7 e7 e) Q& d9 `' G
  788. 3 [. S$ a$ V, F" n8 @1 o
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* @" S" Z( |0 w( k
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    4 `: |4 P, y' Z6 w# r0 H
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)# T# L) w, h  f/ V
  792.                 {
    / C% X9 p! r- K3 G, _; p
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");5 m5 X+ ]/ c! }2 t
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* z1 L  z* P) _" G3 I: t' ]
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 K, a5 }* v$ o4 b* e  h, m
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 v8 |3 g1 ~% ]. t0 B
  797. 5 A7 f- z* h' T
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    5 `7 e. h; a# g: H
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  X- a3 A* j5 E' S. S) q3 [$ Z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    1 \5 I$ V" {: U
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      O' \1 s3 S  f1 w, Q! g4 a
  802.                 }
    # ~! y% q. A4 }0 r* @
  803.                 dwStartUpSteps=5;
    9 _' a9 ~6 Y( ?' B% ~* Y! M
  804.               }
    8 E( e: E0 W8 I6 O
  805.             }
    , u, c1 M  m( i9 Y( V, v, _( B, y
  806.             else2 N: t- J$ f* E
  807.             {
      o0 p8 s" L* H
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ( E% f" V5 a7 k8 T5 I8 M( {0 C
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ U5 j; W/ x( c
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % m; T$ \3 n3 h
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    * r$ ]5 R4 D6 w5 `8 k( u9 ^
  812. + D$ C' p0 m7 z' ^) \8 t$ d" `6 s8 N8 [
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% Q* `5 [; x( p! n0 C; k
  814.               dwStartUpSteps=99;& D4 _5 }, a- w' I) @
  815.               bFinishUpdated=TRUE;
    / Y6 `4 ]( G+ \4 f8 u
  816.               bCanUpdate=TRUE;
    0 H: Q; }. o2 b+ g6 L
  817.             }9 Z% b4 N6 j2 F) t4 A. Z7 U: I
  818.           }
      a! w& m9 s. b& E+ f# m
  819.           else: C; i3 i7 z: i* m
  820.           {  m% `$ W4 y) h* z2 P% `
  821.             if(!Dn.Connected())- f/ b( V' K/ K6 w# m7 S" I
  822.             {
    3 [6 b$ a2 K* @$ ]0 F; E5 D
  823.               bFirstUpdate=TRUE;3 N- c( T9 i5 {5 _; v/ _" _, j
  824.               dwTotalFiles=1;" s. P5 S/ q6 B' @0 O3 p
  825.               dwDownLoaded=0;
    / e4 _5 y; u, h( c0 V
  826.               bSilentStep=FALSE;( C! c; l1 B& |/ H4 @' f
  827.               bCompressed=TRUE;
    0 m8 W' p; U! a
  828.               strExtLocal=".\\DownLoad\";8 n* @# F0 L. J6 ^* s; |
  829.               strFullName="update.txt";8 I9 N; Z8 j4 Q* k4 G
  830.               dwProgramState=AP_CONNECT;' b/ M* o% y! w" K7 d  D* m: f
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + O3 `3 x. A6 Y, }
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ M7 u1 y5 b0 s# X, L6 _
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");7 G" T4 [3 B) W2 Y% \
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ U1 T% z$ u! d4 t( d
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 m$ ?0 u2 o- ~, a( z7 J7 Q- |2 n* I
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)) ~; v) T$ I$ W) r" `, z. N
  837.               {
    # Q! I7 ~; M0 ^( }; e
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    * Q1 z- g( G  J7 u# h
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    2 `' q. L+ q% z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    / x" G. f! R# E6 j! P: h* H( D
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ q. J4 w/ Z9 @) n% [
  842.                
    & j6 F# T- [3 \' l% L8 a  C+ z$ c2 x
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 f5 G# Z/ ?9 I- m+ i. n9 _8 }
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 D: O+ f, a* N' v" ]. t
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");' Q- h# |" l! z( l/ L4 u
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. R7 v( I9 b) G. R1 k
  847.               }! A8 U1 `# e4 n
  848.               dwStartUpSteps=5;
    ' O* t& {' g- P
  849.             }- g9 M: Y9 |7 t! K+ `! W7 U
  850.           }
    6 F, P" b$ p9 I8 K9 G" m1 y# y' C: l
  851.         }- q  T2 \/ }9 o: {3 C- e
  852.         else) h% k# N, @6 k4 R5 h0 k2 O1 T
  853.         {
    ) Y; d* N1 Z8 o1 q% ?/ a' z
  854.           dwStartUpSteps=3;3 x& D$ B2 y1 [' {* w
  855.         }+ W. D; ~6 j0 l" S/ V) Q# j
  856.       }
    ) `' ^# M; z: {* U( [
  857.       break;4 e8 }) c, r: G- P& B( g
  858.     case 5:& @2 t. f& F7 K" F+ {
  859.       {1 ?5 V! I! T( q6 Y
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): `/ l9 k1 w' P. X2 A
  861.         {+ F: Z* M3 H( j6 ]  h; Y5 Q
  862.           int opt_overwrite=1;
    1 z2 E" n# V" W& X' i. _
  863.           int opt_do_extract_withoutpath=0;  ]8 U  W# s0 b8 S, f9 A/ n
  864.           unzFile uf=NULL;: P( r; S9 _( p5 q8 i& D( I

  865. 4 Z) }! {  H) M2 t
  866.           uf=unzOpen("Wsa.zip");
    : L# \/ a3 w& E3 g7 e
  867.           if(uf)
    7 ~# _$ J$ g8 u) ^: O$ T# W, D" y% {6 l
  868.           {2 }: `* B3 F; n0 _/ g; C% I5 h
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    - N) a+ q- T7 V
  870.             unzClose(uf);
    . B  O( W! S% V; s  y+ h
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");$ b7 U0 e9 d$ q% E6 s
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");& h/ Y! a. ^9 h! r6 i1 {2 E
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    # S( V, P" M: V& p+ k8 e! w0 z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: R. [, a9 t+ Q8 ^: T% P
  875.           }
    , f0 e1 \) V0 }" d
  876.           DeleteFile("Wsa.zip" );
    ! u' x5 q3 K0 M8 i( x
  877.         }! ~2 X  j1 {; H  W) N

  878. 8 }. b8 ]$ R, L+ S, g
  879.         if(CheckLocalVersion())8 ], D; d: ^1 ~5 i/ u
  880.         {" \8 }1 v* ?& @3 y& u' o
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    , z; h7 }; R+ ~! ~9 f
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ( L# C6 n5 q$ _/ {
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");/ `) @: u, U8 U6 |' \
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 d, W) d; E9 h: r
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);% O* q; l  t# D3 C
  886.           dwStartUpSteps=99;8 H6 q' |' l$ y  ?7 }
  887.         }8 I! s- O+ N$ C5 Q+ H" H
  888.         else
    9 [+ F5 m1 }5 f) ~5 [
  889.         {+ L& E' T* W: O# P# Z/ c& u! w
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 v. l: ]0 n7 E3 h. ]. M( _
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& b; \! m2 |. c; U; Q! |
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ( J0 g$ O8 H, Z: n& e+ e% }( D

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-8 15:12

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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