找回密碼
 立即注册

CSUpdate.exe源代码

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

* _3 Y& N  Y( P# Q2 ^+ |" {
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ; F. C8 |( X7 b+ X  x6 i
  2. //1 u& ?$ ^" i5 i3 k+ `+ y% ^9 C( b: `
  3. / w- D) W6 J1 U2 Q0 G$ }3 h' [
  4. #include "stdafx.h"
    5 o2 [1 B% V) E. Z0 r! X: h
  5. . D0 {! \/ o* G5 g$ o2 G
  6. //#define UNICODE
    5 X4 g* h* }, {! r! n5 N1 _
  7. //#include <gdiplus.h>1 I5 O- j( q1 ~$ J$ m% @3 t2 @
  8. //using namespace Gdiplus;
    5 I2 k) A8 I3 f! i2 C5 C, Z& j
  9. 8 E$ Q! E4 Y( n' I* X. t( Y
  10. #include "RevApp.h"
    8 j) |% G9 c# N+ G( w
  11. #include "RevAppDlg.h"3 b  ~& p5 Z- e6 }) s; r' v1 }5 G

  12. * ?  q$ c4 `! T- }, A! s; h
  13. #pragma warning(disable:4786)
    * Y4 ^, @; a& M2 F8 f+ l) L  M
  14. #include <map>
    . k8 Z% e8 g, M% r
  15. #include <list>$ |2 l. _6 p* a
  16. #include <direct.h>
    6 |& S: T! z, w1 y1 X
  17. % ?; I5 R* W$ p
  18. #ifdef _DEBUG9 x* R3 e7 l9 q/ \3 t
  19. #define new DEBUG_NEW# t/ ~- w( q( N6 w: P; {8 N; e
  20. #undef THIS_FILE
    0 |; v3 f4 f7 P  k3 p0 z
  21. static char THIS_FILE[] = __FILE__;! f! K9 M1 q3 x7 Z9 s' \7 E
  22. #endif
    8 j! A) s. \, Q4 ]9 H
  23. #include "SkinResDef.h"
    : ?9 a" Y9 c. A& A) e+ o! |3 h9 L% X
  24. #include "ChangeBG.h"# f$ a& f" q3 T1 a+ X. _" S
  25. #include "AFXINET.H"
    ) Z2 X. z1 p3 |  N
  26. 5 B* a/ W2 S# d7 L
  27. #define TRADITIONAL_CHINESE 0
    9 n- m& l8 p" }. `, Z
  28. #define SIMPLIFY_CHINESE 1
      M( W' `: A5 s6 }! k
  29. #define ENGLISH 2+ F' z# c  U. J) R" I; F  L2 C
  30. int m_iLanguage = ENGLISH;
    ' W7 a9 L& ^% B3 f
  31. /////////////////////////////////////////////////////////////////////////////' [$ |0 O% F3 D+ F
  32. // CRevAppApp* H3 ?# [; V$ ~, \+ f1 z# {, D, Y

  33. - _; ]! ^3 T( T* q) Q1 {
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp); c" {+ H. B5 Q
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    1 t/ B8 ^/ X: T. N$ P
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.1 k5 i  B) x0 {
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!7 U5 w' G( y# c  S" v; |; N! o
  38.         //}}AFX_MSG% R% w% N! Q7 S+ w2 v
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    0 j; V' Q1 S/ _( J- B) y4 O
  40. END_MESSAGE_MAP()
    6 O8 X4 O9 [" ?
  41. 6 K6 I9 d. L' [- F* T* f$ H9 ~
  42. /////////////////////////////////////////////////////////////////////////////
    " S. G& x7 ?: [% R
  43. // CRevAppApp construction+ u% U! y6 l4 `; v+ r
  44. 4 ]$ p* I- S% O3 J7 T! @
  45. CRevAppApp::CRevAppApp()
    : M% c% n7 i" i9 y
  46. {
    : E" h- b( h: o" e1 N
  47.         // TODO: add construction code here,
    ; H- x2 k4 s+ L9 l
  48.         // Place all significant initialization in InitInstance
    6 ]4 y8 A5 [$ N# d6 N' V
  49.   bDisplayIsBig5=FALSE;2 D6 G% s+ Z9 E) a
  50.   bRestartUpdater=FALSE;
    & g; J& T4 ]' k) T) m4 a0 ?
  51.   bFinishUpdated=FALSE;: C7 K$ Y1 O& f1 b4 g% a4 K8 H
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;& s3 n* d7 |) a, c7 s! l
  53.   InitChangeDataBig52GBKS();
    5 h& U1 i: F3 J' e, Y: G5 N: E
  54.   InitChangeDataGBKS2Big5();+ Y0 n2 j9 U7 w: k! o' W% g8 I
  55.         //
    3 P- Q8 r& F/ n. j, H$ f! u
  56.         bClickRunExe = FALSE;
    % t4 J" z0 s- C3 }" I
  57.         //
    & [* Q9 {, l2 d
  58. }, V, h) t4 u  y( g
  59. , j4 w) y" S/ X7 x. p( r# j
  60. CRevAppApp::~CRevAppApp()3 z' b' J/ B, t; g% Z
  61. {
    8 \3 ?9 W1 {! c$ B8 O- Q
  62.         // TODO: add construction code here,
    " K- I7 L# J1 {# x$ C" f/ H
  63.         // Place all significant initialization in InitInstance8 }) H9 k. n- R! ^6 g/ R0 [
  64.   EndChangeData();0 G0 g6 S1 C. m" F* Q) u
  65. }
    9 u) D3 Q4 \. G  Y
  66. 4 _6 N0 W, D5 u4 g* _5 b) u+ Q- P
  67. /////////////////////////////////////////////////////////////////////////////
    6 c& R" w0 u2 [* E, Q
  68. // The one and only CRevAppApp object
    8 f5 T9 D( w1 q+ A6 X( f
  69. 7 t, U# E4 ]2 V$ o  Y
  70. CRevAppApp theApp;
    - W; e9 q+ ?  k3 t0 t
  71. ' w' b# e' B2 `* Q9 W
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : M8 k# b6 m  l. i3 l4 _( Q
  73. {4 C( Z4 k* B# x0 n0 O% r1 e& ]
  74.   int iEOF=0;7 @! P% ]4 I( \) ]% w4 s$ K
  75.   char szTempName[MAX_PATH];! u/ S2 Z/ [" H5 T0 O: B
  76.   *szFileName=0;
    9 r; D+ M/ K1 V+ K2 N, ?- B
  77.   iEOF=fscanf(fp,"%s",szTempName);" V0 z) K% L6 Y% y  c3 V" u
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')  d% v7 {- h* s& `1 N% R6 N
  79.   {. d! H! M; V* U
  80.     strcpy(szFileName,&szTempName[1]);& \2 \& _. `/ `& a7 d
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)& H( a/ q6 J  f0 r, N" e
  82.     {
    3 Q; v$ ]1 d$ {: N2 j
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ' e1 x: D8 J; @# [1 l0 l2 @
  84.       strcat(szFileName," ");
    ; E' m+ I$ A* e- Q6 m
  85.       strcat(szFileName,szTempName);$ y- i6 G3 o$ Y; |
  86.     }
    9 r$ L9 }2 }) H  E/ X! o
  87.     if(strlen(szFileName)>=1)
    ( P9 h- r8 b6 B& }: u; D, x4 N
  88.     {8 X3 t- y. b6 Q& f  z) w
  89.       szFileName[strlen(szFileName)-1]=0;) p: j. T5 O6 M, D
  90.     }% x: T9 E7 y% K
  91.   }
    " b+ K2 c( ?% D/ `7 J3 V7 U
  92.   return szFileName;7 {! z- V3 Q3 ^
  93. }
    ( V+ C9 }1 x7 H* q2 b
  94. ) n9 i1 |/ w+ q( ?! o  [: s
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    : q2 b- V/ g% y) g
  96. {
    ) g; R8 {; W' X& C: L3 {
  97.   FILE *fp;
    # o6 t: O. S" v; Q
  98.   char *key=NULL;8 x- |1 N( A: B5 v+ Z* `9 m
  99.   char version[MAX_PATH];  h5 i- Q, j+ N# |* z7 }
  100.   LPUPDATEFILE file,olds;- v8 Y3 H6 o5 O/ H* Q5 @# {
  101.   std::map<CString,LPUPDATEFILE>::iterator p;' d8 Z4 X. W1 H0 a4 j

  102. 7 v1 e$ V6 ~  ?; @" p' I! V8 i
  103.   UpdateList.clear();
    # b  x, R! I% Y) J  ^: w5 s! \8 R- C
  104.   UpdateFile.clear();
    + J( `5 v& A" T! c% `/ M/ e/ i: Z
  105.   if(GetFileAttributes(filename)==-1) return false;
    ' @4 F& [# B, H% d
  106.   if(!(fp=fopen(filename,"r"))) return false;
    # H6 z  o& I$ i/ Z; F! V
  107.   fscanf(fp,"%s",version);* ~3 a/ o( {8 l7 d  r
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ' g% x( j' f# E
  109.   while(fscanf(fp,"%s",version)!=EOF)7 {- ^6 n( l1 @  S
  110.   {
    + i% `5 D2 B" u7 \
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 x- {4 d, S3 C: n
  112.     fscanf(fp,"%s",file->path);
    * ?* g8 [5 \  X/ p0 a+ D6 c
  113.     ReadFileNames(fp,file->file);
    ) I/ z5 j, s: T
  114.     strcpy(file->full,".");
    ; O, y3 ?/ g: c, X( t3 x
  115.     strcat(file->full,file->path);( |# V4 S5 Z$ [: l; d
  116.     strcat(file->full,file->file);
    / |( Y  p0 f, A$ y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& m, U) X. B; H
  118.     {
    ) H1 X. p$ x. }/ a8 H5 \7 j- o6 Y
  119.       file->vers=(float)atof(version);8 [+ O4 e" S+ [: n0 y% N; a  s6 ?
  120.       UpdateList.push_back(file->full);" U, e: k' \+ A) D5 L4 m& l6 R
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    0 d  _, J; q& G$ d0 B2 `) D, F, ^( F
  122.     }
    ; f% X* |6 L7 K
  123.     else/ _2 n$ F% V4 V# W, l: s
  124.     {
    + i+ U# O; k4 ?* @# n
  125.       olds=(*p).second;  Z' M: F6 J0 S! s) m
  126.       if(olds->vers<(float)atof(version))
    1 a7 b  d0 n! z' i
  127.       {
    ) t, B. n2 w8 p2 F
  128.         olds->vers=(float)atof(version);
    $ ]9 C+ M2 ^/ H# N, F1 v1 @
  129.       }5 p7 `8 C* _4 g7 |( q8 G8 e
  130.       free(file);
    0 A+ F  X) m; L
  131.     }
    9 E0 c+ Z/ ?; L8 _. K4 P
  132.   }" g' \( r6 u1 A  z
  133.   fclose(fp);
    ; w9 ^' j, U! m9 Y
  134.   return true;/ M2 s; p* f/ a% [; D) \4 Y
  135. }
    3 X4 L( S, |1 r

  136. / i$ L! m9 t3 I6 Z. j
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  W; w2 u5 Y7 Y2 F6 T
  138. {. c: m3 k- f  g" ]
  139.   TCHAR  szFull[MAX_PATH];
    5 O7 t+ H! Q- {& @  l4 a0 Z
  140.   TCHAR *token,*inter;
    " G- v6 n1 O1 o
  141.   *szPath=0;3 a/ p4 h* K! r9 X1 B+ H2 L
  142.   strcpy(szFull,szFullPath);
    # G" d; A6 k9 m: L4 w
  143.   token=strtok(szFull,"\\/");
    9 j( [! d" L/ \/ \1 @
  144.   inter=token;1 @9 P9 Y3 c6 _7 q% S8 u& c
  145.   while(token=strtok(NULL,"\\/"))5 D" [9 C" y" ~/ k/ B$ B
  146.   {
    2 E' ?/ L, {( i, J' F  L0 o/ g
  147.     strcat(szPath,inter);% B4 {( z7 F3 y$ v% T! b5 ]7 L
  148.     strcat(szPath,"\");
    . r* E+ F9 H8 n) w* ^# j# C
  149.     inter=token;7 B, E* L- [3 @3 k, X" r
  150.   }
    4 N+ y" w! w/ U8 D
  151.   return strlen(szPath);
    - H/ u/ A  n. e4 Z4 Q" X
  152. }& C! V5 {$ W6 O% l) \, m
  153. 9 D( ^) W9 q; {& g
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    6 ]- [: T5 \  p. X: y  W
  155. {
    : p/ T7 ]4 Z; U& p$ X: e
  156.   DWORD attrib=GetFileAttributes(Target);2 l  ]' t+ m8 X- r& g5 S' Y
  157.   if(attrib!=-1)
    ) ?+ ]! b+ I; u
  158.   {
    ! Y9 O' t+ m& M5 ?7 E8 e
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))( M$ O+ w% S3 r6 i8 o5 V- d
  160.     {
    ; ]1 }3 E& H/ {# Y  Y3 R+ r
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ w% h0 U. t! g5 y  \
  162.       SetFileAttributes(Target,attrib);. o! c3 d$ l: J: Z
  163.     }+ J0 X- ~. V2 N# ]6 e0 P+ L* [
  164.   }% J) h5 q+ {4 ]& \& e. _; S7 o, ~
  165.   CopyFile(Source,Target,Erase);3 j. \6 U& ~" f7 W: l% V" J- a
  166. }
    4 a3 z" a9 t8 v# O* `' B5 Q) J
  167. 7 u$ \; Z" ~: ?: ]1 ~2 }& M
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ) w; [# A; ]. S/ l
  169. {& l. H, H1 d3 W1 j+ T7 ]
  170.      FILE *fp;( P; L3 n# u/ Q4 l  u
  171.      char  szBuffer[8192];2 Y/ Y: X$ m5 Z* ~
  172.   va_list  argptr;! s5 E" t" C. @
  173. 5 a) B+ \: _" p  e! U3 Z
  174.         va_start(argptr,message);
    : N4 c  e8 E. D* Q' s# u# S
  175.         vsprintf(szBuffer,message,argptr);
    - f1 @( c  a! g, X
  176.         va_end(argptr);
    / \, k! L# N* H6 j% ]" ^
  177.   fp=fopen(FileName,"a");* }' a, }% m4 T, B
  178.   if(fp); c' Y3 v3 U9 a+ t2 U/ W  N
  179.   {5 p4 c* L& }; {
  180.     fprintf(fp,szBuffer);$ Y. ~# e) Y9 ~4 l2 T
  181.     fclose(fp);
    . d) w1 H5 C" Z" v
  182.           _flushall();
    4 O9 V3 w- C9 b. R. o6 o1 h3 w
  183.   }4 r7 S0 z1 T, d3 x: J( O
  184. }
    - w. p" z+ o# ?  |! U1 q

  185. 8 z4 j( l0 S7 C( X& k! m
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    : ~+ A1 p; i5 E+ G8 t5 l1 r+ T' N  i
  187. {
    6 l: f8 d7 K- M8 s4 P3 F9 d
  188.      FILE *fp;! w; P2 p& _" A3 Q0 c
  189.     DWORD  attrib;
    7 }4 j& U0 Z5 K* G  t
  190.   attrib=GetFileAttributes(FileName);) d7 d' R6 l5 b; |" x- T
  191.   if(attrib!=-1)$ t" J8 I" W% c& B5 t9 g0 U
  192.   {
    " |( g9 w9 j# C
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);9 m: C8 F+ k! y
  194.     if(!SetFileAttributes(FileName,attrib))
    ) _* H! ], p- S6 @. i+ _
  195.     {
    2 [2 X5 H' _# b2 [, m. P+ I
  196.       return FALSE;
    + Y( q8 W* {& m/ o( G3 T1 h6 X
  197.     }
    ! @" q0 v4 l; b5 F  V
  198.   }
    ! B9 D6 \* M0 d
  199.   fp=fopen(FileName,"wb");
    $ d! |' ~6 f' I# d" c! T
  200.   if(fp)  |' T. p" _; i/ {
  201.   {. M( z: |* G# l, z8 N: g( D, k! k
  202.     fclose(fp);
    % P* |; I4 g/ x" b/ \/ N
  203.   }
    7 c, b) g$ y$ h' P1 Y
  204.   return TRUE;/ d! \; ]% n) L
  205. }: h9 q- H6 s! E% A' \0 {% {

  206. / ~& v. M2 K* v0 x
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ! ^7 j  k. D9 Y) H  j1 e. _# [
  208. {; V1 S* j5 D) m( }7 {8 b) U- G
  209.   char filename[MAX_PATH];
    4 J6 i+ ]1 Z7 Q/ A
  210.   LPUPDATEFILE file,olds;0 w: Z4 x, v; C( _! n7 {& A, `
  211.   std::map<int,CString>::iterator i;
    / E8 @7 s& @/ P0 o# w8 N
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' K$ Q1 x" @# w: i6 S- e
  213.   std::list<CString>::iterator l;6 i3 g1 u( w7 s6 k
  214. ; W8 Y' t7 l: C- x* R
  215.   if(bFirstUpdate)1 b& O# n( t1 s
  216.   {- O* E# }4 _. `: U: \% r/ e+ P
  217.     dwCurrFile=0;6 a, X- Q  N7 z  Y
  218.     bFirstUpdate=FALSE;
    ; G* T& y. b! C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & g, }8 t7 I! J# Y- w8 T
  220.     {+ D" L' f4 ?  ]# p- x' ?0 z
  221.       dwTotalFiles=UpdateLocal.size();
    " q- d" Z# n' |( I
  222.       dwDownLoaded=0;
    7 z' x$ E! i4 {5 w1 A
  223.       bSilentStep=FALSE;$ y4 |4 [, A% ]( G# r
  224.       bCompressed=TRUE;9 i: {0 G" ~% n# S! ]: L+ c
  225.       strExtLocal.Empty();
    0 f' W* Y2 a. F$ V0 C
  226.       strFullName=(*i).second;
    # R) U9 {0 ^, M/ n/ W" Q
  227.       dwProgramState=AP_CONNECT;1 [: G5 C# u9 `" b1 z4 z. Z! _6 t7 g
  228.       return TRUE;. i# Y/ H9 N3 R4 ^7 Y* V' ^
  229.     }
    & d# X5 v0 {5 `$ n- b
  230.   }
    3 B$ H6 t$ ?- X! V
  231.   else if(bRestartUpdater==FALSE)
    ( \! F, H. z8 A. H. g
  232.   {
    4 s1 H5 z7 B/ w( m6 L* X$ {$ D, v. d
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())1 w" w/ z( e4 c0 W! @
  234.     {" Y$ p) V/ G6 E! F2 J! a
  235.       file=(*p).second;
    % X( Y( `# j* X& H  _, [! s8 n3 H! ?$ t
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    " v& {4 Z& C& G1 \: w4 I
  237.       {
    + N4 h2 s% S. R: _( e; `( R& j
  238.         olds=(*p).second;
    ( B, H( t& X0 U% p
  239.         olds->vers=file->vers;
    $ r- f! N. U  E* F/ A
  240.       }) M+ M6 v9 Q/ R: v' o
  241.       else! R6 Z, L! s+ x& ~# Q$ G  E) G1 k' Y
  242.       {
    , K8 u3 c7 ?5 v+ L7 O( X
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , z: d2 V6 `' `% @8 c; n) S
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* U3 |, Y3 w9 {! I0 Q6 ?' G0 X# u
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    $ l: a5 [* V0 U, e5 M
  246.       }
    2 A9 }) T, z( O. g. t
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");  @, G, e( W; \! k$ T
  248.       sprintf(filename,"(%s)",file->file);
    , c0 N3 T& K6 v+ q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% C1 a/ Z2 V5 R0 }: h0 G
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    5 u* Y4 C4 l0 |" _
  251.     }
    9 U" @  P; |3 d5 y: t  R2 n
  252.     dwCurrFile++;5 M8 ~! E2 I8 _& R3 M! h* G! R
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 b6 a8 _5 q5 d; N- _# U
  254.     {( O5 z/ D# }+ h9 X1 c" `/ m2 s
  255.       bSilentStep=FALSE;9 R+ P# ~$ a. a9 s' f
  256.       bCompressed=TRUE;4 p. Q! C. N/ ]. M. D: {9 e
  257.       strExtLocal.Empty();
    . D; [! O2 I% i/ O
  258.       strFullName=(*i).second;
    / f2 M. |0 p+ t0 B% u# U
  259.       dwProgramState=AP_CONNECT;- c$ j/ w" f9 j0 W9 X
  260.       return TRUE;
    ; J& N4 i3 o% {9 T6 x1 c/ L( j% m
  261.     }3 }" N, W0 L5 u
  262.     if(!bRestartUpdater)
    8 x9 |8 z  K! T8 X5 _& [+ C
  263.     {) d6 k9 v3 G6 [; I. Q7 e
  264.       int iCurrSize,iFileSize;
    1 }8 j- J8 I$ n0 B
  265.       iCurrSize=0;
    1 u2 @. A3 v5 `" d3 s4 F% A& o* U
  266.       iFileSize=UpdateList2.size();
    5 ^5 u; ]  N8 i$ U( D) l
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    8 n4 ]  |& \, q* q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");; L0 F1 m) G' }1 Q6 O- p
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    5 {  y/ B# [* ^
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 L' j1 e9 B3 c3 P$ z. w
  271.       Fclearf(".\\update.dat");
    / g" e3 G& r6 c5 q) d- B
  272.       Fprintf(".\\update.dat","Bloodyf\n");" I+ B1 l# {( K. `
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)3 n9 a) {1 x, C( O( w
  274.       {
    5 _+ U5 b  I$ d7 E% W" `7 @- y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    / c" C# v$ T0 ^7 W5 _4 i0 U- F4 D
  276.         {
    1 ]! q7 N) G* ?; z
  277.           file=(*p).second;9 X$ C+ I* m- ^. D( |  t: L
  278.           sprintf(filename,"(%s)",file->file);
    ( w( S, p' ~3 [' W1 ?, D% }
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) j2 Y3 B' _7 s6 q% t+ N
  280.           iCurrSize++;
    , c( _: b. a7 }+ Y. C% y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));7 d7 s1 ?, i, H1 h3 L
  282.         }
    * Y1 a0 K% C# m$ U/ m; d3 y
  283.       }
    : y2 _6 v8 Y/ A
  284.       unlink(".\\update.txt");
    $ W- D/ f& e& @9 j2 ^( D3 ~. |$ i* M
  285.       unlink(".\\update.tmp");$ `9 e; O& K8 d; w
  286.       Fclearf(".\\checkversion.dat");
    1 E# L- I6 R9 U# p  y7 g! Q* ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' u5 W' K6 z$ t% f% [
  288.       if(UpdateLocal.size())6 i7 D4 i! |8 `5 \3 _% E0 ^! \
  289.       {
    # {) J! H; M; N
  290.         UpdateLocal.clear();: `9 @3 R2 e  g8 ?- ~% e
  291.       }. V/ E7 \6 ]" b. w2 F: O/ J) u+ d
  292.       if(UpdateFile3.size())( Y9 Z, H! p, @  S8 d7 }/ T( F
  293.       {
    - r+ I6 Z% o8 T6 V3 Z% n3 h6 l& _
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ V' t9 v4 P2 R& ]
  295.         {" ]. m: o$ [& `
  296.           file=(*p).second;
    9 i# Z) I, r# b, ~  Z( X9 S6 i3 h" B
  297.           free(file);
    ) c2 d5 }1 K! z
  298.         }
    6 h, p/ }0 ]  ^- N) j
  299.         UpdateFile3.clear();5 A5 J2 t1 ^* V5 Z
  300.         UpdateList3.clear();
    # z6 @! r: F, T
  301.       }8 }+ ?& L- a" D
  302.       if(UpdateFile2.size())
    / o0 B4 L/ |) c% b4 B% T' n# A
  303.       {) p+ r7 F( \; ], I, s5 y* a& N
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) y" s& x) ~8 a2 {0 T
  305.         {
    ; \: T. Z; Y. s
  306.           file=(*p).second;9 D* ?% [4 N. V. O( v- s
  307.           free(file);
    * C9 V5 i" c+ v% A+ x
  308.         }
    ; I& B4 T* k5 `& x- \' Q1 z- l& [2 d9 y
  309.         UpdateFile2.clear();( H6 v0 r8 R1 S) g4 o& A6 R( ~& s
  310.         UpdateList2.clear();2 X8 I4 L- d- L) w2 L
  311.       }9 `( m: n) V) u$ \7 P. y: c
  312.       if(UpdateFile1.size())
    2 `7 g, |5 Z) u* M3 V# S
  313.       {' K% M( V8 s/ n8 I
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    9 ~  F  b0 z( j
  315.         {7 p1 a5 u0 q$ i
  316.           file=(*p).second;
    8 O8 [: b2 c( [+ `5 @
  317.           free(file);
    / `& o& |) v. d+ I1 M+ A
  318.         }8 L9 @7 x+ F5 {
  319.         UpdateFile1.clear();. N# P# Z: j! b; N: Y
  320.         UpdateList1.clear();
    7 U6 b: N* t$ O- F/ U# O
  321.       }+ O7 g0 p) D" D7 [( L
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));; b  y* i, u9 X" d- G0 P
  323.     }
    - l( c5 y! \7 i$ l
  324.   }
    3 p' `2 F! J3 _4 [4 a* D- `& {
  325.   return FALSE;) A7 r( x0 ^- n
  326. }: E- L* i( U( H2 E- N! A. z0 L5 t

  327. 8 y; K5 V& J" X* U1 c2 R
  328. void CRevAppApp::ClearAll(void)
      K) d2 _4 c1 A0 M1 F" N
  329. {9 R: J, a+ J- J7 O9 L
  330.   LPUPDATEFILE file;
    3 J) C1 G8 `0 ~' h* u$ t" \
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    & _/ s! A( C/ H2 Z6 v1 s  B7 [/ Z& \
  332. 7 g; K) {/ Z+ l# L
  333.   if(UpdateLocal.size())
    ' j1 M/ c# |- {8 b
  334.   {4 X9 D) o) ~# z: O; l% ^: i: q
  335.     UpdateLocal.clear();; z# t0 d, N1 `! N. |
  336.   }
    & {  \$ z6 g3 G1 K) _
  337.   if(UpdateFile3.size())/ f5 l$ H+ @/ i
  338.   {
    8 V5 w7 m! D0 Y: H8 O( w- f
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 X1 b* N' P& h6 X
  340.     {
    ! W5 a! ?/ n; o9 n5 z  N/ N
  341.       file=(*p).second;
    % c) D) r$ M9 ~* A% o2 [5 F
  342.       free(file);4 k" r: ?7 w1 L9 N1 s# a4 `& M
  343.     }
    $ Z! ], ?5 ^8 \) l& v
  344.     UpdateFile3.clear();
    4 p# t1 Y* b, Y) C! v! x9 t
  345.     UpdateList3.clear();+ W' {1 V* `$ H! f
  346.   }+ p- L* M/ U8 x, D
  347.   if(UpdateFile2.size())+ }" e& z& f$ x) I4 p
  348.   {
    / l* O! m( V+ P4 N; O$ Y- o
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( W& w! \. u7 ^3 x
  350.     {4 w3 N, s# q+ ?7 T0 V
  351.       file=(*p).second;
    8 U4 X& ~' S' ^
  352.       free(file);
    ; k, y7 f. q0 l" U# \* w7 Q
  353.     }6 Q+ Y% Y& J2 e" W0 V1 Y% d: f
  354.     UpdateFile2.clear();
    1 ^6 \. D9 B2 `) p+ v; N
  355.     UpdateList2.clear();% C* d7 x) l& N- k- Z# ]% K
  356.   }
    2 l* W! Z1 M: @$ [) a# D* s
  357.   if(UpdateFile1.size())
    * g: c* v8 p, J
  358.   {! w6 x7 s6 n% w6 K: O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    * H  l5 C$ a+ T" J6 G
  360.     {
    2 Y% t5 I# ]. {5 U/ }
  361.       file=(*p).second;
    : k9 j  x% J, p) d& P
  362.       free(file);" ]* J5 H) ~( n4 ?
  363.     }
    + Y5 h/ W0 W2 h! }: u* N
  364.     UpdateFile1.clear();
    & u6 g" L7 X" y' x
  365.     UpdateList1.clear();  i" i' s7 U, X) c7 y9 R$ p! {5 C
  366.   }
    $ i! M( t) c! ~2 U- X+ O
  367. }  
    + i* {: Q3 r4 t2 L
  368.   . m* s! _. |+ E" ~. p' b7 D9 }
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    2 G" i5 E9 u5 {2 O9 Y8 W* [% J
  370. {( d9 a9 ]0 Y* F# B! @' s$ @9 }
  371.   int c;
      d+ f6 A6 n4 S# d% X2 U- T
  372.   LPUPDATEFILE file1,file2;; h  {$ m+ X& ^+ C9 ^9 n+ U# Y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    % m: i% u: G1 t; \% s/ L3 ^
  374.   std::list<CString>::iterator l;
    9 }& M! R% Y! I" f/ H
  375. 7 M" c1 ?- o4 c1 O6 n! c/ M
  376.   UpdateLocal.clear();+ E7 X1 @: H/ J0 J
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    3 ~: Y( H. w* w5 u; s
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ I7 |0 T3 R3 B0 ?4 N. _& X
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);. Z% k/ v3 i0 H9 n
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ! Q2 c# Q1 k  ~
  381.   if(UpdateFile3.size())$ v7 J' b, r+ E
  382.   {
    8 ?& h( [4 Q: Y2 h. C* J  p0 j
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)2 X) X' p' u$ b5 U
  384.     {
    ; [& S- o. q  Q1 S/ n# y
  385.       file2=(LPUPDATEFILE)(*i).second;
    5 P! l' I' n$ }0 T) A  g3 R
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( q$ u+ f! U+ J. \% I4 R, [
  387.       {
    + ^( \& Q- a. w: u% a1 C+ [  N
  388.         file1=(LPUPDATEFILE)(*p).second;# N- x2 L) {$ r1 u5 S# g! f
  389.         file1->vers=file2->vers;
    + t# ~: I5 G& l. n! H) v$ b! ?
  390.       }
      H" r, K3 r" u5 }) Z" D6 s
  391.       else8 u0 j# A8 y+ v$ r1 k
  392.       {
    - t; @9 f& Y2 A. v
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 V$ R7 u" m0 F% W4 K/ Q
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ; |* w$ l% H- r; A3 }
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ) }3 _) i3 [. P) K% i. _( O+ d" f) \
  396.       }
    # |6 d' F" D, k# L) n3 O) C
  397.     }$ @9 a) A* H7 X- h' Z3 D: i
  398.   }/ ^' k7 @3 B, A0 m5 E7 U
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% h' t3 k- K: ^, F* k' U, N
  400.   {
    1 m* g; H! H8 A) K$ G4 N
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())2 f( E- W  q, d! I/ K: Q0 e2 g
  402.     {
    6 x& w/ K- ~. W8 U6 v0 r
  403.       file2=(LPUPDATEFILE)(*i).second;
    6 H6 |8 U& H. t/ E
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" y) m; V* B# }: v% o" l- d' V
  405.       {
    - E/ _4 ], j2 \7 a6 S1 Z* F$ A; u
  406.         file1=(LPUPDATEFILE)(*p).second;
    : F2 x6 I% Y$ b2 g
  407.         if(file1->vers!=file2->vers)1 h( c! ]8 D0 u; H4 y: d  x7 g
  408.         {& n' g& M! K/ Z/ e- I8 _9 M
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! W1 \3 U% Z9 T- u- s
  410.           c++;3 ^* J; ]$ M' n5 w
  411.         }
    7 y3 a+ C% `% }# A, u( q
  412.       }
    " K2 |8 I5 C& |" r
  413.       else( M' U4 O4 O) y5 P0 x  F4 N
  414.       {
    % e4 _, L) M5 ]* G& m
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% i& E+ z. u2 K6 u4 R7 U6 [
  416.         c++;( x8 _, \" U) f! {  K7 E2 @/ x
  417.       }7 y: T8 R: c  l& i* d
  418.     }
    ' w) C0 I$ C% a( f7 k; c! m
  419.   }& }' V+ V/ d* B* {9 p( h. U( j
  420.   unlink(".\\DownLoad\\update.txt");7 d: U  V: u( ?. ~" P2 K' n
  421.   if(UpdateLocal.size()) return TRUE;5 F! O* D' b) b
  422.   else                   return FALSE;
    - L7 w+ o* }: V# M: z0 F
  423. }" f, i& E: c( ~2 R# f& x
  424. % o: t/ _+ \9 ?# H$ k
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"* Y9 B- R+ A3 V9 l  V% O
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"1 U3 @6 o5 Q/ j+ _) T2 B

  427. - U! _0 Z: Q- C! d2 _! h- e

  428. $ D$ R% Y$ A) g1 P; |3 J( h" I
  429. , J3 ^* Z8 W5 g2 r+ ^
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile), x) `: Q6 ?& X3 @# ]
  431. {7 `0 m/ U6 U" u8 n; |
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 H. Z& {, U: ?2 \% N
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 X+ F6 ?+ q8 M( l
  434.   {' F2 j5 i! H8 ]
  435.     char szLanguage[50];
    ) H9 r2 f. Y! {
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 r% ~9 U- y! N0 z
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : e  h$ \8 B- o, g" n5 j
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ @& d" B" u) E# }
  439.     else                                   m_iLanguage=ENGLISH;
    * N. b- L* [! H) X8 x1 `
  440.     char szRegister[100];
    9 C& W; [2 n/ h# ~& m; j+ e, T
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# g& s4 m. y8 `$ E& r2 o
  442.     strRegsName=szRegister;
    : V4 l5 a4 j7 F( O
  443.     char szPatchURL[100];- }( ]7 E5 x6 X8 I( @
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) m9 r; f) C0 P. l
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * [+ x" I: {) C/ p9 n% [1 l1 ]5 x/ M, S8 b
  446.   }
    ; j& P/ K& ^+ ~5 l) v
  447.   else
    5 D4 N  q; e& Y
  448.   {
    ' I- s9 j) x& N) Y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; t$ i: r1 Q* U# _/ r. J6 b
  450.     strRegsName=DEFAULT_REG_URL;
    ' G3 I& V; ~8 m: K) q
  451.   }" l6 {& E; ?. ]3 p
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    4 n7 j; S( I9 q. S  X1 Q
  453.   {$ l( t( r# B6 C0 [9 O
  454.     char szIP[50];( S, m, C+ F' p/ ]. O" ~
  455.     char szDIR[300];
    3 ^3 X( C* f% I. Q& p6 Q' [
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; r4 @, ?% ~2 e( z6 a4 K
  457.     {( F  A, O8 ?5 x
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");3 n9 a2 i7 Y- D4 X
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ( Z! ?+ P; f, i' u$ X8 z0 O
  460.       strHostName=szIP;( E. Y0 N; e4 ]% ~7 h1 v
  461.       strHostPath.Format("/%s",szDIR);8 }1 r3 J( n8 R$ e2 A7 L. I
  462.     }/ R7 e- W2 F& I
  463.     else
    & z; \& `. W6 V! Y* @% j( o
  464.     {
    3 _  Q1 _- |9 B- g# P
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): a# L/ h) i# b$ d4 y! D! F; X6 F
  466.       {0 Z3 M% }0 [8 G  O
  467.         char szLanguage[50];9 S  d: b, y  O6 o
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: v- X4 S2 j: i9 P
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # n7 H2 p( p- Q" b  @; j
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' Z" j" y$ I4 B- g; n% B+ B
  471.         else                                   m_iLanguage=ENGLISH;
    2 j  g& y. V8 D9 a# m
  472.         char szRegister[100];4 ~( }6 p6 E$ c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ g; P5 o* ?- X
  474.         strRegsName=szRegister;
    6 ]/ X( C5 r" @9 x8 c9 S- f
  475.         char szPatchURL[100];
    ! H' a, k$ a4 r  \+ E- }2 I
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 [' u5 U# ^- T. ^
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; p% _+ i( S7 K. X; _
  478.       }
    2 }7 m5 g1 k3 j+ a7 T
  479.       else" g; L& K7 y' t3 [/ U. H. V, Y* G
  480.       {& r3 \+ u- t+ Q0 r# v8 D7 Q, [# N
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 u% e& ?4 ^/ u& \) C0 k& ?
  482.         strRegsName=DEFAULT_REG_URL;. Q8 [# ~/ m& y( W* t' }5 K3 J8 w
  483.       }+ V: x% t( i0 m# r2 w. N% m
  484.     }$ t; {( x7 e8 p8 L
  485.   }
    * T) t' h. \% h7 Y
  486.   return true;& X" [/ m' e2 [9 E2 d- Z# n
  487. }: \5 e7 z9 e; u  ]6 R4 H

  488. 7 C' u$ N. B* c
  489. #include ".\ZLib\unzip.h"
    % {$ s/ E) S% c. u& ~0 b
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# a" S5 e6 C+ [2 `+ T
  491. /////////////////////////////////////////////////////////////////////////////
    3 Q9 g& T4 F: Q
  492. // CRevAppApp initialization
    3 R( ^' R) f+ t" k

  493. 0 G& \, [# ^  g5 s7 R* F: t
  494. BOOL CRevAppApp::InitInstance()
    3 Z; h# Y3 Z2 o2 u& |, q! y
  495. {' P1 U5 s8 [8 b0 ?
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];7 E# n4 ^  F" A  S* H+ E7 B

  497. 0 I% V% }; B3 J  Z6 _9 o
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);8 y' S3 J9 a- f( F
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . J7 ~0 f8 k9 w7 j- d0 Y, B5 N) ^/ }
  500.   {) Z, ]. H% @) N3 w; n( r
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    , d' y( c9 H& m' T; ]
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    1 f, \/ Y1 i/ [( r. U
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))): Y; G3 G: K8 p$ ?1 K. q' D5 C
  504.     {
    6 e( B  k& d; o0 a  A
  505.       strcpy(szPath,szPathTarget);0 D% j7 l& f* N0 j( F2 w
  506.       SetCurrentDirectory(szPath);0 W: {1 F0 N9 }! A, Y
  507.     }% x- E4 p9 ]# ~& }
  508.   }
    ' ], z" n- x) S/ I& j5 |, j! h4 [
  509. #ifdef _DEBUG& L+ J/ E7 N+ `" s5 B! b
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # r7 Q4 q! W, d- ~# f
  511. #else
    3 c5 G, b7 B' g9 i5 y. b0 D
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 B7 [# u: E6 E7 v  k
  513. #endif
    9 c1 R4 I+ k. O/ L; v6 ^" o
  514.   {
    & b* n' A9 U* v2 o4 N$ g
  515.     char tempFileName[MAX_PATH];- U& \2 x/ a- `3 f
  516.     strcpy(tempFileName,szPathSource);3 w- s# y, y& E  p0 f! L
  517.     tempFileName[strlen(szPathSource)-12]=0;# b; g2 e  g5 R& e- T6 l
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( @# s8 l  B; v  y" ]+ X8 Y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);( o+ J3 S; ~5 o8 F0 V7 {& {+ ?  y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);/ _6 d7 N  f5 L/ W7 y, o  U( \
  521.     return TRUE;; y3 [' P5 o. ^7 I- j
  522.   }; a6 I0 Z& S2 H  Z, d. [
  523.   // Nuke 0118: Delete run.exe
    3 ^0 i; @8 o/ `4 T9 q
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    " |1 s9 |: l1 {5 v: O
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");0 l, p( G* P* Y$ X
  526.   if(!ReadCfgFile("Config.ini"))
    : e' j4 P1 K0 L" m0 V3 ~
  527.   {
    5 ~4 j" V7 q6 Q5 m5 |9 S
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    8 P1 y( a; O8 k( q% Y, @
  529.     return TRUE;" k7 }# Y( F! E0 n4 M! `' V  v4 ]
  530.   }
    1 P. P' Z$ [' g! b
  531.   HANDLE mutex;% S% d1 ]- B1 o- L/ d6 Y' q# Q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    " [/ D2 C" P9 _. D/ B
  533.   {! z& Z( q9 x7 n5 A- Z4 Y3 e! R  F! e
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    2 l+ J' L$ s  R3 t  h# G# P% p
  535.     {+ P; f& R% o; d
  536.       CloseHandle(mutex);; h/ `6 X% g: z& \, [
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);9 c/ h% k3 G! G) f
  538.       return TRUE;, p; A1 ?- d5 L- L4 h7 H& R( C
  539.     }/ U( C- e+ V! C7 X( X4 ?
  540.   }  
    $ B; W% @) b: v0 t- v5 q% W
  541.   CloseHandle(mutex);
    5 f# r% j  @, P4 L2 r) b$ p
  542. * l5 Z5 z% q! C% @9 h* B# N+ c
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);$ I7 H; L  ~& ]6 O, n  d: M

  544. : T+ n9 V. U: |% |8 K
  545.         AfxEnableControlContainer();5 t* n4 ?' t4 G& n. f7 o# l4 i

  546. * a9 p1 z7 Z$ `% q
  547.   bCanUpdate=FALSE;
    ) ]" g* y6 j9 J5 ^( ]! i& u
  548.   dwStartUpSteps=1;' ~5 l5 e0 o3 l; N' ^' n
  549.   dwProgramState=AP_NOTHING;) ?( }( i, ?) Z8 ?0 g

  550. & u. |  n+ G, J. O% E
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    - R! Q" L- d  u; Q. |& j

  552. 3 I) M* Z6 K% }8 u3 j
  553.         // Standard initialization4 i" m+ M( e0 N4 ~$ P7 G# A
  554.         // If you are not using these features and wish to reduce the size
    4 v( F  C! N2 Z2 H6 {* i& m
  555.         //  of your final executable, you should remove from the following
    & d" r+ I, {! a: ?7 e
  556.         //  the specific initialization routines you do not need.& x" E* M. ~1 U* i0 U
  557. 1 s% Q9 l- D7 l2 {% W- X/ B2 E9 M' T
  558. #ifdef _AFXDLL( u: \4 |+ m/ b' i. P: `
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL/ q5 a1 u) o& g# Y% `! A' R0 G
  560. #else- c0 z) r7 A7 |. }$ l
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically4 |# Q; \( @- [; `2 f/ K" k
  562. #endif
    % C, o6 j5 `5 y% p/ a* M

  563. ' B* M6 d6 v, d+ s) u
  564.   dlg=new CRevAppDlg;" @* [  }: \& |( \4 Y
  565.   dlg->Create(IDD_REVAPP_DIALOG);5 J6 J3 S; T3 M: k  i( [% [0 Y
  566.   dlg->ShowWindow(SW_SHOWNORMAL);; ~) v1 N& s! W$ G* r* }
  567.   m_pMainWnd=dlg;
    0 q: i, G/ @; `; ^' Q& {
  568. : ?8 f4 ^* f) B0 b0 A& B
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    2 k' z& N8 f4 j& ^

  570. : b7 I! \( v1 M& L* e; T
  571. //  GdiplusStartupInput gdiplusStartupInput;1 Y! g' r  P/ b0 a6 f0 Q) Y6 a
  572. //  ULONG_PTR gdiplusToken;
    ) A  L' d) T7 m: l
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 n; b% `8 X8 k% V2 c- P& F
  574. # d2 U  G1 I0 Z) R" g
  575. //        CRevAppDlg dlg;
    9 X  _& S) l! I) w( a6 f
  576. //        int nResponse = dlg.DoModal();2 h* t9 P0 A# N0 t5 I) m
  577. //        if (nResponse == IDOK)8 [! X1 z# X: h! a2 E* B* @% h
  578. //        {! z8 ]: W2 t8 Z* l
  579. //                // TODO: Place code here to handle when the dialog is" W; l* v4 K. [  o4 B
  580. //                //  dismissed with OK
    5 X1 x' G! G6 u9 r( b
  581. //        }% @* z( d5 p3 u
  582. //        else if (nResponse == IDCANCEL)
    0 T% }  C1 l/ Q7 V7 ]+ K7 W8 O
  583. //        {
    0 J& t1 |! k. X( t! k# n
  584. //                // TODO: Place code here to handle when the dialog is
    + ]: Y5 g1 |9 ]1 c
  585. //                //  dismissed with Cancel
    ; z9 r& g$ j' m# t
  586. //        }: Z' ^, @' F5 d7 ]9 s3 K
  587. / P9 i# A- H. O7 y+ @# x/ }
  588.         // Since the dialog has been closed, return FALSE so that we exit the" v5 S/ Y% Y" ?( t9 Q" }* s
  589.         //  application, rather than start the application's message pump.
    , t0 K7 ]& X* N  q3 S' W
  590.         return TRUE;& ?7 _; H  P$ i8 _
  591. }* H) v; o; p! y+ s% H+ l2 v

  592. . A$ H6 I( ~$ b6 B. F
  593. char *CRevAppApp::strtok3(char *pSource,char *token)5 v  j1 Q& v# Y: y- v3 T3 D. A
  594. {
    2 p" q8 B( g  t9 Q4 Q
  595.   int i;
    % o4 ]# K+ ?$ ^
  596.   char *szRet;
    4 `* ]3 E" M8 ]1 l

  597. & j; E5 N7 y/ y8 J- o
  598.   if(pSource) { itoken=0; sztoken=pSource; }: m5 g2 G2 w, \/ I0 b# N) i
  599.   if(sztoken)
    % C1 B7 l& v3 k3 p7 ~' @% Q
  600.   {- |+ S7 H  p% k3 I
  601.     szRet=&sztoken[itoken];3 @* Q+ g- _4 i: Z, L; }$ A
  602.     while(sztoken[itoken])5 u" a3 v1 P. R3 |& S, b
  603.     {
    % f! V1 f* w/ ?# N
  604.       for(i=0;i<(int)strlen(token);i++)
    3 ~8 g) o. q0 D2 _* `
  605.       {
    8 K6 C* @0 G$ k* P4 s( y% h% k
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])4 Y1 E2 v! c8 i8 o1 {5 y
  607.         {
    ) k, ^+ D$ H$ X; Y- ]+ @" }
  608.           sztoken[itoken++]=0;
    & |  v  i6 X- k6 s+ A
  609.           sztoken[itoken++]=0;
    + [* ^) h9 y) _" K! l0 ~
  610.           return szRet;
    8 Q' b7 R8 z( S5 m- R7 k
  611.         }; O) i1 T/ Q2 c6 M) \
  612.       }5 ~8 W0 u, j4 ]+ o+ Q3 O% f$ u
  613.       itoken++;
    % C; Z% t; `: R: T
  614.     }3 |+ B6 s& K( ^/ i& G3 Y
  615.   }  t! d. a) M1 U% e5 G$ |# g! z, _5 p
  616.   return NULL;4 T  D. V0 \, [  c
  617. }/ H2 {" _' R6 G* w, N% G
  618. , @: [0 G6 X- Y6 L# ~" [7 }4 ]/ v
  619. void ProcessProc(long Total,long Current)
    ' E/ `4 b: s( N) A) y2 S: t
  620. {0 O; e4 Q7 t" b; q! O' C
  621.         MSG msg;1 B, `  |/ C( C* H. }
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    1 ]; ^. }/ `6 ?$ L6 l6 T4 V
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));) A+ d9 ?, a3 r% r. M& Z: m4 x6 O
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    7 v9 w3 H* @0 m9 @$ d' @6 }! A
  625.         {
    ; s% B1 r7 H7 S4 O) H# g$ n
  626.                 if(!GetMessage(&msg,NULL,0,0))
    . f5 o4 K2 X8 U% ~/ @: F- \+ `
  627.                 {
    4 H, Z0 D9 O8 f6 t( `& ]
  628.                         return;
    3 a6 }9 b  C" s& I- ]* r9 @0 `0 d
  629.                 }: Z/ H& k  X0 U. ?; f" _
  630.                 TranslateMessage(&msg);
    / l  W9 o: m+ u4 R, r
  631.                 DispatchMessage(&msg);
    3 w4 i* l5 Y% o5 q& j
  632.         }       
    3 N* z; ]6 H& Y9 W8 S8 T7 _; F1 h
  633. }- A& r  l4 h: b- \; Y; F

  634. ! i5 l& e6 K) |4 Y1 k
  635. BOOL bFirstChar=TRUE;  E7 t, Z" f& u! D- F5 U0 R
  636. $ s, t$ r9 t' R( [
  637. BOOL CRevAppApp::OnIdle(LONG lCount)6 A. N8 t, t3 p: U
  638. {5 P9 U- f, [; t6 @
  639.         // TODO: Add your specialized code here and/or call the base class+ u( [: _. X) y1 l, G8 D  J
  640.   switch(dwProgramState)
    ; z7 i+ \( t1 T  m: T" D/ C3 K
  641.   {
    " B9 u8 e: m0 u/ X
  642.   case AP_NOTHING:# I  b/ Q' ^2 v
  643.     switch(dwStartUpSteps)
    8 f5 A, U1 c8 t4 [1 O4 E* T+ @$ Q
  644.     {
    2 \4 f! q: p) S( @- s; v
  645.     case 1:; q; O" \& ?0 C1 f/ }4 {
  646.       {& Y4 Z+ t0 D- ^1 D" B7 H7 E
  647.         int i;4 m1 c9 ^  c( [! }# a
  648.         CDC *pCDC=dlg->GetDC();
    7 p* I4 u/ j' p# s) ?9 B8 r
  649.         HDC hdcwnd=pCDC->m_hDC;
    $ ]5 [" n; T6 Q
  650. //        Graphics graphics(hdcwnd);4 Z( Y9 b9 t! w8 n. o$ ^; G
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    6 O5 r5 J& g9 t3 R
  652. //        INT iWidth=bitmap.GetWidth();
    " Z% `* r* {) R* g& O/ G( ?
  653. //        INT iHeight=bitmap.GetHeight();$ x  N0 ?3 `8 K( d- [  v9 m: g
  654. //        Color color,colorTemp;
    4 T3 O( n) o! O6 @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% Z# J' {& {4 ]7 H, Q$ a
  656. //        {
    $ L) K" _# I. c
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    4 V! M& G8 l" P$ o% `& R
  658. //          {! ?9 `, k4 ^- v1 e/ ]" M
  659. //            bitmap.GetPixel(iColumn,iRow,&color);  n- {9 y# K4 _4 f
  660. //            colorTemp.SetValue(color.MakeARGB(& c  C' l  l! y% I
  661. //              (BYTE)(255*iColumn/iWidth),
    ) R& f2 ?0 D7 ^" f9 J. a
  662. //              color.GetRed(),
    9 Y( c" v* g" _0 }
  663. //              color.GetGreen(),
    ! Z7 O, J, z$ I( J! m
  664. //              color.GetBlue()));+ c. S; q6 t' X2 v: H! H
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    3 f; c( P( n3 {( e
  666. //          }# }1 u8 j: T8 @+ ]) V0 H( w+ E
  667. //        }
    ) s/ d0 C' Q# T2 \  y$ j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 ]0 F$ N  P. l5 p1 y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : L: E- h6 d  X5 X
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    0 p+ |, W- s+ @" g
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) J1 `. }" M- I; |
  672.         for(i=0;i<240;i+=8)' ]" @+ G: ?, L3 N3 f2 d
  673.         {
    7 K  e' N9 \: I, g* x. ~( g
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - L/ W6 U" ]1 q! p
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) Y5 W2 H1 F6 N' v  v! S; M
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # S9 x! ~; \2 e2 ?/ j3 C. {8 ?
  677.           Sleep(33);- A7 i, V) q( _: S
  678.         }
    / y4 ^' U( A% l8 e' I
  679.         Sleep(1000);; h& @- E0 X+ n: z2 m9 t- d8 Z
  680.         for(i=240;i>0;i-=8)4 Q3 h3 V- E$ e7 m; J+ |
  681.         {
    ) C& \( h5 `  l$ Q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / n8 B% A& m2 U1 |
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 i0 Y% G! k1 x5 f& ]3 X8 @& ]
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" e& n. A; d# R  r$ C) k
  685.           Sleep(33);7 }5 j: S' H3 ]4 {; P6 N( @
  686.         }8 L# ~6 o- X, P7 {; h; T: F
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);* `# Z( [4 h& s
  688.         dlg->ReleaseDC(pCDC);
    ; g: l+ x" @+ d, w
  689.         DeleteDC(hdctar);3 c3 L6 f  m4 K, W" a( f9 x0 Q
  690.         DeleteDC(hdcsrc);- X$ u! a3 Y5 {" R8 c/ k+ R
  691.         DeleteDC(hdcorg);
    8 w, O7 [  N7 h1 H1 u
  692.       }2 W# ~! [8 @$ c2 Y  {% s
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);# c9 P2 }. C% t' U* q" X9 |" `% @
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");! z! `# d! E. m7 I/ w7 d  P, X
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    + J1 X  u4 I3 s5 L' \/ M( ~
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");/ D: `2 D4 r; {1 }
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - i8 l9 A* u- c, e3 }, B
  698.       if(!Dn.Connected())6 O! N2 P1 Y" D; n) ?% H
  699.       {
    3 ?8 j9 X7 a! z; e( e6 ~* `7 ]7 }
  700.         dwTotalFiles=1;
    % P0 y/ R: k! X$ F7 X
  701.         dwDownLoaded=0;& @5 T* y" ]$ |: J# C
  702.         bSilentStep=TRUE;6 ]$ z8 v6 P6 @" \$ U& c% Z
  703.         bCompressed=FALSE;
    0 N' ~  ]% T; C  `1 b0 o, [
  704.         strExtLocal.Empty();
    % k1 E3 k& _  \7 C/ i! U, d
  705.         strFullName="readme.txt";; H" A! X2 D' l0 J' X
  706.         dwProgramState=AP_CONNECT;
    ! z0 o3 i- y4 j  Y* {( K+ [
  707.       }
    , O3 T6 D1 m/ }- Z3 I
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    6 y, N; e, J; ?3 e. s. N, e9 F8 x
  709.       dwStartUpSteps=2;
    3 E3 h4 x3 x' Q* t3 L& Y, c
  710.       break;  x6 ^2 |3 S3 R2 s, h
  711.     case 2:
    0 K4 p/ Q: u# T
  712.       {
    * a3 O5 K  r: I. o# ^7 W/ x; Q$ m% w9 |
  713.         int iEOF;; R; @; h, n+ q4 F: i$ J
  714.         FILE *fp;
    $ H8 l+ s( h) F8 K( _3 D- K
  715.         char szString[512];: U# h: q, j% @* g4 U) q$ A
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 Q) F, m2 H# m$ I4 {
  717.         if(fp)
    ) v' l5 M2 e$ l: h1 M7 F
  718.         {
    4 d: |4 [4 K. G/ ]0 j4 \# _$ \
  719.           do
    ; j2 a3 H/ z8 ?( v! v% f# M- R
  720.           {( l9 E3 d8 y8 {% {; e( Y: e9 L
  721.             iEOF=fscanf(fp,"%s",szString);  I' v3 t% K/ @2 K/ P! I
  722.             if(strlen(szString))' s4 m2 G, ?: K, Q& p
  723.             {$ T% R: L' l0 p- P0 s& ~+ Y& i, G
  724.               if(bFirstChar)
    5 {* N! b5 m& v$ P5 m3 _  D  s! o: m
  725.               {) j8 E8 g( [; @. ]3 D  h
  726.                 bFirstChar=FALSE;
    1 A, i/ f% w  m" N* ^* S' q6 c
  727.                 bConnectIsBig5=FALSE;
    2 p+ Z2 @% ^) k
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 H$ h9 O. n0 K: Y- \2 p2 d6 Z8 _- F. k* Y
  729.               }. l, z8 G( u- j( D' v
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . x6 I1 ~3 U' D0 M6 N' f+ }
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    # p9 y1 F4 v1 k3 W4 Q
  732.               dlg->m_ListText.AddString(szString);
    $ k- r7 R; D8 i2 q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 h' c% n. U+ V6 E
  734.               *szString=0;, E/ }7 ]6 _/ ?/ W4 `8 a
  735.             }' f+ ?- o3 b1 r( M% J, t
  736.           } while(iEOF!=EOF);2 t. ^. J) p- Y! A% X. k* z, d
  737.           fclose(fp);
    3 {, G7 u5 g2 `  A# |
  738.           unlink(".\\DownLoad\\readme.txt");* \3 Y/ P) M4 |  N
  739.           dwStartUpSteps=3;) y. E$ w; X$ v5 ]/ ~! m7 @
  740.         }
    : ]4 u. z' [1 X6 k: o& ]: H5 t
  741.       }4 N2 V2 h# V2 e: [3 ^  K
  742.       break;
    ( x5 C1 C  H# \0 G+ [0 I' \
  743.     case 3:
    ! O1 {$ k0 w, y2 o  E7 z
  744.       if(!Dn.Connected())4 E5 @- a9 s! f+ P8 p
  745.       {" l$ p( ?+ P7 o* B$ b
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);, s/ {% n4 c+ Y' U
  747.         dwTotalFiles=1;
    $ L; W% r) v. ~7 E) p7 O2 P# R
  748.         dwDownLoaded=0;) R6 u1 x: P9 f5 |# W2 p/ u5 R
  749.         bSilentStep=TRUE;
    - O9 @# h& R) N+ K+ q
  750.         bCompressed=FALSE;" v2 Q# w% W+ P9 l
  751.         strExtLocal.Empty();: y5 }: x+ h  V" X4 O8 {
  752.         strFullName="checkversion.txt";
    / D. m  K4 O: X- I+ L9 ~
  753.         dwProgramState=AP_CONNECT;
    , _1 }6 o; R" I7 B! _
  754.       }3 S( X% L' R* G1 \
  755.       dwStartUpSteps=4;
    $ P% R4 r5 _7 t$ L
  756.       break;
    1 c. U8 A) L0 N. d. d. s* t# H+ c6 `6 q
  757.     case 4:  ]+ F* d: {; y
  758.       {0 d3 M, v+ U2 H/ i# E: J  u: r. }
  759.         FILE *fp;
    # }3 a' {" w& }( E- ?
  760.         char szString1[128];* `. D  W* T' g  K! Z
  761.         char szString2[128];
    , j* ?+ f/ y3 U$ \9 P- z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");  h% [/ ^5 x0 O+ @
  763.         if(fp)) _/ Q" e$ u( ~: N
  764.         {
    . _8 J4 {# Z, Z$ {- U5 B+ q
  765.           fscanf(fp,"%s",szString1);
    0 U$ ]. l9 A# Q
  766.           fclose(fp);
    ' q4 D7 t0 d9 m1 b
  767.           fCheckVersion=atof(szString1);& c6 ^$ |" X5 h; G/ w6 q3 ]$ \
  768.           fp=fopen(".\\checkversion.dat","r");1 k- y& x: N- x4 {* X( }
  769.           if(fp)# P1 N  \5 R- R; l  L7 n
  770.           {
    ( f( B% O$ B; i4 M! m
  771.             fscanf(fp,"%s",szString2);
    7 [; r7 T2 q5 ~
  772.             fclose(fp);( Y7 b( e; ~0 [4 i  K# ?, @
  773.             if(atof(szString1)!=atof(szString2))
    5 [9 r% l0 E- Q7 E8 B
  774.             {
    & g* m4 Y7 @* A
  775.               if(!Dn.Connected())
    ! K: V; {# a# b* p; u
  776.               {6 [/ `. I8 \1 D: F5 h% |! D
  777.                 bFirstUpdate=TRUE;
    . Q# M' c6 ~% t0 b. u
  778.                 dwTotalFiles=1;" t5 p8 y! s& V% \. ]
  779.                 dwDownLoaded=0;
    & V. i# l3 O6 M" m6 W9 ]
  780.                 bSilentStep=FALSE;; c% R+ u, O3 i/ A! @# x& R" [9 s
  781.                 bCompressed=TRUE;0 V. h* S; j4 P
  782.                 strExtLocal=".\\DownLoad\";7 w9 U/ e2 _2 E
  783.                 strFullName="update.txt";3 n2 p, e) `: @/ @6 U- e' t# ^
  784.                 dwProgramState=AP_CONNECT;6 n0 L5 M, r! |  f0 }
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # e! w3 Q* X' k% i" z' h, R& ^
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 `! B3 n, `5 G) H4 d+ T
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    0 j: }! R0 l2 @& \$ l

  788. 0 U) ]" b8 r7 U8 X! _: j9 ~0 i
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, h. l' b6 ~2 u0 H( a- B3 N( i; Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    3 ^( [; o: q: A" `4 e
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)# m  j5 w5 M$ F  T0 u* `
  792.                 {
    6 g6 \! t$ K* n
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    8 T9 y( a5 u7 ]  n& ]& Z& t: Y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");; W) Y# Z$ `' ?9 e% X1 l* r/ e) @
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    " m3 o( E& m. e* u7 w  |
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, b) h/ E" n" G0 C* ?

  797. ( n: |: e3 s3 H
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ c* l1 B! ~$ Q2 C
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' Y4 r' U- |& V' W$ \7 \
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    8 ~" a& c& g' @; y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 ~5 r1 B# {. g0 F: F5 x5 E6 f
  802.                 }2 G. V7 G8 @9 a
  803.                 dwStartUpSteps=5;
    . f6 O& [6 |" c
  804.               }& t+ W/ `" ^1 ]+ ?) l- F/ P- L/ S' {
  805.             }
    " n- E: N% k- a9 y! _" @, S' Y5 l
  806.             else. w( p7 l3 ~  C! ]) o' T9 B
  807.             {
    ( t/ n8 {: n7 |; q$ ^/ s2 X
  808.               unlink(".\\DownLoad\\checkversion.txt");
    # K7 E1 y7 Y6 U
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 W7 ?# B' @: s* ]' }3 n
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % C% |4 ^8 f5 D" O2 U
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");& Q% l3 _* \+ W

  812. + J7 l$ D5 |+ `& k3 B% V
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% G. q8 T, m. B& @
  814.               dwStartUpSteps=99;
    5 u# V5 M; V/ h) I0 C: c
  815.               bFinishUpdated=TRUE;
    ) L4 _% c# s* w% g3 d6 @
  816.               bCanUpdate=TRUE;* R+ a7 m% ]7 o  R
  817.             }
    . }- }$ V! Y, T6 f& L
  818.           }" Q$ o# f5 ]" d) x+ h
  819.           else
    ' M+ O5 ~5 G: Y3 s! i& y) f
  820.           {: Z' A# {& L) k7 Y; f
  821.             if(!Dn.Connected())
    ' }7 m; ~2 d& S3 E, O9 ]
  822.             {
    5 n% X/ G( a0 }; m4 Y+ g. L5 r
  823.               bFirstUpdate=TRUE;
    ) \2 S4 @7 R' v' d8 _
  824.               dwTotalFiles=1;, ^' s2 U/ J# z2 T2 `3 e8 N
  825.               dwDownLoaded=0;
    ! q- ^/ Z$ @1 C$ F' J# G3 d
  826.               bSilentStep=FALSE;9 v  b' V9 }  q7 E2 d8 h
  827.               bCompressed=TRUE;. S$ C- h2 I& E) [8 C. G
  828.               strExtLocal=".\\DownLoad\";" j9 O. m* m2 V( v4 q& \# |1 N6 g
  829.               strFullName="update.txt";8 K0 B  R# k7 X
  830.               dwProgramState=AP_CONNECT;
    ( w) I  W% W" T5 b" V3 U0 l# F
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 q: {  f- e* j( n. o
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - s8 S7 h6 u( k9 t% l; t6 M
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 i% V6 B; X, R+ S3 A& U- ~
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 o. y6 s- u' U7 ^2 ^+ d
  835.               unlink(".\\DownLoad\\checkversion.txt");
    4 R( E& O! l# R2 c* A; \% ?2 X
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    2 w' H2 T% Z! n1 ?9 a
  837.               {
    1 @# Y8 R9 i4 N/ d2 b
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");! ~; T& V2 y. \; T. R4 ]: G
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ' j, U1 _5 A+ i; M3 m. [2 I
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    3 ?, \, S) B2 P0 D, D7 m( n
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 G( T* \2 F5 Q' `, l4 M/ v
  842.                
    * `) C8 U% X! d4 X9 O
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    2 B/ v' ~5 h1 n
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- Z7 o9 b" C( @( y) a* d. Z
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");: E5 O9 K' h3 {! x
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 e/ O  X9 N# V
  847.               }: i; A9 e% D5 F$ S3 B8 X% @9 K
  848.               dwStartUpSteps=5;- j* Q% b/ F$ N7 F: c/ l! m
  849.             }
    2 M' {& ~0 ^3 q5 g3 [" _
  850.           }
    2 I8 B2 s- S. v
  851.         }* @9 u4 W0 {( a% ?; G. `+ r0 x
  852.         else9 V6 R; T) d4 v4 x
  853.         {( M( C/ T: |. v1 g
  854.           dwStartUpSteps=3;  [; A8 {1 v  v& k
  855.         }
    + h5 b4 I9 T. L- D& J* g
  856.       }2 F+ T) h0 |) P1 |. k; f% k
  857.       break;
    " o& y8 h0 g/ y% k0 e; b. f; P8 p
  858.     case 5:
    # S" D# H1 E, W/ @3 n( ?
  859.       {8 i6 t; S5 }, f: E
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    8 B- ?" o. u; P+ @1 m' x1 a
  861.         {
    1 O9 u- r# v' n+ F$ c
  862.           int opt_overwrite=1;" }( U) G. d4 w% b  b7 j' U& P
  863.           int opt_do_extract_withoutpath=0;1 Y( W$ Z" U+ O4 e, k( d4 m4 A! x
  864.           unzFile uf=NULL;
    + q; T4 J; O+ M+ @3 y. u
  865. 5 p0 P1 a- c: Z) b! o  g
  866.           uf=unzOpen("Wsa.zip");/ b) {& n5 k  b& `
  867.           if(uf)
      Z& I  C$ ?$ k- e3 _6 M# e  `
  868.           {
    ' U5 p- I5 r" |% K. H& G8 X, J5 `
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 X( S% Z  r' S3 F4 r
  870.             unzClose(uf);
    2 m7 w$ {& |1 U- ^% w+ G" z
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    , x; P' u9 D  U  H% q! p5 u& w; |
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");$ S3 u6 a" q9 o# E$ `
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ! j" _, |7 o% g, |
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, S' g' K8 x# n! k+ B" j4 D
  875.           }
    5 U6 |+ U- u' ^2 }- F2 F  Z2 n
  876.           DeleteFile("Wsa.zip" );% ?' _$ c/ M. _8 r5 Q0 j4 o
  877.         }
    + ^- C2 l! y& I

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

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回復

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回復

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回復

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回復

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回復

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-6-27 13:20

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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