CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
4 X& F. x* _' q% \- w* I' I) w
  1. / RevApp.cpp : Defines the class behaviors for the application.
    2 Z2 e- a# p* y5 t$ Q) x
  2. //0 `3 _; e, C' E& u0 f4 H" i! q
  3. . }8 w7 _/ J' Q4 q4 G. V4 O( Z
  4. #include "stdafx.h"$ m* z7 Q5 i, i/ r

  5. , f8 D' ~3 I: r! v5 V! `
  6. //#define UNICODE
    4 P: [! U$ \3 r5 p) B5 @7 v% n
  7. //#include <gdiplus.h>4 w! t- I' u, j3 z! D: k+ l/ S. H
  8. //using namespace Gdiplus;( A# {7 q: a8 O! W4 j1 O( f) k

  9. ) l5 o2 b, C' a3 K/ \8 O' @) [
  10. #include "RevApp.h"
    ! h& v6 E. @. t; g. D0 |
  11. #include "RevAppDlg.h"1 z, f0 P4 J: e  P1 E5 i

  12. : P* ^$ a8 @$ s* K: h' j2 N
  13. #pragma warning(disable:4786), W+ H& Z1 h) c
  14. #include <map>6 ]" }# K( ]% J
  15. #include <list>3 L2 ~4 ?& M6 N9 j
  16. #include <direct.h>
    1 A9 }7 y5 x0 D' k; f% H" w6 [
  17. * j8 A; V* i- {- F& L9 p. A
  18. #ifdef _DEBUG
    6 a: |9 J2 M% J" u# x  c- P
  19. #define new DEBUG_NEW
    , F3 m2 M1 H/ }7 Z" L
  20. #undef THIS_FILE. P' w0 D3 l4 p' f
  21. static char THIS_FILE[] = __FILE__;
    ) j( R4 J7 N' A
  22. #endif9 A9 m! y, K$ \5 J
  23. #include "SkinResDef.h"' C. s: `/ L9 S' E' z$ M5 X" @2 _
  24. #include "ChangeBG.h"; z, \+ |- y7 d7 K' M) X) \/ @
  25. #include "AFXINET.H"7 J4 E% s- f- G
  26. / i4 U* X8 u% I8 a, z0 _
  27. #define TRADITIONAL_CHINESE 0
    0 _4 D# e: [3 z, ?
  28. #define SIMPLIFY_CHINESE 1' n$ c* G, C, v) ^" D, X
  29. #define ENGLISH 2$ O/ X/ {: w0 O, ?
  30. int m_iLanguage = ENGLISH;  I7 v: M, ^7 t: [& [# ^8 {; ~, D
  31. /////////////////////////////////////////////////////////////////////////////" V+ T) \, V, F9 F
  32. // CRevAppApp
    5 w0 u2 {( t5 N' h, U1 X9 n/ J
  33. # ^7 W' c3 ?3 M# s( Z- i) c
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ( M4 g7 G' O8 N( `
  35.         //{{AFX_MSG_MAP(CRevAppApp), W6 F% y0 s! y) ^& m) O! D0 ~
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ( L( p$ D, B; }* h& k2 i6 V
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 m/ K1 s9 f( R9 G  ^0 [
  38.         //}}AFX_MSG
    8 Z3 }; q" N  |3 A4 ~5 l% L- c
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    " k  Y" Q+ u$ \( f2 U7 u1 ?, V# r
  40. END_MESSAGE_MAP()& m: C0 e# y( E, A' z7 e
  41. ( a; P/ o" R. b9 p. P
  42. /////////////////////////////////////////////////////////////////////////////
    , Z- ~2 s# X% ^. ]$ H
  43. // CRevAppApp construction
    8 d: e+ k- c" ~

  44. * }/ m" V' A" N6 I
  45. CRevAppApp::CRevAppApp()4 Q9 B( q2 q3 s/ {( \0 `
  46. {
    % R" O+ `, a7 b& }- A( T
  47.         // TODO: add construction code here,
    3 g$ k" u& t: O5 X
  48.         // Place all significant initialization in InitInstance
    0 T0 Y" B& Y3 z
  49.   bDisplayIsBig5=FALSE;3 _& U7 k. {, T* X  m; K
  50.   bRestartUpdater=FALSE;& a; R5 W5 Y( A' m, Z3 x
  51.   bFinishUpdated=FALSE;
    * K* e" W+ h# j. Z! L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
      _* H8 d2 V! j& }
  53.   InitChangeDataBig52GBKS();
    8 O% l6 n# H. ]& V. z6 R
  54.   InitChangeDataGBKS2Big5();9 \2 N# O+ b4 m" U3 M) _
  55.         //
    6 g8 x# P  e2 w9 e4 p) t6 F  d: A
  56.         bClickRunExe = FALSE;2 A$ f6 q8 c1 F3 k+ Q# I4 k
  57.         //- |, C$ a( O0 U) i8 {
  58. }3 g7 t' {* {9 V) O7 [- @* Y, @' h

  59. $ g$ R0 @; o- ^5 @% w
  60. CRevAppApp::~CRevAppApp()
    ' S3 v4 N0 T3 v# f- Y1 Q, @6 K9 Q
  61. {/ ?5 W: @) R" e# {
  62.         // TODO: add construction code here,* z2 T7 B" ]. P5 c$ Q. B
  63.         // Place all significant initialization in InitInstance; z4 L9 ~# {  E# w
  64.   EndChangeData();5 e5 ~7 n) o8 r9 p& [0 Q
  65. }
    4 Y. V6 a& D4 n  S  f/ u  n5 W

  66. 3 i7 B9 N! f2 D! _! h
  67. /////////////////////////////////////////////////////////////////////////////& L! K0 ~& J5 h% m
  68. // The one and only CRevAppApp object
    / R$ {5 `9 |3 F, p0 R

  69. 4 ~" Y# x( e; W) J/ J6 L: W
  70. CRevAppApp theApp;
    $ b4 t  }4 \, A2 M6 a9 @: ^

  71. : }4 c. m. h1 ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    4 G9 [# f# a- r+ w4 g1 U  e
  73. {& E# Y$ {1 f* x5 {+ B/ h5 w  O
  74.   int iEOF=0;5 O4 o5 _, P4 z) y- F; s
  75.   char szTempName[MAX_PATH];
    ; @! r( A$ W! }) V
  76.   *szFileName=0;% y% j; C$ h3 V+ x6 z5 e2 `
  77.   iEOF=fscanf(fp,"%s",szTempName);) q5 J: ]. {" H$ @3 \8 W
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    0 i) l/ ^- I* n* E9 y
  79.   {2 R" {/ V" c) R2 R+ X+ z
  80.     strcpy(szFileName,&szTempName[1]);9 d5 r: I1 @( p' j, m- m  \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)& b) d: c2 p9 o: ~& B+ P' Y+ e
  82.     {
    - }0 o! i0 b3 Q+ k' K( M5 j
  83.       iEOF=fscanf(fp,"%s",szTempName);- i" q6 q# d* L( d) a8 e
  84.       strcat(szFileName," ");: G6 D; \' H( m# d
  85.       strcat(szFileName,szTempName);
    # I6 B# j  `/ p" F
  86.     }$ h0 D1 A8 W1 P) H6 i
  87.     if(strlen(szFileName)>=1)
    & [; D$ v; {2 E& Q7 C' H5 Q
  88.     {5 b- |* b$ ~$ }- m3 E
  89.       szFileName[strlen(szFileName)-1]=0;& G8 t& T  m- c( S
  90.     }, \: V- Z, _: v1 E9 O/ \
  91.   }4 |3 B1 {* Q: f- l. S$ u
  92.   return szFileName;
    9 @, u5 {% u; f7 }
  93. }
    3 G# r0 S% w' o1 T* w- M- w( U
  94. ; |( m7 X1 ]' W$ s5 [, H1 A) K7 E
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    & P' V( A1 v6 E: V% u! E
  96. {2 v- A9 ]1 }1 h3 ~
  97.   FILE *fp;
    ) D! H! j2 F$ x. d
  98.   char *key=NULL;
    5 w5 V. L6 P0 Z9 E
  99.   char version[MAX_PATH];
    3 w4 A- }0 `. e& g$ d! O; q4 Q0 k5 f
  100.   LPUPDATEFILE file,olds;
    + j: U1 D$ C  S1 c) E$ j# Q9 Y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;- x2 n$ [0 z, ~1 u

  102. $ A+ `  y: k+ @2 c2 B) K
  103.   UpdateList.clear();
    # T5 @4 D/ d. O: a) E5 `/ |6 ^+ G' o
  104.   UpdateFile.clear();! q" ]+ X3 A/ G) z- F: ~! _7 m& A
  105.   if(GetFileAttributes(filename)==-1) return false;
    # z- H5 k1 t+ o  K
  106.   if(!(fp=fopen(filename,"r"))) return false;
    " H2 i2 s& y6 U: N  m7 r; ~2 m2 F
  107.   fscanf(fp,"%s",version);
    . T( B) c! B( i# D/ h
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    6 ^, x1 I+ J, z
  109.   while(fscanf(fp,"%s",version)!=EOF)
    0 ]# a  s: n0 _
  110.   {( \9 W0 T! C/ [) x( n: B
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  T% E' x" ~8 ^, I
  112.     fscanf(fp,"%s",file->path);
    4 V% U% O# F7 {" j
  113.     ReadFileNames(fp,file->file);) d+ T4 [: o5 P! Q0 o! }! R
  114.     strcpy(file->full,".");' J; {; t9 l" h
  115.     strcat(file->full,file->path);) u9 w7 V+ @* G, a8 L5 w) l. Q
  116.     strcat(file->full,file->file);
    0 A4 M# U0 [, r6 E4 ?9 }
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ) I) T: o( e  H6 O( M* s4 O4 v1 I
  118.     {; V7 a2 S+ \4 r( s! Y3 J; _# u) @
  119.       file->vers=(float)atof(version);5 Y, F/ I# d( D) {( F* @  k$ x
  120.       UpdateList.push_back(file->full);
    5 f9 k, w; p* D' ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    3 Q* G" ?. s1 k% e! c( t
  122.     }
    , E0 N8 L7 k$ x, c# Z! T7 @- V, A
  123.     else* q. t, ~, I. X$ j
  124.     {* B5 W* _  H3 U
  125.       olds=(*p).second;
    / T4 ~! h+ ?( b
  126.       if(olds->vers<(float)atof(version))# c+ ]* N3 @! ]* h; }
  127.       {7 a# j7 Q% z# @, x
  128.         olds->vers=(float)atof(version);0 s' Y$ e3 B! L. x- E/ U) K
  129.       }5 k7 A* P+ W% V* P5 f" }
  130.       free(file);  P" q7 L: d7 V8 p$ ~
  131.     }6 z3 A& u7 Y! M' \
  132.   }
    4 T# G) K1 `9 W+ \  O' q* _
  133.   fclose(fp);
    . K& }) G  {; y! U+ |
  134.   return true;4 }/ D0 ]7 G1 Y7 W
  135. }
    , f: M5 t4 {: t* V: O7 \
  136. / {  Z5 Y0 m1 x2 M2 @/ e
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)9 [1 P8 G: h* E2 C6 @9 a
  138. {
    : _1 Y' B0 g) ~* E% n* K6 J' A
  139.   TCHAR  szFull[MAX_PATH];
    . _- Y6 A3 s" U* E5 K7 V
  140.   TCHAR *token,*inter;- G3 p1 T, y# w6 t
  141.   *szPath=0;0 o9 I/ Z  N$ ]+ p  [- b' o" ^
  142.   strcpy(szFull,szFullPath);/ E1 d! s. v- F1 y9 n
  143.   token=strtok(szFull,"\\/");
    - }2 S3 t2 r* Y8 z; [! V) m: F
  144.   inter=token;" ^! v4 p( L' a4 O9 V
  145.   while(token=strtok(NULL,"\\/"))
    2 ^9 C4 r+ R* C* a9 m3 Q  a' _
  146.   {
    8 ]: d: ?; v2 g7 Q6 @
  147.     strcat(szPath,inter);, f8 a0 o) E; v$ ^' K' C) I
  148.     strcat(szPath,"\");
    & [! Q, }0 V# [3 p5 i- k- R
  149.     inter=token;
    : V( l; i9 a1 z5 A* O8 E
  150.   }4 m7 b1 u1 Z0 k9 J9 P- O
  151.   return strlen(szPath);
    ; y% _: b9 o5 r( U8 M% t# x8 q
  152. }
    3 I' P; G0 c: H( \

  153. 4 A# M0 x3 w4 {' K/ m3 p
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    1 y- a8 o  P( f8 ?
  155. {
    " ]& f& h, l( z1 ]6 C2 F0 z7 s
  156.   DWORD attrib=GetFileAttributes(Target);# e+ I* c  v/ R9 n% v! `$ Y
  157.   if(attrib!=-1)
    4 D8 P) s" E  P. Z' {4 n0 ]$ T+ ]
  158.   {$ U8 L# }' M" n* Y/ }7 n! P; H$ L
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))8 M; g1 t- w+ P& {; [# Q+ Q
  160.     {# \0 {& U! y& C, A# {. A$ X
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);% _& ?( M0 W( I- f1 ^; t# A' R
  162.       SetFileAttributes(Target,attrib);) M4 C; u; o# e5 [
  163.     }
      ~( z# V, l3 G' f$ N
  164.   }# x; w5 {- M8 g3 x( @9 |( z
  165.   CopyFile(Source,Target,Erase);
    . o; y3 i7 B( q* P! b
  166. }
    7 n8 I5 D7 C9 U$ M
  167. / `. U2 o% J4 n6 m8 k: C% c
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)( l7 U1 T: g8 E5 D! B
  169. {: y+ P2 h9 G7 T5 [6 X$ L
  170.      FILE *fp;% x* J( x  H& ^& d( r3 ^4 S4 z
  171.      char  szBuffer[8192];0 l; X/ m. s7 u) u7 |
  172.   va_list  argptr;. V# e5 w4 t  [; l6 B
  173. 6 j+ f; G( e1 D; F; v
  174.         va_start(argptr,message);! }; a: p) ^; \( q
  175.         vsprintf(szBuffer,message,argptr);- T- R5 P+ D' D, K3 z- H" E" H
  176.         va_end(argptr);! y: X  r+ H/ e( a" L
  177.   fp=fopen(FileName,"a");( M0 @  [  t+ F  N; Q" C
  178.   if(fp)
    0 }  a1 L5 w8 ]2 w6 Y
  179.   {
    / }" t5 S* C3 N" u! x9 a' Z
  180.     fprintf(fp,szBuffer);7 ?" |# m$ h5 x( @
  181.     fclose(fp);
    & k# Z" d0 E' L4 n+ i8 P: |
  182.           _flushall();
    8 L# H& w' A' I4 F# q% }6 C
  183.   }
    2 e' B7 M" l4 w9 x& C; E) Y" z
  184. }
    4 Q# R) i0 ~. j0 y9 I
  185. 1 ~7 a2 t+ O" u1 _+ P% ^/ R! \
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 `5 V0 y3 e" F7 M
  187. {
    ' j) q+ e) B$ t0 N9 G) {' F
  188.      FILE *fp;
    / ?. m+ r0 S9 c! j; Y. Y8 d' A& ]
  189.     DWORD  attrib;+ `" W1 \8 k. @5 l# l# S+ F" L+ J
  190.   attrib=GetFileAttributes(FileName);* M$ P: B8 D/ a& H) S1 N+ h
  191.   if(attrib!=-1)3 n2 @% ]3 U$ ?) Z) Q
  192.   {
    ! [, T8 {7 f5 p7 D- l% N
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);8 L# n, r# Y0 w
  194.     if(!SetFileAttributes(FileName,attrib))
    9 @) h  ]! J/ x0 I% R5 c2 l8 y
  195.     {
    " E* i/ K/ m' j2 t
  196.       return FALSE;: A) t; p& }8 U, |* h) n( e6 Q8 G
  197.     }8 f/ G, S3 a; y/ N' X$ R$ W1 G
  198.   }
    - \+ i& W2 o# P$ @% i0 k  Q
  199.   fp=fopen(FileName,"wb");
    8 x6 t, T1 \/ y$ h8 _2 v: |
  200.   if(fp)! ^: t$ t" L. V' k* q+ m/ y2 K
  201.   {
    . I# w4 I+ w: ?3 z( V
  202.     fclose(fp);
    : U7 v$ i+ C; P7 P
  203.   }: m- y/ V- x) o- G, e6 y$ h& g6 V
  204.   return TRUE;: r" ~8 H( U* s
  205. }, M3 s4 t- @; ?7 f3 z* E& }

  206. ' D+ [2 W: y+ s6 @8 a" m, X' @
  207. BOOL CRevAppApp::UpdateLocalVersion(void): ?" h/ J9 g& e" D! o
  208. {
    0 E$ C' R) F+ k' v% G6 R1 d7 w
  209.   char filename[MAX_PATH];& H. `7 G3 G$ A* P) }
  210.   LPUPDATEFILE file,olds;# e9 z9 J4 g+ X* o; o/ {6 Z
  211.   std::map<int,CString>::iterator i;4 e# ^, \+ c1 X5 ^1 ?1 T% S" M& w
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 G# E# @6 N& F+ N! p
  213.   std::list<CString>::iterator l;2 e2 |( N. a; L" S# O
  214. ' S! s2 t  @2 Z8 L2 B
  215.   if(bFirstUpdate)2 G" v2 V6 h0 G8 n1 O
  216.   {+ D0 \; F4 o9 E" v* X
  217.     dwCurrFile=0;+ ?2 ~' M3 y4 p
  218.     bFirstUpdate=FALSE;* p8 n6 N: r/ `0 e) V
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      D% w+ a0 t/ s2 j
  220.     {
    * c; H' `: _8 h$ d% K8 f" i
  221.       dwTotalFiles=UpdateLocal.size();
    - J2 D6 Q5 ^9 u/ a- Z4 H
  222.       dwDownLoaded=0;. Z( V3 v  t. S" \+ ~6 l* Z. D8 O, h
  223.       bSilentStep=FALSE;7 d6 ^0 b8 \5 O# N3 j1 p1 m" W$ g. }! _
  224.       bCompressed=TRUE;
      I( q  r' l1 t. c" c8 i9 d
  225.       strExtLocal.Empty();
    ) J  y, ^* F) m6 Z" x* n; f
  226.       strFullName=(*i).second;
    8 J% m5 n# q. ], S) K. f
  227.       dwProgramState=AP_CONNECT;
    4 m: Y# b8 A0 B
  228.       return TRUE;
    : S* u$ p! A" z0 a
  229.     }5 D  p% i8 u0 S3 K/ k
  230.   }
    ; U2 S( A& `5 o
  231.   else if(bRestartUpdater==FALSE)0 E8 u4 [6 o# \
  232.   {3 h8 e$ u  z$ U5 {! R; d
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())3 Y! k# g( L# V0 u& [- N5 L
  234.     {! K% _# B' e% T; j9 z0 C0 i
  235.       file=(*p).second;
    : g: g& A+ g9 H
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())( @9 X/ g  [( X2 G6 A
  237.       {
    ( m7 Q1 u7 N$ b" w) _
  238.         olds=(*p).second;2 G; N/ c, T+ T* ]# B
  239.         olds->vers=file->vers;
    2 p# r) f3 T8 `. y) E
  240.       }6 w8 {3 O5 T- R  c" l$ {
  241.       else
    ) X8 Q8 c; G0 ^, _. J, M: ?
  242.       {9 H: I: r; Y% D3 v$ {: A: t" t
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 ~! `  y( w0 Y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));1 O3 Y/ C' ^5 M9 v% R. C
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
      `, |1 P7 B, S% L8 G# c( P
  246.       }
    , I) I+ j, z5 P0 [8 S- d8 H
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    + R1 A( {; R1 A: h7 N0 f# D8 v
  248.       sprintf(filename,"(%s)",file->file);
    2 J; L3 A+ M' L+ C! g
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' k* [, d+ Y0 h( a: q: F) W1 n
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
      k3 |" e, d' [) m, [  X# y
  251.     }
    ; ]2 V$ Q9 ]3 ^3 `; }
  252.     dwCurrFile++;
    5 }- U2 m5 O1 h3 q5 G8 l
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& ^: n! f3 P* o- a
  254.     {- s/ q0 X! C8 s8 x! d6 U5 j( [
  255.       bSilentStep=FALSE;* v9 T0 Q+ F: p: y0 S: W" K
  256.       bCompressed=TRUE;
    % ]' m5 g( L9 j! T
  257.       strExtLocal.Empty();
    ! p6 i1 I/ \  A* _6 h4 x3 y5 z
  258.       strFullName=(*i).second;6 N( b3 p& h6 S
  259.       dwProgramState=AP_CONNECT;- s4 s" d0 X4 c6 S9 I( ]" g8 O9 H
  260.       return TRUE;7 y* y* U$ f/ j
  261.     }
    / ]# A: g3 ~0 j8 e8 c. _% X- ^% V
  262.     if(!bRestartUpdater)6 s6 Z1 e! |1 Q) b
  263.     {. v, @% t8 @+ s0 ?" ]& j0 f' ~: F3 U
  264.       int iCurrSize,iFileSize;* P5 Q& B3 Q9 t1 P  D2 ]
  265.       iCurrSize=0;
    5 F6 l! [" N) B* I. ~
  266.       iFileSize=UpdateList2.size();" Q5 o; o( p/ b* o- e
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");+ g1 S: Q, h* i$ O1 e7 M. s4 K" d2 n
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    # q6 c8 ?" E. D9 N# g5 y% }
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
      B4 c' E3 S" ~9 M; I. T
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; Z% T) @/ Z5 f2 m& K1 R& o
  271.       Fclearf(".\\update.dat");
    $ s$ L& M/ E2 @" c& y3 P/ X
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    & U$ c+ B4 U- h* F
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + S/ T* l- Z4 e! U
  274.       {: i7 g  T5 k( i- z0 @5 `+ N
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())- E$ O- f& C* I
  276.         {
    ' _$ m7 y; a1 P1 m( {2 `& D
  277.           file=(*p).second;8 L! T* s# |6 w" p1 ^9 m1 |
  278.           sprintf(filename,"(%s)",file->file);$ \0 ?2 @# X0 R' t. ]: k
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 z* _- j5 g2 @# Q1 P" C# C' M
  280.           iCurrSize++;
    7 A7 L# t% ]# y' }# }6 b( d- G7 U
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    7 o6 g1 O- ]5 x: Y. n1 t1 P
  282.         }+ [" M, U& a9 p# P2 R- L7 c7 w
  283.       }" h7 b+ `4 h% u1 J. |
  284.       unlink(".\\update.txt");" Q1 _3 D" N# V/ z# ^6 Z* f6 e
  285.       unlink(".\\update.tmp");
    $ N# j$ t  y" U3 h
  286.       Fclearf(".\\checkversion.dat");3 M9 r; Y! k3 E) M
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( x6 A* \4 U: N% z$ f
  288.       if(UpdateLocal.size())
    2 s4 o/ e9 E; R) U# W, ?5 \
  289.       {1 k3 U8 ?* W* s+ z, x( }
  290.         UpdateLocal.clear();  p' K! Y. k0 _$ F- c! H8 w
  291.       }3 x+ ?6 ?5 D* V- a6 K1 @9 }( `
  292.       if(UpdateFile3.size())" D  P# J$ Y: }0 q# m6 e. w
  293.       {
    3 g2 \$ Z  t4 }6 k
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" j& |8 D: e2 l9 C8 f
  295.         {
    5 S0 D  o/ {& ]1 Z. I& z
  296.           file=(*p).second;
    0 }0 O# E( u0 u  }. j, ^
  297.           free(file);
      p7 A' z) e  L
  298.         }
    2 {. ^* L' v) i% Q
  299.         UpdateFile3.clear();
    ( e: X9 I' a3 r. @  U& B8 [( m# ]5 _
  300.         UpdateList3.clear();) X* q( V) p- \
  301.       }; e  E$ A! H6 p6 \) y. E
  302.       if(UpdateFile2.size())
    5 E8 `, u" H) \9 |* N
  303.       {, @$ R+ L! A" @. @$ M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ J8 M- s4 l  m: I* m  [
  305.         {
    * W2 N' C) _" m6 G. y3 E2 [' Q4 |9 w5 Y
  306.           file=(*p).second;
    4 ~& D) i/ P3 G% J
  307.           free(file);+ x6 ]! B+ F7 w! \" N5 J3 J4 e! Z% F
  308.         }
    ' I0 u# z2 d: ^  f5 T
  309.         UpdateFile2.clear();
    ; u+ W$ m* k% i1 r, E
  310.         UpdateList2.clear();
    / `+ s, W2 ?  x3 f! P
  311.       }
      D( r" ]. A8 |7 s
  312.       if(UpdateFile1.size()), Z' w5 q' `( F+ v
  313.       {# x# z9 M+ ]4 M1 ?: P
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): C! k8 i! E/ Y7 B
  315.         {
    ! L( i) D& A$ V- W3 J) [
  316.           file=(*p).second;
    $ q' ~* L( |. Q5 Y
  317.           free(file);1 O: Q, T" ?1 ~( o; M# r6 D# Y" o
  318.         }
    ! Z3 y+ l, {! m8 F
  319.         UpdateFile1.clear();( Y) k/ K- {; D6 R
  320.         UpdateList1.clear();1 s0 [9 Z  ^% }; e) \6 ~
  321.       }
    - U& b, C) u+ n- k6 p& q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    8 I; X0 o, Q3 ~* j2 k0 A
  323.     }
    3 o0 q! r$ J2 U- R- W: ^
  324.   }: `0 b' c! \. r' E7 a4 j* C* J
  325.   return FALSE;
    " a+ @9 \/ L% J$ o, f
  326. }4 w' R3 h, e2 R1 Y( f" m
  327. 5 z1 e( j9 L3 {4 j% O& e
  328. void CRevAppApp::ClearAll(void)
    6 z& k% s! t6 x3 p0 q, E: c3 m. @* {
  329. {5 l4 L2 i% y& @; B/ d
  330.   LPUPDATEFILE file;
    8 C- \2 m/ V5 e# e4 T8 S
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 u7 w/ P. l2 {- ?- ]; ^
  332. ; s! U7 D$ Z7 R! P. n
  333.   if(UpdateLocal.size()). h& i( [9 A# M1 g
  334.   {
    / |( Y) ]/ ~9 C7 H& s# v3 H3 M
  335.     UpdateLocal.clear();9 R7 W7 o9 ?% }; U4 C" H7 }
  336.   }
    . w* p3 ~2 n- n  V! r! M" d! P
  337.   if(UpdateFile3.size()); C6 v# r) k, v" M; f( G
  338.   {, A0 Q# A7 i: G) M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' x$ C( ~0 I% U4 @9 x' H
  340.     {6 B: l9 \3 e) P
  341.       file=(*p).second;
    4 g7 h( q) D/ ?& x& I
  342.       free(file);
    * j9 Y, f9 O5 c
  343.     }
    5 W* Y6 _5 b3 \5 m# W/ t. z
  344.     UpdateFile3.clear();
    / Q0 O. x' n- {4 V7 \4 ^
  345.     UpdateList3.clear();; }; o" N/ H4 C2 J2 J, B' ~
  346.   }. v7 C$ }6 U, n2 Q( R0 \
  347.   if(UpdateFile2.size())7 ~* k0 k8 G. V( T3 A# q
  348.   {2 m. O- g8 |4 a6 B7 K8 I% ], ]. h
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 F" q4 D$ \+ b
  350.     {
    . C4 P. }4 K; J' u0 j% `
  351.       file=(*p).second;
    : s( \$ y$ z% m3 i0 P# M
  352.       free(file);
    9 d! k4 |* D5 T
  353.     }
    " y) r" @- S% E( N
  354.     UpdateFile2.clear();! j$ g4 {  s( O
  355.     UpdateList2.clear();
    7 }! x: ]' b" l5 a- M2 t/ |
  356.   }, P3 V* W2 ^# e/ A* F# p
  357.   if(UpdateFile1.size())
    9 r: e, o, O7 x" k0 u- l, z1 t
  358.   {
    8 G4 p7 J& z  G6 Q7 }: D& s4 i1 v* X
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & G# R6 d( m5 B* W  m- |! E/ d
  360.     {
    3 p. k8 E6 L5 e) J: r2 [; o, v
  361.       file=(*p).second;
    0 r  K+ h3 ^9 b
  362.       free(file);! Q  d: L! {: ?; I; j; y
  363.     }9 r% N5 S5 \# I* H
  364.     UpdateFile1.clear();5 O% E# M3 f$ U" @
  365.     UpdateList1.clear();$ v$ F6 |/ G7 X* {; w1 U8 F) R
  366.   }
    ) H  p0 h3 |) H9 K
  367. }  / t! {' }) |. k- K' H
  368.   
    5 }) D2 D4 |0 T7 ?: S
  369. BOOL CRevAppApp::CheckLocalVersion(void)5 I# q" I! q5 C+ D) \! A
  370. {
    ! A5 ~; G! J1 {3 I7 u+ \4 N
  371.   int c;
    9 f) B/ V# z# C
  372.   LPUPDATEFILE file1,file2;+ M! a. j: T" q- z8 k- }
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    3 ]9 X+ O" }8 \. Y
  374.   std::list<CString>::iterator l;
    ; N0 g$ C) J0 ?3 l2 v$ l
  375. ! H) u8 R$ n/ d7 N
  376.   UpdateLocal.clear();/ o2 F! L7 i* Z7 `
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    : g' b& S. R: m0 ]8 D, r
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);; o8 T, V, @" v+ l2 ~
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);* i) f  H! `' W3 p+ i0 I0 d( Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    $ d' o5 N  v. A. ?2 J
  381.   if(UpdateFile3.size())$ u$ T/ H4 J  n6 _
  382.   {4 m$ y6 j$ f; h) r) c8 Q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    $ [+ G" H& j/ u
  384.     {
      W9 i( z9 T- Y+ |. @1 {
  385.       file2=(LPUPDATEFILE)(*i).second;& S. X$ @* i5 b6 d9 W- Y* L
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) {1 q( O3 j9 }
  387.       {
    & R8 U. m  s( i: P
  388.         file1=(LPUPDATEFILE)(*p).second;
    / {  }2 g- d: R$ `
  389.         file1->vers=file2->vers;
    & E2 ?5 g* d/ o, ]" c
  390.       }& b# l0 o* O: A# Q$ j% a
  391.       else
    # S' }$ h2 {  u& s  H9 u# s
  392.       {
    ' g* O- s' R* D- p4 Z$ q. h
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ ]2 ]8 I% P$ F( Q  b
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    / }3 Y  n7 z) O6 M2 J
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - t0 R, Q4 m$ V
  396.       }4 C! _2 R" T+ g
  397.     }
    * v2 ^0 A8 l+ [9 r1 T
  398.   }( w8 T; N. _: h1 \& @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 O8 R8 ]. p$ x3 e5 q
  400.   {- z1 P. s0 h- \
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())$ F- _  n5 Z0 P* C. F
  402.     {" z+ v. `% m9 w+ p; P
  403.       file2=(LPUPDATEFILE)(*i).second;/ A+ Y* M  h" g5 {! M9 e
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) X- _: P# ?2 e$ Y+ ?5 Z/ _
  405.       {2 ^$ h' S- B. F& j! l/ f' P- \
  406.         file1=(LPUPDATEFILE)(*p).second;
    9 t$ u; p* O& T) Q4 L5 C
  407.         if(file1->vers!=file2->vers)& R  d/ H8 w9 h; Z( ^& g: R
  408.         {
    * X- t0 a% W- k6 c3 O" P& `9 B
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' t" q. R7 [& X" ~1 ]
  410.           c++;- N: G" ~" U# P# f$ p0 b3 C
  411.         }- d' \% N( O$ a3 v5 O( R
  412.       }
    0 R! `) B" `8 s. i) G3 g' y
  413.       else3 N/ T3 q8 i) T7 w6 H
  414.       {
    : h5 m9 P3 w( X0 r
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ F% j& S7 |2 ^) k
  416.         c++;) h7 z' m* d. K! P' t! S
  417.       }  p1 ]% _- q  C& U
  418.     }
    & ~$ O( U/ y( y) l4 j, o
  419.   }# @; R/ i8 r% {1 ~
  420.   unlink(".\\DownLoad\\update.txt");
    - @+ e7 |* d; }/ f3 O9 f: c
  421.   if(UpdateLocal.size()) return TRUE;
    % X  Z3 [: c3 l& b5 Q6 B
  422.   else                   return FALSE;
    + R2 ?( S$ u8 F# Y6 M- U6 H
  423. }
    + M$ t5 O# [: Y6 _! T
  424. 9 B5 \" Z8 g: e2 H" m$ }3 C
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"" Z- \$ B) Q7 N) K2 x4 E
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"0 \; s/ E0 m7 q) e) V! @$ o4 n

  427. 4 a- n: d3 \1 X) J
  428.   B- ?9 q9 S) n  \! @1 t4 N) e& a
  429. 6 H& C5 k# o! H. v+ l
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( |) j6 F0 _% N3 s- b; h
  431. {9 ?5 f9 T0 P) V# Q9 u: Q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;  m% w0 W8 o4 o
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( u; B" u6 ~/ e
  434.   {
    : S# I$ e( W4 ~' Q; s5 E/ U
  435.     char szLanguage[50];
    2 v) \; c; t& C) c* ~. l
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 Z" }/ R( A, r) ~! m1 j8 H4 v+ Z
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; W( T5 ~4 J/ r# j
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 }. ?2 t# G; {; o" [7 c6 a
  439.     else                                   m_iLanguage=ENGLISH;: N# t0 p$ J7 r' L0 b$ l0 [, @
  440.     char szRegister[100];
    . q4 r4 G: B: b6 y( E3 G
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 V' G. {; v) T' O7 N( O1 l+ T/ s
  442.     strRegsName=szRegister;; I; ^1 N( h. O3 _; B
  443.     char szPatchURL[100];
    2 t# H  s7 I- R. g* }: J, i
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 j) t7 J# r/ S8 [: G
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 N/ P7 D( ~: o1 }
  446.   }! b% C! T4 ^# n. c+ Y8 `' u2 F4 |
  447.   else0 l5 R. I5 |+ b; ]& `
  448.   {
    ; m& n  t. _( I8 }; t' c: l8 p( d
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; c. F* ?, _- G$ U/ O- X
  450.     strRegsName=DEFAULT_REG_URL;" p4 m7 h$ h8 w+ G8 k
  451.   }9 }9 \# r- _, ], [
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    7 L# }& s. \! T0 r2 Y
  453.   {7 H' a0 _2 g5 p* O0 L$ e! \
  454.     char szIP[50];% H7 z$ N9 D' J# r7 ^+ a
  455.     char szDIR[300];. @. l8 J3 B  c1 U. T% c
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 }  N- C/ q8 h' |
  457.     {2 ]$ F' Z) F6 s5 V$ h, }" f
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      C7 l$ }% v% h- |: H
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");7 f1 x7 A# F; ~2 s1 |
  460.       strHostName=szIP;& Z( `) Q+ f' P4 U2 h
  461.       strHostPath.Format("/%s",szDIR);
    8 z- N2 r- T" {% a. ]& E) w
  462.     }
    " i/ l. ^% A- r0 Z: I
  463.     else! J0 n& ?  [8 ?- ?
  464.     {
    ! }( R# A9 O3 m+ \5 ^
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " L! K1 b1 E5 F5 C# E, Y5 A1 D
  466.       {8 Q; K2 M* ]$ @3 w
  467.         char szLanguage[50];3 S8 i0 ~3 p7 s3 l# v' G: }
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");. s5 I( j# M" n4 w5 h
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! |  |: ^. K5 I4 J/ E0 T5 ]
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! g8 v+ G& e7 m8 A: e
  471.         else                                   m_iLanguage=ENGLISH;0 Y% X& Z3 c( Y" r' A
  472.         char szRegister[100];8 b; K; y0 C" V1 _9 d3 }, L5 o
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% V: i% _; b& ~+ s% j- G
  474.         strRegsName=szRegister;
    " V. e/ s: y7 A$ L, ]
  475.         char szPatchURL[100];
    / n' d3 K9 Y4 ^. z# i
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " a/ s. E5 f- k
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' B8 X7 I1 J$ x) P) O( T
  478.       }
    9 \2 F. \& o7 y  r
  479.       else
    " ^9 p, S$ h" O# W! ~0 O7 x- N8 ^
  480.       {" b; p  v- o5 E- @$ k
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( S' p" W& x/ r1 o0 G
  482.         strRegsName=DEFAULT_REG_URL;
    & a1 S  q+ X. J& y0 H
  483.       }
    # t* c1 s0 |% t. _6 P& c  b
  484.     }
    " x) |5 p; t- E* Z. g/ r1 S2 e
  485.   }' s9 g! E& y4 _! A/ M# J
  486.   return true;
    " q, \+ ^. z" n
  487. }7 F2 [5 j9 _  l9 Z- m

  488. 3 `( {" h! _0 n7 ?, ^/ p3 K1 [, T5 P
  489. #include ".\ZLib\unzip.h"
    . K' {5 o5 q& |
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    - s0 A& {# ~1 x4 `" Z! ^4 L. n: V
  491. /////////////////////////////////////////////////////////////////////////////3 z2 C# {: e- D! m; m
  492. // CRevAppApp initialization
    4 G' Q7 \" x; K' f) P

  493. + {" j7 ]- C7 \2 S9 X: B, e7 s# r
  494. BOOL CRevAppApp::InitInstance()) |( v) V, m3 f6 f8 K6 [$ O) K
  495. {
    / V* ^; C& F  s9 P
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    $ }5 ?- H% r$ X: B% F

  497. 6 n+ ~% Q! [. r5 t! P  x
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    # Z- e5 R& }3 q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))  T! q# v+ b7 x; M3 t
  500.   {
    8 E. G; \  [/ X' B
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    5 [/ L! U) n. _8 m4 w) u. p3 q. i( ~: @
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
      c9 R: N! b+ }0 j
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
      n' b7 s4 a+ L  U9 w
  504.     {) _$ b0 \& ~: `. a) p- l) b; W
  505.       strcpy(szPath,szPathTarget);; N( K' G4 M. X' H: k
  506.       SetCurrentDirectory(szPath);
    0 [  _+ v3 S9 }
  507.     }9 |7 b( u: @: }( l8 N
  508.   }: L) H- Y6 L( N2 \; f3 ]( i
  509. #ifdef _DEBUG
    . d8 ~3 E4 Y+ h2 U! ^" `% Y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" C5 w) s2 G, T6 W" w4 p8 Y
  511. #else
    7 a) S% A6 [1 T( W. `
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 {/ O( K, x$ w9 {# d
  513. #endif
    0 {$ G2 s, R4 p( }
  514.   {
    , A6 f! ]" @9 a$ v" l* R
  515.     char tempFileName[MAX_PATH];. P' @0 C* t5 Q0 B- e
  516.     strcpy(tempFileName,szPathSource);4 r3 }8 a: j5 S& q
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( l2 k: k2 A2 O8 u8 y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    6 Y5 _+ a3 I/ R" V  ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    5 y0 k) a0 {- S8 ]- @8 E; X" D
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    8 d" H2 \. h; f
  521.     return TRUE;. z4 r% M, a- m" ]* a  n
  522.   }4 m/ N- e) |; D* V, E7 ?
  523.   // Nuke 0118: Delete run.exe, A9 f, f4 K/ F" b5 _
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );- I4 t$ J' Q% o+ T5 ~: y4 X& n
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    % h1 T& b9 Q! _: _* w1 G" f
  526.   if(!ReadCfgFile("Config.ini"))! G$ l2 m) C* C) c! U  W1 O3 a
  527.   {
    - m1 p2 h. L' @" ?) d* A0 P
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ) Q" k8 b" n* M! r  C: q: `
  529.     return TRUE;
    ! p* C- e7 c/ P9 j+ W. k
  530.   }
    / P% }# w0 N; ^( Z1 q
  531.   HANDLE mutex;
    1 O8 ^: I+ z- R  v0 v
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% B5 I" o& @  `  n
  533.   {! J/ i6 N( L1 j0 b
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)1 ^- X' c. i5 L
  535.     {1 D1 o/ g1 g- R8 d5 x
  536.       CloseHandle(mutex);
    6 `. x* W( D; o4 f& H7 a) B: d- Z8 t
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " \, I& O9 Q: {# e
  538.       return TRUE;
    + [  x! F+ t5 c! X, r, C
  539.     }$ Z( F' r/ |! Y) v' G3 \
  540.   }  8 d1 v' M) Q9 H) P
  541.   CloseHandle(mutex);  N; e7 f4 ~: x2 r7 @

  542. % F+ F! C; F( s3 @9 r# i
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    , w$ t! z& o0 X1 ^
  544. 0 _0 J9 a- n' Q; l7 t( Y2 u0 L, i
  545.         AfxEnableControlContainer();5 Q! Y5 |$ T  N# Z2 \1 T8 s; [* N
  546. . c" G  S- H& g5 a+ R7 U; b3 r
  547.   bCanUpdate=FALSE;
    8 Z7 p: z+ A$ Q; A4 c  J/ y
  548.   dwStartUpSteps=1;
    2 s1 B& s; I  ?' b1 d6 d
  549.   dwProgramState=AP_NOTHING;
    ; H6 d. X' {, u2 R! ~; T1 |& v9 r" y( e
  550. ' H. i6 [( W9 t" B0 p! D
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) a+ u# V: e6 f

  552. $ M5 g# r$ C' w% C1 ^7 S
  553.         // Standard initialization
    $ W" T& l  j0 N2 @) w
  554.         // If you are not using these features and wish to reduce the size( U, I5 |9 n( p: O0 b* ^8 d  E
  555.         //  of your final executable, you should remove from the following$ r! a; B5 A# F! A9 l+ u- ~
  556.         //  the specific initialization routines you do not need.
    3 a, J7 p+ G9 v* j$ B& V# i

  557. 4 X$ [' E% d- s7 H
  558. #ifdef _AFXDLL- d1 B6 q. W: z. ?5 G' }: w+ q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    . c! W* U3 }9 S/ ~/ f7 a# w
  560. #else; g3 T# @/ [1 Q* t6 x- v
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically/ M) @7 g, F3 {4 Y4 w- D
  562. #endif& p( r  H2 B! h9 x' l& H* y
  563. 0 N& ~3 P6 L5 |8 T/ ?" U& T& a6 P. A
  564.   dlg=new CRevAppDlg;: w4 C2 @) A9 V# S
  565.   dlg->Create(IDD_REVAPP_DIALOG);) p% P& n) ?6 x' Z1 F7 X, e
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    5 d0 K$ k" `: Q( {+ u/ [; N5 U3 f
  567.   m_pMainWnd=dlg;6 i3 v7 @4 c- {( q8 C3 E

  568. * {9 b; l7 s* |/ y0 F: c
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    . G/ U* i) |! @) Q/ e

  570. , I% v( I& n( v' a4 r- S/ ^% {3 K
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ; H6 K: H5 C: {; ~% c' @9 `
  572. //  ULONG_PTR gdiplusToken;
    ! H1 O8 o0 Z- M+ g: _' _( D
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    $ [' A5 b: L$ l
  574. 2 d9 m' r6 p6 C6 z9 X, \
  575. //        CRevAppDlg dlg;5 O) o; j2 B4 Q8 ^! L9 u' e/ A
  576. //        int nResponse = dlg.DoModal();
    - q8 k8 _" P3 Q- e( Z/ R- L
  577. //        if (nResponse == IDOK), y. [: b3 M) F
  578. //        {8 G& x8 U  m+ k& G
  579. //                // TODO: Place code here to handle when the dialog is  f' l! E. ~0 b0 A7 [
  580. //                //  dismissed with OK/ m% g! M( c" i/ @# u8 R% T, P
  581. //        }
    2 L$ r, T( S7 }+ c, |: T  V& J
  582. //        else if (nResponse == IDCANCEL)1 w- ]8 M; j# H' r& I. [5 x
  583. //        {- |6 q3 y; D8 G: ^6 g
  584. //                // TODO: Place code here to handle when the dialog is
    2 }% @4 n9 F# X% W0 r: Q1 p
  585. //                //  dismissed with Cancel5 G- q; ], d- @/ b: e: E1 j
  586. //        }
    9 p7 [2 f6 Z* q0 a
  587. 6 ]; `8 s5 Z8 j2 J5 Z7 v/ d
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    4 @$ t6 m" `; |
  589.         //  application, rather than start the application's message pump." D- w4 L7 m2 @/ s; f
  590.         return TRUE;
    2 X1 T6 m; y% [: [% y
  591. }# c8 v$ S2 A3 @. p: e( Q

  592. 8 N8 j. S, k" U$ O8 B
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    6 c0 d8 q# |3 j/ \' H& u+ n, c1 t8 t3 {
  594. {
    6 i! b" @! v/ `
  595.   int i;
    9 W6 w! E1 H: H! F0 Q. T) W3 A0 }6 |
  596.   char *szRet;- l; N% O1 H7 h( J
  597. & [& d# |2 g& \0 T  W5 I+ P
  598.   if(pSource) { itoken=0; sztoken=pSource; }( b( I$ m% Z/ e' p
  599.   if(sztoken)
    * O2 W& }# @3 R) ?5 x
  600.   {
    6 _) b9 `; i  T" y" {" K4 Q, C
  601.     szRet=&sztoken[itoken];
    - u5 ?' n4 r- n! }) o
  602.     while(sztoken[itoken])
    ! F) n9 b0 x6 @& Y* H
  603.     {
    9 Q( D5 C7 b7 m* i1 g& t& G
  604.       for(i=0;i<(int)strlen(token);i++)
    # `) L9 |* L' R" n  k" S1 L
  605.       {
    6 k3 `# r* z! O9 |1 Y! C
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; O3 c& m; D  S- I3 x
  607.         {
    ( z; g9 M- m6 |; L
  608.           sztoken[itoken++]=0;5 Q$ [# `7 ^: i2 `
  609.           sztoken[itoken++]=0;
    / z$ O7 f# s  W4 p. H( _4 g( k
  610.           return szRet;& O# M7 P: K6 q- j9 T- D
  611.         }
    1 v5 V  }9 o* i8 D! t
  612.       }
    : D; h. d  {5 P
  613.       itoken++;* R6 @! v7 Q! u, |* v' }& L
  614.     }
    % R, n  J3 F) d" p. ?
  615.   }
    0 L% R, y" Q" a( K9 v0 o+ I+ f
  616.   return NULL;* c' H% q! g2 Z, ^; M9 U  d0 @
  617. }, _- u* ]0 r' q) b! D/ \

  618. . D* N: U1 M6 P0 y0 `! m
  619. void ProcessProc(long Total,long Current)" e( q9 j4 W) F5 ~# J
  620. {  f7 ~3 [$ u- G( K. w) H$ q
  621.         MSG msg;
    6 I. z0 u" J/ v' o; u
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);, R0 d& s, u) g) g. j/ c2 I$ q6 B- f
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    + K# c6 |* S2 Z$ z# v, m8 Q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + x# D% V/ V3 @# {# E
  625.         {) R+ l7 u5 i: K
  626.                 if(!GetMessage(&msg,NULL,0,0))
    1 H( p7 u7 D/ m0 o
  627.                 {
    : [/ X# m& q8 @0 I1 n' q. V' G
  628.                         return;5 U- E+ y- ~7 T5 h% V
  629.                 }# p' X% G0 y4 L3 \: D$ |5 ]
  630.                 TranslateMessage(&msg);+ z9 I) k# ^. t' |& q9 s
  631.                 DispatchMessage(&msg);; P) I7 ~5 V) ~# `4 V* {
  632.         }       
    / w# e0 j$ f/ b
  633. }
    1 n4 ^2 d1 H: m4 d- e
  634.   K3 L+ d3 F6 K: W4 E- U9 U
  635. BOOL bFirstChar=TRUE;
    ' Q/ c* h$ z( s/ j- ~4 t$ U2 n

  636. / `' }! |* o6 T( t: O, z7 h4 T2 _/ j
  637. BOOL CRevAppApp::OnIdle(LONG lCount)+ v( T9 G9 l5 H
  638. {
    * h: R' u0 u5 |
  639.         // TODO: Add your specialized code here and/or call the base class& V, E& W/ `: `5 H( H4 k
  640.   switch(dwProgramState)
    / Y8 t9 s2 m' Y& H
  641.   {% F' l. l3 ~, B/ m, L: W9 h4 F
  642.   case AP_NOTHING:4 }7 f( J  Y9 b! G3 a. n
  643.     switch(dwStartUpSteps)
    , [" h2 O& o8 E; c
  644.     {
    6 p: }+ Z' [( a4 g6 Q7 H2 k
  645.     case 1:
    ! U5 ~6 T$ x4 j* H0 z
  646.       {1 K0 L6 D/ w4 k3 L/ _
  647.         int i;
    # q- G% H( k* {4 c0 H5 n* l, J
  648.         CDC *pCDC=dlg->GetDC();
    4 j" F& q% _9 s0 U( [; K
  649.         HDC hdcwnd=pCDC->m_hDC;
    6 q  l( e4 @; I8 a
  650. //        Graphics graphics(hdcwnd);4 q! L& k. {( Q7 Z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");( |' ]: h7 K& j- g
  652. //        INT iWidth=bitmap.GetWidth();6 {( V( ]) U4 _# [" J7 g8 ?1 L
  653. //        INT iHeight=bitmap.GetHeight();# k. D$ W% ^8 n1 @6 H
  654. //        Color color,colorTemp;$ h. I3 M8 `; P. f9 i" K' |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 L% C' C, g! p! Y
  656. //        {
    8 l( _# w2 E( K
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( f; p  a$ z0 F5 A& }2 @# U# U
  658. //          {5 g% O9 O1 g- ^& F6 d# o2 M
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 V1 t% S* H, z2 K3 I- t# A3 a
  660. //            colorTemp.SetValue(color.MakeARGB(- ^6 C) F0 U7 X" A
  661. //              (BYTE)(255*iColumn/iWidth),
    2 f1 I0 k7 i+ o; E. V
  662. //              color.GetRed(),$ T; e+ ~, w5 t; F' g: Q) i) X
  663. //              color.GetGreen(),6 }: f, M9 x# \
  664. //              color.GetBlue()));  A. r9 ]: }, q; |0 c: k/ p
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);+ Z9 e  w! g& u$ n! `6 {
  666. //          }  e! K8 {, L4 U4 u" L
  667. //        }* [' p) A: K  Z! s! b2 R
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ! m, A& K% j$ `9 O. j
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : ?* h' k" u# x; C) F
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    . c5 Q6 \3 P7 O
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 {8 h; E) p0 C
  672.         for(i=0;i<240;i+=8)- m! Z: T. O) k. @) A: z
  673.         {& h% r. F' ^- c: B- g& x) G- G! y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , ?. @) K( @( L  y& J1 K. a: K
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . j, F! d" y+ C7 X: O2 y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , @1 ]" t" A1 L2 L# F
  677.           Sleep(33);
    # M& \9 n! B% E' o9 G
  678.         }
    % `7 D5 j) u$ \9 [
  679.         Sleep(1000);
    & Z6 h& N. H; j: f- W4 M; d9 v
  680.         for(i=240;i>0;i-=8)
    ' E* @' a1 L* ?( T( ^6 f; V
  681.         {6 D, g& l3 k+ h! [
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' a1 p9 C% ?: d5 g
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 x3 e; Z2 r9 i0 j$ k. ~+ B- x
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + y8 t2 }8 k3 [
  685.           Sleep(33);. d7 c: a3 v% O# i0 R
  686.         }
    - d( {# D0 p& C. c% w2 l
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    2 a5 I7 h$ W( w8 p" k9 |5 L. {" M
  688.         dlg->ReleaseDC(pCDC);
    ' ?0 i/ o' d7 E
  689.         DeleteDC(hdctar);( m- u6 |$ y% r% _
  690.         DeleteDC(hdcsrc);  W% n- [0 g3 D* `# G- G
  691.         DeleteDC(hdcorg);
    ! g! o1 G0 o0 W1 E6 E% ?
  692.       }$ m+ A& o2 B1 y+ y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    9 x* e  u+ H) c6 |
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");0 c5 S# ]) i, Z; G+ ~/ ?
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");4 t" t* B  @8 Z; F3 t7 D) p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 M# H% |# U7 U3 J" ~
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 c. G: E+ n2 V
  698.       if(!Dn.Connected())
    - o7 U' m% ~5 m$ j
  699.       {
    : s& G9 s% u% D" S; Z
  700.         dwTotalFiles=1;
    ( O6 z3 `/ I' m, Y2 N
  701.         dwDownLoaded=0;
    * B9 s3 G8 v  r. b- F. D' }
  702.         bSilentStep=TRUE;1 _- X) K9 E8 k% y2 b
  703.         bCompressed=FALSE;
    7 J, q5 G3 {- b9 w& Y
  704.         strExtLocal.Empty();, O1 [4 E' J; W% \' S& Q
  705.         strFullName="readme.txt";5 N6 K' a2 R0 M7 G! H7 K, U! y0 b
  706.         dwProgramState=AP_CONNECT;) N* X" U8 @8 r  s+ Z) a7 I9 v: y
  707.       }: O0 j- W/ h( A: e* |1 l( Q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();5 Y' D) X5 a8 N% T5 d
  709.       dwStartUpSteps=2;8 [( f) D+ |) t$ V" f' \8 ?
  710.       break;* B$ r$ G9 S  t
  711.     case 2:" q. B2 H- V  g2 i3 E
  712.       {# |+ v1 r- o3 J
  713.         int iEOF;
      V4 t: P7 E  b
  714.         FILE *fp;) g) K# g# I! `% ^+ A
  715.         char szString[512];( u5 H& }# e' n6 L3 }! ~: e5 d' U% S
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    1 |3 h4 F' ~) d2 x3 C' W1 |
  717.         if(fp)
    % _# `+ E6 r, Y, z
  718.         {4 I5 ~7 b, _  Q: C+ H
  719.           do7 N: U3 j" j# x
  720.           {
    4 Q. o( F" X+ f7 t/ b- E7 I
  721.             iEOF=fscanf(fp,"%s",szString);- c7 k9 D5 T5 m# o! q
  722.             if(strlen(szString))6 f( v0 ]" t; p3 J3 x
  723.             {: z3 S1 |  H4 E. A9 O2 a3 W& |3 K
  724.               if(bFirstChar)2 c( p5 i; M, [1 u# M  I9 r2 \
  725.               {$ R0 y' w  q: `7 O4 h
  726.                 bFirstChar=FALSE;- Q; u; e) J3 r' T  {& y
  727.                 bConnectIsBig5=FALSE;  f3 K8 U- |* V+ P
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    6 @) ]; ^6 a) \& r% C$ G4 L
  729.               }' Z. Y2 C9 J/ W; E/ _- K
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- I( [) u% |. F# [- b0 t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));0 E/ k( _  c' M( t0 {  k
  732.               dlg->m_ListText.AddString(szString);
    : e  z) Z8 K- y/ _2 Z. X- V
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 [/ s/ ?7 D9 A7 G+ W
  734.               *szString=0;3 g! `; n0 w3 t7 q. v) ~# T  E/ U
  735.             }. N" x% j8 k) V; V* ?6 e1 }
  736.           } while(iEOF!=EOF);
    $ S/ ?" t: h# w1 j6 S
  737.           fclose(fp);
    ; l( z: Q! Y* w! L6 o3 h. A5 g0 K
  738.           unlink(".\\DownLoad\\readme.txt");
    . N4 s/ L( b! Q1 ?
  739.           dwStartUpSteps=3;
    $ Z# i" _( S. m
  740.         }; x! o0 `: k0 U) @
  741.       }
    - s# l, M7 A! ?
  742.       break;
    ) }. b) C' a& }/ o2 L
  743.     case 3:/ k8 E; P% C+ q, e5 U) Q1 c
  744.       if(!Dn.Connected()); k7 u1 ?- W5 ~1 x8 z
  745.       {
    8 w% k* Z2 G$ A: M- p& y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);8 ~: R: ~! N% E# g2 K7 T4 h3 ^
  747.         dwTotalFiles=1;
    % |' u8 h! h  n" t5 a5 P& z! S
  748.         dwDownLoaded=0;; H8 I% q. e( U$ ?2 I+ i% B
  749.         bSilentStep=TRUE;
    7 }7 R% @+ l7 Y7 ~7 L
  750.         bCompressed=FALSE;* L+ |& d1 L% a* v
  751.         strExtLocal.Empty();1 T) c$ h. |& q  }' |- q
  752.         strFullName="checkversion.txt";
    & z9 M% k% r8 v- q. Y; @0 ^
  753.         dwProgramState=AP_CONNECT;2 N1 M9 r9 E7 }5 A8 f4 k( E* x0 ~
  754.       }1 B3 p( D( W1 d  J
  755.       dwStartUpSteps=4;
    " E3 M/ b+ D' Y% O" c! v
  756.       break;
    * v& L) T+ V7 ]
  757.     case 4:9 V4 K& H, `4 s5 C  H
  758.       {- J9 e/ T0 I6 L7 [; b! \
  759.         FILE *fp;' f. J4 a( x( ]3 k/ W1 q
  760.         char szString1[128];0 F. k) ?# {: v8 v* t! ^3 ~
  761.         char szString2[128];. y9 h2 k9 E3 W2 i
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    " r: O  c2 w( T  t* ?: P  Q
  763.         if(fp)
    , p. {2 k% s7 \$ ?+ u- j
  764.         {" _- }7 X& D; E8 l
  765.           fscanf(fp,"%s",szString1);- |/ c+ J5 g+ F" m' d: J& A
  766.           fclose(fp);  N  b7 w( z2 V9 o( y
  767.           fCheckVersion=atof(szString1);% x# G- g- K, Y8 `' T: d" Z
  768.           fp=fopen(".\\checkversion.dat","r");9 H1 s" u% q/ ^  B) s: Z
  769.           if(fp)
    6 R& [* x' S1 P. x
  770.           {
    : t3 H6 @( V1 o/ Q
  771.             fscanf(fp,"%s",szString2);
    # L1 d2 v# y; W+ U9 H6 y4 ~
  772.             fclose(fp);+ S! F& K# e' Z
  773.             if(atof(szString1)!=atof(szString2))
    ; C8 ?% s; C; _1 v, d* @
  774.             {+ I. T; X8 W4 U" X; ]
  775.               if(!Dn.Connected())
    5 j* L5 _1 f! w: R
  776.               {9 m8 \' f$ P) ~: _9 s( c& i0 @
  777.                 bFirstUpdate=TRUE;
    " z1 p. {8 T  g+ s. e3 O5 h/ M
  778.                 dwTotalFiles=1;
      Y3 M' ]' {% V% j' H  L
  779.                 dwDownLoaded=0;; d) q: A4 l- S" y; x0 f
  780.                 bSilentStep=FALSE;
    2 n0 V8 `+ l1 B; T; z
  781.                 bCompressed=TRUE;
    7 b' X/ K  V6 k( Z4 F" M
  782.                 strExtLocal=".\\DownLoad\";
    . g: N9 G1 D* ]6 M6 e
  783.                 strFullName="update.txt";, n& S. P& e. h$ D" A
  784.                 dwProgramState=AP_CONNECT;: h! B4 \+ l7 S) f; U
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 W: n) c/ J0 b& i9 K
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 d3 O. N. z3 u4 B  I
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + R5 \+ a! a& [
  788. 5 ]$ E: a: Y" O# h
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - j- H3 W/ O. h  C
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ; g* `4 s6 A9 E* X, w7 z- s8 K
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)( j0 C5 i2 [* Y2 p# ~% v2 w- R
  792.                 {' y# y  r# p6 _& G
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- |+ ~! n  ]9 e4 J- Y6 q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    * e, y: O, Y) ~+ ^
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    6 }7 i) E. }& U9 ~9 a& P/ c
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( n9 ~  R0 P) L4 Q
  797. # h* @) Z) X8 D- v) O! G! Z
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    6 T  o' i$ t0 n  M
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * p3 f' c5 W. @) x
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    + p. I! [- ^3 N  M/ s  R# Z. O3 Q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! t2 ?, k# f0 ~( k
  802.                 }0 }3 A/ g) q6 s8 `4 n
  803.                 dwStartUpSteps=5;- B) u% ?" F' D7 G6 z( l
  804.               }
    ) A; Y' @3 N# L, X. H
  805.             }) w. P- K+ V& u! X* S, n1 J
  806.             else2 z; k7 ?5 _& o+ e3 I7 N0 }" F
  807.             {
    : M( A$ f3 [. w0 c5 n
  808.               unlink(".\\DownLoad\\checkversion.txt");+ P8 R6 |9 R2 U0 Y2 ]
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# {2 L* t* Y0 Q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");0 n+ |4 n) l7 u# d
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");4 |& |3 D* G* I, P/ U1 g

  812. 3 B" p) o) I% c+ Y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; z) _: n- Q3 Q3 f! A
  814.               dwStartUpSteps=99;
    9 |) _9 c6 Q5 P) Q
  815.               bFinishUpdated=TRUE;
    # t2 X- g6 v8 {& H7 C, _7 M
  816.               bCanUpdate=TRUE;7 d/ o4 X, q  a1 y6 P( a- C6 X
  817.             }. b9 V: p& i" Y$ V9 k
  818.           }
    & u6 [) x& a; }0 F( i4 j; P
  819.           else
    $ Y( C" \5 C8 G/ D
  820.           {
    2 }7 Y  Z: R6 P/ j* x% y
  821.             if(!Dn.Connected())2 B- Q2 I9 k* G- p! H- a# t
  822.             {
    : z# N; T0 E# U7 ?, O$ n5 c
  823.               bFirstUpdate=TRUE;
    4 c0 b& \  ~8 j
  824.               dwTotalFiles=1;& o- b; S' K6 @) K
  825.               dwDownLoaded=0;
    ' J+ w! ^3 u( D% H* I% M
  826.               bSilentStep=FALSE;
    ' T* ?0 h; c+ N" S' `/ \
  827.               bCompressed=TRUE;; _: l! I0 }) W: k9 s& t% d
  828.               strExtLocal=".\\DownLoad\";
      `7 ?" e) i% `  r, s% \; e
  829.               strFullName="update.txt";- J. K3 t$ t: Y1 A6 u) k9 L
  830.               dwProgramState=AP_CONNECT;
    ! \( ?% e% v  E1 s
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 _% l7 V- `4 \8 c( s2 W
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 }; H/ ^* s/ a6 Z) O" y9 t
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");; l& {) Z3 Q0 m& G# @
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# a- b7 ^& l0 M4 m: z. g
  835.               unlink(".\\DownLoad\\checkversion.txt");
    1 i7 R) s* N  M; |; V9 }
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    + f( m, w/ ~( ^. j6 \+ I6 U
  837.               {2 z4 n! t$ Y' z0 M) M6 q6 I4 b
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    & o* J/ ]$ K" t( N4 [8 C
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");3 {1 C+ a: J0 b2 b5 {& E6 k
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");) P% ?& ~( ?) z: W& [, V
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* E6 Y2 O* ?' Q4 L3 X
  842.                
    6 m7 M- z, A' L% A! J& B& y
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    0 c7 y$ D! |5 p4 a* e! h  t  D
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. k4 n# D% C  ?( Y4 Q7 J# p$ J: H  E
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");- A3 D6 |( ?/ c% q1 f& ]0 y
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " s( D5 u- r" l0 T' B
  847.               }3 ^% J% }* D$ e* D5 S, i
  848.               dwStartUpSteps=5;& ^  d+ R$ [, X8 R$ ?
  849.             }. p2 E( _8 b8 }2 ?- G4 q! x
  850.           }7 ~+ d9 j* T# _  j$ B
  851.         }0 N# Q: B  o( g, K5 B0 P& k
  852.         else
    6 y1 {3 P$ X! g; N5 W' Z( I
  853.         {/ R3 `9 `' F* \$ e+ r
  854.           dwStartUpSteps=3;7 B7 k* s& @# T- g& J
  855.         }& `+ g0 V/ S4 X  A" R
  856.       }; f0 `8 c- R( y0 e7 p% w# a1 B- C
  857.       break;
    % ~; W- l+ }  q3 F4 X$ c
  858.     case 5:7 I8 u3 D- n9 X4 X3 U
  859.       {
    ; L, f. }1 r: |7 m' G% s
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)4 @5 x+ {9 A7 p0 M
  861.         {
    8 I3 T8 k6 ?% Z# V
  862.           int opt_overwrite=1;7 v1 U% Z8 H# Q/ S# {/ {
  863.           int opt_do_extract_withoutpath=0;
    % {  M' f! I" S* G: Y, O
  864.           unzFile uf=NULL;
    ) X& w0 m* _* o- E
  865. 6 R7 a# [- d+ q8 S
  866.           uf=unzOpen("Wsa.zip");
    1 l% P8 `/ O9 G4 u8 q+ j' h& L
  867.           if(uf)
    : v3 e6 K0 L5 ~  ^$ [* g# H# g0 F7 i7 _
  868.           {
    ) D/ l  k9 L. e% R6 j
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 @+ a9 O0 G  d. e% ~# I2 m- F- T
  870.             unzClose(uf);' O* I8 `: ?% u( ^6 T
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    0 `: m4 q% Q6 p( ]" K% S
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");. w- N' p1 e3 _4 }9 A, ~
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");* R; D. P0 B$ _1 E, U8 \+ l( x
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  ^( c$ u1 u4 a* H& S
  875.           }
    / N6 O( u# h" h9 j! D
  876.           DeleteFile("Wsa.zip" );# r' x) O2 I7 E% |" J' g# J
  877.         }
    0 U# ]- H* V: Q; z/ |5 ~

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

; E' ?$ B* K2 Z' e: X8 z! b; K/ V: R5 ~

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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