CSUpdate.exe源代码

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

. c4 \/ o/ u( ^: \
  1. / RevApp.cpp : Defines the class behaviors for the application.; \# x# @4 `6 s# W
  2. //
    . W2 i  U$ e, b) a/ L3 w2 @1 h

  3. 4 u/ Q* @5 w0 \, H
  4. #include "stdafx.h"
    * i. t$ T- I8 T/ r
  5. 6 @! |; @& r3 P
  6. //#define UNICODE& T- m+ H/ O* Z
  7. //#include <gdiplus.h>& p$ _0 A1 H' v; F
  8. //using namespace Gdiplus;
    0 L1 o, @  O0 g9 D

  9. 1 q- A5 q- ^* G4 u8 g
  10. #include "RevApp.h"$ M' p' j1 ^1 k& s% x/ w( T
  11. #include "RevAppDlg.h"' V* Q* e3 z. }/ {0 O$ u# O- Z
  12.   M! J4 s: p6 _) \6 ~
  13. #pragma warning(disable:4786)
    . }& @. I: [5 {$ I2 h9 \8 H2 k
  14. #include <map>
    5 O7 i/ |7 e1 [  i& U4 H
  15. #include <list>, }, w( a( l! {. m5 A* w2 l8 J
  16. #include <direct.h>3 w" H8 u$ p  n5 M. ~0 P

  17. / _) A/ J% H: n; P
  18. #ifdef _DEBUG- T# s* J; b3 O* @: v
  19. #define new DEBUG_NEW, t. W+ i) F( [1 w" q. g6 L
  20. #undef THIS_FILE9 ~. E6 {1 l# F& Z3 ?
  21. static char THIS_FILE[] = __FILE__;
    - ?' }7 B# [! F) a( K+ O
  22. #endif
    ' y' M3 L6 a' d, v2 m# g) \
  23. #include "SkinResDef.h"
    . S$ J9 X2 v; R: ^( x' ^' q
  24. #include "ChangeBG.h"3 I, p9 G( Q7 F* e, O" M
  25. #include "AFXINET.H"+ t& B3 L& l9 Q2 M, r( r

  26. 8 w& H7 G7 l1 d3 {( C  D4 K1 i
  27. #define TRADITIONAL_CHINESE 0
    1 U9 @1 l% Q% Y- L
  28. #define SIMPLIFY_CHINESE 1+ F0 I+ y. p. ^* _; W* k0 c& P! J  m/ K
  29. #define ENGLISH 21 T: {- x" c3 K" {
  30. int m_iLanguage = ENGLISH;# v6 E2 U1 A4 q9 }# w2 L8 ^, x5 _3 D' x0 g
  31. /////////////////////////////////////////////////////////////////////////////  m/ n8 I0 Z( Z% l8 _
  32. // CRevAppApp# y# H5 r# A7 F3 y, `

  33. . O' }) l+ T" P: O
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ; V7 K+ H; m& i6 _0 k4 j) x; P3 @
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    " [6 m+ `* C. }( P# ~( N$ J' T
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.2 R$ R5 \) h4 P) Q; R3 e0 @' w
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ! s; h% ~' {* r5 b
  38.         //}}AFX_MSG
    $ ]( ^" g0 t$ y8 g
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    # t, z1 t4 D2 \& V6 P) |
  40. END_MESSAGE_MAP()
    ; F+ k) g1 W+ q
  41. ! I, {8 u% W  O
  42. /////////////////////////////////////////////////////////////////////////////
    1 r# b4 c( a" d# P7 x) n3 T2 w
  43. // CRevAppApp construction
    ; j. P' z1 w, z

  44. ) L  G8 G7 a& T
  45. CRevAppApp::CRevAppApp()4 y, P6 a/ L6 N
  46. {
    % g7 z1 Y. G2 w% R1 U- m7 ~
  47.         // TODO: add construction code here,
    8 I$ Z' o$ |, l* F" s8 E
  48.         // Place all significant initialization in InitInstance
    1 Z+ J; ]% a" z& t
  49.   bDisplayIsBig5=FALSE;
    % n8 S; b# M5 j
  50.   bRestartUpdater=FALSE;
    - l' s4 E% i8 B; B  f
  51.   bFinishUpdated=FALSE;: H0 ?0 o+ H5 R4 T% j% T& m5 ^, I$ d
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    & s- K0 A4 |" O. ^- Z& Q- E! n
  53.   InitChangeDataBig52GBKS();; `& d( v/ m& V" {6 d
  54.   InitChangeDataGBKS2Big5();' V7 `& l8 t0 K2 X9 ]' i
  55.         //# t' T& r- X: s0 C
  56.         bClickRunExe = FALSE;" G& L3 Y) b! _* z  D2 J
  57.         //
    3 N9 a+ Y: Q  m+ B7 Z
  58. }& o- {0 i2 |& h" Y

  59. 7 L2 P' a; S: ~+ v4 I9 p# g0 }9 Z
  60. CRevAppApp::~CRevAppApp()! T; R. j+ ?4 z1 Z. c1 P
  61. {
    ( Z) }- ]% k. [: c' A: ]
  62.         // TODO: add construction code here,
    ' A/ i" e" j# z) b! r
  63.         // Place all significant initialization in InitInstance
    5 u7 q, |: J, R
  64.   EndChangeData();% J5 _1 G4 F4 }" U! d
  65. }
      Q" b. P- n1 R& i( \9 a3 b6 p
  66.   |  k6 y$ @+ ?3 w
  67. /////////////////////////////////////////////////////////////////////////////3 y! g5 h, [, m/ r7 H
  68. // The one and only CRevAppApp object( T: U3 z  N* U& V- L, R; J
  69. . y  \6 b0 o8 d
  70. CRevAppApp theApp;
    + _# Q2 l/ W) s
  71. # ~; A8 K9 j7 y! d" u& g
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)7 k! ~9 N* a, p; D6 Z( p8 B, l  J
  73. {( A5 E8 i6 M  [. K5 Y4 g
  74.   int iEOF=0;; Q+ F1 e; l( ]- U) D; I
  75.   char szTempName[MAX_PATH];
    - {% k6 O; V8 H- s& t2 H
  76.   *szFileName=0;
    . z2 y0 [& s! K8 d- d4 }3 h& o
  77.   iEOF=fscanf(fp,"%s",szTempName);6 v) R2 y8 r. }, G7 K* A+ W
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    * S% [% M+ t. V: W) ]9 \& g
  79.   {( g. S" t5 v# V* f5 k' i
  80.     strcpy(szFileName,&szTempName[1]);, d: M' \- E4 c$ ^& R
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    - n- A# M; ?" Z7 O" U4 v4 Q
  82.     {' B" G, ]; k! {% z
  83.       iEOF=fscanf(fp,"%s",szTempName);4 m* B; c- A& x7 q  `
  84.       strcat(szFileName," ");
    , l& A; M' Z8 @. E5 }8 F
  85.       strcat(szFileName,szTempName);
    0 Y3 s, G& @8 T, b  ?
  86.     }  c3 b- T9 ]5 h. U
  87.     if(strlen(szFileName)>=1)
    . d0 P" @4 Y" t0 G4 O3 D/ ~
  88.     {
    ) v0 H! M: l  l+ H
  89.       szFileName[strlen(szFileName)-1]=0;# }& M1 g/ T. G" t& P+ G+ c# M
  90.     }
    , p1 p, F6 ?" B8 v/ i) p+ x
  91.   }
    # i0 o! }  h" a; u
  92.   return szFileName;
    ! u% ?( B- s$ Q7 E) I
  93. }  n2 l. }! }1 r1 V
  94. & p8 Z/ ~% g: @( F! T7 W
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)5 D( a: `# a1 {
  96. {
    + M2 c: p( L) H$ B" u6 H  v! H- R- E
  97.   FILE *fp;; A* o& p+ t& f0 ^/ k4 F  [
  98.   char *key=NULL;5 O3 u; q$ q+ \7 |' \% E7 ]9 c: @5 z
  99.   char version[MAX_PATH];
    3 T6 ?1 a; F0 j% F8 D: r7 r
  100.   LPUPDATEFILE file,olds;7 N7 U9 Q* A# y+ w
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    - S6 K2 Y3 V0 S  y; L/ ^4 F* u2 @  }5 T

  102. * n% U' b+ a% L0 S6 ^
  103.   UpdateList.clear();! J+ A+ S- ?6 u5 y
  104.   UpdateFile.clear();  Q* R. t4 w0 Y! \6 `: r8 t3 H
  105.   if(GetFileAttributes(filename)==-1) return false;5 j$ i+ w: A+ c) v) u
  106.   if(!(fp=fopen(filename,"r"))) return false;( C6 m: R6 [0 w% M: G+ V
  107.   fscanf(fp,"%s",version);3 }3 i' o/ t6 u: J4 M0 s
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    + z9 w3 X% @4 z$ F5 i; @5 G
  109.   while(fscanf(fp,"%s",version)!=EOF)
    6 m+ A; G! Y8 D9 ^- \5 j0 a
  110.   {
    4 B" @' F) |% M0 }
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# C8 z0 N2 f# o( a$ _
  112.     fscanf(fp,"%s",file->path);
    % ^- r; k2 P4 R/ i0 y7 v/ n/ t
  113.     ReadFileNames(fp,file->file);1 _" T9 C' W8 J) w
  114.     strcpy(file->full,".");
    0 m& y* q' c8 }$ R* J
  115.     strcat(file->full,file->path);
    5 a; H* ]* P) \8 U& _, w
  116.     strcat(file->full,file->file);
    ' O5 b$ B9 F+ m6 k( F8 J/ H
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())9 g* F) J3 v# ~' c: a$ p5 Y
  118.     {
    ' a! d4 T9 K, Y  k$ B' r- P
  119.       file->vers=(float)atof(version);
    8 ^% p* N1 f1 L
  120.       UpdateList.push_back(file->full);
    % u5 v! R- [# b9 U* v) X" V
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ( V& Q2 y5 v  m. p. L1 E
  122.     }
    4 L4 Y) u$ b. i; j
  123.     else# Z) f7 }: v1 B3 h" _" s
  124.     {
      R& s, J) r. m( c$ F& C9 z6 G: t1 f
  125.       olds=(*p).second;: D: a% `( r9 }- i( j, N, _
  126.       if(olds->vers<(float)atof(version))+ W+ V( X" ~3 N7 g
  127.       {+ H, O8 n) Q: w" L7 Y) f$ E
  128.         olds->vers=(float)atof(version);
    9 H0 v! u# @! y5 L1 s
  129.       }5 i0 Y' [% P) V: ~
  130.       free(file);
    ) \" M0 y# @9 k3 D0 Y
  131.     }
    + ]- |( B; y, x. J/ x$ [
  132.   }
    & v1 w2 }' a1 A5 b  L& G
  133.   fclose(fp);* f7 u$ j$ w9 \; ^$ a, _' u
  134.   return true;1 P% ^  m: G' ?3 u( Q# {. ]
  135. }9 C  w: _7 o, ]8 t/ }
  136. - B$ N7 Q" u! a: I) w/ i# q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! Q1 T+ ~. ~" G- b  o8 v6 F* @+ x! i
  138. {5 h2 X% }6 J8 }7 E( I4 w* s/ E5 H. U
  139.   TCHAR  szFull[MAX_PATH];0 H2 a" |6 b8 n
  140.   TCHAR *token,*inter;
    1 E. o* J# @! t4 ]  v- X5 y
  141.   *szPath=0;
    8 s# I9 [9 p0 B8 y3 Q
  142.   strcpy(szFull,szFullPath);7 a; v8 y0 N8 p, W% U
  143.   token=strtok(szFull,"\\/");
    , p9 ]! |' G+ [! i
  144.   inter=token;/ Q. y, _; |* U* o5 \; P$ D, H
  145.   while(token=strtok(NULL,"\\/"))! H% |# L+ M! g$ q
  146.   {; B, m+ n6 P. j; t0 D- _* \
  147.     strcat(szPath,inter);
    - T$ w+ d) \3 I, b$ r. L
  148.     strcat(szPath,"\");5 O+ w/ ~& u& D* f( e; w3 }
  149.     inter=token;
    : `$ O# q7 Z' \9 j2 T% G) k
  150.   }4 L3 N; R& q. v; ~0 j( I1 h
  151.   return strlen(szPath);+ G* X0 O1 _! J& U$ M! X* L: v
  152. }% l0 W9 ^4 _3 R( B, L

  153. 1 [4 \0 F9 h! D2 W: d- F1 w2 j( ~0 x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    . \; J9 {: d9 t
  155. {
    2 b2 y6 ?! [* M
  156.   DWORD attrib=GetFileAttributes(Target);
    / x! I+ ?7 M( J2 x$ Y  M
  157.   if(attrib!=-1), e# M: |3 W5 ]; H2 W) x0 s+ }% y
  158.   {
    # e4 ~: @4 \/ L! l" d$ I
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' E. F9 r1 u. `$ q/ S
  160.     {
    ) C# ^" D& I1 }  {$ G9 A/ ~$ }. ?
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);( A& M, i) W' O) b2 S2 l$ J
  162.       SetFileAttributes(Target,attrib);
    - H6 n8 Z. Z" {! R
  163.     }; \1 L" g) h5 t
  164.   }
    0 s$ [0 ^4 F7 J' O
  165.   CopyFile(Source,Target,Erase);
    1 c$ D. |5 ]  u7 u9 r: e; u
  166. }5 k8 `( y8 m% P, F4 r' r3 R

  167. , Z( _9 X- m7 t6 H/ g+ G9 V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...). T7 w, k9 t" W3 A8 M
  169. {$ l5 r5 |5 K  k, E1 E- ^( J* C
  170.      FILE *fp;7 Q* Z- A3 f$ p# K6 c$ e
  171.      char  szBuffer[8192];) Z$ l  b3 m3 k' R0 L& w+ Q
  172.   va_list  argptr;
    ' _7 I' S4 \/ T, W+ f. t1 I

  173. 4 M1 {0 X3 T/ D
  174.         va_start(argptr,message);
    ' |0 G4 L2 v% l, q! P
  175.         vsprintf(szBuffer,message,argptr);
    / c0 p+ }2 }3 {5 R8 m
  176.         va_end(argptr);
    8 ?3 t; V* J/ ^: J
  177.   fp=fopen(FileName,"a");
    ; e, m9 B3 p, j4 e  |3 C+ R
  178.   if(fp)
    2 h( H+ z. j: u! C$ e: S
  179.   {
    * J8 R5 y2 Q9 S+ a% ]) W& g
  180.     fprintf(fp,szBuffer);* U' e+ p4 a4 p" n7 F( n' J
  181.     fclose(fp);  U6 _5 J' T5 c" t( d9 Y
  182.           _flushall();7 @1 w9 W# g1 W- f9 s: V3 S: h& _
  183.   }
    . }+ B- Q2 V# u, p7 x% w
  184. }; x7 }$ i  M: n- _0 _5 v8 ^9 W

  185. ' B3 s3 z* _. A5 v# S/ `5 w* |) `
  186. BOOL CRevAppApp::Fclearf(char *FileName)' I5 e8 r" X3 o8 |3 h( w, |8 W
  187. {
    $ `, H* R" ?. J
  188.      FILE *fp;
    $ L/ B- i" u, k' Y, Q0 ?, H* Q
  189.     DWORD  attrib;5 k! O: \* z% R, D
  190.   attrib=GetFileAttributes(FileName);
    * e- w7 ~6 @1 s0 t* E( M
  191.   if(attrib!=-1)
    ; l) |; h2 ], ]% P% V8 u" N
  192.   {" W8 W9 j2 X/ K+ q4 h+ q/ K
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);7 }" {. E0 n3 q! t3 F
  194.     if(!SetFileAttributes(FileName,attrib))
    ' g- F; q4 L4 w( `& ]$ o
  195.     {# g. c3 h8 ^+ j* l0 [: o# O( T
  196.       return FALSE;% Z; o" x% s. b0 D2 A  a% ]
  197.     }
    0 [4 ?* t$ r. q* L
  198.   }
    # v% k# P2 k; ~$ I3 R: B
  199.   fp=fopen(FileName,"wb");$ P; U( i  k( B" ~
  200.   if(fp)
    ) g- E) B* @- O: [1 B
  201.   {) f! x. \% d3 ^$ z* p8 b
  202.     fclose(fp);
    + S: Z) Q# V+ Y; `
  203.   }' M8 c6 ~4 h$ c+ a5 d! p
  204.   return TRUE;
    2 n7 |: t( C: ^5 u0 W1 V& R
  205. }' z3 I9 T8 A& x3 |  s6 U9 l7 R
  206. - i3 d$ L, P1 \' @# ~6 L4 ~* C8 e
  207. BOOL CRevAppApp::UpdateLocalVersion(void)' u' n( {. g3 X6 t& s8 M. A8 L
  208. {
    8 @& z# P  I; \5 x, J& C
  209.   char filename[MAX_PATH];4 d" R, z  K2 U' W& y0 a4 u
  210.   LPUPDATEFILE file,olds;
    6 j4 U' m) Q/ \" N  _
  211.   std::map<int,CString>::iterator i;
    ; A) l/ Z3 I7 j* e/ F
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . g+ _2 _- Y4 P  A) x# X
  213.   std::list<CString>::iterator l;/ R1 E  {# H; z4 r7 b5 R6 J& i
  214. ( r! W3 n% T+ |
  215.   if(bFirstUpdate)
    5 M) N) c4 X: z/ q
  216.   {
    % U6 ?% A! e1 M  y7 U7 S# z
  217.     dwCurrFile=0;2 d1 f) g, n) o  f
  218.     bFirstUpdate=FALSE;. e) z! ^% B2 S
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). }& q' ]* X/ a& P% O
  220.     {  n$ ~9 N/ I0 f/ V# y' ]
  221.       dwTotalFiles=UpdateLocal.size();1 w; O- h" u7 L/ ]0 e
  222.       dwDownLoaded=0;: M9 N, Y2 n* g! L  B0 D3 Q( r
  223.       bSilentStep=FALSE;! W8 ?; b( O) N1 @! B- W/ N" E& s
  224.       bCompressed=TRUE;
    # Q4 }4 I; |5 d+ ~7 Z
  225.       strExtLocal.Empty();
    9 m6 k: s3 F# [; ~0 |, Q' k2 Q
  226.       strFullName=(*i).second;
    + e5 B4 }9 D* t  U+ D
  227.       dwProgramState=AP_CONNECT;5 b  X4 q4 U. o( K5 l7 h
  228.       return TRUE;
    " E, u. s8 c4 Q8 C/ q# d0 F, d
  229.     }2 a: L. G, r# q2 x" ]4 O
  230.   }
    . B, a) B7 j9 }( f$ X9 S: M
  231.   else if(bRestartUpdater==FALSE)# D$ V( {+ Y: G
  232.   {! g4 ]! Y. j0 v% V( b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    1 C# W- R. {/ A" W% G: t
  234.     {
    " }1 O: u1 }7 c9 U! E
  235.       file=(*p).second;& L/ @8 p5 c) i7 y$ G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())/ o* C4 H3 A# t
  237.       {
    1 q: M; g7 y# u  {5 E
  238.         olds=(*p).second;
    : ~4 u7 \- w; U1 H! o) a4 ~
  239.         olds->vers=file->vers;  |4 H7 S. w- P4 S* a9 @
  240.       }: I9 i' l% a+ L0 M9 _! r0 A& @
  241.       else
    ' q2 K6 y1 k& k3 V4 d
  242.       {  w; h9 Q& T) Z' d# r! h7 W" c
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; {1 A3 |8 O- K# l9 M2 B
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    " K  r# i6 Y. L: Z0 N; G% e
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));3 S+ i7 |+ f9 i1 R; y' L
  246.       }
    . F% D  c' H& |* Z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");" ~4 o5 G$ O* s/ D8 t
  248.       sprintf(filename,"(%s)",file->file);2 L  `( o9 B$ w8 v/ I7 G  i
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 T" ~% [3 a5 k3 L9 F5 r
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    6 M! Q: @2 p9 k: s& O
  251.     }, [/ S0 c8 D1 n2 ^% b- U4 P
  252.     dwCurrFile++;5 T. ~2 j9 [. ?$ U$ F7 i  ^
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) J4 `" ~& m* D% J& y3 X) [
  254.     {1 H, E0 S/ x7 r# }0 H
  255.       bSilentStep=FALSE;0 a7 ~* C. b! G4 q& v1 A; @+ e. E) c
  256.       bCompressed=TRUE;* L  H: r5 r! O: K, Y: `- [
  257.       strExtLocal.Empty();# F$ t5 o# Q; P1 L& h4 a. Q
  258.       strFullName=(*i).second;
    4 G( o/ ~8 {7 }5 X0 C' T+ l
  259.       dwProgramState=AP_CONNECT;
    ; N3 Z" }' v: i# T
  260.       return TRUE;
    5 ?6 h9 K, Z& _0 s5 L
  261.     }
    ) a  }: l" Q$ Q% Q9 X; V9 l; |
  262.     if(!bRestartUpdater)+ q% |  Q, n& V% w6 B- s
  263.     {
    5 H2 _; Q6 @  L  {7 C
  264.       int iCurrSize,iFileSize;
    5 D9 m! k+ O. c) Y, u, s) o
  265.       iCurrSize=0;& n4 ^4 g/ G3 v5 I) x& E6 W
  266.       iFileSize=UpdateList2.size();& c( N& S) h' ]. Y$ Y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");/ C5 C- g/ _% i0 f' _) j
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");8 R% c( E5 D- _+ d) V% f& b
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    9 D9 ?! V3 ?  w+ b
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. Y- j: j# r8 R# q* r4 B) g( O
  271.       Fclearf(".\\update.dat");
    4 z5 K& W0 Z8 ?- X! X, f+ H
  272.       Fprintf(".\\update.dat","Bloodyf\n");6 I4 p; B: P& Z  U2 k* N: ~
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / W9 Q( C* G3 f% d1 O0 i
  274.       {/ p5 ?6 G- S/ w0 A* K/ h. P) C. y1 j
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())* B. g$ }1 U2 G# ?- a
  276.         {
    ! l! ?5 G! z4 z  |
  277.           file=(*p).second;
    # v5 n4 ^. Z" a8 M6 F
  278.           sprintf(filename,"(%s)",file->file);- y! }. Q- R+ e; r7 \
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ( y7 {4 d8 h; ~) S* F# T7 r
  280.           iCurrSize++;/ y; Y  ^& ^# O) L) N
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    & a2 v/ x3 i. {
  282.         }9 N6 ?+ y- M$ C. t) m
  283.       }8 D: Z# K; ^. V6 t, B# `6 y
  284.       unlink(".\\update.txt");
    9 g+ \1 _- ?4 x- V1 c# Q+ R% x, k
  285.       unlink(".\\update.tmp");
    * p, a* X8 [' T7 c
  286.       Fclearf(".\\checkversion.dat");
    * N8 C# r! e& Z5 m& ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);  N5 a( M( r) i; s" n3 w$ {' a, [! F) a) N
  288.       if(UpdateLocal.size())
    * s7 b0 r6 B& K" {, \. t4 q
  289.       {
    9 |' s1 p, ^) D; C
  290.         UpdateLocal.clear();
    7 f( d8 N' @( N5 `0 Q6 D
  291.       }! I1 ~, ?3 i. |# g) p* k0 k  s
  292.       if(UpdateFile3.size())
    ; `2 l  ^' _/ g; r+ V
  293.       {
    % N: o: Q% t2 W
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  z1 d& t1 {/ A6 N. X4 q" [! Q" u5 K
  295.         {
    $ \: v6 X7 l, v
  296.           file=(*p).second;% O! A/ E' y; t
  297.           free(file);$ O$ D+ [0 r% L" U" D, h7 _
  298.         }
    ; s0 Z. n, B% r/ U3 X5 T0 \
  299.         UpdateFile3.clear();# |4 h2 K0 z. p5 \) L7 A
  300.         UpdateList3.clear();
    4 M8 y5 v% j4 F+ u/ y
  301.       }
    # o  C# |9 {* v0 h
  302.       if(UpdateFile2.size())4 k  U  O+ x2 a' X
  303.       {$ ?6 `6 k0 r3 {7 J6 S
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! s  q2 z9 ]% k; z
  305.         {
    8 Z% o( G) l. N
  306.           file=(*p).second;
    1 }- Q- U# p3 B
  307.           free(file);
    6 B- E  c: e- m' {7 \+ E* E% U8 Z
  308.         }
    ( K& y' o- X- O0 u& @
  309.         UpdateFile2.clear();/ \0 g! |5 c7 I- v
  310.         UpdateList2.clear();; J0 l. g$ ]3 [; \2 p5 z" Z
  311.       }; J4 m5 X9 _" G. A
  312.       if(UpdateFile1.size())
    ' E7 m1 @0 {+ h( `. p
  313.       {& F5 b) q1 ?! d$ M8 M8 e; `, m
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' {! [% E9 L& T. }0 i
  315.         {' N- h' z: c/ P: M. f9 e
  316.           file=(*p).second;
    # |+ j4 I8 z( x: w: O
  317.           free(file);: _( h; W; R; U" ]( H
  318.         }$ Y7 `$ J( r& M% [& k7 B
  319.         UpdateFile1.clear();9 B$ F3 R8 s7 A/ A, M9 {% P& B$ ^
  320.         UpdateList1.clear();2 y4 s* K, M1 s
  321.       }
    $ Y7 p6 d: y) k% Y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));% i& V& k" F9 [" g- v( ~. U2 X& ]
  323.     }0 p8 X! O8 P, e
  324.   }  Q% `# {$ L) }9 s& a
  325.   return FALSE;
    * @3 b" f" G, M1 i0 W
  326. }/ _( A' ~6 E% |" A! l0 n5 O

  327. . F& h6 B3 F  z6 r1 R
  328. void CRevAppApp::ClearAll(void)
    ( L: H) `+ H' s( N/ J  q3 j/ R
  329. {; J# i7 S! ~% Q
  330.   LPUPDATEFILE file;- \# R+ A2 c5 r3 [& C! u; b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    + {8 C! y5 `+ V  h

  332. " a" p' ]) C& e1 T) V
  333.   if(UpdateLocal.size())9 g1 s4 ]3 ]& F& l8 l& H: g
  334.   {  h6 F( j( c- M: H1 R
  335.     UpdateLocal.clear();
    " @# c, \$ \* e
  336.   }! ~9 g1 B2 _& k# L, K, o: [
  337.   if(UpdateFile3.size())' n6 z3 U) t8 x9 g
  338.   {- E% K2 r' A% q6 L
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- \" C$ ~/ i3 a
  340.     {* @# R& t/ ]3 D2 {! L
  341.       file=(*p).second;
    ; S; Q) n8 `% u! S
  342.       free(file);
      P9 h- }* C( ]; j$ [. T, b% ~
  343.     }
    9 x4 o" \1 q% W# A4 u
  344.     UpdateFile3.clear();
    9 [/ n3 `9 B) U8 N: ]5 O
  345.     UpdateList3.clear();6 o/ b+ _% K0 g1 K# }
  346.   }) q' w$ v' F2 k# g* I
  347.   if(UpdateFile2.size())% M1 m0 N- R3 v3 M5 C. x" {
  348.   {; g7 Q6 z7 n5 X/ s/ G
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! k1 c/ m! v$ U2 n+ ~* B" m$ P' Q
  350.     {
    , J3 g" t0 C5 m, T" k
  351.       file=(*p).second;
    / r* X  I: m; P) t5 @
  352.       free(file);$ _; m5 {8 z2 ~7 Q5 q: `" l
  353.     }8 I7 A! d1 E" k' r+ ?. o
  354.     UpdateFile2.clear();
    & F# E, c. s7 }; _/ q
  355.     UpdateList2.clear();
    ) i( X/ k$ }/ T% m2 h8 a& U
  356.   }8 p5 |6 ?+ m3 }6 ^! q
  357.   if(UpdateFile1.size())
    ) l+ s8 V! ]3 Y2 B* D
  358.   {" y: [# b/ N" ^0 \* _
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' ]3 E0 P& v9 r* j  o7 S! v( p
  360.     {
    1 g! }* x0 P! h9 |9 y
  361.       file=(*p).second;1 R5 E/ V6 K7 H
  362.       free(file);
    . v/ p2 @0 ?7 [, {6 _2 D
  363.     }
    - f  N$ Y8 g' u1 W5 z
  364.     UpdateFile1.clear();: G# u5 Z' Z4 a0 l+ |. r
  365.     UpdateList1.clear();: J8 V! C  K0 I2 C- G% U
  366.   }
    8 _1 y2 S  B4 I) A0 S% E: C: ^
  367. }  , [+ u6 p! G4 S- F1 }
  368.   
    2 e  i( V* \- b0 W
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    * n8 `0 ?. l" L& f# L4 L% |/ Q
  370. {: F6 c3 f/ T/ U8 E) A. o$ c
  371.   int c;: t* _" u" O8 Q* Q6 G) N
  372.   LPUPDATEFILE file1,file2;( j, g8 @1 S1 @& t
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ' f5 h$ }' q: i! D
  374.   std::list<CString>::iterator l;1 t, C& b% Y4 g$ F0 D: N$ z  d$ y4 Q

  375. 8 C- o: ^6 S0 d/ b% y* Y( E
  376.   UpdateLocal.clear();: g4 m9 R5 U+ r6 o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);# l1 h6 V. D+ h5 |: V5 W- A" P
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);! c- I5 P2 l0 H9 F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);6 m/ r9 b/ ~1 x9 R2 o% L8 F" }
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
      f3 F+ R1 ]+ a) e
  381.   if(UpdateFile3.size())
    ; E. t' H4 j. K3 ~& l" t* t
  382.   {
    . I; z# t4 V+ }2 o- Z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    8 P1 T( x6 o+ n; b7 e
  384.     {0 E. C* r; H+ i0 ]/ A3 W
  385.       file2=(LPUPDATEFILE)(*i).second;* Y9 h5 X, G/ d+ ~% x
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    & q$ x1 M; `8 f) v5 E! [7 Y3 f3 f1 L
  387.       {6 {& D  e. _; n+ f6 h8 _. b& Q5 _
  388.         file1=(LPUPDATEFILE)(*p).second;+ D2 c8 b& R+ c! w. s% P# T
  389.         file1->vers=file2->vers;! n; r2 g2 K  {; g4 [( [
  390.       }
    # f! g' B- c' K' Y% @
  391.       else) Y3 X4 m9 c% n# ^( W
  392.       {
    % d& \" W4 y& O" x4 @- g5 ~
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 t7 a& R- n8 V! }& }5 y' E1 c+ _
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 W7 j& K6 B! h% }% V9 z
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));* v' _+ z# o& {8 i' i6 d: c
  396.       }7 @7 @# R7 h' l& S/ @$ y& m- X
  397.     }% v5 E& W( _4 G6 g
  398.   }
    9 c: m  `% t7 ~2 T3 ?6 i3 ~$ `
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)) j( p5 {: i# D. e# ?
  400.   {
    : b: S7 L) p8 L, A
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! w$ ~% p( j' y
  402.     {; g' }! a8 e8 K  b# K' n7 E5 a+ e
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 H! w/ a( J3 e1 j
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " q  |7 @4 S) X" ~. j% q
  405.       {
    ; ?+ Q- c. |4 ~+ m/ C
  406.         file1=(LPUPDATEFILE)(*p).second;  J( r4 T3 ?+ W3 }
  407.         if(file1->vers!=file2->vers)9 ?) E0 _  b# ]" F
  408.         {
    ! n  M  x9 q5 R0 y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 G- M4 P* E: l! X
  410.           c++;
    6 ?+ g% \2 v9 i, `% c6 }. ~
  411.         }
    % P) q, F5 H6 N2 g; R+ p
  412.       }/ k* B0 ?; z% z5 S" n) m
  413.       else. l4 A8 F% b4 U2 U8 E: S# @( j1 T
  414.       {# h4 w; V% s6 Y5 Z; A
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* @% L, K5 q( [) l" `
  416.         c++;
    4 W" K+ n" E2 c8 n8 |1 R: T
  417.       }$ I1 j; [7 g; ~/ z/ c* h
  418.     }
    : B2 D* z$ p+ N# Z8 ^9 [
  419.   }) ]3 c  ^- r0 J- c
  420.   unlink(".\\DownLoad\\update.txt");
    ! [1 q4 d" F* X# e% @
  421.   if(UpdateLocal.size()) return TRUE;  J4 @' e1 N) ]- j% R% e$ `
  422.   else                   return FALSE;
    3 t' I6 I6 ]& C
  423. }) }6 v: |) [3 O8 _; O9 _( X; Y
  424. & t, }. b4 i+ c* _4 M/ E* D0 b
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"8 |* r# z8 Z/ j
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * H2 {; o& S" J" X6 v
  427. + z1 v- o) M5 `# \
  428. 4 t/ `* n3 m- L6 s8 g

  429. 3 \; ~! F2 F2 v) y& u9 M7 @4 Z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)- ]- x# `- k! x# P+ T8 [
  431. {7 ~" u" X' b- q! f. o
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    5 O1 F( c! G# U8 B) i' j
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( [  u. a, c; t( C3 b3 N0 z  z
  434.   {- e' `0 t  i0 N/ T$ I6 T
  435.     char szLanguage[50];/ L$ Z- x5 ^) l, J/ f  w" Z8 _
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 C  A5 J9 |/ V6 Y1 S6 y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 ^8 g7 P5 n$ n4 E3 `! k8 a
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! w1 [3 g) L+ i
  439.     else                                   m_iLanguage=ENGLISH;3 V  j7 K) P! A% C
  440.     char szRegister[100];
    + z* u! Q3 v5 i; \* j$ a
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" h/ r) l9 ]+ W6 X9 d( I6 U
  442.     strRegsName=szRegister;
    4 G+ S& U7 w& j2 u. \/ E& R6 c( J% S
  443.     char szPatchURL[100];
    ' [2 w+ R. r4 T/ q6 K- z
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 `, Z7 v2 [, }& e4 ^* i- V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" ~! j# O: \6 Z$ @  w6 }
  446.   }
    9 \4 h, v5 r$ i. @4 G' p+ \
  447.   else5 a% R& c9 q' D1 ]' C- ]
  448.   {
    6 _' f) T/ F: o% D
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* h, R" C2 r& e; S$ G2 w* E4 Q
  450.     strRegsName=DEFAULT_REG_URL;6 q2 D2 a" c; i# e) v, d4 H  y+ M$ P
  451.   }
    + V8 V) Z4 \0 G. L) B
  452.   if(GetFileAttributes("hosts.ini")!=-1). C0 V$ p8 t4 O6 H
  453.   {
    ) ]# V+ Z) K6 g( Q2 T( G+ E# Q
  454.     char szIP[50];  c9 ]& ]9 H1 k9 D: s7 C' n
  455.     char szDIR[300];9 w' G( H3 Y& a  k! ]; C
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    " [2 Z, t# g. t7 B% m( D
  457.     {
    , o. y2 k8 J; b. o1 _/ n/ E
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    4 d, Q! a7 K! X4 ?
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    / y' Z# T( q+ c; Q+ b2 h; v. c
  460.       strHostName=szIP;- n6 e5 G7 K, f" T: u
  461.       strHostPath.Format("/%s",szDIR);0 l: R- c" M5 E! K' E+ j- M
  462.     }+ e/ ^9 u' J: J" b; X4 q
  463.     else! z* i+ `/ M) i1 o9 m8 ~, F
  464.     {: E+ y1 n" v( ~! v3 q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- F' X5 o# T: I0 _& e
  466.       {
    ( f) N" g* j1 q( ^4 M0 L
  467.         char szLanguage[50];
    # K# e. Z" p$ _, J7 [2 d
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! [% r  R; e6 j; f6 ~/ \
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' z* V% ?+ L; R6 T  l0 m  a
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;( e5 j# ^/ z% @9 g& z1 m( T- r
  471.         else                                   m_iLanguage=ENGLISH;/ V5 P3 T: I$ d8 a4 H
  472.         char szRegister[100];8 o. s- ^' C, j' @% L: |
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / J( l. o& H* w1 K" [3 t* R
  474.         strRegsName=szRegister;, R2 R5 z) d$ F8 N, z
  475.         char szPatchURL[100];
    7 V. Q1 \) r5 [8 w$ h+ a/ ]
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! s5 t# C# K. i& H; [. H
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 ^. G" T. s! U$ @6 H3 k
  478.       }5 F% Q, L9 P$ R. p/ `" k' M2 b2 T# e# I
  479.       else" X/ S5 D4 _( V- U5 Z5 d
  480.       {
    2 l! S; {( b/ s6 Y5 O; [6 |
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & U* z  ?& W" _& H
  482.         strRegsName=DEFAULT_REG_URL;" f4 t3 j% ]  m3 O7 b2 \2 X
  483.       }
    0 f" s* u5 w+ ~  s
  484.     }
    4 E9 _0 F% Y8 \7 p  h9 {  h& z
  485.   }
    . M4 }* ^% m# p- `7 y
  486.   return true;
    ' r, e7 E6 x6 O: X2 u% z
  487. }
    5 `4 B$ \# N2 W6 w+ X( y

  488. 9 |( e0 X# k( z3 U# s
  489. #include ".\ZLib\unzip.h": h, F# ^7 X( C7 c
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    * y4 y4 t+ e4 h' T1 C( p  y
  491. /////////////////////////////////////////////////////////////////////////////$ y* I6 _4 x1 X3 C0 L+ a" ~% E( G
  492. // CRevAppApp initialization' g/ Y3 ~8 p6 g! N2 q. ?0 C3 z
  493. ' L, p% d! {, @/ b) Q8 ]
  494. BOOL CRevAppApp::InitInstance()
    , q2 \# U4 A- p' h! p+ t5 c: d
  495. {: [) t7 p  v/ G5 B
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];! U  ]% V* _) v' R
  497. ( m: t. y- T$ g, Q- {+ U% w2 {
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);3 y. Z' ?: u9 R  C, M
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)), v0 t: a2 ^7 u& G( H
  500.   {( \  T+ }9 l8 d8 i; s
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 H/ ]9 }( f0 M- k
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    8 q2 _, s% S5 C: z4 g5 K7 ^# ^5 ?
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    7 M+ @& l* L. N1 }& V
  504.     {% }9 c) R% P- g/ A: z) L
  505.       strcpy(szPath,szPathTarget);2 ]: b: h" D/ k7 j* Y, N5 T3 t
  506.       SetCurrentDirectory(szPath);
    3 P5 S" p- d6 ^% A7 P, I( r
  507.     }4 \8 Z8 h0 C3 |, K" v; @1 E
  508.   }( |9 }$ P3 f! S4 S9 F
  509. #ifdef _DEBUG' P6 j3 m3 E9 R$ K) g! s1 j/ Z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ W/ e4 b: H- ~' m
  511. #else
      i3 n* u. L8 r% t
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 B% {7 F1 s8 z* O
  513. #endif9 @# I. J# g, Z+ }
  514.   {
    ( I1 H" q5 \- v: }  B
  515.     char tempFileName[MAX_PATH];
    4 a' H! t; F% c5 L* p! Q& a% [
  516.     strcpy(tempFileName,szPathSource);
    ) ~+ r% {& D& C, x7 A% x* C3 }" a
  517.     tempFileName[strlen(szPathSource)-12]=0;
    " ~  J' |8 v: H& p
  518.     strcat(tempFileName,"\\$CSUpdate.exe");! f$ {% V2 p, h, t
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 E1 m; p# u; L6 l+ F; O) }7 P
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ( b; j; H; g& N4 A) s6 m6 K
  521.     return TRUE;- i8 B- N7 `8 E, U
  522.   }
    ! B  u( P+ U$ ?- D2 K, A3 w
  523.   // Nuke 0118: Delete run.exe
    " v' }: e9 `* W
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    + y5 L/ ~6 p. y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");. p% y2 `( `. \6 G  f
  526.   if(!ReadCfgFile("Config.ini"))( p, @6 z" v1 y; ?
  527.   {
    9 r7 q. u8 H+ ]: J9 D+ P
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);' |. z' Q& k/ ~5 T; r; W+ s
  529.     return TRUE;
    ) h! r) T" N4 L& i
  530.   }8 {2 w" Y" V4 g8 N
  531.   HANDLE mutex;- F) h4 l5 K8 ]6 E
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    & v. W) C$ u. W5 c- I; C
  533.   {# Q' g8 K1 o; c. ?, r) b  d# p
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 ~4 s( Q+ h' V5 c+ g, a3 y9 T' U
  535.     {
    7 c) b+ h' D. ~$ u6 j8 W1 x
  536.       CloseHandle(mutex);( Z9 O/ n: c" y% d# Z6 ]$ ~* R
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);1 {# R0 K2 K5 E0 B  B: C& n# K
  538.       return TRUE;; e& N/ w% e& \! C1 h& C0 l3 m$ d
  539.     }0 |0 [' a% H6 X; A2 a* {% a! S; h' Q. o
  540.   }  * n4 ]6 y+ m. W! Y
  541.   CloseHandle(mutex);
    / ]6 U' C3 y: m/ e& \

  542. 0 E2 ^- m- V; E) u- J* ^
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);# f; J5 f. J3 @+ D  F

  544. 8 N" c* _) h4 A
  545.         AfxEnableControlContainer();
    ) @3 ]' P2 @$ [7 c! n( |

  546. 7 n+ H& G3 N7 j; e. c
  547.   bCanUpdate=FALSE;
      C& W# }2 J# M- D5 h' S9 {
  548.   dwStartUpSteps=1;
    : c  i7 A6 g  X0 m( \$ A0 b5 @
  549.   dwProgramState=AP_NOTHING;
    & z1 `6 b) f3 J$ n) g) f: E& l5 a
  550. ) R; t6 k+ @8 l% B
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);2 l7 V- q2 o7 B9 b/ b2 @

  552. + j: j. S, I. g+ p+ S
  553.         // Standard initialization
    4 L9 i" m( d8 D  }$ K
  554.         // If you are not using these features and wish to reduce the size
    ) L/ }0 d, ~" `5 v5 L5 N$ ~
  555.         //  of your final executable, you should remove from the following! o0 L4 p( k; {9 [8 }
  556.         //  the specific initialization routines you do not need./ Y9 r! ^( r& s& o" M4 n

  557. 9 ~& M" j( v7 N( }
  558. #ifdef _AFXDLL
    . d5 P/ }$ X2 s: u6 e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    - a1 `4 B% q. C$ ~* c1 g& F3 d
  560. #else
    : b6 W: j3 K. S1 p
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 f+ C4 p! A0 P( B8 Q, ]; J
  562. #endif4 N7 ?# R. r2 W7 V
  563. + B9 ^0 u+ w- q. {0 B! h/ K2 z1 h- j
  564.   dlg=new CRevAppDlg;  O" g6 \7 ?( A5 h  V  V
  565.   dlg->Create(IDD_REVAPP_DIALOG);' P" t5 `; {( d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);1 S. o& L/ ?4 q. Y+ S
  567.   m_pMainWnd=dlg;/ b3 a& }, ^! _; ~0 h

  568. ( j( J: U1 X" N$ j: s, t  h
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);% f+ Z3 P  W8 U9 c- |/ \( o
  570. ! N2 w& N1 E6 E; P- F. ]
  571. //  GdiplusStartupInput gdiplusStartupInput;
    % ]/ O- U7 f% r$ n6 L( I6 @( M
  572. //  ULONG_PTR gdiplusToken;
    $ [; T5 w3 J/ {6 `7 f: h
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! S; g- D# s0 R

  574. 7 W) D$ |& E& [/ c' K8 p  C
  575. //        CRevAppDlg dlg;
    - {) h4 ^  x# }; \$ c' v8 A1 P
  576. //        int nResponse = dlg.DoModal();
    ) ?( a7 j2 l2 S. }2 B, c
  577. //        if (nResponse == IDOK)
    8 j9 F0 g1 ~) u+ ]1 Y: x
  578. //        {
    1 @* v; h/ O, j; _
  579. //                // TODO: Place code here to handle when the dialog is
    ) W! f4 {- P/ N
  580. //                //  dismissed with OK
    * T2 `* M& w/ P, C, v
  581. //        }
    # Q( g- i* z' F  \7 q
  582. //        else if (nResponse == IDCANCEL)
    5 s! p5 k7 s0 e, [; Z- K( D
  583. //        {8 M* O  B1 }: A, j1 N1 F1 S9 y
  584. //                // TODO: Place code here to handle when the dialog is
    : E) `* O. ], S4 S) q
  585. //                //  dismissed with Cancel- ]. T' B. l, y6 r7 }8 T
  586. //        }( A' `& [( B+ v+ J  R( y

  587. * [: l8 ~8 |7 B, e4 L2 O! F
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    / Q9 }2 P$ W+ \7 c
  589.         //  application, rather than start the application's message pump.0 d" ]+ M5 y. ~$ N7 ?0 I5 U
  590.         return TRUE;
    " h/ P9 u0 a; ?5 B, x# e
  591. }( Z! o& Y3 y4 ~) M* K7 Z
  592. $ q  e) p8 V1 C3 t
  593. char *CRevAppApp::strtok3(char *pSource,char *token)! d5 e' d$ r" h- e
  594. {* s5 G5 f9 n. h5 |& x
  595.   int i;
    + S" m7 K- j) [  h8 K; L' n* |" n
  596.   char *szRet;: F: B+ n( Y& @; q

  597. - S# o: U7 ^4 K4 g5 a) F
  598.   if(pSource) { itoken=0; sztoken=pSource; }; F$ E( o& X0 U8 \) m( s: N2 [7 i& }) p
  599.   if(sztoken)
    8 i0 r8 b% G9 ^. @
  600.   {
    ! \. O" J! d7 c! p' F8 K4 ]
  601.     szRet=&sztoken[itoken];. K" b% n2 w3 q2 ?2 p
  602.     while(sztoken[itoken])" Z/ y$ P' k: @$ H* V
  603.     {
    5 T  C2 g# m& f3 a' K! ~3 }2 \
  604.       for(i=0;i<(int)strlen(token);i++)  T( h/ d9 X( v" W
  605.       {. ?% M! T# y+ V& W& [5 i
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    : I0 V$ h' {3 I
  607.         {8 q9 I2 z+ C2 l8 M
  608.           sztoken[itoken++]=0;
    6 N! q0 x! D: K/ \
  609.           sztoken[itoken++]=0;
    ; w" d  \8 R5 |/ ]" _! _. H
  610.           return szRet;
    2 ^$ j8 _" n6 X: `7 H- ]# N& p
  611.         }
    # X0 U0 B/ @0 Z; R7 o
  612.       }
    * K3 a) d$ _( h% [1 k
  613.       itoken++;
    7 d+ h4 a! X5 T( ~( h
  614.     }
    * }0 C) T# |8 b+ D* w
  615.   }4 Z9 R: r- [/ r+ M- Y" F
  616.   return NULL;. ~) T/ d4 \. p, d- @
  617. }
    1 G0 c% F6 J$ ]# G9 D5 A
  618. ( V. m4 E7 C, N. b
  619. void ProcessProc(long Total,long Current)
    4 E' e: F# a! D+ U& @* M8 U7 M, |
  620. {3 c/ t, L/ @. v" ^0 g$ U; b) @
  621.         MSG msg;
    - ~8 y6 z+ O! ?7 L
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);) _/ s5 i7 {' S
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));3 L. p& U- l9 i6 ]! G
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    , z) y# h! d. ]! m' E
  625.         {8 h. J* B8 J& p4 N: \
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ' u8 t1 {* k$ D8 Q" O, @$ H
  627.                 {1 y4 ^* R  J# R, z7 h
  628.                         return;
    9 U5 e, A: k8 ?# [  b/ I" n+ W5 y0 L
  629.                 }
    , `. F, a" y5 F0 H! P
  630.                 TranslateMessage(&msg);
    / C1 X. k  V# U. J5 N4 {# W& o
  631.                 DispatchMessage(&msg);
    / M6 J* `3 x; j7 O7 R, V; I2 \
  632.         }       
    6 c% Z  ~$ j5 J' x8 ?
  633. }" k; F7 g. z  l4 W; S5 g

  634. / \/ t1 u0 n8 E6 Z
  635. BOOL bFirstChar=TRUE;3 h! x: M$ G% m' w) J2 X! M
  636. 8 m5 f/ A4 n+ z& u: I* P2 ]
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    6 x* Q9 l' j; M1 |9 {0 u
  638. {
    5 q. D4 ?2 K; \8 l7 S6 {
  639.         // TODO: Add your specialized code here and/or call the base class
    ! J$ Q; M9 b& r0 X+ `+ n
  640.   switch(dwProgramState)
    ( n. \* x' }% B: x
  641.   {8 _1 U7 v$ B6 B: f! Z
  642.   case AP_NOTHING:
    5 j* B/ i8 b. C" n$ c6 Q
  643.     switch(dwStartUpSteps)% s1 s$ W1 e7 }& X2 |& D: l0 }5 J
  644.     {, t7 H6 D* r0 W, @  i4 S% u: }+ k) G9 N
  645.     case 1:5 N3 E! l6 j& g0 h" }
  646.       {
    % c8 J' ]) l. s; ~
  647.         int i;
      F% y: s7 j+ J( p) S5 O! g& R
  648.         CDC *pCDC=dlg->GetDC();& L) I0 S$ O$ S, Y5 K$ |
  649.         HDC hdcwnd=pCDC->m_hDC;1 t% i) c, P7 H# j
  650. //        Graphics graphics(hdcwnd);$ v1 K# U2 P! Y. k+ M
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");  }0 x6 B+ Y& \* c; e. B; u
  652. //        INT iWidth=bitmap.GetWidth();4 [$ \( n# C/ C
  653. //        INT iHeight=bitmap.GetHeight();
    - T6 G2 b2 W6 E( L, o- s
  654. //        Color color,colorTemp;/ J0 o# t& A1 V  l
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    , Y8 v; f  L. n6 f  y+ W
  656. //        {; @5 b! B8 N! s  v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    8 U0 }4 {7 @: c* Z
  658. //          {
      K5 X" W% i5 t- e0 R7 B5 J
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    5 T' R/ \$ d' n" _# F& d1 Q2 n
  660. //            colorTemp.SetValue(color.MakeARGB(  o2 d( r% R/ G, s* Y
  661. //              (BYTE)(255*iColumn/iWidth),; P( ?. Z$ I7 G
  662. //              color.GetRed(),
    , S9 ]% y4 F: F; L
  663. //              color.GetGreen(),$ W% h+ e( K& a( T) j6 F
  664. //              color.GetBlue()));7 k, s( C$ r! ]) u; M
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 s/ s; E' X6 x* w
  666. //          }
    7 T7 T! X0 ^  u, b: Q/ k  |" h
  667. //        }* a3 S2 {5 H$ t4 s
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);" T" D8 o! U1 N4 m, c  \
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 b- t* I! h% E3 ~" n8 O
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
      f2 L; [/ e* X  ^
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ U) B. Z! @. I- v
  672.         for(i=0;i<240;i+=8)
    ' i) y' s8 M* _9 f3 \
  673.         {8 }! E/ Q" o% F* T2 R
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 }# [- w+ I/ ]& n% r+ P
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ D) D, U: ]1 `( T: F) F
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      z: V; L8 z4 b! r
  677.           Sleep(33);0 B+ X! t1 X  w8 B  @6 @
  678.         }
    : R9 P3 ^2 r$ c8 Y. X! @
  679.         Sleep(1000);7 G, i- g* q/ |
  680.         for(i=240;i>0;i-=8)" f4 Y1 P  L& g& r  m& ]
  681.         {) d1 V! Q. N/ y( ~  |% F7 L
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # W+ H3 n0 n4 u7 K  S8 t
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! e" ~% y9 l8 P7 G
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % H0 S( E) J+ f+ u
  685.           Sleep(33);
    . b# }! n# J0 s" y/ z0 Q
  686.         }: L5 {/ R$ o; B) n# B- q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    2 ^7 ?/ k& S- L
  688.         dlg->ReleaseDC(pCDC);. s3 ^- z% {* x& a3 o" m
  689.         DeleteDC(hdctar);4 K1 J7 m" K4 a' C; k
  690.         DeleteDC(hdcsrc);
    0 L4 e# E6 G2 T& a, I  T* _
  691.         DeleteDC(hdcorg);9 u7 J+ V- N& }! G3 E- S  b0 w
  692.       }
    ) u2 r( p2 ~$ }
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    2 I% f% `: j3 j& J) N
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");: L, O" c* X4 w5 z7 z& E0 I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");0 z8 F8 ^- \; {  T% N+ P  X
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    5 }) L/ w* [0 f2 S
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 O) C  I! I) Q+ J& f
  698.       if(!Dn.Connected())7 f  b8 P; F$ \( s- v
  699.       {- g4 R' L  e5 C6 d. p; r; i6 k9 E
  700.         dwTotalFiles=1;
    , F2 ~- s2 b7 r$ p& b7 `% s) X
  701.         dwDownLoaded=0;" o  I7 ]' P, o* o2 H8 P, ~
  702.         bSilentStep=TRUE;
    ( M$ B- ~# p5 L/ c3 o* ]
  703.         bCompressed=FALSE;
    ( ]4 h6 Z. y1 V/ J
  704.         strExtLocal.Empty();
    ) P/ F' o, K# |- u6 M
  705.         strFullName="readme.txt";. Z2 ?9 e: P0 |/ E* T2 @6 W6 U! e
  706.         dwProgramState=AP_CONNECT;4 t  [: O7 }5 @3 j; T( ?
  707.       }# {2 p3 W6 n* W; h
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    : t3 L1 W; w6 _* m% i
  709.       dwStartUpSteps=2;4 E3 G3 j1 H2 |- H/ S; z
  710.       break;8 W6 C/ U- v) U" U  U
  711.     case 2:
    ' v  g! d8 ]5 R0 r6 d  M0 Z
  712.       {
    8 |, U; K  [8 k# o2 N9 T/ y
  713.         int iEOF;) N2 N  H) R; a$ D( s  M& A
  714.         FILE *fp;
    2 \5 L% i' a# h! @' M( S* V
  715.         char szString[512];
    8 c/ V% t& A. A
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");/ o: {" _1 F: t' p3 J$ Z
  717.         if(fp)! I, V3 }& s/ g# n7 f
  718.         {9 k9 f) I" I5 d5 N
  719.           do
    2 k3 j! x) g+ O3 y3 c4 y  x* h
  720.           {
    ( f/ M, y' Y1 K& h
  721.             iEOF=fscanf(fp,"%s",szString);
    9 Y) Q0 n* k" K- a) X( e. g: E$ _/ R2 S( }
  722.             if(strlen(szString))* A% H* \1 U' u# ?  O
  723.             {
    ) `) h  {& z7 V2 E! c
  724.               if(bFirstChar)2 v: m3 @- I9 M7 n; ?( @, b
  725.               {3 e4 x  [% P( o# Q9 E: P7 z
  726.                 bFirstChar=FALSE;8 s3 q% `0 D6 }/ r$ i6 G7 {
  727.                 bConnectIsBig5=FALSE;, r% h# R% C7 V: ^' I# ^/ T* E
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;6 y2 L6 n5 b- o, N
  729.               }
    # r$ m% g" r2 B, Y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    , M' W# H) M4 q& h: c
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    * p4 r, P( P" p2 T8 P/ ~- J
  732.               dlg->m_ListText.AddString(szString);
    ( R0 n$ m% Y9 @
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 ?/ n' M9 [( \8 o
  734.               *szString=0;2 z; ~8 Q8 H. t# F4 W0 \2 U
  735.             }3 s( j% E7 k; R
  736.           } while(iEOF!=EOF);
    9 V8 b( Z$ Q4 _
  737.           fclose(fp);
    # F4 ^# V1 G( ^* F
  738.           unlink(".\\DownLoad\\readme.txt");
    2 \/ d) w  p% c
  739.           dwStartUpSteps=3;
    0 b) V) g( x4 K" l2 e
  740.         }
    $ Z# \% i) i- b# R) w" r
  741.       }
    5 b5 ^# @+ f1 _
  742.       break;
    9 _+ W9 U, {) H* n
  743.     case 3:
    5 I( r( p5 W" u2 [7 [2 f4 z$ V
  744.       if(!Dn.Connected())7 i& ]+ y/ m; W$ ~( E/ s
  745.       {
    7 V' G  K8 N9 U* v- c$ G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  c) ?# O" ]1 e( S
  747.         dwTotalFiles=1;* s# Q# i7 ~, S1 G
  748.         dwDownLoaded=0;
    8 L, l8 m% s% x* ]0 Q
  749.         bSilentStep=TRUE;4 L' ~) s4 I4 g  K7 n9 K
  750.         bCompressed=FALSE;
    , W' r) y9 Y2 ~  Z$ B
  751.         strExtLocal.Empty();
    4 i! }7 n' o% {- m2 ]
  752.         strFullName="checkversion.txt";
    6 x* r% H# m# V- q9 r0 Q  ?
  753.         dwProgramState=AP_CONNECT;
    * n( |4 o9 b9 A$ {
  754.       }# v5 J1 m' A! m0 p) X( i2 |+ n( b7 y
  755.       dwStartUpSteps=4;
    + l8 B2 ]' @( C: E' i0 ?- C( {
  756.       break;/ A3 @! E4 W* }# ]
  757.     case 4:
    ) b1 v: P% F7 M! t$ z
  758.       {
    7 g6 }6 N1 T$ }7 R( E5 l5 A
  759.         FILE *fp;
    ' X5 J) H3 z9 J1 J" L
  760.         char szString1[128];
    ( t- e8 d; I; ], |& G
  761.         char szString2[128];  l5 V$ O2 F" W3 n+ C
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");* b6 y; ~, U, @  w" [, L1 w
  763.         if(fp)
    4 B% `1 a! L9 d. M/ b: ^3 t  v8 q
  764.         {9 d9 q+ j; E* }$ ^9 x- C
  765.           fscanf(fp,"%s",szString1);
    1 a7 C- Q# _% R$ M  x0 }$ C
  766.           fclose(fp);1 J$ j& Q& r- s$ \' g9 p
  767.           fCheckVersion=atof(szString1);& H) E6 n' i& `' K- P9 k
  768.           fp=fopen(".\\checkversion.dat","r");' ]  B6 M9 D% q
  769.           if(fp)9 f+ I/ f* A" x( u( F
  770.           {0 l' [9 F% |' `
  771.             fscanf(fp,"%s",szString2);
    % f! Q' N% P4 H9 E, ~
  772.             fclose(fp);
    : [3 ?) {5 ?, [+ X, K
  773.             if(atof(szString1)!=atof(szString2))
    9 B! b' G1 i! ]* T! B
  774.             {
    , W! d4 o2 O  D  ?6 P
  775.               if(!Dn.Connected())
    " N9 c. I/ {2 X" p8 [% _
  776.               {" G- U7 ?) O9 l4 F5 h! ?$ h
  777.                 bFirstUpdate=TRUE;
    2 i7 C- G& D: G1 t3 r
  778.                 dwTotalFiles=1;; F! ?6 G6 v; {' H2 p1 x  O9 P
  779.                 dwDownLoaded=0;0 Q7 ~! B) T2 r- r6 @
  780.                 bSilentStep=FALSE;
    4 U* m8 T8 f  K& R- H2 u
  781.                 bCompressed=TRUE;
    7 d" P& h$ e! ]4 A, v; T$ X* m! Q5 _
  782.                 strExtLocal=".\\DownLoad\";
    . G9 f- q* G6 S+ p
  783.                 strFullName="update.txt";
    9 H- H  `- t1 S% A/ E
  784.                 dwProgramState=AP_CONNECT;. f: {' d$ a# m3 D; k4 v( T8 j
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 x) ^* g( a; w% t* ]/ R4 v. \# U
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) k7 n" a/ W( k7 P
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ( @; }" N' I( G. o5 Q' s

  788. * c1 c! \* g! d/ m; V
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - p; e& b; g* D; V& s, |5 A
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ) H$ d  u# i: V: V  j. @$ [8 [
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' V; x0 F2 z6 P! y
  792.                 {
    - H+ j$ ?& S& f9 \/ K/ R
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 d4 j' l( E6 Q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");# y1 N* Q: E* x. w
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ; A8 R8 d6 z; F# W1 {# _- ~
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * v0 r1 y' Z8 @9 h/ Z/ c
  797. - s) {% d. G7 I0 N: H* W# v; u
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      Q! C  n! |& S  ]
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 H, u: u& \2 H: F4 X
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");* n2 g! c  {( A; [3 j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) D' X0 v2 q7 z7 O- H6 v
  802.                 }
    / e( [7 n! Z( {0 Z- `
  803.                 dwStartUpSteps=5;
    4 v" s* `# B/ R  d( N  a! O
  804.               }; i' j* p" w- L, v1 O8 \! \. N. v
  805.             }2 u) Q6 q* `/ T" X1 E
  806.             else
    $ C# c) u2 B8 a! E, o- `% l5 G
  807.             {
    / M- d) C  }; ~% b7 [. q
  808.               unlink(".\\DownLoad\\checkversion.txt");0 B& ^1 G: J* m6 {% [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  C1 z& I9 F$ S  i
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");) o3 Y8 A( [& E* F" ^) _2 u$ J
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    / N; J  M7 V9 c. ~7 _1 W

  812. - A" w, S: @! Q1 ~. T, y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: j2 ^; p  a% w. H0 M
  814.               dwStartUpSteps=99;. ~- \- v: s- K% e( B* s, Y; i
  815.               bFinishUpdated=TRUE;
    ( E& _0 D$ K9 h; H
  816.               bCanUpdate=TRUE;
    ; j) u/ t% f# S& d
  817.             }3 f5 C% l  d6 q
  818.           }
    % @: e& t3 P/ m, _
  819.           else* m/ \! y( A4 T. _% |) Z
  820.           {
    & o" v* j% d; w  T/ D. H6 b! f  r
  821.             if(!Dn.Connected())
    - D2 b8 c# ]) `8 _! E, D& S+ }1 y
  822.             {
    ! z8 K. d1 [3 a- x
  823.               bFirstUpdate=TRUE;
    & u9 z$ i* d% ~# Q& Q8 f6 [
  824.               dwTotalFiles=1;
    & U4 n( n  G# X- q" M
  825.               dwDownLoaded=0;4 z( ?* B4 ]5 W
  826.               bSilentStep=FALSE;* L* x! h3 i/ W+ Z- b) s5 z
  827.               bCompressed=TRUE;  ]6 e# [6 m- k/ [' g* V
  828.               strExtLocal=".\\DownLoad\";& z3 ~: s8 h0 A- `: Q
  829.               strFullName="update.txt";
    7 v; j% X1 f8 _  D8 _! H; W$ H/ h
  830.               dwProgramState=AP_CONNECT;
      F  t" J+ R9 t; N- P( ?! F7 w
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , |9 P$ Y5 Q0 S8 H5 [
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 Z6 o, {6 _/ N" s2 j
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");: j* C: F9 d% j* w
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) |4 d8 G. A$ o5 Y( n
  835.               unlink(".\\DownLoad\\checkversion.txt");
    - T. s' W7 C8 ^7 A( A" b
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)/ [. d/ Q1 w- b3 F! l: w# R" O
  837.               {5 D- }& P8 h8 T5 N+ L
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    & o9 }4 D4 Y3 Y
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    " @/ k6 c- |/ _) N& c2 k! U/ r
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    2 a4 q3 u: R  b& C# v! {
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      S! p4 C! }2 v; o7 [/ E6 ~
  842.                   e3 i2 c1 b3 \+ z
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 Q$ B9 |( B% K2 Q8 M; O- ~) a7 g: p( F) U
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* S5 t. {! _; C* ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");8 O  r7 B1 e& f* y. Q
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 A* e3 s) ^  ?8 \% d
  847.               }* g; _6 _+ K- t/ u& t
  848.               dwStartUpSteps=5;8 L# k( ^% h+ K
  849.             }
    . k8 y% P/ X: V
  850.           }; p2 @# I7 A0 X3 \+ T
  851.         }$ C  F% @9 J) O7 u' R
  852.         else; a5 z7 I" _8 [$ o# Q( ~. E  ^' ]; b
  853.         {  p, x% q8 g6 P
  854.           dwStartUpSteps=3;1 \& a/ F0 V) A( D5 `) v
  855.         }$ A6 Q: U% h% j* ^8 E
  856.       }
    " {% [4 r! Q2 x2 \
  857.       break;) ~) d% M! J2 j# U. P0 V! @  q
  858.     case 5:6 j$ d  T- W- U4 v4 ?. X7 @3 }% {
  859.       {
    " O: y: |! Y4 l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)1 D, O' Q$ G1 w! g9 Z( N
  861.         {5 U3 d. f$ k. ?/ F: x: _# R0 @0 y: _& g
  862.           int opt_overwrite=1;! k# p: a# [/ a
  863.           int opt_do_extract_withoutpath=0;( l6 f& [2 i2 V2 k) k3 V* J& N! b4 B6 |
  864.           unzFile uf=NULL;
    # d: x1 p# f& I& X
  865. ! v. Y7 D8 I' t9 l/ \, `- M9 F
  866.           uf=unzOpen("Wsa.zip");
    * m/ }4 `; j, k; N0 n
  867.           if(uf)8 c/ H! [  i9 s2 Z& P
  868.           {
    : B) L0 c+ m- V/ P
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);4 s! g: \5 u  _1 l
  870.             unzClose(uf);
    0 j" S& Y4 g, v/ l: C: P
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ; K) {5 Y" i" Z3 s5 s) `! u
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) Z; L& W( l: A
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    5 {+ ~2 C2 j4 d" x6 M& e! O( L
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 h! ~% x( `: l$ c
  875.           }
    0 N' m$ c% x; V, U( E
  876.           DeleteFile("Wsa.zip" );
    # j) k4 Y5 A, Y5 K/ G- h
  877.         }
    $ f: Y5 F9 K  T; O8 L
  878. / B3 B( b5 M( h
  879.         if(CheckLocalVersion())
    , M! _" E3 c6 b. ]
  880.         {( ]6 s) F5 o8 D5 V( {, b9 Z
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");% \. U! e4 _. `7 d7 K) A4 E- I9 Z
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");# J& Z0 C4 j; F) X- @
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    8 V7 x; v* Q3 ?" h
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# A. d- E( n* J
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);5 J& g% K* z2 w9 R. @( m
  886.           dwStartUpSteps=99;( V! t0 x: s6 y( S/ y# `- f- V- z
  887.         }
    " \$ B0 Y9 p. W; H5 f8 ]) m0 b
  888.         else; m: q  a, s# u! e* N1 z
  889.         {
    1 [8 q+ u+ i" f; T" \
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / s/ }$ ~. O' j3 I
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; T1 n; k' X+ C3 p
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");- n3 `  _  h" G/ _' n/ w+ l

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

評分

參與人數 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客服返回頂部