找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
/ d8 u+ `4 D0 |. ~, u. x6 W3 z' d
  1. / RevApp.cpp : Defines the class behaviors for the application.) K1 ?, V# T* ]) B
  2. //
    5 B" M3 }; x# V
  3. 8 Y+ |  c3 o  H0 ]8 e9 [' {3 p
  4. #include "stdafx.h"
    7 T; q3 l2 a7 [( Y. n! b# F
  5. 2 ]- c1 w6 I& l, r/ O
  6. //#define UNICODE
    4 ]/ L: |5 A9 I2 i
  7. //#include <gdiplus.h>" J1 S% |! s* E  a) g7 D% _
  8. //using namespace Gdiplus;
    6 e2 M( E% U! b" v- X
  9. 7 g  z$ r1 ]3 e3 w+ }- F# Z* N; |
  10. #include "RevApp.h"* c5 _$ b# [+ n, F+ c  f6 n
  11. #include "RevAppDlg.h"
    5 U5 R7 k% ], _6 m( f5 g
  12. " s+ n  ~5 z" Y% q9 J. W
  13. #pragma warning(disable:4786)( ]5 S, J3 _5 k7 ?( H+ }
  14. #include <map>
    - Q! J/ z% Y$ k/ ~' O+ V, X
  15. #include <list>
    ; Q  e: r% H) @" X7 X2 q
  16. #include <direct.h># Z& `4 U  l, x8 e! |& K
  17. . Z8 i, b# x% g# a  r
  18. #ifdef _DEBUG
    1 @5 a' o  ^% y* \$ l
  19. #define new DEBUG_NEW
    + H) [3 p, {2 k
  20. #undef THIS_FILE) X% l4 X) u5 {. z7 @3 x+ r, c
  21. static char THIS_FILE[] = __FILE__;
    7 G$ j' R/ j% T# v
  22. #endif3 T  q+ ?0 D6 ]9 Q- f, A  B% b
  23. #include "SkinResDef.h"
    ( `: [2 D1 o" i: U4 Y: G
  24. #include "ChangeBG.h"& D7 h. ~+ M4 l# n0 R( j3 c! \, K
  25. #include "AFXINET.H"
    , v2 t/ e( _* Y; N5 s

  26.   g1 Q. P  {) q7 Q3 s* x
  27. #define TRADITIONAL_CHINESE 0
    ( v4 @- d! ]( }5 i% p6 ]
  28. #define SIMPLIFY_CHINESE 10 v+ g3 E* c. b
  29. #define ENGLISH 2, P8 Q0 Q& {/ S( g! p
  30. int m_iLanguage = ENGLISH;5 W2 f  g5 Q8 z& ]5 i  m8 S% L
  31. /////////////////////////////////////////////////////////////////////////////& B9 F6 L' I. Z5 W! I0 M$ q
  32. // CRevAppApp
      J( c& c5 W# a1 y. T
  33. 1 \4 L. ]+ z. _5 s
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    - Y+ i* k  s9 D6 r2 a: T: |
  35.         //{{AFX_MSG_MAP(CRevAppApp)4 E" t, O9 |6 M* w4 I' v
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.* k3 p, ?/ [* Z8 e% S
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!" J. @( |3 d0 Z$ W" N- |
  38.         //}}AFX_MSG
    ) f1 h& D6 ^$ W& h( {6 b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp): G7 u& o9 E$ H
  40. END_MESSAGE_MAP()
    . m# c# k; g4 }5 F

  41. + W2 h" C& V- q/ z9 g) E
  42. /////////////////////////////////////////////////////////////////////////////# Y  e% Z/ ~$ k8 m0 s3 N
  43. // CRevAppApp construction
    + y8 w4 F5 v5 }* s$ W8 w, j" R
  44.   e( E3 H( H$ Z1 ?" n* e# h
  45. CRevAppApp::CRevAppApp()
    ; Y* v; d$ s1 \* [' w' C
  46. {
    - f: S, ~& r: b
  47.         // TODO: add construction code here,9 m; N+ x- A  s
  48.         // Place all significant initialization in InitInstance5 S- I2 k% W8 y9 r/ I3 t5 N- n3 e
  49.   bDisplayIsBig5=FALSE;( H" ?0 L/ j" j5 Z1 e; n
  50.   bRestartUpdater=FALSE;0 C1 h3 j7 r6 O/ L. L' i
  51.   bFinishUpdated=FALSE;/ `- g/ K2 V! l+ a" }: z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;! V! _1 {, K( X" p) r" y1 y, ?
  53.   InitChangeDataBig52GBKS();+ V1 u# t$ G' `" q$ P
  54.   InitChangeDataGBKS2Big5();
    # N! g, K7 t9 a7 d6 s
  55.         //) G$ h, k( Y+ ~; ~: N; i6 o9 K
  56.         bClickRunExe = FALSE;* \: }, F% k3 m' h( f4 k" C+ [
  57.         //9 y/ ]: x" p1 B. w3 @
  58. }
    3 y- {9 p2 M% ~% S
  59. 6 J* m# Y4 Q( @: q3 e
  60. CRevAppApp::~CRevAppApp()
    # p$ e1 Z1 ]2 k4 Q
  61. {5 u/ _& E* D" W9 Y- x8 M
  62.         // TODO: add construction code here,
    + t/ x+ _3 M* N/ d
  63.         // Place all significant initialization in InitInstance
    3 a" P, b& J2 h! u' N) [0 Z
  64.   EndChangeData();
    6 \7 B: T& w0 Z  W
  65. }
    ( ~; R2 _8 M! u) t
  66. ' u- O; r" u1 o. F  U: V: y7 @
  67. /////////////////////////////////////////////////////////////////////////////
    / h6 s3 i' @3 l( c
  68. // The one and only CRevAppApp object0 J; @  X% i6 A

  69. % T4 l7 t  v* |. S
  70. CRevAppApp theApp;
    1 N' r4 I/ m4 @& V! S! C4 [

  71. 4 [* S4 ?% U# a; [1 N/ T4 p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)5 R8 G6 L$ X' I, [) h
  73. {, V! l, t& D2 {
  74.   int iEOF=0;
    * b0 i. r- u, p- _, x% l  b
  75.   char szTempName[MAX_PATH];9 B8 ?/ l# P; s# [
  76.   *szFileName=0;
    : I/ G0 I1 F1 v, X2 W
  77.   iEOF=fscanf(fp,"%s",szTempName);7 O* [( ~) }" `
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    2 f2 k) u/ O% }3 p8 x( w
  79.   {2 J' k! c) w; K8 e* g* ^, |
  80.     strcpy(szFileName,&szTempName[1]);
    * M9 g8 q4 y. p5 L  Y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)' J! @$ r, U4 P' W7 ^7 [3 ]
  82.     {  ]% V9 t0 G' w1 j+ a7 e
  83.       iEOF=fscanf(fp,"%s",szTempName);" A: i, ?9 z3 V( x
  84.       strcat(szFileName," ");& a+ a/ H6 a: _/ J' n- L, P* k9 y" D' @
  85.       strcat(szFileName,szTempName);. k6 H; B' Q  `+ X& P4 G
  86.     }
    : E# |% Z+ C5 s' F8 b' c; G
  87.     if(strlen(szFileName)>=1)
    , a2 b. A  k7 z( s
  88.     {
    * z5 I# \' S$ @# C* L3 ^
  89.       szFileName[strlen(szFileName)-1]=0;2 k' r- K' K; T# n
  90.     }! c' [* x! S) ?' W
  91.   }* U, T, l* T5 e/ \! U
  92.   return szFileName;* Q, w9 z. m0 q
  93. }+ _" c4 A0 [: [- A3 `

  94. # Y- v5 F8 S7 A& P
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)3 n0 W  ^. x4 k3 [2 e+ g: i$ z& b  _  c
  96. {* Y) M% E9 j% X. I% W+ R
  97.   FILE *fp;* Y# k% X; @6 t
  98.   char *key=NULL;
    2 ]+ g- R  F3 u: W- {5 Q2 y0 ?
  99.   char version[MAX_PATH];* o4 t3 R% L4 i  p" |+ E4 m
  100.   LPUPDATEFILE file,olds;1 J+ o2 F: v& t3 G" s3 M& k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! ^* ^3 p5 f. N  N
  102. $ r( A% B0 k6 Q6 A9 g0 u2 b4 l( t
  103.   UpdateList.clear();+ L+ [' l( Z9 L1 k% m
  104.   UpdateFile.clear();
    2 K0 v3 z5 I: c+ f* C& O' p
  105.   if(GetFileAttributes(filename)==-1) return false;9 O6 I% ]" S0 s/ g, `
  106.   if(!(fp=fopen(filename,"r"))) return false;
    + O- g8 `: R' k8 `4 D  N# R
  107.   fscanf(fp,"%s",version);8 W* \! y( @/ `2 x+ {
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 [# L( J, R# l2 ?
  109.   while(fscanf(fp,"%s",version)!=EOF)& N% Z; M7 O  y: v' U: y2 }
  110.   {. |8 a5 U/ Z; ^6 D+ o7 j
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * {: a& Q+ n" c
  112.     fscanf(fp,"%s",file->path);
    2 `: l8 g$ @; F* F
  113.     ReadFileNames(fp,file->file);
    2 x. n0 t6 I+ y/ h6 l; D- _
  114.     strcpy(file->full,".");( d6 k" u' |- j
  115.     strcat(file->full,file->path);0 h) P8 b( K6 F2 y* S( g
  116.     strcat(file->full,file->file);
    * r4 @  n; `8 v4 t
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())" }" ~% X) {3 v2 a4 q( E
  118.     {
    : q/ K5 ]3 c* S% {# S
  119.       file->vers=(float)atof(version);
    2 }8 d, C; g6 E* f  F! ^
  120.       UpdateList.push_back(file->full);. t6 k& q" T  @
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));2 @6 x, s/ `& l1 M, `; \# _5 Y
  122.     }# E2 k& A7 N7 z8 x" I  T
  123.     else
    4 s* j$ l! m* o/ s8 I  W
  124.     {- U4 _1 [% B' U% n
  125.       olds=(*p).second;
    . J  Q# n: y9 m: ?. L
  126.       if(olds->vers<(float)atof(version))* P% W0 r/ }# Q+ W! K- k6 F
  127.       {
    " E# @2 Y$ A9 W" }' {- ^2 _4 F
  128.         olds->vers=(float)atof(version);
    ; X$ |7 a+ V8 `6 D* d' J: J- g8 l
  129.       }2 @6 z" T1 f( ]7 ~& x% D/ Q: t& [
  130.       free(file);
    % _- p0 q* E/ u1 Y' R
  131.     }8 g& D4 b; @* F
  132.   }9 c% i0 d4 ~4 ~8 h- e
  133.   fclose(fp);0 `  e$ P1 R: w  i4 |% K) X% p
  134.   return true;
    , ]' o2 \) U% t( Z
  135. }3 f3 B9 d7 |; l

  136. 6 q0 M" L# g1 R1 w4 Q% ^6 y7 s7 v! g2 i
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    % H$ k; ~0 f1 q
  138. {% U4 H  |8 H) I9 P* L% A  ~
  139.   TCHAR  szFull[MAX_PATH];
    ( X0 }4 j; [; X5 s9 A9 D
  140.   TCHAR *token,*inter;! Q2 H! _, P/ X6 A
  141.   *szPath=0;
    1 n" Y: `; c0 o3 f" X( z6 ~7 V" n- V
  142.   strcpy(szFull,szFullPath);- S1 \, j1 d4 t; h
  143.   token=strtok(szFull,"\\/");
    ! x) k  k- W# L  l' }/ P
  144.   inter=token;3 F" |1 f1 j3 k/ ?4 }
  145.   while(token=strtok(NULL,"\\/"))) k) l" o  t; b4 [
  146.   {: Y( y( J$ S( T+ a+ x2 g$ N+ ^
  147.     strcat(szPath,inter);
    " G8 o# Z) y: {7 C$ Z! `: H
  148.     strcat(szPath,"\");0 o* ^! i2 C1 Q4 V! G$ M5 Y# i# }& r& Q9 u
  149.     inter=token;
    " b9 X% ?# L; x* m$ ^' k: E
  150.   }# ^4 h2 T* F6 g. X( y
  151.   return strlen(szPath);" u' j- L3 y5 a5 z: z& l$ G0 D
  152. }
    7 @9 |$ a# `. E; i9 d9 u: o) y
  153. 2 u6 h8 W7 X6 i0 V
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)! u# a! \4 f! k
  155. {) i' B& y+ f. b( ~* d
  156.   DWORD attrib=GetFileAttributes(Target);& K$ [9 m6 L, C# j& l
  157.   if(attrib!=-1)
    : N! ^! C7 N- r6 y
  158.   {" u" A7 s0 v; S
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))# |  G7 Y, I/ z
  160.     {% G' t+ U2 o# M  w
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    * S* q, j1 C* p+ d
  162.       SetFileAttributes(Target,attrib);
    3 [6 ]! I+ H% C* m( F& u4 k
  163.     }
    # A4 \' o# E0 J
  164.   }/ R9 X) k! `" ]5 r1 f; s
  165.   CopyFile(Source,Target,Erase);
    9 J) {+ l3 w9 T+ v
  166. }
    0 a- j3 i" n  [0 o% F8 H+ j: u
  167. 0 r; J/ D/ z2 d* D5 G4 `2 j
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)9 L( F, w# s  D2 Y8 @# b7 ~5 z; V2 s
  169. {$ @' Q. j2 ~0 f& d! I
  170.      FILE *fp;9 d& l) A+ Y% X: `8 g; ]
  171.      char  szBuffer[8192];/ W0 `7 I" k" t. j) s5 g
  172.   va_list  argptr;3 Y: ]( o# H# Z+ _/ x

  173. ( `1 Q6 Z8 }2 \
  174.         va_start(argptr,message);
    / d4 _6 u" o: l5 T
  175.         vsprintf(szBuffer,message,argptr);: w5 s* ~% c3 V
  176.         va_end(argptr);
    9 P+ Y; h8 K' v9 r6 t
  177.   fp=fopen(FileName,"a");
    % i; o  k0 _( @& }
  178.   if(fp)  x( w* N: A) V) {, c0 L
  179.   {5 z6 A8 L) a; m0 U
  180.     fprintf(fp,szBuffer);
    ! \4 ], R* B6 J& `
  181.     fclose(fp);. U; F0 H: {$ T$ b$ ?' r! X
  182.           _flushall();# S& J; K* D* R  Z
  183.   }* P% ~& \' j4 t" [; c
  184. }
    6 n9 N. o1 a7 f0 ~( E) p9 k, s
  185. : S6 y6 K6 @2 U
  186. BOOL CRevAppApp::Fclearf(char *FileName)2 F1 u/ v2 a3 s/ B3 R) x) a
  187. {
    + Z1 l& C' k. }3 q) z; j
  188.      FILE *fp;3 s6 Q4 k5 j& I2 v
  189.     DWORD  attrib;
    # P( e8 t" f) ~# B: H
  190.   attrib=GetFileAttributes(FileName);
    : `2 W, b* l2 |7 N: q8 O( Y
  191.   if(attrib!=-1)
    ! J$ v1 s0 D/ ^+ L% ~6 x
  192.   {
    1 T$ |: v4 x2 u3 g: C4 x( Q8 P
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 ^2 t. f1 N8 S( y  [9 L2 b
  194.     if(!SetFileAttributes(FileName,attrib))+ B/ v+ u: d9 w5 G, n8 M
  195.     {
    3 `6 m/ m% ?3 w: f/ F
  196.       return FALSE;/ N5 {5 \" W! `
  197.     }
    ! F% ^4 o1 c& |/ H' f! U% T
  198.   }9 u. i0 u0 R' {
  199.   fp=fopen(FileName,"wb");( M" A% V8 l; R% n' L! Y, r2 K
  200.   if(fp)
    2 W4 v( E) M* K9 O
  201.   {
    ( h. L# U% @2 |! a7 p
  202.     fclose(fp);; P  I* J  T0 Q; j$ I4 W
  203.   }
    * O7 e- z; P1 C  A" v
  204.   return TRUE;  \4 i1 b  |7 L* a$ j
  205. }$ r1 P! O8 Q2 K6 }1 _2 ?; x- g; V& X

  206. 2 P: v. ]. m3 K, u) G
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    , w1 m; J1 [* v
  208. {
    ) a' W9 I6 r% n9 e1 k' |
  209.   char filename[MAX_PATH];
    0 u) U! l2 \( r
  210.   LPUPDATEFILE file,olds;9 D! u% T( B! E  H7 t% g6 e
  211.   std::map<int,CString>::iterator i;6 q+ G5 p, x7 E
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) Q6 F2 m: |! W8 g( r( w
  213.   std::list<CString>::iterator l;% z/ s; J& p( `2 q3 I$ O  K
  214. 2 F, t, ?* |" z' d4 V
  215.   if(bFirstUpdate)
    8 T/ S% X. ^* I% R  G: ?
  216.   {/ T& d* |9 D+ ~4 }$ R
  217.     dwCurrFile=0;) p: b% j8 b* [* g7 p
  218.     bFirstUpdate=FALSE;0 |% ?! H# m3 P& J! a+ a5 U
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , m) s) V$ u5 R; r
  220.     {
    % L3 r) V+ R( n
  221.       dwTotalFiles=UpdateLocal.size();
    0 o3 r1 W  F. Q3 n, {+ F
  222.       dwDownLoaded=0;+ \7 C/ J, a8 o1 J. i; [; [. D
  223.       bSilentStep=FALSE;% \$ B( ?" S9 J. V
  224.       bCompressed=TRUE;. ^! E( }+ x) E+ A" X: @2 i8 X
  225.       strExtLocal.Empty();& \6 z" j8 C8 t/ r6 y# j, o* \
  226.       strFullName=(*i).second;
    & M% c$ v0 }3 z$ v1 {9 c& E
  227.       dwProgramState=AP_CONNECT;+ U6 F: C( f0 T3 q" K+ \$ a" n
  228.       return TRUE;
    ' Y% b; C* x0 U) G0 N) r$ j" J
  229.     }; ^1 {& S/ ]3 o! ]. F
  230.   }# T2 r  p" u& b& H4 l- I' d
  231.   else if(bRestartUpdater==FALSE)! c$ c1 ?; t9 J( B
  232.   {8 m/ W# t# }, n1 A
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())  Q- @8 W0 _8 B7 m! I$ d
  234.     {+ ]( j7 A# C  J
  235.       file=(*p).second;
    ; Y) G/ S% F+ y6 l  p0 X
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    " i2 v5 q. j+ j- z
  237.       {* r# {3 d* |( T
  238.         olds=(*p).second;
    0 d6 Q6 S" Y- j$ ]. y. Z
  239.         olds->vers=file->vers;
    ; r2 ~8 m& g* Q% [
  240.       }- l4 _6 {2 d0 G0 P& M4 s2 d6 }
  241.       else- q) s9 @( v; ^- m; E
  242.       {
    ) S% M. b6 }9 E; q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 Y: K: k4 z5 N/ b$ m- I3 ~( v& k
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    9 b. l2 }# E! m' e( C( A8 Y- j
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    6 }2 [; \1 ?4 [1 N# U' b7 i- o5 f
  246.       }4 F! _, M6 [% t6 g4 U" h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");' A) D* o8 J9 c/ z7 Q
  248.       sprintf(filename,"(%s)",file->file);% {1 s! o; D& `9 }
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 c5 ^* n" r" I& @$ J
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }" ?& Y+ }; |1 [& I# _/ d
  251.     }# t7 q5 Y* b: k1 R. L
  252.     dwCurrFile++;, H( t: F2 z, E% _1 Z  T0 p3 B: i
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 ~  f3 g6 I; n  |1 Z
  254.     {) o8 {) B$ m$ K8 O
  255.       bSilentStep=FALSE;
    ) p$ e( ]5 c5 q. n0 m
  256.       bCompressed=TRUE;
    " c( ?/ j- Z  {) [, n: q# {% A
  257.       strExtLocal.Empty();0 P' H% j: U' k; x) ]
  258.       strFullName=(*i).second;! Z% y7 z4 `1 ^" Y5 y# c
  259.       dwProgramState=AP_CONNECT;
    7 E  k/ \& ~# A$ d( w* i; p
  260.       return TRUE;4 r$ r9 L. B* G7 r  u
  261.     }
    * x+ V% o8 ]( R8 C+ E/ l3 @
  262.     if(!bRestartUpdater)/ z# w" ~/ Q- W  S& u
  263.     {
    " }+ H% }  H1 N; ~5 R( w8 j
  264.       int iCurrSize,iFileSize;
    # e- S" Y7 e1 [7 O
  265.       iCurrSize=0;
    & S: N. k4 G/ z; D; G5 d
  266.       iFileSize=UpdateList2.size();
    ! h/ b8 Y" ~6 Q. R2 G5 X4 T
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ P8 N: y0 P+ Z5 q1 ?) A
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    8 h1 P, c. E) D1 k& x1 Y$ M
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! i$ O5 c2 r2 \5 e2 m# a/ k
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & U: j( K% F# m6 s
  271.       Fclearf(".\\update.dat");
    * s' _7 X) u/ C0 v) w" v# E, s
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 _) N! u7 z* i9 w1 B% o5 H! A6 k0 q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)( M' w: O& E5 G: c" P8 N9 X1 B
  274.       {
    ' z5 e. U, K9 V0 [3 w7 E
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    $ w* E8 Y' I* i* c$ |( G
  276.         {% N+ g* l7 l3 u2 P( A/ R
  277.           file=(*p).second;8 e7 Z8 w' @  W9 S! ?9 @' ?5 _
  278.           sprintf(filename,"(%s)",file->file);) T: D' M- u% q( i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; g$ g3 E# F3 Q! n6 \" j8 j; I
  280.           iCurrSize++;
    / [4 m+ g) _; L
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    2 L7 V$ B6 h" E# G
  282.         }
    # t3 w' ]. d; l
  283.       }
    2 ~3 T* _* z6 X. T* c9 o
  284.       unlink(".\\update.txt");/ z( X+ [  F$ w  i1 y6 t
  285.       unlink(".\\update.tmp");
    + }; c, |0 j3 K  l- b3 B  C
  286.       Fclearf(".\\checkversion.dat");
    " n5 d6 f% |! ]* d2 b7 E
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# b  ]/ A- R1 B. A- _: j
  288.       if(UpdateLocal.size())9 K! p3 w5 f+ B, x$ E
  289.       {
    $ x7 ~# i0 m3 N/ p
  290.         UpdateLocal.clear();# e0 H3 h$ y! F4 P
  291.       }9 v& D' c' H4 y# C
  292.       if(UpdateFile3.size()); b  Y- u& |8 N! X& ]) n
  293.       {( ]: Q  ?2 b% S7 ~6 ?6 w3 j- o
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). N$ S* H; A3 Y7 N. C
  295.         {, W- d2 ?/ `% m0 C1 v8 k: C
  296.           file=(*p).second;: d1 e# d) z% I5 ]
  297.           free(file);  h5 X5 ~5 E# d5 x3 w5 D9 w
  298.         }
    ' H" w2 l' e$ }" F0 m
  299.         UpdateFile3.clear();
    1 t! D, s9 X1 c- g5 W( k$ |2 q- Z! x
  300.         UpdateList3.clear();
    ) \$ q7 U3 z1 Z) @
  301.       }
    # p5 Z2 n" L: I6 c$ T; ~5 \$ y9 ~
  302.       if(UpdateFile2.size())) P8 ?4 Z, D/ k* e
  303.       {- @) x: i0 l9 G; g5 d
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 ?3 z- P( j7 ]5 x
  305.         {
    / \5 r: ~0 Z: B
  306.           file=(*p).second;  h5 r2 o* v! ~0 C1 H9 i
  307.           free(file);
    ) `; _6 u; o$ m5 X- ~; X
  308.         }5 P( J- S; z7 J2 T" M, v, \1 V( q
  309.         UpdateFile2.clear();
    - k( C3 g6 T, {4 {- }1 l9 p
  310.         UpdateList2.clear();! ~2 F" z; m& E( |7 I
  311.       }, J# Q0 @- C( J) z
  312.       if(UpdateFile1.size())
    ; k" {( }! j7 ^+ y
  313.       {
    ! _, j% b$ D8 t
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ M9 n. J% {; F
  315.         {0 n6 d0 c  c" {' t. C' k# a$ B
  316.           file=(*p).second;: n4 x7 U8 n2 X9 `: m' `1 C
  317.           free(file);3 F) V2 f0 ~" L' d
  318.         }. o  g$ S( y$ `  G& h; S& N& Q: O1 a
  319.         UpdateFile1.clear();7 O2 I0 k& Q  d' n' ~5 K
  320.         UpdateList1.clear();5 ?! i- v% y( d7 k% d7 e
  321.       }
    $ k. G7 W/ Y7 h, @7 C+ v1 [
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));) s( L& ~) ]5 Y  _& `/ O/ L5 g
  323.     }7 j+ h6 G4 [3 a% |! k
  324.   }
    6 l3 j" i) n! ^+ Y7 C5 B% _" u0 ~
  325.   return FALSE;
    4 f* G2 m( v8 E) l8 {
  326. }
    3 D0 S/ K$ i: }3 C4 K

  327.   e5 i1 l5 U9 R& y/ V, v
  328. void CRevAppApp::ClearAll(void): C; ]1 h  N' A" A! J' ]
  329. {8 _# w% B, j9 A
  330.   LPUPDATEFILE file;
    * {' e  L0 A# X% u( L& @' A2 m9 Y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    . _# p) g' }' i$ n" i/ T1 [, e3 h

  332. + r9 ^$ O! N5 t4 b
  333.   if(UpdateLocal.size())
    5 n5 w# j+ U, h/ r; I3 G2 H
  334.   {. l! M8 L5 t! M: _6 q  [9 ]  `7 {: n
  335.     UpdateLocal.clear();
    , i0 j1 F; ~# t, K8 P* [3 I: j8 H4 m
  336.   }, G/ n, A2 N3 b4 h
  337.   if(UpdateFile3.size())
    $ H1 J7 S" q: }
  338.   {
    ! i* ]6 o' u1 X9 }) O
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 ?# K1 d8 W2 Z
  340.     {
    ) d5 g$ D) ^" D9 a! `% S
  341.       file=(*p).second;/ \# n0 ?2 v' i$ |! P/ G$ F
  342.       free(file);
    3 R8 o( E" @( F8 L9 I" j
  343.     }
    9 T0 K$ }7 b. P; k# x
  344.     UpdateFile3.clear();
    0 f) ~5 o" K9 M
  345.     UpdateList3.clear();) T/ r0 |* x$ R0 C5 z" n
  346.   }; y. \  A5 m+ A5 v, U3 o9 x
  347.   if(UpdateFile2.size())
    * h, r3 \0 u5 N- ]" _) ^. W
  348.   {8 L% ]8 s! D7 }% M
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " P. u, ^, p! `8 A3 v! W
  350.     {
    & S$ b$ ~$ a% H: U8 e3 r/ i/ Y
  351.       file=(*p).second;- z2 p- A' w# ]1 D: m( z2 W' G
  352.       free(file);
    1 d7 ^4 `. j' W. _/ w% M! j$ _
  353.     }* m" q6 I# }1 j: z9 }# S8 Q! v
  354.     UpdateFile2.clear();
    2 I5 u. `) Q) P4 e: [8 y; Y0 i* J
  355.     UpdateList2.clear();- v* M6 L4 b" g" ^
  356.   }
    # w3 B" s. ^; ]2 q7 C! @2 K4 s
  357.   if(UpdateFile1.size())
    ' F6 M4 d2 G0 M
  358.   {2 w8 l2 u! {7 \% \
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* r( o  C) q7 ]: W
  360.     {4 G; J: Z' A. g" ]6 r' N% Z
  361.       file=(*p).second;/ R- @  A2 N/ U" @- X
  362.       free(file);
    ' l# t' M5 z. \8 S& @* T  S
  363.     }
    * H/ J  i& R4 h& [
  364.     UpdateFile1.clear();3 {+ b- ]+ t2 K8 v5 L/ R( O. B& a, _
  365.     UpdateList1.clear();0 m" F& [2 E9 F* a
  366.   }  e- b* J) G( E
  367. }  $ W4 k8 \+ b0 ]$ H
  368.   
    4 J4 h8 Q8 O! Q/ @0 r1 [
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 U8 y. B7 G/ S) S1 a5 |
  370. {
    " _5 i. ?6 k) U6 r8 z$ b& m
  371.   int c;
    # C, |: M9 ^0 {9 m* L8 l: U
  372.   LPUPDATEFILE file1,file2;
    8 @( }9 Y% W# {$ L( U
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;! \- z; J  S1 k5 M7 G& e+ s( p2 w
  374.   std::list<CString>::iterator l;
    7 P3 C# `& {: @9 c- x; Z$ _
  375. : L* Z% N/ f1 |" C: w" V5 u( m" V
  376.   UpdateLocal.clear();/ L! _8 ~# b8 v( u* D& A
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);& ^3 R. j  R! g" O+ l' ?7 q* o# g6 H
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    2 R% a# I: T  X6 v# Z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 _7 o% z0 q8 E5 z# Q
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    4 B! N; `5 {- \7 @( I8 O
  381.   if(UpdateFile3.size())/ i6 y  V' D' i5 D
  382.   {8 X; b! F& `3 G- x6 h6 U1 ]
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ; D6 N0 L. D' J# m8 d! c9 A/ l
  384.     {1 D. n# {. A& A  N+ F
  385.       file2=(LPUPDATEFILE)(*i).second;5 _; V" r( `! ~4 R: M
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' d- {& ?) t! V$ n* _/ i- h
  387.       {! X; o, Q5 e* i8 X8 ~
  388.         file1=(LPUPDATEFILE)(*p).second;
    - ~5 T8 }9 X+ z" R2 A
  389.         file1->vers=file2->vers;
    ( {" q7 Q3 L9 r3 m+ O0 Z/ b
  390.       }
    + i! _" r; T+ ~4 C7 s; ^4 M8 I( B
  391.       else+ U. ^: V; U4 m  |
  392.       {
    # e! y) a, ~9 I) ^+ w, h
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . l' C5 T6 e6 ~3 r2 i! {
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - z/ h" b# i5 u8 `5 ]
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));; Z$ P2 l  K( P1 ^3 E2 t: a
  396.       }- k0 g% n& {6 Y, F7 Z. T! o8 Q
  397.     }
    # h% s) P7 x' v! q
  398.   }* w% S0 S9 A3 t  y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)8 e6 v  K, P9 |2 K6 W
  400.   {
    . e1 u5 r' ?0 G: }# s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())% J* d4 y9 |! R5 a" P9 M, n
  402.     {* B5 l- ]% _( d9 e9 U1 c
  403.       file2=(LPUPDATEFILE)(*i).second;3 }* d/ [$ Q* N' J
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% u8 ?1 q+ h7 P4 v0 V
  405.       {) K5 T$ n8 r- e6 s3 G6 q
  406.         file1=(LPUPDATEFILE)(*p).second;. E3 o! y- [- j1 F5 x* G" v
  407.         if(file1->vers!=file2->vers)
    3 m- X, _1 R: o" D1 |
  408.         {* D7 G5 E" b* l# x! k
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 Q' K( @# J. t! e
  410.           c++;
    ) {2 ]7 I  W* e3 P9 l3 P3 b
  411.         }
    ( b' Q) ]0 D  K- J" @; P8 t. h
  412.       }9 k% C4 Z) a4 _" L# ^# a
  413.       else
    * k) u6 p. V& V( j5 d9 M( }
  414.       {
    ; }, Q; f% N! X6 Y( Y, f( |/ S
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. q( R/ [# O" R
  416.         c++;$ R" I2 o2 \( E2 d6 p
  417.       }, v. K* @  m3 M+ O# B  H0 r0 l
  418.     }0 J' g' E6 i5 t3 g  T
  419.   }* T8 H( Q, ]% V
  420.   unlink(".\\DownLoad\\update.txt");+ w7 z2 {! `/ v0 V6 ]; A& Y
  421.   if(UpdateLocal.size()) return TRUE;
    5 h8 Y: i' B+ @5 \
  422.   else                   return FALSE;5 J) [& b& B# V3 e5 m! O9 @
  423. }. b) H* w4 L$ I( l

  424. & g% n7 v5 y0 |+ K! e- O
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"# N7 J0 Q; [- [- K' |
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"8 O% b8 }6 c/ [" P0 D
  427. ( m( a' b3 @+ M  l
  428. ) E) b# d; ^; K0 a% C: ]8 g$ J/ R
  429. 7 `7 W! d- w& B' S
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ' K6 B8 P+ d- p& n9 F9 b+ o* }, T
  431. {
    2 F% M8 R# R5 d0 d
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    . ~7 b: Z0 V5 P/ R7 T  }( R& W  {1 s
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . `. u% J) M! c3 u
  434.   {! x1 `- O2 V) m" ?/ `$ B6 j
  435.     char szLanguage[50];% k8 h3 W5 S, n1 [+ i& b% Q! S6 e0 j
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 ?2 y! a" y# e
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 d" K6 ?; i( V0 s) n0 s3 E: E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* H7 i* \' Z; ]# d7 P/ W/ _
  439.     else                                   m_iLanguage=ENGLISH;7 l% Y( I- [$ T: H
  440.     char szRegister[100];' o+ o1 W1 T. y/ [
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 q7 T  U( ~) @; D# n  r( f
  442.     strRegsName=szRegister;) F3 m% n! p4 K* W& r  p
  443.     char szPatchURL[100];2 {5 y( u- @# Z7 k
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% b# P5 _$ j& Y5 x
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 `* A, M! F  l4 x1 I. |1 f
  446.   }
    - E5 [5 ]& U% |" \- Q" s! t  y
  447.   else* [7 E: I# i: }7 J: J
  448.   {* E1 p# E2 E; h" `
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ x7 H5 o, a4 |7 o3 Y. k* C" ~
  450.     strRegsName=DEFAULT_REG_URL;
    ! w  t. x" b' r' Y. A0 R% W9 A
  451.   }% N; {& k) n4 R: u8 a
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 L5 V7 i3 M& q  u1 n
  453.   {% l  {. e% _5 w0 l; m( v* d0 g) R
  454.     char szIP[50];
    3 L; s; y6 J! L  R4 K1 M
  455.     char szDIR[300];
    1 ~" t9 `( A7 P3 T+ {5 Z8 d
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))0 {8 P  i) }3 `  h' }8 C3 T
  457.     {
    2 Q$ a- g* r/ P- n
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. R0 _# `. C7 p/ a0 i1 F* u
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");3 V/ s% }8 I1 {9 \; j& Q) Z: a7 |
  460.       strHostName=szIP;5 x2 O' J  t! W- w- y
  461.       strHostPath.Format("/%s",szDIR);/ y* a9 j: ?; Y3 V: w) B- _
  462.     }
    6 f# K0 H4 z8 V5 l( ?0 G9 A: l
  463.     else! Y9 l- T% l) M' v- O
  464.     {
    1 R/ N) H3 R# ]. R$ |
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 U" S+ U) c0 {' s
  466.       {0 }% R0 I1 @4 x# Z' _
  467.         char szLanguage[50];
    8 m- e$ J; |. u7 w
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ B& _- Q# ^. a% @. [5 @& ~6 Z( g
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 C) L- u6 K2 C
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ ]* G2 V7 }* t# O+ e7 b4 z! F6 P5 c
  471.         else                                   m_iLanguage=ENGLISH;( v+ a- S  t+ w$ O$ L) j; W0 m# T
  472.         char szRegister[100];& a9 E# Y( S& W4 _
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");2 j9 ?4 |/ @4 f# ~  u+ T
  474.         strRegsName=szRegister;
    * v1 t, _* A2 e" }, {1 w+ _
  475.         char szPatchURL[100];$ z( K4 W, S. p6 T! w
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 m5 a6 A, l, j
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" y/ `- @1 _6 v
  478.       }$ p. w$ O/ n& N/ v2 A8 V( @5 R1 i
  479.       else
    * t& e; z5 \! c
  480.       {
    4 G) u) g4 N+ L
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 f  n6 j3 `. r1 F4 ]
  482.         strRegsName=DEFAULT_REG_URL;
    ) |  D4 A2 }% X' d" h9 o" }
  483.       }- C0 `# V7 s2 a& m# s' f
  484.     }
    ! |# `& t- r$ E4 L, g: T9 w
  485.   }3 n: }3 ^  D. e  c$ d) V9 b. c" ^
  486.   return true;
      A& U( N& s; t2 ?7 a# }- w3 e
  487. }
    " l5 @! S* h( u2 K5 ?; y
  488. : \2 q2 F9 k& O* }4 v( e
  489. #include ".\ZLib\unzip.h"1 V8 B* X. S7 [" i% }4 {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    - k$ h# C/ F& M0 h
  491. /////////////////////////////////////////////////////////////////////////////
    / ?8 U# S2 K9 c) g
  492. // CRevAppApp initialization
    ! Z& d1 ~* L  O. ?4 P3 H
  493. $ |# G5 B% c; e$ F1 o
  494. BOOL CRevAppApp::InitInstance()6 X6 B" a5 a  _
  495. {
      K. r, ~4 o; c8 N
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 ], c9 n8 N  L* j2 e

  497. % o6 t7 V  y5 ^, c% I
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    # a2 b0 k0 U9 o6 x. e4 Z* P4 ~
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    / ?' O6 h2 y) g
  500.   {$ k/ L' n% E4 _7 Q+ Q3 T
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    . V9 t  _1 @* Q6 z8 D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    9 h' ^2 c  p3 K5 F1 O+ y" k5 n
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 e  ^3 }9 [: \( r- m; }
  504.     {
    : D7 w- t3 @8 W# J) k; q3 E# e* u
  505.       strcpy(szPath,szPathTarget);
    8 L- C7 n: T  `+ O* O* y
  506.       SetCurrentDirectory(szPath);3 Y/ B4 k* @+ a2 C5 b6 z1 |
  507.     }
    8 j/ b, [, _2 o* L0 N3 u5 o3 X6 b2 ?
  508.   }& N# |0 G8 ?# `, x5 l
  509. #ifdef _DEBUG
    5 i4 H' @- S1 c- N2 i
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . Y0 |7 ]" P& W# b# n# w; a  d
  511. #else
    7 b( h5 d2 H$ p$ D8 i& c
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( ~: D4 {: s" t
  513. #endif4 I/ K, f  a' j7 |: z
  514.   {
    9 E( m4 b4 E* C  V3 u
  515.     char tempFileName[MAX_PATH];
    * ^7 t6 |# l! O1 b& Y" c
  516.     strcpy(tempFileName,szPathSource);3 H- C; G6 W, U+ q: ~
  517.     tempFileName[strlen(szPathSource)-12]=0;) D2 W/ e, B( B7 \
  518.     strcat(tempFileName,"\\$CSUpdate.exe");) j+ K. x9 _  K" i4 t* @
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);" u9 v  w! G% G/ s
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);! N2 ~# V& I' t/ V, {
  521.     return TRUE;* I) E& k9 P+ _9 U
  522.   }
    - g8 l$ l% W% S: M+ {
  523.   // Nuke 0118: Delete run.exe
    ) H3 T8 h; K" _5 o  w, A" r
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    + o+ [& T7 w- H
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + S2 Q9 ?8 ~! k
  526.   if(!ReadCfgFile("Config.ini"))& K2 |- R" f2 t8 L
  527.   {! Z2 n0 H* e# @0 n1 h* `6 X/ Y/ e0 F
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ) I9 |* X0 H' e0 H8 Y# K3 k# d
  529.     return TRUE;
    8 r; }5 o0 y" z) A2 Z1 I
  530.   }
    9 p( l9 S3 Q) t
  531.   HANDLE mutex;
    : I& O( P. T% K, c: u  ]2 l+ j
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))0 o$ |, e, m4 Y6 d8 @) y
  533.   {
    3 D  X5 t9 ]# P% T5 B* N
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 Z+ R5 ~% c1 a; w8 n+ ^) ^
  535.     {
    ( O9 l4 N1 W5 }7 E( `7 ?8 _6 R7 u" C
  536.       CloseHandle(mutex);- b; M5 l5 z9 w$ C: M
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. b+ K; T) E! p7 I
  538.       return TRUE;
    0 ^1 h# {* x8 X' T- `4 n& f
  539.     }+ _7 Y  v5 l) D3 ~" s1 ~& E
  540.   }  & d' i1 Y2 t1 B! w) }6 a9 t2 v) X
  541.   CloseHandle(mutex);
    / _% @. d7 `1 r# N7 ~5 u
  542. % P0 A5 T+ x- e  W
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);1 Q( f0 [# O1 ?3 u$ g

  544. 3 M. i3 B2 V& [, C# S8 z
  545.         AfxEnableControlContainer();
    7 L) L( {4 _! C3 X( P, E6 ]

  546. - H5 z- H9 L$ R6 v
  547.   bCanUpdate=FALSE;! I+ s' i! z! f! ]  r4 I
  548.   dwStartUpSteps=1;
    & K1 \" Z' I9 v0 W0 A0 S, a
  549.   dwProgramState=AP_NOTHING;9 _3 h0 F+ c8 V/ [

  550. 0 q; Z8 o* P0 J* [
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & S+ m8 n6 f7 M! J- w# r
  552. $ k5 Q  I/ E1 Z3 N
  553.         // Standard initialization' S+ q1 x; V. _) |0 _+ w+ p& D  i
  554.         // If you are not using these features and wish to reduce the size, n7 @' S: A# s/ w  `3 S$ Q" O% C
  555.         //  of your final executable, you should remove from the following
    $ U1 g: B$ e! L
  556.         //  the specific initialization routines you do not need.0 |, q; ]! ^3 V3 [: @& T/ C7 g
  557. + h0 H% s" ~  q. X' A7 @3 W
  558. #ifdef _AFXDLL
    7 z( a2 W3 y9 |. i8 C) |6 P; Z8 y6 h
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ; u6 c! p- F! i5 w# j  C( g8 E  d# W
  560. #else
    " T" M5 \4 w% P9 ]+ E" o* h
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically2 @# L6 X: y2 E5 Y* b
  562. #endif
    : Q  m6 m5 J+ E0 s% X1 v

  563. ! m6 }( k! q# N. |( Z* i
  564.   dlg=new CRevAppDlg;
    / t$ z7 J& B' M! F( L9 M* O
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ! X) `3 t  @, A" B1 e4 M
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + U8 A9 j3 `. I7 W8 Y$ W
  567.   m_pMainWnd=dlg;' P4 L1 I4 U5 ~2 ], N, Y$ s2 x! _
  568. # a8 M" [' X9 D& X) P7 k
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    # e* |* D7 r- i7 n
  570. 9 E9 b) I) J2 Z9 x3 v9 a
  571. //  GdiplusStartupInput gdiplusStartupInput;
      O1 w/ T% b; e
  572. //  ULONG_PTR gdiplusToken;. `) D* `$ ]3 X3 m# Z
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ; F2 ^; ^; C3 h5 F
  574. - S0 s7 N3 x% ]
  575. //        CRevAppDlg dlg;" P- ?. v, }7 u$ t1 d* c
  576. //        int nResponse = dlg.DoModal();
    ' T# V) m* b* `, ^& [2 Y  k: Q# E
  577. //        if (nResponse == IDOK)( C! [8 |9 v3 u0 _
  578. //        {6 t7 E1 c0 K( n  [
  579. //                // TODO: Place code here to handle when the dialog is
    + H8 `& C5 Y% e/ x) K; u# i
  580. //                //  dismissed with OK
    ( O, }' I( @/ m' O' c% D
  581. //        }) l% V7 ?4 F3 P1 `7 k4 O& F. g% ~
  582. //        else if (nResponse == IDCANCEL)8 b+ I# B6 N% A  T3 B
  583. //        {
    " e/ E5 v! F$ h7 e
  584. //                // TODO: Place code here to handle when the dialog is
    1 g+ A/ t5 @8 U% r; c- x
  585. //                //  dismissed with Cancel% Q; @! D$ {. M0 A! v% K! H& e
  586. //        }
    3 k8 ^" J( S! I( ~6 [$ s  `. R

  587. ( M% N4 K: g  O1 k1 @; J
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    3 R( g# b: }2 J! _; ^7 {7 I1 c1 r- N
  589.         //  application, rather than start the application's message pump.$ S. w# f' \* I* ^* j
  590.         return TRUE;' _' ^; I) e% v! D
  591. }$ o4 D- ?+ R  G3 ~

  592. 4 B+ g; c( U8 X9 C" \
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ! A4 G  z  t( m: p! r; [* j
  594. {# h6 q4 ^/ |8 [2 ~) E9 q  v6 A
  595.   int i;/ x# @1 W! E0 b# d: z
  596.   char *szRet;
    ) R3 ], {3 i& ?* s9 V

  597. ! V- o3 c1 `) J4 r" a6 V$ y7 |/ S
  598.   if(pSource) { itoken=0; sztoken=pSource; }+ n2 l$ y6 J5 Q! G2 ~) y/ g$ d
  599.   if(sztoken)8 x# P' T/ p7 h- }8 d( T6 N& o
  600.   {7 K7 ?# P6 O2 `, Z; n6 b; B
  601.     szRet=&sztoken[itoken];- Q: E6 n  Y! H; h$ N5 E: P- F" e
  602.     while(sztoken[itoken])
    / j! g$ }- L7 c
  603.     {
    * S; F$ z  u! r1 A
  604.       for(i=0;i<(int)strlen(token);i++)* X/ W) q: v& h  ^( Y1 b* ^
  605.       {4 g' b/ R% P- O; R
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 e0 T4 L# L' X3 X6 j; t, o
  607.         {
    / _  d2 D( f* M. |
  608.           sztoken[itoken++]=0;
    6 S, E# ~( U2 \( x) [: X; B# U# b
  609.           sztoken[itoken++]=0;
      B" Q3 ~6 @! ]5 S! B
  610.           return szRet;
    ; |  v3 L7 G" C0 p) X& ~
  611.         }
    7 O: F0 ]; L8 N# e8 h
  612.       }. H1 X8 {3 @1 B3 z) B) t6 T
  613.       itoken++;
    $ |; c2 U6 Z& e3 c, p, ?
  614.     }
    , s% D7 C1 ?; K' A$ s
  615.   }& c) `) ~. e; k& T6 \- \; S3 k
  616.   return NULL;! Z3 N- l8 O: X* }
  617. }! O" {- }( ]0 L2 [; L# h2 W: _
  618. 1 ?4 z) h; z/ g' l4 p' e
  619. void ProcessProc(long Total,long Current)
    ( D6 R% a9 @7 v) @0 Q5 d
  620. {
    7 H2 U9 o* W0 e5 {9 |* r9 R/ W* H
  621.         MSG msg;
    & [- x' F6 m' ^+ Z+ h: t
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);( d% E3 U, \- `' R8 j( ~
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 }. y1 A4 E, I5 ^5 |
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    " r+ F3 u; q0 N1 s. P
  625.         {
    + [/ \- u) y; R: l9 V4 }
  626.                 if(!GetMessage(&msg,NULL,0,0))5 T# y& P# X' J; \
  627.                 {7 I+ C* {+ \9 v
  628.                         return;
    1 O* n7 b# d+ z" R: ~0 P* A
  629.                 }
    , w: r$ P1 l- s$ Y1 k3 B  G
  630.                 TranslateMessage(&msg);8 z& y7 x5 y& Z/ ^1 X# _# t
  631.                 DispatchMessage(&msg);
    / i2 M( T' P8 q! S  y7 T
  632.         }       
    - U% e! `5 m; @
  633. }: k) T* o1 x3 Q. Z, q. h& @, I# F/ F

  634. 9 _: e" I4 f9 U, V
  635. BOOL bFirstChar=TRUE;
    " ?  J; K' `2 [3 E4 N1 u9 J

  636. . \6 v( e( a) y+ M
  637. BOOL CRevAppApp::OnIdle(LONG lCount)& @6 b( E# L  S3 u- D6 L" S' ]$ K' f
  638. {
    4 ~9 K' i  }( Y) w$ _
  639.         // TODO: Add your specialized code here and/or call the base class+ B) ~- W' k- W7 z& O% h) b
  640.   switch(dwProgramState); A8 F- ~- Y7 C/ ^, M; x8 u
  641.   {
    ) I5 B2 c) d& b' o/ t+ x
  642.   case AP_NOTHING:
    $ b3 y- ^9 s7 Y* g
  643.     switch(dwStartUpSteps)8 o( o. V( j- C% z- W) k! s
  644.     {
    + ~- n& R8 G. P5 w4 h) p( J
  645.     case 1:
    0 w2 ~8 E1 `7 u7 l9 X% k; E
  646.       {
    9 J8 h( ~5 r, Q+ w6 g5 q6 H9 `. t
  647.         int i;
    ) B7 q! |$ t  ]* c
  648.         CDC *pCDC=dlg->GetDC();1 ]) M& {6 i- v) l0 |+ N: Z
  649.         HDC hdcwnd=pCDC->m_hDC;/ T% e4 {$ w: o
  650. //        Graphics graphics(hdcwnd);
    ! o2 D9 ~  H2 y9 {2 O
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    0 Y8 d* ~' e* f* U/ x# A
  652. //        INT iWidth=bitmap.GetWidth();# @5 B, Z$ f& e% m3 g; _; N, S4 Y
  653. //        INT iHeight=bitmap.GetHeight();
    , h9 u8 m% c3 [" i, h
  654. //        Color color,colorTemp;- b% \+ m; O" b5 |; T* {
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)" y2 }) q2 C* ~% W  O
  656. //        {
    2 p; ~8 N" N4 d* H6 b
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    5 D; R9 o/ Y4 r8 C& r1 ?' b
  658. //          {  P/ H- s& j$ n( k5 E  }
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    8 {, X. A5 r" p& B: h, h
  660. //            colorTemp.SetValue(color.MakeARGB(8 |3 J0 A6 O7 _8 \
  661. //              (BYTE)(255*iColumn/iWidth),8 ?1 _* [/ l9 @+ Z! `7 m
  662. //              color.GetRed(),
    & B3 {0 X3 C' `- G3 g& P( [
  663. //              color.GetGreen(),
    1 N+ s5 |- C: L6 v( E$ j) m
  664. //              color.GetBlue()));% r5 L/ V* v- ?' y$ U1 F, q: C
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);. E3 G/ W3 V' e" @
  666. //          }
    ; \; C0 r2 V0 G9 ~8 f) W
  667. //        }
    ) y. Q/ c# b* ~' `* P$ c
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);  K8 C, R1 h) p5 d
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- E0 C1 [% d, A' |; H/ M
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    * I6 e" L. g" _* Q' f) O
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % o5 [( Y* A5 h, y* n6 m& R
  672.         for(i=0;i<240;i+=8)! ?9 A; ^5 _/ C
  673.         {" m  {1 Z+ J! e# E
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  |9 i2 F6 V0 B2 I7 u! z# a  A
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : Y9 K4 r& q+ a# I$ N9 C% H
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  p  R7 s: u& _9 ?% m7 \8 \4 J
  677.           Sleep(33);
    . l7 Z, A- M* _
  678.         }
    2 A! C& e8 w$ ~& N) `
  679.         Sleep(1000);, v& X# x; W! F4 i0 M/ @: u
  680.         for(i=240;i>0;i-=8)
    - Z0 Z- E1 B7 \5 S8 l4 Z9 a
  681.         {! x7 ~: H( i( U: D; b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * j+ m5 I* E# U0 w2 k# E5 z3 e
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- c7 s8 [7 C) I$ a9 H% ]1 M6 y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 X( ]) N6 ?7 `9 R1 d
  685.           Sleep(33);
    3 U0 w. N' e4 A, h5 o; y0 `
  686.         }% @' V9 h  D2 y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ! G+ V& a3 v, [# t( n( N6 S4 g8 P
  688.         dlg->ReleaseDC(pCDC);
    + p; r0 W; `* T! b5 o. E
  689.         DeleteDC(hdctar);
    $ b  \9 v- o$ R
  690.         DeleteDC(hdcsrc);
    # J) S/ p1 ~2 P: Y
  691.         DeleteDC(hdcorg);! E, \& D# V! P7 l8 E
  692.       }
    5 \6 ?( a* U1 ?# A
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);+ F; J+ J" c) b+ i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    # u0 Q' r* n- B/ I8 h& [$ ^
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    7 D4 N8 T5 u2 k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 |5 J6 t6 B) s
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & p7 S+ C: g" K' z- }
  698.       if(!Dn.Connected())  d; F7 c# q9 u
  699.       {
    & [. G/ B  T0 a+ E
  700.         dwTotalFiles=1;
    1 w2 I' j$ Z. l1 J  j/ O
  701.         dwDownLoaded=0;
    1 M4 ~9 w4 n8 A7 `1 T! L4 _+ u, J
  702.         bSilentStep=TRUE;
    9 r+ D5 d' i7 b  U$ P: [
  703.         bCompressed=FALSE;
    7 F2 z1 o7 W9 A( d" x
  704.         strExtLocal.Empty();' H' r4 _' U, F4 u( ~
  705.         strFullName="readme.txt";& \# S* x" J) l, W6 x4 _& K
  706.         dwProgramState=AP_CONNECT;6 F% ^1 E: \% p0 m( f6 b
  707.       }4 r4 f# G4 i7 J7 B4 u
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();+ V8 b5 s9 k! v+ c# Z9 N
  709.       dwStartUpSteps=2;
    0 o' W5 N; H7 t( f
  710.       break;  z- K) M  l7 J& N1 {% V# ?
  711.     case 2:
    / p- Q( |# p0 }) r
  712.       {
    + e" s6 j) ]2 Y$ F6 Q0 W
  713.         int iEOF;
    + i+ K% F7 |" H- e' l* |# T
  714.         FILE *fp;
    6 X# h- n0 a9 L
  715.         char szString[512];5 P- V; t+ K/ s& N/ d+ M4 H6 S
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");% f" @0 j9 o9 a
  717.         if(fp)
    0 I9 y1 X& A0 q
  718.         {( T' Q1 l* a, v9 `0 _/ `
  719.           do6 \9 O9 [" y0 M. a7 }
  720.           {
    - C* m4 ]( k6 T8 E% u2 B( P
  721.             iEOF=fscanf(fp,"%s",szString);
    " y9 u( F! N3 r) i: T. F% h
  722.             if(strlen(szString))* G2 Q/ [# T% Z: j4 P" O( @
  723.             {1 ^2 U, [) X6 B4 q- h* Y$ V  u+ t
  724.               if(bFirstChar)
    5 x( V% c# V& W  X7 n7 w3 F
  725.               {4 w% j5 R! ~- n
  726.                 bFirstChar=FALSE;
    7 D1 h( ]) X: `
  727.                 bConnectIsBig5=FALSE;% a- w3 w! h2 U" X. ]6 k$ q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ( ]. ?+ m& O8 G3 j0 a, ^/ z2 k
  729.               }! e( ]3 o& Y9 [% Q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));5 c0 ]: C+ u, x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));. Y& n+ e# M, o/ b1 T$ y  g/ P
  732.               dlg->m_ListText.AddString(szString);# c. `4 H) R, u8 y) s
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , ^, J/ C) c2 Y7 ]
  734.               *szString=0;7 k! Y, {9 q9 G; M/ g) ~
  735.             }+ ]! q* g! X- A+ j
  736.           } while(iEOF!=EOF);
    ; q7 Y  ^: u  S) H( l1 ?: Y
  737.           fclose(fp);7 j4 P: q; r. ^2 p: ]$ V
  738.           unlink(".\\DownLoad\\readme.txt");
    6 h+ q1 r: }, U9 {5 z8 v
  739.           dwStartUpSteps=3;6 D: z7 n' A/ X* s) Q$ H- ^
  740.         }
    + r* k2 D2 M# f8 ^
  741.       }0 K, o! ^, f$ X( l8 J$ S
  742.       break;
    " u' x0 l+ ~3 u. H" [) [' Q
  743.     case 3:
    6 q! X: k# o1 S1 W6 p5 L
  744.       if(!Dn.Connected())
    ; T& W/ ]& Z# K: x9 r: g! w
  745.       {
    $ a* H' s( [8 o; j8 L! ]2 v# z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ) \8 |! E! u# X' `
  747.         dwTotalFiles=1;
    7 E: V2 f1 x/ A1 u
  748.         dwDownLoaded=0;
      l" W( p5 r: k
  749.         bSilentStep=TRUE;
    ( u8 n$ T' Q3 R7 I
  750.         bCompressed=FALSE;
    ; W' Q9 p% q7 _; I  Y2 M9 [- s$ Z
  751.         strExtLocal.Empty();
    7 b9 d  W/ r% @9 J- Q! l3 Y* ~
  752.         strFullName="checkversion.txt";  T. ?* E* _) z& h2 P3 H: o
  753.         dwProgramState=AP_CONNECT;! Z0 ]" l1 Z" H$ j. B6 T7 [
  754.       }& P/ K0 B' u/ X! w, u- K
  755.       dwStartUpSteps=4;; v8 L: R; m' {- g# r
  756.       break;/ c9 I8 w9 B) t
  757.     case 4:
    8 R. {+ n: |# @1 G
  758.       {1 ^6 v! T8 Y# [% z
  759.         FILE *fp;
    4 l4 a! p$ U9 I6 D
  760.         char szString1[128];' s) J- [4 p2 c
  761.         char szString2[128];
    & b: ^0 T8 u& P3 Z1 f4 u4 S1 I# z! o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");$ k& |: C0 X% P6 q$ n0 q4 C
  763.         if(fp)& b- h1 _1 d5 U9 z( J
  764.         {& A. q) j, a4 |+ D: N
  765.           fscanf(fp,"%s",szString1);; G! n" j8 T9 Q6 a1 Z0 a
  766.           fclose(fp);! I( K$ Z4 ^1 p( h/ ^0 Q
  767.           fCheckVersion=atof(szString1);6 d9 w$ l: `% ^6 x( H: Y9 j
  768.           fp=fopen(".\\checkversion.dat","r");3 I/ V) i1 ]! X1 O0 U1 A
  769.           if(fp)
    7 F3 _+ M. w7 b- w1 r
  770.           {
    - S: L7 q% F0 F( ~) S, X
  771.             fscanf(fp,"%s",szString2);) J! v. j; c# f2 A0 Y7 t* X2 D
  772.             fclose(fp);5 i1 h3 e2 N  Y+ v1 f
  773.             if(atof(szString1)!=atof(szString2))( V, E; r0 Y: B" g  y' F
  774.             {
    ! ?/ b- m, Y1 t) {4 n
  775.               if(!Dn.Connected())' Y9 t4 C& f# ?' J4 y. h6 y; s  P
  776.               {/ ?1 x4 k" D) m( U
  777.                 bFirstUpdate=TRUE;
    . [  j9 Z! w4 f! ~1 ]4 u
  778.                 dwTotalFiles=1;' f$ M% W9 Q! i
  779.                 dwDownLoaded=0;
    " z. i5 F7 W/ c6 h7 I
  780.                 bSilentStep=FALSE;
    % g7 X2 u4 W4 c' |/ L
  781.                 bCompressed=TRUE;9 X3 e" s$ z# w: O  P
  782.                 strExtLocal=".\\DownLoad\";+ n( T1 v0 `$ {6 u/ h1 ~/ n
  783.                 strFullName="update.txt";
    4 r  u% y$ f8 m! b
  784.                 dwProgramState=AP_CONNECT;
    , i" a3 I4 j2 X
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 Q- W1 P$ J5 ]0 h
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ ~0 c/ d4 z6 F7 |
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");3 {2 N  t& D  M; C% _

  788. ! d( U0 c2 A. A- w1 p/ s. j
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! a; D$ _+ C( [, m- S& f) Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    9 D- x4 }. I7 S
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 ~8 e" B2 x) g  }! S5 C" u
  792.                 {
    2 ?9 ^4 F" U* x1 K
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 J8 ~) ]2 u: @/ L9 G
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");) R3 ]& r. S/ B& b) x- B$ v* K
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    6 t) z5 Q: T  j5 Q0 V9 C
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; n5 q5 c" u% c9 o. t. G5 x; {: {6 N
  797. ) D8 K6 t6 ]8 J  ]( n0 M
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- v5 y2 \! J# L$ Y0 G$ `; r& d2 y6 L
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 y& O, I: c9 I  n
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");) N) W0 U4 y; I7 u/ d* N' ~4 n
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# J: [& A( a7 p/ O5 K, V9 y
  802.                 }
    ! z* [+ H+ P. k% w9 W' s/ ]# g
  803.                 dwStartUpSteps=5;. ~5 z4 O: c8 P# F* V
  804.               }
    ' L5 j) B& N( D. h9 Q9 S$ l
  805.             }0 B) t7 H0 h& f5 j3 C
  806.             else
    3 J" |/ A( D6 C; y
  807.             {
    1 m9 F$ d6 G  u3 ]* k
  808.               unlink(".\\DownLoad\\checkversion.txt");9 g5 R8 O, S* j1 d, j6 d
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! W3 {7 V( ~% n' w$ k2 N. a
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" y+ H+ g7 F  g
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 u" |. t9 N2 I2 G* p5 ]+ U/ g, ]6 S

  812. 9 L: P4 \& V9 y/ X& K0 a5 f
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 K5 g8 y1 r$ _: \0 `6 _
  814.               dwStartUpSteps=99;6 p6 ^* O8 \$ [
  815.               bFinishUpdated=TRUE;- t% `' r% x+ f' f' s# W4 z& w) R! T* u
  816.               bCanUpdate=TRUE;0 h0 d- \. G: E9 ?+ t/ y
  817.             }
    # ~" m+ q8 m  f/ V, K4 H
  818.           }4 F0 O( x# |, m; g0 Z
  819.           else
    5 Y7 G7 e- R7 g0 E- H% Z
  820.           {. S" R6 J+ p, [
  821.             if(!Dn.Connected())$ ]: n5 D' x1 A/ U% m* C+ h1 C
  822.             {. Z  _# ]# o3 j
  823.               bFirstUpdate=TRUE;
    # E, ]$ b. v# n0 P* h7 V& _
  824.               dwTotalFiles=1;0 h1 n. G0 u; A  N
  825.               dwDownLoaded=0;$ n1 a3 E4 m! V
  826.               bSilentStep=FALSE;
    : B% N( B$ `6 b8 o9 d1 |
  827.               bCompressed=TRUE;; Y. ^0 m' X  y% ~* _9 D* G
  828.               strExtLocal=".\\DownLoad\";
    ! m7 @: S) Z3 U5 ]7 e0 M+ s
  829.               strFullName="update.txt";
    . S# {5 i: ^5 D
  830.               dwProgramState=AP_CONNECT;
    3 a* ]. g( l+ c7 V
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & T9 K; E: R$ a7 Q4 e6 N
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      L3 L! t! m. l. A; Q' m& [# {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");" V! ?" N+ y9 [4 w4 l
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 l' ~9 R% N5 P4 y/ A+ ^
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ! s9 Z' p; n3 |5 ?
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)3 k2 |, |) y1 E; J7 O, T0 x
  837.               {3 }3 f+ |$ l5 R% u; |1 a5 |6 q5 K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");: i" B' Z7 z0 C9 e  B
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");0 V% w' H4 ~% @: [( o9 W
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    / {# a9 z# ]3 s5 q; T, v
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ C4 z; W! C- Q5 |% K* A/ R
  842.                
      C( N$ b4 u* W, c- m3 ^7 t; C
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 F6 _; x' c9 G4 a/ E+ n
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ) I3 }+ H1 `/ G* D& x# W2 L
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");) n* N9 S" H7 ~. J1 Z3 }$ U
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      q% `6 K* p- K: @# f- ]
  847.               }& T- b  U8 d, B6 Z4 V* V; \
  848.               dwStartUpSteps=5;
    & `1 x4 p) p1 `2 J3 v
  849.             }+ h5 l5 v7 g! d( T' \1 X- n1 t: H
  850.           }
    # R6 ]' G; j% C: U3 g& K* D
  851.         }
    9 Z5 x( P5 x5 T8 [5 O5 A% K0 h' ^6 F
  852.         else$ o6 I; l. ]) u
  853.         {. `, J- I' u+ \: w+ V
  854.           dwStartUpSteps=3;
    5 p% f' L- I+ o6 `
  855.         }) ^: P6 D" q; ?6 w  [: r
  856.       }
    2 C- [' K& ?# F) J! P! J
  857.       break;6 y4 Z/ D& t5 e. s2 w4 i
  858.     case 5:1 ~3 V$ W# F( M* U( M
  859.       {
    % h7 O& r2 w3 p3 }
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): k4 {* i% \1 H
  861.         {
    $ h( ^9 F0 r3 s
  862.           int opt_overwrite=1;( i: h  Y6 D  A  Y+ M$ X+ x  T3 v
  863.           int opt_do_extract_withoutpath=0;
    5 P- V& N5 v, e' k( ^  c
  864.           unzFile uf=NULL;
    2 Y4 C4 V1 d' P1 q) }+ ^# @

  865. ; I  J' |3 D4 B. ~
  866.           uf=unzOpen("Wsa.zip");5 Q" P& j. ~; `1 V) g9 X# _
  867.           if(uf)' @$ a7 F) W% ~
  868.           {5 `3 o# O3 H1 z" e6 f0 F* D& S; e( n
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    5 [; B- v; Q1 i. |  x: \
  870.             unzClose(uf);
    ! p9 _$ u# J4 N% [; A' a% U! R
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ' _) `( E5 P6 d3 s1 z4 b* C5 N
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");8 b6 A* t5 ~; a* l4 }( w
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");$ k% T' }; w8 J8 Q1 Y( A6 g: ?* O6 Y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. [) g5 a$ T" l3 z
  875.           }( ~5 |& A9 j* m& H6 b
  876.           DeleteFile("Wsa.zip" );
    - b, C# G. e$ Q) U- f
  877.         }
      Y8 n! \5 U- D: j- I

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

6 }  X( m1 n4 H5 g+ z6 b' K/ _( M9 H: a. ^% t6 A+ |! q

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-22 10:52

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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