CSUpdate.exe源代码

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

4 M4 [: f8 }. E
  1. / RevApp.cpp : Defines the class behaviors for the application.% T7 K( e: Y# F
  2. //
    & w. c. }& r' [( c3 c! W4 _
  3. " B0 e8 V5 B6 c8 b  I7 A
  4. #include "stdafx.h"
    . [5 [2 ?7 S8 ~/ G7 d- H
  5. % U7 D  D# Q2 d3 X: D
  6. //#define UNICODE
    ) W+ k0 t) o( H: \9 D9 X
  7. //#include <gdiplus.h>, Z: R) j9 A; z  N
  8. //using namespace Gdiplus;
    # x! M& N/ q' G5 @

  9. ( b) S( C* W) J; h+ q2 J5 c! k  G
  10. #include "RevApp.h"
    ; `6 I) O4 I0 `
  11. #include "RevAppDlg.h": T$ ^. G4 s9 I% z: _7 X

  12. / A+ P4 ~5 y) V* T& d  |7 o: M
  13. #pragma warning(disable:4786)- k9 v6 S8 N' E; M9 R" \& v4 C5 `
  14. #include <map>. A5 [1 ]: E0 U+ W- l' z
  15. #include <list>7 ]: J5 F: d/ z9 G9 V3 T4 a) }8 A1 @
  16. #include <direct.h>
    + h: S) Y6 C+ R7 w0 G; W: ^5 s4 e4 T
  17. # s# P; G  Y% t0 @4 `, v# k
  18. #ifdef _DEBUG
    ( D; u% Q8 R  `
  19. #define new DEBUG_NEW
    ) m# D1 u3 u8 H) J' Y# @
  20. #undef THIS_FILE
    3 k# X4 F' v" |
  21. static char THIS_FILE[] = __FILE__;
    ' o% V8 n6 ?- E4 v
  22. #endif
    & b7 D9 J; M2 ?2 ]* D1 a- i
  23. #include "SkinResDef.h"
    - y& N9 V' L+ S7 F( f" b
  24. #include "ChangeBG.h"* H3 S8 c6 ~: w$ b; V! d1 w
  25. #include "AFXINET.H"; `2 D' s9 J/ z- ~* i
  26. : [4 L" L* |: h, ?: s+ D  N
  27. #define TRADITIONAL_CHINESE 0
    9 \& ?6 u0 X; Y) k, F
  28. #define SIMPLIFY_CHINESE 1
    % b3 V+ b0 D  G+ ~; T- E# h  F
  29. #define ENGLISH 24 s0 B" _: \4 B; i
  30. int m_iLanguage = ENGLISH;
    ! Z) z+ N* B9 l% M. p
  31. /////////////////////////////////////////////////////////////////////////////4 k) y  y( ]2 j1 b( c/ _) s0 z: z5 r( i
  32. // CRevAppApp
    5 C$ u- C! {% H5 c3 N
  33. " u9 h- f4 k+ t  H% p: |* p; U
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    % M' E2 @5 m8 w' w4 @% v! ?
  35.         //{{AFX_MSG_MAP(CRevAppApp)/ B% X  K! L7 t* r$ `* h; E; O5 ]
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.4 q: n3 j" v& T% d. Y, ~3 [
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ' D  q" S6 R- _$ F( `: S
  38.         //}}AFX_MSG
    % E* l1 K# }* J7 Z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)) W: E! w% V: c, r$ |
  40. END_MESSAGE_MAP()
    % E. Y8 x5 S1 T' ~

  41. ) o6 S% v, l$ c/ G
  42. /////////////////////////////////////////////////////////////////////////////
    / v( F- F$ n* \2 g  ~0 G2 j
  43. // CRevAppApp construction& `5 L/ ?' c0 T3 [( t

  44. 2 U' n& V3 x, |  F+ a- e
  45. CRevAppApp::CRevAppApp()4 f8 |7 G" O4 z' y) c( {
  46. {. U+ I% a% T! {
  47.         // TODO: add construction code here,
    : R: Y( J/ @0 P! x! ]( F6 N# ^
  48.         // Place all significant initialization in InitInstance
    2 \. C1 }# Y, r% @9 s6 U0 ]
  49.   bDisplayIsBig5=FALSE;
    " E6 {3 d, x5 V. ]
  50.   bRestartUpdater=FALSE;$ i& t$ a- r# n
  51.   bFinishUpdated=FALSE;' q6 b/ f8 P" x" `4 m5 `
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ K% }9 E( ]8 j
  53.   InitChangeDataBig52GBKS();+ G  W+ s9 {( h* c( R( P
  54.   InitChangeDataGBKS2Big5();
    1 q2 P, ]& R% W' ^& }
  55.         //+ g0 A" q; I/ P" Z
  56.         bClickRunExe = FALSE;6 Z/ b& p% r& W; j) l2 d
  57.         //; _6 J/ }/ q6 Y& `. ~+ `2 M
  58. }; L' c/ x' \  w  E

  59. 8 ?' b3 @3 j* t+ W: g9 P
  60. CRevAppApp::~CRevAppApp()
    ) k% |, k, ^- V/ b6 ?: `0 A
  61. {( @& Q0 ?" p, ?- F
  62.         // TODO: add construction code here,8 t/ u8 {( Q! Y- M
  63.         // Place all significant initialization in InitInstance
    " m  m4 Q6 G7 ~+ @0 J4 J4 m
  64.   EndChangeData();$ S- A# Y& M0 F
  65. }
    * q5 Q6 u4 @1 ]# [4 [8 g- l4 X

  66. 3 o! M) M, b6 J. W- @
  67. /////////////////////////////////////////////////////////////////////////////
    7 ?/ N, g" ~5 r* L" o
  68. // The one and only CRevAppApp object
    9 i0 w- F) F9 c, Y: Q

  69. 1 R5 S  x: K* f: E% V( Z
  70. CRevAppApp theApp;
    : I; }+ i$ F+ N1 g9 h* x
  71. . B2 V* K& m5 {6 {& Z2 x4 Y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)/ u- `% [' N9 P2 y9 h. [+ K; R
  73. {- N4 P/ n( N. P& q' O% c0 H
  74.   int iEOF=0;" s6 ~$ P+ l2 b: C
  75.   char szTempName[MAX_PATH];
    * V  O8 r( H: r$ l! C3 j4 H& s4 C
  76.   *szFileName=0;
    ) b% L/ T6 i8 r$ s
  77.   iEOF=fscanf(fp,"%s",szTempName);% H& n. l  G7 T' j# g
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ! `. ]) X: ?- z8 D+ N# C/ y
  79.   {
    5 L+ Y2 h2 m, w1 v
  80.     strcpy(szFileName,&szTempName[1]);
    8 G* w: @1 m1 g+ ~1 @
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)$ f9 _/ a0 ^, m4 F1 L9 c: X! R& l- F1 \
  82.     {
    ' r, q; F; u8 p5 U( m1 _
  83.       iEOF=fscanf(fp,"%s",szTempName);. [* \6 e$ i1 G
  84.       strcat(szFileName," ");
    0 b( t5 H# G3 S8 O8 j
  85.       strcat(szFileName,szTempName);! o( M2 ^. d* Z; e8 ]2 `7 t
  86.     }
    * A! A1 n# l1 o+ k; v
  87.     if(strlen(szFileName)>=1)
    # v/ S7 S# `/ N& I* W- O
  88.     {& S/ r8 U5 d3 U- _$ }/ x6 c0 H
  89.       szFileName[strlen(szFileName)-1]=0;* L7 p% A- z7 Y4 W7 j
  90.     }0 T; w- G5 q" U" t
  91.   }
    ; V# f8 r$ o4 S; e; C5 g* u: F  q) F
  92.   return szFileName;' K; A; x. ~/ b; f4 s
  93. }
    6 M! ~( h/ o# ]& H
  94. # G2 c4 z0 e4 m& P& m
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    & Y$ K. ^' U. q: E6 g$ n
  96. {
    & M; k$ H5 d/ z- w
  97.   FILE *fp;
    0 g4 {# ^( x1 U( }
  98.   char *key=NULL;
    . [8 \5 e0 U; b* q( x6 Y
  99.   char version[MAX_PATH];$ L; ?- F8 {9 f4 W# W
  100.   LPUPDATEFILE file,olds;
    # n) M" t: d8 W8 S- H/ k! P6 @
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" o3 z; x. G  n- u5 |

  102. 1 d+ _. w/ J. u* @  C# t
  103.   UpdateList.clear();
    ; [( a4 b4 K# \) }  _- P
  104.   UpdateFile.clear();- q* a9 R1 Q3 A, D) j% L4 a) z  {" m
  105.   if(GetFileAttributes(filename)==-1) return false;
    - `" ?) c: X7 T" B
  106.   if(!(fp=fopen(filename,"r"))) return false;
    1 B) H6 F! `4 c8 J. q5 @1 o7 H
  107.   fscanf(fp,"%s",version);
    , N  b1 R4 Q3 f! t; G. R$ a# o
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }, N  A+ [' b3 ]9 [) J1 ^
  109.   while(fscanf(fp,"%s",version)!=EOF)
    2 e  J8 a: V8 ^1 w& a4 @
  110.   {; G2 n& z0 |: Y2 k' \8 y$ E
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( q; D+ W" G3 H
  112.     fscanf(fp,"%s",file->path);
    - v6 Y! v4 Z% C/ w. N6 {& T. L' L
  113.     ReadFileNames(fp,file->file);$ i+ c7 u) [4 i: r; K  S& p0 T
  114.     strcpy(file->full,".");
    - j6 M8 i+ C! m7 {4 M6 j
  115.     strcat(file->full,file->path);
    5 l) K& F" C+ i8 F" a
  116.     strcat(file->full,file->file);+ O1 P2 u- o- }# `0 I& d- A  {% I
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())8 Y* Y, @0 ^2 H$ P0 u
  118.     {0 [! W& g! x* T4 l
  119.       file->vers=(float)atof(version);
    1 h+ p  ]7 X: A8 h
  120.       UpdateList.push_back(file->full);# c3 G& }' g) N
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));4 S9 x: w) H6 D4 m( C6 a3 x
  122.     }. o- O% W: ]- k7 a
  123.     else" [# R/ F0 r; `) E0 ?! X0 w5 p
  124.     {' E) H8 Q: M! e0 p8 b2 c4 P4 Y1 O9 q
  125.       olds=(*p).second;1 a- b: m$ T$ l  O) A% l2 I4 C0 k# v! c
  126.       if(olds->vers<(float)atof(version))2 s+ L2 M) k2 P+ K9 p
  127.       {
    : a# P: o7 V- W: r5 N' n
  128.         olds->vers=(float)atof(version);; Q8 ]* ?7 E1 i0 f; t+ Z7 A6 K5 A7 D
  129.       }  e. X) X+ Y7 v9 x6 R2 z$ S
  130.       free(file);
    4 U( q$ [4 f  X6 w/ b2 S
  131.     }
    * ~# e# n+ C2 T  O
  132.   }
    7 N( S& h1 n, e' Y: a
  133.   fclose(fp);' U* v" F1 K) m5 Y" Z9 x
  134.   return true;
    ' c) T4 X: z1 q
  135. }
    - j4 W+ e1 b7 B1 t8 D" t

  136. ) G; U1 e; d+ M5 v
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)9 I* X5 E9 d8 ~7 g, t% \
  138. {1 X& C  M9 l! k# O- L# X) ?
  139.   TCHAR  szFull[MAX_PATH];5 ~1 o1 A% {4 z. H! R
  140.   TCHAR *token,*inter;" t2 [( `* ]# r- c8 v0 x& ~
  141.   *szPath=0;
    ) p4 \" Z2 ~6 B) b2 _- u
  142.   strcpy(szFull,szFullPath);: N8 P( t* B: R/ c
  143.   token=strtok(szFull,"\\/");
    / J" j# x5 Z/ @! ^6 F8 O
  144.   inter=token;
    3 Y3 t# }$ S" p5 j$ P) Q
  145.   while(token=strtok(NULL,"\\/"))  C7 J7 _. O, _4 r! D
  146.   {
    7 J4 g1 {. l7 r# ]! k
  147.     strcat(szPath,inter);3 J4 r# [- u+ Y
  148.     strcat(szPath,"\");
    9 ]' v/ K" e% A( M1 {; @
  149.     inter=token;
    ) h0 @8 \2 h7 R
  150.   }
    - o6 l! i) c4 X! m  p- f
  151.   return strlen(szPath);
    9 B7 k3 j1 Z2 X3 N* a0 S! P
  152. }
    8 o! M. t+ N' g5 s1 a& [
  153. ; s# b* V* {, }' l. ]) U+ M( u: `/ g7 S
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    3 F( Z, l+ i8 R% ^" {( e, u& g
  155. {
    # c- Z( R8 p' B9 N" S% w
  156.   DWORD attrib=GetFileAttributes(Target);4 m) b! y8 l  ~0 ^# E
  157.   if(attrib!=-1)
    . ?' C# d- F- F7 n0 J$ v$ M
  158.   {6 S4 d3 C9 e+ a) l- T# b" C' ?
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))- i- m- r( ^) S( D6 g9 M2 y: R
  160.     {
    + ^8 W& _, w7 T& @/ |' Q; g
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) a8 P4 `! n. h% V
  162.       SetFileAttributes(Target,attrib);9 F( m: V, f7 j
  163.     }
    ' ], I0 O; r  c+ H! P* b5 k
  164.   }
    8 c) H1 Z* Z' y/ t& _$ _6 \
  165.   CopyFile(Source,Target,Erase);/ M; E5 g1 s8 D3 @
  166. }8 @. B# u2 q. C* G9 E( d
  167. : S& T: b5 G7 q) w. \8 f0 G
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    $ x# r, _+ ]/ I+ j9 _! ~! {
  169. {2 Z2 \9 f& M, P9 o: @: E
  170.      FILE *fp;# y! G" A! t" r1 b; H
  171.      char  szBuffer[8192];9 T! C9 H4 k) [3 [2 S
  172.   va_list  argptr;
    % e+ _% V. V. @7 b3 m5 h9 X" m$ |4 B! g

  173. 3 a0 t' S3 h  _8 u
  174.         va_start(argptr,message);
    * X% y- k5 a' ]2 |/ K# `' x8 I
  175.         vsprintf(szBuffer,message,argptr);( b8 ?/ B5 V% r& f& q2 R
  176.         va_end(argptr);$ m5 ?. S( e! x7 ?& X  J& L! c
  177.   fp=fopen(FileName,"a");
    + I' m! c! [  N  W% q
  178.   if(fp)
    6 ^5 f4 @  `3 ^% M- q+ U$ p
  179.   {
      R* t. W1 G: ^* F& a* N
  180.     fprintf(fp,szBuffer);
    2 G$ O8 W7 x. B. E2 T
  181.     fclose(fp);# d, A3 W- W* ?  R1 g+ m
  182.           _flushall();: Y3 b4 A2 n9 l4 B+ I
  183.   }/ _  U% y) A1 I5 W+ [* I! P+ L
  184. }5 E$ h/ {+ ]2 P! @$ M  J2 e
  185. " Y4 U* D) S) [0 t; Z% a  _! A2 \
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    & Q$ L/ `, r% Q
  187. {  p3 P' Y* ^( J
  188.      FILE *fp;' A" ?+ x8 W2 U7 x% V
  189.     DWORD  attrib;4 `+ A2 S% W" }6 I0 Z) t& V
  190.   attrib=GetFileAttributes(FileName);2 Y7 X/ y7 o! }3 [$ c
  191.   if(attrib!=-1)
    / w8 w, y# r" @) M5 `0 U! i
  192.   {
    4 X3 y- n8 G0 D1 F1 v
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    6 i3 N# c9 @( a( A5 z
  194.     if(!SetFileAttributes(FileName,attrib))4 V% o5 T' ?+ K" u8 M2 q( s
  195.     {  V8 U: q7 a. l0 T, Y# p
  196.       return FALSE;
    7 Z8 s0 k; D1 B
  197.     }. V. ?7 t. K. N! p  X9 `
  198.   }! @  X: k! J! S! x) b- S
  199.   fp=fopen(FileName,"wb");
    ! |" e9 n! R- l, G0 D' j' [
  200.   if(fp)
    $ c# S9 n8 T* u+ Q
  201.   {
      H+ }1 O" a# x! w: l
  202.     fclose(fp);& X# [" k8 v' n1 r5 G. D; p( |6 N% Z
  203.   }  Y" B. j0 H1 J% V
  204.   return TRUE;
    2 g/ @' U8 i3 V! g0 u0 L
  205. }3 K6 ?2 i/ l# \: s! q5 p- t$ |& h: C

  206. . m4 m. o! g7 d- {( M  X
  207. BOOL CRevAppApp::UpdateLocalVersion(void)9 [, n+ `' R7 q; r* ^
  208. {2 ?- G; ^* ~# v6 u
  209.   char filename[MAX_PATH];
    6 A2 y6 |5 l. [( Z
  210.   LPUPDATEFILE file,olds;
    + s& w( o2 B& L% c$ ^% h5 n
  211.   std::map<int,CString>::iterator i;
    , T# S, p" }9 C6 g* ~2 H
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) d/ i. h  b1 i6 J$ k
  213.   std::list<CString>::iterator l;6 x$ C" V0 `7 s5 e0 t
  214. 7 M. S/ Y3 J: p! m: ~- \/ ]
  215.   if(bFirstUpdate)
    0 R/ U$ F2 C2 v
  216.   {) Z$ z3 M4 `! N: I& _
  217.     dwCurrFile=0;- W2 N, A; [" m& w: v+ z$ w4 q4 w; i
  218.     bFirstUpdate=FALSE;$ n" H6 s7 a/ @0 U' E: D2 ~. \
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& Z2 t5 x& ]. y0 Z
  220.     {
    8 Q/ U' J: m4 T5 G/ G1 `
  221.       dwTotalFiles=UpdateLocal.size();
    ; M* H3 D( Y8 J' G
  222.       dwDownLoaded=0;$ P5 z4 j. {  b5 ~2 b
  223.       bSilentStep=FALSE;
    5 A& @8 g8 @: s' p, Q% Z
  224.       bCompressed=TRUE;4 W: V2 ]* u; R. E7 F6 j8 V
  225.       strExtLocal.Empty();
    8 D+ f. e- n  N% M/ |9 |, r2 @
  226.       strFullName=(*i).second;7 U, B8 F0 F; v
  227.       dwProgramState=AP_CONNECT;
    & n9 \; p* h6 I) X- T; r
  228.       return TRUE;* l/ f+ w8 }  H) Q6 j# h- R5 |
  229.     }
    , E+ {1 S6 P7 t  F
  230.   }+ c, e& T$ A' f" v+ g
  231.   else if(bRestartUpdater==FALSE)
    ) I" N% f2 b+ \7 _) H
  232.   {
    ! t" e. T3 m8 b' K& U
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ; u8 {: h; m( U) ?* @
  234.     {9 c# Y* L( B/ i$ C: ~
  235.       file=(*p).second;
    ; v! l; H, q3 D/ k
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())  d1 c4 S' Y+ g
  237.       {2 ^+ t! J6 }' L5 `4 K4 M
  238.         olds=(*p).second;
    5 B; W) x3 `7 n; z$ Y
  239.         olds->vers=file->vers;
    * N' O+ z) Y  |9 N
  240.       }
      D8 m. F6 v: J
  241.       else
    9 M; F( s+ Y( p* G/ k1 e' C
  242.       {$ H6 J: @' o% N7 J6 z9 D6 o1 `0 |4 G
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& u7 m6 k  f3 P5 v* Q: q2 R
  244.         memcpy(olds,file,sizeof(UPDATEFILE));1 A' W' }$ b) J" p, n
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ) G" r$ c, c3 p+ N' P+ j
  246.       }
    ! f4 q3 Y7 J: e  g1 l
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");9 S3 v* B" a; D4 Y- {- u" d
  248.       sprintf(filename,"(%s)",file->file);
    ' ~% s+ T+ i& D
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& T1 i1 e" _3 C) ]- M
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }- o' T3 V) ], D" N8 S
  251.     }
    ; M$ G% m$ ~* j7 [% Z) f
  252.     dwCurrFile++;+ Y0 v0 n( @$ g; l$ d3 j0 F) l
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " P; [7 b( O% W1 U9 I+ B
  254.     {
    / g5 [$ v$ ?' B
  255.       bSilentStep=FALSE;
    * S" r! Z$ ^" K, n$ B& h  A8 \2 I: w2 `
  256.       bCompressed=TRUE;* J1 Y" J+ |7 H
  257.       strExtLocal.Empty();
    " Z$ q0 Y) U) L7 h' U  f; ?. t, }
  258.       strFullName=(*i).second;
    6 R* O: F% J& O; v
  259.       dwProgramState=AP_CONNECT;
    ) o" D6 h6 y! A1 C$ p3 ?
  260.       return TRUE;: x* t. Z- K8 ?- {& \4 x
  261.     }
    ) M9 i+ m2 \9 ~9 ^: T( G
  262.     if(!bRestartUpdater)
    ! P1 V  l, O9 b, O
  263.     {! ?( n- ~5 q) K- [' J# f
  264.       int iCurrSize,iFileSize;* m% z  \; L1 [. Z0 p1 E
  265.       iCurrSize=0;7 M/ e' k5 z" B; z4 v, S
  266.       iFileSize=UpdateList2.size();
    " T' W5 s* m: \) H# ~
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    / K/ J+ b$ D" H) Z. `
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");) N' y1 [2 G. ?; s
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    . E# v+ d4 M. q9 d! H4 n% a8 A
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 C0 P. f0 O- w2 e
  271.       Fclearf(".\\update.dat");; A6 P, w1 @  ~3 e! {  M+ a
  272.       Fprintf(".\\update.dat","Bloodyf\n");! R& S+ Z3 n, H' v/ E4 l
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++). O1 [' w. N% n& ]4 n
  274.       {, v/ ?& m: |9 ^+ [1 g; c( e" n& I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ) \( a: Y6 t. H4 \9 t
  276.         {& j4 N" b  v' x  C; r% O
  277.           file=(*p).second;% }2 a5 {% ?: P$ `  t
  278.           sprintf(filename,"(%s)",file->file);
    4 R4 A8 l5 O& j7 C
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: a4 y" m4 o" q0 q
  280.           iCurrSize++;5 e+ A0 J! x* Z1 a! K
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    5 S( w9 d) w( `' a
  282.         }2 L$ Q% _6 y- h2 @1 y  k  w# m6 P
  283.       }
    , C0 n/ T% s. M4 L. r' ~$ J' I8 n4 A
  284.       unlink(".\\update.txt");. ]% `0 t1 q. ?! Q* A/ K1 c
  285.       unlink(".\\update.tmp");- j+ r- P- \! R. b0 _! C/ j
  286.       Fclearf(".\\checkversion.dat");
    + i" T! g6 A+ e3 ?
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);4 ]2 U- y3 n, r* p8 k
  288.       if(UpdateLocal.size())
    . c! H2 T* J# U
  289.       {0 z- C. i. `$ q2 k* L
  290.         UpdateLocal.clear();
    ( g1 K0 h5 l, }  x+ c; |, U2 K
  291.       }/ e# W% e* p4 W3 Y4 A- w" i. Z
  292.       if(UpdateFile3.size())1 b& T' G0 Y6 V& F" w
  293.       {5 I1 N  |6 L  O
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 J) v/ y3 k3 {
  295.         {
    ! z8 u; j8 ]% X) c+ V3 d' I
  296.           file=(*p).second;
    6 ^" w* b/ f. n1 m, L% k( S6 u$ D
  297.           free(file);7 ~  N, j0 v7 J( L6 q* J% v# b
  298.         }
    3 p+ }  R; c# C$ f  o2 D  P
  299.         UpdateFile3.clear();
    4 W, V$ X7 O( j! s( d- |. Z
  300.         UpdateList3.clear();2 u- N6 K3 }& u" [! M
  301.       }
    + J5 T; n% z  r7 O
  302.       if(UpdateFile2.size())8 {* F" U) l, Q9 Z
  303.       {
    % V7 _. R2 u+ d6 T( t
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " I$ x" k& y, M2 u! W; t. K% G
  305.         {  }6 v) S: A! x( J7 t# A: o
  306.           file=(*p).second;: }8 }: U4 q; p$ _
  307.           free(file);
    4 [" c' o. @/ O
  308.         }+ ~* Z0 u! Z: `2 o6 {/ E
  309.         UpdateFile2.clear();
    3 [0 p2 H# i- v4 [
  310.         UpdateList2.clear();/ e* Y* x3 Y+ w
  311.       }
    - `% r2 j# v6 h* k5 l
  312.       if(UpdateFile1.size())# g2 f: n  X& B/ Q
  313.       {
    1 P) o5 H+ P( [' n2 \7 P, o! ~6 e. p
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! ?# g5 W$ g+ X/ u( V
  315.         {
    0 b; J7 K- s3 l9 y
  316.           file=(*p).second;
    : a" q/ @* T! K7 g- s  r! H
  317.           free(file);- r7 H% o5 W7 t& f8 `4 y+ q# x
  318.         }3 A: S$ ~0 B2 |4 t
  319.         UpdateFile1.clear();
    ; D8 G  z- V/ ?3 l: A% v6 c( m
  320.         UpdateList1.clear();( D( V( @: s) ^5 @% r
  321.       }- [5 {2 d4 Z4 ?/ s8 r
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! C  i+ p% X1 b$ Q- L# u
  323.     }1 M6 t& N# }- n7 S% I- V9 R
  324.   }7 z' }( {4 l! p& `2 U
  325.   return FALSE;9 B- P+ X. W; j8 P2 T$ J! G, v) ]
  326. }2 w5 X) ]2 L" @" \7 U
  327. ) t) S' `! P6 h& `' g, L0 r! I
  328. void CRevAppApp::ClearAll(void)% k3 h. [- s* R) o9 n5 i
  329. {
    , B! e0 p  M0 i3 t' o0 o1 {
  330.   LPUPDATEFILE file;! \3 S) s) @8 f% L% h
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 C  H% }+ [5 J8 G  |9 Z

  332. / t$ j) ], _5 Z
  333.   if(UpdateLocal.size())
    ' A$ e' K8 M* D' ~4 a+ _3 w7 W7 a
  334.   {% ~# k, t: t' K4 [3 k
  335.     UpdateLocal.clear();
    % K% X" V- [3 ]* F% \( @4 s
  336.   }
    5 L/ O4 X) ?: |; y: z& {* p6 R
  337.   if(UpdateFile3.size())
    , I$ S' E2 @% t7 }( Z/ r
  338.   {
    7 J+ S! O; {2 F: m
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). C1 ^, z% t  ~' I' o
  340.     {
    * i; }9 g# y. U3 n8 o1 V- e
  341.       file=(*p).second;
    5 x# C& L, s' h+ f7 n' R
  342.       free(file);  L8 r: m, \. @
  343.     }( V+ Q, k! N. q, d
  344.     UpdateFile3.clear();
    ; B4 \' G3 {$ t# b/ ~$ C  G
  345.     UpdateList3.clear();2 b. R! j: ?7 F3 m4 Y! N3 h( I& L
  346.   }
    * O1 G0 t) M: ?& b, i/ o
  347.   if(UpdateFile2.size())
    : q  N( d: l" C8 g- V% \( @1 L
  348.   {
    - |. A- c0 Y" S# l* p! l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! b: L' {  S" |( X, g
  350.     {$ N7 D3 X& x. F# Q; h; Q
  351.       file=(*p).second;
    3 e0 h) X5 e. U* k$ o0 s- U
  352.       free(file);
    2 p$ q2 U$ |, ]. u; g0 W
  353.     }
    7 U7 C4 l+ W, U  F/ U
  354.     UpdateFile2.clear();& y. J" V; A4 `: c( V
  355.     UpdateList2.clear();
    / A6 x% E  h1 p" B: J0 ^4 `
  356.   }8 b) {! Y1 k* T
  357.   if(UpdateFile1.size())
    & @( d/ s% U% a  L0 A, J1 P  C
  358.   {
    . u/ a. K; j, X+ d  F6 N4 a! E
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    * |7 y8 B5 y2 ^7 s7 @; u$ Q! c
  360.     {
    1 [2 W" t* k# U  L' e& x
  361.       file=(*p).second;: n( I" u9 g! b
  362.       free(file);
    0 {1 a7 @6 X2 f) d2 _
  363.     }
    / T8 w4 H6 k. e$ }# ~9 q
  364.     UpdateFile1.clear();
    " D' }; p' K- t/ J% T& i
  365.     UpdateList1.clear();
    . l, }3 P" ^1 c; X1 O
  366.   }
    + ^4 F/ x8 t+ k# m& x
  367. }  . {8 `; T7 @1 P
  368.   
    & K! B: \5 k6 B& u* V- [
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ; e7 k; c8 n5 o# D6 V. G; c% |/ e
  370. {3 ?* w$ |( R5 p0 L) E
  371.   int c;! V6 h* P1 D4 \
  372.   LPUPDATEFILE file1,file2;
    8 A- O' H* m/ b, _
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    / l, _" ^' ^" b7 Q0 h- w1 u' c
  374.   std::list<CString>::iterator l;
    , X- R* K& f0 x! k
  375. . x/ N8 G; j* h* X+ x. m% q7 g
  376.   UpdateLocal.clear();
    & v' T3 A+ k3 w* S
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    $ x: W* ]  {1 v- J
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    / C! D) K5 Z: X2 x
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + o  [9 n( k4 E) ?' `6 N9 w/ E$ c8 R
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 U4 J# i0 ?# S8 A
  381.   if(UpdateFile3.size())
      Q5 O3 {4 A) Z# K  Y
  382.   {$ W. ]# [) ?$ X& L. I0 x
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)' r$ O7 L4 D2 d0 Y
  384.     {
    1 k/ M& `4 [* ]* h( @0 V
  385.       file2=(LPUPDATEFILE)(*i).second;
    - }4 g. c4 O1 O+ u3 [
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 K: n" r8 r/ c; w/ j& n
  387.       {. `# U, F. B; g
  388.         file1=(LPUPDATEFILE)(*p).second;2 T3 e2 b) s) ?+ B
  389.         file1->vers=file2->vers;
    % W2 O/ P8 f) Y6 _9 o& a; Z& u; E3 \
  390.       }, \3 T4 A2 c, q6 i% K
  391.       else
    0 O) g& T* N7 o, _' X; @! q
  392.       {
    4 P5 j, Z$ n: Y+ F
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' l  w9 W. T, B7 l9 S7 t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ( D2 `  K/ X6 p% e3 p& R1 N
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));0 w: k* J+ m( Q6 O
  396.       }) J8 c. K3 P% n# i) }
  397.     }$ r9 e2 W) q9 w6 V; ^2 D
  398.   }% P! G! O$ D; O' l
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)2 J' _, T6 c+ b8 ^1 \. q6 v
  400.   {
    % j4 f# v+ U6 G! T' V2 {% X+ p; w+ o
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    5 z& g* @( G  q$ Q
  402.     {
    4 i, _: S8 O% ]6 P* Y- Z$ r  d
  403.       file2=(LPUPDATEFILE)(*i).second;
    + x; N: `+ V; Z; d3 j# o
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). Y$ B* z# D( R! @4 p: L+ O
  405.       {7 `5 {( C/ i9 q
  406.         file1=(LPUPDATEFILE)(*p).second;
    ) p2 F2 ?) ~' t' \: D# M( L9 B
  407.         if(file1->vers!=file2->vers)
    6 {" i# b* ]% C  B. J. [
  408.         {
    , p3 Y8 f+ S0 h. p" D0 @
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( r. F: |/ D& ~% i, U/ @) z8 n
  410.           c++;
    $ i6 ~9 o) u3 S6 p9 ~
  411.         }
    % c9 }2 i/ [' E$ j4 F2 r
  412.       }" i7 g, k* j- s# J) W
  413.       else
      V# Z) Z8 ]* u$ `) _& K4 g( m
  414.       {4 L5 [  g8 Q3 g& ^0 K3 }9 m
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " k$ E9 C! d# |0 U8 {/ s/ q
  416.         c++;/ e( U9 T& {& i2 ~& n0 w' X
  417.       }9 o6 q5 }& ^4 M  \: o2 q" g+ S
  418.     }
    % i5 Z( ~5 j! z) W: C4 @
  419.   }; c+ z# s- J( h  a3 @$ @" ~' `3 l
  420.   unlink(".\\DownLoad\\update.txt");
    # q. Y+ z- p( L; n
  421.   if(UpdateLocal.size()) return TRUE;
    8 B3 V! v6 C2 I  z
  422.   else                   return FALSE;
    0 r/ F/ N  u  \  j
  423. }
    ( k/ ~  W" e- M, |+ X$ R

  424. 9 s6 I( ], r7 B" N
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    / N$ i* \+ }( {  H: f; _
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    , b. t) {( I+ D

  427. 9 q  u7 S. E- w* \2 ^+ `

  428. 5 t# I+ ], ?* Y. F1 w% q
  429. " {! |3 r+ Y8 j2 c- h
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    # T1 G* Z- w7 R3 N: h6 @5 c5 _- V
  431. {
    5 D8 L" n+ @& j5 D: Q9 W+ B
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    / a8 e" j: s& Y2 p6 }
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 c" V$ n$ n& {' A; D' R
  434.   {1 Y, |5 ?9 h7 n2 B8 u
  435.     char szLanguage[50];
    6 l1 j2 {# e. x6 _! `$ i4 v! D7 }
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : D0 u, C3 i" c+ V& Q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ a2 I) r1 W, z, P# B7 P
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! _1 n% O% j2 i+ S0 s
  439.     else                                   m_iLanguage=ENGLISH;$ e1 P% E. J8 q! t% G. o8 U* ?, P( m
  440.     char szRegister[100];# f( N* n6 p# u2 R
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ; h( V7 L9 @: K1 C$ K
  442.     strRegsName=szRegister;0 N0 x2 B; L, F5 c* u
  443.     char szPatchURL[100];
    7 P0 z3 K' z3 Y! d8 Y2 h% s0 J; k
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ H6 b( m/ d( ^
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , B& h' ?! }' l2 x
  446.   }# E# j# b4 D( B5 r% X
  447.   else$ Z  j+ y+ [% _) e
  448.   {
    " M+ J0 S4 V5 n/ @& ]  \
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % A# M3 F. Y+ g% O5 H
  450.     strRegsName=DEFAULT_REG_URL;
    5 b2 t) l$ t7 U
  451.   }
    + i. B2 A3 b! X3 k1 I& c0 c; x* I
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 j4 c1 u! B' r( n
  453.   {* L# E' X/ @; R: v& o
  454.     char szIP[50];5 B  D- C) d, i( X" a
  455.     char szDIR[300];6 @) a) C: m1 L* t- M) I; A
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))2 Z5 r' T$ w6 y1 J5 l) L; N4 q$ r
  457.     {* ~9 X, o* O: F4 H* |/ Z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");: f3 k% j" d& c( L" m% u. z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");( [& }8 @; W$ J+ E
  460.       strHostName=szIP;$ |! z  ]& ~8 \
  461.       strHostPath.Format("/%s",szDIR);' C4 ^7 O! y/ J
  462.     }
    ; D* I0 J, W& g" n' x
  463.     else
    ' t' O1 B( U0 g* U. d/ m& H& @
  464.     {. N  i& [' q) p# n. T
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- k0 ?: H. X  H$ [+ x
  466.       {
    # [4 r/ M0 ~/ @' r- ^0 S
  467.         char szLanguage[50];
    5 j% z/ N: t- K# M7 u7 I; B
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " q2 X9 g+ X1 F+ q3 N
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + C* n9 G4 F. Y( p9 K
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  N& k, g7 F, ]$ \- b
  471.         else                                   m_iLanguage=ENGLISH;& m5 k4 Z4 G  o/ j5 `! y
  472.         char szRegister[100];
    5 b  l/ C; [3 l( F, T9 \
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    3 [8 T$ S" V$ ]! \& A, f
  474.         strRegsName=szRegister;9 s8 z- l: F6 b9 G& |
  475.         char szPatchURL[100];
    + Z# v* L+ R3 t6 o1 ]! c7 ^
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& @* w3 W! ]* z/ R6 Z* s( v
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( R: g0 D1 y, w/ ?% ~
  478.       }
    6 n' o5 U+ A1 `- d/ @9 k
  479.       else3 }7 k6 X- v/ S; m& h
  480.       {& K2 J: s4 o, C% V6 b. s
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) D/ v! [3 `2 h& Q+ x
  482.         strRegsName=DEFAULT_REG_URL;( h5 Z9 B2 g0 T: Y- I5 d6 |( U
  483.       }6 s( t3 A# L+ I5 I3 x) R! N+ C
  484.     }
    + e/ {+ I# r7 R1 ~, T) s( \  W# ~
  485.   }% x  h/ I/ o7 T: P6 @6 {9 n+ l
  486.   return true;6 t2 P! F* M2 h8 k/ R
  487. }9 w0 r: X) t+ {- T8 k/ w# [

  488. + S5 a" Q4 l4 m
  489. #include ".\ZLib\unzip.h"
    % L* k9 u) c3 Z0 D* i/ D
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    / c, m$ v$ _' h
  491. /////////////////////////////////////////////////////////////////////////////
    ) ]5 u- w( ]7 i! h6 ~5 u$ c
  492. // CRevAppApp initialization
    9 }, u& l+ G* r. {! J6 Y6 v

  493. , P& h2 R1 I' I5 a& R) @
  494. BOOL CRevAppApp::InitInstance()& k% z. ?. C6 E6 j! x% Z1 U' p3 l
  495. {
    2 ~; a6 ]! N1 z7 v! K( f
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];2 e& X& Z- C6 m
  497. 6 S) k! h+ p5 O  R& y2 `
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);. Q; ^) e$ [7 g8 o3 b3 E
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    0 w( X4 P. e9 b. @( L
  500.   {
    7 h0 `: B: z. r7 {! f) }1 e" y" [
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    * I- B, _- R& b# X6 L& R7 ]) H
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 `1 _8 P$ X" t0 K3 e
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    8 q, S  p4 a8 y; I+ t( Q
  504.     {
    8 Q; H6 Z" s2 P6 X% X+ _
  505.       strcpy(szPath,szPathTarget);0 ^6 M7 k  e$ c
  506.       SetCurrentDirectory(szPath);9 p( q8 L4 g# _( h
  507.     }% H1 R9 w0 q. q7 K" z
  508.   }6 }+ B  I2 |5 ~: X4 \1 t. f; H3 |
  509. #ifdef _DEBUG
    - V3 T0 Q* G+ p( W# J: V5 b
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 h% C, A* c* K2 ^
  511. #else
    7 F# U9 G. a" t  p2 z! R& A; k
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 v5 J& Q( Z2 N. {; M% y9 K: a  M
  513. #endif% U  U- l+ {/ [! `3 N
  514.   {
    9 J# A1 n/ r: ]
  515.     char tempFileName[MAX_PATH];% O8 ]7 ~' C5 z  @: l5 _
  516.     strcpy(tempFileName,szPathSource);
    % Z, a$ U( x$ z2 [- j4 h+ `
  517.     tempFileName[strlen(szPathSource)-12]=0;
    2 c' n6 a- M4 s+ \. N% `. R
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 G9 l& T7 v. ~0 K* H0 z+ T% U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    # l; m$ ~6 R5 A) X" ~. [- Q- N' _
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);1 I+ o; Q0 ~6 ?( q
  521.     return TRUE;7 b, ^2 B0 q% _
  522.   }+ Y1 e: b+ E2 e
  523.   // Nuke 0118: Delete run.exe4 O+ p3 G- l! _7 S+ |
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 N1 Y) ]: L" q: H0 M/ d8 v( I
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    * v& X9 q. ?0 s" \* ^3 P0 g
  526.   if(!ReadCfgFile("Config.ini"))( n7 Y% w8 L% s$ h1 ~/ E
  527.   {
    ; D! t5 F) L/ u2 S! Z  T! m
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    3 u( w1 h9 {6 s) b
  529.     return TRUE;2 B6 {1 S" n- @, S7 K, ?* B
  530.   }
    ( v, Y  a* @* J- m- @/ [1 P; `
  531.   HANDLE mutex;" O' e9 @& w# w) B" i% U/ H: w
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    8 t4 s, O" U, `+ F% N
  533.   {2 W) E" H0 h' G: P/ C3 w# O  B
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ( l) o( l, W' V3 O8 E) J
  535.     {2 y3 p  J' B8 T( f- S" w3 s
  536.       CloseHandle(mutex);
    & o% v. A* E9 ?) m. ]; g: Y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);2 U3 v3 I- _7 \: G* U3 m
  538.       return TRUE;% |; |/ i7 z: z8 l
  539.     }* Z7 h5 S$ s; m  ?8 H
  540.   }  % y# g4 j+ J$ J
  541.   CloseHandle(mutex);% E7 }( T5 s  x/ e* B
  542. 4 u4 D- t7 F: N4 b1 e. w' [6 p
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);3 Q. b/ g/ C. w! y9 _6 v1 \
  544. % D. Q1 v( z2 i; F, o  c% c; j, u* W( w
  545.         AfxEnableControlContainer();+ V2 t! h+ Z5 v, f

  546. 9 c1 L7 i+ i5 _9 M/ O' s
  547.   bCanUpdate=FALSE;8 Q( [0 ]6 F' C4 O7 C  _
  548.   dwStartUpSteps=1;3 j' T6 e* O' x' \0 K6 a
  549.   dwProgramState=AP_NOTHING;
    4 R' ?( b  p! x# v+ b$ f# ?

  550. % b, Y: s0 K2 t) @+ Q
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ( A, m* t; z7 A/ ^+ w! m! T8 q

  552. * B/ [$ b. y( y/ d
  553.         // Standard initialization
    ; {' K) q/ E( o
  554.         // If you are not using these features and wish to reduce the size
    6 `) K& Z6 R6 t4 e7 [
  555.         //  of your final executable, you should remove from the following
    8 \8 \0 B$ R/ E% R. g" f9 y+ K' F
  556.         //  the specific initialization routines you do not need.  J3 z+ F& V- q9 k

  557. . W' i: \' S' C) O
  558. #ifdef _AFXDLL9 S# R& h; S& X7 }
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    5 I, D' Y$ v# ~6 K! X" t' e. \" P4 F
  560. #else% o  Y. E0 G2 E: k) b3 h9 T
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    . V0 G" E$ h9 C5 `) h. \" D
  562. #endif6 e/ F) e0 D- F, g6 K/ Q

  563. ; D% L- N, C2 z8 E, X- j+ Z
  564.   dlg=new CRevAppDlg;
    4 @# T3 s- ^2 D: J3 c
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + L4 s: v' r$ E) [; O) p
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    1 Z  f% `3 M) k  r6 I
  567.   m_pMainWnd=dlg;5 T* A: ?6 B: O8 ?, a% Z' U
  568. 9 ]7 h# u* j2 P) D0 Y) C$ \! G
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 L3 ?  S/ J1 o

  570. ) \1 r2 g+ T" P2 v! P  A1 z7 h  g
  571. //  GdiplusStartupInput gdiplusStartupInput;0 [& [5 Z8 W$ k' U. f6 H7 ]/ W  l
  572. //  ULONG_PTR gdiplusToken;
    & _8 n: |4 p" D8 U4 R: A+ e* J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);' Q5 Q8 A' K6 @" n; I
  574. - x% B5 G9 \9 A7 q& W2 u6 m  S
  575. //        CRevAppDlg dlg;7 l8 s  Z3 s% G) c2 L& k
  576. //        int nResponse = dlg.DoModal();' F# y, i# ^. b% k' |% K5 j! F8 z
  577. //        if (nResponse == IDOK)
    % J( v( Y+ k- @, ^
  578. //        {
    7 f( t" a" W9 n
  579. //                // TODO: Place code here to handle when the dialog is
    1 ~3 I2 q4 X1 J6 f
  580. //                //  dismissed with OK
    ; S  G/ K! Q3 A1 \' ?& V( i
  581. //        }
    ( D- J. E' Q  y) ^" V- s
  582. //        else if (nResponse == IDCANCEL)
    6 B# N+ {. Y2 c* x+ a6 U" O. P3 D
  583. //        {
    9 C2 z. o- m+ v6 j3 L; T6 b
  584. //                // TODO: Place code here to handle when the dialog is
    4 P) g3 T. |& @
  585. //                //  dismissed with Cancel
    7 [' v8 X9 }8 Q/ v' w; b! Y
  586. //        }
    & T% V$ h8 }# u5 I8 l

  587. 4 a6 j( x$ @5 N, A& x
  588.         // Since the dialog has been closed, return FALSE so that we exit the# ~. i5 P3 m7 y$ m
  589.         //  application, rather than start the application's message pump." K: z. g, d6 s& C5 v
  590.         return TRUE;
    3 P% i8 j3 A) F' k' O" n( ~+ o- j2 ]
  591. }
    + D4 v* P; ]  F" [* w
  592. ! H% A5 [% j; q# w" z# h
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    6 P; C+ V& t  s' O0 C! |
  594. {
    - X* v: Z: c; V5 }
  595.   int i;
    # E) Z6 Y- E2 `2 }& C' ]/ l9 R3 i
  596.   char *szRet;+ r4 ^3 [4 B, R+ j

  597. 6 X3 [" E) N8 y0 o
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    5 G; Q! V4 q2 P" w! q# W, y7 M0 p
  599.   if(sztoken)
    * V! ^. n# Z& |* p$ v5 S
  600.   {
    0 J7 x; P4 l8 Y# D4 M) a
  601.     szRet=&sztoken[itoken];$ r( K: k8 X6 T
  602.     while(sztoken[itoken])
    1 I: I; B) B1 k
  603.     {
    8 y* z5 H9 K, X3 @
  604.       for(i=0;i<(int)strlen(token);i++)
    ' ?2 b1 q1 y0 w% Q. q; n
  605.       {1 N  N8 m8 N- v* r1 I9 o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])5 L4 C, U# ^0 u! P3 I7 l. ?1 \# b
  607.         {) r8 l' f6 Y) N7 S2 u/ ?2 ]% O0 O
  608.           sztoken[itoken++]=0;
    9 X1 |# h/ y* k+ n
  609.           sztoken[itoken++]=0;% J* m  \# n1 M
  610.           return szRet;
    " r. ]# J" X2 n! \0 r+ @, `
  611.         }
    2 m1 Z9 y$ R, Y  r# r
  612.       }
    3 o( K* V3 `- m* i" e; g  p+ g
  613.       itoken++;
    * e& n/ c2 n) y) z; A6 C  ^
  614.     }- j3 e/ z& R: p
  615.   }
    6 u' y& {, i( ^
  616.   return NULL;# P* v  H4 |: u: I
  617. }
    0 N# I% t; i7 Y( s2 m

  618. 5 G3 z, s2 D0 N3 ?' D' F# U
  619. void ProcessProc(long Total,long Current)! t. ^0 m: F/ q
  620. {
    7 _" G9 P7 H& D
  621.         MSG msg;
    , v7 G% r6 @( M
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);$ H. M0 ~/ R# ^
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    + [( Q' T- R; R% }' u3 j/ T8 Q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    # ~; v1 z7 Q& r0 E
  625.         {4 w& K( E# v+ [5 j
  626.                 if(!GetMessage(&msg,NULL,0,0))- d2 y5 l) x2 Y! {" t, c  Z
  627.                 {
    ; j- C% O7 ]3 R( J: h
  628.                         return;
    . r8 B- p. x. Y/ E% J
  629.                 }2 s, p: b9 F: S6 z) `
  630.                 TranslateMessage(&msg);
    $ L5 z0 D! o" T% r# l9 P
  631.                 DispatchMessage(&msg);. I* _2 u8 m  |. H' c& o4 R
  632.         }        ; p* g7 i& P/ D
  633. }4 n1 h' W" y6 I' Q" I+ P$ L! O: \

  634. " g) O8 L7 R' }4 Y) _
  635. BOOL bFirstChar=TRUE;! @0 F! J5 s. c; i0 l# D% v
  636. + b3 u) I7 X8 `: G% R
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; z8 B8 E7 h7 V6 Y* G1 J& R
  638. {
    5 E* x- V5 j7 t8 Z
  639.         // TODO: Add your specialized code here and/or call the base class4 y5 q* i9 V* X- j
  640.   switch(dwProgramState)+ a8 e# O2 H! Q. A4 O+ ^
  641.   {& \$ b4 L+ k- K; h' O, a" }' X! |
  642.   case AP_NOTHING:
    ( R% T) a0 [4 S: y# ?4 n
  643.     switch(dwStartUpSteps)( f8 ?2 W1 q1 l+ d
  644.     {" ]. n5 m/ ~. {. V6 c. q5 |
  645.     case 1:
    4 L, J- p* w& \3 Q5 G
  646.       {% ?! f' @$ U1 D" \, E6 z
  647.         int i;9 E, [6 }9 N; R
  648.         CDC *pCDC=dlg->GetDC();7 B. u0 r8 j  L* b. v" K6 Q
  649.         HDC hdcwnd=pCDC->m_hDC;: X  P' Z5 K9 L6 f
  650. //        Graphics graphics(hdcwnd);8 L8 m$ y6 E& u' b1 s2 G% V
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    . e9 L4 ~  w+ r4 _5 L7 X% |
  652. //        INT iWidth=bitmap.GetWidth();. Z9 O4 k. {* E
  653. //        INT iHeight=bitmap.GetHeight();9 S% J0 q$ G5 Y3 Z2 n& B$ u& A
  654. //        Color color,colorTemp;
    8 K3 |. g, t4 }0 h1 I( i3 S, H3 W
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& P- F+ o$ ]8 }/ x; A2 R
  656. //        {
    % f+ E8 O4 ]8 P9 d& L
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)6 l* u, e1 A- D7 R' o" q3 F2 f3 i
  658. //          {
    ) O3 L5 y- b3 T% S
  659. //            bitmap.GetPixel(iColumn,iRow,&color);- t# P# O9 n6 c( t  w. |" r
  660. //            colorTemp.SetValue(color.MakeARGB(
    ; V# S$ v+ j/ [2 z- @' a
  661. //              (BYTE)(255*iColumn/iWidth),, n) f- W+ l1 B. v2 C
  662. //              color.GetRed(),
    . V( A+ v3 i! a6 q6 I
  663. //              color.GetGreen()," X3 J6 @2 X; ~
  664. //              color.GetBlue()));6 U% M" [1 Y8 `9 B* I( {9 ^
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);" A* @/ L) `+ v9 T  U) O- m
  666. //          }3 C2 n  g  f% [& @  a  @
  667. //        }
    ) r7 d! M. v7 w  E# T
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);; w- \! ]% o' h2 j& K+ \
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 M( T/ z  f# E' l# ^3 j  `+ A/ T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    2 y$ M7 L& a# b0 k& q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 f' `$ k! p! j6 Z' Z3 R! c8 g
  672.         for(i=0;i<240;i+=8)0 i: s4 k2 I: Y
  673.         {
    / \) R1 P$ Z$ B  M: ]
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ m* z8 ~! x4 _4 F0 @
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, X' {" h4 i4 i7 y0 S0 T; ?5 f/ i4 y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , D2 a" p4 }4 [5 n3 g
  677.           Sleep(33);
    $ f6 Q' X. y+ O& K. {# u
  678.         }9 m) {+ I3 V. B
  679.         Sleep(1000);
    ( o1 T) _8 z' z& M( z$ M" P0 J
  680.         for(i=240;i>0;i-=8)
    2 K1 I/ A8 |: S! A' u" y
  681.         {
    * w& N' ~/ |0 Y# R
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' D$ c2 R# B$ D1 \
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 j8 W( I# b' o7 f+ |* _- f
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : x& |& W( }# Y8 c4 c  m2 Z3 ]
  685.           Sleep(33);
    + q; k- \; N9 `1 G- e, E
  686.         }
    - Q0 v) i, \6 P2 f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    5 n3 j* S! P1 g7 G2 X
  688.         dlg->ReleaseDC(pCDC);4 [9 E# T6 s; k5 y. L/ s: g8 l
  689.         DeleteDC(hdctar);7 s! B7 Z2 _% s8 t& ?
  690.         DeleteDC(hdcsrc);
    4 ^& }& \0 R. b
  691.         DeleteDC(hdcorg);  {  h5 O5 B9 B' P7 d( n5 J. x
  692.       }3 Z+ A. v4 H* |% t7 J9 u9 `
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    , T2 M8 Q# T0 p0 C: t4 |2 U9 D
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");2 v$ o6 F  P4 A( J" x
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");7 `0 o! Q+ T( w; _9 x# D
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    " g# d" ~/ t/ J% G. g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 m; M7 t1 Q) o" p, W" ]: J% C/ L
  698.       if(!Dn.Connected())+ F; Z6 b1 s; y( }$ g
  699.       {6 D9 d+ o5 o7 o6 v5 A# U9 v6 v$ Y
  700.         dwTotalFiles=1;
    4 T5 }& |9 {# G8 t9 y( ]2 Y5 O% m) W
  701.         dwDownLoaded=0;: d/ @$ ?# B3 s9 F+ a: N2 m/ k3 ~
  702.         bSilentStep=TRUE;
    / W/ z( u4 R1 T
  703.         bCompressed=FALSE;
    0 ~- E1 u9 R# [
  704.         strExtLocal.Empty();
    , n7 Q) n. \$ f4 c! h+ m' I
  705.         strFullName="readme.txt";) E* Q5 o0 Q: c
  706.         dwProgramState=AP_CONNECT;# A: w* x. g4 M6 b6 v% N" M
  707.       }
    6 F. \2 |2 Y4 q5 l. s
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();1 n, \8 B3 m+ H0 Q
  709.       dwStartUpSteps=2;
    $ l' |2 L- q& t. q, C
  710.       break;
    5 B$ `  O1 N  L8 h
  711.     case 2:
    , P$ r- l' m4 x6 ?2 O2 A( R4 m, j
  712.       {
    - D) p& H! {9 v% H& m  G4 Z
  713.         int iEOF;
    : }( @- h) e% i. @& B, g  K
  714.         FILE *fp;
    , J" N3 S3 I8 t7 y; a) v( i8 h  B
  715.         char szString[512];
    ' `; `2 F+ M4 \" {$ Q: t, @$ B
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");" ^9 E/ U1 G9 m/ V1 q
  717.         if(fp)8 L  D6 z" p) I
  718.         {6 Z4 c, t2 Y' ]- \1 F9 i
  719.           do
    ' s( c# T$ ^; a; q9 ]
  720.           {+ `  j) P! j4 z2 e+ e
  721.             iEOF=fscanf(fp,"%s",szString);
    5 r# k- V2 y, J. e1 n. }" y# b  v
  722.             if(strlen(szString))
    ' B1 j0 g8 W- U/ H
  723.             {
    3 g: C! l& m! |3 x, V) J
  724.               if(bFirstChar)& Z: \) ]* K: F1 P8 T  }
  725.               {. P$ p" M: v$ Z& ~6 ~! a- X! Q1 u
  726.                 bFirstChar=FALSE;
    & E3 |1 \6 M. X4 J1 p1 M# r- e& h8 ?
  727.                 bConnectIsBig5=FALSE;
    0 H: K$ ]% u2 @/ c
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;: K' {. ?. n! g+ P% ~' J8 P( W
  729.               }
    . R# I) t6 Y& n* g- E3 H6 k
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    / ]6 C7 l' S7 B9 T; @- U, Z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    7 z) O  W' K% |6 q; s+ j
  732.               dlg->m_ListText.AddString(szString);
    ( y. E$ |  M5 y( o1 s- Z' c
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' b! H- H, }  x4 @! g& F, u& q
  734.               *szString=0;
    6 y% ~# a, [9 `. }8 [7 x
  735.             }% d# }/ ]. e7 R. Y+ w1 B' D
  736.           } while(iEOF!=EOF);/ S6 X3 z/ H3 z# _; W6 @
  737.           fclose(fp);
    $ z# a1 R& }" Z/ b
  738.           unlink(".\\DownLoad\\readme.txt");
    : Q% u/ H0 \4 T0 L8 v3 l; o
  739.           dwStartUpSteps=3;
    , D! k" a) N3 o) `+ o* [0 I; r" A: U
  740.         }! ]- @/ l. w% H0 e% I; _* ]
  741.       }1 ]! X& h9 U6 b
  742.       break;3 z3 Q4 p/ j' A0 h7 _$ K
  743.     case 3:
    5 n* j" ^5 n7 N) }
  744.       if(!Dn.Connected())
    ( I$ w. p9 |3 f+ m; o, z  P+ D
  745.       {' g5 i! ~1 S: `3 a2 W" C9 w
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    0 }, [4 Z; k7 N
  747.         dwTotalFiles=1;! x# \) _$ \6 c
  748.         dwDownLoaded=0;1 |+ N  M' ~7 ?/ v8 H3 L, ^
  749.         bSilentStep=TRUE;. b0 K2 f+ T: Y! M: @8 l! @
  750.         bCompressed=FALSE;& r; T1 q& d# f8 w1 f, x7 z
  751.         strExtLocal.Empty();3 X9 e) F) U0 K& l* @
  752.         strFullName="checkversion.txt";
      D$ s2 m0 U8 c9 C1 X
  753.         dwProgramState=AP_CONNECT;
    0 [% j( A% l+ f# C+ ]/ Q
  754.       }7 Q. N" x: G0 I2 b0 M& [' y
  755.       dwStartUpSteps=4;
    7 |$ \$ c4 C( D
  756.       break;
    . `2 \' R" T$ ?2 n  k* I
  757.     case 4:' J7 a4 n9 Z$ c$ X1 }
  758.       {2 q1 P  ~  [, [( I
  759.         FILE *fp;
    . V: p* r0 Y5 K% X* F9 J8 C4 p8 x
  760.         char szString1[128];
    + }2 I! X5 t8 b8 `. r
  761.         char szString2[128];
    / d. y2 V) [! B+ b; K3 \5 z) V
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 `0 D, `4 w1 S% i4 L
  763.         if(fp)  _! w+ O; t" q3 y) l
  764.         {
    4 Q! n/ d/ ^* |/ S( g
  765.           fscanf(fp,"%s",szString1);
    ; L6 \+ N, P+ y/ @/ V: l5 Y
  766.           fclose(fp);5 N/ _8 M  X' U0 D1 f- ?! k$ `; z
  767.           fCheckVersion=atof(szString1);- p' h+ ]3 i" c  k/ O
  768.           fp=fopen(".\\checkversion.dat","r");' Q+ q# a* P* e/ L# Z2 @# {
  769.           if(fp)
    0 t. {; L+ h% B/ n
  770.           {/ l! G! R0 C6 p: @# W3 U' a7 @
  771.             fscanf(fp,"%s",szString2);5 s4 i  N$ x" w& B) v% P$ q
  772.             fclose(fp);
    ; E8 j- d3 h4 u" s
  773.             if(atof(szString1)!=atof(szString2)), J' t& h! i1 A6 s1 h
  774.             {
    : L; i  w' N- {' }0 B
  775.               if(!Dn.Connected())
    ' T# C9 B( {# m* Y8 @, I
  776.               {
    & q6 t* a1 k8 ?. R8 d1 [8 N
  777.                 bFirstUpdate=TRUE;
    * r- o) T8 T  p/ B6 {
  778.                 dwTotalFiles=1;  n8 }2 Q7 P# E" I5 |
  779.                 dwDownLoaded=0;  s; ?6 {4 H  l% M. ]& B
  780.                 bSilentStep=FALSE;  Z3 w+ K9 d+ Y! A
  781.                 bCompressed=TRUE;
    3 c$ c( x; v$ v+ v0 D, S$ A6 T6 B
  782.                 strExtLocal=".\\DownLoad\";7 g: R5 @, k+ `5 r! i* Y2 l3 r! N
  783.                 strFullName="update.txt";/ |: i1 J- v2 M0 y- o0 k- H+ v
  784.                 dwProgramState=AP_CONNECT;
    ; z: S( }' T) k) A
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " @! k2 P! O9 N' i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - m* S- g3 C' e
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");1 x6 B& D. X+ L' j

  788. % n! A2 A6 Y! k4 z) c3 g6 Q
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 H0 s' ~& [  D1 `6 c
  790.                 unlink(".\\DownLoad\\checkversion.txt");. e) `* a+ O2 t0 k1 Y0 m
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' K, v: F$ c" x7 f
  792.                 {
    3 r9 u6 @$ @* M6 {% a+ O
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! E2 n0 f! q1 J( W
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");5 N0 F4 O5 {* h: P* a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ( E4 e( d; S* I# b& y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 z8 K) |  }4 o- |* y# i9 G: X( j

  797.   n  z3 D- e! ^! K. r
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! S; m; G6 a# n/ T. x; S) d. T
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , f6 I( d8 w' p% Y0 Y& J1 D7 f
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");0 s6 k5 E4 @; T$ m. K! v
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 Z# L4 n8 e9 O/ ~2 S4 N
  802.                 }
    ! \0 x- c3 z9 j$ M" f
  803.                 dwStartUpSteps=5;
    0 Z. E4 U4 S, b+ M/ ]3 `! |
  804.               }
    8 M4 Y. Q+ U5 z+ n
  805.             }
    * V) ^! C+ p8 q, f# x" }$ p
  806.             else
    % \0 ~, a: ?# w: [7 q
  807.             {2 Q6 Q  Y! q  C0 T7 B' p
  808.               unlink(".\\DownLoad\\checkversion.txt");
    # v; C1 _! X3 v
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");6 H7 R  g' b  ~7 c8 ^0 P2 @8 r. i6 T
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % B$ Z! Y3 {4 Q; `5 ]3 C
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" k) `( J2 I9 r# L7 f* q
  812. 7 C/ H0 q4 b6 X  H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& k' ?* f* i$ a( t6 }
  814.               dwStartUpSteps=99;  w0 `! |0 M/ P* B
  815.               bFinishUpdated=TRUE;
    $ L+ B2 x) ]! N3 s
  816.               bCanUpdate=TRUE;' L8 W; w/ }9 e, ]1 N  V
  817.             }
    ( Y2 z0 M1 Y  h& {
  818.           }0 w5 s) U/ N6 P/ e) U
  819.           else% r7 o' b% U: h6 ]
  820.           {
    * v5 ~8 ?1 g7 w2 u$ b
  821.             if(!Dn.Connected())( b( E: ?2 n5 d. s
  822.             {
    - |9 \- H; d( |$ H# r. F! z* b
  823.               bFirstUpdate=TRUE;6 \7 `' m6 x7 T8 W# W" h" y
  824.               dwTotalFiles=1;% v/ T, D- ~% A+ F
  825.               dwDownLoaded=0;
    6 c8 h# P4 R3 G! e# Y! o
  826.               bSilentStep=FALSE;
    / o' ?% Y% K( k; Q1 G
  827.               bCompressed=TRUE;
    2 F2 A& B5 E& H% X9 L
  828.               strExtLocal=".\\DownLoad\";
    : {& d/ n. M) [6 c# O" \4 S( w, |
  829.               strFullName="update.txt";: W* a. z# {3 C& W! @2 f. c- e
  830.               dwProgramState=AP_CONNECT;" W1 ]) u% O9 Z% g: ~$ k
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ' Q. U. S% `7 Q$ [3 Q2 C: Z6 t+ i
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - ?  h% _0 s5 n! }! Y7 [" s
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");7 {- M! o3 l7 k$ k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 F/ {* C1 k% M; {" X* a
  835.               unlink(".\\DownLoad\\checkversion.txt");
    7 u- H& _* Z/ \+ `: T( c# u
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)1 U% [/ j- b0 c
  837.               {+ E% q- f9 r% k  H7 N
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");" c  A- O+ |2 v* X8 I" r
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");+ o! b! m+ V5 m* i, \! v2 P! M
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");7 o3 T' f# n, A3 n
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + t: K7 E. c5 J* _( k) p
  842.                
    3 P; d. d/ ~+ Q- h- M  `* w
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ o; t* E7 j5 b9 u+ y% c
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' {' M1 e% U4 d' ?
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");# R9 H  t  M& o% ]5 p
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 F+ Z7 ^3 W' E) f
  847.               }4 I/ `4 x$ N2 p5 W: @# r! S5 w6 \
  848.               dwStartUpSteps=5;& C) e! d& r8 D: S4 e
  849.             }) f+ w8 g' V) ]( E( S1 O! @+ P
  850.           }# M9 k% |" I( ?3 k7 j5 P0 U, d4 ?
  851.         }
    * R# g7 G* n! S' [
  852.         else
    2 N" {. I4 z/ a  D* w
  853.         {9 U7 P0 ~' A  W  n3 x$ r; Y0 a
  854.           dwStartUpSteps=3;
    * a; P. N" x: y
  855.         }; h* Z3 I# w% r! Y% z) m
  856.       }
    ; ?) q! a- Z4 `! Y% J! n1 G
  857.       break;  O8 W0 v' z3 C7 j* O6 y% O
  858.     case 5:8 z" q3 v; a4 x& y3 g) p
  859.       {( ~( }" K$ z5 T5 e& Y' u2 @* \# r
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)  y5 W# |+ s7 U6 U/ H! @
  861.         {
    : ~+ v. z2 I5 O0 J
  862.           int opt_overwrite=1;+ E1 Q% E4 J$ v
  863.           int opt_do_extract_withoutpath=0;1 V, w4 Y. A  U' q
  864.           unzFile uf=NULL;4 v9 r) `+ W- d9 Z
  865. * W; S* Q4 _) N/ r
  866.           uf=unzOpen("Wsa.zip");6 Z+ v+ A! m6 d7 V8 \2 y! W
  867.           if(uf)' u6 p; X' z" M: n* W
  868.           {% @$ D( ]7 o# {! _
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);* F3 k5 ?. m/ c# y2 S$ r7 o' K& P3 O
  870.             unzClose(uf);* n! ~3 S, D( L6 w- `8 p& g
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    - l; N1 x+ U5 B; t# M! y
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");( t: n5 g0 M6 k8 x3 u
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ) m+ g/ Z; M! ^: j# k5 F
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / F4 Q8 F- C6 m/ C) B9 o
  875.           }& M! F' D5 _  K4 v* }+ r
  876.           DeleteFile("Wsa.zip" );
    7 ]% P. E7 o) z) I/ F
  877.         }
    , l% D9 q6 A$ D. n7 z$ O

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

% O* ?" o4 g# W. \
% D) c' E3 F2 X

評分

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