CSUpdate.exe源代码

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

, q. L; p0 x3 E2 M5 M; d; ?2 A, l
  1. / RevApp.cpp : Defines the class behaviors for the application.
    $ Z+ y% o2 r. P/ `% |: ]4 o! P
  2. //- e' p% |+ x+ r& N
  3. & E; ^+ }$ j/ \6 s# k
  4. #include "stdafx.h", N. R* i  {( K" @: Z6 d* p

  5. " K9 F3 x. G- }- o
  6. //#define UNICODE
    ( u% S2 r1 \) @" C6 X+ Q( }7 |% b
  7. //#include <gdiplus.h>
    1 f/ @8 i3 r  E: J9 z9 B1 Y5 b2 R
  8. //using namespace Gdiplus;
    ( i; n$ J- c' y

  9. ( ~0 r; @8 r7 o# E$ ?
  10. #include "RevApp.h"
    1 \0 _9 r" m7 V1 ^" D$ ^# ^% R
  11. #include "RevAppDlg.h"
    & B  t( V; c6 i+ ?! c
  12. + C/ {/ w9 i9 a
  13. #pragma warning(disable:4786)
    0 k* b6 b4 J  a6 U1 H2 W
  14. #include <map>' y' _# O+ k; w8 a7 d& z
  15. #include <list>
    # |1 g- ~$ D. I
  16. #include <direct.h>
    3 t' F8 {2 |4 H5 C
  17. 8 F1 k% R6 z" z; C3 @6 O
  18. #ifdef _DEBUG4 X2 r$ v% Y3 m3 |2 I3 d' L
  19. #define new DEBUG_NEW/ C, R' {( B8 Y* V. j
  20. #undef THIS_FILE8 }+ I$ M( T1 Q6 w! n: O8 t
  21. static char THIS_FILE[] = __FILE__;
    " Q6 ]/ Q6 q, R; Z9 Z- c. R
  22. #endif
    . x2 w, ~" ?, `8 d
  23. #include "SkinResDef.h"
    + w; g8 z* s% P! ]/ R8 K" \& \# r
  24. #include "ChangeBG.h"
    " `7 R5 \) N# }1 U) {' c' x6 K
  25. #include "AFXINET.H"
    ' V) C, n0 b* w, k6 G* E

  26. 5 P$ J8 |) Z1 `& f
  27. #define TRADITIONAL_CHINESE 0
    # t8 g* M: l9 }8 E# W% ]& A6 P
  28. #define SIMPLIFY_CHINESE 16 D9 u- l% S0 X$ g
  29. #define ENGLISH 2
    1 H2 X2 d, O: \% V: k; x
  30. int m_iLanguage = ENGLISH;% W9 \4 w$ J: G; V; ^5 S4 f
  31. /////////////////////////////////////////////////////////////////////////////
    1 q( [. y/ g2 L7 @' U# \( N8 e! O
  32. // CRevAppApp
    4 R. g' `( b0 L( l1 l& I8 ~

  33. / i$ E& ?( q) ]8 ?: ~" @; f
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    / Z8 v1 q" h  ?! B( h+ U
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    : X. @8 q. c9 U3 p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    , z0 d# \! _9 Z, O. D, m
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!; L, s+ p% T6 {; q
  38.         //}}AFX_MSG) k$ r* E7 X1 q/ }1 [- g
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)! \$ [0 v* G+ M2 L
  40. END_MESSAGE_MAP(), x/ j( b: E5 y# p; T$ [
  41. , f0 F' n! T9 C( l# U
  42. /////////////////////////////////////////////////////////////////////////////
    ; s/ y+ J* Y% s! E  [
  43. // CRevAppApp construction$ C: R/ I3 o6 T* e3 _

  44. + f+ }  J  p+ Z; V7 D/ y5 p
  45. CRevAppApp::CRevAppApp()2 a' Q7 P, m3 A9 K: v$ L* _) d
  46. {
    ; C, G0 e) R0 y4 ~  t2 |
  47.         // TODO: add construction code here,
    ; t& L9 f% p3 Q6 e  Q/ ]. P! b* L
  48.         // Place all significant initialization in InitInstance6 X3 H2 a: I, i5 a0 O4 l' u
  49.   bDisplayIsBig5=FALSE;% \) ?7 l8 Z# Y, L' n( M
  50.   bRestartUpdater=FALSE;
    + |9 A7 ~% ]9 S# _5 L) A5 G. p  G5 w, S
  51.   bFinishUpdated=FALSE;
    9 t0 [5 K4 R8 y4 e( |# o
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;# f; u9 S1 {% j# n3 l- {- D
  53.   InitChangeDataBig52GBKS();
    4 J5 |7 x6 a& |& K
  54.   InitChangeDataGBKS2Big5();! W7 c" R$ l6 ]2 x& [# c1 g9 Y
  55.         //7 A/ X" R9 [4 d8 M) s/ |
  56.         bClickRunExe = FALSE;
    ' V6 [7 v) i- G
  57.         //9 J5 E6 ?3 p" C+ `
  58. }" _% x% J1 r+ J" M- p* `

  59. * E% n$ E6 Q/ c1 ^& U
  60. CRevAppApp::~CRevAppApp()
    & O4 \: P8 c# w5 O7 X
  61. {7 q: t" _; ~" |! w
  62.         // TODO: add construction code here,
    ) w% w' ^6 c# c! H; N
  63.         // Place all significant initialization in InitInstance* Z4 d+ ?1 N" R: |: o
  64.   EndChangeData();
    ' R( H7 W# U* {# o# t6 y, B
  65. }
    8 H; V% n( ~$ t6 I" o4 u  k8 q: V
  66. 8 W6 e% I% O0 p+ J7 f) Z3 ^: Q
  67. /////////////////////////////////////////////////////////////////////////////+ w/ `; z8 e4 m4 I
  68. // The one and only CRevAppApp object
    ( |$ v, S* ^  k+ Q! e

  69. 2 X* x, Z6 b% Z  l
  70. CRevAppApp theApp;% A4 ?1 Q( C+ |- U' C6 Z! Y, T/ s
  71. ) l/ g0 p0 U; c4 v: }5 N! D$ s& i
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    $ I$ t* S" F9 k1 ~
  73. {* [5 {6 i8 ?1 B8 \* _( `: L) o( ]
  74.   int iEOF=0;: R6 ~8 b. n1 d6 _, F
  75.   char szTempName[MAX_PATH];
    " B$ r& c& x( Z- ^. N+ d
  76.   *szFileName=0;
    ( t" `0 ~+ b, q
  77.   iEOF=fscanf(fp,"%s",szTempName);8 C0 y" X# B1 N, h' A8 w
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    0 g+ G' I( ?& ?' w
  79.   {
    / Z1 X8 z" L! s" s/ E
  80.     strcpy(szFileName,&szTempName[1]);8 d2 T' B6 S) v& A
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    1 ^5 ?$ r$ i  d. B4 d
  82.     {
    4 m8 f7 q3 Z( W$ x" h
  83.       iEOF=fscanf(fp,"%s",szTempName);" [6 \  @" O/ O- o7 h: V; m
  84.       strcat(szFileName," ");$ H& E1 h; A9 d
  85.       strcat(szFileName,szTempName);
    8 v/ _% E( [9 S, P
  86.     }
    9 Q6 [) Y: n/ r+ S" B7 A, ^
  87.     if(strlen(szFileName)>=1)! K) l7 y. j5 T0 h" N9 n/ {* M) x4 d
  88.     {
    ! h# L( c: w- I; h$ n
  89.       szFileName[strlen(szFileName)-1]=0;
    % v! ]7 v9 G6 F8 m+ P1 l/ R
  90.     }4 b: u! S+ _2 c  ]7 }3 k* P6 c
  91.   }
    0 V5 j# C. p* x9 M' t1 X. H
  92.   return szFileName;" b" k  R$ |' Q9 |
  93. }
    7 }8 P/ t1 f' d5 Q
  94.   a+ z' u- O4 [
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    . e. }" _* ^& N" _; e; R
  96. {3 Q' O% l4 p& a. H
  97.   FILE *fp;
      h$ D0 m6 C% M) V4 m: |4 }
  98.   char *key=NULL;# n! V9 h5 |8 x6 O
  99.   char version[MAX_PATH];
    . ?" g5 D% e9 ?
  100.   LPUPDATEFILE file,olds;
    & x5 `1 U6 }& `0 D7 P! ]$ B: J
  101.   std::map<CString,LPUPDATEFILE>::iterator p;0 l, s8 m7 g3 }% U/ ?
  102. " |: W# x8 r% H' Z; c! c
  103.   UpdateList.clear();
    ' b8 \9 p: @! K9 [
  104.   UpdateFile.clear();7 N. c- ]; t0 i* M4 s( D* h
  105.   if(GetFileAttributes(filename)==-1) return false;2 ^) Q) B- |. q) Q7 M, v* u+ A
  106.   if(!(fp=fopen(filename,"r"))) return false;( ]4 k/ X5 d# p. @/ K6 `
  107.   fscanf(fp,"%s",version);* m/ M0 J4 M5 ^" h: M
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ! h. e" ^& Z9 x7 G$ _0 Q3 I5 [! n
  109.   while(fscanf(fp,"%s",version)!=EOF)
    1 {4 e( D5 k( s7 }9 y0 o) D
  110.   {1 t: \" n; o. q0 {
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 r% ^7 v! a8 l4 A! t4 i$ q
  112.     fscanf(fp,"%s",file->path);6 u8 ^* Z$ p& {3 R3 j! d1 a7 }
  113.     ReadFileNames(fp,file->file);
    6 Z  M1 W8 w3 e' v7 q
  114.     strcpy(file->full,".");2 {  n: b; m& l9 ~+ g2 T
  115.     strcat(file->full,file->path);% ]2 O" s' i; r9 `2 g
  116.     strcat(file->full,file->file);; s4 \8 m) T! y8 \0 i
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())4 k# r$ t0 S; a1 g) `4 c
  118.     {
    ' ?5 V8 C* K  R5 H- L2 u) Q
  119.       file->vers=(float)atof(version);: X; Z# c9 \( I: C! e4 s" i* d
  120.       UpdateList.push_back(file->full);5 A3 @8 p+ l/ h: p0 l2 F5 Z- K
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));. S; L8 l) x0 f6 S6 l. Y/ D) O
  122.     }6 G+ v7 X6 N" X6 X, B: c
  123.     else+ B3 A" m  ^2 Q6 t  f& k3 U. p
  124.     {
    0 {& Q" u. S' d$ `6 a8 ]7 k
  125.       olds=(*p).second;
    * Q  `3 a- ~3 Y8 z. l
  126.       if(olds->vers<(float)atof(version))  Q" A# h, G9 X$ d8 Y
  127.       {
    ; u' a: l8 Y$ n" Y1 p& I7 a8 ]
  128.         olds->vers=(float)atof(version);
    " A' s# Z$ m& k7 z/ O8 y: N5 b/ W9 L
  129.       }
    8 o3 m- n& c6 U' }3 Y6 j& Z
  130.       free(file);
    * \% `1 A% M" w7 @3 O
  131.     }. h5 ]' |, z3 P" U. e& @
  132.   }
    0 a( J- l: H5 e0 N7 ^
  133.   fclose(fp);2 G* @, Q8 ^( g' a
  134.   return true;! X! s8 R/ w5 O
  135. }
    ) _+ N! p& V' ^& l( y4 V
  136. # |" V) l. ?( W* e5 i9 J% Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    / `" Z4 Y+ h6 G: K0 ^, }! ~8 B7 C
  138. {
    7 I7 F" E+ L& C3 N
  139.   TCHAR  szFull[MAX_PATH];' e0 }4 u  \" f1 T
  140.   TCHAR *token,*inter;
    4 \' g- ^/ K4 {0 T9 f
  141.   *szPath=0;1 u1 c7 y( M  I. A+ I8 k; J
  142.   strcpy(szFull,szFullPath);1 Z  l' y  [3 D2 {/ I
  143.   token=strtok(szFull,"\\/");5 G0 p7 Z  i$ G1 {( _+ }0 @' f
  144.   inter=token;5 ]) I: \4 a6 i
  145.   while(token=strtok(NULL,"\\/"))
    1 b$ H9 a+ v# X
  146.   {1 H. `+ b6 R6 r8 `# c! {# e
  147.     strcat(szPath,inter);
    / Q) e8 X1 F: \6 Z, U
  148.     strcat(szPath,"\");
    9 f$ @6 J6 m  @' T" P: s+ y
  149.     inter=token;
    - L! z2 C  q. H$ f
  150.   }
    " [& c. I. }6 @! V
  151.   return strlen(szPath);
    0 b$ V! \% V, A6 ~6 J- M8 _( \0 `
  152. }" K. Y" v+ C( R$ S8 [

  153. ) a- ]8 K, n+ U
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) q5 f1 B/ C/ c+ U* N+ {7 `5 v% c
  155. {% y3 P3 M! p+ n8 N% M# f
  156.   DWORD attrib=GetFileAttributes(Target);9 s& K9 l' O( O) a5 q& m) Y' s
  157.   if(attrib!=-1)2 B( j$ ]. U* f6 X: T- w
  158.   {$ x$ Y0 s, g# H. i
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  J" H7 ]9 ]! ^
  160.     {% B+ k1 r+ G9 {
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : X% \) V; c6 Z" ]
  162.       SetFileAttributes(Target,attrib);7 a; ^2 W* j' o% z8 m* y
  163.     }
    ( s% G( x& ~0 l( T. x1 z$ F8 T
  164.   }
    1 F+ |" ^5 y$ d  C
  165.   CopyFile(Source,Target,Erase);! S. a1 E# B) V  A5 E8 j2 j; U  P
  166. }" y6 g3 k7 G2 [5 I; U

  167. 5 U% D* h, }% I% V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)# _3 r* B" I. K2 m( `
  169. {
    7 I, s6 M4 H: R- }
  170.      FILE *fp;
    1 R! W) p' y) b; {! V/ i
  171.      char  szBuffer[8192];/ ~5 v  h9 r3 F, M* B$ M8 z
  172.   va_list  argptr;
    9 Z, X/ w  v! s# W# E

  173. ' Y2 b8 g' d7 Z+ l, e& I
  174.         va_start(argptr,message);
    & R4 _7 Z  ?/ Z# z  S, E) t: u
  175.         vsprintf(szBuffer,message,argptr);# z8 E" Q& ~: ?+ h" Z+ ], C
  176.         va_end(argptr);
    # y' J2 p0 e) T8 w& z$ B! w- v3 ^0 c
  177.   fp=fopen(FileName,"a");
    ; U* B8 k- Y5 S! Q/ ]/ [
  178.   if(fp)
    4 H" W( R) v$ d
  179.   {' c8 Z3 D! `" D" ?$ b3 c6 e
  180.     fprintf(fp,szBuffer);2 f1 c' @" N# o% d3 |
  181.     fclose(fp);5 r! a* z' h* f# w/ S. [
  182.           _flushall();
    " Q3 f% n* V8 H% x
  183.   }
    8 N( L* w: X  }8 }" `$ c' z/ Q
  184. }1 [, K- }/ F) R1 U/ g
  185. 6 D4 i0 i2 Q, a: ?7 z
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    7 v; R5 C# d% x
  187. {: W# @, p: m' t5 @
  188.      FILE *fp;! r# J1 M( [' x, q* C
  189.     DWORD  attrib;- c. p) M! z: L9 X9 c( O
  190.   attrib=GetFileAttributes(FileName);# q* a5 X3 }" R" z
  191.   if(attrib!=-1)* }6 }, C; x6 o. k$ O
  192.   {; F* R9 }7 N/ a' D: o$ h  M* B0 P
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    1 a) T, z2 g. ?/ o$ V* y" `
  194.     if(!SetFileAttributes(FileName,attrib))
    ' c/ F5 ]2 C* c) k' @$ ]" ~( Y3 \0 s
  195.     {6 m: g% l% p% g! Z: |
  196.       return FALSE;0 {0 h, i5 t) {& V0 Q  Z- a0 f
  197.     }
    " L$ {8 t: ?+ p# d
  198.   }
    ) H5 N4 n. I* w" b4 Q2 B, Q7 h
  199.   fp=fopen(FileName,"wb");" r. C4 ~$ A1 K9 F$ N
  200.   if(fp)6 |* p/ l+ X7 _$ `7 O1 n
  201.   {
    2 l( ]( W  m  U; u6 a/ Z9 {) t8 t
  202.     fclose(fp);
    % e$ A' h" C1 X5 g) Z+ g! U
  203.   }$ w% ~  W9 S; [4 d. P3 E* C
  204.   return TRUE;. ?5 e- V+ M2 E7 s% f
  205. }
    3 u7 e8 N1 n! A& w1 f' {

  206. ) i% J4 O- i, b! _+ Z: S. t5 y
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ ]: h' s3 ?, q! t9 {- x
  208. {& x0 E4 @; R) |- d9 o
  209.   char filename[MAX_PATH];
    9 \6 Z, @; p: C7 ]
  210.   LPUPDATEFILE file,olds;" [9 q7 _3 i3 z& E4 T3 |' M
  211.   std::map<int,CString>::iterator i;
    7 k; q9 ]/ d0 Y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) j2 f6 m; C$ n) J# n* ^- J
  213.   std::list<CString>::iterator l;% I5 k1 n8 X' \6 c* U! W
  214. 0 N7 b& D2 ]# J8 O
  215.   if(bFirstUpdate)
    * C; C+ i( S$ }+ y. R
  216.   {
    ; j/ v0 n6 y$ {2 _8 y
  217.     dwCurrFile=0;; ~2 p/ S5 w% N3 Y# B
  218.     bFirstUpdate=FALSE;
    7 P4 r$ I) D7 R% }0 a
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())" m; J6 _" R" i( z6 s7 Q* }
  220.     {8 e9 `8 c& V8 k
  221.       dwTotalFiles=UpdateLocal.size();
    , Z6 \: G+ Z% w, ~2 E% p# V
  222.       dwDownLoaded=0;$ Y' V* G) p& U) {3 {3 J( l, K
  223.       bSilentStep=FALSE;% j- i8 u8 u5 z; H
  224.       bCompressed=TRUE;
    & x: |3 z* ~8 J% d8 x
  225.       strExtLocal.Empty();
    ( X# n1 w$ W$ c& B( J9 |
  226.       strFullName=(*i).second;
    8 k. z/ K: x- M) H+ P# {
  227.       dwProgramState=AP_CONNECT;- r  B9 i* {3 B$ X1 ]( o' x& a
  228.       return TRUE;5 q, o& A7 g1 Q; {9 c0 L
  229.     }
    5 `% Z+ n8 Y! j9 _! m  H
  230.   }
    6 P2 }7 g5 w! t9 \8 y
  231.   else if(bRestartUpdater==FALSE)
    ) o% X- k5 ?8 A$ G4 l2 Z: r
  232.   {
    0 v& b: R2 z- l' B: s" [: w
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ) w; J8 L: ]8 r! o' L" A
  234.     {
    ) Y. C2 @$ g; L. Q) r+ ?
  235.       file=(*p).second;, V2 ^8 z1 P! x4 |
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ; h2 c* g9 _5 j; i; S7 A
  237.       {
    . L# V( v! w; b; @/ ~  k
  238.         olds=(*p).second;# V& _  p' ?8 t+ D
  239.         olds->vers=file->vers;, Z7 U2 e4 m- t" v
  240.       }
    3 H( y5 O' l* g1 g
  241.       else( g+ a9 B( H0 e: w
  242.       {
    ) A1 t* |3 u0 G3 D
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! Q9 }/ M  x% c1 {
  244.         memcpy(olds,file,sizeof(UPDATEFILE));1 o2 ?. O: e0 U/ y& [
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    & ?. i' ?7 d5 x9 [* J. G
  246.       }" b5 X) `- w1 V6 |
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 D" S' l( o' A, M- s# I1 D
  248.       sprintf(filename,"(%s)",file->file);8 x# C- Z. l6 Y6 k* c' }
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 r& ]9 F4 S5 s0 v8 T
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }% `: l% e& M" @. n. t2 X7 v
  251.     }
    2 x) i" E: Z% D5 W3 E0 w. B9 a
  252.     dwCurrFile++;+ \* D6 C" g# U5 A$ i7 ?
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) Z  m' s! A7 d: \
  254.     {* h  E8 e6 P& s" d+ _2 i4 m' u
  255.       bSilentStep=FALSE;9 W7 X9 ~6 u1 W: h0 O, l
  256.       bCompressed=TRUE;
    6 ^7 F! e/ r1 |9 C' _
  257.       strExtLocal.Empty();
    , l* z, Q( ~, n+ ], K, D8 \
  258.       strFullName=(*i).second;% ~7 C# M! h& V! |( l6 H1 m
  259.       dwProgramState=AP_CONNECT;
    & r. E# H4 B9 Q& S/ \
  260.       return TRUE;
    - V) Q  Y( G! u* [6 D
  261.     }% x9 c6 K$ x1 Y- ?9 _# u
  262.     if(!bRestartUpdater)
    / K$ ~  j9 i4 b+ {! `" |
  263.     {: t6 C- d  A! r7 ?( L
  264.       int iCurrSize,iFileSize;
    # K) {5 [  \/ [+ W! L  Z
  265.       iCurrSize=0;# X5 ~7 x- X( v/ s/ x
  266.       iFileSize=UpdateList2.size();
    - M1 v& e$ U" H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");7 f6 y% I: O! ]) H8 h3 @
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");6 U. T' N3 U) f& z" J3 f- r
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 {% y# L3 N- Y6 o! m
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & A0 R7 k# r5 P, k! G& E. Q
  271.       Fclearf(".\\update.dat");
    - t/ \- ~9 h) w% L0 c. E
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ( e# z7 \, M: n' R
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + e* j3 c- s5 e% L4 ~. r
  274.       {0 }- I! X5 F; z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    6 F& B! w# I$ C& _: e4 L* x( q0 ^
  276.         {0 F+ e2 L- Z. x9 l, c* q
  277.           file=(*p).second;7 k. k2 p1 n7 b3 B3 X6 H
  278.           sprintf(filename,"(%s)",file->file);7 g8 t5 V) f; r( Z, Z: Q! b
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # h7 G# q" @, ~2 |: \; v( i
  280.           iCurrSize++;8 K. e9 A9 J# k
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ) ?+ m- g, z% L
  282.         }8 O9 p" A/ W) `  |
  283.       }' |7 h( I, d1 L$ W
  284.       unlink(".\\update.txt");* n8 ]5 {6 B# U1 @0 D+ S5 y- K' v5 l
  285.       unlink(".\\update.tmp");
    9 {# l$ {5 i8 P' |$ Q/ @
  286.       Fclearf(".\\checkversion.dat");2 x6 a- y. c/ a: u2 S2 ]6 J
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    + C3 Y7 k3 k( j, f& k
  288.       if(UpdateLocal.size())
    ; Q( Z( w7 ?0 B( v" a
  289.       {
    : Q8 K+ d, j% P3 {( ?( }- X* `
  290.         UpdateLocal.clear();
    : Z/ C. G) ]* l- \! T% @0 E8 t
  291.       }
    5 N: P# ^8 Z' {
  292.       if(UpdateFile3.size())) \$ C) `$ Z2 u5 }, u3 O$ [
  293.       {5 D. `9 j2 O0 v, _* e& m' ^, b
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % @8 ~' v# o. v) }3 @4 n% g3 ?+ a
  295.         {) G+ {" I# L$ P% e2 }1 X4 T
  296.           file=(*p).second;
    1 H+ |" B7 g9 e5 J! C( f9 b4 J
  297.           free(file);
    8 T, @* o2 V& F4 U% s( }
  298.         }
    ' t+ \1 ^  e* Q8 a
  299.         UpdateFile3.clear();: f( }7 M* X& w  f" n6 r8 G
  300.         UpdateList3.clear();" N( w4 k' J7 s
  301.       }  K8 w% x9 ^# Y; v$ s( I) z6 k
  302.       if(UpdateFile2.size())* Q4 T4 v+ R- b( ~
  303.       {
    4 e7 z8 n' I0 J! l) L8 j- j
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). U( V# N5 ?8 Z7 K
  305.         {% q5 o5 [+ H+ H* g
  306.           file=(*p).second;
    1 o! b- ~7 G2 R6 F. k* o+ Z$ q
  307.           free(file);
    ! t6 t7 F/ E6 e9 c9 G
  308.         }
    ! P% u7 h9 g5 {1 u" O7 _$ w
  309.         UpdateFile2.clear();% l/ ~& C9 q9 P' t: ]+ j, r7 ~
  310.         UpdateList2.clear();
    * Q2 v6 d4 t; O: u
  311.       }
    : u/ ?9 T2 ^  \7 _9 }4 h
  312.       if(UpdateFile1.size())
    # R! w- M0 t, F7 ^( K2 D- v. G. W
  313.       {
    ( q' |$ ], p+ C' R; _( g7 R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). r6 H5 e8 {9 X# H" C+ V1 r- \6 V1 [
  315.         {
    8 u; P. R  H  X0 ~' K
  316.           file=(*p).second;$ Y: U3 i( v4 n8 h5 r# m* `$ b
  317.           free(file);
    - G. ~4 {( q3 |. P& X3 }: j
  318.         }. ]" w  r( F% _8 J( i& Y
  319.         UpdateFile1.clear();
      Q4 z; n8 u' T2 u* G) M$ a7 L9 E
  320.         UpdateList1.clear();, D' n# X3 d! `0 O0 a
  321.       }
    2 X% O9 Q$ |6 o- _$ P- W1 t
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ! \! }' r( Y7 k8 i4 A* S& `" X
  323.     }
    . k' H/ d4 C* C+ X- H
  324.   }
    ( }- Y  V0 Z0 T5 w* l3 T, r, O
  325.   return FALSE;% v8 i6 s) x! U+ E
  326. }
    - y, l, j) X( n1 ^

  327. 7 B9 Y* l) v# d4 J) Z9 y' [
  328. void CRevAppApp::ClearAll(void)/ W# t8 e- ]! f+ L/ i- \( ~! q) I# L
  329. {
    # }4 u- e/ _+ X4 F( @( L1 S+ w
  330.   LPUPDATEFILE file;
    ( Y3 D( h# O3 z( c6 ?
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 t! }0 C) T, Q& A2 u
  332. 1 H0 {) }; X; [7 W- S
  333.   if(UpdateLocal.size())
    6 P  ?; w$ f  y. h, _; f! D3 j
  334.   {
    * l  P4 J' B3 _. Q5 z7 V
  335.     UpdateLocal.clear();9 A3 h3 ^5 ~# l2 _- M
  336.   }. w: |& @* R: J8 A, H  I( v
  337.   if(UpdateFile3.size())+ M1 |$ B- _! c7 A. `
  338.   {
    4 y, l" t$ W  s& H' h
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 f! f) ?7 I1 j! w- Q
  340.     {
    1 c. Z9 p3 }& e: @* @/ U7 v) G
  341.       file=(*p).second;& J+ g* x5 W: p' R2 Z$ o/ E
  342.       free(file);( h# r' e$ v: N$ |
  343.     }
    ; z, ~# e. T# B, m4 g, R9 J: v8 o. K0 K
  344.     UpdateFile3.clear();+ `$ @4 J) R- k: }0 I1 D
  345.     UpdateList3.clear();! c0 I8 |& U7 |' @% G; G. k. l
  346.   }7 ]2 |- a, L- ?: y# p, ?
  347.   if(UpdateFile2.size())
    / `( o) N& U& p# Y( m2 W
  348.   {! s. K! h; L1 Y8 B7 d
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) _/ l* N  Y) g
  350.     {7 M6 C8 A# ~" j0 q& E5 a" J
  351.       file=(*p).second;( A6 X! n/ U$ v" {: h0 E! E
  352.       free(file);
    4 s; A. }1 _6 \0 M- O: [8 ^+ V
  353.     }0 {8 B5 U+ C* Q. X6 @, P% h) Z
  354.     UpdateFile2.clear();
    ; Y' H4 F4 b$ J1 G- f$ N, r4 z
  355.     UpdateList2.clear();
    3 I& v/ v" I! F4 J# ^/ V5 ]
  356.   }2 K' O- p# ^7 o5 F, i8 F
  357.   if(UpdateFile1.size())
    4 P1 ]5 f: U8 v8 c; u
  358.   {
    4 B5 O4 W/ \. U5 N; b$ |- c8 U
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 ?2 a* j& T8 T* y% ~
  360.     {4 P% o& F& J! b3 Y: q( Y4 x0 V, J% _4 G
  361.       file=(*p).second;, @- Z' T: H% z8 N  u
  362.       free(file);
    4 k3 s9 M7 ~2 b. _1 w1 x
  363.     }
    ! p" p1 d% ^  _$ o5 t
  364.     UpdateFile1.clear();
      X6 p' t* E. t  J
  365.     UpdateList1.clear();
    % P, _3 R; G; C+ Z6 o
  366.   }
    9 r, r4 M7 `7 O6 j3 `
  367. }  9 `. O! D: y9 \- [! u: f
  368.   
    - c/ N6 n3 k4 E) u1 k  K
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    & H7 I$ Q7 f. F8 }$ _; d' A$ N
  370. {5 k) b; v5 e( p. k
  371.   int c;9 i; x( D% L) Q9 Y) d
  372.   LPUPDATEFILE file1,file2;
    % \2 z" N) C7 P; O
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;" [3 p8 p' G7 Y/ s. o! P
  374.   std::list<CString>::iterator l;, F3 v& \) x0 R+ M1 x

  375. . v) q1 l- Y; S% |
  376.   UpdateLocal.clear();
    9 G5 E2 ~+ a, ^2 n- c: X) s5 x0 @
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    - D, G/ y! {% E
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    6 s- h. l2 o" q- ]. f, F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);/ F& {5 {  `! [! ~' Q
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    & }% x, l9 \8 X$ u/ F6 b
  381.   if(UpdateFile3.size()). v2 n2 N) X. ]
  382.   {# Y1 f1 p3 u9 v# S
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    : A5 L7 X; _) F2 `6 R
  384.     {% T+ h; c% O9 Q& Q' ^& j% m
  385.       file2=(LPUPDATEFILE)(*i).second;
    6 M: s+ @# m7 I5 Y
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ I7 C1 S+ w$ m( U
  387.       {
    3 `0 w! j& I3 |- u
  388.         file1=(LPUPDATEFILE)(*p).second;$ V; R1 [, `: L3 y0 y
  389.         file1->vers=file2->vers;( t2 P. \+ }. w- I, a( ?5 h1 g
  390.       }7 ]7 D, I- a7 n, J1 P; u+ x7 c5 g
  391.       else
    3 |; P, n( V+ \. S5 P) U
  392.       {, _0 ?0 W3 `) @* X# v/ }
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ |1 k$ k6 \% Y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));) ^( X1 x3 U- r: |- ]: X- z
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ; x% W- X# D' H, ?; t0 C" L5 g
  396.       }
    5 N6 v- W$ O2 A1 L
  397.     }; E: O0 h3 J( I# Y! ?4 s3 C
  398.   }
    7 K& Z/ v* B6 `0 @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( K/ O+ b% U# E% \& Q
  400.   {
    ! [9 d. a# b  V  l, u8 `) p2 \
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    3 e! L/ ~4 u) x1 M" k
  402.     {- _5 L! Y- U/ S3 g$ X  y
  403.       file2=(LPUPDATEFILE)(*i).second;
    & u$ E! {4 v3 [/ ^, p7 z3 B
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; z0 r2 z: E( k4 }3 e, W
  405.       {2 W7 e; N+ i! k
  406.         file1=(LPUPDATEFILE)(*p).second;1 N# w& C7 _8 m. Y. X  R* a' t
  407.         if(file1->vers!=file2->vers)
    6 b8 I' |; o, M. G4 s, ?) `
  408.         {' N1 M! i( E$ u' c' q0 }
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # ]/ F( f: H" }
  410.           c++;( `# d  |3 Y; w
  411.         }* w- N' K7 u3 E
  412.       }7 a9 \# t4 F+ f
  413.       else
    ' s% d8 u' v3 u  `( E1 L' [: ^
  414.       {
    * ^! s5 K$ K( S: H. v! j
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    , [* d1 A& _6 s+ U! z
  416.         c++;- b6 C$ F% m0 \* q: X4 f( s
  417.       }
    & I: ~7 Y1 y! R& e5 V  z: T9 y
  418.     }
    * \  K4 A, r. @8 |# y" c5 D
  419.   }/ l4 i% e1 t1 t$ K" L
  420.   unlink(".\\DownLoad\\update.txt");1 {$ t% n" O% I7 L: i3 i
  421.   if(UpdateLocal.size()) return TRUE;
    0 c! s% r& R9 }) S" W- d
  422.   else                   return FALSE;
    ' e# c4 X2 r, H8 M$ C4 T
  423. }6 X9 T0 `8 z& P7 }% |1 S$ V
  424. * I; ]0 n6 l" [
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"" t* C. [& p5 C; N+ g1 V
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    : H# R8 R$ R# `! T; T: f4 g0 I1 f
  427. & v3 V) d2 |: `
  428. 1 R$ W7 [$ L6 j

  429. ' C8 E2 F0 `3 G  E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    0 w& E5 n$ l1 U6 m5 {: f; `! N
  431. {& [' d3 @* ?3 V7 G) t
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;9 X7 {* W. [% u1 }- R8 S
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      o9 J  q- k' R) ]9 T
  434.   {
    $ w% W9 g' O' v6 [
  435.     char szLanguage[50];# D; d8 W+ F: v& k! Q% _
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% g# r/ P- {3 k6 X; L: ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % u" j. S1 y2 N6 m+ \8 M
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' E4 r6 e; [/ g9 b5 v
  439.     else                                   m_iLanguage=ENGLISH;0 h+ u4 F* D) s. L1 T
  440.     char szRegister[100];
    0 r$ {& `- c  W( W9 B
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 q' d: ^. W7 R* Y" e
  442.     strRegsName=szRegister;; [, ~0 k( R3 J& y9 R
  443.     char szPatchURL[100];! `" G& _/ [# M  D0 e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 F, a$ z( X; R% {% _& e  M
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( C" j$ V9 N8 P3 \1 T
  446.   }( c# G2 d' V# K1 F
  447.   else; @: e9 z& X# p' c2 J7 U, B7 Z
  448.   {7 b( S# w0 \# g0 r
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' n- h3 t0 w' n0 ^8 ~# L* W
  450.     strRegsName=DEFAULT_REG_URL;
    / H1 X2 T. ?: A
  451.   }/ ]( ~$ q* s5 d1 o8 S- B9 i
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    " p. T7 f% P0 l; s( {1 }
  453.   {' m' H( O" R, t+ T3 {7 l
  454.     char szIP[50];
    " w- O7 Z1 a. X+ o" |5 j
  455.     char szDIR[300];' f+ q% f& m7 y; _9 a
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 h, O, h% `5 g* h) H
  457.     {
    ! h+ m/ i, ]2 y& a( F
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    1 G! F/ _- r' \7 n9 N8 a; Z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");' B+ }( m& c5 ?. _( g
  460.       strHostName=szIP;5 B) o" e6 y6 w( q2 Q7 T; a
  461.       strHostPath.Format("/%s",szDIR);
    1 B% z4 X- G7 O- s& o$ W
  462.     }
    * G. M  d( K! a9 F! p- {% U
  463.     else. `; W4 o# T" l
  464.     {
    , j: L/ p" q- U' S# {
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  F9 L4 @1 }0 B
  466.       {
    ) U5 E7 J" g' h+ V" v
  467.         char szLanguage[50];
    8 p/ A" t2 r" a& d+ K& o. y" Y: ^
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 V+ Z5 z1 i8 b. Q, B- D5 J7 P
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' `9 g7 |5 w) y4 p
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' `3 `- C! Z; n4 J! {
  471.         else                                   m_iLanguage=ENGLISH;9 ~, S2 H) i$ T5 {4 S
  472.         char szRegister[100];
    $ |3 N( }# C( `' R+ b' l0 V
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 F) F2 `/ S0 G7 k6 ~
  474.         strRegsName=szRegister;: k- P) p! P: M/ T0 o. V
  475.         char szPatchURL[100];
    ( P, ^. F7 v. a" L
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : s7 g0 T4 z5 K1 k
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( Z, s9 A% a$ ]# q  N1 P  X
  478.       }! G7 A4 [0 U% ?# n' E
  479.       else
    : \2 }3 I* o( {. S/ A8 r- _* E
  480.       {5 \) ^) Y4 ]% i6 t1 ?% Z1 T; a
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 \  b! A5 D! m; `: Y
  482.         strRegsName=DEFAULT_REG_URL;6 F. _8 r0 }4 \" v) H
  483.       }2 F% F8 g8 D; c
  484.     }
    : M4 e6 s0 h4 ]4 }- B& t3 p1 f
  485.   }- S$ ~( d. o5 {( \4 F2 A
  486.   return true;4 g8 K. j" Y4 i- g  _! a
  487. }
    * \8 }$ s2 L2 n, Y% y2 {7 U
  488. - r; T3 P% G) }
  489. #include ".\ZLib\unzip.h": r* C; ?; ]) s- c
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);7 q: ~4 ^' w+ m3 Z% f& j
  491. /////////////////////////////////////////////////////////////////////////////
    1 t" [' N  u1 Z2 q- o
  492. // CRevAppApp initialization
    $ G! u" d- B( p
  493. ; y4 x" K$ C% |& ^0 t" V
  494. BOOL CRevAppApp::InitInstance()
    4 Y9 M0 H/ v; s1 H
  495. {) H9 i( |  s1 h) F. A" _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    2 k; b6 K8 Q+ L& C% e# L; c+ C

  497. & [# K) y3 ?1 d1 V/ F
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    - e! V5 S1 _& l- }6 y! K
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    6 c  \- m5 l1 A# @0 T
  500.   {
    ( X1 ^9 J: w- Q* I. m3 n
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");+ j* a1 F" m7 V# W2 D6 O. S
  502.     GetPathFromFullPath(szPathTarget,szPathSource);2 a, j# b! J! b9 N3 ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ' `1 X  S2 b. }3 x5 C: [
  504.     {7 p4 u  b6 L0 i3 b& D
  505.       strcpy(szPath,szPathTarget);& o) ]$ y, \: o0 G9 c* X
  506.       SetCurrentDirectory(szPath);( o+ M( d2 o) _
  507.     }; C! d' l/ x: v$ ~
  508.   }
    2 X7 @* `2 t9 [( a+ A
  509. #ifdef _DEBUG. @5 K4 K8 U+ g  q$ ~. l
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' n; D3 a6 N. D* i" J% k
  511. #else
    6 J; q+ `$ M! _
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - B: A! _8 W% r# a
  513. #endif
    5 J2 ?7 ]- ]+ N& m& k' Y
  514.   {8 t# n- g2 b' ]( t, T2 L' l
  515.     char tempFileName[MAX_PATH];. R3 y( ]2 d* g: _
  516.     strcpy(tempFileName,szPathSource);
    : n4 l' Z$ n7 L0 y0 y! u* q
  517.     tempFileName[strlen(szPathSource)-12]=0;# @& L: t  Y% ~3 @( R0 u- E; Z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    $ d. n1 E+ R0 w2 \) M) ]6 e
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);! x' h: @; i0 ?
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    - R+ ?* G+ G7 B6 a" e- {
  521.     return TRUE;( j5 R# ~% F5 A0 N! F
  522.   }
    1 d# e9 }4 [3 N5 r
  523.   // Nuke 0118: Delete run.exe+ I$ X6 I8 b( t6 o" W" z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ) i' }- j' |6 q' S9 w$ p
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");6 d: u6 ^) X1 J' Q8 R7 w; P9 h
  526.   if(!ReadCfgFile("Config.ini"))
    ; g* K/ B1 M# H8 c1 ~* C$ U* s9 c; Z
  527.   {
    , Y3 X+ L2 S+ b4 r5 h) ~
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    5 B8 ~; m; ~9 A' _7 H  A* |# \+ N
  529.     return TRUE;/ S, C1 [* J0 t5 o. s
  530.   }
    5 ], |  ^% o( c. P2 m! t8 {
  531.   HANDLE mutex;, G# P$ M# e8 k5 E
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    / V" ^0 A' ]; `/ A, I$ {
  533.   {5 `0 @. T1 r* Q- _6 l; u
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    3 C0 g% \0 F0 _4 C  Z# S
  535.     {
    9 C$ J( r  G- U, P1 t- E# N
  536.       CloseHandle(mutex);- h# I6 {) `4 k8 L+ e. B
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    . Q( c, [9 ]: P1 u5 _) z
  538.       return TRUE;
    ; R2 A" T6 g/ O' N
  539.     }
    1 G) K% E. t- W) u$ q0 x
  540.   }  
    + S2 C4 v! w- c+ ?$ B* t3 q
  541.   CloseHandle(mutex);8 o& p% |8 V% {* v# q$ s/ w

  542. * B! }% L% W9 Q/ e# x0 ?) k
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);" m; X7 m, V- s# _$ j, S, `, ~

  544. $ \  U- W" V0 w& L* p+ `, q
  545.         AfxEnableControlContainer();) e# K& l4 U( V3 b, \

  546. ! T% [- r8 L& S3 Q
  547.   bCanUpdate=FALSE;
    ) b4 R: R7 c; k2 S0 u- _
  548.   dwStartUpSteps=1;( }# |+ ^, s/ z3 |
  549.   dwProgramState=AP_NOTHING;
    + M5 v) A2 Q* Q

  550. 8 @- M' x0 K: u) H
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);# H% ?1 D! K% Q  k
  552. " c9 C* _$ ?2 j6 P; B% |+ I$ B% I
  553.         // Standard initialization; q) C/ z) O4 @, c+ z3 R! W
  554.         // If you are not using these features and wish to reduce the size* ~3 s  H( z& B+ s! `" _2 X
  555.         //  of your final executable, you should remove from the following
    / w# K2 W8 a! X- I, f+ {, A; r
  556.         //  the specific initialization routines you do not need.
    5 R* \) R8 Z# r! a0 ^+ H2 W
  557. 2 n6 x5 z' x, [9 [" }4 |
  558. #ifdef _AFXDLL2 u0 h7 @: b8 t, G0 r9 x6 @* x
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL; ~0 B1 V8 G# i2 M) n% g2 T+ L
  560. #else* V' H0 v+ z+ ~) D/ f6 i
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically- x% c. m9 V) U& ~7 t, d- x
  562. #endif4 I% K4 I+ J4 k: S: E
  563. $ U: m- i5 u8 s2 x
  564.   dlg=new CRevAppDlg;
    7 f! K+ {, b  [0 M  y# x( i
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 S  B! Q* I: x( @7 F" a/ d# z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    0 c' l; f& y% H4 j3 `
  567.   m_pMainWnd=dlg;
    + y# e, j, V: f

  568. 1 F, [( \! \" J& |
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, ~: |5 d- c( ^' A) u$ g  [
  570. 6 i$ y+ S0 @' O. C) `* f
  571. //  GdiplusStartupInput gdiplusStartupInput;' R. O: f, x+ I8 d  p$ u3 x
  572. //  ULONG_PTR gdiplusToken;
    ( O% p0 X; h* ~5 w3 r1 H
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    " C% c0 `2 C( v8 B8 G+ }

  574. & u' E' s+ M# }9 g/ z4 }, i& L
  575. //        CRevAppDlg dlg;
      u2 k2 ~& Y# p+ @) A
  576. //        int nResponse = dlg.DoModal();/ [5 v/ l9 Q$ o7 V2 u1 O
  577. //        if (nResponse == IDOK)
    ; }3 W' @4 x& v1 x1 v0 w
  578. //        {
    ; G+ b" V9 ]5 i, H& e$ q- i- w" W
  579. //                // TODO: Place code here to handle when the dialog is  J% l. i; q2 U; D1 W! O
  580. //                //  dismissed with OK
    8 x1 @7 e) r" P/ ~5 n6 G+ u& V
  581. //        }
      {5 e3 \3 R9 |/ K1 i
  582. //        else if (nResponse == IDCANCEL)
    ' q: Y" j2 g# s! B) Y" _! Q
  583. //        {
    , o, ?0 q0 _% l) W4 m5 m
  584. //                // TODO: Place code here to handle when the dialog is; B. @2 F6 d1 k- M9 H3 _4 B4 B
  585. //                //  dismissed with Cancel
    ; }- b' m% y: n! Q
  586. //        }0 ]) q$ Q, i# r! B

  587. " B- c: _- r5 U6 L7 f
  588.         // Since the dialog has been closed, return FALSE so that we exit the/ Y1 N8 P) C+ E. Z' b. ?5 i
  589.         //  application, rather than start the application's message pump.  }) `, Q9 C, D4 O" i7 o
  590.         return TRUE;
    ( [9 h, j  D5 o) n( \  N, N
  591. }4 w  i/ N8 f; z; U; X/ P
  592. - h. b! k: s$ Y7 v7 o5 }% I( h8 n1 w
  593. char *CRevAppApp::strtok3(char *pSource,char *token). ~( e7 \% M5 D- D7 Y, h( c" C
  594. {
    ; M' q; n$ N! u9 {6 }0 h/ _
  595.   int i;) }+ s( j: X% I
  596.   char *szRet;( R2 k+ P/ l+ C, C' F3 u
  597. 4 O# t$ @& I+ ~, H5 c
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " m% {9 e  k# {1 L2 r+ R3 ]' V
  599.   if(sztoken)/ N0 z7 ]3 w/ v' o) }$ }6 L8 D
  600.   {
    / e8 f, X; u/ l9 K% {1 \+ C8 h  n& ?
  601.     szRet=&sztoken[itoken];
    ! K6 O& k! ]8 t. n" c
  602.     while(sztoken[itoken])0 n/ c1 K! P6 b0 l) S( }
  603.     {6 X& ]7 N! w* @7 x; k) v
  604.       for(i=0;i<(int)strlen(token);i++)5 Q9 o( f' P( E; i0 M# ^( r. y! z
  605.       {3 j  @  ^  h' B1 |
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])( @/ ~) v1 @5 ~( S! |! o
  607.         {
    + I5 j% q8 v0 _3 P7 O  ^! A
  608.           sztoken[itoken++]=0;
    4 G- U8 k( @6 ]' J8 z
  609.           sztoken[itoken++]=0;# X) X6 z" p" O4 `, e% u
  610.           return szRet;
    $ c2 Y+ X! @5 T& E$ F
  611.         }
    5 H, B& x6 F! b: C- ?5 Z
  612.       }4 R( \" M! O: i0 o1 M
  613.       itoken++;
    1 V; Z: h/ A% k/ D/ \& }
  614.     }3 V$ A5 v: J& y6 o. y0 U( |! J- c
  615.   }
    ; u1 @- ?& [; U# R6 f
  616.   return NULL;9 T8 c+ `" H$ B9 ~
  617. }
    5 N  C$ P( ?; C
  618. / j, S+ w: L0 q, a5 v/ o
  619. void ProcessProc(long Total,long Current), ]" P* u9 T1 T' Y' j1 d
  620. {
    6 Q  N  L" v% b' c
  621.         MSG msg;
    7 I6 R# a- J  Y- X8 ~
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);& _' L$ w- ]+ g# g: |8 ~
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));) }- M* w' Y; p$ l4 T8 T
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))5 ?! A6 i* J# p- H, P2 ?4 X* U& c- @
  625.         {  t3 O- a: s" H  L
  626.                 if(!GetMessage(&msg,NULL,0,0))# z7 K7 z" G# _" L& u) C) D3 r5 d
  627.                 {/ Q! v2 i" f% W4 h/ Z$ D9 f$ ]
  628.                         return;
    " {3 k; `9 ?) Z8 [
  629.                 }/ @0 t, l" S$ K
  630.                 TranslateMessage(&msg);
    & K. G. d2 z  N* h3 t: b
  631.                 DispatchMessage(&msg);+ e  L% T# ^# ^/ o$ ^5 E' ]0 ~* A
  632.         }       
    7 X( g: y5 S$ p  r8 L" I2 T
  633. }
    3 c  [$ {/ r9 F$ z. P
  634. * t5 g) C8 T$ j, k
  635. BOOL bFirstChar=TRUE;0 L; l8 i8 G5 K# C- _
  636. 2 c* f# B! t" K) ^0 o& I
  637. BOOL CRevAppApp::OnIdle(LONG lCount)( J! e  n3 W7 l. p& D
  638. {! W' M- M. U1 n/ M) |" `+ X$ D. c2 D
  639.         // TODO: Add your specialized code here and/or call the base class
    . ~- x. H( A+ |6 r
  640.   switch(dwProgramState), J& c8 Q8 G! P. g
  641.   {( _: a1 T% U8 S  Q
  642.   case AP_NOTHING:
    5 n9 V# f+ P$ g- E4 s
  643.     switch(dwStartUpSteps)
    , Y! y) L: l$ k. v# z$ O: X
  644.     {0 S2 M/ ?  Q0 s! m  k  y, h6 S; p
  645.     case 1:8 `# c. E; E4 G7 A
  646.       {
    4 Z/ i7 d! ^& S# q: Q: }
  647.         int i;
    / d  H& w* x2 h* n6 {! G
  648.         CDC *pCDC=dlg->GetDC();
      y2 v1 M% i) {5 u0 D' I; S% K- N( J
  649.         HDC hdcwnd=pCDC->m_hDC;
    8 M% G4 b7 `0 u4 r  r1 W( P8 A& R% U
  650. //        Graphics graphics(hdcwnd);
    8 u: n: _- G: @
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    0 G! v: ]1 b/ c1 U: l  b% J0 j' J/ j
  652. //        INT iWidth=bitmap.GetWidth();
    , C/ I, |9 P) Z
  653. //        INT iHeight=bitmap.GetHeight();9 G8 [. F' a- r* m6 d
  654. //        Color color,colorTemp;
    # J3 ]3 I* f3 c/ ~* T% a
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    2 L4 b; a0 G0 w1 j! s% O
  656. //        {2 r. c  e/ I  r5 j7 F( V  l
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    : S0 k" P2 w7 m2 I; d; M
  658. //          {4 D8 A% r4 G. {0 h: ?" D0 E, j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);7 r4 K3 ]1 x9 ~& m) N# z
  660. //            colorTemp.SetValue(color.MakeARGB(0 i3 X1 S% K+ F: E' E
  661. //              (BYTE)(255*iColumn/iWidth),6 D) N( u. q1 t8 b
  662. //              color.GetRed(),
    4 R( d! c* [# z
  663. //              color.GetGreen(),
    6 Q4 `$ z3 u; `# ^' K4 ^/ m' D
  664. //              color.GetBlue()));
    2 f, y5 v* n- |8 F5 u6 Y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);. {/ {6 f& [# t1 c+ v
  666. //          }1 ~! |0 r1 G4 \7 @( o+ E( E% a
  667. //        }" D4 ]! P7 l- b1 ]5 o
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);8 v  ]4 P8 m" [% g& a
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- l/ b$ k7 L  O; m% c
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    6 G$ O# S+ Z0 q$ k" Y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* ~+ ?: n6 t* `( k- N
  672.         for(i=0;i<240;i+=8)
    - l4 ?7 Z9 F/ f2 p9 X& X
  673.         {
    , e9 J8 ]- e6 q9 f
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) m+ X& G' ^8 m% y- `% ~5 I' L
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! q# M: u9 C- d3 n2 Z  ]) p! N
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! j& p, Y; O# S$ S) [/ g
  677.           Sleep(33);
    5 _% F9 E6 B8 M" D9 q9 ?
  678.         }
    : w  t8 }/ G/ ^' w, e/ }
  679.         Sleep(1000);
    : B4 x# n6 {2 j; s
  680.         for(i=240;i>0;i-=8)
    0 ^$ \* e  H1 C' j
  681.         {0 M, j6 `4 n$ D; `1 L
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);8 R  O9 C. g3 F4 i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 g( F8 O8 `5 r5 u* P
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# C  ^$ n+ D2 h
  685.           Sleep(33);; U9 _0 L, ~2 z+ @# Z
  686.         }  S5 S  `+ g7 K( ?
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ) X1 L( v' i" F) r" o
  688.         dlg->ReleaseDC(pCDC);
    & A8 U+ n4 {7 _' A
  689.         DeleteDC(hdctar);, O9 Z: H' q$ K# M1 ]
  690.         DeleteDC(hdcsrc);4 _3 h9 T5 T. @* S0 s5 [" b$ l
  691.         DeleteDC(hdcorg);
    7 b; C' @3 P8 @- X
  692.       }
    - b4 Z, Z8 q7 {: R! s. }0 M
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 X/ o- v5 W, s  x! L% x" Z
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");: V& u! n! ~: }& ?" Q- b; B; ~
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");# K. t9 G* Z6 b( Y
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    2 P+ W7 [" C8 U, L4 {% E, h
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / ?+ d1 O$ f5 ~: P, X* D
  698.       if(!Dn.Connected())5 X( x3 ~  I) n4 C
  699.       {5 E( A! D1 A5 W* r9 G
  700.         dwTotalFiles=1;
    0 H+ F; z, D4 a! Y. f0 M4 G+ ^8 u
  701.         dwDownLoaded=0;
    - F& ^$ X$ S+ S4 M! F, }
  702.         bSilentStep=TRUE;
    9 @* B1 z" \9 l0 u
  703.         bCompressed=FALSE;
    0 ?2 A7 q% N8 O# U4 F6 R
  704.         strExtLocal.Empty();
    * D: K+ s  k! K' \! x$ I, `
  705.         strFullName="readme.txt";
    / o& c# f. _' j. r4 l/ P0 U
  706.         dwProgramState=AP_CONNECT;- u3 g1 I4 N1 Y
  707.       }
    - V& g, b% [. N* W/ F7 x
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();" a! Z8 G5 ]: ~. z/ u; A( _
  709.       dwStartUpSteps=2;  F1 g7 q3 z1 X2 a$ y
  710.       break;; x! [8 U* m+ J/ G7 J9 k
  711.     case 2:
    $ C6 z# e) B# v
  712.       {0 S7 ]: Y1 |; F/ N  P! ~9 a
  713.         int iEOF;' m8 n9 j5 I% s1 {  h
  714.         FILE *fp;
    2 r4 G7 i/ D8 B
  715.         char szString[512];) p) ]7 t( |% \$ l
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");  k4 c$ @( ^/ E) `: b
  717.         if(fp)
    4 I$ C+ }8 [8 u' |; m
  718.         {& \2 {" o7 j5 X+ f: h
  719.           do
    - |5 i$ k% |3 F; F+ C* t$ P: ]
  720.           {
    0 N2 v: V4 |" @0 _8 ]
  721.             iEOF=fscanf(fp,"%s",szString);
    - K" ?/ n- |4 E% @
  722.             if(strlen(szString))- c4 ]9 Y, h9 Z2 V+ z
  723.             {1 U, a' [- t7 o* V
  724.               if(bFirstChar)8 r8 N9 L  m) R3 _" ]
  725.               {
    " w0 C" f2 P" h
  726.                 bFirstChar=FALSE;
    : X  h; ^6 O7 y) r0 y) n" T
  727.                 bConnectIsBig5=FALSE;- T" J/ r6 }/ S1 s- I4 I
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ; l6 l% ^$ @! O+ I; m" g3 A
  729.               }, Z. {" F! M- s: H2 W3 j
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- c4 ], E+ l2 T4 I0 C. N
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    " Q0 t' P2 W; m4 s8 r
  732.               dlg->m_ListText.AddString(szString);8 B6 E! R% w! v  L: w9 [' U4 r9 J  u
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * e) a! X. w# v
  734.               *szString=0;
    7 ^' z, L. X+ }( @" F) I* R
  735.             }
    6 o: ^7 H3 e5 [6 L6 [  L
  736.           } while(iEOF!=EOF);
    # d) c7 p( |8 w3 L( }# w+ I( B
  737.           fclose(fp);
    5 R0 H" ^$ ^8 I& c2 B
  738.           unlink(".\\DownLoad\\readme.txt");7 K' |) f0 O' C! a/ ]0 y& L
  739.           dwStartUpSteps=3;7 `/ @& d6 M8 _/ J' I
  740.         }; T$ b6 T9 z7 l& N4 ?
  741.       }, k5 s& d* g+ G7 ?9 |1 y
  742.       break;
    . a- B5 S& d# ^. G
  743.     case 3:$ m6 x! ^: Y  [% m
  744.       if(!Dn.Connected())7 Y6 k! w: y' y' x1 |
  745.       {
    3 Y  G4 C4 j! d- \5 a/ A$ |# b
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 U5 r+ K! F3 U& p- ^* h$ u( b1 O
  747.         dwTotalFiles=1;
    % M) R( q. {# k: M* F+ q7 d
  748.         dwDownLoaded=0;- Z0 A" i% X9 g; w$ e
  749.         bSilentStep=TRUE;
    # h* V) p$ O) ?; v6 D
  750.         bCompressed=FALSE;
    + I) d$ K2 ?2 }8 }$ ]8 ^
  751.         strExtLocal.Empty();
    & Y7 a0 z$ s; {; x1 C2 r& h
  752.         strFullName="checkversion.txt";- J: X- D$ j$ t+ D
  753.         dwProgramState=AP_CONNECT;
    ) `) m7 h8 z3 ^9 b
  754.       }
    : v2 s. D/ q: I0 \# ~
  755.       dwStartUpSteps=4;- S" n+ ?/ @" O0 F
  756.       break;
    7 M* j% A! T1 p; x
  757.     case 4:
    - i( s/ ]* {& g/ O, b  N
  758.       {6 w. }' z- f- `
  759.         FILE *fp;
    , ~7 E% A. t2 o0 Y* s
  760.         char szString1[128];
    " D3 o6 R4 m7 `5 f/ x  U2 S" B2 M
  761.         char szString2[128];! T8 G, z9 J9 p
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 \9 g2 S  L" `! L6 e2 W
  763.         if(fp)" A7 @, l+ B. w% D" K. M# \  m
  764.         {
    ; ]- e  ?' Z8 v9 ?' L$ j
  765.           fscanf(fp,"%s",szString1);
    " F3 S' C9 c- u, K6 j
  766.           fclose(fp);1 T) P: S1 I' ?% Z: ^0 J
  767.           fCheckVersion=atof(szString1);* ]) M5 F* g; W% F* c
  768.           fp=fopen(".\\checkversion.dat","r");; [: y. u3 w2 C
  769.           if(fp)
    4 `$ ?( M/ ?6 T5 B
  770.           {. f6 g; c# T+ b* y
  771.             fscanf(fp,"%s",szString2);7 ~/ j7 d2 Y; l
  772.             fclose(fp);, ^% \% p) b0 \% n4 P! t' u$ J! r
  773.             if(atof(szString1)!=atof(szString2))0 J# U) {/ F  C
  774.             {
    " K& K1 W" S3 V1 p7 R) Z
  775.               if(!Dn.Connected())
    3 E6 ^. u5 _- f) g. U) F
  776.               {% J* Q: p9 L% Z9 v! H
  777.                 bFirstUpdate=TRUE;5 ~) L2 X$ q& c: l
  778.                 dwTotalFiles=1;
    # U/ P. {# e( C( r
  779.                 dwDownLoaded=0;
    - s% Q: x$ f; o7 ~: |
  780.                 bSilentStep=FALSE;4 a  ^+ V( J; X1 N: [; g
  781.                 bCompressed=TRUE;' n9 A0 P2 `: @1 ]( b8 Y4 o
  782.                 strExtLocal=".\\DownLoad\";
      j" [" d: Y$ e+ }& d2 F0 p$ `
  783.                 strFullName="update.txt";
    ! I) V% k3 ?4 q% ^
  784.                 dwProgramState=AP_CONNECT;2 p0 w1 D8 A. b6 J' ]* z" ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" R3 f6 @) ?8 t$ ~
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, }6 O/ L& L% n0 F% b
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / Y/ |' W( m1 c4 v6 J

  788. 3 Z, q# ~$ @7 K2 D! \3 v8 ?
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . u1 M- [0 `  f. N' j7 t# l
  790.                 unlink(".\\DownLoad\\checkversion.txt");5 k% {/ K+ J) i; D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ) e; r3 v5 t( A+ u9 J
  792.                 {
    . _  h+ a2 F' J+ T" d( g
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " s1 C3 g- ?2 ~3 p8 V( ~; F* Z
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");' Y, x. \$ c5 Q: c% j) L
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");7 r% z( h. T! e, t
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: ]5 @' B) m% l0 M' Y) A+ z7 [

  797. 5 y2 w7 h8 z& u0 t2 F
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 v4 J$ U8 ?3 N. Q8 n0 Q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% }9 Q( Q4 N( Z" K5 B- O2 r9 R
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( v  c, n% l  ]3 \5 l
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 Y, X* g( z; k- V6 w8 C' N
  802.                 }* p/ E2 K# [6 N# j/ ?0 P
  803.                 dwStartUpSteps=5;( O, G  g+ c! U! X5 B  K7 g4 K  W
  804.               }' V( z& G/ z3 y9 O' x# I
  805.             }. k5 ?; O3 k8 L; t1 [! \4 c$ U# l
  806.             else# P6 z9 I+ l/ P2 R- w% A9 b
  807.             {
    9 j( ]9 N) v$ C$ w; H  U5 E6 e
  808.               unlink(".\\DownLoad\\checkversion.txt");
    , z/ {1 a* W: z
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    3 j1 E0 w  a& K! n
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' M5 [; D6 K) q: B7 \# x
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    & m1 U9 g( A; W  x4 d' l

  812. . L3 r# l9 K5 Y- l$ x
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  J: c7 u# @5 k; R/ {) D# n4 ?
  814.               dwStartUpSteps=99;
    6 U' x# h# O. d3 p7 H" T
  815.               bFinishUpdated=TRUE;
    + F& U% T' ~- a: D. w& o1 N
  816.               bCanUpdate=TRUE;
    % n6 J9 e  ^& h& k+ y4 h
  817.             }
    # G- x( Y) n# j) E
  818.           }
    , F8 r3 ~& ~1 u4 I1 t$ ]
  819.           else
    ) k% ^- w0 J* W' c6 l
  820.           {2 r" `0 V2 d- @0 ~. M7 G/ P
  821.             if(!Dn.Connected())4 D5 v, W/ E# C7 n# s
  822.             {$ J7 D4 T+ |1 ~5 G/ m2 j& Q. O
  823.               bFirstUpdate=TRUE;
    / k/ ?/ w+ h9 I
  824.               dwTotalFiles=1;
    5 P8 r3 C' t1 M. n- H2 R; x
  825.               dwDownLoaded=0;
    $ c  _$ h6 V- F, n' r9 U. p
  826.               bSilentStep=FALSE;. V3 ?( u& ~; _6 u. c
  827.               bCompressed=TRUE;
    9 r7 {+ a2 ]' @2 B" d
  828.               strExtLocal=".\\DownLoad\";! F5 H( }3 u  N( r7 G
  829.               strFullName="update.txt";& Z& z* y2 I: T$ R* u, b' Q
  830.               dwProgramState=AP_CONNECT;
    5 H8 \0 i' O. ^$ a0 z9 S
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! k) v' w* `6 s7 c# a( y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 t) h: l+ Z9 S  k
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");- f  h; W6 ?0 Y& i
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) J! @. u, k8 b; e
  835.               unlink(".\\DownLoad\\checkversion.txt");
    & P- Q  M9 b0 D3 w4 p( ~) Z6 m- l  G3 n
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)3 P! b7 T$ e+ l$ u2 g
  837.               {2 d, d+ L) G6 U9 o  ]; i5 f
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");+ J$ L# T2 m. V  R
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    2 w& Y# v8 {5 [6 ^9 j
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    6 ?# \& ]% y7 f3 c  Q) Z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 s7 ^" {7 u) {& \" }  N9 E
  842.                
    4 k' o# o' g; b6 b$ x* P6 A0 k
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    2 E# M7 H' X# }' n2 Q8 S# \% A3 s
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 i" T: I! Z4 n: y+ }
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");7 ~7 }6 `+ y% a1 D$ h: ^
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 m( o1 a/ E* L
  847.               }( q& N& R# }" Y6 c- f' H- {, Z
  848.               dwStartUpSteps=5;' z3 @  ?3 [8 ^: r" \% S/ J
  849.             }
    ) ^' y! i2 U: ^3 E  L
  850.           }. m: P) I3 R/ E
  851.         }4 v6 W7 n% T. L9 R4 h! C4 |
  852.         else: \% }8 h( R; I& y! @1 Y2 r
  853.         {
    . P8 m+ O. F! s+ s/ W1 y
  854.           dwStartUpSteps=3;( z+ B" Y/ Z' r/ o, U, K
  855.         }" c/ |* i& [: h
  856.       }
    ( a8 L& E; b# h# _1 h4 C
  857.       break;' z0 |2 s* D4 R+ z
  858.     case 5:* c2 N- ^' J) m& d% K! j
  859.       {
    % U4 L- r& W2 V
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ' P4 F* W% o9 Q. m: N7 r0 W* K& k
  861.         {
    ; t( u) F  Q+ G! ]
  862.           int opt_overwrite=1;
    1 z$ C- T% `( }) o1 b
  863.           int opt_do_extract_withoutpath=0;4 ~- D2 i$ ]# o, P' N# S
  864.           unzFile uf=NULL;
    0 b& N( ?" Y+ R3 e0 T% J4 [

  865. . V1 m& ]6 D' b/ e6 Z6 k
  866.           uf=unzOpen("Wsa.zip");* s5 {" m% k4 _. G% L5 N
  867.           if(uf)
    * Z9 z! y2 v! x! `1 e
  868.           {
    ! z& }2 `* T  v+ w
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    " e; l! m2 a* N
  870.             unzClose(uf);0 G  b( a" {1 j0 w7 Y# L0 _
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    $ c0 w6 n$ I# P
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    % \2 _3 l- v  y# \5 ]3 D
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");& z) u- A& k6 b2 S) {
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 `( g7 A. U1 w- {
  875.           }
    # A- C8 ~2 X& t- q5 R
  876.           DeleteFile("Wsa.zip" );
    2 _. |: Y! {* a1 ?: B
  877.         }
    9 O% x# B" p" D: y* G& F  j. \

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

評分

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