CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
0 J6 D  Y: Q* e5 q* J
  1. / RevApp.cpp : Defines the class behaviors for the application.
    . Z+ f  ?4 |- ^& p* R
  2. //' t  V* V$ e+ ?6 M& P1 l

  3. / E) ?% _1 j! c+ k! z+ \
  4. #include "stdafx.h"
    - W5 u' w& ^6 f
  5. # U4 R8 Z; G3 f7 A
  6. //#define UNICODE! t6 p1 h8 i8 D& G' i7 U
  7. //#include <gdiplus.h>
    7 o8 z0 J! h# d- p* |- e
  8. //using namespace Gdiplus;' `1 S( F# S, ~- l+ g1 v
  9. 0 u8 G' A3 c7 W, E/ B) t
  10. #include "RevApp.h"8 Q* q" }8 |7 M- P) L" p& c
  11. #include "RevAppDlg.h"% T) c, W  K4 e0 D, q2 ^4 f

  12. 8 C8 b" n# _/ E: {
  13. #pragma warning(disable:4786)
    1 c: s$ a# U1 G5 J% f
  14. #include <map>: L) }5 b! H0 v- i6 p4 `8 {
  15. #include <list>' f3 D' j6 V) T( c4 O2 P
  16. #include <direct.h>
    * T* m5 V( Y/ ^" K
  17. ! [/ F7 i% w3 R9 s9 h+ m8 p
  18. #ifdef _DEBUG
      K7 ?% Z! a9 v/ l6 L; M  M; P
  19. #define new DEBUG_NEW
    * [6 x7 b# ^' f$ R$ D7 U8 s
  20. #undef THIS_FILE. x4 |3 T+ S+ K/ C- M6 h& i, x* L
  21. static char THIS_FILE[] = __FILE__;' V. h" U3 M- E1 T/ _1 M! h% G
  22. #endif
    ! u$ T- O7 J0 t2 S
  23. #include "SkinResDef.h"% D9 [, X  E  x9 x1 V; a/ V; o
  24. #include "ChangeBG.h"1 b3 j0 E8 M4 B5 {7 d
  25. #include "AFXINET.H"
    " ?& A1 S/ r! V
  26. 9 ?8 m, n' x; J2 r. u9 n
  27. #define TRADITIONAL_CHINESE 0/ ^$ r8 B) k' E0 F1 W! }* I2 L2 N' E
  28. #define SIMPLIFY_CHINESE 1
    3 U7 s) B8 p9 A7 l! Z0 \
  29. #define ENGLISH 2
    ( w9 ~! r, Z( S) Y+ ^  s- ~+ c
  30. int m_iLanguage = ENGLISH;
    4 P- `% |# F+ s
  31. /////////////////////////////////////////////////////////////////////////////
    ! I, L7 D& V- T' J* @" K
  32. // CRevAppApp
    / H  u3 g# @- K/ [" x% l( c
  33. & `; E" o3 {1 F9 P9 K
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" |) W. a2 A8 K/ Q
  35.         //{{AFX_MSG_MAP(CRevAppApp)" f9 o7 N* @5 C/ k' ^0 J
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.$ p1 o% d4 |; _' J
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!+ N+ O2 `7 q  k8 {
  38.         //}}AFX_MSG
    ! [5 n& \: D# G2 k' c
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    / W4 b. Y7 w4 k& g
  40. END_MESSAGE_MAP()3 y# V$ b4 I% t
  41. ) x% L( m0 S) [# V
  42. /////////////////////////////////////////////////////////////////////////////4 d3 V2 e: u3 b1 T$ B3 p
  43. // CRevAppApp construction
    - V$ v. Y/ J. c
  44. ( Y2 S* h6 k( O! S# C, Q
  45. CRevAppApp::CRevAppApp()
    : H+ f) ^8 e- D' D
  46. {
    8 k1 L+ Y3 t# \
  47.         // TODO: add construction code here,
    % ]/ S. b( Y$ {! c, z9 N
  48.         // Place all significant initialization in InitInstance
    " z7 F1 N: v3 i; a
  49.   bDisplayIsBig5=FALSE;
    : }- v2 f0 p7 e' X, j
  50.   bRestartUpdater=FALSE;, U2 b: o4 G1 G' W2 E
  51.   bFinishUpdated=FALSE;
    9 d5 m3 k, G" M: q$ w
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    $ {5 k& M$ H5 S+ |6 a8 t& F- b
  53.   InitChangeDataBig52GBKS();6 |3 t" X5 x8 M0 D/ M' E
  54.   InitChangeDataGBKS2Big5();
    , r3 S. g+ s  D' Z0 ~$ H7 X% m
  55.         //
    % B+ `- Z- L" Z" W7 o+ ?
  56.         bClickRunExe = FALSE;
    , U4 ^& z1 [9 t2 x! N# m# _3 \
  57.         //5 J8 |$ |3 X' j
  58. }
    ) f4 o6 g  L1 J
  59. & W9 ]$ M5 D5 x5 v+ D3 |& H0 o- R
  60. CRevAppApp::~CRevAppApp()
    - O. B% Q+ b, n# z
  61. {
    7 {9 m8 f- V8 P# x% ^0 `, g/ j
  62.         // TODO: add construction code here,# M5 n2 v2 W/ d" r1 E
  63.         // Place all significant initialization in InitInstance& u  {; V7 B. Z
  64.   EndChangeData();
    ; t' b1 b; M- i- I$ T
  65. }2 l$ |" i& ~+ z) J" ?

  66. 1 ~" w" N9 n! x5 P) i
  67. /////////////////////////////////////////////////////////////////////////////0 L. \, C$ z  A: [* k. c
  68. // The one and only CRevAppApp object! B: f" s4 h$ P* m

  69. + V, S% Y7 e6 |$ e3 f3 r" F" \$ ~
  70. CRevAppApp theApp;
    3 v/ y' r. g9 `, d% |

  71. / y, _  C. I/ l7 y: b8 \
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)8 r9 X5 V0 J1 U2 U  Y
  73. {& U  @( O1 }6 K9 I/ \6 c3 U- @
  74.   int iEOF=0;
    : [7 J, V- T' I. ^# Y  f7 |6 K1 S
  75.   char szTempName[MAX_PATH];
    0 c4 |+ m% [1 |7 w+ h- J5 G+ v
  76.   *szFileName=0;
    . r6 p7 J7 `5 @" j6 `
  77.   iEOF=fscanf(fp,"%s",szTempName);  f! _4 J0 j/ O  k: G0 L
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')6 k# Q/ E0 Y* }; c8 T
  79.   {
    * x; S2 u, @9 c5 N: ~+ M+ V. S
  80.     strcpy(szFileName,&szTempName[1]);5 {: j% g3 m) N/ {' F# a
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)9 z. r: y  F; U$ m" ~  |6 @' ~8 v
  82.     {6 V: w% z9 R# v; m! @6 [
  83.       iEOF=fscanf(fp,"%s",szTempName);  v5 o+ g/ ~3 e
  84.       strcat(szFileName," ");
    ( n6 Z& _0 C& ~1 T7 ?! N; y
  85.       strcat(szFileName,szTempName);  K9 ?% T" H* ?& d' w
  86.     }" d% @5 B, {: ]: b
  87.     if(strlen(szFileName)>=1)
    & ?& X" a+ a5 x1 z* ]$ a5 d
  88.     {
    % ?$ d; `$ f9 L4 B" r5 z0 @
  89.       szFileName[strlen(szFileName)-1]=0;" J6 C( Y" `& T/ P% T5 f
  90.     }
    6 l; ~: T% m+ t( d; k( g, V
  91.   }
    : K# f7 g& }8 ?% K' }2 k
  92.   return szFileName;4 L8 a2 n7 i. ~- t% m2 U  X& L3 F
  93. }
    & h4 z2 ^5 y4 Y! H6 t; T, f( H

  94. 9 T# I" D* {2 t9 d$ _9 c5 @
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ! \3 Q) D- K& B$ _, ?/ x
  96. {
    ; u: J" {  B! ]7 m
  97.   FILE *fp;+ R% f, g1 t6 P0 q% i! I+ D
  98.   char *key=NULL;
    + s2 \0 C9 t. m1 J! E. `' m4 f: D
  99.   char version[MAX_PATH];9 k7 [$ F+ O1 v1 d! A' W% k
  100.   LPUPDATEFILE file,olds;
    ( {* G. c: A6 N- e  q& v) V
  101.   std::map<CString,LPUPDATEFILE>::iterator p;) b3 |% M5 ]  p* |0 h" K
  102. % O# s- M1 r8 L, Z
  103.   UpdateList.clear();
    & f! w: V, Q. [3 X$ a, Y
  104.   UpdateFile.clear();
    7 P( |" G, H/ P; W
  105.   if(GetFileAttributes(filename)==-1) return false;
    # f: _% n- M; R5 J
  106.   if(!(fp=fopen(filename,"r"))) return false;1 v) r9 m4 x* y1 }' o/ G# s# S( G
  107.   fscanf(fp,"%s",version);
    7 d0 D) h- L! T! j7 U: b
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ) u; I0 x. F2 v3 d: O! a
  109.   while(fscanf(fp,"%s",version)!=EOF)7 d- v- _" i& h" U, i1 C& Q
  110.   {
    0 I) n5 \; u. o6 g9 I; t& Z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 M; e4 q, {$ p
  112.     fscanf(fp,"%s",file->path);# ]9 b# K- `; M( X/ y9 n* s
  113.     ReadFileNames(fp,file->file);3 [* U8 b" U2 r, Y
  114.     strcpy(file->full,".");5 ]6 ?" ^- z$ N
  115.     strcat(file->full,file->path);
      r; S+ h. [; }# a8 c- k% t7 v
  116.     strcat(file->full,file->file);
    * w, p4 |! ]* G; R+ d1 p5 U! B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- E! q( G8 p' U5 N* D
  118.     {
    ; J  j" \: v+ }* }3 ?6 A
  119.       file->vers=(float)atof(version);1 o) a! o$ M( F! z& k0 f
  120.       UpdateList.push_back(file->full);2 D. J, |# S- ~9 i, p! u& X* z
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 P' k& X' w1 P) @; Q) _4 U. b' j
  122.     }% E; @4 H1 E! ]% ^6 B- c& k0 ^* o1 W
  123.     else0 Z2 M( S2 k* o7 k% Y5 J1 H9 f( q! [
  124.     {9 Y& }/ B$ K1 K. {
  125.       olds=(*p).second;) G* L& v9 y' o" d: P
  126.       if(olds->vers<(float)atof(version))
    # I. e5 k  _& {
  127.       {8 q9 B/ z  J: S. J
  128.         olds->vers=(float)atof(version);
    1 z( c! ~# R  W& Z' p$ u0 i) a
  129.       }5 V1 z+ b4 z. M6 X7 X) Y# }+ Q
  130.       free(file);/ U$ b1 o# e5 N# P
  131.     }2 N) z" S) z' a& b: ]$ f* @
  132.   }0 ~! q  x' b; \! |5 f& a
  133.   fclose(fp);2 i  A' M; n4 ~' W) q( k
  134.   return true;& B* j% w  @5 Q0 }8 _
  135. }& ]6 X7 a8 v2 W- i4 E# u" m' v% V
  136. : ?8 e+ A! ^: I4 X' W, b' |
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    / h- ~* O  P* w+ C0 C! g) z
  138. {, u  v. v; @5 ^. |8 o
  139.   TCHAR  szFull[MAX_PATH];9 G4 o6 B9 `! o: D/ f  Q5 z0 ~  w
  140.   TCHAR *token,*inter;4 G& d3 s. H+ n' T2 `
  141.   *szPath=0;0 n5 M. s) u! F+ F
  142.   strcpy(szFull,szFullPath);- S5 l# x1 y0 i0 |) p+ F
  143.   token=strtok(szFull,"\\/");+ x1 u) [. j# c
  144.   inter=token;0 {; e* ]" P% E  n; _$ g: b; F
  145.   while(token=strtok(NULL,"\\/"))' B9 O6 ^! A) X
  146.   {
    & g, A' U# V8 V- n9 X$ u4 g
  147.     strcat(szPath,inter);
    - L. u! \/ m  q% p+ ?3 f7 Z; c
  148.     strcat(szPath,"\");
    0 G9 U2 C: r' c: c& A
  149.     inter=token;
    5 Q& y" f6 N- F7 J  ~/ H# g
  150.   }
    " v6 m+ \/ ]2 C0 b1 p& v$ E
  151.   return strlen(szPath);/ W# q* I! q4 h9 l3 H! b
  152. }4 g# x' D; ]! I6 m% X6 t

  153. ! b* ]' e, L' Q: S. t' i# u8 g  n
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    1 A  V* y; q$ N6 T, o% a4 m6 d3 U
  155. {; R( J5 S3 D8 U8 z
  156.   DWORD attrib=GetFileAttributes(Target);
    1 {* }! y$ A5 e- w7 x
  157.   if(attrib!=-1), d8 o' ]% L$ X/ A0 e" Q% Y$ r
  158.   {6 s0 j% M) x, ]5 O
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))0 h1 [8 v4 {& z- t/ H8 h. h
  160.     {
    % M0 ?0 w2 r5 N1 J' H0 z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    - o6 e0 L0 Z  t7 ]: o
  162.       SetFileAttributes(Target,attrib);
    $ b! r& d2 a& k( S! y& T
  163.     }! V, j5 R* ?+ q4 B6 E$ L
  164.   }. c& t, {1 F3 G* D7 m$ Y5 n$ \
  165.   CopyFile(Source,Target,Erase);
    + A7 Y  M2 t6 h8 }8 c: K
  166. }4 c$ u( ?' Z4 l* K) e# B
  167. * t8 Z* Y1 L( B9 S- |
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    2 L. }9 F& f% b& N
  169. {
    # l2 Y* P# w' x  Z/ c* u* |) z
  170.      FILE *fp;
    : v: _( `: N. {$ ~/ ]# j" H) h
  171.      char  szBuffer[8192];
    - W; w  ~5 K. [
  172.   va_list  argptr;: u9 z: a9 o- ^+ \. m$ u. \
  173. ' ]+ _# @, R1 u5 s$ L4 s
  174.         va_start(argptr,message);
    5 y6 j2 B' Y4 U
  175.         vsprintf(szBuffer,message,argptr);
    ( p7 M8 F2 ]2 M4 a7 U
  176.         va_end(argptr);
    6 w; i  w1 U+ B. o1 g0 n& G  C
  177.   fp=fopen(FileName,"a");% J( }1 S& E- a0 [! X5 L$ D
  178.   if(fp)
    ) t5 ~. c6 L- O) p/ @
  179.   {
    4 t5 @3 C& e" o+ a$ N
  180.     fprintf(fp,szBuffer);
    & d- d2 c2 t0 X4 o! K- ^( j6 w( @% U
  181.     fclose(fp);
    2 G$ K$ w. O; H5 g3 s$ g7 P7 g
  182.           _flushall();
    . k' n9 z8 r3 T& {  c
  183.   }7 w) l& g9 O5 V0 ^7 A- B3 X& I' F
  184. }
    0 H% a5 M$ Q8 t) d. p
  185. ' t( ]1 z, G& L9 P9 b# Z5 T! ^
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    * A7 l9 P4 E9 K: u4 Y& k. U9 f
  187. {
    6 E4 C( O+ u; a2 e+ {
  188.      FILE *fp;
    6 A) M1 G+ t% F7 ~: x5 R9 u0 d7 G
  189.     DWORD  attrib;
    + i( U, F9 J4 X2 j/ q; r! E% D! e
  190.   attrib=GetFileAttributes(FileName);# j1 V& y, X3 j& b) U( V
  191.   if(attrib!=-1)1 `( Y. N' C9 |1 |
  192.   {/ d) [$ R) R* g- A  J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);) W, M- E; @( v9 G* M7 m, n
  194.     if(!SetFileAttributes(FileName,attrib))
    " \5 Z0 w$ g! T/ {% J* o
  195.     {
    ! p* I0 m+ }5 X
  196.       return FALSE;  u: I8 A& T" q5 }, P/ ^  Z
  197.     }
    * h! Z+ B3 c$ B5 x; J7 x# w: _
  198.   }
    4 G" s: I- B5 G
  199.   fp=fopen(FileName,"wb");
    4 a' Z0 P. i7 ~7 e
  200.   if(fp)
    / c- m9 ^+ ?  @; a
  201.   {
    ) W0 d7 z) `6 H! G$ T5 K" }6 @
  202.     fclose(fp);5 B4 `' w6 d( L* S. p
  203.   }# {8 O+ I' h6 u$ t* x5 r" K( v8 x
  204.   return TRUE;0 y+ s) F- _& ~
  205. }3 ]' c/ m; H0 o- B/ I5 b5 |
  206. : z. Z+ n. Q% Z1 i) c) U
  207. BOOL CRevAppApp::UpdateLocalVersion(void)1 R1 S6 B- `0 u* s* R4 v* `5 c  k
  208. {
    0 `; l+ P* @$ {) W8 h
  209.   char filename[MAX_PATH];$ s8 ~# n$ M) S  G
  210.   LPUPDATEFILE file,olds;$ h- l4 R; K& b' S0 H7 E8 {$ M
  211.   std::map<int,CString>::iterator i;# a* x! F5 h8 ^2 o( {
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; P/ c6 M+ s! J% u' @/ [) G
  213.   std::list<CString>::iterator l;1 [0 N8 A% t. s) Y5 Z; |) ~
  214. 2 ?) W, {! D/ r7 P2 e
  215.   if(bFirstUpdate)
    % O5 [* o" _9 v, q$ n" c4 m
  216.   {9 `5 y% E. `' V+ N2 p. Q+ ~
  217.     dwCurrFile=0;0 X4 x9 o, p; s* Z5 E0 S+ n
  218.     bFirstUpdate=FALSE;
      C  f2 {' I9 s4 c
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + E: Y8 z1 e5 {
  220.     {
    9 M; N/ [) v  A; f6 }7 W
  221.       dwTotalFiles=UpdateLocal.size();
    9 ]; }! S1 M  o! ^. T
  222.       dwDownLoaded=0;
      G0 _+ ~% ]3 B4 u- ^, h6 ^5 c
  223.       bSilentStep=FALSE;0 g5 ^5 x' k% U  X( q
  224.       bCompressed=TRUE;
    ' ^. ?  \1 o" w: o  v, f
  225.       strExtLocal.Empty();
    5 q- a! j: ^2 ]7 H  }% r; w0 c
  226.       strFullName=(*i).second;
    1 K& Y& @9 L& ?8 R+ y
  227.       dwProgramState=AP_CONNECT;/ E/ J+ @- p3 ?& B/ m$ e- t# i
  228.       return TRUE;
    / N" N5 U. z8 q% a  b
  229.     }
    : j7 ]" ~8 Q3 @" B. C0 ]
  230.   }; _; h* E; ?; j, C) K
  231.   else if(bRestartUpdater==FALSE)# e' ]" ]- g& z
  232.   {. T9 c$ i+ c3 [
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())" R% t# D6 W# G6 S: F4 Z) ]* R
  234.     {
    0 {( X3 u4 o. H5 ]
  235.       file=(*p).second;
    0 ]. p& h0 h9 u! o5 j+ c$ _
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - ]8 V- T- K  o
  237.       {. R# U3 D3 F9 }
  238.         olds=(*p).second;( `5 R( b0 V1 R1 a7 {
  239.         olds->vers=file->vers;5 H3 e" F$ U. ^1 Q& w+ n, t2 y6 E
  240.       }% M6 l/ h% x. P* u3 h/ u4 p
  241.       else
    9 N/ Y* H. x. G  e, k! ~
  242.       {
    4 |# C$ g$ z, }' |3 G) e+ ]7 h% R
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # h5 ]9 v( ?1 G0 [8 z8 \/ ^
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ D' R9 F% x5 \6 H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    . x  R, L- z/ u- h5 m% j$ Y
  246.       }7 k$ j% P* ]: N* x5 c$ G& |' S
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 t, e5 a7 x# N. c! |
  248.       sprintf(filename,"(%s)",file->file);
    & }! N1 L4 C* V! i6 n2 B
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * \6 v4 a' q! n5 Q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }/ {" |, P4 _1 t( u2 o; Q5 i6 E
  251.     }
    6 C; i# t7 E& ~# s: h
  252.     dwCurrFile++;" _  B. Y. M( l+ J- g
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 A6 K6 m$ m: T& k4 h
  254.     {
    . p: i. r8 \. ?! }
  255.       bSilentStep=FALSE;& h0 {2 h+ Y" {6 |* V
  256.       bCompressed=TRUE;
    3 [3 \+ z7 ~4 z  }
  257.       strExtLocal.Empty();
    ' G' k6 [. D6 Y4 _; L
  258.       strFullName=(*i).second;* W. p+ x6 F6 A& ?; k
  259.       dwProgramState=AP_CONNECT;
    # N/ h4 k  y1 i0 \% o' d
  260.       return TRUE;' f: V% O3 p; Q- h7 W
  261.     }
    1 O2 j( s- {1 n: ?1 f
  262.     if(!bRestartUpdater)4 t2 }0 {0 |& a3 L" w
  263.     {
    ' a+ n6 e, R5 J% W# k! ?
  264.       int iCurrSize,iFileSize;8 x2 V- C3 M3 V0 Y/ s# ?: o% ?
  265.       iCurrSize=0;
    6 t; @; \) e4 C  u% s0 Y) G: Z
  266.       iFileSize=UpdateList2.size();& r; Z+ N/ k8 u0 J( D
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");9 a  t# u" b1 `- V% |
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    # J  c+ R9 x" |& N
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");6 c2 O' u. W* ]& z5 Y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; l2 m7 R! D4 P3 \
  271.       Fclearf(".\\update.dat");
    - P( B, _: y8 z" d7 i
  272.       Fprintf(".\\update.dat","Bloodyf\n");6 i" M& H7 C$ t% C
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 p7 f& u( `. `% ?9 ~7 z% N8 J3 a
  274.       {
    - z1 Q- E8 Q8 K$ s
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())0 k/ Y& H; n2 Y- C/ b4 f, z
  276.         {
    0 M3 D; {5 t5 P9 Y
  277.           file=(*p).second;& u' h5 w  u; T6 C6 ^! b/ e0 J# p& k
  278.           sprintf(filename,"(%s)",file->file);
    8 Z! J: J% A8 @* \1 ]" x
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , [' u8 q; M7 [+ B! ?
  280.           iCurrSize++;) B7 q! f) A' }2 p; [" |% n
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ W1 m7 u* L% Z# S2 ~- N
  282.         }) x$ T) [9 [4 _6 T
  283.       }8 a5 l# e+ z- u) |
  284.       unlink(".\\update.txt");
    & T, k+ z4 j  o* Z" t
  285.       unlink(".\\update.tmp");
    6 a7 W: x, n7 u) s. C, l. G3 t1 G
  286.       Fclearf(".\\checkversion.dat");
    9 V; Z# c- E6 a+ N
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' u- v$ }/ O; a. S' n
  288.       if(UpdateLocal.size())
    3 F2 z) d6 K: T) K( [
  289.       {
    / r2 O: B% T' H
  290.         UpdateLocal.clear();
    , ^8 Q3 g: j6 i4 X: z" A$ p
  291.       }  J  D- c7 B  ]' z7 R
  292.       if(UpdateFile3.size())
    * N7 o1 n4 Y8 Z5 P1 `
  293.       {5 y4 a1 r# j( }0 A- ^% f
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : L# g* N5 f% d' n% t$ o
  295.         {
    6 p+ L3 C, `3 c; ?/ I3 F& m! Q: B
  296.           file=(*p).second;/ x6 {2 B' N; L; T; D+ X7 e  G9 s
  297.           free(file);; Y9 Q! G0 w& P" m" {2 K
  298.         }# Z$ r. d7 o' m' x9 p6 ^" N
  299.         UpdateFile3.clear();0 C9 I0 F( c# K
  300.         UpdateList3.clear();2 X  k' w" N1 S( d# x
  301.       }$ A1 l9 Q( f+ Q
  302.       if(UpdateFile2.size())
    ' w  t/ f2 R6 a- `& ^
  303.       {
    . K" r1 ?& O6 {) {; E8 b, \3 Y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! J$ p3 Q9 t$ I  D& t- \
  305.         {
    2 d: _  Z' V3 S$ K/ Q
  306.           file=(*p).second;+ I6 w# A1 s( o6 A. V
  307.           free(file);
    6 \$ f% w! p) F0 J5 D
  308.         }
    - @; H' |) l& g: N; w$ W2 F/ Y
  309.         UpdateFile2.clear();
    2 x7 ?, R+ R1 r6 H- Y
  310.         UpdateList2.clear();. |8 u1 b/ u$ A
  311.       }' \$ R0 L# ?) F0 z  F+ P
  312.       if(UpdateFile1.size())- m1 Z7 \8 F* `" }; X
  313.       {/ u7 w5 V/ H* U  z3 h5 `4 T' O
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 [0 [6 k. K9 g) X8 k" v2 L$ _/ h
  315.         {' [$ S7 |6 m/ c% G- S
  316.           file=(*p).second;6 T0 D1 z7 f/ _5 l  E
  317.           free(file);1 R  @( U8 S' ^# j# p1 Z5 \
  318.         }! f1 @$ m6 Q3 D6 s7 R
  319.         UpdateFile1.clear();, y7 t- E" o( Q
  320.         UpdateList1.clear();
    2 F7 Q( Y, N9 y# p8 h$ l, Y  P
  321.       }3 f5 s5 |4 w; C! n# B- m  a
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    7 d2 a! f; G$ L/ X: c# `6 K
  323.     }& [, n& k( g8 _) f
  324.   }( Y# ?  i$ v* g! i+ c; v  ]
  325.   return FALSE;( e3 y* L$ |  ~, i6 {/ R
  326. }% A" |9 W1 V  y2 b, f& r

  327. - l$ x, g) a% L) q+ M3 I
  328. void CRevAppApp::ClearAll(void)
    * R( s' z% d8 I' B' V9 R1 s
  329. {
    1 O0 Z; J, o% P+ \5 C) @/ N' B5 M6 D
  330.   LPUPDATEFILE file;  e1 g( T- w0 O7 p( [! \, z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 l0 ]) ~' f' ^% C% |4 U' [
  332. * `/ @  x) |$ G: C/ U' `. V+ s
  333.   if(UpdateLocal.size())
    * g; n) J) n5 c5 {7 O% r
  334.   {
    . H0 d9 [% M$ |5 s' y
  335.     UpdateLocal.clear();
    2 I8 \, |3 D$ }8 |) Z( f
  336.   }
    ( S: _" Y7 r& i4 b* B5 f. j
  337.   if(UpdateFile3.size())
    6 @1 U& t+ a/ p( x" E' u, U( C
  338.   {- }8 a2 a9 t  S3 U# G9 [
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 `; y0 M! I5 Z8 H
  340.     {! s$ O, f" W7 y  \
  341.       file=(*p).second;  u2 B& g! r9 K  j/ ^
  342.       free(file);
    ' y  g2 ?9 G6 I7 {' D( M, C
  343.     }
    + ~( s* N* z2 m& J; H7 q  n
  344.     UpdateFile3.clear();
    ' ?$ |! u$ k0 D! u
  345.     UpdateList3.clear();! |- N  Y4 D5 i4 `. ~: M$ d* _* T
  346.   }
    : z" _3 L  {+ U" p6 W: U8 F
  347.   if(UpdateFile2.size()): W3 {) t% d. W# O
  348.   {
    ! j/ y! u& a9 z2 F
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # t, ]( K) u4 e1 ]) g3 @/ i
  350.     {6 N4 B) o0 V$ p
  351.       file=(*p).second;
    2 H" `) \1 s3 @. [' j! w7 v
  352.       free(file);$ D4 h* h( h, Z! |9 ]4 Y3 [( L
  353.     }
    : t. w% _6 m$ [( Q/ A3 T) ~
  354.     UpdateFile2.clear();
    & J5 B# o1 a& \- K" u$ o0 V
  355.     UpdateList2.clear();7 v1 v% [+ h% A+ J3 P
  356.   }
    % q/ l2 R. }5 [5 \- C' C
  357.   if(UpdateFile1.size())0 t$ v' `( s2 ~" k  k3 ^/ N0 m$ l4 o
  358.   {5 x- k& y1 k5 t5 u5 u; n0 L
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( x6 @5 \; U" G0 ~  \* m
  360.     {
    & S: }" [2 C6 _  A' R( ]: t, H4 D- R
  361.       file=(*p).second;
    2 H; f1 e  ?2 Z$ K
  362.       free(file);
      Y7 h- ]2 Y& Y* t% G, U+ w4 o- Y
  363.     }- k' K. e  m$ e+ E$ W; J5 e# {+ w: n
  364.     UpdateFile1.clear();8 M! ^4 h+ O  f1 y0 z
  365.     UpdateList1.clear();1 e& t. I. Y* ~# {% s0 q( Q  H6 `) O
  366.   }  o& n/ @8 V% P4 ^% W% H
  367. }  $ q* S& {. v) e+ m
  368.   
    6 e1 f! o$ v$ K; ]8 ~
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    / P5 u5 O% @5 p+ k" z2 k3 B
  370. {* T! @0 g- s7 M4 {) A
  371.   int c;% S! w3 x- n7 M; l
  372.   LPUPDATEFILE file1,file2;) J6 T- s2 ~8 e3 ^+ _
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;" }* a8 g4 v7 f; d, [% W" S4 O
  374.   std::list<CString>::iterator l;
    5 Z; I, z( X9 z

  375. 3 {, l9 t7 I0 K$ I; m
  376.   UpdateLocal.clear();
    * H. Q; ^5 d  M7 r  g1 }5 Z) a. j
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);; a3 F4 i* m+ k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);$ [! k& v! g) S& W% I) w
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);2 f3 C+ W% Q% Q: I, i, q
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ; E. ]1 a! ^" X
  381.   if(UpdateFile3.size())
      ~2 q+ h* F5 b! r( e9 H
  382.   {
    % Q9 Y6 J! ?2 z1 \; ~
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)1 _- g9 t( S8 s. e; H
  384.     {
    ( Q  X7 x5 t4 h6 n* F5 g
  385.       file2=(LPUPDATEFILE)(*i).second;0 U' {! i' p& Z
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 o* p- i) u; c
  387.       {3 |* s+ o$ c1 Z9 E
  388.         file1=(LPUPDATEFILE)(*p).second;( [- O3 ^; b* S9 v+ _
  389.         file1->vers=file2->vers;7 G1 d% ~8 v$ {3 z, M
  390.       }
    ! Q2 y8 U% f- H- x8 N$ c
  391.       else1 r  P( N: N8 z" z
  392.       {$ ]$ x9 L0 G. n) ?( g9 z( p
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! X1 }& D' e% N' C5 c
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ; ~+ g' F% b# F5 I+ d3 u
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));# d; E8 ^4 S# l$ N' \* @" O
  396.       }
    # @' A8 @. ?5 t7 y' a
  397.     }& n, Y" x0 `$ W. s: L% `/ U6 ?6 L
  398.   }
    8 D, j/ [8 t& K/ L& z' I9 N, T
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)+ @& U: L: P# m
  400.   {
    $ i, k! J! S2 l. r! O5 g
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 w/ J9 l- E, }4 ]
  402.     {. }' l# Y$ L: {+ h( L0 {4 F, s
  403.       file2=(LPUPDATEFILE)(*i).second;
    % I# H( b: r( g+ k0 O8 C  o6 ^
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      L4 T+ M- I8 b, e2 D$ F; f/ A
  405.       {( K- d/ e$ r; \6 J
  406.         file1=(LPUPDATEFILE)(*p).second;
    . R" r6 e$ o7 l
  407.         if(file1->vers!=file2->vers)
    5 O  _0 y1 ], N) l: A3 k! K: \
  408.         {
    + Z' i+ @6 W5 ^0 E- H
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ `' v3 g4 z3 ?* y& C
  410.           c++;3 p* k3 K9 X" I1 }* ~
  411.         }
    + D- C/ R, p! u, R6 r
  412.       }9 M1 B4 l" s9 _6 `3 z& ?: u' w3 R4 e
  413.       else& J) t& [2 d* z# q9 @
  414.       {7 [+ ~0 k1 @* S5 _
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ; ^& Q5 Q/ ^0 o" p0 T2 V% g5 Y3 k
  416.         c++;
    6 P+ \, y: T5 ?3 e8 }6 F- d, K
  417.       }' C& G; h: {. j6 O1 u
  418.     }
      `: B  B- y# e; G% j1 ]5 G
  419.   }
    $ B2 X5 K: W9 l4 F4 Y" _  i) j
  420.   unlink(".\\DownLoad\\update.txt");  d; I+ R7 U% M2 d* \" x$ N! p
  421.   if(UpdateLocal.size()) return TRUE;8 p, |% v  _2 d* a: `; {
  422.   else                   return FALSE;# q2 s6 X# U' q8 p% Y
  423. }& H$ C; I* t7 h3 Q
  424. / I3 ?6 j# [: C) H+ C6 h2 E9 [
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    7 a. H1 }; }% `% A% ~
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn": s5 a: `. A- z
  427. 4 y! n9 w4 t# S6 S# g9 c
  428.   y* s" }% G& N

  429. 7 H. ]6 A2 ^- W# M2 s' A
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; A; {. h3 u) J
  431. {) J& w; y9 T: ^- m8 C) l
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    % j* D& g: {$ X  A1 B/ w
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 Y2 t  L2 x- f( t0 {% a. Q9 ?
  434.   {
    & t  c9 k7 d1 q9 j/ Q
  435.     char szLanguage[50];
    : b- `% Q+ z! g
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 g; r8 G% R1 f6 }; B* p/ d$ K5 W
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! `! T; e8 E! R! p3 B5 p0 ]+ m
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! v  z- H9 p2 o
  439.     else                                   m_iLanguage=ENGLISH;' \( U* q" L: P  O
  440.     char szRegister[100];9 I& E/ `7 p, i
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ n: N9 A" Z+ \' w
  442.     strRegsName=szRegister;
    . P& n0 {' z( e6 p
  443.     char szPatchURL[100];
    6 G& a* M6 {% F6 }. U" N+ K
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& v+ ]6 }( c3 A1 Y( N4 ?
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; c! Y" A: G: C8 [
  446.   }; X: I) h- f* Z3 M! T
  447.   else; V) ?! {# ~$ |/ j! U$ b- {
  448.   {" \; z. a# d0 e  u
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* z% ~5 v9 ?7 O# }; q
  450.     strRegsName=DEFAULT_REG_URL;
      G, C$ z7 l+ P, b/ z8 `7 C: h, p
  451.   }
    + C! G; V) n3 b( I% g# `$ J7 u2 e
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    " [0 \( ]- F8 N9 j* @- _1 a
  453.   {- n6 u1 y* h' d$ q
  454.     char szIP[50];4 K+ w: [3 V$ E3 M1 a9 L
  455.     char szDIR[300];7 X  o3 ?& C5 d) T& \& w: V
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % F! m; q, ]/ b  g( d7 h3 z
  457.     {& V5 F, G4 F: ]' ~" S( ?
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    % }* s5 ~& C+ A' A- ]" `' Z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");3 }: `2 K* v( P0 C
  460.       strHostName=szIP;
    / h, r8 K% F5 I$ o
  461.       strHostPath.Format("/%s",szDIR);
    4 T9 t$ P2 ]& H# Z) w3 n
  462.     }0 m: G2 r2 {* K
  463.     else# }  v6 a$ ]9 z/ S. Q
  464.     {; l- B5 I: j8 E9 A0 A
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 x1 P( T" |+ c
  466.       {
    * b. B, g- k& z& }1 R- X: \) A
  467.         char szLanguage[50];' u$ p% U6 e% f  x& v
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" |! o" }- k7 N& P! }% ?6 Q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ( o& a/ e  `3 [& `- h2 B; c: {0 x: m
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . W' z, O  G! o4 ?+ ~6 p
  471.         else                                   m_iLanguage=ENGLISH;
    # a9 }% Z* t7 Y% t( s+ V
  472.         char szRegister[100];# }, D. ^8 _  ^! ?/ U- `, d% t
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" N- X! U! b$ c) H% H3 y
  474.         strRegsName=szRegister;( l0 C9 Y; _: h1 b# }
  475.         char szPatchURL[100];
    # d# q) b, p) P- k3 e7 q+ V; n
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" w2 h1 B% `2 F# s9 k# j3 O
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- X+ m3 {  L- i" b
  478.       }4 a; ?$ d$ G( C5 ]. [' C, P$ C
  479.       else( q* o7 X6 {; D- o+ x. H. R
  480.       {) h# J# Y8 r: V4 F. G
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! V2 C$ A/ ^9 w- d" B! `3 ~& p" ^
  482.         strRegsName=DEFAULT_REG_URL;$ }; I( B1 M7 T5 e7 M, |6 A/ _
  483.       }8 t$ Y2 i0 p( b3 _2 O  N8 l
  484.     }
    / X% {6 M2 c: W: s1 x$ ?/ T2 v
  485.   }
    5 W, u6 z: x5 T! b0 {& u& C
  486.   return true;
    " c/ t9 P7 l6 M3 I: C% X- `* ]9 K
  487. }; a% B6 @- m$ m
  488. ' s5 g; W2 q2 A5 W
  489. #include ".\ZLib\unzip.h"2 x6 D+ b1 H" n; l6 W$ j  C/ {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);1 U4 I$ D% U% J. D9 [
  491. /////////////////////////////////////////////////////////////////////////////
    9 u  I, b3 O2 F( V8 E
  492. // CRevAppApp initialization5 T: h+ x: g! d! j/ V" _

  493. + |1 q4 L. a) f8 e4 w) N  |/ M; m
  494. BOOL CRevAppApp::InitInstance()3 T- v+ z9 M- q& S5 i% D" W6 E
  495. {
    3 ~8 D3 |  T: ?# y1 R+ a
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];3 d+ s3 a1 Y& J/ y; G
  497. , e& d# n8 j! n8 ^: J! G. V
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    * p7 B" M3 O  B
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    & Z' i, d5 Q. M; W; ?( m, J" W
  500.   {
    $ }# |: t" S; q1 z& R2 _
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    7 }4 \% h. X7 H; G2 t3 g& f
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    8 I! G( _) `* U" U8 S+ M; n
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))% S- ^9 L7 T8 @" c
  504.     {
    5 ~: h6 d; Z. X2 L0 k  P( E/ H
  505.       strcpy(szPath,szPathTarget);
    8 O" j3 U9 |) v6 q; \( G  O9 M& Z
  506.       SetCurrentDirectory(szPath);
      r0 m9 _& H5 V" I  V) d1 t
  507.     }5 E% I2 U# W* x8 n( s5 e" h; B
  508.   }
    & Q  Q, n* @$ n
  509. #ifdef _DEBUG/ S' M% S7 n# P5 L) P, T# a7 C
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( \$ H8 e* j7 t
  511. #else
    ; L6 w' Q! Q% R! Y8 X8 F6 f
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 y& M8 P: O& b3 d& K
  513. #endif
    8 }+ A0 ^9 l8 i/ O& T5 E2 T9 c' ~
  514.   {3 p  ?. u1 T# U! z4 V
  515.     char tempFileName[MAX_PATH];; g3 b  i; Y, a% v( k' F4 {
  516.     strcpy(tempFileName,szPathSource);
    - b+ ~9 s8 n5 B; R8 U: G$ @" R, W
  517.     tempFileName[strlen(szPathSource)-12]=0;6 y  ~+ s7 g1 F; E/ {& `
  518.     strcat(tempFileName,"\\$CSUpdate.exe");) D* ^: |. L  M% y, B7 b
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);) E0 \, I7 P2 p
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
      ~6 \2 v$ X6 R2 U5 [  Q2 F2 A- T2 w
  521.     return TRUE;
    * h! T' Z" N" E) B; p
  522.   }) m4 Z% n* [, U% R, s: u
  523.   // Nuke 0118: Delete run.exe& J6 Q  c! f/ Q- m8 i2 _1 S
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 r, |' L( k9 \3 O7 a) T
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
      ?& O9 Y) d' w% A
  526.   if(!ReadCfgFile("Config.ini"))
    : y% R) z7 _# N* f; _
  527.   {
    8 y+ r5 _; A: u' n1 K+ h2 V% t
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    / a$ ~" F+ V# W, c6 M2 c+ e
  529.     return TRUE;
    ! S6 q; i7 D# _; v( y- m
  530.   }
    ( j+ g# `1 R4 p6 W+ P
  531.   HANDLE mutex;
    / Y( T/ H6 }5 I2 G$ e$ F8 |
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))3 ~6 g+ u" B$ ^7 f) P
  533.   {: l( l4 T' H. ?: K7 S8 d1 z$ t
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)9 X, G: Z) {) u7 e& Y2 s
  535.     {
    % O' C$ k0 n' h8 n3 l8 x8 b
  536.       CloseHandle(mutex);
    ! D* b6 `  s2 }, q- N
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
      O& v! H* x6 G
  538.       return TRUE;, R2 y" C) ?! n: C$ P
  539.     }
    ' [$ H& u+ S' G. q; ^; |
  540.   }  
    - ]! Q( s3 r  X- T
  541.   CloseHandle(mutex);
    6 `! G  i9 |& d
  542. 5 @' ]8 k$ U8 Y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) _& ^) @( V1 d: A) I* @
  544. $ v, B( E* ]- ]
  545.         AfxEnableControlContainer();# O9 O+ _# V& H+ T8 x2 R+ b
  546. & N5 I+ V1 p1 {4 r/ e
  547.   bCanUpdate=FALSE;% V2 H& y( z/ d) P7 G+ r; }/ @* C
  548.   dwStartUpSteps=1;
    2 X# r: e' S* k1 \3 o5 T$ x/ x
  549.   dwProgramState=AP_NOTHING;
    . T% i  W/ Z9 K0 m8 k5 w4 r
  550. 7 \' @/ q5 z/ |7 f9 i; d& i
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. V2 A  @! _$ d: M9 K! S
  552. 6 p, h8 x+ s3 N$ d( z& Q
  553.         // Standard initialization
    / k4 p# i& M5 ]
  554.         // If you are not using these features and wish to reduce the size
    ; Q/ p/ m& l. [0 W( g( d2 J4 I; ?
  555.         //  of your final executable, you should remove from the following
    8 m* O4 v. ?9 y
  556.         //  the specific initialization routines you do not need.
    % D- Y9 j2 m+ r" ~& k6 ~* H
  557. . R6 m4 w0 |" y# x5 P$ {
  558. #ifdef _AFXDLL
    ; G6 `$ W3 a1 u' A
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    3 _" G1 a* S. u4 }1 }
  560. #else! J/ b$ V6 e- k: c3 ?$ P3 x7 c: k' u
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ) B% x( i+ t9 C. ?9 N/ ^
  562. #endif
      @8 d- S1 t% K( }) G* H$ ~

  563. ( Q8 B8 q) n6 }& t. ^5 F  T0 c' n
  564.   dlg=new CRevAppDlg;
    3 P4 F" u0 v$ L7 _
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 S% k3 }* M1 ~% o3 T
  566.   dlg->ShowWindow(SW_SHOWNORMAL);& R4 e* n- a$ }/ e7 ]2 r% M
  567.   m_pMainWnd=dlg;
    : R8 d) m1 r  `5 g

  568. 8 I+ b/ c1 S8 s; A  h) D, K6 J% j
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    8 e3 F- \1 v& x2 I8 }8 B4 Z2 p
  570. 1 ]7 Y* r9 E- W+ o" K( I& u
  571. //  GdiplusStartupInput gdiplusStartupInput;
    . a4 B; v3 X8 R' R' o' ~! J0 C  @
  572. //  ULONG_PTR gdiplusToken;
    " L0 _8 \( q* r
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    4 k9 A( c" G1 x. ^* P6 b7 A/ ]

  574. # f" G7 O+ g. d8 @
  575. //        CRevAppDlg dlg;' \5 a' p9 q8 M
  576. //        int nResponse = dlg.DoModal();
    / o3 {2 p1 O% Y$ d; F
  577. //        if (nResponse == IDOK)9 O4 y- ^# ^- K$ t- Z6 W6 C
  578. //        {
    ; N) R- j4 b5 V7 A: x9 ]- G0 \
  579. //                // TODO: Place code here to handle when the dialog is
    4 x0 C# i* F$ p7 G: u8 ^7 V( s  l
  580. //                //  dismissed with OK$ j* K! r& Q* D6 V5 `! N/ H
  581. //        }7 F3 P) a- ]8 }4 R5 W( q8 o% c
  582. //        else if (nResponse == IDCANCEL)
    3 `* C" q" L( G- ?
  583. //        {
    , O& w; A, g+ i6 H. G
  584. //                // TODO: Place code here to handle when the dialog is( j" L1 q$ S" U3 w# F2 M; {
  585. //                //  dismissed with Cancel1 Y- G  w' e1 W% _9 B, c/ C
  586. //        }3 {7 j3 }0 k8 y4 [* \# |0 V3 D
  587. # u, X6 y" T% A8 j" `) ^, U' s
  588.         // Since the dialog has been closed, return FALSE so that we exit the! @( b: f1 c- i% I: }& ^( L" d
  589.         //  application, rather than start the application's message pump.
    0 \/ C6 Z) ?" N. Q  q+ d6 x
  590.         return TRUE;' t7 L7 s+ a1 p  x' O3 g
  591. }+ i2 O6 ]! v- X. p9 h- Y) {- |' K

  592. * P) ^7 X* }9 j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)0 A/ w9 x7 g/ u
  594. {$ _  C1 z, |" x  \3 b
  595.   int i;2 D6 }( h, S7 a& v# @7 F
  596.   char *szRet;' R2 X( c8 J3 G8 V- ~. o4 o
  597. / a5 u& d3 t, e& m) n
  598.   if(pSource) { itoken=0; sztoken=pSource; }  g+ S' t! H. U5 W) n1 g
  599.   if(sztoken)$ q6 n, U) `7 i5 h8 a; K
  600.   {( F4 e7 \% l& [& g
  601.     szRet=&sztoken[itoken];
    , m# e: g$ N7 O. |& R' w& q
  602.     while(sztoken[itoken])- c1 d) ?% d) R6 Z0 Z$ ^( x
  603.     {2 y( f- x' @: q; f3 B
  604.       for(i=0;i<(int)strlen(token);i++)
    3 w: @0 b3 ]; U# H7 b8 m
  605.       {3 x9 V7 i* j4 S2 L. i
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    5 ]* \2 x0 A/ U5 w
  607.         {( k( p/ z1 t$ ^# V/ c+ w% Y$ u
  608.           sztoken[itoken++]=0;1 X3 M* S( |& R: N9 O! t
  609.           sztoken[itoken++]=0;
    2 P* A9 M! }/ S. U; P6 f
  610.           return szRet;
    9 K8 a3 i9 O" y8 w
  611.         }
    2 b3 d9 ^0 p  k# G- D0 s. m
  612.       }
    ) Y' Y% {: @% y0 K8 ~
  613.       itoken++;* \/ L7 i2 I: q
  614.     }
    3 F& v. W% ]5 S6 e/ ]
  615.   }
    * y8 m0 {) L; `) L* U
  616.   return NULL;
    8 n# [/ z3 ^3 c; l
  617. }
    % c1 d" l  R, F0 l8 {" O2 z

  618. 3 N# N, j8 s& j6 k& k
  619. void ProcessProc(long Total,long Current)8 C% X  s; [" q' r$ j
  620. {
    $ e0 @3 i- e+ c8 F
  621.         MSG msg;
    5 k# E$ ?8 I  d
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 Y2 M4 k2 w# a" f! P
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    * d: f8 V1 [0 `4 y. ~
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))' A" ~0 m+ E* H' w
  625.         {3 s9 B3 I% N$ q. p( Q- u% v( ~5 k. q
  626.                 if(!GetMessage(&msg,NULL,0,0))/ u5 R2 E* H8 c7 u
  627.                 {3 `9 }; w9 l; j1 f9 M* N4 R( I1 p
  628.                         return;
    ' `% m4 Z/ H$ g, t% O' X& `- o
  629.                 }
    % ?8 Q$ i) Z/ r5 j* r+ F
  630.                 TranslateMessage(&msg);
    / y4 G9 g$ V7 B3 i! t
  631.                 DispatchMessage(&msg);. o+ K! ^( ^# F7 A) ^  M
  632.         }       
    4 ~( @5 z. V7 f/ V2 _: w: D, R9 N: N: d
  633. }
    , C4 \0 M: Z# _6 @. p9 `0 x

  634. " s1 ~0 U' ]4 K! r5 M
  635. BOOL bFirstChar=TRUE;
    , X7 I; j; _! ~) N

  636. + u, p* |# K. Y* S! w# Y0 {4 b
  637. BOOL CRevAppApp::OnIdle(LONG lCount), G9 I4 h' }1 T4 ~+ a
  638. {; s4 I& e2 u1 k' R& i7 Z/ i) m1 t
  639.         // TODO: Add your specialized code here and/or call the base class
    1 {* B% h6 y. z
  640.   switch(dwProgramState)
    " J1 `, T% N( i( L2 o! h/ |/ q
  641.   {
    4 ]1 A3 r/ m- X* n% t
  642.   case AP_NOTHING:  c6 I5 I: {* ?, e5 @/ ]
  643.     switch(dwStartUpSteps), o3 l; x  @/ E$ o
  644.     {3 Z7 U1 H* @3 \
  645.     case 1:
    - ?5 F- u- ~2 _& g; o, I: y7 ?
  646.       {
    8 s8 X9 V. Y* S" f7 {
  647.         int i;; g& A7 \) s0 B/ n/ g- _
  648.         CDC *pCDC=dlg->GetDC();% z8 g* o' r9 v2 [8 u" W
  649.         HDC hdcwnd=pCDC->m_hDC;& |1 v. p# s' Q4 O: X1 t
  650. //        Graphics graphics(hdcwnd);
    ) g" H, p8 |% ]. E9 u  Q9 s& H
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    # K" X/ ~' F$ P) B" [
  652. //        INT iWidth=bitmap.GetWidth();
    ) C' F* O, W- m  A
  653. //        INT iHeight=bitmap.GetHeight();
    9 G. i6 B" {1 W! j
  654. //        Color color,colorTemp;6 C: v1 h" N. U1 S8 b
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    " [" Y( n4 d- M4 V! w
  656. //        {2 Z, Z/ i4 v5 W) P( p! v, g1 y
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++), z( ~% k) b) {/ k
  658. //          {( ]% `) l. L5 a7 n9 f, L2 b# o
  659. //            bitmap.GetPixel(iColumn,iRow,&color);, z" |7 M. f. F9 Z8 H  C5 s" V
  660. //            colorTemp.SetValue(color.MakeARGB(8 u9 S) n$ B* s) S, H0 ~7 G
  661. //              (BYTE)(255*iColumn/iWidth),
    1 Y( ?7 d+ y  O2 ]% J
  662. //              color.GetRed(),
    7 L1 W/ t! o+ F" t
  663. //              color.GetGreen(),
    5 ~3 O1 Y6 Z7 C3 e: a' F
  664. //              color.GetBlue()));
    7 g6 Y7 I2 N% J, @# {, N' b
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    / x. |: e+ H. L0 Q, P! r
  666. //          }: U! c+ V0 G, B$ U# P+ Z& Y
  667. //        }% Y0 p6 |  a  {3 E) k) V# Q
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);# [' V8 N; r3 u
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& G7 T3 ]& w( @* }, r! |
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    4 R" ?" I5 N. k: M, g+ |0 p+ m( x
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 M( \/ M. T0 }4 f5 @/ U4 N
  672.         for(i=0;i<240;i+=8)
    7 w3 }" ^  a% B3 ?6 N
  673.         {
    ! p. X- x+ r3 j( b+ |
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 O$ a% b5 F2 m; j
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + D& h+ H# I$ f  {; @5 i
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * k* T0 y+ E7 W/ p+ l# Y2 P
  677.           Sleep(33);
    : e9 C9 b% a: b* c
  678.         }
      y! v# z* }2 ^9 D7 p
  679.         Sleep(1000);* _6 {8 t# s6 }
  680.         for(i=240;i>0;i-=8)) A0 t/ k6 \! }4 L+ x
  681.         {
    ) ?7 t9 Y* J5 k+ ^( O1 L6 A' @4 L- ?
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: B; |. P$ a$ B0 H" U; H& q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # X! G) F" b' Z# l: u
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 r, n1 r/ T9 W$ y
  685.           Sleep(33);# m* y2 T! x9 s. \- K9 E/ W
  686.         }
    $ T3 {8 l. A; ~5 N! M
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);$ |  ?; j( _6 S  ~
  688.         dlg->ReleaseDC(pCDC);. q' C1 G* v+ w3 h, ~/ m! G/ D9 b- d4 p
  689.         DeleteDC(hdctar);( q: U, @: {% s  b/ O) E7 N
  690.         DeleteDC(hdcsrc);3 b3 L& P4 M, q5 d; w0 z( s
  691.         DeleteDC(hdcorg);1 q7 f& {9 R# Q/ ~6 S5 C  q# k  h
  692.       }/ A$ @* }. R! }$ ~4 h
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 V, V- P! I8 U. m/ [- T; E- R" I8 S, P! E
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    " Y: }' k0 K) e3 ~+ |! S) s
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");4 o' y/ u0 h5 t9 }  U: [5 C
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' K$ p. _' T5 H& |( Z9 `9 S2 C
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 w5 P8 h: p8 A& R0 C1 P, P- p: i6 a
  698.       if(!Dn.Connected())
    3 J& _- i. }0 y3 H$ s
  699.       {
    ; l* p  p) X% Z
  700.         dwTotalFiles=1;, e4 j% ~- d. v; |: n7 I
  701.         dwDownLoaded=0;
    & M, n6 \5 A' k) e
  702.         bSilentStep=TRUE;
    & K  Z) y& f2 k$ r
  703.         bCompressed=FALSE;
    + `8 k  f/ r- R3 ?" q" j
  704.         strExtLocal.Empty();1 _! x: U. d- |& @
  705.         strFullName="readme.txt";
    + i1 T+ p5 s# O. M- K1 V3 F
  706.         dwProgramState=AP_CONNECT;4 ~5 {( F" a  f7 h  }5 ?$ L
  707.       }
    : S! u3 R; Q" b4 p3 z
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();8 J* d( T* Z( s4 Q8 q
  709.       dwStartUpSteps=2;
    $ f8 ~) S5 R0 W& Y
  710.       break;5 d, l4 a9 f3 ~% j) Z2 w
  711.     case 2:
    6 `' h2 E- `3 ]' ~3 c
  712.       {; @6 p/ q3 C7 y; ~) e
  713.         int iEOF;$ h5 G6 ^4 i, V; E
  714.         FILE *fp;) x' R4 B( w2 P* R
  715.         char szString[512];7 i2 R3 i/ v- [/ j) |; p
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 O: x; y: J. n% G' f% _8 s
  717.         if(fp)$ p: N6 o, X: f# n/ j
  718.         {
    ; U& _4 P% H8 {9 z& R
  719.           do
    3 }4 c) Y) u+ {1 p2 e
  720.           {2 U- t# Q% E. O5 \! @) ~+ ~. g# o
  721.             iEOF=fscanf(fp,"%s",szString);. z# M- c# Y6 V
  722.             if(strlen(szString))( |/ b% n" J7 k$ X6 Q
  723.             {/ B! [: [+ R9 g1 y4 t9 m
  724.               if(bFirstChar)- A4 F4 J' K0 L7 k9 [
  725.               {
    9 O- C6 M& h0 Q& X
  726.                 bFirstChar=FALSE;
    8 q- v" P- l* Q0 C5 K
  727.                 bConnectIsBig5=FALSE;6 H: k. L8 C5 A: J& r; Y7 @, W
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    $ C, K2 T% }$ u: N0 w
  729.               }
    ; T) d  B, E9 F0 n, u
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    # O$ Y  @# a3 d* }/ W% y" f
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    5 l, h+ A4 z+ X
  732.               dlg->m_ListText.AddString(szString);
    3 D1 g, Y2 @6 S$ W
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : m1 u. W1 q) P% V% O& I
  734.               *szString=0;: z' ~! i; M' H
  735.             }
    $ l3 Y& t! {! H: y
  736.           } while(iEOF!=EOF);9 A/ K& k) t- ^$ T9 T; U3 e3 H; O
  737.           fclose(fp);4 e3 {* m7 n! i$ @' e' }9 @0 U2 P
  738.           unlink(".\\DownLoad\\readme.txt");
    5 Q  A  P; @; a1 _, l1 }- u
  739.           dwStartUpSteps=3;
    7 X) b. e% w  _9 W2 Y. r
  740.         }4 |5 F  d+ i. Q2 `6 f; W
  741.       }
    ) N1 ^7 e) h. ^5 m) o$ J
  742.       break;* S+ h; U# T& c* s- t, y' d' d
  743.     case 3:! L3 ?4 U* Y) }) |
  744.       if(!Dn.Connected())
    / X5 ?8 U+ @/ S: w
  745.       {  Z: s4 M  ~% P! O3 v; \0 V" e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    8 B, K4 e; I, Q) A" i% k! \
  747.         dwTotalFiles=1;$ b2 }7 u! ~9 T$ n# N0 Y* {
  748.         dwDownLoaded=0;
    9 {4 f; y7 h* C/ |, L( d/ {
  749.         bSilentStep=TRUE;
    5 d% e; W$ ]. A4 f) Q  V
  750.         bCompressed=FALSE;
    # z! E; d- A. d: A4 F' c* N
  751.         strExtLocal.Empty();& d/ W# ~, c0 E# B* V4 ^) Y
  752.         strFullName="checkversion.txt";
    & x; k5 L5 D  u/ t+ b6 }
  753.         dwProgramState=AP_CONNECT;6 Y1 t2 p: @. x6 _/ j: i/ F
  754.       }
    1 w, O! a9 ?# T. c$ D3 Y( E; N
  755.       dwStartUpSteps=4;
    0 w9 H7 |, h( s1 O$ ]
  756.       break;  F* o* I" M9 {1 I& {: J6 B
  757.     case 4:* o2 w1 R* r% W; t- W- o6 i4 h
  758.       {
      ^; ~  \- X) t6 X5 r5 \
  759.         FILE *fp;
    # m3 u: y9 |9 v5 H
  760.         char szString1[128];
    / x& D! U3 M- T# ^' D" i' c* O
  761.         char szString2[128];
    $ b' k9 U4 f- F  x8 `
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");/ `9 Q' G" Y9 E+ P
  763.         if(fp)
    9 U5 T0 A" {- a
  764.         {
    ' D- W4 Q, \) M3 k5 i
  765.           fscanf(fp,"%s",szString1);3 c/ }& W4 I6 a4 E3 r& e
  766.           fclose(fp);
    , Y3 |2 }! {/ k" U
  767.           fCheckVersion=atof(szString1);* ~0 N/ c8 p, G2 E/ `/ y4 C* y
  768.           fp=fopen(".\\checkversion.dat","r");( q5 a5 _, z; L5 U/ D8 h9 s
  769.           if(fp)* ^" U7 K9 z- i9 ^) h- m) ?) y% ?
  770.           {( @- b/ @1 D6 E, m0 @2 {4 N6 W
  771.             fscanf(fp,"%s",szString2);
    - X4 Z2 S9 @+ h  m4 l
  772.             fclose(fp);
    ' w9 Y( P- I2 A' _
  773.             if(atof(szString1)!=atof(szString2))& ~4 l6 D+ ]* i9 x
  774.             {
    & {% x' N8 I: b; Q8 D" L7 W
  775.               if(!Dn.Connected()), |" M2 M. g1 j+ H) }  H; J
  776.               {
    * b3 P* l2 d. C. B9 t. T
  777.                 bFirstUpdate=TRUE;4 ~/ |& H* _. F5 m
  778.                 dwTotalFiles=1;
    3 ^) ?% h) F2 r3 O
  779.                 dwDownLoaded=0;5 a' Z5 R0 G) {) l
  780.                 bSilentStep=FALSE;
    - C. d+ ^; f8 t; A  P
  781.                 bCompressed=TRUE;' B8 ~% X* \# }0 M$ x5 |, ?: _
  782.                 strExtLocal=".\\DownLoad\";
    # ?4 T( o/ N) R- h* }5 x, N9 u
  783.                 strFullName="update.txt";% q+ h) W; @3 H2 S2 X3 M
  784.                 dwProgramState=AP_CONNECT;
    5 r. t) `+ g% m! ^) U; g6 R! E
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* A3 y/ N/ k' f. e
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 j; L% G% k7 r9 d8 P. K$ v2 B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # q* C$ |4 f" y  f/ _
  788. ( o3 e1 b. f, \' o; T2 t
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 p0 f8 n3 j! Y/ \8 j9 G
  790.                 unlink(".\\DownLoad\\checkversion.txt");' v" N) x# |7 B0 g! H, a  y$ t
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    $ u! S, h& y: E1 K- A$ @7 P  d
  792.                 {6 P: [3 a) w% K; W5 s3 l# _
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    5 K8 r( a; N1 f- @. G6 |
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % W2 M  Y) M/ L$ y$ T0 U1 Y$ t
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    2 x' Q1 y. B/ P  y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 K2 w, r! y7 _: S8 v2 t

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

; v# U1 v- P2 p2 G1 O* U/ q" R3 i- q- f# ]' g1 T# w

評分

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