CSUpdate.exe源代码

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

$ T. t/ f* E9 a6 T9 W) R8 z
  1. / RevApp.cpp : Defines the class behaviors for the application.
    $ l1 R6 ~+ h6 F3 Z6 m) q6 g
  2. //% c$ ?; E) z8 ?5 n1 U$ k6 L" q

  3. 8 f: a) y7 C' Q4 N2 N) c# E
  4. #include "stdafx.h"
    ; _6 [  V5 k1 Y/ H! I
  5. ( [& ]% @7 Q0 m% `
  6. //#define UNICODE
    ) o' A. |3 _' Y; e
  7. //#include <gdiplus.h>  \, t0 e- y+ h, ^# o
  8. //using namespace Gdiplus;
    7 r$ k. D' Q4 c

  9. & k4 ]# G# `5 G1 T' q
  10. #include "RevApp.h". Q' \0 s7 S8 c
  11. #include "RevAppDlg.h"7 N3 t% Z* w- b1 f
  12. 4 Y# ^1 w8 A7 y# P6 _! D3 J; ~
  13. #pragma warning(disable:4786)
    ; Z, l9 d- n% Q5 q) H) \1 H% h
  14. #include <map>
    ( H+ f) W8 P1 [' f7 Q9 R% _" ]
  15. #include <list>
    9 v8 [5 M+ Q8 e
  16. #include <direct.h>
    5 k' X2 s! o; J, m7 {- i. z

  17. , u9 I7 u5 L. ]8 w$ [7 z  R
  18. #ifdef _DEBUG
    ' \" [! O& }: \0 o0 R: e
  19. #define new DEBUG_NEW
    / [! m& L5 J* R0 b) h# S, |
  20. #undef THIS_FILE
    # W7 t0 W8 ^* m- O$ m: ^. ^
  21. static char THIS_FILE[] = __FILE__;# V1 R5 a, p% t, B! I
  22. #endif
    & y- r% x% B. X# w% _( B# l) ?
  23. #include "SkinResDef.h"6 @) T+ x3 n$ W" z  b$ Z  V
  24. #include "ChangeBG.h"
    7 F" J" Z- A4 ~! e) }% S
  25. #include "AFXINET.H"2 w# `5 A: E% w+ X) h* U) u
  26. 5 f4 j$ S/ g: t3 a* |( m% k
  27. #define TRADITIONAL_CHINESE 0
    5 X0 {7 z" r9 |! W
  28. #define SIMPLIFY_CHINESE 1
    # g* a! ]9 e2 j. v7 p
  29. #define ENGLISH 2
    4 R5 ~8 {5 N( n4 ~. \
  30. int m_iLanguage = ENGLISH;& W6 p) J' g! ]3 s; x' r3 L. Z% \0 w
  31. /////////////////////////////////////////////////////////////////////////////0 S6 S+ r0 @  \; P! W0 z3 m
  32. // CRevAppApp# M' u+ j* F' c1 {
  33. 9 i0 i& H8 u' _0 M' y, ~3 o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)- A4 i" R& ?2 b. Z- c( e
  35.         //{{AFX_MSG_MAP(CRevAppApp). v' @7 M6 _* M' C6 v( F% k
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.1 U1 P- R. ]: L& y8 \
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!2 @# ]" ~0 |3 x* @) M0 u  c. w
  38.         //}}AFX_MSG, }: L4 C- l" @3 V+ n
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% `! T& S  `( Z
  40. END_MESSAGE_MAP()! F6 M& E8 P. M0 g( S5 _$ R' B
  41. - c/ v7 m& S3 m. y3 |, b+ z2 j" R
  42. /////////////////////////////////////////////////////////////////////////////
    5 t4 V- ^+ E) k1 M$ A. g1 l
  43. // CRevAppApp construction6 T: T* v/ a0 k- g7 ^' D- w

  44. 1 [; W& u, Y1 ~0 C
  45. CRevAppApp::CRevAppApp()8 o- J7 ]* E5 _' n
  46. {
    , \$ B, n4 |4 l+ g! o
  47.         // TODO: add construction code here,
    $ l2 f) e5 x6 z6 T- C0 `
  48.         // Place all significant initialization in InitInstance1 S* T5 C2 U5 \3 x6 y  {% \. q
  49.   bDisplayIsBig5=FALSE;- `* D- s( ?0 d% J. e
  50.   bRestartUpdater=FALSE;
    5 A( }& P* ]* {+ [( v1 _7 h) O
  51.   bFinishUpdated=FALSE;
    ( Q+ N$ N& b6 f  L5 d2 I
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ! Y8 a9 `4 j, {3 U* |& Y" v8 [  ~
  53.   InitChangeDataBig52GBKS();
    0 [/ i8 F3 g  Y
  54.   InitChangeDataGBKS2Big5();
    3 G: C2 C( s1 T
  55.         //! q" N+ c2 E8 A( y5 ^: _! @
  56.         bClickRunExe = FALSE;
    9 U, e. W: l- H
  57.         //  V7 L0 L& F) x% G
  58. }5 Q! ~5 B$ }2 a6 J

  59. - j1 J/ O) E  H
  60. CRevAppApp::~CRevAppApp()
    3 J2 J" ]3 }$ T
  61. {+ U; S6 T+ Y1 f! @( f$ A9 v
  62.         // TODO: add construction code here,( `* _9 o, b) s( T# V. @$ D( Q
  63.         // Place all significant initialization in InitInstance+ `! G! N5 Y- w' w0 Y0 B
  64.   EndChangeData();
    ! B" N! F% a- V; I0 p
  65. }" P; W$ g) r2 h& L" ^* O% f

  66. 8 r* [0 x. l% X0 J
  67. /////////////////////////////////////////////////////////////////////////////- p* d  M6 }& O  h8 ~: F
  68. // The one and only CRevAppApp object3 ^& M& u  A& r7 m/ G: W

  69. : Z/ |# Z9 ?5 e, a5 b/ M. \) b
  70. CRevAppApp theApp;! B, x3 S+ Y! C  s' E" C6 M

  71. & M5 K% ^5 m8 ?, F6 }
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ' P/ `4 H  ^8 {  S: \* R$ y2 }! u
  73. {  s. o8 y- T& [  w, N. O. y8 t
  74.   int iEOF=0;
    8 e2 S' Q3 r2 F  d
  75.   char szTempName[MAX_PATH];
    . b5 L2 |0 z, v* `
  76.   *szFileName=0;) s% S1 T7 U; h* t1 d
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! P, h8 W" y( T0 Z& h) T
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('); t& ?3 ?" [! m  W$ `% M- p5 C- E
  79.   {- B0 g9 \( _( E% v# z" T) L
  80.     strcpy(szFileName,&szTempName[1]);
    2 k. z% a9 h+ k4 }7 s
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) e3 Q$ `9 y9 x. w
  82.     {
    , c0 c. g/ T- x' O( @2 o
  83.       iEOF=fscanf(fp,"%s",szTempName);0 J# j2 y! l; d, [
  84.       strcat(szFileName," ");
    $ O$ a$ s% @/ v9 w2 h* f
  85.       strcat(szFileName,szTempName);
    ' Q1 @9 c: o0 I- b# l
  86.     }- e# f6 O8 c0 v
  87.     if(strlen(szFileName)>=1)
    ' F+ A% ]+ r, c0 S7 G8 L  l
  88.     {
    # x3 w* T0 X: \8 ?. D5 J' l
  89.       szFileName[strlen(szFileName)-1]=0;
    # m7 |' B9 d0 R0 a. f: p
  90.     }
    ' I4 C4 n% @# U* P- }" X  [# U
  91.   }5 W( S/ U1 k: A) S& d( O# n
  92.   return szFileName;+ g* L2 T7 f3 P6 `- t1 q2 d
  93. }! ^! ]/ y: [4 d8 g

  94. 4 W8 c3 _. D7 ^0 \
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)- J5 l& p. I  S" p- o1 I
  96. {
    3 \. N8 m2 }: X
  97.   FILE *fp;1 Y& H; I2 O" Z- v, F  A! n8 v
  98.   char *key=NULL;7 X4 x  _, z0 I, K& x2 `
  99.   char version[MAX_PATH];/ l7 h+ u7 K6 {9 J  N* q) {" N
  100.   LPUPDATEFILE file,olds;
    5 U$ v! d& A. I3 |( A- k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' v& R! \) `/ i8 e* C3 _; E5 ?

  102. 5 Z  D1 [* o! e8 x4 ~7 ?7 W/ Y% D* o
  103.   UpdateList.clear();! P; u. o/ Q! ]- m9 ?( x' s
  104.   UpdateFile.clear();
    5 [- m: r* ^# @0 Q* r6 O
  105.   if(GetFileAttributes(filename)==-1) return false;
    6 p5 B. _5 r& X
  106.   if(!(fp=fopen(filename,"r"))) return false;
    3 d; I: ^# w# N8 g7 j
  107.   fscanf(fp,"%s",version);
    ' M9 p. L3 H# y9 ?) r9 D
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ) l! w1 z  l5 F- ~$ s. ?
  109.   while(fscanf(fp,"%s",version)!=EOF), l, d' c- X+ {! f+ M% f0 \8 q* M$ f
  110.   {# r- T5 s+ }. y5 `
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* s, G! g, D4 Y
  112.     fscanf(fp,"%s",file->path);
    2 s' M1 l) P7 ?$ }- }
  113.     ReadFileNames(fp,file->file);; f1 S/ W% ]! h* h9 t- R' E
  114.     strcpy(file->full,".");4 d2 `; f: u% @
  115.     strcat(file->full,file->path);
    . G% g9 d" E4 j; J; X: W2 ?& V$ D
  116.     strcat(file->full,file->file);  U* W2 Y- o% h+ u4 D# Q0 H
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    + b: P$ _1 S. F" |" n6 b
  118.     {& C. v6 V, g5 ?5 w4 r8 W
  119.       file->vers=(float)atof(version);
    + u1 e+ o2 j5 `# {7 T. J6 f* \0 m
  120.       UpdateList.push_back(file->full);9 u. v" m  s" f/ W' ^- T6 H- N
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));: g, }& H0 ~! o& Z3 s3 c
  122.     }
    " g5 \  B* M! p% _
  123.     else( N5 w0 v! Y* O5 y7 G  u7 {0 t
  124.     {
    3 p# A3 g5 h: M9 G
  125.       olds=(*p).second;
    7 Y1 I6 l8 H8 D3 {
  126.       if(olds->vers<(float)atof(version))  N3 I* w$ n9 p7 `% Q& e9 `! w
  127.       {
    : h/ D( }3 d, Z% ?2 h# ?
  128.         olds->vers=(float)atof(version);
    : @5 w5 b6 @2 u
  129.       }
    $ f4 E/ G+ M% Q3 e1 |6 H9 [
  130.       free(file);( T2 H- s# c' v  {' i" m9 ?' |
  131.     }
    9 e& T/ r" N, }4 z  k
  132.   }6 M. c. m! x0 Y" e, p4 P
  133.   fclose(fp);8 l6 b3 ?+ ]7 n5 Z& l6 n( s
  134.   return true;
    5 }; H7 M+ n4 ~
  135. }
    - v. i5 {3 `0 y6 {

  136. & T$ R4 g# [2 S
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    0 E1 p" [/ F. O/ c1 W6 J
  138. {
      `! N, }+ S0 c, S3 L+ n" ]
  139.   TCHAR  szFull[MAX_PATH];
    ; x& P1 w' _& u! [  E
  140.   TCHAR *token,*inter;
    - \: Q4 K" F  ~
  141.   *szPath=0;
    5 U" w# I5 o$ l$ }; D. B- |1 u
  142.   strcpy(szFull,szFullPath);
    ( h/ a" T3 g& m2 j
  143.   token=strtok(szFull,"\\/");' y' u1 ~! X3 F  c8 m+ X0 p
  144.   inter=token;
    % u4 L2 C8 u: x
  145.   while(token=strtok(NULL,"\\/"))
    * Q8 N0 o. I/ x
  146.   {6 i8 Z% P, \" U
  147.     strcat(szPath,inter);
    $ E: X* _+ k1 c) q' `' h0 e# D
  148.     strcat(szPath,"\");
    + K5 o1 ?. }* t5 @& _$ ]
  149.     inter=token;
    6 \. [$ r% W  n
  150.   }
    7 J! U2 M( X* v" ?/ w  Y0 H
  151.   return strlen(szPath);' r6 R8 Y; Q1 d2 o8 ]1 U8 h0 t0 Z
  152. }6 ?8 R3 h5 H+ A; D5 B

  153. 1 i% b6 R3 T+ W: V4 Z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) v3 z) D6 B% N, {& h( ^. e) B* ~
  155. {
    9 e" K. o! @: @8 F' y8 ?
  156.   DWORD attrib=GetFileAttributes(Target);
    / c8 E; h. j7 M2 B7 n2 G
  157.   if(attrib!=-1)3 M& w7 B2 b! K. o- o, g/ Y
  158.   {
    ) {1 `4 i. l# V8 l
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    * Q2 X( u* i, b4 R" N" j
  160.     {
    : V# b& i5 K$ e4 S% I
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    - d/ [- t! C/ c& Z- V
  162.       SetFileAttributes(Target,attrib);; s: `7 _* Q8 r* B* V# Q  w+ Y
  163.     }
    * T9 ?! m9 r- @' B- V& y
  164.   }8 S$ u8 v% T/ B  q
  165.   CopyFile(Source,Target,Erase);- N! x3 m6 g: e- {/ l4 J3 r
  166. }- W/ o6 D% {1 F) I- y, H
  167. " o- V2 p$ F  I2 m$ z3 V6 X0 H4 }
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)1 z0 V# ?1 j3 d
  169. {: s: g, _! j% w; G
  170.      FILE *fp;
    / l6 r2 ~3 L- |/ T
  171.      char  szBuffer[8192];
    0 z0 I  ^$ |' p' a! `; }* s( `
  172.   va_list  argptr;
    $ z9 p2 q1 W" J0 u7 s

  173. ; P" a7 @' N* U5 }
  174.         va_start(argptr,message);! r. ~9 R: G! f* K+ f& }
  175.         vsprintf(szBuffer,message,argptr);* O, K9 Q( ?# O  a
  176.         va_end(argptr);
    $ \/ {2 L1 _0 Q8 N( n" w
  177.   fp=fopen(FileName,"a");
    0 J9 o0 c5 K+ b/ u% C8 ^5 a- H
  178.   if(fp)
    , N6 M& y4 G1 T7 d' G* U
  179.   {2 S5 ?/ B+ L% m  L/ T+ p
  180.     fprintf(fp,szBuffer);
    $ N. }2 W4 `: U& X* H9 g/ H8 j% q
  181.     fclose(fp);6 k- v  Q7 ]7 S  N- y  O
  182.           _flushall();
    ( B8 v8 O1 T) E
  183.   }
    2 ]; m3 t9 e0 D& {# G4 o
  184. }
    6 g0 E5 s8 E% y  }5 ?  J6 X& q, T
  185. 9 s0 ~/ d5 |+ ^, z/ d) N0 p: v
  186. BOOL CRevAppApp::Fclearf(char *FileName)3 C5 `( k6 e9 r" q
  187. {# N/ B  {1 q# E3 t# P8 I
  188.      FILE *fp;7 H# s# R" e: V5 z
  189.     DWORD  attrib;
    8 u/ W% }' i6 k% r2 h
  190.   attrib=GetFileAttributes(FileName);
    ; Z& g0 x' I8 f' Q2 T5 s
  191.   if(attrib!=-1). Q; X& u+ p+ Y3 V$ @' g7 U) N: U
  192.   {4 G6 P$ h* e) o  c+ A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    % _! J" Y3 v# K7 a- W: l3 Q! W
  194.     if(!SetFileAttributes(FileName,attrib)), V, a/ Y' F' i
  195.     {, j+ ^5 s+ p" B# D+ O
  196.       return FALSE;
    $ s* x, ^. E* A3 `/ h
  197.     }  Z& H* [' O9 v6 O6 A# |4 a
  198.   }
    ! z% d8 Y, y. R
  199.   fp=fopen(FileName,"wb");8 D+ ^: q2 R- ~# [8 ?7 P
  200.   if(fp)0 M' P- ~5 U' E5 e2 z* y! L
  201.   {
    . ]2 A" ]6 d* W
  202.     fclose(fp);
    7 H9 a! o3 F( \
  203.   }0 r( S! P! ~2 u5 h: t3 a! L
  204.   return TRUE;
    3 m2 T+ w$ W6 f9 [  o6 w
  205. }
    & p( O* }( _: R% a" }( |- B4 y
  206. . F, q% k) _- Y% V5 c/ r% j
  207. BOOL CRevAppApp::UpdateLocalVersion(void)! g; C$ `/ I7 n/ L
  208. {1 A* {0 }% ]8 c
  209.   char filename[MAX_PATH];
    , l- f9 @' q, ~! h/ ]2 W
  210.   LPUPDATEFILE file,olds;% b" K0 V" K$ d) V9 Y
  211.   std::map<int,CString>::iterator i;/ E- ]# T# M5 m! j
  212.   std::map<CString,LPUPDATEFILE>::iterator p;; W2 D7 D  I% c5 U. c0 l8 X# R# A
  213.   std::list<CString>::iterator l;' W. C% @7 w" d" @8 V

  214. : f$ `: s% [; X# T5 G5 d
  215.   if(bFirstUpdate)
    : `/ ^  I: D; W* u$ H% u" l
  216.   {
    ; {: E" A# I. {
  217.     dwCurrFile=0;
    9 d& B" d3 M* T  L) k$ `4 z; }
  218.     bFirstUpdate=FALSE;
    # H$ O$ d; w' `7 e+ J1 r4 K
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 q$ o# e& k& Y  H) m$ \
  220.     {
    0 `2 K+ p  r$ |4 {; y- q
  221.       dwTotalFiles=UpdateLocal.size();
    ; ]# Z2 O2 k$ z! x7 D  Y0 L8 U
  222.       dwDownLoaded=0;
    ) Z2 B/ k! v1 a% x; `
  223.       bSilentStep=FALSE;! q! M# X/ C+ z" H
  224.       bCompressed=TRUE;  t8 o1 v% D( Z& M$ D
  225.       strExtLocal.Empty();, {4 w/ M! w( q3 Y
  226.       strFullName=(*i).second;
    6 t: B# i' L0 g7 l3 l8 {* c# C. K  Z
  227.       dwProgramState=AP_CONNECT;, t# h# C+ _! v0 ?! }8 i9 p. F9 f
  228.       return TRUE;
    1 ~5 E  t0 K9 o& Z8 f
  229.     }
    ( W2 P- H- V4 E# \' r" }
  230.   }9 t( U3 k7 n. M' k  x  ~
  231.   else if(bRestartUpdater==FALSE)$ R7 e5 X; S" g$ S9 \3 f* a' E
  232.   {
    * H! p, a* M3 y: X( N3 Z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 A; G% |, C* `* u! X
  234.     {! _4 i- e: q3 B+ g! X; T8 Q4 B# N
  235.       file=(*p).second;! h# W5 ?1 W% P
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    7 C; G: J- b; j1 F7 W5 I- N+ {
  237.       {
    . [% {% [! B9 [( Q  Q' n& {5 d
  238.         olds=(*p).second;
    3 G$ ~; S& a, a
  239.         olds->vers=file->vers;
    * C+ K, C: z' p3 z2 q2 l, C
  240.       }
    7 E& A+ |" I) n- F
  241.       else' J! H; L6 i3 o, _
  242.       {) I/ j% F* u: M2 A3 A4 ?4 A
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' C! h9 q- w6 c% h
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) d: A4 Q0 n( N% Q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));& R/ @9 S0 j$ k4 O
  246.       }
    8 }$ O4 f- J! e0 [
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");! T$ i- `6 f' r5 c& a0 H8 F2 F
  248.       sprintf(filename,"(%s)",file->file);
    ) R2 x1 S+ M, y- Y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! B2 L. P8 I. n: ^  Q9 z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 G* o2 H! Z- L) _1 F( V- O. U  w
  251.     }0 T+ m: ?6 x' @% E  N4 V3 z
  252.     dwCurrFile++;
    : `- Z( }8 C1 w% f
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  [) w) y# M6 h# o0 W0 a2 g& |& e
  254.     {% h. a9 H* C2 r/ h1 k
  255.       bSilentStep=FALSE;
    2 l: l$ H0 N* r, E2 N" g9 r
  256.       bCompressed=TRUE;
    : L5 [1 K0 G9 n% X; j5 v
  257.       strExtLocal.Empty();6 M4 [" a) S' x0 @
  258.       strFullName=(*i).second;2 ]& e6 I) A! z( h9 r
  259.       dwProgramState=AP_CONNECT;8 y9 }3 Q. O7 E7 @
  260.       return TRUE;4 |5 G8 g, {$ o; P
  261.     }; t( }8 O- ?& J4 [5 N7 T( P/ X
  262.     if(!bRestartUpdater)
    / P, F  }( U- `" E
  263.     {- \* d& T+ l" R8 o
  264.       int iCurrSize,iFileSize;" c8 A* l" T! v0 e
  265.       iCurrSize=0;
    3 \5 B9 _( W) ^  h- y7 Z: Q: H
  266.       iFileSize=UpdateList2.size();
    ; {  v- m1 C( f- ]8 R2 _5 O
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");0 l5 V# S& a4 ]+ `8 [0 I  w
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");5 x& q% |5 ~) v5 y4 S& P! Y+ x0 B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");7 v- h2 g9 J' u( b' |2 t
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! [1 ~0 M) i, V& P' ]1 K6 s( F  k
  271.       Fclearf(".\\update.dat");- V9 x! o/ B/ A" s
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    . j' t8 R/ J4 g
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)- K! b' z% ?  U" |, Y. k8 u
  274.       {$ t) M# x* ^3 T/ l7 s; A' x
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ' T- y( E0 b9 F7 {2 {: \! ^3 j9 K
  276.         {
    5 C; W6 B0 f! H$ w; U. }
  277.           file=(*p).second;$ l; l4 z1 O; l5 G6 L
  278.           sprintf(filename,"(%s)",file->file);
    ) t8 @9 Y+ j, H% y' o5 c
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 H9 N! d  I; p, u
  280.           iCurrSize++;
      C1 f2 o( i9 ?' O& X0 E( c
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      d$ J7 y& d; A8 j: B
  282.         }6 a7 J$ n9 C; w& t, g
  283.       }
    3 I' [( d: t* k) t2 _8 D. O
  284.       unlink(".\\update.txt");0 w2 n4 i% q2 w0 q2 P# O
  285.       unlink(".\\update.tmp");
    + `  h0 f& f4 V: v+ t4 l. p
  286.       Fclearf(".\\checkversion.dat");
    ( _# o1 F+ e* E6 s8 x) u1 b! u
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    3 ^; B% c; v' |1 i7 H
  288.       if(UpdateLocal.size())
      Q8 K/ W8 C# J6 F; }4 I5 ?) i$ r
  289.       {9 H5 y8 O. }; E& J5 S  _% H
  290.         UpdateLocal.clear();
    3 ^0 V- I3 o, Z5 Q* T  T5 g/ [' a( t1 P
  291.       }
    0 L. ?+ ?1 F: d; j5 D
  292.       if(UpdateFile3.size())5 O! d# n$ y9 e7 m* }- j' o4 u% Y. e
  293.       {2 r7 x1 \. y1 D; _- n4 g  e/ r' o
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( T; h/ S2 K& e* x
  295.         {& j9 j+ x. @2 P& l5 Y2 ^
  296.           file=(*p).second;
    # j0 |8 R4 H- Z6 ]* M( K5 U* ^1 G
  297.           free(file);
    4 g+ `' j& i  L3 Y5 G" q& F& |" b5 }
  298.         }2 X+ I. f! i! Q% B2 C2 E' m
  299.         UpdateFile3.clear();
    7 a1 c1 _6 A, `8 }6 b( K( D
  300.         UpdateList3.clear();
    # g# G4 n" W& b1 }7 N! y9 _. `
  301.       }  Y$ P% F* U  E" f% A. M
  302.       if(UpdateFile2.size()), ?5 h+ S$ W6 |0 Q- e; w
  303.       {
    3 N4 `. a6 N& _( T% @
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / l% ]0 L2 r" y8 u2 w/ K( g9 G
  305.         {( C8 e' L' e7 d
  306.           file=(*p).second;# h  F6 G% M6 e* a
  307.           free(file);
    , @- r0 p* H: U% n, f+ X/ `% C$ S$ I
  308.         }6 P. @6 d6 D$ w; c2 e
  309.         UpdateFile2.clear();# J. M' ]. X+ A! ~+ u/ B
  310.         UpdateList2.clear();
    2 M, N4 \3 R0 w, _. L9 n/ U
  311.       }( ]' {* t8 B$ @, _3 h
  312.       if(UpdateFile1.size())
    7 o& `- n5 e4 H8 \' y
  313.       {9 Z, G7 C+ ]: G6 C; R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; X+ r8 D/ X0 w# _' s8 k  b
  315.         {
    : f& \. Q+ |5 T; B
  316.           file=(*p).second;% d' H( |# k: t! u
  317.           free(file);/ g" T- i% W! [
  318.         }
    ) J+ X% U( a3 i
  319.         UpdateFile1.clear();
    3 K) U+ m6 I, Q5 r8 ]' c3 p
  320.         UpdateList1.clear();
    ' f; V6 M+ P8 P
  321.       }# \5 o& L/ C; Q% c8 [3 K& v4 X: @; O
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ) H+ l) Z$ C$ W4 B: Y1 }
  323.     }7 a" K: @  }% g( B3 G* l8 `
  324.   }
    & v1 H, ?" l7 ^% }
  325.   return FALSE;1 T8 l! [+ l+ n  @; R9 S7 f5 {
  326. }
    7 g( V* d5 f7 K
  327. 1 ~7 B, I  }: V9 U8 d
  328. void CRevAppApp::ClearAll(void)
    6 x( I3 A0 \! v5 S
  329. {
    * q$ J4 q8 @/ X7 K( U/ x
  330.   LPUPDATEFILE file;% W) B6 Q- _7 G" ]' u( E& a
  331.   std::map<CString,LPUPDATEFILE>::iterator p;: B6 }4 z3 |7 ]1 [% ^- s: P: }
  332. 2 ^) ?: V% C3 v% J, F
  333.   if(UpdateLocal.size())
    ; j# \3 T6 h  K8 J+ z# J+ w
  334.   {2 S# N" }4 I9 ?. b. [
  335.     UpdateLocal.clear();: s# u( Q* g( O
  336.   }
    % @$ n6 Q9 ~( E+ N+ m1 F3 i
  337.   if(UpdateFile3.size())
    ) _# Q* s/ a6 d+ X8 D7 R
  338.   {
    " V  I8 n5 ~* [
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). j+ `6 p6 S; a* F- R$ n4 [8 t
  340.     {
    2 G+ \7 \9 K5 d5 l' E
  341.       file=(*p).second;
    ! N! y, z4 T! R. b  t! ?9 m
  342.       free(file);
      X  H, l0 t0 v2 T4 v9 u1 \) u
  343.     }
    ' M9 d; b. ?; K3 Q; Y7 ^
  344.     UpdateFile3.clear();
    & X  ?6 Y. ~- z8 Y; F1 _+ W
  345.     UpdateList3.clear();
    ; K2 P6 P" [0 U. A- L1 r
  346.   }
    " S+ d" B. E. A8 n: n3 M  i
  347.   if(UpdateFile2.size())
    + {# U( B) ^* A# e0 ]& O$ P; J/ x. C
  348.   {/ ~6 ~2 O. m* c- ]4 }
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' L( W4 f/ c# q+ p) {8 b
  350.     {
    6 k  B1 c6 I) K, P. {1 b0 O
  351.       file=(*p).second;' e' [& E) [( J2 L; J4 h$ K9 D+ t
  352.       free(file);; ?1 E4 D  y/ s: w+ O* `) Y
  353.     }
    5 r& m. X' i3 @  I5 y$ o$ S
  354.     UpdateFile2.clear();
    5 y- C1 h1 _- l& }/ h5 e
  355.     UpdateList2.clear();4 q3 ^  @9 v6 }3 s! \: }
  356.   }
    + f% p) {" i6 ^$ O+ F- f3 O' R
  357.   if(UpdateFile1.size()); w) ]2 D# ]  u8 q, l# Z
  358.   {( A' G" I2 O! f8 \4 T" \
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 C' [" I9 Q. P# v4 C
  360.     {
    9 }+ @) E$ F: G% @* Y
  361.       file=(*p).second;. y; Q! w1 j/ Z
  362.       free(file);: u! Y' j  l% N% R
  363.     }+ ]% C, z& t, U* ~% e7 v
  364.     UpdateFile1.clear();
    0 ~) o2 s8 b2 c* L, r3 L
  365.     UpdateList1.clear();0 f- m1 f! |* j6 u% a
  366.   }7 S: @4 C/ P# `8 d$ P  n$ ~- O" Q$ A
  367. }  
    ) D9 i4 M1 Y; e8 j1 I' e
  368.   
    % z& t; W! o1 F
  369. BOOL CRevAppApp::CheckLocalVersion(void)0 c7 N' s8 o7 |' M- c
  370. {) V: m- }8 g* G$ E
  371.   int c;
    ' r1 n; K( i; t/ e, a% V$ o
  372.   LPUPDATEFILE file1,file2;
    5 f9 b3 S. e4 C4 w8 R0 [
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ; d7 z! p: O4 {( G$ q* c/ B0 c
  374.   std::list<CString>::iterator l;
    " y5 H& N! X9 k3 w' |

  375. " k# }. X2 Z( b3 w* {# U6 M
  376.   UpdateLocal.clear();" G2 `" ^: O- q) t7 ^
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);0 L5 `% `2 N4 o- {0 p
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    5 W9 i' m' k+ K5 ~
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);$ J- y3 H0 m! Z& [/ ~8 D
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ) H' }3 {% O( a. y
  381.   if(UpdateFile3.size())' L# }4 b$ y( Q. W9 E6 r
  382.   {! O* |4 X5 |% r5 S1 i
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ' Y- c1 [5 u6 p8 i7 A% c& U
  384.     {
    9 t/ T* Y' g) U9 e& v/ A+ l( W
  385.       file2=(LPUPDATEFILE)(*i).second;
    & X/ b) l. N, K1 q0 i* }
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ i: }! H+ r$ Q9 z
  387.       {; X! F6 ]* t3 A0 n* E+ \
  388.         file1=(LPUPDATEFILE)(*p).second;
    % i& G6 {8 `; K: i. ^" d* I: M9 z
  389.         file1->vers=file2->vers;
    . {* E- V7 l- O8 b
  390.       }
    8 [& F7 R6 p5 k
  391.       else
    ( L7 i5 L. Z8 p
  392.       {8 r+ M- |4 V7 P
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ u1 Y; S9 N' I( T- ~) m' P
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));% Y; v3 g* U# U$ M$ J2 k
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    / M! R" \. M" O$ T& _
  396.       }% \5 ?1 Y  m5 S( A9 ~- m
  397.     }
    ( o. t' s: T6 r) @( m7 F
  398.   }
      k) T: n4 Z0 i6 ?0 i" a
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)! {2 S/ w: X- E; e
  400.   {: ?% _3 D2 g0 B! x. i, v0 O+ n
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    * A; W7 N: j. p) A' z. H; L! W
  402.     {
    * {# o4 G0 j' L- W% P& S
  403.       file2=(LPUPDATEFILE)(*i).second;
    5 L' Z7 W" {- s/ b- s
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! ]& G) G6 j' m! w( o# h
  405.       {
    0 n  r6 q0 X. |! S) e/ C
  406.         file1=(LPUPDATEFILE)(*p).second;
    ( ]0 U2 W/ {- r
  407.         if(file1->vers!=file2->vers)1 [) W0 T; l" \9 d) Z% v
  408.         {9 g, b; x7 k5 K4 O3 m, o+ t
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) F& l% C( K- h; T
  410.           c++;0 D" T8 f, k1 n  V7 Y
  411.         }8 ?  o) R0 t8 e5 b( ~, @
  412.       }: B( ]! l/ E; q+ v
  413.       else
      p3 b& i7 A7 c$ a# c/ B% C: \6 W/ w
  414.       {8 l' S! A1 _0 w, e( [. O, ]2 l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) p' a& |2 i7 ]0 V: F
  416.         c++;
    6 N5 `! l2 ~+ S. o9 [* W
  417.       }
    % m& ?2 d* F" B7 J1 P1 E
  418.     }! I9 H) M6 [3 |: l. p3 s' y$ {/ Y6 h
  419.   }
    % P# `/ l% p) S$ [) `# {! D0 i
  420.   unlink(".\\DownLoad\\update.txt");$ Q* n$ s& t0 F3 z9 j( ?
  421.   if(UpdateLocal.size()) return TRUE;. s* T; y  R4 F+ m+ N* a5 j2 G
  422.   else                   return FALSE;
    1 _3 h8 ]% i/ w. r5 K- n9 z& M
  423. }# m* N# J5 p# S% y5 |# {
  424. * ?- c  q" q  t: ]' \7 f
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ' ?& n  K$ Y; R2 t& `3 Z1 D
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"( t8 K) o1 m7 Z/ n2 u0 Q; x2 O# @3 W

  427. , a) f9 T, [4 |1 l; F# N9 t

  428. ! U7 `. u, j- G! _" _: N8 e% n

  429. 2 K$ D. p4 U' p, P) p9 c  }  v8 Q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile); ^4 n) V3 d, T
  431. {' v. |9 U. H. ]1 d, ^: \
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;  F' {8 ^# Q$ E
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % ?" B, R- o/ L, g' _4 p0 V  U# L
  434.   {
    # m; M8 Z; X) _' k
  435.     char szLanguage[50];$ a; _6 V( D' k1 J4 p
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 r6 _+ o) @* d6 R' {: G
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 o9 l% [+ R0 g3 e" m
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, o5 O# J0 ~; B2 l1 A/ ]
  439.     else                                   m_iLanguage=ENGLISH;
    ; M% P% T1 o2 h7 h; T1 l; R
  440.     char szRegister[100];1 T: T1 \. M8 v  \) x4 q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 k! e, `5 w  W" }
  442.     strRegsName=szRegister;! N7 o% ?+ }% {
  443.     char szPatchURL[100];' L: Z; E' D, v' z. L6 j" ]
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 w3 T7 O6 X3 y# {! c5 Y$ x
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 B/ t* j3 y% T7 s" Q2 N/ G' j
  446.   }' [0 m' w7 z; p3 Z* j# W+ y$ T
  447.   else
    7 {5 [& V1 h* Y- J9 ]* U
  448.   {
    * p% ]: S+ L" t* q
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* p, d) t0 ^& }4 ]1 ^8 r
  450.     strRegsName=DEFAULT_REG_URL;2 K4 {$ S- \5 q1 [/ G6 G& H* R
  451.   }
    1 C8 w) i% M$ H5 r% R  _6 @7 q8 d
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! b! D- y: O; V5 Q# z4 j
  453.   {
    6 m+ y3 i2 r0 r7 d& k( M) d- M
  454.     char szIP[50];, g" I! |5 a0 d2 i1 U( C
  455.     char szDIR[300];0 L" q6 w+ ?7 c/ F$ {
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    $ C' R4 y0 A$ T3 I; D1 D+ i8 Z2 ?4 l
  457.     {8 {  Y4 C& E% r! C! \
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ) c1 S' u. g6 T9 A* d+ g
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");4 ]/ d9 ^8 F5 Z) T
  460.       strHostName=szIP;" Y- C) n: O/ i
  461.       strHostPath.Format("/%s",szDIR);
    6 E! n2 M5 |2 {6 B1 ^" n% O
  462.     }
    $ S+ q; G2 X' M
  463.     else" }# `; z: }! z- u- J
  464.     {
    % F9 R% s" I% @) p1 N0 }
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 @, _2 A2 Q6 {$ |
  466.       {. B* h3 A- k  @) t/ U9 c
  467.         char szLanguage[50];) e. P* B8 @4 a/ p6 J) c! a! I
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . h/ l& p+ D. q" ?8 ]* x9 c
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . a* k/ d% l" m: |5 S& ^9 Y3 Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 g* j; ?% [. r& Y4 F" {: E/ z6 g
  471.         else                                   m_iLanguage=ENGLISH;
    ) u# b/ Z' K: \- o  j
  472.         char szRegister[100];
    / {# Y- E2 d& R6 P6 Q0 H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");, \, C  h! _- A! ^" @
  474.         strRegsName=szRegister;& p0 U! `% h. W1 a  i0 c
  475.         char szPatchURL[100];
    8 {3 E( w! ^. }) g' v9 m
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , C$ h8 I5 y8 b- L- V5 v
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & H3 i) w: f' n0 L# Y
  478.       }" V( G8 Y" O% S
  479.       else
    " p) |* F  E. \4 f' I
  480.       {
    & z" G5 l7 ^. ~+ [
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 u8 H7 z) V! y! V" Y
  482.         strRegsName=DEFAULT_REG_URL;
    - W) P0 f4 ~0 S6 u0 |
  483.       }
    * M# u3 R' M1 d* q1 C+ Q
  484.     }
    ! m$ }; O& O, d
  485.   }
    & }: W3 K2 ^8 W+ _' J  o
  486.   return true;
    6 `" s' U. {$ `3 b# `: s, x
  487. }! y  K% o) p4 Y; r  D1 M9 ^

  488. / J) q+ x$ o- b* w* g! Z9 b
  489. #include ".\ZLib\unzip.h"
    9 ~, `$ G  |4 I: l  y
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    8 I9 Q! {4 o4 f7 l$ ^
  491. /////////////////////////////////////////////////////////////////////////////( }- x& D  a8 S( S; {) S" G
  492. // CRevAppApp initialization+ a; d% y+ W6 G% a
  493. 6 c# x9 W$ d  c9 S$ h; |, {
  494. BOOL CRevAppApp::InitInstance()
    ( P. R* B5 }2 M5 j2 D
  495. {2 G( T% z& `3 P# S( Z/ N4 x3 _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];5 L$ p3 w" |; q! q8 s) k" x

  497. - T# ?- P' ?% v2 L+ J9 W- U- Q- J! Q
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);1 T. B1 [' C+ `0 ^
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    $ e/ [5 k% c0 a& |  G& W1 i' [
  500.   {
    ; @/ N( Y+ C4 S% E! M# H
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");+ {# @1 A  @1 Q' G+ W% v
  502.     GetPathFromFullPath(szPathTarget,szPathSource);* b9 G; Q4 P: g( v, Y, y7 Q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))), A7 K4 C3 ?, c6 p  Z
  504.     {
    7 ~# w3 P* ]: @
  505.       strcpy(szPath,szPathTarget);' W/ S! K6 y" r/ B* O
  506.       SetCurrentDirectory(szPath);
    0 k5 p$ D6 n2 Z+ m- {4 @
  507.     }0 q6 l# o1 Q% G# e3 L: p
  508.   }
    + r6 ^' e+ }, }# {
  509. #ifdef _DEBUG' [+ w3 ~& A: Q2 g
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) P; i3 |& n! W2 S) C
  511. #else
    ) m4 {: x, Q( U  |4 a
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . F+ h# \* R/ F8 @8 O
  513. #endif+ D* T8 j9 u2 g! \7 L
  514.   {0 K$ |9 C( r# L, L# {( F7 I
  515.     char tempFileName[MAX_PATH];# \& T6 r, z+ c, B* M. f3 }3 c6 D
  516.     strcpy(tempFileName,szPathSource);4 T2 C. Q; ~( w8 w
  517.     tempFileName[strlen(szPathSource)-12]=0;1 f" `- s# [2 b; _, X+ @
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    8 E& u$ [8 F3 G, K8 [( q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);0 z& U9 o  E  q! Z3 i$ D
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    " q; T5 U# {, ]6 A7 R: ~
  521.     return TRUE;5 |3 `( T! J9 E& w
  522.   }
    9 _6 q# s$ B! }8 S- u4 P
  523.   // Nuke 0118: Delete run.exe
    % E1 I- A) x4 p+ k! e; I( N
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    7 A8 n$ o' a' b* `% W
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");/ U0 p9 P1 k: E: ^0 K* w
  526.   if(!ReadCfgFile("Config.ini"))" A( t7 b) n" o, W: o
  527.   {
    2 y+ h6 Q* n. F5 f: d2 ~
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 c5 `! l  L" ~4 |, @& y
  529.     return TRUE;
    + U3 d- C) ^( s
  530.   }
    " I! i7 J  ?/ E! N. O) C
  531.   HANDLE mutex;
    % {7 j5 F3 _/ |* p0 ]; b
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))6 O+ Q+ i$ Y. r$ w6 B9 ?  K
  533.   {" l; ~5 u! a% d/ z% W
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    5 A  A& ?6 u8 \
  535.     {! J6 d+ B5 {5 h4 ~
  536.       CloseHandle(mutex);
    6 \8 \, L2 L2 L
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    - j0 S& S. z3 J
  538.       return TRUE;
    & C0 ?) r& z, Z4 }5 `! ^
  539.     }
    5 W6 a" A, k. u- l1 x& G
  540.   }  " |# R! H* R: b# W; w
  541.   CloseHandle(mutex);
      P8 S& O, Z) B2 k) j: j
  542. 4 M" K: O3 D, a6 \
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    9 P" e8 \5 i' h9 O! D' J
  544. ) N, {4 t1 T3 s! y1 Z4 o9 ^1 P
  545.         AfxEnableControlContainer();
    0 h* C' S2 Z* P3 i" V: B

  546. , e  A! t! I* b" h, i8 D" y
  547.   bCanUpdate=FALSE;
    6 C% ]4 N" i1 y$ O; P' k
  548.   dwStartUpSteps=1;
    ) U: S8 A" J2 Y$ g: M
  549.   dwProgramState=AP_NOTHING;
    6 i0 E8 e4 ]' f4 C! w* w
  550. 1 O% v3 y' Y, t* v
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);2 t! `) ~, |5 x7 y7 ~) k
  552. " c+ }$ R! l3 ~9 a, u9 L+ p
  553.         // Standard initialization
    7 S+ O% U2 w' G% S3 X2 Y
  554.         // If you are not using these features and wish to reduce the size! v2 S9 e0 ]* z
  555.         //  of your final executable, you should remove from the following
    3 U( J; d( ]3 Y: _
  556.         //  the specific initialization routines you do not need.2 W; O, Q4 x/ |! K& c$ O3 u

  557. * V6 ~  G! d2 U; r
  558. #ifdef _AFXDLL0 b5 s4 J+ `% F1 n% D, C
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
      v, @, d' p# N, M. s
  560. #else
    & ]& x% _7 d6 x( P( c! s) F
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically1 A5 r* M" `$ R
  562. #endif
    ; M  y5 Y# ^; ]: W

  563. & J5 L$ L2 V$ g0 k: |  u
  564.   dlg=new CRevAppDlg;
      J  P2 q# _  a" a$ J- \
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 t) D8 Z0 S- L
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    * I9 m2 c& R1 A' \9 b1 Z
  567.   m_pMainWnd=dlg;
    0 f; n$ [, B4 N0 N5 u; Y$ J
  568. ; s; h: ?, C. T! _+ _3 p* I
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);- R3 b( ~, j3 H

  570. 8 U& M8 I/ n# _! {# x1 ]& f
  571. //  GdiplusStartupInput gdiplusStartupInput;
    - Q, F/ ?4 u" N, T5 T* j% u( B
  572. //  ULONG_PTR gdiplusToken;
    5 X, P& P+ c, S5 {1 h! y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    1 O2 v) W" h9 n1 e% w8 \) d2 ^

  574. ) u" d4 j" Y6 O" F: T
  575. //        CRevAppDlg dlg;
    8 R7 u: K, C; M# \/ G' K( F+ X
  576. //        int nResponse = dlg.DoModal();2 p* E4 {' ]: u: j, Y
  577. //        if (nResponse == IDOK)
    ; Q2 P. O1 l3 B
  578. //        {
    5 O8 P9 {& h& v2 ~
  579. //                // TODO: Place code here to handle when the dialog is( @* N" o$ g5 J6 V
  580. //                //  dismissed with OK
    ( S% p6 Y) ~# H+ x$ J
  581. //        }
    . j8 E7 R, \2 R6 c5 f
  582. //        else if (nResponse == IDCANCEL)
    : f7 ]. z; J$ D5 W( S9 b/ s  d
  583. //        {1 Y6 x" L' q2 c. X1 }, R" ?! D
  584. //                // TODO: Place code here to handle when the dialog is: ~/ V& _0 V  L5 v3 F, |
  585. //                //  dismissed with Cancel
    . R" C* _9 u: _% N! F9 f5 L
  586. //        }4 e& e6 e4 L$ h

  587. " B( s4 m3 u( B% I' R* c* b
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    - l: X" B! Y3 X5 y' y
  589.         //  application, rather than start the application's message pump.
    ) s& v1 [* p9 h% K$ x
  590.         return TRUE;7 k1 Q4 @' g# y. s
  591. }
    ) p% x) R* y2 j3 j( j. [( p
  592. 1 v, F. }7 W) a; V' N
  593. char *CRevAppApp::strtok3(char *pSource,char *token)# k7 D* D0 h7 J" @: z* X7 g
  594. {9 P  a# z3 S. K: J3 C' z1 ~! M
  595.   int i;
    ( B& X* m" e6 j$ S: a9 i4 |- R
  596.   char *szRet;
    7 a& H- m) H: \& I* t) V

  597. 7 y: D2 _8 ^; U- h* o& B
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 j2 p2 L& b; o* j0 T& w
  599.   if(sztoken)
    / @: h1 V$ c; ~$ M6 l. d
  600.   {' k* f. H7 Y! v( a0 l7 O; ?
  601.     szRet=&sztoken[itoken];
    1 T) j" m/ X: Z" j$ n, u8 l. J
  602.     while(sztoken[itoken])" h) R: [1 u( ^+ k$ c
  603.     {* o5 n. a7 ]* T. ~: i
  604.       for(i=0;i<(int)strlen(token);i++)  E; C  G" [9 d/ R5 K, Y8 p* T
  605.       {
    8 Y% m" ^$ r) a. N
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])# h: [! w8 ^: D9 L2 V- P
  607.         {) x- ~" t/ G$ \& B/ r& [
  608.           sztoken[itoken++]=0;4 T/ I  q; O- h7 f
  609.           sztoken[itoken++]=0;9 K; U! M& r% v! ]  R4 N/ e
  610.           return szRet;( n% C. ?" X, g3 N2 k5 S4 ?5 k
  611.         }* v: g8 d$ w( u# ~
  612.       }
    ' H) J" ^+ A4 ], x! {1 I
  613.       itoken++;
    9 @$ e) E; A. @1 M
  614.     }( Q  y& T/ @& N5 q
  615.   }
    4 n  O6 T0 R5 Z' O! w
  616.   return NULL;
    4 D' x( e7 W: Z6 [$ o+ g
  617. }' M6 s' Q* ]) \

  618. & _" S+ r( C! g% Z
  619. void ProcessProc(long Total,long Current)
    2 E3 E+ v3 d: u% g7 N5 _
  620. {
    ; B6 ?/ m6 s, B/ R6 Z
  621.         MSG msg;6 L- y6 Q. ]  v- t
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    5 G* E5 {9 K: \2 x$ x2 |
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  v, Q. j. U" R9 |4 f3 O( x' y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))7 n' V* ^9 r; Z1 J" ~3 K
  625.         {
    / X; I( {9 g! K& g
  626.                 if(!GetMessage(&msg,NULL,0,0))
    2 `* K& h4 f0 j( \
  627.                 {
    , P3 W5 ]: U5 {
  628.                         return;5 C2 [: E% z3 b5 i4 M! m: g
  629.                 }; A& C: v  d# @5 M
  630.                 TranslateMessage(&msg);1 {0 v, x! f+ m
  631.                 DispatchMessage(&msg);; W. E- n; t: H; ?  e
  632.         }       
    1 R" ], p0 y- y! |" V" _
  633. }
    ) o& o8 i8 w/ F% x
  634. 7 k1 @2 y' X6 L9 p" L% C* c7 H
  635. BOOL bFirstChar=TRUE;. Q9 r7 z3 w: d3 Z  @, W+ k

  636. 5 D) o& ]0 {1 [- F: o3 A' F
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ [9 x  L( E5 e: k& C6 V! I" Y
  638. {4 P; D: Z7 y! e# M% E' q
  639.         // TODO: Add your specialized code here and/or call the base class* r; ^( C* T, j% O4 ]. ~! s1 i5 l
  640.   switch(dwProgramState)
    ( m; u! u9 ~$ T' c/ Y/ G: H3 X
  641.   {
    / p- l6 E" z! \1 ?; u7 J" B
  642.   case AP_NOTHING:0 ^% |0 p1 K! N$ ~3 T$ O, o
  643.     switch(dwStartUpSteps)
    . A* @" v( E4 \7 i& N4 k; y
  644.     {9 O( r0 S: J  ^& g* t' B
  645.     case 1:
    2 d; L' n4 N! d& p
  646.       {
    6 ]% g7 c4 _; B2 z# u9 A' C! A% S
  647.         int i;) p1 w& V" j' `" r; k
  648.         CDC *pCDC=dlg->GetDC();
    : W% a8 o' s5 k0 ^0 E+ k' w. `
  649.         HDC hdcwnd=pCDC->m_hDC;$ t0 |% U2 \! B! |3 K! F' y' w
  650. //        Graphics graphics(hdcwnd);
    $ C) m/ j$ A- O) T* M' t* x2 S
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");, u# a1 U) a8 P1 U* {7 O
  652. //        INT iWidth=bitmap.GetWidth();; _/ e! L/ [1 }: R1 b
  653. //        INT iHeight=bitmap.GetHeight();# b" r1 A8 @& y
  654. //        Color color,colorTemp;
    " k7 J( K/ e/ K( v' g( m2 t
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    5 o# L4 S% C. s, ~; H9 H$ v0 x! d2 l
  656. //        {
    ; t2 v' n* A& L, P9 v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( D5 ], Z" v9 q% w  w& G+ c0 i4 r
  658. //          {
    7 }/ c/ \: ~0 U; H  S- J. p
  659. //            bitmap.GetPixel(iColumn,iRow,&color);$ s  b8 j5 y6 }! V2 o" D1 o5 u
  660. //            colorTemp.SetValue(color.MakeARGB(0 U9 q7 d- W9 D2 O
  661. //              (BYTE)(255*iColumn/iWidth),3 Y& }9 o; e9 j- m: K
  662. //              color.GetRed(),+ Y, H  r7 N% F6 d" T3 ?# Q
  663. //              color.GetGreen(),0 {: c0 q8 S$ V- u: y5 m2 G
  664. //              color.GetBlue()));
    / m4 G) Z$ |; S1 q' @! ~4 n
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    3 }2 z) l3 g' Z& p$ O
  666. //          }2 D4 l8 q3 V; |. [
  667. //        }) J+ W$ m) w8 t' }2 l( p# C2 L
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    - a2 _/ y3 C, m* A5 f
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 s5 S, \. q. V6 m! a
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");& K3 y! U( E6 d+ i( F7 v( }
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ Y; R7 g1 a, x$ R6 F" ?/ S) V  A/ X
  672.         for(i=0;i<240;i+=8)) ]# A( D$ k2 W8 M/ v1 z
  673.         {: @! l' N+ R9 L+ J! u
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! p4 ~3 G' o4 s3 @  P
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 N- m7 T9 X6 l3 M3 X3 f5 [' _
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# u8 G: h- C% \; x5 d7 j0 g7 ~& L
  677.           Sleep(33);
      w& c; }3 v& A: u3 s
  678.         }! Y2 \0 d  B. f4 Q% b
  679.         Sleep(1000);; l6 F, n4 h/ u  w7 v
  680.         for(i=240;i>0;i-=8)2 R- J% M9 d- r6 l
  681.         {
    7 D5 c% M+ ^9 d9 z8 p* ^! e
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! b/ n" q( z) Z1 D! v% u
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! Y4 Q: R! K  W6 `& T
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( p4 v' S/ E5 A2 S6 k7 \) I
  685.           Sleep(33);
    " ]( f7 b9 _# G3 n6 o" M
  686.         }8 O% G) P1 o1 [2 L
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);# ~. @2 R  C5 K9 q+ _/ b( _
  688.         dlg->ReleaseDC(pCDC);
    : X8 b- ]' c0 Q/ |
  689.         DeleteDC(hdctar);% v5 @0 G# j, b8 P0 Y1 O4 I1 @
  690.         DeleteDC(hdcsrc);
    ) E4 Y+ V0 G1 [$ R' H" k
  691.         DeleteDC(hdcorg);
    & H7 ~+ J1 }  h, b
  692.       }; g4 F- s  P, x. X
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    9 I( u% F! K) K) s$ T1 s
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
      ]8 Z+ z! |, s% K4 `3 U
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");7 n$ K' V5 R9 R# q4 {: u- ]$ t
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    $ \- v* ~/ O5 C' n
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 z$ z1 ?) Y3 a) p* _
  698.       if(!Dn.Connected())
    8 m; v4 P6 L" Z3 }: E  p& a, K6 |5 ~1 Z
  699.       {( u" @4 u  f. `! e: Z5 I  D1 y
  700.         dwTotalFiles=1;
    " I" @1 f4 ^& J- ^. E& j  D2 [$ ]
  701.         dwDownLoaded=0;4 ^) l4 z: E7 o5 \( ?
  702.         bSilentStep=TRUE;5 _, }5 Y7 l5 p" c2 q
  703.         bCompressed=FALSE;' A6 }& H, ~# L, _2 m+ B
  704.         strExtLocal.Empty();
    7 s# \; J) H, {9 G3 V
  705.         strFullName="readme.txt";
    1 ^% x0 G4 R; G* G% V
  706.         dwProgramState=AP_CONNECT;
    & ?; c0 W8 j4 h# A
  707.       }
    $ S6 r: l: y8 f& {2 l" f
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();* n& \3 R' S% I
  709.       dwStartUpSteps=2;7 e8 i1 _  w. C# F1 R9 h
  710.       break;
    * ]9 s2 J% d: Q% Z  \
  711.     case 2:$ y! S4 P6 V  q4 q1 i. x# l/ i
  712.       {
    ' j7 S1 m2 V$ r- i3 m( \; G5 g; Q- S
  713.         int iEOF;
    , y! E' S8 S8 w; x) Y: Y
  714.         FILE *fp;+ B  t, X' D5 O3 A0 d( t
  715.         char szString[512];
    8 h2 c7 ?& n, x: |* ?$ \7 k7 P3 O
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");; v) Q' w( Y1 ^( v+ V8 l4 k! C
  717.         if(fp)
    " D# s0 E9 m/ J& @$ ~1 U
  718.         {
    8 F+ A$ D4 {  M/ v; E& C+ ~- t
  719.           do
    / l8 u+ \/ R, O2 k
  720.           {- b9 v. {" h' g: n
  721.             iEOF=fscanf(fp,"%s",szString);
    8 \9 N- b) z1 x" K) s% M
  722.             if(strlen(szString))
    8 P; z# f4 n3 ?# {
  723.             {* u" I' ?' K! M) Z; c# z
  724.               if(bFirstChar)) R0 D% ]& z9 E0 k* L
  725.               {
    ! @+ M9 A1 m' `* o0 B$ J3 f
  726.                 bFirstChar=FALSE;
    $ Q1 H  `" v/ a8 `( O
  727.                 bConnectIsBig5=FALSE;
    / H8 e. v$ D* J4 r, j0 H
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;1 v% K  S& D; i; z& W" q
  729.               }) \0 }: g/ e' B
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    : N( \  i; R, m' d  c
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));0 t1 I  s, t0 Z
  732.               dlg->m_ListText.AddString(szString);
    4 B+ }7 h1 Z- g( ?
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: q! N- D. Y% D, f# y# F
  734.               *szString=0;
    # Y% {7 y. V  @+ w  V, G' a
  735.             }  Z' L7 y2 {0 k+ n, Y
  736.           } while(iEOF!=EOF);
    . X$ P( a& U$ d, O7 K
  737.           fclose(fp);  ?% q0 R% u4 ^
  738.           unlink(".\\DownLoad\\readme.txt");! D/ b; r2 x5 Y4 h2 n
  739.           dwStartUpSteps=3;, B' t4 p: R: _' v5 a: N" h% ]8 q
  740.         }9 B( O$ D5 u7 O
  741.       }3 n% C7 g! [3 C  W; c
  742.       break;
    2 G4 @4 u: [% Z! p! h- o
  743.     case 3:% ]$ V; r. t2 v9 T" z. \+ {9 h* v
  744.       if(!Dn.Connected())
      u8 i! N$ b$ n9 Z2 a
  745.       {
    . l" ~$ r0 V2 `/ Y5 D* G  j" X6 h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    7 D2 p" [. T' A$ Z9 Y" |
  747.         dwTotalFiles=1;
    : ^2 I: @6 X; i; P% Z
  748.         dwDownLoaded=0;) H/ A4 |- S; v$ N
  749.         bSilentStep=TRUE;
    + F  Z" h4 [+ H# l& p$ y; f
  750.         bCompressed=FALSE;7 X$ m2 y! d9 F5 T4 K9 o
  751.         strExtLocal.Empty();! U# n4 J" V# i+ o$ y& h, n* _# u
  752.         strFullName="checkversion.txt";
    / f9 D2 B- w0 @: F) L; D& w
  753.         dwProgramState=AP_CONNECT;
    4 v2 C0 X. ?) U, b* v3 h$ D* A1 H
  754.       }% S1 a. I6 _5 ~- U. M  l% G! ?4 u2 R
  755.       dwStartUpSteps=4;
    6 |5 V; v2 e; [8 a6 C: z
  756.       break;
    4 M, ~# z7 ?/ q
  757.     case 4:/ n0 Q. U" x2 T: t, I- b
  758.       {
    . I3 [0 E# L! ]* m$ R) P
  759.         FILE *fp;; K4 x4 R9 |/ c/ m
  760.         char szString1[128];
    6 p% E) R; y3 I$ Y. {
  761.         char szString2[128];8 D# {& h% Y0 b; C; V
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , g3 ~' P* f; X# Q9 K
  763.         if(fp)
    8 w& F6 g8 {  y! O; `
  764.         {
    3 Q# ?: F% ^( `1 n; y( ~$ o
  765.           fscanf(fp,"%s",szString1);2 N) {6 \& ^/ s$ }3 R# n3 X
  766.           fclose(fp);1 I" Z" B- W. F
  767.           fCheckVersion=atof(szString1);
    , v& }5 \4 h# ]5 ], I7 Y# T2 D
  768.           fp=fopen(".\\checkversion.dat","r");
      O# |8 i' f2 R* M
  769.           if(fp)& |. q0 q: \2 Q
  770.           {
    - D& E0 z$ v  l/ b: z
  771.             fscanf(fp,"%s",szString2);
    . t- R$ j4 z5 c6 L& R5 O; C# e  v+ `
  772.             fclose(fp);
    - Z% A2 s1 p4 m: }- z$ w, d) P
  773.             if(atof(szString1)!=atof(szString2))
    2 Z8 P1 e) r1 R8 X5 K$ e( V8 D
  774.             {
    $ x6 c; l/ j7 Z& q. e
  775.               if(!Dn.Connected())- B. z+ v. E; b5 M1 w+ F$ a' o% q
  776.               {/ i) O2 Y, y' v* Y0 j* I1 H8 t
  777.                 bFirstUpdate=TRUE;
    2 p" [1 J' K5 Q- {# l
  778.                 dwTotalFiles=1;
    ; }9 t8 b* V& K& f
  779.                 dwDownLoaded=0;
    1 Z6 G' a$ n4 a# M$ @: W
  780.                 bSilentStep=FALSE;: V/ z) l9 U* E
  781.                 bCompressed=TRUE;
    , V  z$ Q  I. I. F2 [
  782.                 strExtLocal=".\\DownLoad\";  Y) P6 [: L! z# c) W8 t0 b
  783.                 strFullName="update.txt";% {1 v2 G7 z% b# p
  784.                 dwProgramState=AP_CONNECT;0 `5 D* _6 I/ S7 w* x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 C, y$ C5 F, Y; }8 }; ~  y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 H; D5 w* i- j4 w
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");" U3 A8 a7 Z1 r* T5 I9 z5 C4 G

  788. * |6 j. p5 k3 _! L) _: i- c# E4 e
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * B! z) t! E0 P6 ?$ F' F: O
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ! B- K: X/ Q3 _  S( x6 @% _
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    , G( Y$ t/ [5 K* t: j
  792.                 {
    $ O# X# M8 ?/ p' ^, N/ D. _1 s. {8 N
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    & o& Y# q. O; U- i+ c" Q7 ]- [
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ; L2 \" ^$ M/ d1 O
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");$ f# U3 p$ f4 q( V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      s- L" }8 `6 `8 e
  797. 3 e, L- Z! ^2 m7 r* F5 k
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- o% k2 M6 @1 |! f& R
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 R/ m5 c& T" H  k  y5 O' i2 w
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");% M5 f: f' s, J6 l) A
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & b" \" s' H$ U  w, P- A
  802.                 }" r! G& E( z0 }1 j5 j
  803.                 dwStartUpSteps=5;
    9 K- ]. ^' _- a- Q/ ]  T
  804.               }+ N4 x6 Q: B. ]9 K# X4 ?1 C
  805.             }, {0 K  L9 z) Z
  806.             else& r, t7 _( r" I. A
  807.             {: V: m8 U; w( w/ n* t, |5 M/ Y
  808.               unlink(".\\DownLoad\\checkversion.txt");
    9 l$ p' \# ]* u+ ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ [) {0 E1 z5 ~" |2 Q9 h
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");3 p$ S. W# J0 Q0 I2 t
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");+ ]! X8 E- K7 C/ c& ]$ c
  812. ! a' t3 `0 W" U, k& u6 d, z" _
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& {- j) J0 x1 u4 g0 d# F' T
  814.               dwStartUpSteps=99;7 ~6 B3 M3 x! n( k! j5 P3 C0 K
  815.               bFinishUpdated=TRUE;
    + u  A4 y( r: x0 g: `8 F& D7 X
  816.               bCanUpdate=TRUE;( F  C% S1 P: N+ y% u
  817.             }
    + ^8 i- H$ [9 _, U/ K# p$ U/ E
  818.           }9 Y* O/ E' B+ Y! ?
  819.           else
    & I' _) k7 k2 @6 D$ y3 |
  820.           {
    # a' f8 t) u, H4 u$ h
  821.             if(!Dn.Connected())
    0 `9 k& P( Z3 E. c" f
  822.             {
    2 z! J$ J1 L: o0 E+ r' a
  823.               bFirstUpdate=TRUE;" U2 S! ~" W; D& V+ W
  824.               dwTotalFiles=1;9 y: ?) f$ Y9 F# r, D: t
  825.               dwDownLoaded=0;  B/ c" H- i+ Y9 e  @3 G
  826.               bSilentStep=FALSE;+ Z3 N3 N7 g# n7 S; P; ], b
  827.               bCompressed=TRUE;
    7 |$ }; r* b1 ^1 I+ O& _: i) O
  828.               strExtLocal=".\\DownLoad\";
    5 y  |; i8 d' B  D& k  m  \: e
  829.               strFullName="update.txt";3 b9 h+ P2 u2 o2 ?
  830.               dwProgramState=AP_CONNECT;5 m' m, `9 d' g! X) d, {* }
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. C/ Y5 d" Y4 k& U4 m+ d7 B
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");! G$ Z$ g. r- O; Z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");7 [* n8 k+ V# ~" R) X
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- i6 e* ?1 T2 B$ ~# I: j
  835.               unlink(".\\DownLoad\\checkversion.txt");
    & P5 D9 R- ?! q4 }/ }1 i3 R
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)" j; @, J- I+ s% V/ C' E
  837.               {% x% ^4 U( z+ e2 G3 w+ M+ m/ y: s
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ! r" G$ W" |5 f8 L4 N2 P. e
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    5 n3 C2 d9 O5 B6 C& X
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");( L/ K! s+ H: Z" f% ]8 P
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ T. p# @$ U2 o; t" `2 `
  842.                 & u/ N3 t/ C& c( w1 C- W
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- d, M% r  z% b# b6 L
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    " ^/ Q& r7 C- Z: D- z
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 z' ]& X3 n+ P4 ?
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# y% Q) O* r9 I+ _* _/ F0 x2 O: @2 E
  847.               }
    " p. |* ]& g) x7 ?7 P
  848.               dwStartUpSteps=5;
    + y0 I' _, p8 U9 [" k$ r0 R
  849.             }
    " b5 }& B- i' A& h+ d1 {: a/ N! q
  850.           }
    ) t. o9 P4 C/ v: l8 Q4 c
  851.         }
    0 t3 t' o: p6 }! J' ?3 I
  852.         else" w2 c) l( g" E
  853.         {/ c! r: O5 K0 n! Y' c
  854.           dwStartUpSteps=3;
      x- L. i, c/ N8 u
  855.         }
    4 t& d, v8 g  i/ q! v- B0 z0 l
  856.       }
    ; ?2 h- K+ ~0 B7 A
  857.       break;
    ! r0 z" s3 i" b! d" U1 N, u
  858.     case 5:
    " ^5 G7 n. N" f$ t. U
  859.       {
    $ Y. p& l3 y1 h+ N
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    5 D3 g8 ~& `' b
  861.         {/ _  D$ C8 e. K8 m  q& x
  862.           int opt_overwrite=1;
    * `& N8 c5 j5 P; ?. [% e6 k
  863.           int opt_do_extract_withoutpath=0;
    ) y; g( W, S" Q& M9 f
  864.           unzFile uf=NULL;# l7 c& i' C! f, O3 U2 ^$ V8 E
  865. % ~) d5 c; y* J7 P2 O
  866.           uf=unzOpen("Wsa.zip");
      k) Y0 j# Y1 {
  867.           if(uf); |* d* d, S3 t8 T0 M  W8 l
  868.           {- C2 p+ y' \+ |7 N
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    8 Q( A! I4 v3 ~6 e; `4 S0 F3 c
  870.             unzClose(uf);( ~) J6 {* u$ z1 A$ M
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");6 p- X' G; o' h
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");* F4 m! N. K  V- u' ?. ?. Q4 Z
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");7 \6 n' H/ B- q; {7 n( @
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # Y. Y( y  D% o5 U4 c
  875.           }
    * i) \! |# S% R3 j' C( c9 ^
  876.           DeleteFile("Wsa.zip" );
    - b7 c+ |  Y, K, F/ r3 r
  877.         }
    8 }- g1 t' {$ ]7 m$ [/ \- d) b
  878. 3 y& I; C7 G6 N8 P; b2 [
  879.         if(CheckLocalVersion())4 W4 E1 j2 R1 R" Z7 z
  880.         {4 G5 V4 d- j6 O5 x9 W$ U3 D
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    1 N0 |% p: K" ~7 t: S
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");3 P6 [  J/ }+ {+ D2 \" C
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    " ^9 u) A; B9 C. q, l& R
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 n# O, ]3 E/ q! q# k7 p& O; L
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);7 A' X1 s2 ]8 Q9 R5 c4 \# [
  886.           dwStartUpSteps=99;
    5 i) b/ b0 \! X% g* f: L7 E
  887.         }* x$ G0 P: n$ n- g( J! r4 |
  888.         else. B: f1 ]. U, b' [* ^
  889.         {6 e5 o, `& ?$ e0 \% w( y5 X
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    6 x# z8 I5 S: L: p" i9 Y+ t
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + }/ H+ t  u  K) z0 s) p
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    " Z: e' N+ {! `0 s1 C

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

! Y) z( x' D$ [3 a3 S; Q! u
3 `/ s- X. K, t. E4 W

評分

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