找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
4 t6 a1 Q. o* P8 k. m) `
  1. / RevApp.cpp : Defines the class behaviors for the application.2 k' ^/ c9 N% X
  2. //  \7 \% {& R3 A5 {

  3. ( _0 K, ?" n' H; [
  4. #include "stdafx.h"7 `% a- a- Y; {; L& X! m1 V

  5. ; G7 |* i8 O# O9 q, }$ Q1 q% F
  6. //#define UNICODE
    " W) p. P5 q) Y/ j) k# ~
  7. //#include <gdiplus.h>3 X( r1 B* ^0 h# r# [2 T
  8. //using namespace Gdiplus;% g* C  s) A% B; N2 L1 C& G0 y

  9. 2 A1 X4 [+ v2 s  N7 `3 A
  10. #include "RevApp.h"8 {) W/ g* g  M: J! ~
  11. #include "RevAppDlg.h"/ d. u2 l0 ?0 W; X5 `, w

  12. * v/ {- s( M9 O' S4 _+ b! q
  13. #pragma warning(disable:4786)! u  e( n8 x: N/ _- ^
  14. #include <map>
    0 p0 s" {* ~: c( m( y! D1 \
  15. #include <list>
      r7 {8 m3 I7 o! Q* C/ d
  16. #include <direct.h>
    # V1 k% K. N: O$ P6 N5 U- |
  17. . L/ O: j+ y7 M' i
  18. #ifdef _DEBUG
    + \: Y1 K' x2 t/ ^" U; H6 N
  19. #define new DEBUG_NEW  Z$ ]& N* `; k4 A% P
  20. #undef THIS_FILE
    8 ^6 M% d0 S2 ?6 ]+ y) ^& F& O$ E( [
  21. static char THIS_FILE[] = __FILE__;) n1 Z! ^* }5 N
  22. #endif
    1 R  `& j7 X- ]8 b* \$ o6 _
  23. #include "SkinResDef.h"
    * B. \& N3 e$ t8 N9 V! ]+ k
  24. #include "ChangeBG.h"
    & Q5 p! I' X& B
  25. #include "AFXINET.H") ~9 n# Q# n1 P2 N

  26. 2 o) e% {1 |3 p! n6 {! D+ O
  27. #define TRADITIONAL_CHINESE 0- _, W  P3 [# b. ]1 o9 j
  28. #define SIMPLIFY_CHINESE 1" Q) C% G8 I! q5 `/ V3 m
  29. #define ENGLISH 2& E! h: X8 H5 S9 f" P% _$ }
  30. int m_iLanguage = ENGLISH;
    # ?& F/ S) L* B/ ~* k8 q1 Y
  31. /////////////////////////////////////////////////////////////////////////////
    ! i1 @3 B2 b9 h
  32. // CRevAppApp
    : u) F; x- f. I" \$ o
  33. 6 G, ?5 \- V8 _: \" ?! s
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! k$ \5 J" _1 M
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    - j9 C' t7 a9 J% P3 V, Y+ z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    : y" i8 z  i! i
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!: w% Y: b) E5 C8 M
  38.         //}}AFX_MSG9 n' L2 G. F/ F+ \6 y0 P; N9 E4 v
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% W& Y& L* P5 E$ ~' d* J7 ]' o1 l
  40. END_MESSAGE_MAP(), Z. @+ ?% q$ ~6 V2 {4 J0 l% @
  41. ' M% w$ `- w& ]- ~
  42. /////////////////////////////////////////////////////////////////////////////7 M1 s/ u" a! ?5 P+ }3 R; l
  43. // CRevAppApp construction) D. x* ^0 }+ y4 B% M8 A

  44. ; a6 b4 d5 Y/ z2 T8 t/ ~9 r0 D
  45. CRevAppApp::CRevAppApp()( z5 d) M* l9 i, n) e8 ^
  46. {
    3 e/ J% h1 E+ m3 H0 T
  47.         // TODO: add construction code here,. J4 Z7 \( }  v+ @  a' y
  48.         // Place all significant initialization in InitInstance1 \+ C# W; p$ o+ Q# r# G  v
  49.   bDisplayIsBig5=FALSE;
    / G$ @* p2 J0 d$ r3 w# P
  50.   bRestartUpdater=FALSE;+ K! {  d6 s- A; T4 U# g( l
  51.   bFinishUpdated=FALSE;2 k( ?9 B" j  j3 m4 i' M1 u
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;6 T* T3 \; `1 O
  53.   InitChangeDataBig52GBKS();2 L( @' a9 V. x2 @* t
  54.   InitChangeDataGBKS2Big5();5 d! i/ C  p' U" S- ~0 a
  55.         //
    7 v2 ?" Q6 \" A! Z8 @/ f) S9 r
  56.         bClickRunExe = FALSE;1 g( P7 F3 g0 P
  57.         //* _, ?' {0 f4 H  G" E
  58. }- h8 P4 ?+ z" E" r, B; w. s0 x* |

  59. , Z' u: D' x2 d8 @9 b# Y& r2 c5 J
  60. CRevAppApp::~CRevAppApp()
    : d$ U0 A$ `- x1 B: q! [, J
  61. {  J- V& l5 R; w7 E
  62.         // TODO: add construction code here,
    % I0 t& V" X6 Z" M- M3 C/ a( [5 M
  63.         // Place all significant initialization in InitInstance
    # N  L$ z# K" r8 @+ V7 P7 G1 N; Z
  64.   EndChangeData();/ w8 ]. q% }$ ]2 J5 ]
  65. }  x' G+ z* d5 G" n. ?. U
  66. 6 b4 F9 b" ?% l/ y  |3 [
  67. /////////////////////////////////////////////////////////////////////////////
    " z8 l& D9 i- ]7 g$ L  \
  68. // The one and only CRevAppApp object
    0 B! G9 ~0 _2 |* m7 R0 I
  69. * |9 x; J+ a$ {" m4 u2 e/ c
  70. CRevAppApp theApp;) H5 D+ [1 _/ J7 r7 z* f
  71. 6 u$ J! ?9 i7 |" [9 s1 M5 T
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : n0 G5 a! l+ g% u+ G1 q& F( x7 r
  73. {
    , X( j4 a# W& I6 b% K, p4 F2 ~
  74.   int iEOF=0;4 E8 o1 r  V2 ~; E
  75.   char szTempName[MAX_PATH];
    ; H3 z! F( g* p, }
  76.   *szFileName=0;
    % F1 u) o) L# ]- \# p% N' s
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! I, T% n* \+ ^! \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('), [% R% c. c) k/ @
  79.   {
    7 R* V7 ~* Z5 A; S1 P9 I$ q
  80.     strcpy(szFileName,&szTempName[1]);
    " \8 _# [! G; V6 n% F9 c
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    2 A' ~! O9 G- d
  82.     {
    ) `7 y5 o) i0 ?7 m: R" E# i
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ( `" ~# T7 L+ R+ X  a$ E
  84.       strcat(szFileName," ");/ I  p8 }/ f7 h5 O6 \% J2 g
  85.       strcat(szFileName,szTempName);' l6 ?1 u+ S# T% P% Y4 g: B
  86.     }- H( r! f8 e0 l- U4 ?
  87.     if(strlen(szFileName)>=1)
    ; N) c* ]/ O3 I3 ^! ]( b) X3 H$ J
  88.     {
    * ~7 k& z1 z/ [6 m: \8 ]1 w' }
  89.       szFileName[strlen(szFileName)-1]=0;) Y  L; I) Y& Q; t/ G
  90.     }
    - F; n. q8 B3 g9 l8 }/ M
  91.   }
    / Z. A0 Z' m9 N( p
  92.   return szFileName;; v+ o3 T" I* j) W) F, F) X3 Z
  93. }
    ( z' t  B3 l) G8 D3 n
  94. / V  L6 A( y: c* b- {
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    1 w% P  e2 ?2 w$ O
  96. {5 [8 V' e' S+ O
  97.   FILE *fp;
    ! N: D8 U1 r% `( l1 V/ Q
  98.   char *key=NULL;
    3 D$ Q, E2 M/ [7 z
  99.   char version[MAX_PATH];5 B7 k0 C& [* F  F: h. Y6 w$ W
  100.   LPUPDATEFILE file,olds;
    ( Y( X! v. R4 ?' c
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; l4 h& D, K1 L# R
  102. 6 j$ }+ T; O8 K: K7 t, }  L
  103.   UpdateList.clear();. i3 C  F9 E! X# G5 K% J6 T
  104.   UpdateFile.clear();
    ' r: ^/ W& q: e! @$ {; r- h! I
  105.   if(GetFileAttributes(filename)==-1) return false;
    : {$ R0 v7 \# K
  106.   if(!(fp=fopen(filename,"r"))) return false;+ X; o9 j: C% J
  107.   fscanf(fp,"%s",version);& a: l6 a/ S7 _. m1 y( z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    2 k# f8 k" f/ j3 A
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ! d* L1 w( D% y
  110.   {% m) q* i" R) ~( a3 p) i; w- m
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% |0 G" d$ G. _# ?
  112.     fscanf(fp,"%s",file->path);
    * c4 U% y( D/ a! O* e3 r
  113.     ReadFileNames(fp,file->file);$ S* P/ V  ]& T6 `, d7 J
  114.     strcpy(file->full,".");5 M$ p3 p. c; j0 e1 m) |
  115.     strcat(file->full,file->path);4 C. g" U: b8 D' a8 q
  116.     strcat(file->full,file->file);7 ?( Q2 H$ e/ c9 @
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    6 ]8 B4 T4 M& {# g! z7 P# \0 o
  118.     {! K+ D% @# Y9 z$ s
  119.       file->vers=(float)atof(version);" J0 E$ A6 ?& |! U- I* V5 G+ s4 i
  120.       UpdateList.push_back(file->full);
    % y% s+ m) v  F1 G/ U
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    7 A2 m" K( x& ^& u
  122.     }1 P7 @. W& v' Y: T. L
  123.     else' o+ d$ j3 w& t! r1 Y
  124.     {
      ~* O% z( h7 T) }' U! V  R; P2 N
  125.       olds=(*p).second;& ^% t, |+ `: R; j3 M
  126.       if(olds->vers<(float)atof(version))) g/ L4 T% G, h  X6 R
  127.       {
    ! x: }3 y8 F. x
  128.         olds->vers=(float)atof(version);
    8 W: c& `+ ^2 I/ j/ i" I
  129.       }* E, K5 i* h8 A8 [0 Y  H
  130.       free(file);9 R% [: s  i4 w2 e! M4 z5 Q7 D
  131.     }" H3 Q8 J3 g  r  L( s' S4 E) F: [
  132.   }3 U: y, D3 _( ?
  133.   fclose(fp);
    3 P6 p+ w3 P( H3 D) h# d. J
  134.   return true;
    2 Y7 V( r1 @; P* w" i/ s
  135. }
    9 F" T3 k& @! E; Z; `

  136. * I  u' P1 |0 L3 ^  Y" I0 Y+ G
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    - S+ O+ i/ u. C0 Q2 e
  138. {* m% k) e, `4 b2 C- K( Q8 d
  139.   TCHAR  szFull[MAX_PATH];* H9 w% x5 S/ P6 ~
  140.   TCHAR *token,*inter;
    / ?9 ]& x& |3 o* p
  141.   *szPath=0;% Q- Q( I$ k6 g( ?1 Z# f
  142.   strcpy(szFull,szFullPath);+ q" l# P9 K( v" H7 e2 P/ d
  143.   token=strtok(szFull,"\\/");" U8 z" D# y. ?' \% ~
  144.   inter=token;  K6 a) Y8 T+ A# Z( J' P6 F. p, A2 |
  145.   while(token=strtok(NULL,"\\/"))
    ' u# q; c* C3 k
  146.   {
    / i+ r7 M8 d8 ^2 d; u& I0 K
  147.     strcat(szPath,inter);
    $ V) q# X# W. F
  148.     strcat(szPath,"\");, Y' j/ I7 u7 c5 H2 z, t+ n; _% J
  149.     inter=token;
    4 p% [& C: W' g2 a7 ?1 E5 K
  150.   }5 L% x5 {1 k0 O" @
  151.   return strlen(szPath);
    ; F- x; t7 d# l, M8 w# P6 [: f
  152. }  u9 D9 b3 @. a3 m" S- k& b; d

  153. 6 M; Y' n  e. a' V7 W4 S
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); \) Z. `4 H3 c
  155. {
    1 s+ [# U2 a2 p# U* c& u% J2 i
  156.   DWORD attrib=GetFileAttributes(Target);. S, U# s6 t7 Y+ A
  157.   if(attrib!=-1)
    / S3 t% i) \5 G
  158.   {+ {7 T$ R4 P2 n& Y
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))7 R) i, z7 }2 z2 W1 O9 i) s) S* O
  160.     {. H' O( c5 \3 C' z+ z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) I9 ~6 O- G% D$ [5 [7 L5 S
  162.       SetFileAttributes(Target,attrib);
    ; }" ]6 `) s8 z1 J  F
  163.     }0 R( c; t2 E/ Q+ C4 D% u
  164.   }6 _: i, Q* V- E, U4 [$ ^+ _
  165.   CopyFile(Source,Target,Erase);
    ) s/ s$ G& i/ B# |/ p/ E( h% l
  166. }8 d# F* q8 y6 c! y/ Y) d2 }! |4 `
  167. $ l' `/ K# |4 W; G8 h  Q$ @1 v
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)( n% v) Z+ W- Y' n& m! C
  169. {
      y% o: k  B6 {9 Y0 U, y
  170.      FILE *fp;0 O! u7 p# c9 n8 r
  171.      char  szBuffer[8192];' J, ^* n/ V2 k' F! d, q
  172.   va_list  argptr;
    % r- f8 p: G( w- V" j. h( ?
  173. & Y1 u. h8 N7 \/ b
  174.         va_start(argptr,message);
    $ Z! Q4 v. D% m% S( x/ `
  175.         vsprintf(szBuffer,message,argptr);
    # ^' P/ q2 \- g9 |; s+ y
  176.         va_end(argptr);& r  s9 N: R* i. d( l! r
  177.   fp=fopen(FileName,"a");
    3 Z, e% X; K; ~- E7 w
  178.   if(fp)7 R* E9 g! A. u2 M" `
  179.   {8 {! _. n+ u9 E
  180.     fprintf(fp,szBuffer);
    ; s6 j6 b8 {' b0 G9 r. q5 k6 I# g
  181.     fclose(fp);
    + G$ N3 n$ D0 Z8 m  e# c
  182.           _flushall();( i, n6 j; ]! A& [5 u4 N. P( |
  183.   }8 ?: q: f' [; W6 m
  184. }6 W4 i7 ^4 t/ F  _; c

  185. , M! C2 p* H* p7 k3 ?
  186. BOOL CRevAppApp::Fclearf(char *FileName)  J+ T% S7 {. `. K, q7 q
  187. {. e( X) m4 ~, K6 k. J1 {
  188.      FILE *fp;7 }# |3 d+ e5 H8 t: A" b
  189.     DWORD  attrib;
    # F9 `8 u, W5 z" [3 S
  190.   attrib=GetFileAttributes(FileName);
    & |# \# _$ f$ f1 x5 J& N. t* M
  191.   if(attrib!=-1)
    - s: x$ P# e; w6 }: I  Q
  192.   {
    1 e* t7 K& @' I- U- O- t
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      G0 {; g( B# y$ @1 L* E8 u
  194.     if(!SetFileAttributes(FileName,attrib))
    3 m% q+ G/ E: g
  195.     {2 `6 b+ [* I& [; p- q
  196.       return FALSE;3 M1 O( M2 U# a2 q, T
  197.     }# `; {+ o0 W, E# ~5 J& E
  198.   }
    9 B; v% R1 D5 Y4 g
  199.   fp=fopen(FileName,"wb");+ j% T; }, ?7 W) y" h
  200.   if(fp)- P; Z  H$ @% L; l
  201.   {1 |' S9 C/ f8 w3 ]( I3 |3 T
  202.     fclose(fp);
    0 \/ f3 K7 i$ n' l
  203.   }
    1 ]/ `# l. N6 |
  204.   return TRUE;4 f7 p+ t6 z; D( [
  205. }
    ) f% n4 j5 [( O& J( p  D# a
  206. 9 D& H: {. S3 L9 C6 G- D3 j; b
  207. BOOL CRevAppApp::UpdateLocalVersion(void)8 X" n5 l) k, H% m
  208. {/ V5 l1 X/ i$ l; y. O9 ]: J; K
  209.   char filename[MAX_PATH];
    / Y5 c$ B0 U; i. c+ U( f5 |9 L
  210.   LPUPDATEFILE file,olds;
    0 v2 Q: A7 I" [: t
  211.   std::map<int,CString>::iterator i;
    + p% ~$ W7 a0 ~7 p
  212.   std::map<CString,LPUPDATEFILE>::iterator p;8 L5 w, Z3 t+ T
  213.   std::list<CString>::iterator l;6 F% Z3 b) P; `; m8 P2 G! w

  214. / ?- v; E( p, Y/ ~4 f: j
  215.   if(bFirstUpdate)
    8 |# C% o& I9 f; W
  216.   {( @% G" L# j8 b& x, m7 \5 u$ [7 l7 W. r
  217.     dwCurrFile=0;+ r6 ?) _" C9 Y, B6 K6 W
  218.     bFirstUpdate=FALSE;+ p& l3 T% `! C5 H* p8 \
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ! Y% a* c$ ?' j8 Q% s5 i' c6 T
  220.     {
    ( [! M0 Z/ a( M, j/ N
  221.       dwTotalFiles=UpdateLocal.size();
    % r- h) c# i7 E
  222.       dwDownLoaded=0;
    2 ~3 {5 f/ Y( y1 b
  223.       bSilentStep=FALSE;
    ! C# O1 J. K3 J; g) c
  224.       bCompressed=TRUE;/ M! y) l+ ?, e+ S- |4 j
  225.       strExtLocal.Empty();( ~! s7 v# T* r2 A1 F% S
  226.       strFullName=(*i).second;
    9 P% C. V3 W* I& n( o1 H
  227.       dwProgramState=AP_CONNECT;8 O3 M2 f: E) m, \9 a
  228.       return TRUE;
    : f0 j0 X+ F- |5 r7 L$ g0 h/ v
  229.     }* O# u3 K+ x0 J, m( x$ l9 p6 B
  230.   }
    . ]% f" q; O' T* j6 c
  231.   else if(bRestartUpdater==FALSE)
    2 g# B! g0 N- [
  232.   {
    - T( v6 [1 a' R- V; Q) d$ U
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())% b! h. u: _! ?# M1 W
  234.     {
    ' {. n5 L7 r9 C6 z! Q! T3 i) V4 x( Q
  235.       file=(*p).second;
    9 A% X) B. ?2 ^% f  J
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    * ~6 i4 \# L* E; M- Q
  237.       {
    ! C5 B9 x; L2 n
  238.         olds=(*p).second;, A3 O7 g/ J' y0 G# A. I% u- f( {
  239.         olds->vers=file->vers;1 m8 Q1 U$ e2 _0 b1 H2 q6 h0 n
  240.       }
    : N8 F# x* P2 H4 K* I  V6 u
  241.       else, G# h8 R: O# y* W- W  I
  242.       {
      g, n, J1 A( e# |1 g$ w7 b" M
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ \3 R4 Q/ w  v, l. @$ @+ H
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
      T$ ?7 P6 u3 s& Z8 R4 Q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    . D" E! \2 O' Y, a) c% P8 I
  246.       }- p$ J" _& T" P) O/ o: ~* f
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    / c$ y. c9 v$ m( g
  248.       sprintf(filename,"(%s)",file->file);* c0 F5 h) t+ \/ V' W# {9 L
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 B' w4 ^8 C5 I3 [- j9 h2 a5 T: _
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }/ z: ~/ ~/ y; I( D3 G
  251.     }4 p1 p4 k/ K7 `  ]! V' q6 Q
  252.     dwCurrFile++;
      h) k( W! l- O! F  k+ y8 i" q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; Q, ?, y/ j( f8 j, n- v! D0 `$ Q
  254.     {
    # d' t) O+ ?9 T
  255.       bSilentStep=FALSE;5 `+ ?( B; }. o( w$ s7 x# r1 c
  256.       bCompressed=TRUE;
    . |$ Y, t, w  i9 y, P2 U
  257.       strExtLocal.Empty();! t4 n- U  q  M6 m) [* C
  258.       strFullName=(*i).second;/ i; j( o7 ?# @% U: e9 @/ R
  259.       dwProgramState=AP_CONNECT;
    * l  ^1 n7 s& {$ D; P/ `
  260.       return TRUE;" O- I  M# K2 I  W- V
  261.     }: q  Z* k7 E! ]- V, X+ [
  262.     if(!bRestartUpdater)
    + }. P2 l% g5 A" ^% g, \
  263.     {7 t4 ~% z5 H! g3 s4 q- X3 @
  264.       int iCurrSize,iFileSize;, @  }! @1 H% N) d5 Z& B
  265.       iCurrSize=0;
    # D0 D6 U+ W2 f" P, z
  266.       iFileSize=UpdateList2.size();9 ]1 K" ]6 ^" J& [$ l/ I
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");# c3 r# a& R2 d1 j
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    * X( U7 }0 W4 L& t  A3 I
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");/ t8 @. P  Z5 t% \
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, d6 L% `0 r4 F. t2 X  \! s1 l/ m  `
  271.       Fclearf(".\\update.dat");( [4 Y% {" j" B. a* G! ]  I# r
  272.       Fprintf(".\\update.dat","Bloodyf\n");/ ?/ U4 d* B2 X! R5 W1 ^
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)  U5 h8 U* ~5 `' w( r+ _
  274.       {
    4 ?  A7 f- s' D2 a% \
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 K) L) u  Y6 m. Z' n* q" L
  276.         {
    2 c0 H: b0 I" g! u0 L
  277.           file=(*p).second;6 S6 E* U" f9 A. N. v+ A3 b
  278.           sprintf(filename,"(%s)",file->file);
    8 }: u  @  p6 A
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- C, F% A- x+ O3 }2 l9 N- a
  280.           iCurrSize++;
    " W% K2 K* v$ M: s. ~4 a% d3 ~
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    + V& v1 d' @' z
  282.         }7 S: |* Q$ g, S" n. ~
  283.       }
    7 ?) w$ }# v# [& y0 M; l+ o
  284.       unlink(".\\update.txt");6 t& J9 T5 a1 ]" _. H! e" t  u
  285.       unlink(".\\update.tmp");
    + n  K$ ], `# r: t9 @
  286.       Fclearf(".\\checkversion.dat");# C; K9 e$ |& x. o# m, e
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ M: E5 C- u2 P0 N' Q
  288.       if(UpdateLocal.size())5 V& k, `/ m: `% f% ~
  289.       {% i4 i9 F& q) c0 l4 b3 {
  290.         UpdateLocal.clear();
    . _. @, H; M8 Q+ T
  291.       }
    ! ^! e" i1 D4 O) B
  292.       if(UpdateFile3.size())" N/ I( ^/ Z( _1 H2 t1 y  J! T
  293.       {
    5 F1 }/ b5 H! ?; n8 P) j% }7 b% e
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 w# o' i+ g1 s  J- c: {
  295.         {
    & ~+ u( r, \6 q
  296.           file=(*p).second;
    , @( k$ r) `  X- C/ `, v6 B0 o
  297.           free(file);
    : ~  O, p+ f3 E- a
  298.         }
    " i. g4 R/ u( ]5 I
  299.         UpdateFile3.clear();
    2 i+ p- L0 q  a! O
  300.         UpdateList3.clear();
    : S3 Q4 a. o9 g/ F
  301.       }! r% s/ f& k4 Z9 m9 W. o
  302.       if(UpdateFile2.size())' F' Q6 d! l5 b) k. c' h
  303.       {
    ) N! k6 }8 R1 u/ `+ m  G6 h+ K+ O
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 b% S. M  N' w' a
  305.         {6 H: T- I+ h2 _% O3 I/ ^  S. N
  306.           file=(*p).second;# `' Q: G- h+ f4 a: L# D6 Z3 e
  307.           free(file);
    7 E/ p! r) c. H  [% k
  308.         }
    : [# Y& @" k& F
  309.         UpdateFile2.clear();2 b- |8 [' b% s/ C" b2 d' ^, ^  g
  310.         UpdateList2.clear();( {8 n! X  G, U; ~
  311.       }
    : s4 r9 O# o3 m' s# ~: K
  312.       if(UpdateFile1.size())
    " p) Y: N$ @/ {( J0 r- o
  313.       {
    : V& X8 {5 }2 D" b/ u4 d
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& d; @) N# Q6 k) s
  315.         {) P8 t  S* U. X" c' |0 K9 |
  316.           file=(*p).second;7 i/ g  ~4 I" R
  317.           free(file);
      d2 T8 v$ i$ f: b8 H! ^
  318.         }1 o5 D" [& G9 m
  319.         UpdateFile1.clear();
    % F( A+ v8 U/ L* H9 G
  320.         UpdateList1.clear();" D0 ?" A8 T2 J- y- R' U3 w
  321.       }. |& U5 h; T* [9 H# u
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ) B; B7 V5 I7 y
  323.     }
    ' H2 g3 L2 k  w+ n) w( f
  324.   }* ~& ]! O5 a  `
  325.   return FALSE;5 e8 g" _. U8 A' b
  326. }
    1 {1 |7 e( T& t. w8 `0 C+ }  m3 _

  327. 9 ]  B  A7 f+ c$ m3 Y& P
  328. void CRevAppApp::ClearAll(void)
    . O& U4 M2 d! g. ]& t$ B
  329. {+ P6 Z' T' e! A
  330.   LPUPDATEFILE file;
    " f! C8 }. }8 z7 ^8 Y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) R0 B* V! j5 O3 l) r+ {
  332. ; m& F9 V6 k4 |% G  L
  333.   if(UpdateLocal.size())
    ; q. ^7 j8 |1 a1 Y  j
  334.   {
    ( x. G, x% x  n; f" t2 Y! l
  335.     UpdateLocal.clear();6 G, `0 c' x: P! L' g( s: n
  336.   }1 k! _  y: K  w
  337.   if(UpdateFile3.size())
    ! W7 P% `8 W9 ]- ^
  338.   {
    - x$ E2 H7 O) A' l: z! d: M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + Q4 K. u2 }9 c8 J  h' ~
  340.     {
    : s6 h' t, {2 Q- y
  341.       file=(*p).second;
    / j- x4 P) L' B, v: g3 x8 b
  342.       free(file);3 Q" w9 J' J+ ]( Y0 v' U: n
  343.     }$ P# B8 H7 [) i+ R
  344.     UpdateFile3.clear();
    & Q! w% b' L! j$ L8 ~) C6 E+ M2 K. C
  345.     UpdateList3.clear();
    7 v- P8 h4 _  ?7 T  d2 x* j
  346.   }0 }: K6 X- Z7 v8 P: Z6 Q0 e
  347.   if(UpdateFile2.size())
    : J6 Q- e  R! p8 A
  348.   {, }" ?- m) }+ B; ]/ ^+ e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ c2 {) p3 y6 U1 U  S. ]
  350.     {
    # ~2 p9 n% G, z9 x# R
  351.       file=(*p).second;
    : e6 w5 E3 U, U: p" q
  352.       free(file);
    7 _% G# @5 h; C$ v* Z4 Q9 {5 ^, g
  353.     }- Q% r+ Q. Y4 b+ z  N! _$ U
  354.     UpdateFile2.clear();3 S! P1 ?! O8 p( I- D
  355.     UpdateList2.clear();/ w( X3 B. n! Z; {% ^! D
  356.   }: ^7 D' {! w, h- y2 ^7 h( ^1 P
  357.   if(UpdateFile1.size())2 @, W: f/ z$ g# u* {6 L; B
  358.   {
      b! _% X! T1 \2 D* V9 Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , _7 R( O0 C1 C% f
  360.     {
    1 E4 W; V( m! y
  361.       file=(*p).second;
    6 G  B7 j; Y6 b$ O3 E, \
  362.       free(file);1 c9 L: ?2 K" C( Z/ }0 r7 q
  363.     }, C& o5 O: `' b1 l
  364.     UpdateFile1.clear();4 `, r' M) Z4 j! o2 ^3 i
  365.     UpdateList1.clear();: z7 r. `" x+ t4 u1 ]$ ?, A6 B
  366.   }
    9 U7 D+ e2 [# n+ B$ h% }7 m+ v
  367. }  
    $ m  A  c0 I5 ]! a! j" l; h* n
  368.   
    6 f, L8 z" a! o. A: d  l- S0 {
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    2 V7 m9 ^& C9 |  z
  370. {
    2 o" _5 v) _% y/ y9 }: `
  371.   int c;
    ' {2 b3 \2 B( |' L2 _# f
  372.   LPUPDATEFILE file1,file2;: D9 \; R( l4 d5 Q& ]
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    8 r5 g1 i" s2 m. X/ }) j: E# {
  374.   std::list<CString>::iterator l;
    . U1 J& Z" Y, r
  375. % M2 o# x6 m) y
  376.   UpdateLocal.clear();9 w3 e/ \7 e  l8 P; r& Z  Y* r
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);" J6 Z3 q/ g1 G9 l2 x
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);7 Y! W/ I* z# u& N& T5 L/ @& W0 r9 Z* g
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : y4 q) s. x' G7 z' b
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);) |/ p4 B3 e" F& R  C
  381.   if(UpdateFile3.size())6 T8 L, m; c* ]/ F: R/ J, F
  382.   {! Q* s: D: O4 b, _
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)9 y3 ]' `0 k, ^& M2 M
  384.     {
    - \" {' ^1 W) f4 V* r, U
  385.       file2=(LPUPDATEFILE)(*i).second;* O- p, c! q* f3 g  I$ g3 E
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) p& X  _2 e. j& l! a
  387.       {. ]# {) \3 |' j3 c
  388.         file1=(LPUPDATEFILE)(*p).second;" m4 A/ h* ~. U" P: g: r& X7 c2 M' D
  389.         file1->vers=file2->vers;
    6 d: N* \/ G6 G$ P" _! t& S
  390.       }
    ) H5 F6 P2 z3 ~7 {5 G6 B
  391.       else, b! }( j$ K" V8 q
  392.       {& m/ I8 u, J4 a1 K0 N
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & ]* ?3 e2 g6 ]3 A  C
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));) G7 K; K. T& U) {3 Q* M
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    1 M) T, o0 s2 ^: b5 v
  396.       }/ E1 y3 J) C* Z7 G0 [- \
  397.     }. W5 P5 d" c3 u: \3 W8 T* |
  398.   }
    $ _, x6 J+ |, T; s0 P7 M. @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    - X6 I3 u/ e' F6 e1 H
  400.   {$ A8 h/ N  ^7 U6 N' f; q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())6 F* ]1 A7 m% E4 y. G/ ~) d" \7 J
  402.     {
    - |1 j! m$ ^2 F8 c# D8 ?4 }9 z. k* d
  403.       file2=(LPUPDATEFILE)(*i).second;: |& W+ j: W: B! Q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    . O" s7 P# F. o
  405.       {
    / W8 o0 [5 h1 e: L7 ?( k
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 Y! w# \+ h: D* [
  407.         if(file1->vers!=file2->vers)
    : [% p2 @, k, q/ P1 J  I5 S
  408.         {
    $ q4 }5 L7 t4 {+ O) w( u
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * T. \2 ^9 k( H2 O
  410.           c++;& f+ K0 k4 }* V+ J1 E& a0 R1 g
  411.         }" k8 n- S+ h0 Y: h: d1 s# `
  412.       }6 m$ i2 T9 ], c) O+ i1 v
  413.       else" P  D' u6 x# l+ \9 b7 B, o' ~9 J
  414.       {0 l7 d' V* _% I
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 ^) H& z; w: u6 i2 S$ B+ a; ~
  416.         c++;+ ^) V% g9 [. v- [  m. K
  417.       }
    : p+ E5 F9 m% Z5 w
  418.     }# `7 E+ T. J! K, M- x$ [4 J) P
  419.   }
    " T3 c! W+ _2 l  P0 i$ b; s+ p; \5 ]
  420.   unlink(".\\DownLoad\\update.txt");
    9 F( E  r  ]  X6 g
  421.   if(UpdateLocal.size()) return TRUE;( c( R! D+ W( j- Z7 W8 e6 _: r
  422.   else                   return FALSE;
    0 f& p6 S* Z! [, }! B# F7 I- n
  423. }
    ; U2 d# d8 D: \. w
  424. & ^; D+ P' J& j
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"& k5 C) K/ h! t" X7 `$ R( i# N, t; y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"1 @4 l7 Y2 i* W. x6 r( I
  427. 4 y* Y8 z  b) C2 M1 P6 \4 E" ~/ \- U

  428.   z- C4 h' Z0 c% Q% F

  429. - \1 n- V4 M$ F
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 G, s. V& n$ r, I* _* K; _
  431. {
    % I6 |) I4 S9 f- _8 n* |+ W0 v
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    , n7 J$ v0 Q1 Q; Y2 r9 C8 t% e
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 K' I  M: y: K% C7 ]
  434.   {- S- O1 \8 ]9 I0 z: t( O
  435.     char szLanguage[50];. G9 K/ R* z4 s6 R9 I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 ?. K: s: X6 l: M5 L+ g
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 H  a( k' c, \- g6 _2 X0 A, g. ?
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) F$ T- a$ `1 C' J
  439.     else                                   m_iLanguage=ENGLISH;0 b% a6 M2 z8 k$ V* c# F
  440.     char szRegister[100];' h$ |9 q( b% k* C2 H: q+ E
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 V: U& d3 G) ~& s: a
  442.     strRegsName=szRegister;
    , S: ~" L: L! N- S5 I( S
  443.     char szPatchURL[100];- t1 O/ N; B  R' d+ Z# r; V; I
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . J. K( B# W: d8 M. Q( p3 w
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% r1 D! u& I1 ^8 _+ p% c
  446.   }* G, b  o! f  V: f2 X& R
  447.   else
      k5 K- A! I$ ]8 |8 h$ b4 o1 K
  448.   {, E/ `5 v3 _$ b5 }1 R& Z
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! B9 h& X% ]! b8 s
  450.     strRegsName=DEFAULT_REG_URL;
    - I1 d9 I: n& T" |% R% b
  451.   }9 R, m0 R6 d' l
  452.   if(GetFileAttributes("hosts.ini")!=-1)  d% p. Z3 |' N) {. d# q5 v8 A
  453.   {+ m$ d( y! {( u5 E
  454.     char szIP[50];) m: n# {0 e* |3 V
  455.     char szDIR[300];
    ) ?+ g4 c4 j8 y1 r  x& `* R
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% u1 X& F* N7 j- Y& A9 Q& v
  457.     {) t0 [' \( s. }1 s9 i& o- A
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & b9 {: U7 G0 w9 G0 f; t) {1 m# O
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    $ a! D$ X, @% W; Z+ k
  460.       strHostName=szIP;( Z" |5 ^, L6 b( m
  461.       strHostPath.Format("/%s",szDIR);* ?5 d/ r+ j' s8 @. `3 A5 a
  462.     }
    / V0 F8 i# S! J/ W% }2 g' e
  463.     else8 U( c2 s1 p" v6 \
  464.     {
    * p7 E1 y* ]8 k* r! A5 }, Q3 _
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 v+ {9 t+ I7 u. e% O7 d/ y" q( |' G3 r
  466.       {9 r1 V* B5 T, U# `6 S! f* l8 b
  467.         char szLanguage[50];/ }- u* Y3 u2 A) Y8 B
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 W) S3 z6 V% A  R. i4 ~& O3 Q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " c, h3 m3 C# F. `2 r
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# @. J  X6 p! z. f  P
  471.         else                                   m_iLanguage=ENGLISH;
    $ ~% z! @9 W: ^# N& V4 h( x5 u
  472.         char szRegister[100];
    , {( F) e2 p3 }* z* d& c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  v8 H( ^. Z0 m! I5 A
  474.         strRegsName=szRegister;6 v& z5 P/ z% x4 N! t( P
  475.         char szPatchURL[100];
    ; e1 S; ]$ w$ x( R  M
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");0 r) ~: Q6 t% e& |- w3 U
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( Z# X5 \- j% j  [5 w
  478.       }! H* Y* i4 ^+ k- r# w0 C/ |
  479.       else/ F! E& s+ {/ l& J
  480.       {
    3 A- n7 N. ^( |+ p, R7 |
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& s. i" G! L6 [8 @* A% R7 Y6 G
  482.         strRegsName=DEFAULT_REG_URL;
    ( W3 n/ j- \* D
  483.       }: u) i1 u, |, |4 b' R2 o) w1 T
  484.     }
    . H# m) A) p- X, o& n
  485.   }
    # B/ Q6 }1 m' A) G; C
  486.   return true;
    8 X7 o. Q5 I- g4 J- z$ D- C! N6 V
  487. }% y. |. H) u* ~* F3 A, a

  488. , ?+ e3 M/ i/ |: u2 r+ n, _/ O% |
  489. #include ".\ZLib\unzip.h"
    . s( d( V. i0 m  Z& P9 J
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 M* {/ H: P. Y/ ]8 e% }
  491. /////////////////////////////////////////////////////////////////////////////
    & `% D9 O% h8 m6 w+ h* R
  492. // CRevAppApp initialization% B' e' ^, d* S4 g0 ?$ [1 J/ s0 F

  493. ) w6 j; o$ v) l  Z( J
  494. BOOL CRevAppApp::InitInstance()) h" j  Y. f1 J& b) ?; _
  495. {7 H8 v" M8 e0 ?
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];, j! r% ?( [; h2 j6 W, b! H( }
  497. & P! {- A3 z3 R4 [( i
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);" Z4 ?  e2 r4 O
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)); T( \: z$ e, N9 c6 D
  500.   {' B+ C0 o8 j$ I+ N4 B2 G
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    " n. E7 R7 }; g3 d* Q! X5 N) O  O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);# X8 W! M/ |  f9 @) [
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    2 N/ }$ W4 q8 R: _; m
  504.     {
    3 \0 _6 m/ i2 y! f5 {6 O/ N
  505.       strcpy(szPath,szPathTarget);
    . y* }( ^) D0 m0 s2 L9 }
  506.       SetCurrentDirectory(szPath);) C5 t& j1 U% R9 h4 {7 O& q* @; W! T& q
  507.     }% M, `8 h; g3 j+ L
  508.   }; r' `/ [+ N6 A0 q1 V# o
  509. #ifdef _DEBUG7 N# v4 ?4 d% I2 g* g
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 L) n1 V) ~0 \) I
  511. #else1 [  v( j3 z( A5 i
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ J' i& {6 P' _% f
  513. #endif
    + |% R+ |0 m9 w# {8 Q+ a9 p. w" {- U0 e
  514.   {
    ) M% K/ w: K: u1 g  O7 P# _
  515.     char tempFileName[MAX_PATH];
    ! O6 G2 m; E. X$ h# j2 c$ q
  516.     strcpy(tempFileName,szPathSource);
    + }: r4 m) N* A! M* R, _
  517.     tempFileName[strlen(szPathSource)-12]=0;+ G8 q8 {1 K8 i6 z" V& q1 N
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    : j' m: M) P7 j1 n7 E/ ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    / L$ x' _8 \6 P: R
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ B- \8 j  Q3 `7 a
  521.     return TRUE;
    ; o2 K* Y- w( T+ u
  522.   }/ [5 B2 I# Y* l
  523.   // Nuke 0118: Delete run.exe- ^) P% F, F' ?& L! T
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );. J. b# ?& L4 m' J2 z2 K& ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    $ V) J* N* V! Q0 h6 @4 C6 I
  526.   if(!ReadCfgFile("Config.ini")): G6 P' e; i/ W5 m8 c4 x  S1 B8 `) ~
  527.   {* |1 L4 e2 i$ [' X0 }5 V' }. H- R
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 X" x( `" D" C- B
  529.     return TRUE;
    . [3 `+ _. K5 h( G5 Q
  530.   }+ \" A$ E8 H6 r' u3 N, v$ K
  531.   HANDLE mutex;, x- Y" A5 P" o/ u3 O2 K2 S: \0 ?
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 h7 M  {5 C- I; a
  533.   {
    3 c9 S& ~( P- u2 h4 V
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    % c. ]2 Q# r4 A  M+ _
  535.     {
      l4 a" i) D- ~, K9 t8 z2 g
  536.       CloseHandle(mutex);
    2 e: q$ p" [/ k8 n# H
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);0 ^, V* n1 z6 t: A
  538.       return TRUE;# Z$ P: O7 W/ M1 G! {% x' K( x
  539.     }+ {% x( D, P0 ]; O: N; |
  540.   }  
      O$ L, w4 u2 ]/ Q) B8 F3 S! Q
  541.   CloseHandle(mutex);: E5 ~7 Z2 z) L+ r* o
  542. " x# k& v$ Q+ f" ~2 i; Z9 W  x
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    & M# ]  P3 a2 o; K2 Y  x: _% }# X

  544. $ I' o: U5 r5 b6 ^0 g4 n6 U4 U
  545.         AfxEnableControlContainer();
      p% h3 b: |  ^9 M4 B, _1 a  h
  546. . R1 y2 o" q* e2 N5 J
  547.   bCanUpdate=FALSE;" p8 M) Q' \6 s
  548.   dwStartUpSteps=1;
    , Y1 {4 C, e: z# |1 D
  549.   dwProgramState=AP_NOTHING;" z! c' P: j( [- q' c( F) R1 E
  550. / g: L- H) I. x; G1 P
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    9 e* t) U8 f* [8 K

  552. / A2 J$ R9 @0 q& ]% Z2 I4 e
  553.         // Standard initialization
    # f2 R: a" d5 {7 h
  554.         // If you are not using these features and wish to reduce the size
    0 S+ r- ]" J4 {' ~( o" Z
  555.         //  of your final executable, you should remove from the following; ?1 a; r9 T0 k# Z3 I, b  E. g
  556.         //  the specific initialization routines you do not need.# Z( J% G* f7 b3 U1 ?/ X

  557. : [1 _5 Q4 i& U/ u& x. D8 m) u$ _
  558. #ifdef _AFXDLL
    ! E5 V2 J/ a( v2 E- ~1 j! B
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    0 f6 N: h9 m0 J$ m
  560. #else
    + n8 R/ t4 O8 }. B  }; J; `" ~
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically/ Q2 b7 o( a2 m
  562. #endif
    ' P5 o8 d  m5 q/ K) y* S: b1 e  `$ l
  563. ; p3 j7 g: b! z$ Q, L
  564.   dlg=new CRevAppDlg;+ P0 U  t3 k  W7 _! a! B
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    8 o( X4 L. ^5 B1 }2 X5 B3 Y- f
  566.   dlg->ShowWindow(SW_SHOWNORMAL);: z& s; d# a7 o  Q, h9 x, s
  567.   m_pMainWnd=dlg;
    2 z6 m- G3 D% n$ a  i
  568. 9 _8 B9 G, N' @& q* U: T
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);- W! _$ c/ a* z9 a- r# i+ W' q9 k! S

  570. & i$ ]8 z: f5 ?: m  b! K; U9 v! g
  571. //  GdiplusStartupInput gdiplusStartupInput;
    6 \  }. c1 S1 [2 k
  572. //  ULONG_PTR gdiplusToken;
    ' s( ^+ p1 S( ^; i6 e- q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    : J4 W  ?9 b: S* Y, h1 i( W

  574. 0 Z5 f0 A. ]* s2 M4 b6 \2 D
  575. //        CRevAppDlg dlg;& K- |' B$ Z* p' P
  576. //        int nResponse = dlg.DoModal();
    9 L  i1 m" e+ ^' n/ J
  577. //        if (nResponse == IDOK). s) U! Z' \/ k5 Q" S  g, G$ ]
  578. //        {) C: E  M/ k7 C$ h( w/ ?
  579. //                // TODO: Place code here to handle when the dialog is
    ) y6 Z% B, H. C5 Z- n/ b
  580. //                //  dismissed with OK
    , O) H/ i! @+ w+ e
  581. //        }
    ( b. X- d( Q# B- ?& s: T
  582. //        else if (nResponse == IDCANCEL)
    & ]) |! c: q. I+ L# d
  583. //        {$ e7 j+ T9 S1 _1 c4 V% ]* D" \' D
  584. //                // TODO: Place code here to handle when the dialog is6 i' |4 _3 |4 Z4 i6 @1 e6 O
  585. //                //  dismissed with Cancel
    * `/ ^# [7 J; k
  586. //        }6 ~1 `6 O9 u8 D% W& C
  587. ' A) Y- t" i9 S0 ]# [
  588.         // Since the dialog has been closed, return FALSE so that we exit the3 E1 C; A7 B$ y8 w
  589.         //  application, rather than start the application's message pump.7 a, c8 b+ h: B
  590.         return TRUE;/ ?2 d! `) K! z( p* ^
  591. }9 O# v: r3 B5 e8 o: ?
  592. 5 J  K1 Z. K# M: h2 m' U
  593. char *CRevAppApp::strtok3(char *pSource,char *token)9 j7 T( D: d, X6 l. C
  594. {
    9 H6 `4 F; h* _5 F
  595.   int i;5 g( o: z7 S; w
  596.   char *szRet;
    & M% u, ^: |  S1 w( u# s- V
  597. $ W  g' X. }  G
  598.   if(pSource) { itoken=0; sztoken=pSource; }9 v6 s3 d7 r* W9 c# k
  599.   if(sztoken)0 J' w% ]4 }0 y& S
  600.   {5 v, _1 d. k% V7 g' O1 d! S  \5 F
  601.     szRet=&sztoken[itoken];
    7 M+ U. d% Z5 F
  602.     while(sztoken[itoken])! a0 ~4 h* t. l! H
  603.     {
    % B7 ^& i% T, f: g7 F! A
  604.       for(i=0;i<(int)strlen(token);i++)
    , Z+ ^* {) P5 n4 \
  605.       {
    1 A2 m" Q6 k4 ^7 J5 U- x* m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    6 g1 p4 w: n" d6 ^( l
  607.         {
    ! A* _5 s) s% r4 D
  608.           sztoken[itoken++]=0;, L, e. j' s. G3 D
  609.           sztoken[itoken++]=0;
    " c: |9 w3 m8 I6 f9 `' j# M
  610.           return szRet;& t( M" T! K2 K) A1 o: N- s
  611.         }
    : Z) `; ?! X8 O( |1 v
  612.       }
    * z  f2 {3 s! ]0 H7 p  x; Q1 \
  613.       itoken++;) B& v$ s0 E9 V2 t' x
  614.     }% v' A/ d% N3 g8 d* v$ }) P6 z
  615.   }( E/ M7 \: ~$ v3 k
  616.   return NULL;
    * Q! b" i: x" U6 n/ j6 h: v. K% p
  617. }$ m  K2 `: ?4 N- o6 H, @
  618. 5 M) T1 y# I! T; F# V) v
  619. void ProcessProc(long Total,long Current)
    : O  s2 V5 f- y8 v
  620. {
    , P0 p. A9 K& Z2 D) V3 U6 V
  621.         MSG msg;
    1 z0 u$ R1 O$ Q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);3 O( C# l# Z! H
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    # n# h8 G# q& ?" g
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    / J( i, \6 U5 z
  625.         {( I4 k- P: q) d+ L0 i+ T
  626.                 if(!GetMessage(&msg,NULL,0,0))
    + X2 q: C- I% o3 y( i
  627.                 {" v8 l$ Q" d. K: _" ~1 C' e5 j: ~
  628.                         return;
    - ]7 |: G/ D, U! Z) s
  629.                 }
    & u) N3 N/ a. C3 X% ?7 z
  630.                 TranslateMessage(&msg);
    6 c% J2 t  O& t# c+ O& Z
  631.                 DispatchMessage(&msg);% h8 Q* T1 G# g; m0 p
  632.         }        ! D6 _2 Y; T  K% X
  633. }
    9 B2 J4 ]; P" ]4 l
  634. 9 D- n0 L# P# W
  635. BOOL bFirstChar=TRUE;
    7 I5 O8 R$ T5 b2 J$ W4 `

  636. 5 u* b# l) e! D, t8 [  [, e
  637. BOOL CRevAppApp::OnIdle(LONG lCount); E) Y/ h7 ~6 ]
  638. {
    # v3 ]1 f% s! Q
  639.         // TODO: Add your specialized code here and/or call the base class& I2 A0 D+ n0 C) o5 N; _1 X8 z
  640.   switch(dwProgramState)
    3 |$ G4 p- V3 V  T4 l. H5 w5 `
  641.   {* w9 ^- p" S0 ?& @5 Q4 `
  642.   case AP_NOTHING:
    ) U( Z  k, k) j
  643.     switch(dwStartUpSteps)& I+ l. ]* n2 G# T
  644.     {
    ; @) z' z+ b9 z: e
  645.     case 1:) U2 S0 m8 S) A( {* Z" _, |' U1 D
  646.       {
    7 j, W6 w3 B5 X9 I' Q
  647.         int i;( W7 R! T$ I6 v& X3 j8 |+ K
  648.         CDC *pCDC=dlg->GetDC();, ^' A( }% C2 Q, z& ?0 s  y& M
  649.         HDC hdcwnd=pCDC->m_hDC;' F- ?$ F3 C7 ?
  650. //        Graphics graphics(hdcwnd);
      B) ~( y/ Q" K' n4 C1 i6 k
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");+ Q* j6 G% ?9 N: [2 [
  652. //        INT iWidth=bitmap.GetWidth();" P0 Q% ?% K4 i- `2 w; s
  653. //        INT iHeight=bitmap.GetHeight();# y& ?8 H# A# f1 |/ E& ^- }
  654. //        Color color,colorTemp;" c6 ^5 }/ S( b$ \+ i
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)/ Y2 {3 M3 A/ X9 W
  656. //        {$ f2 c1 I: ^( A
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)8 a/ t7 ]: G% p+ E$ v
  658. //          {
    4 Z( ]6 j: T* d; F6 b
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    5 f+ r  F, ^( q( a' l. [
  660. //            colorTemp.SetValue(color.MakeARGB(( Y+ T! [/ @, R* R8 M% L9 s
  661. //              (BYTE)(255*iColumn/iWidth),* u8 d; w, }! o& ]# h/ m4 V
  662. //              color.GetRed(),
    , B1 R  N: f3 g
  663. //              color.GetGreen(),
    7 Q, U5 z  _9 \' q" x
  664. //              color.GetBlue()));
    " k& I% x0 C* v, n. x
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);/ k7 w9 P* I$ g. W
  666. //          }: O) U2 p% U7 N& D) C$ M
  667. //        }. T% D  E2 Z0 |' y" f  V0 r, T4 {
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);% b# S" \& t' D  [
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    6 H3 I2 z8 ^# N
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");+ Y' d: i" b0 ^  Q% f
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' Q) X9 X1 ?2 B" J. q- t% t
  672.         for(i=0;i<240;i+=8)
    : c2 L  Z6 S. G. v% E
  673.         {
    9 ~" _( ^2 F. C. Z; M' P
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' q$ C3 \' {3 T, d
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " P3 z2 C" z" Q; m4 q2 p4 K; V& Y0 j
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; p1 O( D1 G/ B
  677.           Sleep(33);
    4 T" \0 u; p9 W5 W  `7 }
  678.         }( k4 l$ }* y9 n. S, T9 F& u1 Q" ^
  679.         Sleep(1000);
    8 K5 n) g; ^/ ^. w! H/ j' R( n
  680.         for(i=240;i>0;i-=8)! E  W$ a1 k8 m, z5 ?; }
  681.         {! w* R8 W: |- G, V# v
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);# x' m; |- T6 F6 y4 U
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 j! C+ f# T3 P! g2 K6 _7 C) G6 P
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- H% _% o1 T, c* M7 K. ]  n& ~
  685.           Sleep(33);" ]! ~3 Q3 D+ M2 o9 W: B# A" c! B
  686.         }1 g1 i/ z. X7 c
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    $ H  M6 r6 I: B/ b& W: }8 V
  688.         dlg->ReleaseDC(pCDC);0 C( t# e3 l  S3 Q) |) A6 l  v/ l
  689.         DeleteDC(hdctar);0 i( l+ I" R" Z' x7 M
  690.         DeleteDC(hdcsrc);" D' w/ L) G( P5 D$ w  `! E
  691.         DeleteDC(hdcorg);
    5 v# x  u' b# @
  692.       }2 }1 O0 e/ }' L1 b0 ~8 W3 r
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);& Q% F, w$ o2 B  \+ j
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ! t% r7 c% q' N# i6 P. V
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    & X+ F6 M* u4 `/ ~
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    8 u7 B! Z3 d# ]: D4 w
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; Y: |/ F8 Q0 u/ d
  698.       if(!Dn.Connected())7 f1 j6 @' G: Z( O8 y
  699.       {
    / T8 x4 i6 T; W) y$ q6 w
  700.         dwTotalFiles=1;1 L) K0 P5 Z3 I; N$ m- D# a
  701.         dwDownLoaded=0;- h+ w4 B" a9 W$ I& a- O* D& N, q
  702.         bSilentStep=TRUE;
    # X* q0 k0 M- j) P! A, K5 c
  703.         bCompressed=FALSE;
    2 S0 j, M0 ]% Z6 ^- }9 b
  704.         strExtLocal.Empty();7 g/ m' m4 s& V- Y/ S) i3 g
  705.         strFullName="readme.txt";* C) t. E+ J5 [2 M1 \+ @, p
  706.         dwProgramState=AP_CONNECT;
    4 w/ ~& I% T0 g
  707.       }
      R: X& r6 P( c$ ^, L) q8 I
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 h0 s# s" i1 _2 t9 y4 y; W$ S
  709.       dwStartUpSteps=2;$ R0 D- A! W5 d4 w( F9 O. f$ U7 A
  710.       break;! h: o2 N2 G# X
  711.     case 2:; Y' Y) v. a+ t0 G9 f) V
  712.       {
    ! ]1 F2 ?/ J+ L; `
  713.         int iEOF;
    3 N9 X# G, H) _* ~( C+ Q; A' x
  714.         FILE *fp;
    ; n* o" t4 ?; G; r: U( B
  715.         char szString[512];+ V2 `- Q6 O$ q, i  I' ?
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 O8 s! b  F- d8 y
  717.         if(fp)& u8 I6 k: J0 h5 j5 E3 X) l2 o
  718.         {& @0 o4 P5 w& [) _" ?
  719.           do4 L8 u' {2 V/ j! p
  720.           {7 x1 y+ Z' I5 O* f
  721.             iEOF=fscanf(fp,"%s",szString);
    9 I2 V2 P6 u9 i9 ~7 H2 r' E
  722.             if(strlen(szString))
    " [; q8 t' m. @1 H# h
  723.             {9 x% f7 T. K3 \3 A# K
  724.               if(bFirstChar)0 K- r1 p) Z$ A: Q3 A* ^" t
  725.               {. P% H+ D& Z* W9 E
  726.                 bFirstChar=FALSE;
    : e5 ?/ R( `9 m( B  O& D4 }
  727.                 bConnectIsBig5=FALSE;
    0 c+ v1 S4 }, L1 f: q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;3 Z3 E8 S) e7 T' Z: z% D. R6 r5 _# H
  729.               }- W' N) D% |$ y- L# ~$ i; q4 C
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));* Q. F! w. Y/ E
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    + j) t3 p5 \/ k4 w0 j
  732.               dlg->m_ListText.AddString(szString);. E* v! ?" \  |. N" u' S
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. T# n/ _- S, b! e1 g  m! w) ~( e
  734.               *szString=0;: W) X% L8 K) B, m% }3 A1 N
  735.             }# L# c! `* s( s! T6 m8 p
  736.           } while(iEOF!=EOF);
    " d% f2 c4 J: Q+ Q' x0 D
  737.           fclose(fp);+ c2 J: F! v; Y7 g
  738.           unlink(".\\DownLoad\\readme.txt");! r8 W8 W* O" m0 x
  739.           dwStartUpSteps=3;% D4 i$ ?9 t, i# [9 U
  740.         }, M9 }) S* b0 q$ |! x
  741.       }
    3 o. b+ }+ b3 H. ~* ~0 c3 n
  742.       break;
    - D- Q# y. y6 P
  743.     case 3:4 i+ Z+ _: W6 X! N4 z* y
  744.       if(!Dn.Connected())
    3 {3 ?) }+ C4 _
  745.       {
    7 `$ `3 c  T! q8 |5 Q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 {8 A( _5 d- V: f8 w$ `6 t7 {
  747.         dwTotalFiles=1;9 c$ c" X; c2 {2 d
  748.         dwDownLoaded=0;
    ' k4 y! w5 v, S+ H2 q
  749.         bSilentStep=TRUE;
    4 S6 i( W& n9 t" H' R% h1 q
  750.         bCompressed=FALSE;( v6 `4 I: V* c1 G# g
  751.         strExtLocal.Empty();
    - G3 R' \# f/ Q8 {3 A) w7 U
  752.         strFullName="checkversion.txt";, l" S7 F% T& v
  753.         dwProgramState=AP_CONNECT;9 j" t# f6 Z, T9 H! Q
  754.       }
    8 _. K& B. k, f( d. K
  755.       dwStartUpSteps=4;
    : l8 L. e/ g, k: _* Q, q8 D9 ?
  756.       break;
    & e% ^% [: p7 _3 K7 o3 d
  757.     case 4:
    ) h; I. ]6 K* P  g+ D7 P9 j
  758.       {2 `5 R* h2 d- Z6 |
  759.         FILE *fp;
    ; A9 X6 G6 x6 `: l9 C
  760.         char szString1[128];
    2 Y3 ~8 F2 _+ o
  761.         char szString2[128];3 j5 g' \, l9 K: K+ I
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 R; Q) K7 s" T4 M
  763.         if(fp)8 V% x! J7 V. \5 e7 ^# f' }- z  k. ]
  764.         {
    0 p2 g" c! J1 Q3 I5 ^* a
  765.           fscanf(fp,"%s",szString1);; W2 {% h, {# ?- \9 E: H7 E# [/ w3 }
  766.           fclose(fp);, W5 W/ ]" q, W; w4 p! Q
  767.           fCheckVersion=atof(szString1);* n% |  E( h# N& J
  768.           fp=fopen(".\\checkversion.dat","r");
      d1 }* G9 _7 L7 U, I3 K+ f& f/ o" {- G
  769.           if(fp)8 U% A: A& I# }8 B$ n5 Q
  770.           {' Q" ~4 X8 ]5 C% H  Z
  771.             fscanf(fp,"%s",szString2);! Y+ n* v0 k, z0 t
  772.             fclose(fp);4 n. ]# u+ @4 }/ e* e2 |
  773.             if(atof(szString1)!=atof(szString2))( Z* b4 ]5 B1 V, Z4 ~! D  h, `# W. _
  774.             {
    ) c: R: t+ c8 s6 z
  775.               if(!Dn.Connected())) S: ?: f+ r1 ~+ v& B; e; z- r
  776.               {3 D+ v1 l9 r8 V) I
  777.                 bFirstUpdate=TRUE;* N+ X, P9 y4 g; f  l
  778.                 dwTotalFiles=1;- k1 T# P; Y, {5 M( Q
  779.                 dwDownLoaded=0;
    ; r+ i8 Y5 l2 }8 b  l* ?
  780.                 bSilentStep=FALSE;
    4 L( W6 ]/ ]+ r( M
  781.                 bCompressed=TRUE;
    ' {4 T1 Q! ~; n5 ^$ p
  782.                 strExtLocal=".\\DownLoad\";
    9 x9 B4 y  D) b8 E' }
  783.                 strFullName="update.txt";4 l8 h! e& w% E* F
  784.                 dwProgramState=AP_CONNECT;
    / G$ E  z6 d6 h  \( A  v5 M. y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, {& K/ S) u7 X% f; W
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 X  H! s( ^+ A& H* t9 y6 S
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");) {+ l5 \) e/ _4 ?# p7 t- P2 a

  788. / v+ ]/ w5 f* y8 F8 l4 t8 D( V  r
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ n2 U" Z& ^. K* z2 K7 Q
  790.                 unlink(".\\DownLoad\\checkversion.txt");. |$ d" X4 z% R% O$ @! n
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    3 I3 M1 C6 n9 f* o
  792.                 {% ^, {: C: o( t2 C
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : W6 L) a% T4 _3 [$ H6 Q) G
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    : U6 B1 E9 \/ z3 P& P( @
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");+ K0 Y, Z, P) G, l  L! h' k/ c9 H1 v
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" G) X' T  N7 y: w. L1 `* R
  797. 6 u" i9 Q, d/ `: h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");' K9 P' f2 p5 Z: U* P& W* y5 F
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ N0 L, f3 q" C6 U# N2 C, [
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");( Y% }3 b" ^# {' y3 Y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 ]3 k/ u! M; Q( N
  802.                 }
    1 e# W% W' Y/ w& ]  p" J( U
  803.                 dwStartUpSteps=5;
    6 C; y8 H; L; n0 y1 F
  804.               }
    ; x/ v# S& ^- U$ M
  805.             }( o# J" b& F) i" g
  806.             else
    ( _. Q8 g' P! P4 @
  807.             {$ D5 T: L" n( X: q9 O3 k) i
  808.               unlink(".\\DownLoad\\checkversion.txt");+ B$ \9 }( ~* O& I" N6 `6 u4 ]
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& k2 L" w1 [3 x0 u5 h% H
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");/ Y# X7 q* g( U: O( {0 V5 e
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ X4 w# U9 I3 T
  812. # S9 C9 z  }% E# G) [: [! ~
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) P1 t! T3 i. P7 b4 O
  814.               dwStartUpSteps=99;
    + t* n, L0 E2 y8 r# F
  815.               bFinishUpdated=TRUE;
    % C4 i' L% `0 u% }3 I5 t
  816.               bCanUpdate=TRUE;0 o" ]3 [5 D9 J0 }
  817.             }6 D: c7 l( k2 T: E
  818.           }
    6 }9 G, Y+ f2 S: T' j) E. w3 c: s0 Y
  819.           else
    0 X$ m9 E8 H7 J$ K( a1 ^" _- ]# S
  820.           {2 |' e' `# L2 @6 h
  821.             if(!Dn.Connected())* z: n) t  w% {) d3 \2 {
  822.             {
    - P' O, X+ ]0 f7 ^$ E: u- D) k
  823.               bFirstUpdate=TRUE;2 L7 v* Z3 i8 r% t
  824.               dwTotalFiles=1;
      ?, H- T) l9 t: x( r
  825.               dwDownLoaded=0;
    : S8 E% L* @3 c1 w7 j. a1 W
  826.               bSilentStep=FALSE;  l  A' r1 W$ }
  827.               bCompressed=TRUE;+ N9 q6 I# H1 f
  828.               strExtLocal=".\\DownLoad\";
    7 r' X6 `1 [" O; Z  V/ D2 h
  829.               strFullName="update.txt";
      P" ?6 H% Y( Y* J) b+ v8 S
  830.               dwProgramState=AP_CONNECT;
    1 ~3 n; E% j6 E' C+ T, a" d0 L4 g
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% M) \' C* b% G9 K0 t9 O
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 ^1 o0 A1 u- B& D) A! }  Y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + O) C. O, i2 {8 p: y: T; @# _6 l- ]
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % F' K. ?% I# G8 L7 h' b5 R% s* G
  835.               unlink(".\\DownLoad\\checkversion.txt");
    - y7 W2 c* v8 Y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)' L4 I1 a0 {2 F4 K  e. W
  837.               {
    ; V1 e. J; N; n0 Y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");3 q" Y% ?# ~' x# D2 Z! Y
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ! D+ v* G4 C( o. Y% {
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    7 z6 h% E; q/ r" V$ G5 v4 B* H. Y. w: p
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 g+ y& B5 e" T4 W5 U
  842.                 % W! }" m# I+ l5 E! F% }
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * x! F: c+ i' A# r6 z$ v8 w
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: u* m+ e- U9 A. j  v
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - v/ Y1 v- [1 t% [$ t9 F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - k  N( _3 @0 r. V8 G
  847.               }6 C9 l  E7 r6 @8 F
  848.               dwStartUpSteps=5;- \5 G5 B3 l- N( O, A% a; S- w
  849.             }; o* W. j6 T0 s
  850.           }% A# C& K" G- R+ h6 c
  851.         }- t+ H- [0 f$ b4 n
  852.         else5 l7 F/ F+ a5 P) ?6 R" S
  853.         {5 t6 a" ?. a3 p  P
  854.           dwStartUpSteps=3;
    ( t& n* l2 b" _/ B; v
  855.         }
    9 r& Q# ?; \) O1 E. t
  856.       }
    . D6 U* J/ d7 d! m1 R: F# ?
  857.       break;
    ' {) `5 |9 U8 e8 d6 L+ y
  858.     case 5:; b7 C# M+ \6 W) C; T
  859.       {/ U3 r9 D6 q+ Q, l5 a
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) }9 p# ~! n  V( O
  861.         {+ I* `% f- v4 k- @3 r6 J
  862.           int opt_overwrite=1;9 t, Z: N* G. @% B# L' }! A1 l
  863.           int opt_do_extract_withoutpath=0;: i4 F* S- N( d# P5 {* A  _
  864.           unzFile uf=NULL;
    9 Y, p* G5 M. F6 q( @& Y

  865. ) ]' @5 n* i' V. L- e! g" {
  866.           uf=unzOpen("Wsa.zip");
    ; U( N; F% \& p) W, T
  867.           if(uf)
    6 u: n8 B+ i) g6 {2 ]; i
  868.           {
    ; b8 }) O& a& C; ^0 e* j1 c
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    , `1 }6 `& \1 V2 n7 T3 V
  870.             unzClose(uf);
    * \7 f3 e2 J8 {3 @
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    % N' K+ h- b; I8 n5 G
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");, t& q7 ~; X" q3 {6 ]
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    . \+ o8 x3 I6 J$ `- q: K
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 G( n7 D4 E4 }) p
  875.           }
    % _' f- Y* A; a) r' \0 I% ]) s# ~$ R
  876.           DeleteFile("Wsa.zip" );# G! J; v, G" s! B7 i& |
  877.         }- t( K# D, H1 K# H* q$ g

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

2 K6 V# r+ E: J7 G  N7 k9 u0 ^8 I; u# _2 E6 y

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

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

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2025-12-1 00:11

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表