找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
4 Y9 m, a! A+ A5 E( L3 z* [
  1. / RevApp.cpp : Defines the class behaviors for the application.
    . d( t& ?1 F3 t- [
  2. //3 K- e7 t- C$ X5 K% b1 k
  3. 1 l+ m' I; K6 q3 K& I
  4. #include "stdafx.h"
    4 H9 y: w0 h& a7 m# ^/ U7 S

  5. 3 [9 n. l3 o% S& S
  6. //#define UNICODE+ F6 w3 V0 c$ k$ ^+ }  y1 |! L
  7. //#include <gdiplus.h>
    1 P" o1 x( N7 f" f9 c
  8. //using namespace Gdiplus;
    9 P6 H6 m% `! H7 J- }7 L3 _
  9. % i  t: r$ {6 {8 J) e
  10. #include "RevApp.h"
    ( j. B( f# k4 x
  11. #include "RevAppDlg.h"* a6 f' o9 z) q7 t8 {

  12. & d7 N3 z" a  e. N$ U' V
  13. #pragma warning(disable:4786)' C' y. ~3 e) b( P
  14. #include <map>! W% L) @7 h5 B! x. E" Q5 ]! k5 j
  15. #include <list>  l6 j5 H$ t; z. u5 P
  16. #include <direct.h>
    ) C6 W% q' `; `1 ]

  17. 8 }2 k% a$ p5 K5 O- S7 r5 N, G2 k
  18. #ifdef _DEBUG7 k# k  I' d5 S! o
  19. #define new DEBUG_NEW
    & X+ }7 @+ B& z- {, q
  20. #undef THIS_FILE, e& h4 S  R' |
  21. static char THIS_FILE[] = __FILE__;
    $ {$ d# R5 H) q
  22. #endif9 X' ~: e/ @$ R' ?9 C7 p# t
  23. #include "SkinResDef.h"% \: P6 _1 B+ c* V
  24. #include "ChangeBG.h"- \/ r) c3 \4 d8 P2 I1 e
  25. #include "AFXINET.H"
    $ }* K) z* C; O- w

  26. : }0 H! S. b4 z0 p5 U4 I8 X; f) r
  27. #define TRADITIONAL_CHINESE 0
    ' u. F0 y: M; B! x
  28. #define SIMPLIFY_CHINESE 1( M  f1 e; _7 D, E) m7 v2 d
  29. #define ENGLISH 2, q" i% q7 Z  y+ A$ ?) ^6 j
  30. int m_iLanguage = ENGLISH;
    1 A+ O. Q- ^; B- n
  31. /////////////////////////////////////////////////////////////////////////////
    * G+ Y- s# `' L( o7 s3 `
  32. // CRevAppApp) z2 `- E# X* A. _) F

  33. 9 L4 I. ~+ M+ g* d& N
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)8 d% t8 {" z; G1 ^
  35.         //{{AFX_MSG_MAP(CRevAppApp)- r9 G7 i0 R7 h2 O
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.& G, ^4 P* T2 Y8 |. Q
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!* b7 W- T4 F5 d0 W8 i2 ?. e
  38.         //}}AFX_MSG$ J* C- ?$ h6 F- W" z; @& s' D) B* |
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)' d. u! Z, w- g2 P% P) s
  40. END_MESSAGE_MAP()3 D2 N. d: Y  o$ e6 h
  41. % S' q: s" ?( b, F2 I5 n* l
  42. /////////////////////////////////////////////////////////////////////////////
    - M9 o; W" J$ b  G2 ]9 G5 b/ [4 K1 f
  43. // CRevAppApp construction
    ' I4 N8 f% h' Z5 h& z! A  X+ e

  44. 0 _* y7 ?; `6 }( M1 i
  45. CRevAppApp::CRevAppApp()
    0 j+ ~* w( n6 M5 Y
  46. {
    8 }. {! E, e7 J, Y' p
  47.         // TODO: add construction code here,5 Y3 F& Q& G* ^+ h* x
  48.         // Place all significant initialization in InitInstance
    * Z) a3 I. R! z" X9 g" m% T
  49.   bDisplayIsBig5=FALSE;
    : ]) E! q. d8 [; M
  50.   bRestartUpdater=FALSE;/ n0 ^0 a% k# i& d+ @% O
  51.   bFinishUpdated=FALSE;
    . Z0 y5 {2 J+ p: g
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;5 {+ F  o2 ^. J4 ?
  53.   InitChangeDataBig52GBKS();2 {+ Q' C  @" E) ]3 I
  54.   InitChangeDataGBKS2Big5();- z) k3 J0 K5 m, I& m
  55.         //4 z  R7 O+ b6 t9 b- s
  56.         bClickRunExe = FALSE;
    ( {5 ]6 f8 [) B1 i
  57.         //
    7 A/ Q; y7 |$ b/ c8 x+ |( k
  58. }+ ]  p9 W1 x6 s

  59. ! w3 \* \/ J0 {. I1 G
  60. CRevAppApp::~CRevAppApp()% P! z5 n) o7 l1 n
  61. {8 j7 a+ E6 E1 @+ \1 q/ q9 N; r" L8 k4 r
  62.         // TODO: add construction code here,5 n6 d4 [6 T! B
  63.         // Place all significant initialization in InitInstance/ ~: w: v) c% p& l7 {) L
  64.   EndChangeData();7 I" d) r6 K3 `7 I' B' s9 z- M4 X
  65. }
    + B. a$ V& v# [8 |% d( M3 ^, k
  66. $ z* [) Z5 l3 Y7 t" ^+ {4 Z
  67. /////////////////////////////////////////////////////////////////////////////
      I% a* f& b/ S6 \! U5 u8 s& I3 R! c
  68. // The one and only CRevAppApp object9 t& m$ l0 l! u. G

  69. # h. \) ?! x0 Q. ~# m% w- _) x  W
  70. CRevAppApp theApp;
    " p. o- |  a* \0 g2 P
  71. 6 N; O- g! X5 j8 f: u* ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 Z8 `/ u  Y% K: Q
  73. {
    * O9 z: n3 L0 F9 j
  74.   int iEOF=0;. I, d! ?- _; t+ T3 i
  75.   char szTempName[MAX_PATH];4 K2 Z. R5 c( H$ h
  76.   *szFileName=0;1 e1 w4 F( a; N# m1 t. Q# P
  77.   iEOF=fscanf(fp,"%s",szTempName);
    0 x0 m# P$ a' P6 d6 D: `0 s, \/ k+ ^
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # o! }6 ^6 M# }# z, ]) @2 y; f2 `4 c
  79.   {. ~  a. ~2 T9 |, I- r
  80.     strcpy(szFileName,&szTempName[1]);' k4 J! W# s. ^
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
      g3 a4 m, {. s& d& n& j
  82.     {) F0 X8 l8 z' A2 g, p: o' L
  83.       iEOF=fscanf(fp,"%s",szTempName);  ?0 V0 W9 f/ d% m+ X/ O
  84.       strcat(szFileName," ");
    ( J, s7 P( a1 W! e) N
  85.       strcat(szFileName,szTempName);, D  q) m7 h& X
  86.     }
    2 T1 A( R4 y! N7 t1 B6 g3 S1 ~/ A7 Q
  87.     if(strlen(szFileName)>=1)5 q, X2 f( }/ k2 p8 [( H
  88.     {3 U* W/ W" [/ u' u% ~! f" [9 s' [
  89.       szFileName[strlen(szFileName)-1]=0;
    6 ]9 e: ~$ x$ x' J9 w  K0 h3 O. B2 g
  90.     }& V4 k2 ?$ C! y4 t8 p$ r, X$ S
  91.   }
    $ ~. G* y/ B( J6 ?/ A1 ^
  92.   return szFileName;9 ^& R0 y3 r/ z6 e2 u3 e% }" {9 h
  93. }4 k0 |. F* ~: f

  94. / o4 _7 n2 X+ D1 Q. {
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    - l4 ~# r$ u% }) @
  96. {
    9 T0 Y1 X( i0 k* U  q- R
  97.   FILE *fp;& o: l, X% A* X! N  ~0 |
  98.   char *key=NULL;
    4 p6 D  e" o+ Q  Q/ ?
  99.   char version[MAX_PATH];; N9 |3 T3 ^! ?; A
  100.   LPUPDATEFILE file,olds;
    4 T/ m- ~4 q: h: J
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    - V0 b3 b- ], }! l

  102. 3 c/ H9 O( |) ^" }8 y( v# l
  103.   UpdateList.clear();( _* J1 P& y3 `% V  V
  104.   UpdateFile.clear();, o/ ~1 O4 Z+ ?+ h
  105.   if(GetFileAttributes(filename)==-1) return false;
    / N+ y$ h% S2 m6 K) a" E
  106.   if(!(fp=fopen(filename,"r"))) return false;
    , `! i  B% W) N% p+ |4 b; @9 ]% i
  107.   fscanf(fp,"%s",version);# B/ X2 M, H! x2 ~
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . s7 N5 b4 u% P! l* N" ]' H
  109.   while(fscanf(fp,"%s",version)!=EOF)
    6 b$ `. W( ~% [
  110.   {
    0 v+ W" g! G0 Y6 r
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 g1 @6 F; G5 h7 W8 O- f
  112.     fscanf(fp,"%s",file->path);
    5 n2 q" ^8 G5 T& i% ?' c
  113.     ReadFileNames(fp,file->file);
    ) f: ^, r4 g# t. g7 n$ p
  114.     strcpy(file->full,".");
    4 }; K# T* c8 s6 P4 ?4 Y
  115.     strcat(file->full,file->path);
    # ?# D! b( Z5 O0 C" c! t" C' P$ w
  116.     strcat(file->full,file->file);
    ! O2 P9 |7 v/ `3 h2 Y$ ?1 q
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& `0 K2 |9 n% ^4 D9 {
  118.     {  x0 c! y+ t. l4 z2 K, a; H. p
  119.       file->vers=(float)atof(version);/ {2 m" U; x- Y) o# i- T. T
  120.       UpdateList.push_back(file->full);( {% d% {1 e) e4 v
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 Z) \7 \+ i' l/ w2 Y- ]
  122.     }5 a. B3 M% ?; G( ^
  123.     else
    5 @& Q0 K5 h; U
  124.     {0 L+ Y) P- i8 T8 G
  125.       olds=(*p).second;
    + h, Q1 M& [  K8 S" |7 T8 l5 Q
  126.       if(olds->vers<(float)atof(version))& r5 l2 c* w# {. i7 ?
  127.       {
    , B- N  h0 |1 Q3 Y
  128.         olds->vers=(float)atof(version);% c" U/ d: y; I6 D) B% t
  129.       }
    . S) x# \$ _8 E$ k9 @, |+ J0 v
  130.       free(file);* {; i. R) t2 A  Y! a
  131.     }
    % I" W, j, h$ ]) H6 ^. `9 f
  132.   }! Q* W! P; C3 _; y, x# ^( c- H* j+ z
  133.   fclose(fp);% }8 s# v* r5 L5 S  W
  134.   return true;
    , G; s, l# _( `! C( x( e
  135. }
    5 _+ v+ i8 d# r* }, G. u9 y

  136. 4 I) `1 X+ @2 Q: |( E& t* i
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)2 j/ ?! M0 R8 x1 V8 ?; B3 M- B5 @
  138. {' h7 w' n+ D* ?4 y* y/ E
  139.   TCHAR  szFull[MAX_PATH];/ w/ b# e( o8 S4 b  K3 h
  140.   TCHAR *token,*inter;) ?" Q4 v% L1 X7 c+ Y# O- X
  141.   *szPath=0;
    $ d1 A4 Q8 {' n8 B8 h) Q# D
  142.   strcpy(szFull,szFullPath);; T6 L  u" |- M, G6 u$ c5 h7 A
  143.   token=strtok(szFull,"\\/");
    : f6 K  @* R/ ]
  144.   inter=token;
    ! ?0 ?3 h' [9 ]" E* `$ }: ^
  145.   while(token=strtok(NULL,"\\/"))
    - D9 _1 C  N0 ~) }+ k) F) e0 r
  146.   {' o7 E( H; z! Y9 w( {0 [+ }  U, M
  147.     strcat(szPath,inter);
    ! O/ y( Q: M8 N0 J& ]. s
  148.     strcat(szPath,"\");0 O* ^& F8 F$ p1 ~( Z. ^
  149.     inter=token;: }1 \, {. t9 T5 A3 u5 N1 _
  150.   }: u( x, n3 a6 \6 T2 j- \; R# A
  151.   return strlen(szPath);6 Z) N2 l/ I3 T$ s  r  p
  152. }: z* ~% y; S2 S& F

  153. : m' T8 A9 _( T4 e: c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    + j2 V8 L" U1 e2 W
  155. {
      a4 ^3 a# z2 B
  156.   DWORD attrib=GetFileAttributes(Target);
    . U: Q9 `8 B* b$ C7 F, ]
  157.   if(attrib!=-1)/ g! R) ?( p- y; F0 B5 U; A
  158.   {" f2 ^2 Z0 s3 `: H+ I( P
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    1 x* X' k( X$ V) ~
  160.     {7 {) x/ W; f8 J- @
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);( L- s. i6 Z1 x$ a* Z: A8 z9 ~2 Z
  162.       SetFileAttributes(Target,attrib);
    $ c* w5 n. h- l, k/ z% J
  163.     }4 f+ m9 Y. H- @9 r& _+ q9 I
  164.   }
    # k- t" C% `8 I0 ~* h8 ]* ?
  165.   CopyFile(Source,Target,Erase);
    8 h& x+ I& W/ f* v- [
  166. }4 q3 y1 N+ b2 o+ l; \/ D
  167. " b) }8 Z- s9 y* l7 a0 ~6 ~! f+ I
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    / a0 I! q4 D- g, e) i9 i
  169. {
    6 N8 r1 {7 T2 W% K4 }
  170.      FILE *fp;
    : @* u5 ~4 D  \$ c
  171.      char  szBuffer[8192];+ Q& F1 w" f# r; p# D4 ?
  172.   va_list  argptr;! e0 J4 c! P; @' x6 b3 u- `) t+ T
  173. ! L$ R6 H9 }, g! {
  174.         va_start(argptr,message);4 g5 G7 K: `$ P
  175.         vsprintf(szBuffer,message,argptr);
    + E5 A3 m/ f5 Z$ C2 U* Y5 E  G
  176.         va_end(argptr);
    4 B4 Y- p) Q# H9 T
  177.   fp=fopen(FileName,"a");
    $ m: O0 X% X' G
  178.   if(fp)
    * |7 F6 |0 E4 @% j
  179.   {3 ?/ X9 V3 d  a$ N) Z6 `
  180.     fprintf(fp,szBuffer);
    8 G- K& M' u3 R# N( b
  181.     fclose(fp);
    ( R" W' P# n  t0 v
  182.           _flushall();9 i5 C9 L+ {2 I: v$ V
  183.   }
    2 s4 T% V: }4 l3 R9 I; i- q7 N
  184. }: Y+ d/ c1 x2 ~" h" M- k8 I
  185. 4 C9 F1 L  O! I# _$ |" G3 Y
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    7 i7 ?" p7 u8 k2 i1 e
  187. {1 ?( o0 Z/ m! {4 v( C  B* ]
  188.      FILE *fp;
    6 B4 M4 C& t( Y6 e: _
  189.     DWORD  attrib;+ p; l8 B  R4 }. U7 F
  190.   attrib=GetFileAttributes(FileName);& T4 a: J4 s1 d+ g" e
  191.   if(attrib!=-1)9 X; O1 Y: ]* j3 }$ V. W: W/ t$ e
  192.   {9 x; X$ f8 }' h% p5 t
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);9 S( u6 i0 o8 w9 i! Z- k8 B
  194.     if(!SetFileAttributes(FileName,attrib))1 X1 A1 C0 }4 X2 o
  195.     {
    / c& l# A( g" ?3 S- q/ b
  196.       return FALSE;
      E7 m: L0 ~% K4 b6 [- u/ N
  197.     }! ?. m' z+ h5 S( M
  198.   }9 ^& S2 E' B# p
  199.   fp=fopen(FileName,"wb");
    $ [% J! Q% C) K& ?( ]* }* g1 H& L
  200.   if(fp)
    4 C0 m: E  `, H# Q
  201.   {# P( N: m! q8 v! [4 v4 F8 \4 x7 {4 Z
  202.     fclose(fp);
    5 |( l2 k& N& F3 E. ]# b
  203.   }
    3 w+ W4 {# V; A1 I/ m- O
  204.   return TRUE;
    0 f5 X6 P7 H1 O; q" R! t) }( }, [8 @) Z
  205. }
    6 h3 x$ b7 e5 y7 x# b& E' M. `0 P

  206. , R2 I4 u2 b$ v
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      _2 w1 g% X; c
  208. {7 S9 c( w, ?% c4 d5 N
  209.   char filename[MAX_PATH];
    0 Q. a  z7 N1 d& D& h
  210.   LPUPDATEFILE file,olds;
    6 k- L) ^% z, J& Z+ S
  211.   std::map<int,CString>::iterator i;8 [+ o$ m1 r- ?$ a0 b4 n- g
  212.   std::map<CString,LPUPDATEFILE>::iterator p;7 b- |/ n) l4 F/ r! F% ?
  213.   std::list<CString>::iterator l;6 I/ J* D7 I! j7 m$ m
  214. 1 y# ?8 f/ `! V/ }( [/ I) _
  215.   if(bFirstUpdate)* K+ U0 ^) Z; D
  216.   {
    ) x) y9 ?4 b9 c& E0 K+ H6 D$ l
  217.     dwCurrFile=0;+ Q, g5 A% m$ p" G$ f9 V2 }
  218.     bFirstUpdate=FALSE;
    $ Z$ @) ]  x3 }$ K$ C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  u9 V+ M5 E) V  u
  220.     {
    . t7 _- u5 r0 R+ V3 O& Q
  221.       dwTotalFiles=UpdateLocal.size();
    9 @- T# {5 j( U; Z( b/ T
  222.       dwDownLoaded=0;( a, ^2 q# P3 H
  223.       bSilentStep=FALSE;! P, b$ `% N% j' G- ^' |
  224.       bCompressed=TRUE;
    ) M/ [7 j5 O- V1 m$ L/ J
  225.       strExtLocal.Empty();7 s# G' W2 Y* V: _! Y, N, @# D
  226.       strFullName=(*i).second;
    * R6 F1 b" [5 M5 l; j
  227.       dwProgramState=AP_CONNECT;
    8 U+ N. J" r! s7 W4 V$ \1 k/ g3 f- t
  228.       return TRUE;  Z+ B, d" Q+ P6 K3 u0 s/ e/ E
  229.     }; U0 b0 P# D4 j5 Z1 T; u
  230.   }
    & ?8 w! G" d9 ~
  231.   else if(bRestartUpdater==FALSE)# ?  f6 w' d  ~) j) M: k
  232.   {9 E0 Y' Y2 Y; _/ i, ]9 r/ N
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())2 R- _" Z6 N; @0 N% u
  234.     {9 o  P: }4 d/ f
  235.       file=(*p).second;: ]* X) A4 d; `% S' Q) G9 u
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())( x" D! B( _$ ^
  237.       {
    2 C% ~; o: I/ [* K) q- h+ T
  238.         olds=(*p).second;8 X# T6 Y+ t& A; X; p
  239.         olds->vers=file->vers;& r3 B+ o* l* a* h3 B
  240.       }
    4 \. _- S5 T' A$ T/ `0 _& c
  241.       else
    7 \9 m7 ]' g, T5 P1 P5 p& A
  242.       {
    * ?( K: v' c7 _/ D
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , @6 n5 ^- l9 [2 u& a: U
  244.         memcpy(olds,file,sizeof(UPDATEFILE));; y0 ?9 J. B/ J" e
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));0 ^$ t) \5 F9 a2 q* c4 G
  246.       }
    2 q& \! Z# N9 M0 k* J
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    * }7 D3 |% G4 {5 k6 Q
  248.       sprintf(filename,"(%s)",file->file);
    3 k: `. L  }8 C3 B
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; W+ K! D5 Z7 k9 L9 |$ o7 [+ x! w
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ; `& ~7 h) p0 R, u; d3 r
  251.     }
    0 t5 m7 R' u4 f' m8 N5 j
  252.     dwCurrFile++;
    ) l1 ~3 r, @: W1 @1 h& q% `! H
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ K4 F" `, D+ y  ^3 ?
  254.     {
    5 O. n) J) W# ^3 v& H$ ^
  255.       bSilentStep=FALSE;
    . H( Z* J% |/ Q9 U, ^7 O/ [, d
  256.       bCompressed=TRUE;/ U" [( e6 l; _2 d1 Y
  257.       strExtLocal.Empty();
    4 ]3 s; U( n4 f$ `' }+ g
  258.       strFullName=(*i).second;' q9 K. T) o, M1 R
  259.       dwProgramState=AP_CONNECT;, l# f- M1 Q# |# ]3 [3 S
  260.       return TRUE;' X4 ?$ e; _% S- u6 \$ c1 H
  261.     }1 a8 V* E* j2 A' t
  262.     if(!bRestartUpdater)) B7 f$ f4 I4 d# E% r
  263.     {7 O% M) ~* X  c/ S
  264.       int iCurrSize,iFileSize;( e2 C- q9 Q. {8 B$ z" ^4 K
  265.       iCurrSize=0;
    $ n9 M; Q& h) A- T' p
  266.       iFileSize=UpdateList2.size();
    6 x$ w; p6 Y( h. I6 h) a
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . j+ y* \! d- F' \0 C! }8 W
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");* D) w, g/ ^6 U& `' h1 W
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");: ]3 Z: K' U) Z  N; _4 r
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) ~/ c2 j* g0 o* ^$ D
  271.       Fclearf(".\\update.dat");3 i; h1 a1 A' `" ?
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * }1 f0 r* I. T; _: b& i2 }
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    - q5 ^( L: J0 e& J) U/ D( ~& R
  274.       {) R9 v" O% h4 E
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())9 @, I. s" {! H  ]) m$ J
  276.         {
    8 z! P4 H$ }  V
  277.           file=(*p).second;$ ], X  _7 v; R6 [& L
  278.           sprintf(filename,"(%s)",file->file);& L& {+ N- }) G$ v8 {8 t4 R
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    4 d3 B0 `2 Q4 L) L
  280.           iCurrSize++;8 I3 Q. Q* R6 U' g
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));3 _& B0 ^8 v) o$ u! }9 t
  282.         }
    5 O/ Y0 n5 d4 r
  283.       }* I% T, |$ ]) ^: W% h
  284.       unlink(".\\update.txt");
    : j& ]( ~  r' o1 K
  285.       unlink(".\\update.tmp");+ W6 e( T1 d( u. W
  286.       Fclearf(".\\checkversion.dat");
    8 d$ `# _4 \* G& W9 b- s1 l& E% Y8 @
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# c* I1 F- ~1 Y& a- Z
  288.       if(UpdateLocal.size())1 r9 h1 t& H7 ?% H
  289.       {9 {  b4 y& H' j% Q+ ^
  290.         UpdateLocal.clear();
    ! v/ S( ~! z- e7 x, l4 m) H1 J
  291.       }1 h# H4 f$ i- T- _
  292.       if(UpdateFile3.size())2 ~( x/ N- I% M" E
  293.       {; P6 R) g) v/ G7 U8 O5 |$ p
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 G: ?8 C$ k5 T& C7 O
  295.         {
    # i" u# E: L& Y* s
  296.           file=(*p).second;' V! [  L& {* M/ ?* S. Y' l9 [
  297.           free(file);; L7 J( E) m" \# {8 m8 C0 J
  298.         }
    9 z9 @- J* ?4 ]! T4 F9 _
  299.         UpdateFile3.clear();
    ) n5 r. h4 N% r7 G+ i
  300.         UpdateList3.clear();
    & e  w0 d# H1 _% z
  301.       }: I4 i1 [2 F, M
  302.       if(UpdateFile2.size())+ N7 v: x( ?# k: R* H- d
  303.       {
    4 b9 t4 x& R6 j
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - N0 Y2 ^5 {/ L* B
  305.         {4 R, d+ R( h/ }4 o7 d: K8 q2 g) E
  306.           file=(*p).second;$ m, P  p" Z- u7 O  @& C* m" U# l
  307.           free(file);
    9 f* r$ h+ L' B; P$ z
  308.         }
    4 R5 E6 r; O7 r$ m$ s
  309.         UpdateFile2.clear();6 h' T7 F4 ?+ C, W
  310.         UpdateList2.clear();
    * r, E' u, e! @$ ^* E
  311.       }
    ( A6 x- q& M) S  {, Z& ~+ \
  312.       if(UpdateFile1.size())
    ! Z9 B. q& g8 K2 L( i+ j+ w
  313.       {
    / X/ N: C# k1 M  f) I
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 R5 W0 s) C; V8 _, w, p1 j& H& O
  315.         {
    ( j# f' C1 p, W$ Z% A- _
  316.           file=(*p).second;
    0 ^7 }9 ^( z% a! B1 k0 O  |/ c5 w7 b
  317.           free(file);
    ( {% N( a" ?$ X* h
  318.         }1 Y; |  j8 X! u, Y/ m
  319.         UpdateFile1.clear();
    4 \' j9 Y% C9 [1 B
  320.         UpdateList1.clear();
    8 S7 a+ `6 s( b# F( M: l8 R
  321.       }' C% A' N/ W8 g3 T! C& U4 R: ~4 g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    3 a' c' S; x. i" X1 A0 M( _' m7 L
  323.     }# q7 A0 w. D% w+ `2 \
  324.   }
    8 t8 i; S; U+ k* E
  325.   return FALSE;
    - Q. a! v: }, s
  326. }
    " T8 C+ i8 J5 j7 V6 S8 U

  327.   r' b5 N- \& J+ g* ^( Q/ z8 n
  328. void CRevAppApp::ClearAll(void)
      Y3 @! h7 F- k
  329. {
    - h1 d" o4 e, J6 K& i$ }
  330.   LPUPDATEFILE file;
    , N; O0 R" p: U+ F+ P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 E. M, o+ \# A) i# x# K' M
  332. 3 e! M, p0 J  i+ C! _+ k/ G) Z
  333.   if(UpdateLocal.size())
    " |# T, s% d0 O+ q/ `
  334.   {- _0 @  q& N! {7 A; a
  335.     UpdateLocal.clear();0 ^6 S2 q: u  {1 W" l0 ^1 n! e
  336.   }
    & o9 A  A3 Q" Z  m! q- N0 `* }
  337.   if(UpdateFile3.size())  A+ P; s: A. A0 e2 @! _
  338.   {1 W8 ?% [' ^! v7 E3 z/ _6 o
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% F2 j, m4 ?/ @9 l  T. S# q# n: B
  340.     {; F$ Y( Q) Z+ f2 a6 i  P
  341.       file=(*p).second;
    9 ]3 j+ z7 L% h8 f% q
  342.       free(file);' Z, \& y; t# r5 a
  343.     }0 {" B# s- M. z$ [) E) p6 g
  344.     UpdateFile3.clear();1 C( _6 J, F( @, D. m7 ~2 |" @4 O$ V
  345.     UpdateList3.clear();
    ; G( a  b, p1 V
  346.   }
    , a! j7 A/ T; [9 @3 h
  347.   if(UpdateFile2.size())% D3 ~( K* ]0 v4 R" }/ u( ?! g9 e: [
  348.   {
    ( |3 K# H" y7 F: {2 G
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * p7 M" F0 s8 j  k9 i; c
  350.     {
    : ~# \* q6 Y5 ^* h( s' q
  351.       file=(*p).second;
    , @5 y/ K9 R. n6 @
  352.       free(file);; A; c' G( l6 @; [" b2 A$ S
  353.     }" `( u4 \( j* k3 L2 u1 I* [
  354.     UpdateFile2.clear();
    % ^$ Y+ f+ M% D- {( L
  355.     UpdateList2.clear();
    , G0 l2 C2 L" `% n$ A; ~* r) A" u5 R
  356.   }
    / x) w. {( A2 V9 i
  357.   if(UpdateFile1.size()), `, w; D8 ?8 P, Y$ }
  358.   {
    7 c/ ?" s# w" ?1 a8 o7 K
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 D, l; |7 f8 M2 U4 i" B: Z
  360.     {# G/ b7 i- |( U* ~. R
  361.       file=(*p).second;: p8 T, V- s* D4 V9 E1 I  `# L3 U
  362.       free(file);7 f0 {1 m# W: P, \
  363.     }" Q, v+ l8 W  G( [1 n/ v  y
  364.     UpdateFile1.clear();
    0 c# n7 q" e0 U. N3 R( c
  365.     UpdateList1.clear();, u$ O. `: z$ A& s+ a+ [
  366.   }& r4 p; o7 e* |4 v8 `
  367. }  
      o% w5 l+ d( a$ b, u3 R
  368.   
    5 H2 g5 I9 W/ q0 H5 u2 ?
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    & f8 i! F* K, h' B3 @# ~3 _  m+ U5 i
  370. {1 d: Q2 ]  \* q8 z7 x: M5 U
  371.   int c;2 ]. h5 `6 X& r; U7 _  J
  372.   LPUPDATEFILE file1,file2;, j0 \, i1 q% o7 a1 g
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: T- i+ `$ l# W# S: a" S
  374.   std::list<CString>::iterator l;
    ' A5 E; X  Z! V$ S8 @. m. l) T9 j
  375. . C4 z2 w9 L  P: ]3 q, o' l# v3 s. Y
  376.   UpdateLocal.clear();/ H# A1 s" E! v/ l
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      G2 @# a! t5 n0 Z9 P1 J) Y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);. w4 C2 b2 @3 i5 }" I5 |8 o; g
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) z) K3 @  a$ K& a, {/ Q1 I
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);. Y3 g  I3 E' T2 d& t
  381.   if(UpdateFile3.size())$ T! V2 e( t4 Y3 l* Z4 u
  382.   {% Z6 p$ b" u6 c, v
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    & f. |. c4 n* A$ N
  384.     {
    4 `2 o2 j! k* `6 _7 u: Y/ P
  385.       file2=(LPUPDATEFILE)(*i).second;6 W+ U7 I' d7 O+ o" n# L
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # Q" N$ W7 P7 I3 A+ Q) L. v! C
  387.       {
    & \) B9 }6 C& a0 w+ q6 K  j& {
  388.         file1=(LPUPDATEFILE)(*p).second;4 R6 E3 c' R. m- S: c
  389.         file1->vers=file2->vers;
    . c0 Y! k0 ?/ i0 p
  390.       }
    - j" O2 p8 j+ ?. L8 j
  391.       else0 g: V0 \/ `9 `. A9 C% v
  392.       {
    6 e# b! d% l, z: x8 x) T( C
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      a+ t! B1 r/ g, @
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ) Z3 z# N  G# P8 B8 j$ T4 k2 {" u
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));" j3 V& R4 [5 p3 {) V
  396.       }  G% p- F; j& T+ g
  397.     }
    ' t% ?9 A) n% J
  398.   }* R0 p. T* Z0 V) i- @0 b- d
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)3 b+ v5 ~* V/ O8 ?5 W' V, K) N
  400.   {) b- A2 W" q% \/ Q7 ^3 ?
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())3 \$ B) W! Y' |! J) ]1 U* K1 w
  402.     {
    2 i8 G6 F; c% F/ P; ]
  403.       file2=(LPUPDATEFILE)(*i).second;
    . g7 P) S! {1 {% v" c& U) s
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # _" Y! Q' K9 K5 |% I8 Q
  405.       {
    & o: F; y9 Y2 n& m4 h  k- p3 l$ c2 b
  406.         file1=(LPUPDATEFILE)(*p).second;, I' M% `: N( E1 v4 d
  407.         if(file1->vers!=file2->vers)
    3 a0 ]$ D/ M; C: I0 p( d3 b7 ?2 X
  408.         {* c+ i- E9 K9 X5 X
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 X5 b) Y( ^# c+ n/ K% P" ~
  410.           c++;
    3 P# w! ?: K. Z
  411.         }
    8 Q/ p6 z# ^- y
  412.       }
    , j# u5 W, x; B/ u( d9 J2 g( c
  413.       else# U" h3 L; f- p/ e8 O* M6 p: y
  414.       {
    ' q/ v. O3 q. u
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / G6 k- c1 g1 x  ?- N1 d/ T
  416.         c++;
    8 C6 s! g' r3 W1 [& Q. j- e
  417.       }
    " _& b( C  W: {, e
  418.     }; A6 ?- D6 f( k  G- q+ J
  419.   }
    4 H/ t2 S2 e/ c( V0 R& B) g
  420.   unlink(".\\DownLoad\\update.txt");. k2 c4 d0 f) o/ l( C. K; ~) c1 ~
  421.   if(UpdateLocal.size()) return TRUE;. t9 n' C9 e0 x' }1 ?
  422.   else                   return FALSE;
    / M" }6 W; I, |& }! d; }* N; C
  423. }
    ) b& Q% O3 y) _) n* K

  424. 4 y5 Q  h! p" {5 E9 E
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"7 b/ [1 I! ]1 y" z/ @9 E
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"/ {8 F& S  {- Q. `

  427. + }" Z8 Z* a9 ^3 p, z  T+ W
  428. 5 a2 `# M; x+ x3 Y. i- ?
  429. : u& E7 \- t. T/ G8 _. I
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
      C8 U% ]" d' M* {; Y
  431. {7 _( w, _% ], o
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( \$ N. f: i5 M2 _# Q  g
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 e+ U& L; v: L! q
  434.   {3 m  ^) Q+ C  H3 J3 I6 X
  435.     char szLanguage[50];2 W- D) z  p$ v9 C% m2 ?
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) @: x% ~+ N7 f- Z
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % _+ T( a$ Z. w( [' m2 ], k( f
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % b4 Y3 V: @7 o" r
  439.     else                                   m_iLanguage=ENGLISH;- N# Y: Z5 d, @! }. d+ `0 _
  440.     char szRegister[100];) y1 @( r+ |8 M% P. J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) j9 ~' M' Q( Z. W
  442.     strRegsName=szRegister;
    + A' L; _; D  l0 A  P2 v9 e
  443.     char szPatchURL[100];
    : L6 p' k- d/ G0 i5 t
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 ^' T/ Y( o; \) a- s4 o2 @4 z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);! _. L; u7 x5 q
  446.   }
      D. c* G) R9 C
  447.   else8 z! O, ^1 q0 [$ b/ Q4 R
  448.   {
    6 P5 g+ `0 m6 J- h
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % F: S- v" b5 C# B
  450.     strRegsName=DEFAULT_REG_URL;
    7 b0 R: d; Q2 v2 I
  451.   }0 u+ J: i1 t. Q; }
  452.   if(GetFileAttributes("hosts.ini")!=-1)) g) U: Q5 G  T' n
  453.   {
    . D1 ?' U. V- C) Z4 D
  454.     char szIP[50];, b. `2 v! |) \1 q' ]$ A+ x
  455.     char szDIR[300];
    2 J: D' m3 v! [
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ) E) l% n. D# _8 Z/ Z! z6 a# P3 [+ K
  457.     {+ p/ B" ?/ a. L
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. ~& x) Y, C8 j
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    5 ]& v, _1 M. a8 M( c' `( A
  460.       strHostName=szIP;, n* B# ]2 C% J& ]# @2 P) k, ]
  461.       strHostPath.Format("/%s",szDIR);' v+ S3 X: R* F
  462.     }
    2 G( U3 N1 Y$ x" y1 ?$ _
  463.     else" o0 p+ p0 S: \- _0 n) G
  464.     {
    * B# T  m+ c4 t# u8 i
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( H! z- P6 j7 u0 b
  466.       {! D$ H% m/ Y! B  E. `
  467.         char szLanguage[50];
    3 ^* t9 i' w: n5 A5 J6 D3 o
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: O1 q; B2 b1 I
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 y" Z; O: H: E
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / ?' O, {+ c" W0 C4 O& a* ^# n
  471.         else                                   m_iLanguage=ENGLISH;+ Q" a- n& `# q( h9 b" Y' [
  472.         char szRegister[100];, x" w) S" ^. s- D2 b8 P% h
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 l: N; \  q$ i" _6 [# ~
  474.         strRegsName=szRegister;
    % c4 j7 }# [/ V. @! o( `7 ?
  475.         char szPatchURL[100];! z3 c  X1 w3 E+ A4 {( R
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / H. y# \$ {1 ^
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 G4 D# k% {+ p2 m7 X
  478.       }& M: `0 y: w7 `5 L3 m
  479.       else/ V4 }; }& v& }# p
  480.       {; Y/ K5 G) d0 G
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: I* H% ^# n1 g
  482.         strRegsName=DEFAULT_REG_URL;5 L7 H* F# V8 Q% m, P; i5 ?
  483.       }
    " [2 V, U( _& u5 ]
  484.     }
    8 d- b6 B7 m$ H6 A8 H+ o
  485.   }
    0 B; u# K' P& @4 F5 p, K* a
  486.   return true;; D0 K/ ^5 s3 G7 y+ g$ s0 K$ P
  487. }  x: [3 b2 D1 l* \3 v2 z9 {6 Q

  488. - g1 R$ F( w  X/ ^
  489. #include ".\ZLib\unzip.h"
    9 F) |6 R- a0 p$ Q8 w
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);* O4 w+ t4 p/ D
  491. /////////////////////////////////////////////////////////////////////////////
    % d, d% j9 P% }% k
  492. // CRevAppApp initialization
    , |' \- a- x" S+ f' C" p# }: k/ s
  493. / n- t/ H6 a) q
  494. BOOL CRevAppApp::InitInstance()1 s0 v0 j4 f2 V% K  t+ _) B; P9 h# u
  495. {. H% d3 g: \7 G$ Q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    - g' v+ H8 L/ E$ B8 ^: o

  497. ! k6 z5 Y! P# i2 ^- l( y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    # ]8 `) h  y' i9 R8 f/ o1 B+ Y/ `
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))$ T5 ~, y; \/ D- v$ ?
  500.   {
      Y* c; F) g% n7 `
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ; x" c, H; X0 k4 ?& {
  502.     GetPathFromFullPath(szPathTarget,szPathSource);( B! P! {% q2 x) ?0 M
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))  J2 r1 J1 O( a0 S  r+ l
  504.     {
    1 Z9 H5 s1 \* C$ @: u$ B
  505.       strcpy(szPath,szPathTarget);2 [' m2 E# X4 I; A& c# |
  506.       SetCurrentDirectory(szPath);
    2 [$ K2 g0 g' x/ B! N: k8 R$ Y; k
  507.     }' b; Q% N0 i- R* b% H! ?3 j. m
  508.   }& g7 C. {  K  J3 |8 _1 ]% j8 |! ?
  509. #ifdef _DEBUG
    ( [5 q' `3 p6 i1 N9 q1 U/ T
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 h, ~+ v: I* M- t6 B) c( k
  511. #else( @" h2 U( N7 q2 l4 B
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- w( p6 F% y* z4 E: ~6 D# m3 {" p! Y+ c5 V
  513. #endif
    - `* R% x, k" L$ G1 c* c
  514.   {- q+ P5 ~: \, s& m
  515.     char tempFileName[MAX_PATH];* J* Y! `2 s0 x8 a" |7 p
  516.     strcpy(tempFileName,szPathSource);7 ?5 U' C( K; V
  517.     tempFileName[strlen(szPathSource)-12]=0;( T& n3 K# w2 V7 h
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    5 X- C% S7 H/ W/ Z5 a
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ! X0 `" {+ @+ e% h* k0 `
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);4 q6 Y; X( q6 l7 `& S% Z
  521.     return TRUE;
    ' U+ k) l4 J) H7 k) t
  522.   }
    ( o+ r3 k6 t4 j5 r0 G1 f$ i# Y
  523.   // Nuke 0118: Delete run.exe, _. s: P9 F# R7 Y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );( Q! z- g. a7 _0 |
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");4 G/ m# R7 r" d: o# n
  526.   if(!ReadCfgFile("Config.ini"))# z; m/ ?+ Q, a' _4 W! J
  527.   {/ t1 R% H  f5 F" Q1 ^8 D) p
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    1 C! @7 O6 K3 L' m  v9 [: o
  529.     return TRUE;6 q9 ?" _- c- l
  530.   }; `8 M; F$ i3 c$ [
  531.   HANDLE mutex;4 Q+ }) s& |; b6 C6 p5 r+ `1 o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    3 I  g1 E' i# V! s  F
  533.   {# H/ p! r+ p  {. J/ p3 F
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)9 r6 m7 J/ j  h1 v" O
  535.     {6 [) b  f7 u4 a: `" V  d+ J& K
  536.       CloseHandle(mutex);
    7 X0 l0 q- @9 q7 u  {8 B$ d
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    - {' `  ~$ V$ R" |, {
  538.       return TRUE;
    0 B9 E8 a3 S5 F: X$ K+ {* J
  539.     }
    8 Q6 A0 n& q- H$ n; p5 u$ b
  540.   }  
    * X5 w) B9 @* p1 j0 r
  541.   CloseHandle(mutex);
    0 i4 p# U9 V' ?9 _3 h6 }  o

  542. ) A( ^1 c8 s' T5 ?! m
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);- Z  {  A* U8 |' Q  v7 l

  544. # c/ Z% _4 f# ?& b( X: m2 h
  545.         AfxEnableControlContainer();: Y- t! |& c( M

  546. / G) g. D5 P, Q7 ~
  547.   bCanUpdate=FALSE;3 ]4 l4 q6 F' C2 o. M
  548.   dwStartUpSteps=1;, d' N9 s, q6 N9 I; Q( I
  549.   dwProgramState=AP_NOTHING;
    : \% O% F8 ~6 b9 b/ p- @/ S7 f

  550. : `5 s! r6 x+ u, A
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    2 g5 |6 [+ {2 E# k  N4 s

  552. ; P% U+ Y7 A! K) Q' O% D
  553.         // Standard initialization. F  A4 `+ D; P
  554.         // If you are not using these features and wish to reduce the size
    2 A: H( m  A" Z: R2 {
  555.         //  of your final executable, you should remove from the following
    & M1 ~# V9 f, u: L+ _
  556.         //  the specific initialization routines you do not need.% C- e$ T& \: c$ T4 |, k  `& [
  557. & A6 k5 i! S& l) B* t$ {
  558. #ifdef _AFXDLL2 m' [+ K8 @+ P( N- j5 U" p- Z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + R1 ^" \. o: b& C+ ]. x  A* {& u
  560. #else
    / u3 P) M, U( }3 P# n6 z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically4 v" n- V: E" q" E5 J
  562. #endif& U3 G1 h" M1 ~+ e+ s. E

  563. - F$ m2 B2 t# d3 P; b
  564.   dlg=new CRevAppDlg;
      ]' y; E# d5 l
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 G" q  V1 q. X# d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    2 l" Q9 M) t3 v5 M; {
  567.   m_pMainWnd=dlg;& S. N5 n. g# ?! u

  568. , ?; S' J' P  T0 q0 y8 P1 G6 K
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 o( r( s6 v: U" f7 A8 h# ~( j

  570. 8 w+ c* s% h5 Q* I3 H/ R
  571. //  GdiplusStartupInput gdiplusStartupInput;8 i: Q4 \$ l4 w/ @( @
  572. //  ULONG_PTR gdiplusToken;3 k! B) I! a0 o7 v4 L* H+ l( ^
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);, J8 E  n$ L3 |5 x1 O3 d
  574. ( Q/ b; ~1 T' ^( e
  575. //        CRevAppDlg dlg;
    ( p) ?# B+ D% [  Z" ^- g. w( C
  576. //        int nResponse = dlg.DoModal();. A# {  S+ M+ w& Z0 x! D
  577. //        if (nResponse == IDOK)% @( `; v- Y) g  S1 l2 Q3 M9 F
  578. //        {# }2 m9 t2 H$ M, ]9 u7 d+ m! C
  579. //                // TODO: Place code here to handle when the dialog is+ a# _  u! R: ~9 y
  580. //                //  dismissed with OK8 I" w  U3 O$ h
  581. //        }
    / S- E, Y, n, p- [  j$ z
  582. //        else if (nResponse == IDCANCEL)6 H, C5 E9 m1 u% e
  583. //        {
    0 R2 O: V8 l& ~- i2 @
  584. //                // TODO: Place code here to handle when the dialog is
    ( M: |& e% @' \+ Y, j: L3 f
  585. //                //  dismissed with Cancel
    4 e" X3 [/ w& S- L' i4 r/ H3 b
  586. //        }8 z% O* U4 ?' {, z+ s; d

  587. 5 v" M  {# v/ q! B! h' |) A
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ; p6 }0 q- D" N0 `
  589.         //  application, rather than start the application's message pump.
    0 d( c$ F1 |9 B& x$ e, ]: o0 G6 ?
  590.         return TRUE;" U# K- O: e! z& j( C2 d
  591. }
    ' U- I" Z8 u) d" e$ \2 R

  592. # N8 ~  K/ u3 B4 i+ |, s' }
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    . s$ {7 H( C8 ]1 v* P& F& U* \+ Z; ^
  594. {, n' ?" e( v( a0 R
  595.   int i;
    " l- L, G8 R2 D, a0 M, ?
  596.   char *szRet;6 I( ]/ \& x7 T( ^3 O5 o- Z

  597. 2 E. _- M1 t$ p4 E# e
  598.   if(pSource) { itoken=0; sztoken=pSource; }; Z& k- W: X: q0 `, z9 n# `: M
  599.   if(sztoken)7 n1 ~2 |' C  r; b2 J6 A* `8 F+ M- _
  600.   {1 r0 c8 ]2 m0 D6 h4 ^9 V" V
  601.     szRet=&sztoken[itoken];* j- i7 w1 w5 e3 r
  602.     while(sztoken[itoken])7 R( ^( E4 D3 Y- n3 U% @
  603.     {
    8 |2 J/ }4 k" Z& y) q7 O" m. `, a) q
  604.       for(i=0;i<(int)strlen(token);i++)
    " k* t! q5 ]$ k
  605.       {
    : B5 v* ]. }# j1 f
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])6 r1 F5 K1 T" `" [9 L; p: @0 ?
  607.         {/ _# |% O) i* a6 M% V1 z: H) B
  608.           sztoken[itoken++]=0;( B1 ]8 m# h8 T7 P( J0 Q
  609.           sztoken[itoken++]=0;
    4 w4 d  r6 H) v1 S! m: K7 k: P1 A) Q, S
  610.           return szRet;! _' o" H4 g/ l+ q$ v; `; ?
  611.         }& l; u5 S" w9 Y: N
  612.       }
    - g; X! u0 q2 }5 i, h( {2 o5 {
  613.       itoken++;2 Q! e" D  y' P3 g/ c
  614.     }3 A& K  l4 h7 N$ ^: S
  615.   }! G. o/ I8 `$ [# j# K9 r
  616.   return NULL;4 O* j. T/ E9 Y) k$ ^+ |
  617. }
    . l! g" C: _1 I! N/ H

  618. + a- W; r5 T4 b( O
  619. void ProcessProc(long Total,long Current)
    ' f- _4 F8 G& ^' G: I- `) V5 ?0 X
  620. {
    - B! Y& Q8 I& p3 g) B5 j+ Q' n, b
  621.         MSG msg;
    - A* g5 g6 C. c! g& Q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);) O  |* C# p7 M0 q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 B& r# ]4 x& F- J
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ e- t1 B! }0 S. ]
  625.         {* f' ~3 @5 R! D/ j+ p
  626.                 if(!GetMessage(&msg,NULL,0,0))
    # @: P; q4 ^' S5 P7 k7 L
  627.                 {
    & w- m4 n" B( [
  628.                         return;: o( s5 G. |1 P1 N9 q$ q3 x( I
  629.                 }
    $ s1 u: `- ]. i4 f* b
  630.                 TranslateMessage(&msg);
    6 v1 {) d) m) n3 l; E
  631.                 DispatchMessage(&msg);
    6 i$ k7 {+ L/ V" k. R
  632.         }        + z" x2 |- `" A" C4 y* V; ~
  633. }1 h9 K, P0 c7 n+ X  g
  634. % G" c8 ?8 V- n( y  p
  635. BOOL bFirstChar=TRUE;
      t3 |. M) T7 t2 }+ R$ y

  636. + Z9 e' ~2 _2 q; ?# t7 d
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    4 c% Q1 }' y- a) O* v6 ?
  638. {
    * a9 h5 v* y% T0 B0 l/ l
  639.         // TODO: Add your specialized code here and/or call the base class% x: V0 \5 R( |; C) |& s% ~9 O* X: K
  640.   switch(dwProgramState)( k. V* g- c( `1 U# N2 w- j5 j
  641.   {
    . C5 J7 f' J* M8 z& N9 M2 h+ ?8 K& M
  642.   case AP_NOTHING:. @7 _0 h3 E9 l6 [1 [9 }
  643.     switch(dwStartUpSteps)2 Z4 m+ A8 T3 X; p
  644.     {
    3 \# k3 k; d; o) W: }" @
  645.     case 1:
    1 |- N" r2 s+ _3 M! }8 D8 t
  646.       {
    5 r; Y2 s0 U9 f6 U# w' H# d; k8 F# m
  647.         int i;, d8 U. w: l3 K9 a* d6 o
  648.         CDC *pCDC=dlg->GetDC();0 X& J+ f" L+ p7 m
  649.         HDC hdcwnd=pCDC->m_hDC;* I* P3 u: `/ _! w
  650. //        Graphics graphics(hdcwnd);$ a" o0 O2 F+ p6 E% [- z, V
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    9 k1 h0 a* V4 |/ x/ Y4 e0 {4 t3 N
  652. //        INT iWidth=bitmap.GetWidth();
    % p* F! W( y  n
  653. //        INT iHeight=bitmap.GetHeight();
    0 f6 f) `6 l9 Q# A" E. x
  654. //        Color color,colorTemp;4 [1 T7 k% I) n" ]3 b
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& x% Z+ I: }  }% ]8 H2 T% s4 I! ^( o
  656. //        {, [% d4 i! R2 D! W' g  K
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++), X) T- W2 ]* {6 H7 u$ J8 h5 M
  658. //          {
    # F3 }- u, @  M
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      _" S- b2 y" {) [/ T- x9 L6 E
  660. //            colorTemp.SetValue(color.MakeARGB(" L" |" V; Y  j: p% n' L
  661. //              (BYTE)(255*iColumn/iWidth),0 M& \+ O* z0 h& a' q( T
  662. //              color.GetRed(),  K  P8 l% n$ B) G4 N2 H% Z. t
  663. //              color.GetGreen(),
    6 k( ~6 w% p1 k6 `! F3 I: m
  664. //              color.GetBlue()));
    1 I8 L) T9 g- r# d# y" Y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);7 J/ R% q% z! }4 X& q( n
  666. //          }
    . P, W6 c: {: V' n
  667. //        }
    8 ]" B( V/ a( ]  ^$ o& a$ U2 w
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);) O$ Z: H; v3 C/ N* |) `
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! {4 v3 F0 H9 R' ]5 _: l6 V
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");, ^) r; ~/ a- s- W  m" t
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: r/ i3 W% I3 J. Z! c( {
  672.         for(i=0;i<240;i+=8)
    " t5 A! X  x2 O- Y. p
  673.         {
    4 {6 W1 l8 y/ P; y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);8 k- k; e% O' a5 F6 v) T+ Y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 x% M3 O! L5 a8 Q+ N; |- i; ]0 @
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 ]& [9 _) ]. ]- d; }& I/ F, @
  677.           Sleep(33);+ Z& e+ P! y' G; o' I
  678.         }
    . o5 R0 j% n6 ~/ ]* M
  679.         Sleep(1000);) ?  s* q0 a- [) y# R
  680.         for(i=240;i>0;i-=8)! \  X  G( R1 h3 A  e7 o. s
  681.         {
    . S; q+ i, T- \) Z/ Q7 h& c
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 l; J* y# e  f
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 s5 y  v1 M( p6 P6 _
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * M- r" }) R- ~) h
  685.           Sleep(33);
    " [6 o/ g. S/ s# N+ ?
  686.         }/ s- y' d% }6 d7 e6 p. \. F: o$ l. |( F
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);; [" b8 M; }/ G; E, j- ]. ]
  688.         dlg->ReleaseDC(pCDC);) o7 q/ h" [  ~& {
  689.         DeleteDC(hdctar);
    4 u7 B9 n: S8 Y4 t) W
  690.         DeleteDC(hdcsrc);8 w( d5 Y: N) J  p! w& O
  691.         DeleteDC(hdcorg);, Q; v! a$ Q5 f
  692.       }
    + l5 t' |6 ?& s$ {" \
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    2 q$ l, f  e# p, y$ ~
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");& I( j+ H1 L2 V4 g
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    - y# C9 L7 f# V. B  m. p
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");; S' [+ G) d8 B1 Z. i/ w
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 d' b( c% |4 T+ N
  698.       if(!Dn.Connected())3 b2 R1 r' J% ?7 z" r3 I# _" J
  699.       {9 b4 |$ P% U! j. R% H! O
  700.         dwTotalFiles=1;
    ) }; Y8 R6 F* {
  701.         dwDownLoaded=0;% B% s& V4 Z1 \5 S2 B8 s
  702.         bSilentStep=TRUE;& u+ P# D/ P+ }8 L: K4 k  q
  703.         bCompressed=FALSE;
    - a; o, r+ I' `7 `. P
  704.         strExtLocal.Empty();4 T0 l" y+ c3 V/ A
  705.         strFullName="readme.txt";- U) o, Z5 u% }( |
  706.         dwProgramState=AP_CONNECT;
    ) r9 Y3 k4 F+ J4 \" Y# ~
  707.       }
    3 u; @# \9 e* r2 w1 X9 |+ `* `# R# T
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    6 G4 g; O8 G. {* l( @  y8 U7 g/ S
  709.       dwStartUpSteps=2;9 [& }6 `9 {8 O& E" H' I( A
  710.       break;7 K& t" f* c! C; k3 l
  711.     case 2:
    8 F' G9 A- u1 c% G; A- {9 o" ]3 ?
  712.       {
    9 \/ Z3 V/ f4 F5 O7 ]
  713.         int iEOF;. O" P/ s" ?# b
  714.         FILE *fp;/ p1 x# ?! `  q, n
  715.         char szString[512];
    9 M" h# D; q  j  L7 X3 m
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' V1 r4 Y  ?# E
  717.         if(fp)
    3 V, g) o. |& c) I/ B
  718.         {* M6 k1 C8 Z4 O) a9 W
  719.           do, v$ h5 M; n9 ^: R* v: o3 @
  720.           {
    ) {8 m4 J4 M& @8 h8 P3 e) a
  721.             iEOF=fscanf(fp,"%s",szString);5 p' W$ K, r! h7 c6 |0 P
  722.             if(strlen(szString))
    8 A! A& R1 ~2 q; U
  723.             {
    & V$ p1 a" R  m
  724.               if(bFirstChar)0 s0 _$ ~; C( d3 k& [: O1 l9 W
  725.               {
    ; p7 ?9 b9 A& o, v' @- J
  726.                 bFirstChar=FALSE;) }& C/ g* Z' H
  727.                 bConnectIsBig5=FALSE;) m1 @0 ^. G# N; `* T
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;, h  j: b2 v" `* }/ T
  729.               }
    ( H9 l  q( P2 u, ]
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));0 J3 p+ X* O$ \1 A, u/ \4 o; x- ?
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ; N5 P; ^# h' {! d1 D: d( J
  732.               dlg->m_ListText.AddString(szString);6 A% N9 m, L% Q0 f' r( g
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# ?& k5 J% I2 z$ o
  734.               *szString=0;* s8 |% Z% u9 _' Z3 o/ t9 V: Q) l* x
  735.             }# d8 d" F' e# h) K2 r, _
  736.           } while(iEOF!=EOF);
    ' |  A( G! d- Z. d' K% y
  737.           fclose(fp);
    % D; q* k$ p2 P! {- q
  738.           unlink(".\\DownLoad\\readme.txt");3 P  g( v- @  Q+ r" u/ K
  739.           dwStartUpSteps=3;' \+ [3 J4 _0 c7 {! A0 B6 y" }
  740.         }
    9 r; w9 H* X$ u7 \2 h# P( s
  741.       }" {0 Z( P2 B9 x. z
  742.       break;
    2 p0 p: R$ W( u+ `- V; P* r
  743.     case 3:, Y8 H1 O6 Q5 m) x1 f7 i1 e1 w4 D. |! ?
  744.       if(!Dn.Connected())3 f. F" ~# @, c- s; }& M
  745.       {
    & a. U% ^& d7 [( ~. a' C2 r$ f( g
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    6 Z# B) v! ^, y* I3 H2 u
  747.         dwTotalFiles=1;
    * ?4 w3 D. _3 \' n3 \$ [# c
  748.         dwDownLoaded=0;+ w0 H: S% e7 r( j0 G
  749.         bSilentStep=TRUE;* {5 O1 ]3 a6 z! c
  750.         bCompressed=FALSE;# Y: T* x6 G; ~- \/ G7 w
  751.         strExtLocal.Empty();/ U( B0 i4 V. y$ x
  752.         strFullName="checkversion.txt";3 b7 j) h& I& d& O; H
  753.         dwProgramState=AP_CONNECT;
    + N% o4 Z" H4 }6 ]4 J+ B% M1 V/ ~
  754.       }/ P* h* |/ l2 X- D+ l! Y
  755.       dwStartUpSteps=4;, j3 B' T) N. S) _9 u
  756.       break;
    4 U1 |9 q5 g, T9 ^7 ~
  757.     case 4:1 y8 a. b% q5 Y
  758.       {
    . Q# ]# O  x$ I0 D, J
  759.         FILE *fp;
    ' B0 H# y& X/ e) t6 e- ^3 ~
  760.         char szString1[128];
    - C+ n. L- P# S5 u0 N) a. o
  761.         char szString2[128];  u9 z1 [3 x& V7 g* l/ H; m) E6 s
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    9 s! G# o) W! T% f6 B+ R& i) @
  763.         if(fp)1 |6 P! \  l' U' w  N
  764.         {- z) E) N8 m% E+ g2 |1 L" O4 V
  765.           fscanf(fp,"%s",szString1);
    3 k7 p/ E; e* M
  766.           fclose(fp);% d! n% v+ G. v/ \; B
  767.           fCheckVersion=atof(szString1);
    9 _( n! |: _3 ^$ K2 r- f( L& o
  768.           fp=fopen(".\\checkversion.dat","r");
    & Y) \% U- Z6 v4 Q4 I& Z; {1 R- u
  769.           if(fp)
      }9 c. X( f  N3 r: r  ~6 O( p
  770.           {. V4 w& b( _* J% l6 W
  771.             fscanf(fp,"%s",szString2);
    $ Z. D) @- o& J8 T
  772.             fclose(fp);# R2 B2 F: l. T1 C( V7 i
  773.             if(atof(szString1)!=atof(szString2))
    . D- v1 A! c1 C
  774.             {9 x/ g2 N$ C& S" G  G7 U/ W
  775.               if(!Dn.Connected())4 E- A3 }, \& X' y& r/ U
  776.               {3 ~" D$ c& v- l( R
  777.                 bFirstUpdate=TRUE;' u$ t4 t2 T4 _) u  ?$ ^
  778.                 dwTotalFiles=1;
    0 |: T7 }% c! V2 x% `: X+ H
  779.                 dwDownLoaded=0;9 c& L, K( f( k3 x$ @- w4 P
  780.                 bSilentStep=FALSE;8 c% l( a  l4 I6 M4 O. `# `& V
  781.                 bCompressed=TRUE;* ^; x1 B$ D9 O$ K  k
  782.                 strExtLocal=".\\DownLoad\";# Z8 C# P6 H. ?/ M% z& u9 C
  783.                 strFullName="update.txt";) T' r! [" \. @; R
  784.                 dwProgramState=AP_CONNECT;5 J3 B6 n# I# J4 n0 |: X
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + a2 O+ X& V. x! m: {: D
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , s9 ^& v  t' J2 y: g1 |7 u) R* q* y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ J- x  L) R$ T( S$ L2 y

  788. * i2 y3 x. c* {3 J+ O& {
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 p2 H9 d% Z, g6 y' B# @: B. n( H
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    % Y( W8 D0 l' G
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 H7 p( y3 m" h+ U# }
  792.                 {
    3 j3 t, `0 o- M; o; y9 W( T: }
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 q8 ?' o+ P5 j$ l( Y. O8 w6 V
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");, J* r1 i6 a, e. O! _7 N
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");8 Q2 W* G3 I% P+ a, m' y( `& W2 V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( U; X: X- G; ~7 p0 C
  797. 1 n; e$ ~! }, Q; v: n1 c
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' T. n9 n) L& D  {0 j( u) T
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 T: Y# ?- L  C; E
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");" V# M* C+ ?4 W
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 p( X$ o6 r1 ]3 `: ^
  802.                 }/ q; ~8 g! ?% h; L1 D4 n8 a
  803.                 dwStartUpSteps=5;2 g9 C0 I: t0 H# i9 W
  804.               }/ l  X: E. I2 m$ y7 v
  805.             }
    . b1 U3 u* w6 M7 h1 O! S; q
  806.             else
      {+ S( B' v! k$ S: }% p& _
  807.             {
    6 l0 v" ^) w# Y% u/ g# u. s
  808.               unlink(".\\DownLoad\\checkversion.txt");
    4 a7 e& R' }0 ]7 N0 ]( k9 ?5 |6 P
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");" K+ k. q8 I' O9 n# N1 B8 U$ x' d* ]
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 m! S  s% b  N! Z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    & b& e6 C1 Q4 r' X5 K
  812. & Z6 L5 s/ l3 W9 a9 V/ o
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* f) [4 ]. Y. W2 |, L% x4 \8 N
  814.               dwStartUpSteps=99;
    8 G1 y# V. C' c" I6 d& z0 c
  815.               bFinishUpdated=TRUE;! }" d+ q; F. C% T  R9 u
  816.               bCanUpdate=TRUE;; P# S+ {) `3 I/ F5 ?' e
  817.             }
    / m: M2 a3 r3 R' Y- s
  818.           }- H- ?. m' O' _6 i
  819.           else5 k) {- m) s2 o7 u# ]
  820.           {
    4 ~1 x6 x1 a5 @, s4 ?- p4 x0 ~* Y% |# R
  821.             if(!Dn.Connected())
    1 x) i# T) B. P3 t! I# i* g
  822.             {
    & i* K" X7 \6 o) {& r# @) x6 V
  823.               bFirstUpdate=TRUE;" ^! \$ \2 h! o
  824.               dwTotalFiles=1;
    " C2 u  y! v$ E0 U+ @2 @7 {
  825.               dwDownLoaded=0;9 m( H  k/ Q8 L& [2 ]- R& ^
  826.               bSilentStep=FALSE;
    7 I' V+ R' b  s2 Q: l4 i
  827.               bCompressed=TRUE;
    3 K  A! ?8 ?, C$ x
  828.               strExtLocal=".\\DownLoad\";
    3 E9 H; r: J" J+ ?7 }0 x
  829.               strFullName="update.txt";
    ) W% f" {9 ?: W( c4 ?
  830.               dwProgramState=AP_CONNECT;
    2 X4 i7 a" f, o& t; l! a& R
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! e' N& F2 J' c1 b6 c  q
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, R7 a$ q% i* y$ W% H8 ?: f' X
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");" _4 x7 [; E/ W) M
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , l; q9 X) c! d' ~
  835.               unlink(".\\DownLoad\\checkversion.txt");
    3 q( z- H! s# \" C- t
  836.               if(GetFileAttributes("Wsa.zip" )!=-1), R8 d8 J9 a/ l( s6 I1 M. o, J
  837.               {! ~. L2 K' d1 x. E' T6 i4 S# n& a
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    9 G# \' r6 u4 c6 c" _5 g; h
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");5 X5 l% X' [! ]( J4 }
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");  E% j9 j" s* j4 d! H6 {
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . K" b; \, ~7 i3 A4 e! P$ i9 j
  842.                 2 @7 u- c; j9 u1 |; K
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : h" M5 S' E( l5 x2 b7 R5 V
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. ~0 e' x" ~) z. I( }
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");& |5 A, I$ ]+ G) j* a" h# P
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 J6 E2 E! U. w8 S' K
  847.               }
    : B' u3 f4 y& _* s
  848.               dwStartUpSteps=5;
    ) ?: l, I! y! l6 \6 _" y5 Z% o
  849.             }
    + c2 u1 P8 r' r+ T+ C$ g; T) m
  850.           }' d1 e, G6 s! l* H7 \# x
  851.         }2 `% Y3 H6 h! s1 d& w4 S
  852.         else  e/ O: h# Y9 e# M- ^1 p& s% j
  853.         {9 b  ?" g) N+ p
  854.           dwStartUpSteps=3;6 r: m2 l) l" S8 [# R8 g. g5 H
  855.         }; G% ~% ]+ y  d' H* Z' @" r( D) n
  856.       }7 P% D5 B/ ]5 g% g  m
  857.       break;1 A3 m- i( q9 f) V# O+ X
  858.     case 5:5 \' b8 v6 G2 l$ r8 \
  859.       {  m& _9 Q& x8 i. ^# w
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)3 Q9 i$ Q* j# s4 C
  861.         {
    ) h9 c4 ]: \/ f
  862.           int opt_overwrite=1;
    2 a1 J! V% T: b2 @& H
  863.           int opt_do_extract_withoutpath=0;
    " c" G+ x7 f. ~4 [; }
  864.           unzFile uf=NULL;6 y8 Y! j1 b+ H6 i  u# T

  865. * I+ [' m3 t* h$ F1 F$ R
  866.           uf=unzOpen("Wsa.zip");! o8 S/ u9 N: |- m/ K1 |, K
  867.           if(uf)
    * o6 J, I" n3 x; G
  868.           {) I9 V# B$ \4 c6 o; ~* a5 h
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    7 P# v8 N! G* \- {
  870.             unzClose(uf);
    . J0 m/ j. f" ?8 s2 T, n7 S1 L& f
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    , y" ~! O* h' b4 V
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");2 a. @: ?7 h1 o3 P
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");. Z4 O4 z/ `8 w" k* P2 Y0 s
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - Q4 w% I! W* u) r* V
  875.           }- n# t8 _, o5 B6 a& }  @4 a. I
  876.           DeleteFile("Wsa.zip" );
    2 x7 J0 t* P& @  M, v
  877.         }$ X, {2 ]% ~1 _5 U% C* v; E# A5 `
  878. * I* r4 h& t; ]1 H! N2 A
  879.         if(CheckLocalVersion())
    * Z$ Q# @9 K2 D1 w. h2 x
  880.         {9 ~  t" G$ I! q6 y: j6 o
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    7 _9 O  t& @; M# h. m
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    / L6 s$ P# W$ n( m
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");3 k" _$ P" p9 {( Q
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; H/ M; E1 J  f+ ^- q" s0 z$ x8 n
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);7 k! S' s" c6 g$ l  z6 Y
  886.           dwStartUpSteps=99;
    + e7 }- v$ c! s
  887.         }5 `2 o" k- b; i. ~) Z, T
  888.         else
    * c, N: ?4 z( t; {( }3 ?# [: p5 L
  889.         {
    , p! i, s1 X4 O, o
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");, K, B4 B: ~$ O# s
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ( t, P1 x- u8 ^; E& y) k' H: G# r9 }
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");. f9 q% Y2 h- |

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

評分

參與人數 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, 2026-2-5 12:36

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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