CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
( ~' k5 C& [6 I5 ]
  1. / RevApp.cpp : Defines the class behaviors for the application.: o- V% A( K+ ]0 p* H
  2. //% `; d" z* U; ^
  3. 9 u9 U. j7 A# J. I' A+ N
  4. #include "stdafx.h"
    8 t1 L, \2 R! c5 ]; c$ ]

  5. " Y( X: r- z. K1 ?
  6. //#define UNICODE
    1 [& d, Q2 S' S* \0 H5 n+ Y
  7. //#include <gdiplus.h>
    9 B; {$ b( d5 A) o: ~
  8. //using namespace Gdiplus;, s1 o( L& e9 D+ c
  9. ! G2 {; R2 l3 @( L; I
  10. #include "RevApp.h"
    ! w* r1 t/ a: g" [2 l& G" T
  11. #include "RevAppDlg.h"; b- I3 m, T1 i6 K
  12. 3 }/ F- j2 q' i3 z9 t
  13. #pragma warning(disable:4786)' z- S: {& K! G; y6 x
  14. #include <map>, s  E7 X( B- W+ i+ n) l6 @
  15. #include <list>4 V+ U1 F0 T$ d( z  R  ]; O
  16. #include <direct.h>
    ! S9 w1 }$ \# m" K  J4 X6 L

  17. 1 d5 \* m1 s. `: `
  18. #ifdef _DEBUG7 Y2 K  f9 H% k3 N+ {! u
  19. #define new DEBUG_NEW- }2 u( Z' g) @  }: x& Y6 \* H
  20. #undef THIS_FILE
    : v0 ~! B3 ]' H  P9 ^. C! F6 |# q8 [
  21. static char THIS_FILE[] = __FILE__;4 E* C. Q  R/ ?0 g0 r% T
  22. #endif
    8 B& N# G5 a1 V. q5 W. |0 c$ ?
  23. #include "SkinResDef.h"5 T3 Y! `# v+ t( \+ b, Z. ]
  24. #include "ChangeBG.h"+ b+ X4 h/ B5 T0 S6 |0 C
  25. #include "AFXINET.H"! H% F* T! _7 b
  26. 0 Z' ~8 V+ q5 ~8 y
  27. #define TRADITIONAL_CHINESE 00 P/ Q6 p) J$ f+ ~# y" J, n
  28. #define SIMPLIFY_CHINESE 1( Q" A5 y% P9 v! \
  29. #define ENGLISH 24 Z$ L" L6 i$ f1 l& L
  30. int m_iLanguage = ENGLISH;
    9 g- ^, B! w  z! b
  31. /////////////////////////////////////////////////////////////////////////////
    9 a( R; y& @) [6 Q% P
  32. // CRevAppApp) o' d! X. k5 z& s$ e' E: x
  33. . D/ T6 L% A$ m2 z2 Y% i
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)6 J' R" v: v! K$ e& b
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    4 |/ H+ N# X9 \0 A
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.0 M/ S, d& Q( F  x0 g
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!  M6 F  M/ g& b' S/ O! h
  38.         //}}AFX_MSG4 r' q% k) P' F: Z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    % B; s, W! e; s/ q4 B
  40. END_MESSAGE_MAP(). ?3 `4 z+ b9 h

  41. " V/ K. g. G- ^; ^# a: N9 @; t
  42. /////////////////////////////////////////////////////////////////////////////
    7 Q) v' g: f6 d: h5 v
  43. // CRevAppApp construction/ W, W3 A, D# U9 p

  44. , H2 Q) [0 p$ x1 u
  45. CRevAppApp::CRevAppApp()
    1 ?0 D( c& H0 l( v
  46. {
    $ [2 l" ]( N1 L* y) I
  47.         // TODO: add construction code here,
      P2 v) c. }( V% o" [
  48.         // Place all significant initialization in InitInstance, [. l) A/ @) n7 \! X  W: X
  49.   bDisplayIsBig5=FALSE;5 B+ D1 a! p* a% @: @% Q
  50.   bRestartUpdater=FALSE;
    ' b! m5 ]3 J  u2 Z+ U% d
  51.   bFinishUpdated=FALSE;, F! _# S; D: p/ {, b
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    $ ?9 H0 ?$ |: U3 G6 i- o( `
  53.   InitChangeDataBig52GBKS();
    & U$ b! z$ X8 q
  54.   InitChangeDataGBKS2Big5();
    ( D( ?5 ^. j- ~. t
  55.         //
    4 E6 H, y8 @2 c3 Q" T0 c0 w
  56.         bClickRunExe = FALSE;
    ' j6 M' L* @! B% ~  m# k
  57.         //
    3 P# [% x2 `+ X3 s, [
  58. }6 [. e$ ]9 P' H! v

  59. 2 Z4 L% l  K2 v+ f& s
  60. CRevAppApp::~CRevAppApp()5 p" P. v' H! Q7 U; g
  61. {
    & \9 t. }5 f/ B* d4 ?9 _% D; C
  62.         // TODO: add construction code here,2 Y* X6 n+ I% e# t
  63.         // Place all significant initialization in InitInstance
    - H3 d* }% `. O9 |3 f: T
  64.   EndChangeData();& [2 j  K/ D9 G- r3 `0 c
  65. }0 C. a& a; T( {" v/ O, {) m- S% R
  66. . L1 W! {2 S( U5 G0 }
  67. /////////////////////////////////////////////////////////////////////////////
    & y# z. {* f4 d5 S4 [& N
  68. // The one and only CRevAppApp object6 Z" Z( r9 V8 X6 A1 Y

  69. , G6 f+ N% d7 H4 h& T1 i
  70. CRevAppApp theApp;2 |/ ^3 J7 Q0 C1 Y3 [) _! L8 C
  71. 3 b+ N, Y8 y+ ^5 x7 p+ {# A
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    3 ^, |9 ?4 `0 T$ ?- l5 s' r
  73. {$ i3 Y- h8 K2 ]2 ~+ m% g
  74.   int iEOF=0;
      n  a' z8 _* ?; X3 L
  75.   char szTempName[MAX_PATH];
    0 q& p4 ^) P6 U! s( n
  76.   *szFileName=0;0 p" q, _2 m  ]+ Y
  77.   iEOF=fscanf(fp,"%s",szTempName);
    7 d+ j9 f1 F5 S9 S! |1 s, t
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    $ u5 o; f% e8 m
  79.   {
    $ H" R8 j2 p* v  H- n! C
  80.     strcpy(szFileName,&szTempName[1]);6 i2 Q% N: f2 ?1 h
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)$ C( T$ u, O. \. K! x6 q
  82.     {
    2 a% e( w6 c# r) n& _( K# p
  83.       iEOF=fscanf(fp,"%s",szTempName);7 K, J1 x2 ?+ L( m
  84.       strcat(szFileName," ");" @, E  E) _. j
  85.       strcat(szFileName,szTempName);
    4 q1 A9 }  H, @- k! j
  86.     }. p1 y) I" L" x8 k9 ~
  87.     if(strlen(szFileName)>=1)
    " [' J0 K$ q4 Q0 \& L" K
  88.     {4 f% w4 Q( B/ x, w: U% m' b
  89.       szFileName[strlen(szFileName)-1]=0;
    + B& p/ k, ~( J; U1 v: @" [
  90.     }% N$ I0 N6 b& W. e+ g2 {2 Z
  91.   }! n6 k$ q3 d1 [1 W  c
  92.   return szFileName;) Z+ L  l  u1 Z/ i
  93. }
    9 Z0 W( M* [/ ^3 }+ |4 ]5 j  e

  94. 2 |$ A7 K* R  |% |: _6 w  S
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    6 z! Z7 N& U' _/ w- G% K
  96. {
    $ p1 f6 F# Q* B7 S* p
  97.   FILE *fp;
    ) y5 ^! O. a9 ?2 u' }
  98.   char *key=NULL;
      X4 |/ O" n1 J2 Y! K
  99.   char version[MAX_PATH];+ n0 F2 }& `5 W& j
  100.   LPUPDATEFILE file,olds;6 W& z! X7 Y' {0 W7 \
  101.   std::map<CString,LPUPDATEFILE>::iterator p;6 _1 {" @* w. Q/ c& S& g0 y

  102. ( r: }5 A  R& B9 _: q# D, A
  103.   UpdateList.clear();
    / W% L; x  |# N( o1 c% y! _9 `
  104.   UpdateFile.clear();
    * Q4 \' ?- s: q/ W
  105.   if(GetFileAttributes(filename)==-1) return false;3 J$ n- ?6 n# @  o# k
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( c; d5 U4 p/ V5 S1 R, v5 i, c
  107.   fscanf(fp,"%s",version);! }0 _$ @! J7 H8 P
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 z- w! G: J! o* z
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ( u$ W* D% L: V2 [) X
  110.   {8 \1 I2 G. m. ]9 p' Y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: c" L1 {! L* j
  112.     fscanf(fp,"%s",file->path);
    , Z) x5 U! N+ {" c
  113.     ReadFileNames(fp,file->file);% p* V1 p% Z; v# w6 J. S, J
  114.     strcpy(file->full,".");
    : s( `7 V+ L9 ~) S
  115.     strcat(file->full,file->path);6 y* G2 _: x# u0 `( b1 B; W, o
  116.     strcat(file->full,file->file);
    * f) U/ Z  K) s; B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    $ Y0 _; T1 ~! l9 p" _
  118.     {, M( O. ~" |$ X7 D
  119.       file->vers=(float)atof(version);
    + ?* E. E9 @6 j' r
  120.       UpdateList.push_back(file->full);
    8 |0 \. T7 |- B- K  y+ d0 U' W
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));# l  \9 V7 N- u: V7 T
  122.     }; O* q  u6 D/ H6 @
  123.     else
    7 L# i. Y2 ]7 v' W2 o$ Q
  124.     {
    8 t& U# ?/ N& J$ I3 h
  125.       olds=(*p).second;
    1 N8 e; V) y, i% l# D1 M1 F
  126.       if(olds->vers<(float)atof(version))' A! T$ J* E, m
  127.       {
    " z/ f/ x) {7 J
  128.         olds->vers=(float)atof(version);) z. @6 E" F! ^/ \3 D3 N+ }2 L
  129.       }
    3 |& p: ^  T; b5 m6 ^0 N! X
  130.       free(file);
    7 m+ h( x( Z4 N% s) U8 D, C0 v
  131.     }
    8 ~# g) N3 ^' m, z- B9 N% b
  132.   }
    4 h3 Q- L4 _% C$ [
  133.   fclose(fp);
    % h5 ?0 Q9 `' ~: N: C; K
  134.   return true;! Y8 O2 W/ q, S: ^$ e
  135. }1 J  ?; D% E4 X' J$ h# B, g
  136. 6 j! g' t. L3 R7 c. D+ B
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)& i( `3 U2 V+ a
  138. {
    , j0 w  M2 Y$ n1 u0 B
  139.   TCHAR  szFull[MAX_PATH];
    7 s; W3 ?' m4 K9 q- L' S- o1 @
  140.   TCHAR *token,*inter;
    , V3 S" y  }- r7 p* l
  141.   *szPath=0;7 V4 k$ _. x0 ~0 c" U
  142.   strcpy(szFull,szFullPath);$ l. X' [& q' Y" @3 M8 t
  143.   token=strtok(szFull,"\\/");
    ) S7 t* [$ V# [+ ?5 d
  144.   inter=token;
    . q1 q- B5 B, `* f5 c- ?( ^& Z
  145.   while(token=strtok(NULL,"\\/"))& w- t; V5 d; n, b# @3 H
  146.   {( y% [0 F: b# r6 B
  147.     strcat(szPath,inter);1 s0 k# b) I1 _0 [( `
  148.     strcat(szPath,"\");
    6 Q- @( h! r6 N3 [* n
  149.     inter=token;: q4 T2 y# J* c0 k/ D, f
  150.   }
    : ?) u" |, U% a) p! I* z
  151.   return strlen(szPath);
    7 g" Q+ x- H; ^
  152. }$ u% I' C6 k: i- t+ A

  153. 6 _1 P' D5 Y2 y; d
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)7 {7 R3 g5 {7 _8 H
  155. {# K0 R( f4 y$ Q6 q7 P
  156.   DWORD attrib=GetFileAttributes(Target);
    5 i9 I% Q4 h+ c9 @) U9 j# {
  157.   if(attrib!=-1)
    6 p6 p) r$ D5 A
  158.   {- q/ j( k! W- |, a8 N. h4 A
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)). T1 u: M' o" h; L! H* L, B
  160.     {: R# K0 T0 ]. y1 X0 _5 h+ }$ a2 o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);% }1 S) K" A  ]8 F8 R& Y+ E. C
  162.       SetFileAttributes(Target,attrib);
    9 h$ q  e7 r" f2 D8 P9 @3 I& o( z
  163.     }- O' t/ I  r9 j7 F) B
  164.   }
    0 f! y3 O  Z) F: u
  165.   CopyFile(Source,Target,Erase);
    2 Q' m! h) U4 q9 Q- j7 E6 B1 L
  166. }
      k0 E; d0 q7 V; A# F7 `( z
  167. . t- v5 e/ Q/ P) b3 _# O
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)( Y* G0 c6 D4 J
  169. {
    8 D8 n( v7 k; M, t4 e% d
  170.      FILE *fp;
      m1 n6 o- l# u& D* Q) u, B
  171.      char  szBuffer[8192];6 E5 t5 I( U7 R7 y
  172.   va_list  argptr;& M/ ?% x9 C) V% {7 W/ F

  173. ! }9 M: }+ W5 K* M" m
  174.         va_start(argptr,message);
    , \5 F; y3 n- W- E, l4 N1 Q
  175.         vsprintf(szBuffer,message,argptr);$ j3 [( ?, A$ X6 U2 J+ b7 s; ?
  176.         va_end(argptr);4 t( M9 ?$ r- n4 D+ E
  177.   fp=fopen(FileName,"a");
    / g$ `1 j- Q/ f6 t6 w+ V
  178.   if(fp)
    ) o  p) ^: h2 P' t7 y  r' n
  179.   {
    3 D/ A; ]. C! P5 Y. l7 C. t
  180.     fprintf(fp,szBuffer);
    2 v7 Z# O/ N7 h: o# s2 F; s
  181.     fclose(fp);
    3 p+ }, a0 q( T6 j
  182.           _flushall();
    ) d! C7 L2 ]: M
  183.   }1 f% S+ Y3 C9 \/ C
  184. }
    # n: K+ x0 A' q  R& h- N& m' v
  185. $ a: M2 v- T! x. r7 m1 K/ x% U/ o
  186. BOOL CRevAppApp::Fclearf(char *FileName)
      w5 _/ f8 I6 {: z) U
  187. {; \9 Y/ ]1 N2 v
  188.      FILE *fp;1 L# z& |% d8 d6 i4 ?
  189.     DWORD  attrib;; P% \+ B" o: L) ]! T
  190.   attrib=GetFileAttributes(FileName);. v* w% g# x* n0 E; @
  191.   if(attrib!=-1)
    # d3 u0 V1 ]% G9 \
  192.   {
    6 t( C. c) M# M- R
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    6 k' d3 j9 t+ J. B' W
  194.     if(!SetFileAttributes(FileName,attrib))
    ) ~/ ~& S$ S- X: R; @
  195.     {
    ( f$ z2 _8 q. h. Z
  196.       return FALSE;
    % u" O! E* ^& h1 a8 i3 D# R) l
  197.     }
    7 U. N& {: p& j5 M8 N% ~
  198.   }
    * Y5 M* C9 _# {. {7 R
  199.   fp=fopen(FileName,"wb");
    ( w! a7 [2 a  o' ^+ |4 {
  200.   if(fp)
    , v' r9 x% m& g4 z# S
  201.   {( H# z4 F5 D# w3 o
  202.     fclose(fp);! Q9 q  y9 `+ h/ F# T7 r
  203.   }( Q  l$ \, H  i4 |9 h) r
  204.   return TRUE;" S( y, T, _% @- [' Z: v
  205. }
    0 R2 s$ A( N  b% n1 U& f+ l+ I
  206. 0 Y3 e# O: s: V- J, B" w9 U
  207. BOOL CRevAppApp::UpdateLocalVersion(void)1 v. m0 e* P" m
  208. {
    . T! x' r3 `4 {
  209.   char filename[MAX_PATH];
    . h& A+ U6 G* b- E
  210.   LPUPDATEFILE file,olds;6 c; o$ i, ~5 i  c1 I3 Y& ^$ J* @
  211.   std::map<int,CString>::iterator i;
    2 ^# d; \. Y: k7 O4 i) H# g
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    % L$ }4 b+ S1 C" E5 ]% U
  213.   std::list<CString>::iterator l;5 A3 I$ D' w2 I* {$ R
  214.   X- m/ X0 \5 ?
  215.   if(bFirstUpdate)
    ) B8 A; L; c& ~3 }! L+ R) w% s3 \
  216.   {
    * s5 p1 K* M# N4 Z$ _" d* V
  217.     dwCurrFile=0;/ S8 {! S. ?  p% U
  218.     bFirstUpdate=FALSE;
    6 E% P! R% U/ {/ e1 B3 V, ]
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): d+ s" d) r* L& l2 s( y
  220.     {! n7 X* V3 m6 Q% Y* e& Q* J
  221.       dwTotalFiles=UpdateLocal.size();
    $ }7 ^; `9 J5 l1 U  b" m: V% |
  222.       dwDownLoaded=0;
    8 h' R4 W& ~4 b
  223.       bSilentStep=FALSE;
    . S9 b/ u3 `/ T# M- C) _
  224.       bCompressed=TRUE;  |& g* K: K  `3 O' ~
  225.       strExtLocal.Empty();
    9 e% y7 K6 V4 J! \! B3 D# J
  226.       strFullName=(*i).second;
    ; X& U" h! Q5 z8 [. N; J
  227.       dwProgramState=AP_CONNECT;. c% [' r0 n" V! f& z: Y& n
  228.       return TRUE;) ]; E4 U% r* F7 |' }. e& ~
  229.     }0 J# o% D/ ?9 @% v
  230.   }2 B% I  F& D6 y! \0 `8 z
  231.   else if(bRestartUpdater==FALSE)
    % k# R) e2 v/ u$ z$ l: n
  232.   {
    # c% N4 X* q. E5 R4 w# K2 L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    1 a" Q0 `* d# w( Z" k4 [6 A! {
  234.     {
    & e, c" ?4 `6 z* [1 o; O& D
  235.       file=(*p).second;: I9 Y. X/ `8 F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    : z% T% r0 l) w% o- ~
  237.       {- c( C0 B5 z$ A( U5 ~. s: @
  238.         olds=(*p).second;
    : ~+ ]; V( c" p% ?% w) p9 e  B
  239.         olds->vers=file->vers;1 t% k+ a5 P1 I2 Y+ q4 c2 j
  240.       }
    : D/ N1 {# S! l* N6 a4 t5 `
  241.       else
    / X% ]3 a) F% r- y+ e
  242.       {- _, j8 c* J' g1 u( b
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 Y5 @1 o4 b  v" H
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    $ V; _$ t  P& r9 L8 {. |( A
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    * }- Z, t6 B( D" F
  246.       }
    8 o3 _; ]6 ~0 K! {& a
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    7 Z) m7 Z# Y8 w7 O
  248.       sprintf(filename,"(%s)",file->file);7 ]& ~0 V, w2 L1 D
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) y+ l1 t+ n/ i" M
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }  `% [# I9 Z* j
  251.     }7 _' Y8 L  l$ Q4 T6 n5 ~! u
  252.     dwCurrFile++;
    0 h8 H6 z3 Z* N- V
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 h) C4 Y' R8 X: R) d7 z' V; l
  254.     {
    2 y- x/ Z" k2 K  z; Y
  255.       bSilentStep=FALSE;  e5 i2 E5 y7 i- t" [/ C
  256.       bCompressed=TRUE;
    - h# b7 k# Y; y3 p- p
  257.       strExtLocal.Empty();" x1 u, T7 m% d4 p
  258.       strFullName=(*i).second;
    6 c6 r- B, P. W
  259.       dwProgramState=AP_CONNECT;, R5 ~1 Y2 \0 m( Z1 X- F
  260.       return TRUE;
    ) K' c, B; r6 f  u1 j% c: Z* L
  261.     }
    2 j. Q( y" \8 x0 c- w- A
  262.     if(!bRestartUpdater)/ x' P9 w; t) b# C- ^$ S
  263.     {/ a3 l' S9 e' T: W5 v$ s% F
  264.       int iCurrSize,iFileSize;' w6 ~; @% S- D3 \1 z
  265.       iCurrSize=0;
    / R8 v, O5 x4 V( `! r
  266.       iFileSize=UpdateList2.size();
    & q' s$ y* j# x% j
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ' R+ K' d- b6 S0 r: Q' o: ?
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    . K/ S+ A! `9 V4 y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    9 J  T- ]" P0 @1 I% J& D0 P
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% L. W! l. ]4 ^- D$ y) W- k
  271.       Fclearf(".\\update.dat");
      [: @! P6 j2 h4 ]  J9 f
  272.       Fprintf(".\\update.dat","Bloodyf\n");( H$ s4 }/ g! K5 f5 ?
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . ~4 E" E/ \1 U* N3 r3 O& p) p
  274.       {( D4 V. }1 s, K
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())0 `, V# ~( s  X& M
  276.         {4 {( [9 f* a. Q% g7 G% @! _
  277.           file=(*p).second;
    " x. S& ~  C5 f* N" s
  278.           sprintf(filename,"(%s)",file->file);
    3 r7 X' Y, q4 h6 n2 r' \, S0 ^
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: o- e2 L8 S5 h2 ]  l' G
  280.           iCurrSize++;: c8 A# I0 ~  T- N' j% H
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ! B* h' q4 K$ {# B3 b7 M8 s
  282.         }
    ! j% w$ p$ {8 B7 Y) q' p5 K# [. j
  283.       }
    6 ?0 x/ S0 `7 ]8 k) F
  284.       unlink(".\\update.txt");
    1 y( L: |: S0 K. B1 R8 e( }
  285.       unlink(".\\update.tmp");! Y! X! `, |$ Y/ }9 ^' o; J
  286.       Fclearf(".\\checkversion.dat");8 m/ m. h1 ]# u2 V" y2 V
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ {2 e. J; C. x# T
  288.       if(UpdateLocal.size())
    & B- `0 X' T- b# t7 J
  289.       {) {  N% N1 z6 d
  290.         UpdateLocal.clear();
    : {% `0 m& n( e9 W1 J( d
  291.       }. Y8 s$ ~' d' m6 Q( }
  292.       if(UpdateFile3.size())$ X1 n& ^  l3 ?+ r2 F) Y6 B1 j* b2 H
  293.       {
    * ~/ {! B/ h; f& Q! }  t5 w
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)1 f) B! f- t: l) q
  295.         {  J" t# N" B$ {: ]
  296.           file=(*p).second;
      |; R- P% {4 R5 R( e' q
  297.           free(file);/ R- F) G5 h! b* ]. n2 y- q
  298.         }& U- P* p4 n0 ~! ]7 P- D8 E3 V
  299.         UpdateFile3.clear();
    3 P6 {4 x6 S6 u5 Q0 e3 \- u: Q9 g
  300.         UpdateList3.clear();: Y+ |$ H9 p/ E, i" e( v7 o* Q
  301.       }
    " v& X1 L* r5 R) l' [1 w
  302.       if(UpdateFile2.size()); N/ O) A# s3 p" K! t$ }9 b; F. A* w! Y
  303.       {
    $ K2 M( v) C$ F. h8 w5 p; o5 A, q( X
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! o3 d- X$ a+ R, _0 \
  305.         {' \& {" @6 m: B4 }8 Z/ V: I8 I2 u
  306.           file=(*p).second;% C! I4 ~3 @! n( k
  307.           free(file);
    7 S0 R! L+ `# R9 V; }$ Y% Q
  308.         }* u% Y2 K' a3 e* W- h
  309.         UpdateFile2.clear();2 y: [3 `+ R/ K
  310.         UpdateList2.clear();* k9 O7 D5 v: y7 Z- h
  311.       }
    1 L0 d( _0 `' ]' w+ x2 P
  312.       if(UpdateFile1.size())
    / C5 i9 S, \/ k* k+ r" y
  313.       {' q) ^- U6 f! |6 J4 Z) d
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), V" |- P9 V: s, b/ E* O# Y6 t/ Z: }
  315.         {: c5 a5 w* s0 `' k1 H1 }5 I3 J
  316.           file=(*p).second;
    2 ]( b, E% W; J0 o
  317.           free(file);
    8 x" y% H: D# H+ d( _: b' P0 F6 j
  318.         }9 q8 A: }! E& D. ?, i
  319.         UpdateFile1.clear();# \, `: J  T2 _8 `* A- @' N$ [
  320.         UpdateList1.clear();( {' w- k( D) o
  321.       }2 A! x7 ^. s% D9 @
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    7 F* X8 m: |; l, y( \6 G4 H
  323.     }- ~% D, [! I: [  `
  324.   }& s9 C$ U9 {3 ]" G4 G
  325.   return FALSE;
    / `7 s4 W0 ], l' U+ I# A
  326. }
    % |8 W. Z. \/ I6 `
  327. 4 m- i  B+ X$ B) k0 X& ]" [
  328. void CRevAppApp::ClearAll(void)
    ) a3 g: p3 [$ H& z4 r4 X# L7 s
  329. {
    5 c5 T, ~" V9 g. G& H* c. r4 z5 n( E
  330.   LPUPDATEFILE file;
    , I" Z  X2 G- d$ w+ t" m( M$ h
  331.   std::map<CString,LPUPDATEFILE>::iterator p;* L$ F2 J6 h  g4 \7 N
  332. $ E3 A! U4 T7 F+ B0 @
  333.   if(UpdateLocal.size())
    1 b! F# `8 N6 H
  334.   {& B5 H9 t$ l+ L
  335.     UpdateLocal.clear();3 Y" H9 ^- b+ G# V0 @/ v
  336.   }
    1 t# Z, t1 d0 s) n0 y
  337.   if(UpdateFile3.size())
    - O4 q6 b; m. D  F( A
  338.   {* e$ E  r" c! l( R6 v
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 f& C9 W% h  {9 A- t
  340.     {
    / J, s9 g) S: `  h2 U1 c0 r
  341.       file=(*p).second;
    - M* C3 C) ^: ^' R* ?
  342.       free(file);5 D% @+ W8 o0 w- N5 Q6 J9 b- G
  343.     }0 e( }8 ]) u+ o1 U8 H* y- q
  344.     UpdateFile3.clear();
    ' z2 k  I. M) B6 O
  345.     UpdateList3.clear();1 E) O" _' i9 k# d
  346.   }/ X- X2 i+ i, P0 R2 j7 U
  347.   if(UpdateFile2.size()); v) m: V  l5 \- a2 L# b5 u1 _
  348.   {- n" x9 Q5 Z, T3 P: Q  y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! x9 e! j+ I: H3 |: ~
  350.     {
    8 o( l1 z" W" }
  351.       file=(*p).second;. i5 S: r) Q" q3 F) ~  `4 i3 O/ K; ~
  352.       free(file);/ f2 Z; f: N; l& s  y
  353.     }# |6 z3 {5 s  O% s8 s4 D, ]
  354.     UpdateFile2.clear();
    ' g: d  ?) d# ]1 u0 ?8 `
  355.     UpdateList2.clear();5 ^- \- c+ S' N' \: m0 e; M
  356.   }
    ' D: P8 t' f( M4 [
  357.   if(UpdateFile1.size())
    ' n, D5 |! b) U4 t/ X+ D- Y- d
  358.   {
    0 L- |% {  D; ^" ~0 N; z4 z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    % K# y) Y/ p% ~
  360.     {
    8 ~0 V0 m7 Z  X* y. p/ X
  361.       file=(*p).second;
    - u5 `, z  T: r
  362.       free(file);
    4 w  p& F* h3 J' I! B  j
  363.     }
    8 [  [0 w4 b" L- j- |
  364.     UpdateFile1.clear();
    8 x6 J" x$ u* }" v+ V) e& z6 B
  365.     UpdateList1.clear();3 H; C2 f$ Z: s, ?! g9 z5 W1 }% I% t' S
  366.   }
    - P$ B1 e7 Y; {8 u
  367. }  
    % Q7 h- j! k6 {/ K1 X
  368.   
    5 D) _  ~, b; w  m9 g
  369. BOOL CRevAppApp::CheckLocalVersion(void)3 O) Z. a! S: n' Z  ^9 X. T
  370. {; _1 ~3 r: c# T% c5 F0 \& @3 B: J
  371.   int c;3 H, f# N8 V9 A7 d5 o
  372.   LPUPDATEFILE file1,file2;; ^- F9 O# `5 t6 Q* {$ f
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 }# z# f+ V  ?  m3 K
  374.   std::list<CString>::iterator l;" f/ Y3 L% \: a5 W9 k7 ?' w
  375. 7 k* z  Z! Q2 l5 i+ E$ b9 Y0 n" U# u
  376.   UpdateLocal.clear();
    & Q, J" ]& W: j- y5 [; q& Q$ ~
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    8 ~" q; i% ?1 G% A3 r. v, C' k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    / @9 R3 _/ b" o" P; Y3 C# f1 ?
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    7 p0 L/ [8 r/ p0 B9 {3 O. q
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    6 S, A. K) c5 h( K. E9 T- n, K' P
  381.   if(UpdateFile3.size())
    5 q7 ^4 k& \- p( C
  382.   {
    ' ?+ i5 T5 S% l6 Q, N3 r4 t
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)5 v  J  w2 K2 M( T
  384.     {) S! s  z' A7 N7 o9 W
  385.       file2=(LPUPDATEFILE)(*i).second;! T! A$ ~- H! [6 s9 ]% k
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    & N! o  |0 |/ d
  387.       {, e. a8 I0 [. W. M& |) n# W( V6 d
  388.         file1=(LPUPDATEFILE)(*p).second;
    / W3 I# \) L/ l; M8 e
  389.         file1->vers=file2->vers;) @! J& }7 @' y! Z
  390.       }
    + e6 o" S0 u/ }' b; j# P. K
  391.       else6 Q1 A5 A" |1 ?* U+ e+ O
  392.       {
    + S1 z; L2 K. p7 d$ \- `! p) K
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ W4 H7 X$ T/ {: l
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    & r" p9 D; Z5 n
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));0 e0 W( N) v# m+ D3 s& q5 c
  396.       }
    ; O" a' U* F, q+ k
  397.     }. ~5 ]4 z1 O3 H" Y& l
  398.   }
    $ i, s6 b$ ?  ~
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)" _' s1 _" S; z8 q. H
  400.   {
      ]' U2 [( d: A* c# ]' g
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ' k$ g0 ]" _! G; g, d  p! {  `
  402.     {
    7 ^, l5 d( s1 d% t. v: ^/ S
  403.       file2=(LPUPDATEFILE)(*i).second;
    . B: N% z2 `$ W" B: H# v3 w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). I& `  F, Z; z2 G8 b6 C
  405.       {
    6 k- h3 k  L* I+ M
  406.         file1=(LPUPDATEFILE)(*p).second;
    * C7 h; m& m( a$ R# J5 T
  407.         if(file1->vers!=file2->vers)3 U9 o* k, p8 }" w- `
  408.         {$ U  U9 M4 ^* T! }$ i. Q% h5 D% C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . D$ f8 c; q5 ~
  410.           c++;; H; D# k% @+ _% x; T
  411.         }
    ) f+ x( T: g2 m/ k- h. ?3 t9 r
  412.       }% h4 v5 D  Y0 [$ V' J  D, T
  413.       else
    - u9 F/ D+ [! Q# ^. ~& K
  414.       {
    * [" ~0 p% n' {! G5 G
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * {( X8 ^) K$ W8 m! Q
  416.         c++;
    ! V4 e1 K6 R: t8 g6 d
  417.       }: Y$ P: c2 U& m% x0 v/ u+ C  }
  418.     }7 Z) s+ u+ @1 `
  419.   }
    / K& p& D3 v3 m+ i$ @" l. r
  420.   unlink(".\\DownLoad\\update.txt");9 C" N' g; i' i0 o
  421.   if(UpdateLocal.size()) return TRUE;/ K1 ^6 w8 B' u, {; d
  422.   else                   return FALSE;
    * F+ Q6 z1 D1 F
  423. }! L+ ], r, E- M6 V: H) n

  424. & |' u; k5 n) u4 G  Y( p
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"6 t+ `6 P: a/ b3 d
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn". y6 ]: i" j' X* h- ~' M! {* `) S8 a

  427. 4 A( l5 W* \) K

  428. * F: @. e4 V8 Z4 t& s8 n# z
  429. ; O1 O6 w& e5 _
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)! q+ E# m" p$ N! F5 x4 O1 ?+ W! z0 Q
  431. {8 D7 J" c2 n6 T/ Z% a" C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;: ^/ j/ `( @0 W) _2 c; j0 V0 A" L' w
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' G& ^' ]! x1 f. Y" I. x
  434.   {2 W$ Q% Z1 t' z' R. a% V
  435.     char szLanguage[50];% d  P& t& K+ q# F$ J& ~3 m1 Y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 x: m6 [/ q1 y( N
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 X; G" \2 Y3 N# I
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 l! }9 i3 {2 v
  439.     else                                   m_iLanguage=ENGLISH;
    7 }8 ^; o% X7 U
  440.     char szRegister[100];9 ]/ y. s5 i+ r1 D5 V
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) `/ l% n# [2 ]5 |
  442.     strRegsName=szRegister;0 M8 Z8 S: `, s
  443.     char szPatchURL[100];
    3 l; `1 E2 E5 v$ t$ {
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 T0 a) e  y# P& T+ f  M
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 g6 _: R. U, l! h
  446.   }
    . c, i) N& v$ v2 p9 i
  447.   else' Y8 w2 S+ n  m4 C4 p5 _
  448.   {1 G9 D  s4 ~/ d/ D( [8 V
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 T! K/ N: p$ n
  450.     strRegsName=DEFAULT_REG_URL;
    . |  ^3 I2 M+ t; L' Z( Y
  451.   }9 Y- Z4 V: T0 @0 I" {
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    5 W+ ^$ d4 \* C3 h2 Z9 O
  453.   {! W5 L$ L( }/ s, {7 ]6 J5 m
  454.     char szIP[50];3 X$ a; c. z0 i$ k
  455.     char szDIR[300];
    - A; l# m7 r( C! m( W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))0 |$ r* v1 \+ i/ n& N
  457.     {4 o; }! y/ L/ G( ~9 e
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      h2 _' {" v6 r% U6 d$ l' K
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ) w1 V( d  v# E! W) J
  460.       strHostName=szIP;+ D: r5 M  d8 R6 r: |
  461.       strHostPath.Format("/%s",szDIR);
    , ?0 C" l8 E# K+ ^8 z5 I! b
  462.     }4 y2 n) }- U4 _- n9 T- X( P  P
  463.     else
    8 ~) e. p# B% H6 a# ~3 k% P
  464.     {9 C9 N1 {, t4 W0 M2 `
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- l5 }0 D7 ^, `% Q" x8 ^
  466.       {
    - G- \' I# ^  _/ v
  467.         char szLanguage[50];5 B- g5 |3 f& t! k  o4 o
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 n3 a: ]# n! @" G' h
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) x- H: x3 \4 o) t  _- h' u5 e* D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + `0 t2 X9 a: O0 `
  471.         else                                   m_iLanguage=ENGLISH;
    " ]  l/ T# o- Z7 T
  472.         char szRegister[100];% Z( U& B0 q9 ]5 b8 a) x0 K4 c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . S* _3 P+ Q( T( ^
  474.         strRegsName=szRegister;
    0 y7 d3 V" C2 B) N% v
  475.         char szPatchURL[100];9 ^0 X3 h: D/ Q6 a% o; |
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: x% N/ Q$ i* y& B
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 k- |) }- L0 l+ {
  478.       }2 J9 [8 W) ?0 F$ h2 s  [, Q+ }
  479.       else" I) J: B$ O7 ^- h/ D& |& {8 l
  480.       {, l5 y1 A* [6 Q8 m. g; d% v
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ K/ K7 r% p" O6 E0 K& }
  482.         strRegsName=DEFAULT_REG_URL;7 F* i3 i- R8 a. v1 B+ M
  483.       }
    ! Q% ^. f' f& p' I
  484.     }
    / i" |+ v. l8 ~
  485.   }' P$ s2 a# w' s
  486.   return true;
    & J( T3 g) w+ d1 B
  487. }5 t: O# y5 x$ v* F

  488. . A- ?3 o3 y5 V4 x5 n- B
  489. #include ".\ZLib\unzip.h"5 E% w% M6 z' x  V
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ {6 v; F$ ~! a9 I  w  I8 i
  491. /////////////////////////////////////////////////////////////////////////////2 H( Z3 A1 z, {$ U8 J( m: U- A
  492. // CRevAppApp initialization& M* J8 V( k! j# q0 A) }. w
  493. 5 c& n! c& V7 E6 A. {
  494. BOOL CRevAppApp::InitInstance(), _5 d/ t& K+ Z' O
  495. {; F% [8 q" ~! ?, Y; k: G
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];2 X, _6 T3 b+ S/ }% t

  497. 6 P0 R6 N. u. i% I* y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);# m0 l. L+ q# T, |: g3 P  W
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    % P! E* d* _0 A
  500.   {
    ' `. K) e+ g7 ~4 i/ m5 `4 x
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    $ w6 v2 X% a' r2 t# n4 H
  502.     GetPathFromFullPath(szPathTarget,szPathSource);5 M; _, R! ^; T( p. T, C3 M
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ( q. R0 e0 K4 B+ I
  504.     {
    ' J8 v8 s" d) r4 \* u) p# `- K0 S
  505.       strcpy(szPath,szPathTarget);
    3 B1 v/ T/ P2 m  R$ ^% p8 X
  506.       SetCurrentDirectory(szPath);
    . }& i+ F3 B, n6 u
  507.     }
    ) b- b8 p7 V$ w! k  i' R9 K
  508.   }
    ; {0 _* w. c; c7 ^5 l6 ?3 f
  509. #ifdef _DEBUG
    1 y( B* y: q+ _  ]: r
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); `- c( u! g  \2 w1 W1 Z' {
  511. #else# E" C  s1 u! n' B: O  s1 w7 q& \7 y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! \2 L& q9 W. _" d! W9 S
  513. #endif
    3 _& q4 |/ P$ o; u
  514.   {
    5 a: ]! ^9 a8 Q+ @: Q
  515.     char tempFileName[MAX_PATH];- n5 R2 Q" p* K; m' r5 W  p+ M
  516.     strcpy(tempFileName,szPathSource);
    6 c6 S5 @% X- C4 c8 U7 Z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    : V8 j" S5 Z: N$ R) i$ |
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ! o1 k. @) R! Y+ c, k
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);; @4 Q* x* k5 V% J+ Q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);/ T6 r: i9 c; \: Q
  521.     return TRUE;
    3 @* i. n8 ^* u8 R. w6 i
  522.   }7 _* }$ U# X8 {" Y. d/ S* a5 q) \
  523.   // Nuke 0118: Delete run.exe: d( u" i4 |! A' D
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );. k, H, ~7 j  X; b2 `; C
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");$ n0 o3 [# v' L8 m
  526.   if(!ReadCfgFile("Config.ini"))
    4 q- b, q- H) B1 Z! b) p6 a
  527.   {5 x/ E( q2 {. @, K( _
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ) r0 \+ R2 n) m1 ~. m8 _5 T
  529.     return TRUE;
    2 O& r6 R7 g* X  @6 L
  530.   }
    8 u0 _# o4 S2 W: {& s3 P3 u
  531.   HANDLE mutex;& N! C4 A1 h% w5 G7 R( N
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))- Z' ]+ i. ~/ q: s
  533.   {
    2 r* z) X' G4 V% u3 Z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    - V, w7 C' e  X  O& A  L* u
  535.     {
    * _# U% J( q& ~- h) k
  536.       CloseHandle(mutex);' `; M3 [0 d9 x7 l7 Z2 n* a7 }
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);  o6 K3 \' f) v5 Z
  538.       return TRUE;5 a0 c. b- t) T6 W- Z
  539.     }
    # g  C* O: A' E$ h, f3 [8 c
  540.   }    k  y8 O+ o  C( c4 t5 Z0 J
  541.   CloseHandle(mutex);- w! j  x. x: l3 P  S* i, \

  542. 1 `. ^; {. ^! }# T( m7 f* j* ]
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    " ~' M$ j* Z; G/ D: l
  544. 4 w4 C" h0 v; K
  545.         AfxEnableControlContainer();" E9 N& P+ u' N+ m
  546. & M6 K8 I5 A. S
  547.   bCanUpdate=FALSE;( r# X# r4 I, p$ T; T3 b& ^/ P
  548.   dwStartUpSteps=1;8 [! j) h& q9 S4 \( a' Z
  549.   dwProgramState=AP_NOTHING;
    8 M- k3 i$ N; Q% V% L/ }
  550. & E( U- S% d9 c- m
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ! _3 o, }+ [$ Y+ A# A" a

  552. " r7 p# |1 v+ ~  ?5 e7 J' j$ U
  553.         // Standard initialization
    + z, F) V; l' |9 g- o
  554.         // If you are not using these features and wish to reduce the size
    , }0 B' Z9 f# w* ^9 ?% m) l5 N) Y
  555.         //  of your final executable, you should remove from the following0 p, f: z# S. I
  556.         //  the specific initialization routines you do not need.
    $ G0 s4 O9 V5 R" l; G; f1 }
  557. # c( v% _5 B# x8 Z* E0 m1 ~
  558. #ifdef _AFXDLL. D# K  w8 f+ q0 `7 P) O6 s5 r, j
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL" M3 e- b0 H! C6 Z+ x/ U
  560. #else% B# A' b9 \6 F3 N0 ]
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically( ~& G% n" f; i+ {( N0 _2 u
  562. #endif
    8 `; E4 Q5 J; \  C% c9 I
  563. * b4 W! u! S7 Z2 N0 T) Z
  564.   dlg=new CRevAppDlg;
    8 f, \5 ^' f/ m5 O! K
  565.   dlg->Create(IDD_REVAPP_DIALOG);9 l/ h. R2 R5 N$ q! B: [# B" i
  566.   dlg->ShowWindow(SW_SHOWNORMAL);' U9 e, A9 v6 K3 l9 o2 I2 @
  567.   m_pMainWnd=dlg;, y4 F6 _4 }6 O# g; f

  568. % M0 R: O+ F2 n9 l8 ^/ n
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);" ~6 U2 m6 Z& l9 j# e

  570.   g0 C, b5 S+ k# b2 f2 _
  571. //  GdiplusStartupInput gdiplusStartupInput;
      ~# y1 n$ {6 i. [: L$ Z
  572. //  ULONG_PTR gdiplusToken;+ i4 g  i  O0 ?8 I
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    : @$ a5 r+ U4 o* o" {+ J

  574. 3 r" o# F7 w4 B2 h" M
  575. //        CRevAppDlg dlg;
    % l" F. o- U, L6 i; u, `( Y
  576. //        int nResponse = dlg.DoModal();- F( T% u; k# i# r: n# o
  577. //        if (nResponse == IDOK)
    5 |. R/ G' W1 @7 q  g; p
  578. //        {8 g7 \- A. b" Z, s% A4 I
  579. //                // TODO: Place code here to handle when the dialog is4 F0 _6 @, C" K; t: X/ S0 x/ ^) }0 T
  580. //                //  dismissed with OK0 c1 h+ l9 E% b$ C0 s
  581. //        }
    / T! E' X3 d6 d5 B
  582. //        else if (nResponse == IDCANCEL)
    ) T( V; t6 u- e# l
  583. //        {0 T/ n( M; E* X% g6 y1 Z$ i
  584. //                // TODO: Place code here to handle when the dialog is
    6 R" u& m1 ?! S) U4 f4 \& x: ^
  585. //                //  dismissed with Cancel
    8 |, ]" c# N6 v
  586. //        }
    . `0 m) S2 F% z6 r% P/ P

  587. , f3 ^0 ^, @! B9 b
  588.         // Since the dialog has been closed, return FALSE so that we exit the0 J, O! I' d8 E
  589.         //  application, rather than start the application's message pump.0 _: R+ m  D( V
  590.         return TRUE;
    , M4 X, `3 n7 S; f
  591. }
    4 q$ M& Y1 G' ^, m6 D+ P6 M  W

  592. . ], `! \3 a* k
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    2 l; K1 z0 Z. Y+ I: z8 r
  594. {7 G' Y+ B7 h6 g7 i8 s. ^7 C/ v
  595.   int i;: c% d3 W; [, A4 _- W
  596.   char *szRet;/ Q1 |; j2 ?" q2 H

  597. 5 ?2 C/ Q- a, F  c: ?6 r/ W
  598.   if(pSource) { itoken=0; sztoken=pSource; }$ m6 c$ x( C' V$ K. V
  599.   if(sztoken)
    3 N( _+ w- J# T" r' O, m% a
  600.   {
    % }0 @) C6 Y" C1 [
  601.     szRet=&sztoken[itoken];  g2 M) n+ q- [5 T' v) x4 E
  602.     while(sztoken[itoken])
    : I; a- |2 V+ w" w+ c  t
  603.     {8 g3 e/ ?, N) c9 I9 F2 L
  604.       for(i=0;i<(int)strlen(token);i++)& H$ m6 W+ g# s: v
  605.       {
    * v, Q3 t" N1 |% q, J
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    . i1 g* w# V. j  g/ f
  607.         {. x; D( ~$ x, U/ r3 U) G
  608.           sztoken[itoken++]=0;, d& f- m. b. n* j, v
  609.           sztoken[itoken++]=0;
    - n. k' U9 \( w9 m( K5 z
  610.           return szRet;; z  m) \: s: |5 z* X
  611.         }- y/ c, g5 z) [) Y& J
  612.       }% d+ R; |1 N8 s
  613.       itoken++;
    ! y% K& Q, Q7 f- H: `
  614.     }
    : M' s& K9 u# {" ^5 f: u- W+ R- o
  615.   }
    8 g: j# T9 C* g$ w2 A( a# H6 g4 R9 ^
  616.   return NULL;
    4 ~& s0 g& _1 {  g- ]- W
  617. }
    4 a+ [0 N& H9 \" d

  618. ) p2 K* F$ ]' s$ @5 z
  619. void ProcessProc(long Total,long Current): R, M% @" a. D6 U  u7 H: x
  620. {
    * A& y5 T# D4 \& u
  621.         MSG msg;
    4 y( v5 j( I& R
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);- Y% u! r, k$ c! h3 i7 s
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    2 V( j( H8 ^4 e5 k: |6 \
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    / z+ ~1 j/ p" w% ?8 ^, Q
  625.         {
    : h2 f9 o+ e) `) ^8 [# O0 ]* {! H
  626.                 if(!GetMessage(&msg,NULL,0,0))  g- X5 |3 [9 {9 Z
  627.                 {
    ! S7 u" @% t1 O3 i4 c+ r% y; k
  628.                         return;
    " O5 {- N  W; F! f" V  ?; ?7 N6 Q
  629.                 }" a8 W4 G, G/ m8 y
  630.                 TranslateMessage(&msg);
    6 {' [' m9 W) W. g( e0 D' P
  631.                 DispatchMessage(&msg);
    0 U7 Y: p2 H. }6 D/ M
  632.         }        7 `2 X4 ~' C6 D. t
  633. }6 X$ ^1 B* a' B8 D. f! j8 ]3 A

  634. ) L2 w0 f% n  i
  635. BOOL bFirstChar=TRUE;' `. [/ M' y8 ?0 m9 u
  636. 7 ]  Y/ ~% V  }# X% M+ E
  637. BOOL CRevAppApp::OnIdle(LONG lCount), t( O1 c! j8 Z: G
  638. {
    7 F& v7 l8 f$ l( m6 J
  639.         // TODO: Add your specialized code here and/or call the base class; }- e+ y: ?( d
  640.   switch(dwProgramState)9 F9 d" Q. M  Z$ {! a
  641.   {+ g  F- D# U0 b' N% |
  642.   case AP_NOTHING:
    $ o* I4 j+ I% C& z
  643.     switch(dwStartUpSteps)
    6 C- E  U* p' w1 W) n2 H9 D% i
  644.     {* G$ O+ a6 U8 \# o' ^
  645.     case 1:5 @" Y0 }$ u- A( N- c
  646.       {
    , D, S4 }3 r2 i) U/ A: j+ ?* m
  647.         int i;. J: m) D/ @5 e; n
  648.         CDC *pCDC=dlg->GetDC();
    8 L- F" g5 F& p
  649.         HDC hdcwnd=pCDC->m_hDC;3 q1 `: t# Y& O1 y2 o) p# d. {
  650. //        Graphics graphics(hdcwnd);9 W7 G; N2 |5 @9 R- f6 X
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");- \' v/ A# Q5 c  m+ \1 d  X
  652. //        INT iWidth=bitmap.GetWidth();
    & W) T: T( Y! s$ y- |
  653. //        INT iHeight=bitmap.GetHeight();) S0 H; ]" h  q6 h& @; E( C. K
  654. //        Color color,colorTemp;* Y  {: q" A* q% y' c) i" c
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)8 B5 f2 H" ~4 `9 N
  656. //        {
    7 n, J! X. Q8 Q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# K& }% d5 Z2 s* D2 N$ n% R+ G
  658. //          {
    * c4 M4 x* c; C8 z7 I: F# O/ R
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    + x, D) _. Z4 `, T8 ?
  660. //            colorTemp.SetValue(color.MakeARGB(3 i  V) H% T* `) {& ?# {; d  I0 u
  661. //              (BYTE)(255*iColumn/iWidth),
    - x' J7 ]* x8 Y6 q$ \# J$ U
  662. //              color.GetRed(),
    1 O' u1 z6 r1 c0 e( ~5 P/ L( y9 T" t
  663. //              color.GetGreen(),
    ! V( W1 ?* m. _; F$ e  C7 a
  664. //              color.GetBlue()));$ Z% S9 l: e+ k( s
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # u' ?) R" @! ]* V2 R
  666. //          }) u' b; t/ u' Y9 c8 m1 N) q
  667. //        }
    5 Z0 N* v5 p$ X* }
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);/ U2 f7 f4 m; i- {' F* }5 \& c
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' K8 w/ r6 s2 `! |' `9 c% |
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    1 K8 {& e: r, F
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      H9 ~8 o/ ]; O) n  O# t! j# V
  672.         for(i=0;i<240;i+=8)
    & D0 i- h/ q" [  O8 p, B" W: [
  673.         {; c% j& E" R' U% i) C" L, N$ n
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! a6 G6 F* l2 F$ c5 ?
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# p: o* M5 b6 x% m
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & }2 S/ `* F& o0 F+ L
  677.           Sleep(33);0 j+ c4 g! F3 f! E6 t7 y
  678.         }
    0 ^! z0 x$ i0 g4 W
  679.         Sleep(1000);
    , b4 v0 b/ R1 m. c/ R" |0 G- n
  680.         for(i=240;i>0;i-=8)0 O% T6 O* t9 Q
  681.         {2 J, Y" o8 ~$ A8 x! @- m
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: f7 H4 e% A! j/ w* v+ _
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" V; x) J- _- N4 s. |
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / E" a  O( L+ ^2 F7 f
  685.           Sleep(33);
    9 u2 O3 ~, I5 \0 }$ {! e2 [4 H. D
  686.         }
    & A  I# w& F9 o' r  k. e1 }
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    5 ]( A, z6 V9 S
  688.         dlg->ReleaseDC(pCDC);
    - a  O6 O, Y* _( A) Z) Q
  689.         DeleteDC(hdctar);
    ! c. q# V& v- [" ~
  690.         DeleteDC(hdcsrc);' Y" T) R3 U  f" k& u
  691.         DeleteDC(hdcorg);
    6 v. M) l8 O7 g* Q. I9 u6 Y
  692.       }
    & w4 ^* A  P7 b! p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    9 w2 n; p2 _9 ^4 @1 e
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
      c1 L8 B0 b, v! v1 E
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ) b5 D' T; a! r% b3 N
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ) D3 ?4 W8 Y9 Y' d2 o: p1 a; n
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) x) n. n- p/ P# _6 c: I! s
  698.       if(!Dn.Connected())5 b- X4 D& F# r0 V1 ]
  699.       {
    - B0 p' c9 v" y; N
  700.         dwTotalFiles=1;% y4 A7 U+ @0 d5 `
  701.         dwDownLoaded=0;1 P+ ~+ Z5 `+ g( |
  702.         bSilentStep=TRUE;
    ; B: [6 q5 m+ x
  703.         bCompressed=FALSE;, F4 v" o2 S; g9 [4 @
  704.         strExtLocal.Empty();
    % ]7 W# m* F+ [$ \4 Z
  705.         strFullName="readme.txt";
    ! u+ |4 {5 i& w. Z: d
  706.         dwProgramState=AP_CONNECT;
    8 U& ^$ {' k- {0 A" U5 M/ [
  707.       }4 P' m$ U8 }; @' k* j7 C* p
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    9 n8 c; N3 v8 t, m/ J
  709.       dwStartUpSteps=2;( P! Y) Z. N7 ?
  710.       break;$ g. v8 s% t" T9 `! ]2 O
  711.     case 2:- J7 \- W- V7 s1 N. z, S3 o$ ^5 p2 x& d
  712.       {
    - x) m6 a: R+ O; d
  713.         int iEOF;4 O* Z* f; x  m2 @* J$ |
  714.         FILE *fp;; Q. H2 |) p0 ]( W3 R. Y
  715.         char szString[512];: L4 c" o2 _7 k+ o0 m/ @1 |
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    3 _- t2 H8 {- X. |
  717.         if(fp)# W2 n- Q  U. x1 `. P
  718.         {$ a$ }9 a9 G, |( p5 u) ]3 ?
  719.           do
    8 L# F$ v! _3 i8 l
  720.           {
    4 ]9 _8 o2 N! \, O* l% [, s( T+ h
  721.             iEOF=fscanf(fp,"%s",szString);
    / X5 ]$ l; ~5 R/ g4 U6 X. P4 }6 N
  722.             if(strlen(szString))
    0 @/ a" a1 S  B4 Y& P2 G4 M* h' u! K
  723.             {. f- r9 r5 _5 n5 ^: T
  724.               if(bFirstChar)6 r/ X8 q# }* y) f  l( ^
  725.               {3 K' |" t) J9 }2 r( a. K' K
  726.                 bFirstChar=FALSE;
    5 U$ A0 Y5 p1 R; `; V
  727.                 bConnectIsBig5=FALSE;
    8 r% {0 e0 M4 S3 [* @
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    % n3 w7 I2 L+ g% {
  729.               }+ q' ~3 h( x, s& l& {3 T
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));1 e8 K) }* \( \( S! m. ]0 e; I
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    9 B5 t! i8 e2 N
  732.               dlg->m_ListText.AddString(szString);, k. G9 N% S# Y% v1 w
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 [% Y' |  `6 l* K' ^! L
  734.               *szString=0;
    ' o# R: r* v# s1 f
  735.             }9 Y, {/ [- J3 v) h6 {2 \
  736.           } while(iEOF!=EOF);) r, S- n; o& {
  737.           fclose(fp);
    8 P- P) r- \( q* v9 l+ O1 p# z
  738.           unlink(".\\DownLoad\\readme.txt");
    5 s) E( o0 W  F3 X+ A
  739.           dwStartUpSteps=3;
    ' g" v7 x0 S5 H4 h8 M) Z! W
  740.         }
    % `% o1 _2 e( a0 {) U. n
  741.       }, G# Y1 T; _) E: x& [
  742.       break;- w) T- A/ n3 e: ^# u, r
  743.     case 3:4 _. }  s$ F% F6 V/ V# k7 C
  744.       if(!Dn.Connected()). P- B+ w% ^5 f( `- M7 m
  745.       {
    6 ]* I3 ^2 V% H
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    0 W' @+ C! m- m/ E% i
  747.         dwTotalFiles=1;  r4 a2 Y' E* I% v+ y
  748.         dwDownLoaded=0;1 E7 R' L5 g6 N( D$ I9 O. B
  749.         bSilentStep=TRUE;0 `, D* t$ q9 ^9 _, k+ D; V
  750.         bCompressed=FALSE;% e+ V8 Q* \' u# V
  751.         strExtLocal.Empty();, ?" \! p% `( i
  752.         strFullName="checkversion.txt";
    / _, L- R; `8 f% J- i
  753.         dwProgramState=AP_CONNECT;" ^' Y1 M1 v& V5 u
  754.       }+ Q0 d8 J4 ^+ w) Q0 n
  755.       dwStartUpSteps=4;) q0 M1 z# {, q0 F- q" y6 o
  756.       break;2 J8 D4 |' i+ F) D4 i
  757.     case 4:& m4 I! r6 u$ H
  758.       {
    & y- B0 y3 t* W; }0 W* J  |
  759.         FILE *fp;, r) k3 i* u+ M+ W$ l- _0 N
  760.         char szString1[128];
    6 g0 E" v) y" @) T* F
  761.         char szString2[128];
    $ C7 E; t# G! s1 X' v
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
      i& {) f% K( |& E& m; W+ D
  763.         if(fp), k3 h4 j4 w( g0 m9 T( i7 W. `
  764.         {0 n: s: a0 b% M% t$ R2 x
  765.           fscanf(fp,"%s",szString1);
    8 y7 l# ^8 y, \7 Q  t( m) R0 H& r
  766.           fclose(fp);" c3 X0 r, N, u9 d" ^$ H& \# T
  767.           fCheckVersion=atof(szString1);4 o) P5 ]' Z1 J% J* ^, ^4 p+ m$ B
  768.           fp=fopen(".\\checkversion.dat","r");4 J0 B+ _0 M% N2 `
  769.           if(fp)
    ! Y% d* }, [% K/ D% D
  770.           {: \; a6 `" _( C0 ]
  771.             fscanf(fp,"%s",szString2);
    ; B! q/ b. s8 J' ]% V8 ~$ ^; L* r
  772.             fclose(fp);6 M! p* F, \' y& F/ Y& X
  773.             if(atof(szString1)!=atof(szString2))
    4 w0 H# e! f) b; {6 T7 X, a
  774.             {
    / f7 W1 D! G! `: I4 S2 a! a
  775.               if(!Dn.Connected())
    5 ]5 e: i3 y& N; b% R  a7 |, @
  776.               {
    - I* v3 F( T" q6 t; l
  777.                 bFirstUpdate=TRUE;4 H% t; L& n' v9 ]% X# u* ~
  778.                 dwTotalFiles=1;5 B% _" s# }4 a, Y1 l- w
  779.                 dwDownLoaded=0;2 }2 \) W/ H+ b; W( x: {4 m
  780.                 bSilentStep=FALSE;
    * o# A2 r: S" G' F  y
  781.                 bCompressed=TRUE;
    3 G2 K( }+ B  }3 Q
  782.                 strExtLocal=".\\DownLoad\";2 @8 P- C( z8 c# R
  783.                 strFullName="update.txt";% w  F7 f* p: a. l7 Z6 m
  784.                 dwProgramState=AP_CONNECT;
    / c9 ?) V& K' a2 d
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- b" `4 _8 c5 U0 a7 {9 Y6 u7 N  E. O- r( L
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; R4 k* X8 f0 I" Q+ B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");# t7 b( z3 }# s0 k/ r
  788. " x+ W- q  Y  N' \' H
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 L, j) H3 e" U" G/ t1 a% p
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    7 Z& q4 b& l! k( V9 J1 L% T
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)/ N) }4 W* B6 x: l; O! s- h
  792.                 {: Z; O  n3 b. c* h# s' n
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& g8 i% m& @/ m) m: }& a
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    & v. o5 l4 d) o2 Z( \6 I
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");/ `! d/ C7 y* \) r8 i
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# k( H8 ~: L4 Q( E

  797. ' o  W  e+ a" N% D2 g# T) J$ ^4 ^! @0 O
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & D1 L- w/ m, D& z/ L4 [$ b, T' U
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 w& ?8 e. c  z) E, g, K6 _
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    % z' c5 Z: \) S7 q. a- V' L
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' I* v2 @8 e# p! T. ~' J
  802.                 }1 Q/ r0 ?- M4 q4 S2 Z
  803.                 dwStartUpSteps=5;
    5 L8 q; I1 W0 v9 e( r
  804.               }
    ) }- l4 E: t: P( z
  805.             }) S. N& X  s+ w; C. j# B. p
  806.             else" p5 e9 b. w2 r
  807.             {& e. t+ R- G( r+ d8 B5 i* e
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ! I% C& E) o- K" m% F6 r
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");' J% H" d8 F+ \# t" E- \* o. j
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    . Y( C$ |; {; M- n$ z( E' ]) \: G
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 h  A4 }4 c( e3 p9 ^

  812. 9 w7 T+ L  E! [* ]# Y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ i! R, \, f" J, h, S& t
  814.               dwStartUpSteps=99;6 Z  x. w9 Y& ^* x4 ?3 W4 g
  815.               bFinishUpdated=TRUE;3 ^' v& n- b- Y/ Q
  816.               bCanUpdate=TRUE;/ G( n7 i1 f# k3 e
  817.             }
    4 q. Q( k: d9 ~3 @
  818.           }, Z- \: q. ^* b) r
  819.           else4 Q8 T6 a* ?; `8 t4 M
  820.           {2 w# A  [9 s& K* M- T+ f
  821.             if(!Dn.Connected())% v" Z3 d1 e5 A8 N1 U
  822.             {
    8 e6 {) U+ v2 S7 k; J
  823.               bFirstUpdate=TRUE;  B( u- j/ D8 Z& A% P5 J' w
  824.               dwTotalFiles=1;. k* r7 t; x2 p8 Z7 i4 @: C
  825.               dwDownLoaded=0;; F; B+ @; B/ C' u8 [% Z$ i
  826.               bSilentStep=FALSE;8 q  E& b" u0 y5 T. k' |- L
  827.               bCompressed=TRUE;3 g) A; ^" a" z9 y8 H7 ~
  828.               strExtLocal=".\\DownLoad\";- i9 i( ]8 b; t
  829.               strFullName="update.txt";# }7 x! A/ b4 N2 |! G( d( c
  830.               dwProgramState=AP_CONNECT;  ^0 r( e0 F3 t% }- W; b
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");& ]1 N1 d* @" ]6 |
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% X8 E0 M9 O: X! X; U$ I
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");/ E6 Q8 O; ?8 a# E
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % @( f* o: s0 o% J5 t0 v
  835.               unlink(".\\DownLoad\\checkversion.txt");- p1 F, k8 J3 z
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
      Y( J' }. Z$ J9 T" @9 x" O: [
  837.               {0 H9 w  C4 U7 E5 l: v" q! `+ B; o
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    * W/ t/ u( P+ s1 w( F. C# v
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    7 `8 _3 K% U1 u" M5 l9 k5 L
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    6 u, W% H" R& g# B/ Q$ u
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) @7 n2 x3 S+ A3 O; E/ U
  842.                 : U7 g6 @& S. d' w# X) v; U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # L: J% }/ v# @! [: S9 a
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 A" j: j" i+ n, n
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 V4 r4 l( V$ x) y3 T0 O7 _
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 S" k' C8 @4 d* |; _, J1 Q$ X  ~$ u
  847.               }% k/ J( o- ~8 ]6 H. j' ^" X! h
  848.               dwStartUpSteps=5;
    3 V& j+ D  ?- ^& L
  849.             }- C5 C5 b6 X2 H# Q" o0 y; I6 S
  850.           }
    7 o% H1 ^, A3 Z! I9 i6 K
  851.         }
    ' d/ }% ?. e' R/ X
  852.         else; \, Y5 R! h" S5 M% s4 G
  853.         {0 o; E$ j) A" S  m( ^+ {
  854.           dwStartUpSteps=3;
    ' I( p7 Z. F1 t- v7 F
  855.         }
    ; Y6 u- e  r' m8 d9 N7 x
  856.       }+ O7 ~6 P, S% X+ u; |6 I- a
  857.       break;  _) _, e+ }& ]$ @' Y! D: u
  858.     case 5:
    , `5 h) [! Q: Y* v" \: r/ |
  859.       {
    $ M; I. C# q( s7 B% R
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    7 E9 d2 l5 J  u% _2 `
  861.         {2 Z  p- `7 M! o# t6 e/ e, p) x4 t" C9 h
  862.           int opt_overwrite=1;
    9 @) v3 I5 I& B( k% d
  863.           int opt_do_extract_withoutpath=0;
    9 q$ Z% L5 F+ {% f
  864.           unzFile uf=NULL;
    8 L4 s2 r) r* x2 q

  865. 1 j* \3 C3 E1 q6 _2 }) E
  866.           uf=unzOpen("Wsa.zip");& U$ m( ]8 G. E% R- c
  867.           if(uf)( P+ U1 z/ _5 W/ o& C  M8 Q! t
  868.           {  o4 J" C+ I/ g6 [# m4 Q& ?( s
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);: [' ]; ]2 o- P2 O
  870.             unzClose(uf);
    % a) V; E( O+ B9 @" X5 n& p1 P$ O
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");0 d1 ~. P" ~# _/ h; I
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");, C2 q/ `# C; M$ M+ ^1 O. q
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    3 K. T) g/ Z! T, m) t( E
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' m8 f1 X& W% N9 ?0 ]# \
  875.           }
    " x& v" p$ c# i5 I4 F, _; ~
  876.           DeleteFile("Wsa.zip" );
    2 L0 }! T$ F0 Q# ~: F' q, `
  877.         }
    % y/ O; U5 ?1 \" a6 h( {

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

評分

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