CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
% N% n) I7 Y8 K% o0 u5 a
  1. / RevApp.cpp : Defines the class behaviors for the application.
    9 L/ z7 u' O) h) B4 M
  2. //
    / W6 t! r9 O8 Y8 f  v! W% `/ [- ~

  3. 2 e8 U: X. V. k! b' u5 }2 V
  4. #include "stdafx.h"
    ! n; H* F, t9 O3 N* ]2 v

  5. 6 a  p3 z* }, n( R/ p! z
  6. //#define UNICODE
    $ ^0 G2 \; t7 k. k0 O
  7. //#include <gdiplus.h>
    ! ]' [% H9 }3 J1 b
  8. //using namespace Gdiplus;
    ' u2 L, N% b3 p! W7 G% i. A
  9. 5 u9 Z( i3 @8 O
  10. #include "RevApp.h"
    , Z$ i( N: M) K, Z, r: e% j) f) }
  11. #include "RevAppDlg.h"+ Q) p( c  m5 ~$ H- p$ n1 f
  12. ) ~! R/ O1 Y1 U$ s
  13. #pragma warning(disable:4786)
    9 s; K6 `- w! {0 R2 y/ u
  14. #include <map>9 g3 R7 @; e" r  f
  15. #include <list>  \0 M4 @9 W5 f  D; e! I
  16. #include <direct.h>
    2 s, M) |" f0 Y! Z3 ^- E

  17. 6 [8 I5 e- m  M6 Z, c) z  P) i
  18. #ifdef _DEBUG
    6 m4 r- J: v' x3 Z) J
  19. #define new DEBUG_NEW& h6 v8 ^* c' W- p, x
  20. #undef THIS_FILE- A0 J7 T0 I+ u# x& C. q
  21. static char THIS_FILE[] = __FILE__;8 g5 P& X) \& F( b8 R
  22. #endif
    5 u" g) m% u' q: O5 B1 C
  23. #include "SkinResDef.h"
    5 ~# N: E' S' C7 C% T; l2 j0 x2 X
  24. #include "ChangeBG.h"0 s9 ^: u( u! g* i
  25. #include "AFXINET.H"
    ( B" h+ f3 t$ W0 r0 p  E

  26. & T" r; m% K/ z  J; ?8 R# M7 F
  27. #define TRADITIONAL_CHINESE 05 g! y, ~4 k) A% m4 q' P5 n
  28. #define SIMPLIFY_CHINESE 1
    8 @) {; x/ N/ C4 f
  29. #define ENGLISH 23 Z  A. a  J# P- M* p( r
  30. int m_iLanguage = ENGLISH;
    ! ?/ z% `* e" [' L& H8 `/ o, w
  31. /////////////////////////////////////////////////////////////////////////////
    " b5 |( u3 r; ~$ F' E3 h4 Q3 _4 D
  32. // CRevAppApp
    , p% d4 b% y& t/ V9 L* b

  33. ' X3 g4 ]% D& k8 V* B$ P
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 ^8 y8 v) v4 I
  35.         //{{AFX_MSG_MAP(CRevAppApp)
      h0 S5 P$ c0 q# J+ P
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.$ m* G; j9 g: V
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!+ c/ g; ~- F# M- k1 [! u9 Z
  38.         //}}AFX_MSG4 a# j$ K3 `" b: p: V+ J. ~" d
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)* L: M/ L0 Z  w/ a( N, r
  40. END_MESSAGE_MAP()) G) b2 ]) j9 I* l: B

  41. 5 m+ Q' k% x. y, M$ _: Z
  42. /////////////////////////////////////////////////////////////////////////////
    , Y4 P: _# N* N) X
  43. // CRevAppApp construction: l9 r  Z# l& A, s

  44. - l7 f5 C9 D+ b8 q% G. {
  45. CRevAppApp::CRevAppApp()
    1 W2 Q, ?9 {0 F4 R4 r0 M9 E
  46. {* [  {6 x& g; ~1 [; a. {
  47.         // TODO: add construction code here,
    " j6 P- J1 T) Y5 |4 s) B3 D3 c
  48.         // Place all significant initialization in InitInstance+ Y5 `' g) F( O$ a8 H, G* [
  49.   bDisplayIsBig5=FALSE;) ~7 e1 x4 b" W& M
  50.   bRestartUpdater=FALSE;
    ' L- v/ p5 z; s9 `2 K
  51.   bFinishUpdated=FALSE;8 c4 m- E/ ~. B2 T* q$ d
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    . e0 r: M7 x, h
  53.   InitChangeDataBig52GBKS();6 Q0 {; J( ?, T! q8 p  l
  54.   InitChangeDataGBKS2Big5();
    $ s4 ]/ [" U/ A$ C" V% U
  55.         //
      x- E7 w( o4 K
  56.         bClickRunExe = FALSE;7 P4 J; X% S8 k3 o) P8 ?' \
  57.         /// V* M4 {. x' H6 _5 }9 l' S0 a9 N5 J
  58. }
    ! y) c+ y' _% ]
  59. / V7 h; A2 J# |# T! I2 Q% P8 l
  60. CRevAppApp::~CRevAppApp()) @4 ~6 j- [) m  a. t3 u
  61. {
    ' F# H- C7 k! Q
  62.         // TODO: add construction code here,
    : e9 ~4 Q% z' I( ~- q) M9 B
  63.         // Place all significant initialization in InitInstance2 \: F: M7 S1 t/ I4 c
  64.   EndChangeData();5 a, ]' J4 [1 \0 }; ~/ [% X
  65. }
    / k$ C% [0 E5 n3 K) y
  66. ' u! X2 R  \; h) x
  67. /////////////////////////////////////////////////////////////////////////////
    ( K) y! t7 n8 p( w! e8 ~
  68. // The one and only CRevAppApp object- x8 W3 v$ d% |3 ~- |2 W* l/ m. G

  69. 9 A) i$ F' |' C' L4 N5 H
  70. CRevAppApp theApp;
    7 ]! h3 f; Q! x4 M; T& e5 a

  71. 0 m: w5 n- f  |% ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)) v5 v/ }5 G, q) S- A! q
  73. {
    $ R0 j9 h  d& \; A
  74.   int iEOF=0;( u1 M4 x1 O; ^1 q' O2 U$ Q9 K
  75.   char szTempName[MAX_PATH];
    & d2 _& k) \, s: t! U, N$ L
  76.   *szFileName=0;
    . {4 h# }+ s( i9 \6 @* h
  77.   iEOF=fscanf(fp,"%s",szTempName);
    1 P) G0 ^4 a) i0 U5 j& J
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')# C0 H7 P8 s  y5 X; p
  79.   {8 ?. A$ z6 v/ A' d/ v5 Y! U( ^
  80.     strcpy(szFileName,&szTempName[1]);
    , Y8 W7 X2 R, K0 U8 U
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    + i9 L  Y% U7 F
  82.     {
    0 e$ R1 e4 F9 d8 {4 G9 n
  83.       iEOF=fscanf(fp,"%s",szTempName);: d' j; W8 d# D2 U: v
  84.       strcat(szFileName," ");
      {- o) A; I/ m2 `
  85.       strcat(szFileName,szTempName);8 M9 N5 o" N5 Q% ~5 m" u) i
  86.     }
    7 u" v8 j. l3 i7 l# O/ ?  o5 b
  87.     if(strlen(szFileName)>=1), w8 v$ m. w/ C1 Y6 y& z0 M
  88.     {, Q$ X6 S0 h# E0 t
  89.       szFileName[strlen(szFileName)-1]=0;+ T) U& j3 J! e( _4 D
  90.     }" V" `) F, H* ?
  91.   }
    3 V& A4 |2 d6 T# V9 I; U1 k
  92.   return szFileName;# R6 S, Z/ N* K" P! U
  93. }
    ! ^- i  E3 T* {8 n/ Y! c! x

  94. # o- Q2 [4 C1 v2 ~9 Q4 s& E1 I
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)" x- x+ k2 V# G
  96. {. Z$ z, u! j) V. P8 p& `
  97.   FILE *fp;/ q: ~- I0 r3 Y. {: e6 D% O
  98.   char *key=NULL;. U4 S6 e7 N1 I. R* H9 k- P2 w" y
  99.   char version[MAX_PATH];
    5 F$ C$ z# y6 m8 u7 j* D
  100.   LPUPDATEFILE file,olds;
    ( b1 Q. F- _" `$ I4 R
  101.   std::map<CString,LPUPDATEFILE>::iterator p;1 |, d: z7 r* W; V  _- {  f

  102. 4 _7 g. y# p5 p* p, o1 P0 L
  103.   UpdateList.clear();
    ( m6 [! b0 A) [+ i$ y
  104.   UpdateFile.clear();
    + S' F1 c4 r: S3 j7 p% F
  105.   if(GetFileAttributes(filename)==-1) return false;  o4 @  ~+ v% ]9 f$ N, l
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ' F' \4 B1 W+ [& ?! @" f
  107.   fscanf(fp,"%s",version);
    7 e' {5 s& _/ |5 l8 E% q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }! b! F: d2 C" W$ Y' J6 u
  109.   while(fscanf(fp,"%s",version)!=EOF)
    : x" h- z, X7 s- c
  110.   {' J# C6 z) b% O% F# k9 t
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 f( B' B( N. j( y4 _
  112.     fscanf(fp,"%s",file->path);
    # K: Y5 r2 c! _- [: q& Q7 J2 `
  113.     ReadFileNames(fp,file->file);
    : K" n& t0 M2 [+ t4 T% ]5 V
  114.     strcpy(file->full,".");6 h* M! |  [' k9 Y; L! C
  115.     strcat(file->full,file->path);
    ; _7 o  H( B1 w9 |# ^
  116.     strcat(file->full,file->file);( o  z- I- \/ s) W: k& H6 i
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())4 @- o% M$ d  L
  118.     {8 \) Z% r+ N; Z9 e6 a% \1 u
  119.       file->vers=(float)atof(version);
    & Q4 ?5 o. i' j+ f6 w
  120.       UpdateList.push_back(file->full);" U: N& J  T; q! G" M$ J
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ( Z* }2 K4 Y4 D3 e2 o& y
  122.     }
    3 w5 _( ?" W* H$ s. g- p
  123.     else
    1 w5 c4 S$ c( t$ A0 q; O  ~( r
  124.     {
    8 A- i9 k& D# D6 F8 Z! x: M
  125.       olds=(*p).second;2 `8 H; ^! Q- O8 V5 c8 y
  126.       if(olds->vers<(float)atof(version))# P: P8 A+ S- u8 V
  127.       {4 m& M/ l# U- f! {6 \, x
  128.         olds->vers=(float)atof(version);3 q! `( n0 o; _5 d* r3 t
  129.       }
    ( \# ?2 g1 p( O
  130.       free(file);- |- |; N3 W7 n6 ^# @; W
  131.     }
    ' I* l1 p& t( J" D
  132.   }
    ' u* c4 O$ q/ M% ?& s
  133.   fclose(fp);* P5 H6 D3 ]9 F: p
  134.   return true;
    ' {. e; U: `, }- U% s  _4 m: n6 m
  135. }* S  N( S' B" T1 F3 Q

  136. / Q9 v% F# I( n/ B
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)8 Z/ w# |- ^( }/ u
  138. {
    2 K$ w5 `* k$ C" P: Y/ H, s& T
  139.   TCHAR  szFull[MAX_PATH];/ j1 g+ @3 U! L* i- q
  140.   TCHAR *token,*inter;
    ) s  M& E8 z+ \& \- s) C
  141.   *szPath=0;
    + \  B5 |; [( |( S, L
  142.   strcpy(szFull,szFullPath);# X2 X! i$ y5 Q) u( [
  143.   token=strtok(szFull,"\\/");
    1 t- ?1 k# _* y$ d; a. Q8 [
  144.   inter=token;/ m: q5 r- @& D  o' ?0 R, \
  145.   while(token=strtok(NULL,"\\/"))
    + K) P! x) Z+ p" {
  146.   {( v' s  [) ]3 D/ o! z$ I$ O
  147.     strcat(szPath,inter);4 k1 _" m" L' c
  148.     strcat(szPath,"\");$ f& d; V9 H5 q3 j# b3 i
  149.     inter=token;
      z( c8 @! b3 i* H2 }1 F9 s: n5 o8 u
  150.   }4 l! h! I6 Y+ [3 X. r  C- Q' v
  151.   return strlen(szPath);
    6 O2 c* o' M+ V4 S
  152. }( [9 Y8 N7 [( D
  153. ( b2 K' B( e( _! g
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)1 s& l( c; B0 q# C" p* Y% i
  155. {
    7 G: V8 A) s4 q
  156.   DWORD attrib=GetFileAttributes(Target);
    7 A( \. H* u# D5 \8 u
  157.   if(attrib!=-1)! P' Q! E) u& O4 G; y0 \
  158.   {7 V  g5 q+ ]1 R" X
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))2 k& n, v# o' j1 B  X) i1 w2 A0 }
  160.     {
    3 F: j% r; F( {& d
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);% m  x; g, ?; X8 [& ~2 _8 c
  162.       SetFileAttributes(Target,attrib);2 a/ x) O# [4 T+ x$ [9 I$ }
  163.     }
      W- K' O/ r( `: d6 _* G/ r8 k% A
  164.   }
    - ^* U( B; y  V( e
  165.   CopyFile(Source,Target,Erase);
    ; _1 g5 D' n4 D5 m$ F( }
  166. }5 t. b  Q% D% ?8 {+ i

  167. + z9 J  f  O  O
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    2 S. V, v6 N# ?, m  }+ f3 q* L
  169. {9 y: g) g& u) ]; T. W' T
  170.      FILE *fp;
    # Y) |) m' ~# w8 D3 v9 n
  171.      char  szBuffer[8192];
    # ~- L: d/ L: f/ m4 y
  172.   va_list  argptr;
    4 A" N& p8 T$ G) Z0 s# R2 k

  173. 9 J( P3 a, v! Y9 T5 Q7 C
  174.         va_start(argptr,message);
    6 H% `& p% Q! k/ `& m4 T
  175.         vsprintf(szBuffer,message,argptr);9 b6 ^, ?2 X1 E. X
  176.         va_end(argptr);8 d4 J  u% r9 B) E4 x  B# h( t* l+ f; L
  177.   fp=fopen(FileName,"a");" {, T! o- O& b: R+ ^
  178.   if(fp)
    # E0 b5 f0 p$ S  ^
  179.   {9 a  {7 E4 G- l/ m1 v- T% o
  180.     fprintf(fp,szBuffer);7 S. u* N0 K# N: E% G+ W" m4 W  q5 w7 }$ u
  181.     fclose(fp);. }) f; _9 Q. ~9 k1 K+ ^( j
  182.           _flushall();
    3 E" L& x3 c5 P2 }! c7 z' E
  183.   }/ T+ S$ D1 d9 R
  184. }$ b4 ~: X( Y/ a% x: I$ S+ J3 |! _

  185. , F* T2 [2 b9 Z$ Q9 Q
  186. BOOL CRevAppApp::Fclearf(char *FileName)+ m+ e5 d; S* e5 n- F3 B/ C  X
  187. {' c1 S# G) v0 o0 \3 y2 ^
  188.      FILE *fp;
    / y' c% }) V" d9 l
  189.     DWORD  attrib;$ _, U5 }/ f% L+ T# V) {/ ~
  190.   attrib=GetFileAttributes(FileName);, M& r# _% G+ r* _; c8 r
  191.   if(attrib!=-1)
    % k& s/ b$ B" w. ?( H; q* e
  192.   {, O* A; n  i7 U: _% L7 i
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    : x, m: V  [) k! c
  194.     if(!SetFileAttributes(FileName,attrib))" Z. q6 l9 \% U0 V" M3 f
  195.     {
    ) y: ~3 o& k# E+ l# p+ e! E" D
  196.       return FALSE;
    . d; l/ s. K: O- C) j  x" S. M
  197.     }7 ^. P- [  |' \4 u+ u
  198.   }
    - O4 _  |! Q' Q6 h$ c7 Y! b
  199.   fp=fopen(FileName,"wb");! j+ }' W: j: y1 d# ^* ]
  200.   if(fp). B! k4 i0 I+ J
  201.   {. [( [! x0 o5 D/ _
  202.     fclose(fp);9 q; q1 J- |7 P8 F8 X# V0 k) F
  203.   }
    : r+ D* o9 x8 V' {6 ]9 N2 W
  204.   return TRUE;3 ~. g# Y4 R1 [( ^- x" r2 }
  205. }
    , C9 N8 Q7 c( R  Q

  206. % z: X/ F) a* }* C- ]1 h
  207. BOOL CRevAppApp::UpdateLocalVersion(void), e- j+ P8 f2 ?- R- l5 ?
  208. {7 [% q, G$ K3 o* @  v
  209.   char filename[MAX_PATH];
    - ^  ^7 }  `6 h
  210.   LPUPDATEFILE file,olds;& u0 P; t# G+ i+ y3 A
  211.   std::map<int,CString>::iterator i;& G; o1 u6 N+ P4 o, P
  212.   std::map<CString,LPUPDATEFILE>::iterator p;& x# \; O! ~: C0 ?1 ^3 l
  213.   std::list<CString>::iterator l;
    2 h0 F5 B. e+ y! V1 S, f

  214. 5 @0 A" q, z/ l& N& L
  215.   if(bFirstUpdate)+ G! W- y5 R; y' o! J
  216.   {+ o  z# X; m- J  W
  217.     dwCurrFile=0;% i, Z- i7 X7 v% }
  218.     bFirstUpdate=FALSE;
    6 E5 q4 F, @3 r- F
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 ^0 b3 [6 O2 k
  220.     {
    9 `$ {1 y# y6 W
  221.       dwTotalFiles=UpdateLocal.size();! S/ f, w5 c( t! J( Q* ]+ Q
  222.       dwDownLoaded=0;/ N$ H- u; w1 ~
  223.       bSilentStep=FALSE;
    + \' D, C1 O& U& T
  224.       bCompressed=TRUE;7 ?* b0 B8 f; \( L0 P, V
  225.       strExtLocal.Empty();3 ~2 [: ?$ ?, u% t6 w
  226.       strFullName=(*i).second;3 g% v, J( a9 J5 R) l* d( k" w8 {
  227.       dwProgramState=AP_CONNECT;! t) i# o8 D5 C% d) s" k; o, z( v: ~
  228.       return TRUE;
    ; K) g2 e. r( S
  229.     }
    , E% f: E* E# c# M- y
  230.   }
    * r- ~) ]2 I3 I6 A' N
  231.   else if(bRestartUpdater==FALSE)
    ( h  J2 w# \6 J/ ?, f( i! O2 K
  232.   {8 j$ b& v  j% Y# Z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    - P  I" Y, p" H2 Z* ^
  234.     {
    + [/ |* U! G: `2 i/ M+ [6 V) f5 q
  235.       file=(*p).second;, T3 ^1 z% o- {$ _& T9 v% r$ h, _
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' n+ J. Z% l0 i& _9 L
  237.       {
    7 F$ h: t3 ~8 P$ C$ z
  238.         olds=(*p).second;, B  h- H* a: w  S  t3 P
  239.         olds->vers=file->vers;
    , y1 s2 r, i6 q4 w0 u- V
  240.       }
    / P) N1 `9 M4 V# {9 r" s
  241.       else/ r) V* q3 Y: B+ f2 W; |( E
  242.       {
    # p3 Z4 v1 x; b" C: G+ h' q" x
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ b# z1 d7 o; l$ x
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ! Y) `* |: p: v( u
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));% w' z( H! ]0 Q0 ^& `1 B
  246.       }! Z5 [  ~% ~9 X. E( }
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ; P+ m: b" B* m) l
  248.       sprintf(filename,"(%s)",file->file);4 B. K8 z) T  J/ J3 n5 R
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; I& K9 q; t1 O
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " `( g0 Y" n* ~" z* j1 @6 O+ i
  251.     }) n! Y% ]5 _" g/ [
  252.     dwCurrFile++;
    : f/ H' o# c3 o* f$ h3 e$ g
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), V/ k% V, ~" @" B  z! |
  254.     {8 ]: J3 C8 P6 z
  255.       bSilentStep=FALSE;& A/ g/ n, H* g1 X/ w
  256.       bCompressed=TRUE;
    6 j. K. Q/ f# T) P
  257.       strExtLocal.Empty();* X4 ^( C% Q- l6 \; s7 f( n
  258.       strFullName=(*i).second;2 U' }  \* c. G+ ~: A  b0 u  n
  259.       dwProgramState=AP_CONNECT;
    5 O7 i' V& f: G) _
  260.       return TRUE;
    4 \) N- l/ |% e; Q8 r) Y8 Z0 \
  261.     }
    ; t  w7 k8 q, l% r2 n# I3 L
  262.     if(!bRestartUpdater)
    & K( y3 }) n, d5 r5 }2 S1 }
  263.     {4 ~: P' G( U: W. _9 p9 Q
  264.       int iCurrSize,iFileSize;9 V# {6 r6 E% y) s
  265.       iCurrSize=0;
    3 E* X- I/ {2 y! C& ~- u
  266.       iFileSize=UpdateList2.size();2 k! @2 D5 y2 m
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");& m8 i; U$ Y1 S$ E% ]. o
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");3 J, l% I$ O; p! R1 U& I' l% n8 A
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");% N* J" h1 c4 o' A3 Q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 o& @  n' @6 i- t  B  i
  271.       Fclearf(".\\update.dat");
    ! }% s1 s: X; s% y: \4 N
  272.       Fprintf(".\\update.dat","Bloodyf\n");- R1 I/ W" _2 ]# ^- q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++), p, s+ ]  E  \7 F. V% B3 B' C
  274.       {
    ; F% e7 G$ L! F" y5 `$ v
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())$ P6 z4 U& r3 R- b7 Y3 c6 v7 a
  276.         {
    4 v9 U5 R) k! K
  277.           file=(*p).second;( Z: Y9 m4 k- h% L- _6 L
  278.           sprintf(filename,"(%s)",file->file);
    9 \4 z! S# o+ D  {0 v* f
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 r  h' C2 Q( Q8 X9 m- ~! I# o
  280.           iCurrSize++;
    * ^4 A& G' t0 _7 R# j) Q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    3 v( h, i: {3 D. o2 H- N& L
  282.         }) ~, O4 F7 E) k: p' l4 e0 }
  283.       }. f$ H" z; v1 o3 |% e6 X# ^
  284.       unlink(".\\update.txt");+ |- a& x' b' c" Q
  285.       unlink(".\\update.tmp");
    . O5 q  A. m$ M( S0 j; _2 w& }* B
  286.       Fclearf(".\\checkversion.dat");
    ( x' M  I5 o2 \! n( W+ M- r
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    : s# D" W3 r8 P* I- I( S
  288.       if(UpdateLocal.size())
    4 f* |1 R/ F7 z2 f( x* {9 d
  289.       {
    0 _2 s4 A! j  r3 m; N: L; h
  290.         UpdateLocal.clear();) L3 s' j* S* F. G
  291.       }
    0 c" Z6 B0 w4 G: R( G8 g
  292.       if(UpdateFile3.size())
    5 x2 y1 V. ~9 \% I7 h$ o
  293.       {
    + E* w) u, B( a$ i: E. p: B
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # ~6 x3 ^6 {8 U1 e* l# C$ t
  295.         {1 {4 G$ Y5 @3 r# I, E# I
  296.           file=(*p).second;3 W% g" {/ M5 ]0 J9 B
  297.           free(file);! G% m! M; k* ~+ y) B4 o9 v
  298.         }5 A/ A. a6 c$ z
  299.         UpdateFile3.clear();- a  g; @% u! V! p7 ?
  300.         UpdateList3.clear();+ c. d2 w0 c: n1 ]" S$ M
  301.       }
      z3 X5 C  z8 z; O  z8 H
  302.       if(UpdateFile2.size())
      D* j! H1 D3 E! U% t: z+ p5 v2 S% @+ F
  303.       {+ w4 l, U1 r5 U( w0 ^
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & w' [7 A/ R% Z' I$ f; U! ?6 Q
  305.         {! Q9 Y) u+ V! z
  306.           file=(*p).second;( o/ W* W1 O# z3 ?  y% x
  307.           free(file);0 G1 H7 x- O0 E+ {2 r$ M0 |% m
  308.         }! b* I% J. f" j, u5 N3 }) a
  309.         UpdateFile2.clear();- C1 D4 {, {0 `5 K' r
  310.         UpdateList2.clear();- ^& [5 G  d2 F+ W$ x9 o
  311.       }
    4 X7 X' G8 b% `/ q
  312.       if(UpdateFile1.size())
    4 n# h; Q# u3 W. i1 K' C8 r% q
  313.       {
    : x0 ^+ W* R) ~/ U5 H* M
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) U7 E9 ^0 U8 Z! c5 m! Y" v8 B+ C
  315.         {
    8 t6 ]+ ~$ g% }! l3 Q
  316.           file=(*p).second;$ f# H6 ~. a! U% b4 V4 K8 W
  317.           free(file);
    2 W8 }( J6 v# U* R
  318.         }0 ]8 H" y' x( U! o& \
  319.         UpdateFile1.clear();
    ( g" U% s1 ~8 \/ ]; W: I
  320.         UpdateList1.clear();7 Z. b2 T' |3 [6 ?: [; |
  321.       }
    8 N4 X- @) v8 \* {! }+ {
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));8 i4 I0 L" z9 f, j0 ]6 v
  323.     }
    % G4 a; T" ]' Q, ?$ m5 J
  324.   }
    * A# p! Y) p' J* C
  325.   return FALSE;
    ' k5 g7 p% }: l8 d( ]
  326. }) i0 Z4 p1 L& I2 w

  327. $ R; g& |8 J5 T  [* M
  328. void CRevAppApp::ClearAll(void)& ]) ~7 S) a; B/ r: N% o
  329. {
    ! B5 S0 o8 o- Y9 }
  330.   LPUPDATEFILE file;
    % V  N6 j$ r+ q/ G
  331.   std::map<CString,LPUPDATEFILE>::iterator p;1 ^$ M/ J4 H3 _4 m& J
  332. # e( y7 f, {  ^% N$ O* {/ @" K
  333.   if(UpdateLocal.size())
    % H3 H3 P) Q6 W4 E: u. {) l6 n/ I
  334.   {
    , _  f# H4 E2 R$ n6 V# w) A; x
  335.     UpdateLocal.clear();/ ?4 D* \, U' t" D% d' p3 X' `
  336.   }
    . f# L( v6 q4 e$ C! j8 Y- {
  337.   if(UpdateFile3.size())
    , {4 O" f) t2 f8 Z$ G
  338.   {$ X# N7 x) p$ u5 h( t
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). o0 h7 r) s4 m2 I% O8 f
  340.     {
    6 Z& \6 c/ j, x9 p$ Z
  341.       file=(*p).second;8 T% ]" x' M8 D2 \/ _. k
  342.       free(file);
    9 W- |9 @) M/ o
  343.     }+ p/ ^" ~6 N4 [9 l8 ~" H0 d3 T
  344.     UpdateFile3.clear();
    $ O2 u7 T' R6 s' a+ j; v4 ]
  345.     UpdateList3.clear();
    ( L4 c+ Z9 T6 p% x
  346.   }
    ' ^& B) M( k) E( L1 E2 _
  347.   if(UpdateFile2.size()): y4 z' a. |2 }  G2 V. n
  348.   {, ^9 w! k3 E6 G5 N6 o* ?( [
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 b6 j; L8 |* l/ c1 T
  350.     {
      _4 G# R9 r9 \; S" M/ q3 D
  351.       file=(*p).second;
    " O4 ~0 I; V' {) D7 e; J( U
  352.       free(file);; u3 ~% K6 v& q& A/ \/ }! f
  353.     }$ v( N$ K1 D( q" c# b9 L: Q& T) r
  354.     UpdateFile2.clear();, M3 l2 W8 Z. g5 }! b
  355.     UpdateList2.clear();
    ! y+ G6 _& u+ q8 T
  356.   }) Z' @/ D6 j$ u* v8 A9 L
  357.   if(UpdateFile1.size())
    / Z+ g  |! D/ i: d, G
  358.   {
    2 T! k) Y( o- _! ^% M
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 d6 m. J7 J1 O) |# }
  360.     {2 M8 {% ]& G/ G; G! y/ X! x
  361.       file=(*p).second;* Z  a4 a" |' R! B1 F
  362.       free(file);
    + o+ I! L5 r5 W7 X8 m) v' W
  363.     }" x0 N# _8 o+ E+ H+ F
  364.     UpdateFile1.clear();, w' U& \6 W% M  i; z# {* a
  365.     UpdateList1.clear();
    4 z' ]6 F) f" o2 y
  366.   }% u0 e+ K, f) M7 Z- c4 s0 n
  367. }  2 ?; @; B0 K! H( L! ?- a: k: m
  368.   2 h' \( d5 C4 N0 f' N' W( D
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 H6 H6 o* p+ v- w3 S$ _
  370. {
    8 Q/ R9 \& m4 p4 r# L
  371.   int c;3 i. `) d" _" ?$ C
  372.   LPUPDATEFILE file1,file2;/ O" L$ F! S+ v
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;' J2 N, |' K, M8 F4 S/ D
  374.   std::list<CString>::iterator l;
    / f) D" s" Y8 f" S* ], S$ P* C" Q0 M! X

  375. + K4 f; B- ^: [' j6 ^* B
  376.   UpdateLocal.clear();
    1 b* s$ B* e% f; m6 O
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    / }+ E+ c* k' M; a7 j0 Y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);5 O0 q. @# X3 ]* u: k. K
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);* i( v8 p& u$ @- E# U: h% y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ) P; P! W6 L" F% A
  381.   if(UpdateFile3.size())
    1 J2 j, W0 C/ X6 u
  382.   {( S  E& ?" y6 E
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)+ Z# ?8 ?" w8 [4 ]- W: g
  384.     {
    * V$ d" w( @) Q5 Z
  385.       file2=(LPUPDATEFILE)(*i).second;
    ; |) T, h. @3 R* N+ o  h6 ]" e8 l* h
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    % M# I9 C- U# \. [" u: }' \
  387.       {
    , g- a" W$ L1 c( M
  388.         file1=(LPUPDATEFILE)(*p).second;
    ' t. R# v% q' |1 Y$ l1 |
  389.         file1->vers=file2->vers;
    " ~, p/ F; B; g" q  F
  390.       }
    9 [" y+ h& Z$ ], H; d- V5 q3 _) j
  391.       else
    * r9 J" Y7 W1 ?! f  h9 b
  392.       {6 Q; I* O9 ]; K0 ^/ B- E3 J; j2 ]) C
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " ^$ F' M7 ^; ]6 W
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    + f9 i% K. V+ b. I1 Z! G4 G$ l
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));  p5 l8 b6 g  D; w2 x
  396.       }
    ; u+ R9 p, u; \; D
  397.     }9 ~: n5 K! x* A( Q0 I
  398.   }  c1 `& X) @$ W
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # H* ?) T* @5 c5 h
  400.   {
    " w$ B) q$ V4 H5 C6 m! y7 ?+ O$ u
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())7 W* f" m- R8 F  L6 G
  402.     {; f  L, ]( C9 N$ |1 ~/ _# x
  403.       file2=(LPUPDATEFILE)(*i).second;! s! E' D% r' A3 a8 }  S2 ?
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 b1 ^7 K$ p+ A# V
  405.       {0 Q+ O0 ^/ F0 W; c: d- q% X
  406.         file1=(LPUPDATEFILE)(*p).second;
    : b$ ?7 s2 i5 P" ?* l2 o+ b7 N
  407.         if(file1->vers!=file2->vers)
    9 ]! c6 i  f6 c8 ^  f4 ]6 c. _
  408.         {
    0 T; z9 n! `+ z) `$ }
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 W& ]: U% l( s4 I- h8 |, a
  410.           c++;2 d$ |( S# s, \/ H# t% N0 u. p" s
  411.         }
    5 h" j$ j5 t- h" ~  K
  412.       }0 I7 h; y2 n1 S# \
  413.       else' Y! |5 s$ Z" v# V6 Y" B9 w. B
  414.       {
    3 k! }5 D5 M6 D4 Q) v. h: h
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 w8 g7 @0 x% N! E3 k: U4 @* I& K
  416.         c++;2 x5 l, z% g& i1 `
  417.       }
    : ]! Y0 ]6 p: q5 C$ s- `
  418.     }
    4 w+ `8 b' Z0 w$ R! z
  419.   }
    . m, ^) n9 f  X" F0 S) Q
  420.   unlink(".\\DownLoad\\update.txt");
    4 e+ l6 b+ E% l, b2 |5 {% F
  421.   if(UpdateLocal.size()) return TRUE;' y. p3 M+ \6 n, U" x% S% h" N
  422.   else                   return FALSE;$ Q2 D" _9 L- x- Z: m
  423. }: |% V9 ]! n; ], S7 T) r$ `
  424.   J( O: N5 t. Q" e
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , z: K1 N3 Z7 L4 L# G; C
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    , V6 Z1 m* Z; J

  427. ; F: A. V* U# N" G; ?; ^

  428. 7 \' T" y9 B  M) _2 h( }

  429. 4 T; w$ f1 [- q) J
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)9 C9 E* q9 I- d1 b$ o
  431. {' ~# S  l. }' y, ~0 v- G5 ]3 S$ |/ O5 f
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    8 L/ p# q& L, e  d" o5 x- U
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( [8 K! `. z% {( N8 x+ ^+ M
  434.   {
    9 Q: E! Y9 c9 s  e0 A$ B
  435.     char szLanguage[50];" g2 V$ F4 ~6 f- o* T
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' ]' U. @7 \- Z; j0 D- `5 M
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' n: `" |! p, x$ H2 F
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # \& Q+ v4 l4 L: `% t
  439.     else                                   m_iLanguage=ENGLISH;
    % u; L( ]' P+ }3 @( x1 I
  440.     char szRegister[100];; b+ c" N5 D# Q+ D3 J; ]
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 W$ r  O8 h2 I+ E- t; z+ ]
  442.     strRegsName=szRegister;
    & j! c# S( e; R' _
  443.     char szPatchURL[100];9 Q' p1 l/ o$ X1 t  p2 d. {
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' ~* ~9 a' }0 F4 h* p
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * ?! P! B, U; V- L
  446.   }
    # G3 O1 M( o% @8 ~, I
  447.   else& s$ R$ y9 E- R0 g% }, z
  448.   {
      o" @! z& N1 D% U
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 Z6 O  i& G& L7 \" ]2 T1 X* ?5 A3 i! @% v
  450.     strRegsName=DEFAULT_REG_URL;
    6 ^+ g* y  L) h/ W0 D. D: y
  451.   }3 q2 C8 ?6 p, o: E- w8 A
  452.   if(GetFileAttributes("hosts.ini")!=-1)/ L$ e0 b; J7 J9 F4 l9 g
  453.   {8 a+ ]$ R1 Z. j) d0 B
  454.     char szIP[50];
    0 t; E' t$ q9 ?9 V  [( T) i7 W+ z
  455.     char szDIR[300];
    : _' B! c, h3 u3 W* ]$ g4 O4 l
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")), w: K* B: j$ t; R
  457.     {, g8 C+ u7 F' O- W
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    4 M% U% r- v+ p6 A) ?# s
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# w, V5 t! f7 g, ]" ?" h4 \9 X
  460.       strHostName=szIP;( l1 z& V7 |& t( {6 V' t
  461.       strHostPath.Format("/%s",szDIR);
    9 n4 {" \  w0 I# X
  462.     }+ l7 p0 o$ b/ q+ z9 q) U! z  L7 o
  463.     else; h5 v( S6 \2 [% ]* t5 e4 ~
  464.     {
    3 i: M$ H/ c9 x$ X; E
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    + n7 u9 w# b' a0 \4 g: n4 P
  466.       {+ O) ]' S1 M9 j
  467.         char szLanguage[50];' o/ \/ [8 A9 a0 ~
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! B8 Q2 k6 c: Q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " D- U/ x; h- y0 G8 Q2 [
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 u* h/ u$ E# |9 t- W
  471.         else                                   m_iLanguage=ENGLISH;
    - K4 J% X# t  c
  472.         char szRegister[100];' v) o5 n4 r. @; c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 \3 n8 b2 ]4 F/ C  L- _( d& J
  474.         strRegsName=szRegister;( b+ v: K/ u) B0 \; D3 Y
  475.         char szPatchURL[100];: T/ D# `  [& l7 S! b* Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; \5 T5 Y& I9 g' ]( F9 F; y) q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 ~" ]% W. R: P
  478.       }
    3 i$ y  A, T! A$ Y
  479.       else
    1 i/ i) S) b0 R9 R2 O. Q
  480.       {
    % o& {: r% |; B
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - J2 R" k  v% o6 }* f
  482.         strRegsName=DEFAULT_REG_URL;9 J1 w' e: M8 Q) E7 ]
  483.       }
    + j+ V7 e- F1 B; Q4 X/ K) n
  484.     }
    ' x- G: n8 O9 E# }; z$ n
  485.   }
    5 |3 `) r2 L% c  ~- w& `
  486.   return true;  T: D& x- u' d8 r5 C8 r& H/ a
  487. }% G5 w# t1 D4 D$ L) L4 V0 }, c( r. D3 V

  488. - [) }5 S# z- w) [, z: v; L
  489. #include ".\ZLib\unzip.h"/ T0 H, v/ i( p$ w  F2 ?0 G* N
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    1 t; Y/ K/ L3 r$ d
  491. /////////////////////////////////////////////////////////////////////////////* a1 r! K8 T$ T4 H, I/ k
  492. // CRevAppApp initialization
    6 Q; @1 j2 o4 `# h* e

  493. 9 x0 ]  ]. x" n: k1 d- R
  494. BOOL CRevAppApp::InitInstance()7 i( i' q5 T8 d# }! Z& U/ j1 Z
  495. {
    / f* ]" F, Y# k% O8 c0 S& ~
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    8 ]: \* M3 t  J; i

  497. 0 }2 e# N/ j9 `! b, N3 f$ B% N
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);5 e0 X, o( R# Q* w5 `4 Z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    6 f7 n* D8 w3 @$ l  Y# z7 F. }7 X
  500.   {
    4 I! V$ }! D6 n% u( l
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    7 j" s, W8 g5 F, N2 q
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 d& [: A  ^2 Q# f8 p# w' X, \5 H8 R
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    8 T6 o3 I) \. q
  504.     {$ K9 `: N: W; [  v4 v
  505.       strcpy(szPath,szPathTarget);
      H6 L! K4 Z+ Y5 N7 L' L. V7 i
  506.       SetCurrentDirectory(szPath);
    ( f0 K2 Y/ M. d9 _
  507.     }
    $ _0 L( z9 q) u) G! o8 l6 h
  508.   }
    * V7 U7 D3 Q( A
  509. #ifdef _DEBUG4 e; c, `% F) h9 E
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 Z$ j6 T" P" p& b! U
  511. #else
    ! u) Y. M) B: e& E7 a9 V2 y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 R1 j: w3 C2 m( @
  513. #endif3 }2 B0 F4 P- K
  514.   {' `2 O1 q; n/ o( O; ?! W; E6 h
  515.     char tempFileName[MAX_PATH];  j# b" s0 J/ e  J0 R2 t, c
  516.     strcpy(tempFileName,szPathSource);& l' ~! n9 o' `" T% Q- @5 L* a7 V; ?
  517.     tempFileName[strlen(szPathSource)-12]=0;) Q6 n- k( Z0 F8 _& a  f
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    - H+ q  `. B% ~9 a
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);. l; s" D5 T* _" }  |
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);: [% {( Z5 f, q* ^0 ?: d
  521.     return TRUE;* r- Q) j: g1 N) h  n$ V. X1 @
  522.   }
    & F7 Q. a: \1 p6 q' c9 b
  523.   // Nuke 0118: Delete run.exe
    8 K( N, S9 j+ P  [0 u
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );9 i# s; O0 ~. e
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");$ A4 y" m. F. i
  526.   if(!ReadCfgFile("Config.ini"))
    " p( ]. L4 e) h6 t* j; K$ F
  527.   {2 K' I7 L5 v, B4 |. i; t1 N
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    - p& c" O. [) \- @2 }+ K
  529.     return TRUE;+ z. H) s, t% l, K) }* p
  530.   }+ h$ M& N: R3 p) d
  531.   HANDLE mutex;
    ; g  x6 S) I/ z" n$ G, Q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ ^/ G$ h, |6 |1 K' X8 L
  533.   {
    7 j) ]7 v+ P* Q
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)/ U& A% l' f  L& Q0 R' O4 N
  535.     {
    # C! @4 T9 S; ^
  536.       CloseHandle(mutex);
    ! Y- v& t9 M- C. |+ I
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    9 L* a0 N* A; A
  538.       return TRUE;
    & k6 j+ k3 x" o2 N1 T% O
  539.     }
    ' i( {/ D$ V5 P/ X
  540.   }  $ [1 h! I. p7 w- S9 [& Q
  541.   CloseHandle(mutex);
    8 w% G% b  c  M6 j9 x

  542. % H9 y: H: m5 _' J+ Y, ~6 b0 i
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);* b1 l0 K3 h6 U1 r
  544. 1 t- E9 E5 c8 ^2 a" V. {
  545.         AfxEnableControlContainer();
    + n3 y7 {9 Q" k7 T3 s
  546. + r7 f$ T- S) Y+ V8 w) @, U
  547.   bCanUpdate=FALSE;
    # M1 F9 h0 ]. V% |
  548.   dwStartUpSteps=1;
    2 B1 o% ^% H9 f/ }7 w
  549.   dwProgramState=AP_NOTHING;
    / _" R- d7 [4 l( z' ]
  550. , x, V0 u6 d, r+ ]
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ F( M! A+ m1 \. i

  552. 0 M6 ]* p7 B" V" n  M0 h5 M
  553.         // Standard initialization
    3 Z: f7 l  |' H4 V2 p
  554.         // If you are not using these features and wish to reduce the size
    3 u* M( r9 ~3 W6 X
  555.         //  of your final executable, you should remove from the following3 Y5 A" \( G0 U$ s
  556.         //  the specific initialization routines you do not need.
    2 j8 ^3 {7 y% R" s0 T( E

  557. ; P, u# T/ @- ]& f1 A
  558. #ifdef _AFXDLL
    & }" c. k# q0 D# ]0 E3 i% H
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL' D, D7 e  p  X" \2 D$ I
  560. #else& w# p3 ]+ h5 w4 r/ R( N
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    : r; c* }4 V" i# M/ h
  562. #endif
    ! X5 G% y8 A" \& S' E/ e

  563. 9 Y0 {& T5 V- J7 K) a0 G
  564.   dlg=new CRevAppDlg;6 x3 s0 g( n9 d4 D
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    4 j! ?. |6 J4 }6 v7 F" K
  566.   dlg->ShowWindow(SW_SHOWNORMAL);6 |) X5 @" l* Z& j
  567.   m_pMainWnd=dlg;
    & y3 d/ B2 i0 u: {$ S# h& C  I% h/ ~4 l

  568. + ?- }5 W" K4 e4 l2 m0 p3 P
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    : n$ [" r/ \9 Y" F- ~9 ]

  570. ! c6 h, U/ N% v" G
  571. //  GdiplusStartupInput gdiplusStartupInput;& k$ o& K* S/ z* Y! C# F8 V' s, v
  572. //  ULONG_PTR gdiplusToken;
    & d9 K, k( k+ i& B+ Y3 X$ y* a' p
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);: ~0 k( S: x$ {, G5 o
  574. " H/ L: t( i5 `# \
  575. //        CRevAppDlg dlg;
    3 q, @; D: s5 \+ u; e5 |
  576. //        int nResponse = dlg.DoModal();& s- \: C( D2 g7 O6 E5 D
  577. //        if (nResponse == IDOK)
    0 N' Q" r; V  P
  578. //        {; G9 V: ]$ F1 D4 i7 E$ x) f9 Q
  579. //                // TODO: Place code here to handle when the dialog is3 i! j* c0 p% {: ?# I
  580. //                //  dismissed with OK( }5 G( e4 R7 i1 q" _3 i5 q1 V
  581. //        }6 c% }0 H" u$ J2 P3 Q$ [) \
  582. //        else if (nResponse == IDCANCEL)/ o1 o" n4 y! B4 p, ^
  583. //        {
    . l- ]! l" a% i
  584. //                // TODO: Place code here to handle when the dialog is$ F+ B( ]0 u( {' L" k# N
  585. //                //  dismissed with Cancel# h( v% y3 E0 `2 q4 L
  586. //        }4 E8 N# z' Z9 g' N
  587. . I1 t/ F2 z0 H6 s/ R
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    - @6 y! c/ T( c% J
  589.         //  application, rather than start the application's message pump.6 k# f, B& _$ E: I8 S, X5 }( q
  590.         return TRUE;. o4 }. B, N" J: q, N" y
  591. }/ y. X- I. p/ t2 f! w' D0 f

  592. # w" b, X. m% |) Y& Z+ n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)4 X/ _0 Q2 J7 @4 Q' a3 f/ {4 q
  594. {$ g# U4 z  F' ?8 @8 R7 `
  595.   int i;
    , f5 x- H- \: S# n: [  s" t) W
  596.   char *szRet;3 M) ^# K; |5 n9 I0 X2 x0 I4 x: ^1 u

  597. * u% Q/ {* u- M9 Y! a7 ]0 p
  598.   if(pSource) { itoken=0; sztoken=pSource; }5 I9 {( R* @6 A- G: E
  599.   if(sztoken)" q( Y; s4 x( ]1 E) A9 X( B  J$ B
  600.   {1 k4 q1 O) Z0 P- n3 g; T
  601.     szRet=&sztoken[itoken];
    * e5 N6 A' [* ~0 E; N% ]6 {
  602.     while(sztoken[itoken])
    7 U& E" \& q9 p: L' t; H, s
  603.     {1 d/ P. Y# J7 D- n+ `6 y/ R
  604.       for(i=0;i<(int)strlen(token);i++)
    ' z3 K: {1 L/ y( W+ S
  605.       {8 \. q' Y& d, y, K& h9 a" G
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    " f% D. u) I1 T' {1 G8 B
  607.         {
    . f9 i8 ?6 k8 \
  608.           sztoken[itoken++]=0;
    8 D% ]# T% W% L' L! |+ ^
  609.           sztoken[itoken++]=0;
    / v) e* O2 g4 _8 \0 s
  610.           return szRet;' f; |/ C! x2 @
  611.         }9 `- P# H0 B$ K/ P
  612.       }
    " ~3 ~# u% {2 F( }3 q9 D  m
  613.       itoken++;
    % W/ b7 V6 A# m& O* \+ u) |, D
  614.     }
    . N/ S0 M: ^8 B2 N" X! p. O, g
  615.   }
    / C, s* y6 }4 }. q3 ]$ C8 V
  616.   return NULL;
    2 _. [$ ~* p7 v5 I6 D9 ]6 ^/ C
  617. }
    1 q) @- |1 ?" `  }4 |$ G, q+ y

  618. 7 J) c# G) _7 U9 Y% g
  619. void ProcessProc(long Total,long Current): _: x: @  t8 q/ D
  620. {
    " Q  Y. w; j: }$ b% Y
  621.         MSG msg;  l2 z" K. C0 w6 O
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    $ x' C, U0 O" _1 k" I! s
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    8 Q, \  ]; W) r, T
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    3 F* f2 f1 C; ?* {; T6 _0 I7 `# Y
  625.         {, c2 h  q9 }8 ~9 S4 K8 D* Z
  626.                 if(!GetMessage(&msg,NULL,0,0))1 E! n; o8 N9 V, Z+ _
  627.                 {5 H; q- N( E* E/ ?5 r: M! o
  628.                         return;( b/ B" v3 v( ^. N% g9 k- e5 R& R
  629.                 }
    " Y/ ], }: j; O2 ~: Y; A) s
  630.                 TranslateMessage(&msg);
    4 [% H" R. m! a) {: v" h
  631.                 DispatchMessage(&msg);
    % ~# v; n! q+ f5 D
  632.         }       
    3 V5 y" i: N& z, p- G
  633. }; _% L& G/ u9 `, }/ P0 q0 q# D, j2 e
  634. 8 S3 k7 G, `7 o6 Z
  635. BOOL bFirstChar=TRUE;) h  c( v$ G3 [9 U

  636. 5 |) ~0 w2 E$ r: g
  637. BOOL CRevAppApp::OnIdle(LONG lCount): [5 L% M& v$ {, [7 i
  638. {/ s3 A8 W# h4 V# Q+ f8 @8 i
  639.         // TODO: Add your specialized code here and/or call the base class
    % n2 Z+ e: E% B3 A4 ?
  640.   switch(dwProgramState)  u: Y% j: g) {- ]; D( E9 r
  641.   {
    * z3 l* q  ?$ D; f$ Q8 H
  642.   case AP_NOTHING:
    & N+ F& D8 t2 [/ M) R' Q& `
  643.     switch(dwStartUpSteps)9 F8 z7 {' [% ]7 l8 }
  644.     {
    + G8 m' m( L  y. t8 ]4 @7 \4 f% T8 v
  645.     case 1:5 M7 _5 E4 E7 O2 p* Z3 M8 w/ z" S
  646.       {
    7 p3 @, [" Z9 j5 i# G
  647.         int i;
    ( I: R( _2 ~* N: i) M1 ]
  648.         CDC *pCDC=dlg->GetDC();
      s; q" w6 u0 ^- C
  649.         HDC hdcwnd=pCDC->m_hDC;
    8 Q! L& I3 M' u" V& z
  650. //        Graphics graphics(hdcwnd);* S5 P, S2 S+ f) A: C
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");- e7 M0 _9 m6 Q6 W9 r
  652. //        INT iWidth=bitmap.GetWidth();
    0 C+ w4 N% s$ d" k  b9 }( y" O4 v( s
  653. //        INT iHeight=bitmap.GetHeight();
    / ?. ^' w5 I, @+ S; f! z
  654. //        Color color,colorTemp;
      E. H! T0 z! N- y, _$ \/ Q1 a
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    $ [6 k2 S( s" R9 b2 f6 H
  656. //        {1 j* P3 _1 K( u9 z4 ~
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    * Z3 W  w, P: h9 [* l. f8 g
  658. //          {
    , E! T8 B/ v! }. [; S$ Q0 i' ^
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    9 ]: Z# Y: W  I+ M
  660. //            colorTemp.SetValue(color.MakeARGB(& V3 f2 L5 Q4 a
  661. //              (BYTE)(255*iColumn/iWidth),4 o# d- j9 K& {, }2 Y! s; m
  662. //              color.GetRed(),
    % @# M7 l% c2 p5 X, }3 `3 ]2 U
  663. //              color.GetGreen(),8 x* |/ }3 S' ^, a7 a. t3 ^5 ^/ L/ e
  664. //              color.GetBlue()));
    ( V. ], D( f5 A& B- W& ^4 e4 V# S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ' V# u  I6 ?3 ^% L1 g8 z
  666. //          }9 S0 S/ G6 _5 ]# A$ p
  667. //        }4 ?+ G1 A5 I: F$ f7 f0 t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + J. b: s( ]2 }5 g6 n, e
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, f/ A- k' r, ?8 K$ Q: S
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    % ]1 T9 i* [) m2 t
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 q/ a5 ^, u9 I/ L
  672.         for(i=0;i<240;i+=8)
    4 L( h9 V: T1 R: E
  673.         {
    ! h8 }) _  V/ c0 ~6 G
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & x0 i$ V$ c% }( R' P. a. v) ~
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % {1 O! ~. A0 `- J- \$ q+ k) s5 T
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. {- N! e! _/ |/ n
  677.           Sleep(33);. c/ `/ C' A' m/ P
  678.         }/ F$ O# Z3 `: e, q
  679.         Sleep(1000);( B) k& g: F2 S8 R, E* }: G! h7 _* Q
  680.         for(i=240;i>0;i-=8)" f4 h+ w2 `4 u/ O' U
  681.         {
    9 I# P% z' r; ]% g+ i8 Y: a/ N
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 p3 S( @7 b; ^# c' m! A
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 n1 ~1 `( b' P* h9 \
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 ^, d8 u0 r7 O0 h
  685.           Sleep(33);4 \& k: v+ I  v/ }
  686.         }
    9 l. P2 W$ c. A( V' f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    + L9 O" @8 ~% A6 l
  688.         dlg->ReleaseDC(pCDC);+ ^4 P0 ]1 c, K' Z/ x; K
  689.         DeleteDC(hdctar);
    $ o2 J' `# N. e6 F. I
  690.         DeleteDC(hdcsrc);
    1 ?4 n- P' E; ^4 w8 E4 O5 ~
  691.         DeleteDC(hdcorg);6 k- ]: z5 v8 A8 v" ~2 e
  692.       }
    ( r2 k, p7 w+ p' x; f
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    * r( b* y$ ?6 v$ ^" [
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    * n, @' P& k' |1 E" x
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");) a  ~3 J) u9 `  ]/ M( d4 p9 e' G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");/ K! j# H6 W: l* v* i
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 S  j( ~) s! p) p& v. p0 R
  698.       if(!Dn.Connected())
      n% k! w/ M6 p6 Y
  699.       {
    & ^. G6 f+ A# `0 |: w& M0 ~
  700.         dwTotalFiles=1;
    ; n: ~5 L8 k3 N3 D
  701.         dwDownLoaded=0;  L* |% D/ A9 {6 Y" _( Z
  702.         bSilentStep=TRUE;
    $ U! `* h1 ]0 v+ m7 ]% y
  703.         bCompressed=FALSE;
    # P* i( ?! S6 I/ |- Y
  704.         strExtLocal.Empty();0 i' B# L- S8 F+ c/ N. {' |
  705.         strFullName="readme.txt";
    * G7 _- }8 W0 |' `
  706.         dwProgramState=AP_CONNECT;" N2 |# D4 n! g4 I
  707.       }& q) K( b& _1 G& A
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();: B1 p" j+ L) w- O7 n: H) ^% b2 k- `
  709.       dwStartUpSteps=2;+ E% y) {, q/ `! b: u% q
  710.       break;! M! ~( V- S# l
  711.     case 2:
    5 B' p% m3 }7 o# [) x: p
  712.       {" {8 y9 t4 ^! f- R
  713.         int iEOF;, @: L- {" C( S4 d. Z* Z* c/ a' v# f+ F
  714.         FILE *fp;
    : D( B! H* Y& I  {6 L
  715.         char szString[512];4 m2 ~. n9 u* }6 H
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    4 X4 l% p' t0 z/ G. l3 y, Q! p
  717.         if(fp)$ k+ r8 k& Z" X- Q/ b
  718.         {
    6 G* r8 W  L% U: o' S1 u
  719.           do
    ' U& z! P! a' Y2 \( D
  720.           {- o# y7 s; q$ o/ M
  721.             iEOF=fscanf(fp,"%s",szString);
    7 V( p# z% z+ X( c; I0 N
  722.             if(strlen(szString))
    9 u, ?( c7 ]0 p
  723.             {1 D# D- ~0 ~8 q8 t7 B0 C
  724.               if(bFirstChar)
    ! j: H/ e( u; X) @
  725.               {
    : f& [: A5 H# j- s* n. Z: B
  726.                 bFirstChar=FALSE;6 }. z) h6 v4 C1 t
  727.                 bConnectIsBig5=FALSE;; V) b, D' s5 V
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    7 s8 s! J+ {. D5 j5 M
  729.               }5 k' x0 b9 g' t; W
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 u6 K! X7 j% x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));: \/ ^1 H4 ?6 A+ Y/ D! A
  732.               dlg->m_ListText.AddString(szString);3 t$ o0 b; s' u3 c( @( f' Z+ r
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, F9 Y1 s- |; H3 i
  734.               *szString=0;
    8 o5 k: c; V1 Q
  735.             }
    & _! C+ n" }" I& g; o( b( L3 V4 ?
  736.           } while(iEOF!=EOF);
      x; y- S" E2 `% F. I; N) V8 C
  737.           fclose(fp);. M  z7 i5 q: J5 b& v/ y
  738.           unlink(".\\DownLoad\\readme.txt");0 _$ K$ L4 R2 j
  739.           dwStartUpSteps=3;
    3 j+ h  }% D% {
  740.         }
    + |) c* Z6 {8 ?  X4 k3 Y
  741.       }
    ! B* b( a0 z; [+ P
  742.       break;
    - j. P. \# |8 K( D2 y
  743.     case 3:& F7 ^& `' Z6 }$ T( |
  744.       if(!Dn.Connected())3 J  J5 w6 }/ f4 X
  745.       {1 i- B2 g9 L0 l' S) ~- E% q: U
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);: D9 H2 G0 ~9 Z, S3 f( q
  747.         dwTotalFiles=1;
    0 r: y. {. g4 @) D1 D
  748.         dwDownLoaded=0;
      @; N0 v2 a6 O5 Q% o
  749.         bSilentStep=TRUE;
      k) P# K0 U' X% a- ^
  750.         bCompressed=FALSE;: g# b; w6 j! e$ v  w( y2 A
  751.         strExtLocal.Empty();
    7 e- X5 k: R; j1 {: t5 f
  752.         strFullName="checkversion.txt";
    * w# V* A4 u. h# E' G% S
  753.         dwProgramState=AP_CONNECT;
    ' c7 G8 d4 ]# N1 S! c7 `' P8 Y+ K
  754.       }
    # ]- w, N5 z; r! W, t' s% M
  755.       dwStartUpSteps=4;
    ! {  A- O1 G1 ~) k# d3 {
  756.       break;
    - V) O0 d5 T  ~, |2 G
  757.     case 4:
    8 d& ?% i) Y) ?) W  @
  758.       {
    ) X0 V7 A0 Z6 W9 n8 A: l& O2 @
  759.         FILE *fp;
    - r" W! E; K6 d+ ]% U# w
  760.         char szString1[128];
    3 c1 u1 i* c/ S
  761.         char szString2[128];
    $ b* v) ?- U9 B% y$ f( ~+ M! h
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");6 o# Z! X2 b6 z) g
  763.         if(fp). [$ g# l3 S4 }" _2 d
  764.         {
    . M, Y! E! r6 j5 E: q4 ^! I
  765.           fscanf(fp,"%s",szString1);/ Q2 d# L" b6 O8 t
  766.           fclose(fp);
    7 M7 i' _# y( u: |
  767.           fCheckVersion=atof(szString1);. v& J: E: @- r. H2 N
  768.           fp=fopen(".\\checkversion.dat","r");
    : ?' f  X& Z9 n# N1 h: x( ~. ]
  769.           if(fp)8 @8 Z8 u1 Q  }, q4 y
  770.           {% M. f0 o1 o. m' {* p1 D
  771.             fscanf(fp,"%s",szString2);: I( a# q- l0 @6 l8 |
  772.             fclose(fp);
    : ~1 Q3 C1 l' S3 d$ B
  773.             if(atof(szString1)!=atof(szString2))
    + V$ O6 ^: h& i3 Z
  774.             {% F& I5 P( G5 t9 z# \
  775.               if(!Dn.Connected())
    ! c" E; w% W+ g7 e4 p( C2 S8 V
  776.               {
    4 r% {; A4 u8 Q9 s4 p
  777.                 bFirstUpdate=TRUE;" x5 S# p" ?" P5 t8 y0 P) D3 Z6 K. m' k
  778.                 dwTotalFiles=1;1 U7 T  a6 h, J+ u4 t4 d* \
  779.                 dwDownLoaded=0;5 k! {$ z" i2 U: \' k
  780.                 bSilentStep=FALSE;/ u3 @( \. K3 F5 i4 m: n: ^
  781.                 bCompressed=TRUE;
    3 Q1 y2 O' p: g7 b" u$ `
  782.                 strExtLocal=".\\DownLoad\";$ Q9 Z/ @4 [- R6 v8 X& f
  783.                 strFullName="update.txt";! I% V8 u0 y7 y3 B: N% c2 U
  784.                 dwProgramState=AP_CONNECT;
    ; k! B# f( k/ f( i# q4 Z: N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 w2 [; S3 k5 b! j- q" g# d  q4 X
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 I' o2 F7 k" d) S  m
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");2 P- b& j: m7 p' x6 b- e
  788. 3 l% `8 W4 m8 K- U1 n" G: T
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 Y5 H/ E$ I5 _6 ^
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    5 w7 Z, w5 l' Y0 j! P" B- @' r# Y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)0 E, V5 z: ]" ^! j
  792.                 {
    2 e' w3 b! l* B% V3 [# q! a- b
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& Q  x3 l6 |( N- K9 Z! J. w* p6 ?
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");( ?) E: n0 E$ Z7 O) j
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % E+ r, L2 K0 _+ a! U! r
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + E1 u6 ]5 \, V7 y* E: C4 a( F

  797. & v; q0 ], L+ _8 T; e
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");4 y+ W; R$ c; k* v3 u' D
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  I* ]* o4 b& ~( b; ^
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    - ?6 t) ]* B6 @6 B/ Y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " t8 P) I+ T% E7 L* T% I
  802.                 }
    2 }6 H! }' d  |. D/ L* x
  803.                 dwStartUpSteps=5;0 G9 u- W/ F/ O2 N8 M/ `
  804.               }
    8 m7 v+ W5 a5 a# O" p
  805.             }' a  j! B+ P" r8 a6 H5 g3 w
  806.             else
    / C! b* a& K3 ^* A) G
  807.             {; s4 e- o% L" A7 m9 H, e5 p
  808.               unlink(".\\DownLoad\\checkversion.txt");
    2 w3 p7 o$ F! _8 E) r0 z+ [1 J% ~3 C
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");( j5 H# h# \1 _
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 D  d4 s# s' c
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ( V* V' I/ a3 E% H2 q$ k
  812. # M: ^1 `% J$ Q  m/ \
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. n/ l& ^0 I6 w$ n/ e: a! x! O
  814.               dwStartUpSteps=99;, r! M# L; j& Z& Q1 T3 S4 |
  815.               bFinishUpdated=TRUE;9 Y7 V1 F0 u2 e' ?* _
  816.               bCanUpdate=TRUE;
    9 ]7 f' |) ~! R) U
  817.             }# |+ `0 N/ e# r' P8 p
  818.           }
    / O3 Q1 p& X' e0 E( I
  819.           else
    ( u$ X3 e* ^8 K8 B* a0 p: y
  820.           {& n; E3 I! y# u0 w/ U. P
  821.             if(!Dn.Connected())$ k! \1 `5 G% M. C% p2 j
  822.             {: X) K1 j2 G: ^$ h& F+ k0 ?4 v$ i
  823.               bFirstUpdate=TRUE;' x8 K: P5 j5 G* k: \& {
  824.               dwTotalFiles=1;
    / q" h5 Q& ^' L3 W
  825.               dwDownLoaded=0;1 X# M+ l( o! F
  826.               bSilentStep=FALSE;, l1 J/ E: ?3 T' x% K* O
  827.               bCompressed=TRUE;, ?, }9 v( _8 F8 l2 v0 k! S
  828.               strExtLocal=".\\DownLoad\";
    ' L3 O  Y, L1 S4 M2 P" F. J. |
  829.               strFullName="update.txt";
    & w3 C5 Z0 s: D* \
  830.               dwProgramState=AP_CONNECT;
    $ `4 ?' s4 l2 n! N% w& U/ Z7 }
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 b( v$ i* k: q3 K5 {
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 o* \2 V4 [, C6 a
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");+ a# h6 I  o; ]7 g/ |6 V* X
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 d5 ^- L) C% B2 B* r) ?
  835.               unlink(".\\DownLoad\\checkversion.txt");
    5 g4 m& a* c( m/ l) Q  A
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    3 \9 }" m8 t8 x# B! a) G3 X) l
  837.               {
    2 Z! ^5 A# M4 C6 }
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");" n2 A5 U+ z; W1 {" E, w
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");* V% s0 k. ?" ^5 O3 U% s/ m* h
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ( p2 b; s/ Y! q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( C+ R6 q8 u7 F9 R6 G& @
  842.                 0 D9 Z& b5 R" j6 P. V
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 r* u0 v0 y6 x+ M% j% K+ R
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 l( e4 I2 K1 y6 b2 [
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");9 R1 h+ D6 C7 L  y+ @* b
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 M9 N5 Y  G+ ^! D; ^
  847.               }
    . E/ b/ r% ]4 d4 c$ z! O
  848.               dwStartUpSteps=5;% a  i6 F2 p! f8 O& p: [
  849.             }3 Q- {7 Y; W: C" p( U; V
  850.           }+ S" ~$ v6 `% [2 m" r( V5 @& j
  851.         }* R% V* k/ H% T; i
  852.         else
    " \% o. W3 l+ a( p- r
  853.         {' E+ H8 z9 K  j- ^0 q
  854.           dwStartUpSteps=3;
    2 C" o& M7 w- X% {# s) ?# f
  855.         }
    + S+ t! b$ f8 l; w' q; p+ R
  856.       }
    ) t  |; ~- d3 b: b# i% _2 M2 r
  857.       break;5 a; t: n9 I: ?: u! u' J4 j
  858.     case 5:
    5 Z! p' ?+ B3 z) P8 y% b
  859.       {
    6 g: c9 a) }- T7 n/ }# y
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    2 h+ W) C* w" W# V$ Z6 F
  861.         {0 N0 X" ^) b$ B0 E2 f$ }* r
  862.           int opt_overwrite=1;
    . b* g9 Y5 C9 D% D. x$ g
  863.           int opt_do_extract_withoutpath=0;* u. C6 T3 r* \. A
  864.           unzFile uf=NULL;
    & z& o2 m1 c+ `

  865. * n2 B; Z9 g1 C
  866.           uf=unzOpen("Wsa.zip");
    % u$ L7 m# h1 V) g. f: h
  867.           if(uf)& i6 b% H- m' A$ \% ]
  868.           {: _5 b, U/ i) |" S
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);- |) ?7 V/ O( \% ~5 M; s  \
  870.             unzClose(uf);3 s5 i# e4 Z% s
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");) E6 s  j6 U; A1 q: m! |
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    % V$ K& Q. s# Q$ ^2 m
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");5 B, M1 |2 y5 O, f$ q6 i
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) Q" [# q- d/ \' b, t# i, ~
  875.           }# }# E) B: r: E1 |: X) ]' Y; e
  876.           DeleteFile("Wsa.zip" );1 b2 O& P) j( ?3 f$ M
  877.         }- m" F5 D5 }% D0 S) v5 c

  878. 6 e' p& g. V$ R! q$ D* O+ k
  879.         if(CheckLocalVersion())
    $ j) _  U) J- O8 n( q
  880.         {
    . R3 `- c; G- Q' z
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");0 ^! v+ s6 O; y
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");/ i; `+ D9 h( I; s0 [- a
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
      ^( o/ Y- X# j! e" S2 E
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . k5 d4 x) q5 N& T  U+ n
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    8 |* O% ^, T0 u4 A; M
  886.           dwStartUpSteps=99;
    6 A! j6 Y( @% u2 y: Z2 E
  887.         }
    + d. S& N! P8 V+ j: n7 U! M
  888.         else- x  \' ?  P/ M8 y' R( e
  889.         {9 Z5 u) r9 `6 Y9 L3 a
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' c$ k0 T; G, D2 k1 m( ]
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : x$ P6 X, m$ y
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");  B0 }: F+ i! R3 a$ w6 q

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部