找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
( ?/ M( ~9 s5 |, L) {
  1. / RevApp.cpp : Defines the class behaviors for the application.) u4 F8 J: x3 F9 R9 t
  2. //( E& y0 X; x% f7 n
  3. . C0 Q5 k' r/ v' J3 o0 R$ R
  4. #include "stdafx.h"
    : f" M3 v0 z0 m( d5 x  \
  5. 6 |1 j5 P0 X( m, W# v
  6. //#define UNICODE
    - X+ c' ~6 J3 d3 L# ~6 ]% F
  7. //#include <gdiplus.h>
    8 M3 D* D3 {6 j4 A, }" e
  8. //using namespace Gdiplus;
    7 D2 |* z" ^$ p4 a+ g2 v( f

  9. % d$ O& p$ M+ c8 n. g# y( v, p
  10. #include "RevApp.h"
    $ `$ I7 W# P0 V6 K+ ]
  11. #include "RevAppDlg.h"  \7 M. |6 s' \: k' G

  12. ! _6 a) Y7 T. E! J
  13. #pragma warning(disable:4786)
    " K3 _8 A  Y3 C8 n* u) D
  14. #include <map>  N8 S8 Y' p" B  U/ _0 e7 y# W
  15. #include <list>
    + e; y' U2 E! {! _$ C8 ~
  16. #include <direct.h>
    - f, k0 F% j" _& I
  17. ' ~0 [( `$ {3 n2 `) q  C
  18. #ifdef _DEBUG
    % S2 n* j. V3 _# l6 b' G
  19. #define new DEBUG_NEW
    + o! o! j6 z7 [" ?7 b
  20. #undef THIS_FILE0 a9 c# u( C% J' N
  21. static char THIS_FILE[] = __FILE__;5 w! M0 y# q( R& [% W) z# a
  22. #endif. ?4 W  Y! p. I
  23. #include "SkinResDef.h"1 P8 e1 N6 i+ e8 i/ P
  24. #include "ChangeBG.h". y$ e5 ~7 H: _
  25. #include "AFXINET.H"
      f% k" [7 q3 F0 H8 L* t
  26. 2 M% y- H1 w% I  H4 p& @
  27. #define TRADITIONAL_CHINESE 0, U4 ~8 h8 z7 z2 A/ h7 q
  28. #define SIMPLIFY_CHINESE 1
    % t, [+ E) D) I5 |- y
  29. #define ENGLISH 2
    $ k% F0 m7 }8 Q+ Q! d/ Y
  30. int m_iLanguage = ENGLISH;
    $ T& e) M8 i* @( T# w
  31. /////////////////////////////////////////////////////////////////////////////
    1 P9 n, \& A* b& {" D- L
  32. // CRevAppApp
    - [; C2 Q; Z8 G, R1 C# U" \  Y

  33.   ]: M$ ]( m: V$ U& K
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 }9 B4 @& i8 n/ `
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    , \( \0 u# K; `# G
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.: o1 c5 b) t% b/ g, {: f* s+ ~2 k
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!8 `% q" q# F3 h8 z* n
  38.         //}}AFX_MSG
    ! x. E& O' {  L5 B0 U
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
      g/ ^1 o, |* y: o1 m9 _
  40. END_MESSAGE_MAP()
    * F5 g  ^% }" a" V
  41. 7 U$ I+ t6 K  d1 h( A: |
  42. /////////////////////////////////////////////////////////////////////////////" S% e1 i. C6 J3 @: c0 @
  43. // CRevAppApp construction
    4 p* |4 n/ P% g* }6 ?* W

  44. : Y# r$ ~( A! T
  45. CRevAppApp::CRevAppApp()
    1 R2 D6 j4 n0 o
  46. {# [8 W4 o' z$ V: a) B. r
  47.         // TODO: add construction code here,
    ! ~) M) ~+ N2 s8 Q8 B
  48.         // Place all significant initialization in InitInstance
    ' E; O6 _$ I5 b6 O) ]* `
  49.   bDisplayIsBig5=FALSE;2 H9 J9 q3 I' m, i# P' x. y
  50.   bRestartUpdater=FALSE;
    9 b% y7 I7 }8 n1 W. s
  51.   bFinishUpdated=FALSE;
    9 Z4 e# e/ _8 U! B
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;; f& Z) L' A! @0 q! b% N
  53.   InitChangeDataBig52GBKS();
    * g; G' c5 Y! k' Y0 F
  54.   InitChangeDataGBKS2Big5();9 q5 _, B! i, }) z# k  W: y
  55.         //
    : D, @( r5 s# |  N% W1 Z5 a8 ^7 H& s
  56.         bClickRunExe = FALSE;
    " I+ H1 A; x9 H) J$ G0 A2 |
  57.         //
      I2 [% T) q- h
  58. }! L. s4 j" y5 r' W5 V3 g
  59. / h3 f) f; C: o6 [! Q( q; }
  60. CRevAppApp::~CRevAppApp(), I# i! i0 E! f  y( H1 ]
  61. {1 v) _0 A: v( ~$ {- P/ G
  62.         // TODO: add construction code here,% P/ D9 M( T/ y+ o
  63.         // Place all significant initialization in InitInstance
    9 y& r! r; C& b0 p0 G( _% h
  64.   EndChangeData();( m- M/ g' i0 b  v; }. P% N$ B4 {2 Q
  65. }2 h  G  r- u. L/ W; @

  66. 3 E, p% G  L0 U& s0 G, e! d
  67. /////////////////////////////////////////////////////////////////////////////3 h0 q: ~2 E, a5 ]0 l
  68. // The one and only CRevAppApp object( b" N7 t3 T; h( @% B6 M0 d
  69. : m4 E5 o- y+ O
  70. CRevAppApp theApp;
    : V. F2 z1 F; I, X
  71. 5 Q3 x: B3 w) v, B' x% m# r
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    3 K& {& h9 ^2 l- |, m4 ^! w
  73. {
    2 P" s1 ]: ]1 F
  74.   int iEOF=0;
    0 C5 u' F$ q0 y4 t% W9 e* K4 z# J
  75.   char szTempName[MAX_PATH];
    ! k( X, ^+ M. h7 {' m0 ~0 q, o
  76.   *szFileName=0;+ ^" _$ L9 u  ?
  77.   iEOF=fscanf(fp,"%s",szTempName);
    4 U* j8 k, S% K2 \, P& _' F
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ) D, `5 U/ b, X1 S; ^  v$ h* e
  79.   {* z% I) h7 @+ c* ]3 ]* o- A$ u
  80.     strcpy(szFileName,&szTempName[1]);
    + j) M# d' q$ D" G
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): W/ R" y( L6 K' z" f0 ]
  82.     {
    : w- o+ k4 X6 s8 \; S" K
  83.       iEOF=fscanf(fp,"%s",szTempName);5 L! c. ^" A  k4 B# ^
  84.       strcat(szFileName," ");
    8 @8 D+ E' y! e* n$ Z
  85.       strcat(szFileName,szTempName);
    / ]. D5 Z, o, ~% M
  86.     }
    7 b8 t. s! k2 o( }! H, ^' _
  87.     if(strlen(szFileName)>=1)5 ], I; `$ U* r+ g+ X
  88.     {
    9 S6 Y/ C! f/ [
  89.       szFileName[strlen(szFileName)-1]=0;! U2 g' _$ K8 D2 a
  90.     }
    ! N- C/ D) |. d9 Q( y6 P8 C
  91.   }1 G; j$ [* r! V. O) T
  92.   return szFileName;5 B: n  m  B- D/ }% F6 x! b8 \
  93. }6 p( w8 [: T* D

  94. ; e+ x4 L* {0 c8 j) k& h2 ?/ i
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)/ p- T( ?8 v/ e/ v5 [4 K
  96. {
    # I7 }! i8 k% U0 W( \
  97.   FILE *fp;
    7 q" v5 l: m9 R6 E7 y
  98.   char *key=NULL;0 a$ u: A7 o( K
  99.   char version[MAX_PATH];
    & H2 a# A* [' m4 M, t* m
  100.   LPUPDATEFILE file,olds;4 W1 N. ^, z" i% v) e: g
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 A, H& M% w3 ~  |. r% f

  102. 0 Z7 e+ a8 M6 E9 i' C8 S
  103.   UpdateList.clear();
    1 L& J* ^0 C8 i
  104.   UpdateFile.clear();; l% V$ j1 A- H8 i7 ]) i
  105.   if(GetFileAttributes(filename)==-1) return false;
    4 D  c" Z0 M) N) r) x, j7 w
  106.   if(!(fp=fopen(filename,"r"))) return false;
    % W+ X8 b. v& j% K0 M
  107.   fscanf(fp,"%s",version);0 R; v+ s# E' b/ C! D
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    3 `9 B" ~, o1 O6 u
  109.   while(fscanf(fp,"%s",version)!=EOF)/ `8 W8 O5 \! B' V4 S
  110.   {
    ; w1 I+ @  _% D+ J5 y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- a; ?4 E+ x; y7 W
  112.     fscanf(fp,"%s",file->path);. v  G. Q* Q4 D) ~' P
  113.     ReadFileNames(fp,file->file);
    / @7 p6 _2 C; T" k' }' Q0 n* _
  114.     strcpy(file->full,".");; e( [' n0 \! c/ @
  115.     strcat(file->full,file->path);
    . r9 ~+ }' }: f; x+ P7 L% V' v$ ]
  116.     strcat(file->full,file->file);
    : o+ F. [; s$ r* L. m
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ) f- z" t9 e( B8 K- g
  118.     {
    8 c/ G8 F! {$ n: q5 q$ _5 i7 A  j
  119.       file->vers=(float)atof(version);, H; {& A9 ~2 B0 k6 K7 Q: e+ z/ D, F
  120.       UpdateList.push_back(file->full);# b* U% }. z7 F" s2 Y) X
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    . P/ }  D7 w" `( {/ z) z/ e
  122.     }
    0 ~& T5 e- H/ v- H" P
  123.     else
    7 }* v' k$ r8 l. _3 _7 T
  124.     {
    9 h. H* T- [! p9 Y4 G. k
  125.       olds=(*p).second;6 y- q3 W, A6 h& Y
  126.       if(olds->vers<(float)atof(version))! c( u' M& e# q; I* Q: K
  127.       {5 a# [/ q2 P1 t  k- B4 I
  128.         olds->vers=(float)atof(version);
    # X9 ?& w# H* M$ d( n1 n
  129.       }
    ( X( b' H3 P$ C8 }
  130.       free(file);
    . O1 S1 g0 B) ^6 Y% s& j  z  F
  131.     }
    3 Y" ?- ?0 {5 }
  132.   }2 {, m! Y7 q+ Y4 P3 t4 p
  133.   fclose(fp);" q5 Q! Q3 \7 L6 O
  134.   return true;
    7 M- Q* _" s1 j1 T3 d8 m
  135. }) ?$ u# a1 v, r1 y2 g& W  A" S( i

  136. 1 C  Y% Z# ], N6 t5 l
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    % d; U, h9 m- n+ e: U
  138. {6 i/ a  E& |5 s/ c& F
  139.   TCHAR  szFull[MAX_PATH];) z* m7 v0 n$ C0 a+ d' {; f. a$ p5 X
  140.   TCHAR *token,*inter;
    * [" O6 ~8 v, Y$ s7 {
  141.   *szPath=0;. x5 W$ a! N% e7 D/ f$ B. G
  142.   strcpy(szFull,szFullPath);
    9 k$ M* k& m8 P- @% N) l3 L( e
  143.   token=strtok(szFull,"\\/");
    . A: t: v2 O# |$ n
  144.   inter=token;4 `$ g9 F' U6 x7 ~4 J, ~: G
  145.   while(token=strtok(NULL,"\\/"))
    % A! p5 H6 f9 K4 Z5 P: e6 T
  146.   {- X+ g) {. k8 N+ @& B9 q" x
  147.     strcat(szPath,inter);
    , ?+ E5 {4 W5 ]
  148.     strcat(szPath,"\");* d4 ^1 p- e" j' Z6 x
  149.     inter=token;; ^! i# P- K9 s3 P. o$ J- P
  150.   }6 x9 r) I/ Z1 I' I- ?! [( n+ H
  151.   return strlen(szPath);) r0 K5 X* a9 ~0 ?+ i2 e% g2 ^
  152. }
    3 \: X# u7 Q, L6 l: ]8 ~

  153. 0 A5 d/ O# j. O6 E+ ~+ x3 Z! @
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase): l' a* n$ D% L! c1 S7 X5 _
  155. {
    , Y+ e" W/ v* \: s5 k
  156.   DWORD attrib=GetFileAttributes(Target);
    6 x. G/ @) I+ ~  j/ m4 Q
  157.   if(attrib!=-1)" R' A$ O: G- ?( J, y& A$ e5 R  ]
  158.   {
    + u$ V8 R6 O) m
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))5 Z9 Y: g" Q/ Q' O. O  Z
  160.     {0 k( b, K  m5 y3 f
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ( s' _" i6 k2 h4 c5 d5 Q+ c+ S
  162.       SetFileAttributes(Target,attrib);
    ) c$ r$ Z. k  g$ a7 |
  163.     }8 o, {, ]3 ?# ?
  164.   }3 K8 H3 P/ E8 k* B
  165.   CopyFile(Source,Target,Erase);
    ! M$ o  w2 ~2 d3 ^7 N  [2 l5 z7 s
  166. }
    % X8 Y6 i7 N5 b8 k: s
  167. / s9 ~8 d* j$ f' A' C
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)6 p. C  S4 ]( t3 H4 L
  169. {
    & n) \4 r, ]; r' O, C2 d9 H
  170.      FILE *fp;: H5 v5 Q9 L- `0 d( b; U5 d
  171.      char  szBuffer[8192];
    5 [7 Q- [; M8 Q! q& p
  172.   va_list  argptr;1 I8 w. i- O6 M1 \. W

  173. + D0 x) T. ^1 k
  174.         va_start(argptr,message);
    3 A! v. B. A4 O
  175.         vsprintf(szBuffer,message,argptr);- G0 h* ?1 |: [
  176.         va_end(argptr);- R6 ]# p6 @/ ~0 X, @
  177.   fp=fopen(FileName,"a");
    : W4 u9 Z2 ~( L! T' L
  178.   if(fp)
    4 O3 a6 O* ~3 e3 P
  179.   {
    - l$ L# J. q% q0 ~- f
  180.     fprintf(fp,szBuffer);
    " r, z6 Z1 g. J7 ^9 H
  181.     fclose(fp);
    3 t& p  v, D# g. Y' ?
  182.           _flushall();4 f) a/ ~: \& S8 u2 O3 F! V0 i
  183.   }
    . S6 |7 V8 w, F; [
  184. }
    ; G& {& P: k7 v7 p" v$ l
  185. $ z$ A3 H1 U- q1 u5 E8 J1 ~/ a
  186. BOOL CRevAppApp::Fclearf(char *FileName)+ w8 X* ~. l: ^6 h
  187. {
    2 y+ k8 }- q9 n3 d6 @  E* Q, e
  188.      FILE *fp;
    ; ~2 K4 R% j) V% d; y) H
  189.     DWORD  attrib;' H4 Z4 o* z% T. z7 ~; p/ P
  190.   attrib=GetFileAttributes(FileName);
    : o" s( H* @. b: s, y
  191.   if(attrib!=-1)$ v: w+ P# k/ k% z  o' A
  192.   {
    ! x, J* q5 N1 ]
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    * E& ]4 Y4 Z8 {( @4 U  ^0 Z
  194.     if(!SetFileAttributes(FileName,attrib))9 G* l" U" R6 y/ B8 s
  195.     {3 @4 M9 H; k5 R- n$ Y& Q: L
  196.       return FALSE;
    . ], }' J! v, @. ^* M
  197.     }! u0 w0 T/ K' m' g$ }8 n
  198.   }6 g  d& n* h) e3 D1 e9 X
  199.   fp=fopen(FileName,"wb");& n4 L+ t$ i, g3 v
  200.   if(fp)* e! B/ ?0 S- c" \7 W, q
  201.   {
    " w5 B6 z. _% V
  202.     fclose(fp);! ^+ V- [8 o& b  {; H8 {2 X" n/ l
  203.   }' _% p* G4 ?  [- k9 c) q! q
  204.   return TRUE;/ {' N# P! j9 e# q- [
  205. }
    2 L9 ^, I$ m. o" p: i

  206. 8 X; F) \/ I2 }/ j: f  l
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    # v/ J, i% K* D- I# X) _
  208. {
    0 s7 B! m7 F4 E; R5 R
  209.   char filename[MAX_PATH];: [. n2 ?! L/ L* z
  210.   LPUPDATEFILE file,olds;) c7 T" s9 A) Y% f6 h8 Y* `
  211.   std::map<int,CString>::iterator i;
    ; g8 o* Q) q, o5 |
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! p# S# F. |" a. X
  213.   std::list<CString>::iterator l;
    5 l0 W$ R9 |; N# `' i  \
  214. 9 j  H7 f; C6 _4 X* C8 i: j6 X- t  o
  215.   if(bFirstUpdate); A* K/ ]6 [1 d3 w" e. c5 }
  216.   {- s, N3 [& w/ t
  217.     dwCurrFile=0;2 C  A/ Y( R3 I: l
  218.     bFirstUpdate=FALSE;8 n+ e! A& [$ Y% M9 C$ U
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). e3 S+ c5 W( f- Q# |8 D8 T/ B
  220.     {
    6 l* t) E1 m, \% R' {
  221.       dwTotalFiles=UpdateLocal.size();  ?0 G; e  J/ I
  222.       dwDownLoaded=0;. f0 z  c1 b6 z5 y* F. z
  223.       bSilentStep=FALSE;
    " o$ I5 B: g1 f8 ^- n
  224.       bCompressed=TRUE;' C- H- J: o% }( A' k
  225.       strExtLocal.Empty();+ `# k% r9 ]/ P+ G% Z* i
  226.       strFullName=(*i).second;- {9 v1 V$ K+ s
  227.       dwProgramState=AP_CONNECT;. d& F3 T6 J' d" F# ~
  228.       return TRUE;2 p. e- U% ~6 J0 t4 C" ]/ r2 m9 b
  229.     }8 l1 H& d$ B9 F7 r9 l9 ~
  230.   }& n4 H6 Q) K; a! r* D% L
  231.   else if(bRestartUpdater==FALSE)
    & ~9 [  L; u3 r4 R2 m; x9 ]
  232.   {& C0 w+ K# Y) Q1 @. N
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      v9 B) v: f4 w/ Y0 m0 H) C" t
  234.     {
    3 V8 f9 l* x4 g5 K6 d
  235.       file=(*p).second;
    0 B) h1 z% t$ g, r7 d" R
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())& J: A* z- k' x3 ^
  237.       {
    4 Y; B/ f5 M1 \. m
  238.         olds=(*p).second;$ g% f2 i2 a4 v
  239.         olds->vers=file->vers;2 `. [4 K. [  S5 a# H3 x
  240.       }. V8 K5 B+ c) s; X- q1 s, J
  241.       else* _* _/ A4 w$ v- r) F
  242.       {% S0 k( s7 u% L9 X
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 c; `  b, H9 H+ B4 w' Z
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ m" C) C: H- j4 L# C' P! Z8 Z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));2 w# X8 Y0 K* W
  246.       }6 n* C( n; f& W% a  M# k
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ! o8 a1 H! [& C( \7 ?( u& a
  248.       sprintf(filename,"(%s)",file->file);; |$ E4 T0 R' |' B
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 w. U- W1 {% g9 |
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }* e5 i8 f6 c! ~* H" ^! r' C
  251.     }1 U- f  s( {& R+ S6 }
  252.     dwCurrFile++;
    ! P& j# j* `9 y+ I: R
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 \  w, m  I7 H1 j) [+ K
  254.     {) e. p) {1 Q3 j, A4 Y
  255.       bSilentStep=FALSE;
    # p# a+ Q/ t# @  B7 w# W
  256.       bCompressed=TRUE;+ [9 r* e5 |$ k' r: h: }9 Q4 u
  257.       strExtLocal.Empty();1 j4 a- {6 L* K: G' B8 F; `( }
  258.       strFullName=(*i).second;
    0 ], Y! M4 {, k9 |' ?
  259.       dwProgramState=AP_CONNECT;7 Z6 k/ i% T0 j* e6 W
  260.       return TRUE;
    ' N6 }+ W8 I* ?7 U
  261.     }- u0 J+ j+ W# M- ]5 O. z! w
  262.     if(!bRestartUpdater)
    : R: c, q# H5 |' @* N7 d1 {
  263.     {5 H6 M4 ?/ f# v" n" D  W
  264.       int iCurrSize,iFileSize;
    " r. z# D5 K' [: I
  265.       iCurrSize=0;; W. _) Q* j% a6 V
  266.       iFileSize=UpdateList2.size();
    , t6 g" C5 L5 f% b6 j
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    + ^, g; m3 B) J% M7 T( y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");5 T4 c. c" h9 M' i6 }# B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    3 C, }& Z! e5 |" N* q, S# R2 u
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - E( t. h+ {! R6 h; |! A% `7 v
  271.       Fclearf(".\\update.dat");, W# n. r  m7 ~) t' @$ U
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    , @+ l. ?0 M& q* D) o$ g9 g/ [
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 h) H. u. L8 v6 }6 |+ L$ e6 D
  274.       {
    1 L3 p& q' W1 G9 V) O6 I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ! I2 N1 Y/ b+ G: O4 B# v% _* ?4 E
  276.         {
    + b; o# x: [+ @( D* e9 X
  277.           file=(*p).second;" E" z7 G8 W% o' o
  278.           sprintf(filename,"(%s)",file->file);
    0 d  o8 q+ ?7 N8 m- C
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 n) P/ I% D" B; O( Y
  280.           iCurrSize++;6 k1 _. q/ I" Y1 R; Q9 H4 Z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: }0 n! `' ]: a; X. T8 R: g3 j8 z
  282.         }
      g- a6 D9 y/ X: L3 a* U1 _
  283.       }8 s8 F9 v; ^) n
  284.       unlink(".\\update.txt");# Z% a2 I* `& h
  285.       unlink(".\\update.tmp");' _* [$ U. R' c' k1 d3 t- R
  286.       Fclearf(".\\checkversion.dat");
    6 x, h+ L% q/ Z+ F1 K
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);9 J9 a, q1 U: d$ E
  288.       if(UpdateLocal.size())& K0 p9 t' e: W. k  z( J& d( g
  289.       {0 D- M- J* `% c9 c3 p' C  C1 [
  290.         UpdateLocal.clear();
      z! L! |9 ^/ P# b' T
  291.       }/ J8 }0 i$ d+ ?9 @3 K0 Z
  292.       if(UpdateFile3.size())1 X: C8 N' G7 e/ }
  293.       {  L* S5 R" m  u% i: s/ J! n
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)& N& N+ w& K3 `+ o+ u$ D  c
  295.         {* @2 H+ |* M# L4 q) i+ U' `' x' ^
  296.           file=(*p).second;
    ! w0 S" J  @8 ~+ h; o9 {2 W' U
  297.           free(file);
    4 Q# J4 N" h5 ^9 H4 H$ Q: R; d1 i
  298.         }
    - Q3 o2 O+ k; n
  299.         UpdateFile3.clear();1 M% i! q$ _+ g: ^4 j
  300.         UpdateList3.clear();
    3 b# m- z8 C6 h& ]  a
  301.       }
    . i& b/ L5 L7 q" i( v) T
  302.       if(UpdateFile2.size())
    5 `# o5 S& k5 M# {2 H) O: \3 z
  303.       {) O4 _/ b+ C0 K
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( B7 H' e3 E2 g; ~4 I
  305.         {
    9 F" {& |, d) g, E" L
  306.           file=(*p).second;
    : _6 F- p3 t3 H3 [
  307.           free(file);4 W7 j: n3 g% P' T% O
  308.         }$ t/ W! Y0 Q4 d6 W& E
  309.         UpdateFile2.clear();
    3 l% A$ T* i2 E2 G+ G
  310.         UpdateList2.clear();  v# X! R' D# ?4 c
  311.       }) O# t' A+ k5 G4 c) p* D5 j
  312.       if(UpdateFile1.size())$ m" ~% s0 Y( ?: |! N& \1 S
  313.       {
    / B8 L7 X5 w; a; K; e0 i" e* Y
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 h7 b$ c/ k. G3 H$ D- E. [
  315.         {
    + k) V& z/ `# C
  316.           file=(*p).second;4 l' v3 y3 F) ^: B2 K
  317.           free(file);
    : m' Z) Q9 M6 F" z( X9 z, M0 f6 O9 s
  318.         }  U6 A* t4 m7 g0 `; H/ K6 v
  319.         UpdateFile1.clear();
    9 N; ^$ c& ^+ j$ d" g
  320.         UpdateList1.clear();9 M( Y3 R1 p. N% j$ D4 T" Z! q2 y
  321.       }
    : Z2 X: V% q3 x5 E% f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 o) X6 f3 P* `
  323.     }1 ~! ]! c" o% }' k. u& k+ P' ?
  324.   }$ Q0 c' J) T% H0 T- ]
  325.   return FALSE;/ _+ {& p4 z! ^. }& f! d. p
  326. }, Y" M( c) O6 Z3 K- m
  327. 8 X4 a: j2 Y# a9 z8 O9 @7 y1 K6 Z$ G
  328. void CRevAppApp::ClearAll(void)1 C# |( @% j7 Y* L
  329. {
    : T9 \; P7 [/ Z0 `) U* }9 l
  330.   LPUPDATEFILE file;: O/ J# Q5 C6 m. [& m
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    # U1 g  B) e& b

  332. 9 |, ]+ F  Y2 n- S* |( u% d( O* N+ ^
  333.   if(UpdateLocal.size())
    " X: {4 C% e6 U& R* S! A
  334.   {
    2 ~& l* o! l( p) v; w( [, r
  335.     UpdateLocal.clear();
    / o% ^$ M1 y8 r0 w* W
  336.   }! @# S( X& N; R, s+ h- ~# u
  337.   if(UpdateFile3.size())3 S/ [$ k3 P: y9 b% x- o+ V, W
  338.   {
    2 B7 c; i! z5 p% {* T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' l5 E( p+ y* u) Z. j8 F- C
  340.     {
    - D' d' K6 ?" B, L4 S' V
  341.       file=(*p).second;$ D8 ]# u% A9 k) v
  342.       free(file);
    0 x' E0 P- H/ S, J
  343.     }
    5 ^9 ]% C% v! u( e! O
  344.     UpdateFile3.clear();
    5 P' C/ Y" c6 e* y3 n$ h! ]: I5 a
  345.     UpdateList3.clear();
    7 p  r3 r$ O% \/ M) V  }( F
  346.   }% q8 j0 H) U, W2 v
  347.   if(UpdateFile2.size())
    & s  |/ S) k& j# z9 p
  348.   {9 W; H- G4 ?+ j' E* y# l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' b; y, H. t7 \& R: \
  350.     {8 b+ T+ P- B, I" ~
  351.       file=(*p).second;* ?- e4 J* [* e* |/ L; p  V% V3 b; B
  352.       free(file);8 k6 @: Q/ U4 w  j
  353.     }
    * E2 Q' R* J* X1 j; ?0 O
  354.     UpdateFile2.clear();
    2 c, d1 a$ a' l% V
  355.     UpdateList2.clear();
    0 _! E; P9 O! R; |$ c
  356.   }3 Q- x# |+ `" I7 S3 K6 Y
  357.   if(UpdateFile1.size())# N  @2 P- `' V* i4 ^) V
  358.   {* }2 g& {* `9 m* ^. P
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 S' T9 R0 E% L3 i* `0 ^- R9 _
  360.     {- S5 s* ~% p# ?: L
  361.       file=(*p).second;
    / a) j, E+ J  _) l1 i- A' o
  362.       free(file);
    - ]! y" ]6 [8 D" G; a* v4 r1 K
  363.     }
      q- ]0 z$ h) x4 f
  364.     UpdateFile1.clear();  D) l9 @) X4 z- f  w
  365.     UpdateList1.clear();
    . G" o5 R7 n8 b; M$ R) V
  366.   }4 A+ U' j' z! ?
  367. }  
    * Z- A( |, w4 Q2 O0 O6 U8 I2 ^
  368.     n1 @* w/ ~  Q3 d/ Y* r
  369. BOOL CRevAppApp::CheckLocalVersion(void); g. z; V8 q, T
  370. {- {( w% f- v0 h9 m' K/ }
  371.   int c;
    ( k5 w) k. I0 T% T+ C& v
  372.   LPUPDATEFILE file1,file2;
    2 i$ o' q  V$ l. ]; U" [, f
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 Z2 O- ]/ c  \+ x8 }, G) r, g# S
  374.   std::list<CString>::iterator l;. r  h/ k5 O' K( B: T$ @3 k  G7 m% ]

  375. " I: `8 z2 Q4 c0 k/ q5 t3 y5 i& a
  376.   UpdateLocal.clear();
      H+ _2 G# a% h* ~4 R
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    . k5 ~8 m3 m% k) ~- z. e
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    * n0 n1 I; J/ I$ O
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    / e& {; K( E6 }& u- y3 u" e/ G( e
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 @; Z7 Y8 g4 T( w, a$ }1 s
  381.   if(UpdateFile3.size())) @& }" C7 l+ o' |! S' f
  382.   {
    7 \5 O! @" X5 E
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)3 h0 v# d" u0 f0 i& i( T8 p
  384.     {- ]9 l/ n. A4 V0 s
  385.       file2=(LPUPDATEFILE)(*i).second;
    ; S; i% H' A! o: ]% p  Y/ B" j
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    . p, `% W  j, t' v8 U1 W8 v
  387.       {
    ( U# ~" `: M  |/ O& o3 p
  388.         file1=(LPUPDATEFILE)(*p).second;- f. A* a4 ?. l# B  ~
  389.         file1->vers=file2->vers;  w# J/ B# m1 Y) t# H% s
  390.       }* Y, v  `$ B* G$ v9 h
  391.       else7 U! M3 D6 E7 v2 e
  392.       {$ m: \$ j6 n) P: M! u
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / Y5 u# S4 k' W+ D% Q: K; h
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));: e( V! B8 [3 @/ e+ }, t
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& q8 `! [: M, k5 z) v
  396.       }
    $ Z7 `% ~# w# C- {1 ?& o# J( }
  397.     }
    4 p; i/ o) ]8 t8 E( b
  398.   }
    ; @" j  ?2 m  B" `; E1 d8 e
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)5 j& Q: ~* k! F4 p) a) f2 K
  400.   {
    ' {: y& M, ^2 H2 v5 K& m4 |: s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())6 C+ ?0 q" c+ Q$ w! e
  402.     {
    # ~, S* o$ s5 I. U( z+ ^# F
  403.       file2=(LPUPDATEFILE)(*i).second;6 t  w  F) A* v! |
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())- l1 z3 L4 P& H% }
  405.       {
    % `  h: |! y' I5 Q- P* t0 b
  406.         file1=(LPUPDATEFILE)(*p).second;6 e; q0 |9 }9 J8 G, d& I7 t
  407.         if(file1->vers!=file2->vers): A2 `7 U& N- {0 B6 R
  408.         {! |' y( A) {- c# m1 y$ ?# i
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! c; _5 N1 _% x+ u' `( y$ {) v1 x
  410.           c++;
    $ _- V3 f* k1 J' h
  411.         }/ p. a& x3 K) _& K. D. k
  412.       }
    - a% n" a$ w5 ]; J
  413.       else
    8 G" Q' t! g/ f: W$ R' y& O0 _
  414.       {
    6 W* q( h. z1 ^6 E- |; b6 l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' C5 T( T0 r5 P# |( J% t
  416.         c++;3 i' r3 y6 R1 o" z6 G$ W1 O
  417.       }
    ) g  @& J4 `6 y/ e; z
  418.     }! I3 b6 Q" j- \# {
  419.   }  Z$ c$ m) ~5 S' X
  420.   unlink(".\\DownLoad\\update.txt");3 S, i* X* ~2 I4 J0 K, M
  421.   if(UpdateLocal.size()) return TRUE;4 \" Z8 g, N5 z3 c
  422.   else                   return FALSE;
    * L# }8 E6 i8 A  T9 ^; Q0 x
  423. }
    # J4 ?! O# M: j  m2 s% O

  424. 6 h2 [8 |. M) P! a0 a5 k
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    / d4 D& q7 K7 i1 G3 L1 p" T7 B5 ~
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    8 y" h; ~( Z) S. o4 r/ x- ^* q

  427. * M7 N7 ?4 Y+ K  m! _0 _# J, Z, {

  428. % A( b. ]) Q& @4 H' q- V

  429. % F& T0 ]$ N- L, u3 ]1 J
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    1 O$ f9 h# L6 M/ q
  431. {
    ' i; q, Z+ \* h7 |8 n
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;8 B" \, C1 e" J% e, S
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  O! F! i, Z) D) E
  434.   {
    9 ^9 q, X, c) |
  435.     char szLanguage[50];
    6 s! o8 S0 t% g' M
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + p- j# u  h8 c9 j: S2 r5 F6 I
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 N9 ^  l7 H0 [1 {( M# M5 C
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 p8 T/ U9 B) K
  439.     else                                   m_iLanguage=ENGLISH;
    0 P5 s6 D2 g: f
  440.     char szRegister[100];* x; j% D: ^1 V6 @
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 ^, a6 m- Q  J! R4 ~
  442.     strRegsName=szRegister;
    - f5 O* @5 T+ \% N% Z7 ]
  443.     char szPatchURL[100];8 c3 T# V2 |9 H
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 \/ \3 J2 n( ?
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 T5 M6 v- A  d9 `, K3 s$ k  n
  446.   }* O8 j9 B0 d9 @% y
  447.   else! J( ]+ t' `9 w, {6 g
  448.   {
    6 Z$ W* A9 n1 Z1 o' u) d3 @4 u
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ m! D" S: ]  _" b& K' n! Q5 Q+ H
  450.     strRegsName=DEFAULT_REG_URL;
    $ @! n7 M; c) q  W% X$ J
  451.   }. `5 D3 ^4 y7 M
  452.   if(GetFileAttributes("hosts.ini")!=-1)4 w( W& T( k8 M% N1 e# L) `* Y: e3 c1 l
  453.   {
    4 [; E! j9 N, c! D: Q1 y- c
  454.     char szIP[50];
    0 ]3 v) K0 A3 s3 \* D  J- R! K4 m
  455.     char szDIR[300];
    " S8 ?5 v; b& f6 Q3 t+ B% g5 `
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 o# a# j% L' o% ~) |$ _3 k+ S
  457.     {
    & [4 y- ~. R5 B7 r# m, Z" |6 x
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    - Q8 W& G9 W6 V3 `- l8 f+ `
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    3 |" }( H, U: }, A. L
  460.       strHostName=szIP;
    $ j  H0 b# T* B% y% b1 n
  461.       strHostPath.Format("/%s",szDIR);
    2 d8 Q' k. T; V; @
  462.     }
    - o* Z. v; B0 @7 g
  463.     else1 Z* F, V& B3 [9 k: @
  464.     {% n+ d1 U  f3 l/ D# `
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . F3 {+ i! `) t! R" t, I
  466.       {
    ) U( V$ ?6 f) a' ~9 G
  467.         char szLanguage[50];2 P6 ~+ \/ z% ]7 |1 J
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 o- _0 F- q' j& r7 j
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- q$ S: V3 ?1 v7 M8 D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& L+ P9 I1 f7 s: v. l! G
  471.         else                                   m_iLanguage=ENGLISH;
    ( R/ [, [# B( w. W, m4 ?" k: t
  472.         char szRegister[100];, P6 k) C4 Q. L7 i$ A1 h
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' h9 W2 c! _5 M" G( A
  474.         strRegsName=szRegister;
    ' q( X: N2 C4 ]# U% |3 c" K& n
  475.         char szPatchURL[100];& c' a3 |" x8 J, ^2 i& A
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    & Z- ^) N+ ~" j7 Z, h: ?
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( n" U) n  L5 ^4 G" ~
  478.       }7 |. Z# Q; H+ x; B. r# R
  479.       else
    + |1 I4 g# Z( [/ [
  480.       {
    , f+ b- ~3 l# f! v
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ K/ E8 ~$ K- [6 V' v; h
  482.         strRegsName=DEFAULT_REG_URL;
    * l1 |. |- n6 @' `+ a4 d
  483.       }
    2 G  n+ k  Y2 [- N3 d
  484.     }
    ( F8 D1 M$ m$ Q1 \! y# x* ?% ~
  485.   }/ s& L0 `; G7 B1 v
  486.   return true;
    1 f( O7 E0 C: T. ?
  487. }, J) c  P* N" m

  488. ) g* A: u$ {+ I$ O
  489. #include ".\ZLib\unzip.h"/ w  B  ]8 K8 O" r! A2 g; l
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
      ]$ M, v* i- E: @; P4 |0 z3 R4 g" ^
  491. /////////////////////////////////////////////////////////////////////////////3 R8 K- v% B6 @% N
  492. // CRevAppApp initialization+ x. t/ X, S' h6 w: v3 o
  493. 8 G# j$ B, x- n' a
  494. BOOL CRevAppApp::InitInstance()8 q# N% \- w0 J& j  s) d: k9 y
  495. {
    . {8 \: q, Z8 t! m% C# v- s
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    7 |, z4 ^7 A, J6 _( W7 |$ y

  497. * O5 u8 ^" `" N: Z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ! ]' E! {& Z$ m- n* E: F0 Y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    * y7 }$ w5 ^. ?& e+ h
  500.   {: y/ u9 C- Y6 w& z# X
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 O# k- J3 z( S5 X
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    $ l5 h3 J* i) n; A% V9 t% Y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    6 h0 D8 M& I$ q2 g" r
  504.     {
    # r) }# w. W% C' X8 P
  505.       strcpy(szPath,szPathTarget);3 D9 t; k2 T. F5 R* F+ l4 i
  506.       SetCurrentDirectory(szPath);
    # ~% c9 I0 h2 |& n
  507.     }5 h' o* v6 c: E* G
  508.   }% h, v0 r/ k3 Q: ?# Y) X6 G! ~
  509. #ifdef _DEBUG5 L, s$ D, \' G$ L, {
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 @9 m8 v9 R- p- p3 M/ D% U
  511. #else6 k, |# Q/ z0 f
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 y& s% ^- H5 A# @5 D5 ^* q
  513. #endif
    ; A$ |; f# P7 S' d
  514.   {
    6 z$ I# ?" a1 f4 v& Z
  515.     char tempFileName[MAX_PATH];8 O, d& A* M4 i( j
  516.     strcpy(tempFileName,szPathSource);; L3 y2 X# }  W4 @  F! F; e- `  D
  517.     tempFileName[strlen(szPathSource)-12]=0;3 v- \: G- r/ u8 E9 p! h9 z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");7 E! v4 q: b% Q# j  g4 M  p
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);* _9 |6 W& P, |# c( ^% Y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    9 w& O, m9 }6 c4 n
  521.     return TRUE;* G% k* O1 h5 Y: p
  522.   }: Z! V; s; O9 ^2 |" D6 q+ T+ j
  523.   // Nuke 0118: Delete run.exe  F. Z3 j* T- y# E8 d# T, T: j3 ^
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );+ |0 l' Y! L; S! m
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / n1 n, b4 J& X2 X  [, v
  526.   if(!ReadCfgFile("Config.ini"))3 O( H0 F# N: g) h! l
  527.   {0 k' B7 i- y0 h, [5 [; ?8 F3 L3 D  K
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    5 \: b2 Q" L) [% H$ v+ z9 q
  529.     return TRUE;
    & ]1 h/ m, l/ W$ H; z
  530.   }
    5 G4 ?  G+ y$ ~  {8 @
  531.   HANDLE mutex;
    ; C  Q/ O, ~1 {* d
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")), H2 N% [, Z; o, j, f& u8 p
  533.   {
    " b$ P  U# M2 p
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    7 o$ ~) W4 F* a1 n; k; X
  535.     {
    , g3 F2 H" Q0 _/ K2 [/ `  j  y% h
  536.       CloseHandle(mutex);
    2 R" |; s0 m2 U
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);# m" b  _, F! o1 f/ s# o* d+ E
  538.       return TRUE;8 [" m% H0 R/ f* L9 d2 }, ~$ L
  539.     }$ {4 f) |7 D8 n$ A
  540.   }  6 u+ h7 t! K) L& T
  541.   CloseHandle(mutex);* b  y8 M# M0 S# R; S2 L7 r
  542. ( ?2 Y/ a% j& z9 \8 o
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) ~7 V2 J  M$ s
  544. 8 L, ^" I6 L8 R
  545.         AfxEnableControlContainer();$ v) n0 e  K+ L" N* f9 H5 u* t: I

  546. 3 I/ c+ ~; p6 f9 T; C0 W
  547.   bCanUpdate=FALSE;2 I3 r2 l$ a, A  g& F9 Y# M
  548.   dwStartUpSteps=1;! g% I& D* t  {) m. ]
  549.   dwProgramState=AP_NOTHING;
    7 R. H$ ~4 E4 y. s+ W
  550. ) v" E$ W- h: j% m
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 _) n. {6 `! Z# ^7 G/ H& G

  552. 2 X6 [6 k* c6 }3 U
  553.         // Standard initialization
    ; W& C" j; X2 q1 a3 V
  554.         // If you are not using these features and wish to reduce the size
    ' @3 d) ?( o$ ]. l
  555.         //  of your final executable, you should remove from the following
    ' v  ]9 Z5 V7 |) {. @
  556.         //  the specific initialization routines you do not need.
    6 K* j6 S4 g% e% s; H- ]
  557. , h$ x* o7 u2 d2 g; t' s) f( y2 f: M
  558. #ifdef _AFXDLL$ a- h1 v$ j* E; R# ~2 G. Y& A
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    - e, V: f! ?; u7 v* J
  560. #else7 J& ?* t* D3 a6 Y) X3 p
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ [- L& h" p* {1 n* S1 ?
  562. #endif
    / B7 K, A3 J# I  y/ N
  563. 4 y( @! p$ I: ]- l4 t; {
  564.   dlg=new CRevAppDlg;" n$ h; B1 u; P% r
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ( `" v) c2 [6 ~$ U, a6 a8 i
  566.   dlg->ShowWindow(SW_SHOWNORMAL);# Q1 T. O; V6 x( s' c% O& U0 j
  567.   m_pMainWnd=dlg;: Z* Q. _1 X1 h" ]% ]# e

  568. 2 x  [8 _3 O+ C- {9 |3 J6 L& N4 e
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);; O3 Q2 \5 L+ ~8 s

  570. & i( ~# Z& s; N! C/ t
  571. //  GdiplusStartupInput gdiplusStartupInput;
    - ]8 r$ n$ s4 J1 r( ^
  572. //  ULONG_PTR gdiplusToken;  M  T4 T% h5 B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);: N. ~& d: E' q- r( @  v/ l4 h7 ^, Y

  574. 5 y" d% z: j, L4 {
  575. //        CRevAppDlg dlg;" l' ]9 z6 d% N% c
  576. //        int nResponse = dlg.DoModal();; `) Q3 F: \' \0 ]& B
  577. //        if (nResponse == IDOK)7 t$ }" ^3 Y! l6 m. J$ r& R5 G6 F
  578. //        {
    * @7 g- y* b# I6 @+ m1 u' E8 ~3 E$ M
  579. //                // TODO: Place code here to handle when the dialog is
    5 z5 n7 `2 `4 P" X$ `; Q/ o
  580. //                //  dismissed with OK9 Z8 Z) J, t' ?
  581. //        }
    8 a  b" p' j  K! d% v
  582. //        else if (nResponse == IDCANCEL)+ Y: _: ~' @! o- a' A) G5 w
  583. //        {: s% l- N& P+ C3 A* F, U
  584. //                // TODO: Place code here to handle when the dialog is& N' E" M* X6 Z' o0 S
  585. //                //  dismissed with Cancel7 `* h3 S9 `# f5 j
  586. //        }
    2 _: J5 [/ p# ^- V6 u

  587. " n, R: ~+ k' a* D- S- x0 i2 `
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    8 K9 _: P8 F9 Q
  589.         //  application, rather than start the application's message pump.
    $ S/ V0 m' F2 x  D, a1 Q$ F7 I5 E
  590.         return TRUE;
    . m7 F, Q' U& Q. q; l2 h
  591. }
    ; l2 s) X9 r( m0 F+ z

  592. - s: }( R& f" e) n) ~- O1 L
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' D" I  x6 H+ V, O
  594. {, K& Y$ I, B# H1 F  _& {( u0 r
  595.   int i;6 ?3 I9 L4 m9 [& l
  596.   char *szRet;
    4 V( Y' H1 L4 B

  597. # ]/ S, j9 e6 u- C
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    - C( |# U) M8 u7 C. R% L, r
  599.   if(sztoken)
    % ?" J+ |; R" `0 V
  600.   {7 |. t2 \" g/ |. y3 v+ |
  601.     szRet=&sztoken[itoken];. J, f# w- t2 n, B4 m1 @
  602.     while(sztoken[itoken])( g5 p5 O9 N" r; ]$ r! v
  603.     {& |& l" A( d* l* m; w
  604.       for(i=0;i<(int)strlen(token);i++)4 D4 i; @7 c4 F/ l1 S8 L3 h" @+ a/ {
  605.       {0 w$ J; P5 u  [, U: ^) I& R9 f9 U
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ! n/ @3 |/ Q; F, s7 J6 |! O; C3 A
  607.         {7 \/ |7 U# _8 H8 d
  608.           sztoken[itoken++]=0;
    3 W( Y( h" M. }' A" r, M2 n) R
  609.           sztoken[itoken++]=0;' a6 m1 _- t8 u
  610.           return szRet;% o9 g1 V0 x; [, p* y
  611.         }
    2 a% i& n" h4 Z5 W/ D
  612.       }
    / [) }0 J9 e% U+ U2 N
  613.       itoken++;
    6 O1 k, [; P$ S2 u* W
  614.     }
    7 K* |( r' `. f* W1 i7 s
  615.   }
    & T# W/ t! V/ c6 c: u
  616.   return NULL;$ c" h# u" T& Z7 @( b( }
  617. }- \5 a8 a* D, I( u, x

  618. + f- k& H$ D, x3 z2 Z
  619. void ProcessProc(long Total,long Current)
    & h5 R, D) O9 {, w6 O
  620. {' _6 }2 }8 y5 K4 _  {+ r8 }& r/ {% @
  621.         MSG msg;
    8 k; c' d2 A/ |% T+ w) y
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ( s! h) \& p1 B6 E! g% G
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));, u# j( @0 p& A( [4 X
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)). R9 F3 d  D; w) `2 [
  625.         {
    6 F; w) e; y6 J! K0 m
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ' v- H$ o4 q- Q* A$ k9 H+ }
  627.                 {. x, g# b/ W4 _& V/ C5 m  X# @
  628.                         return;
    7 F, Z; e* D& T4 ?9 u, h1 q
  629.                 }
    6 O# B( }7 z; g! o
  630.                 TranslateMessage(&msg);/ p, l5 f% v- K- f
  631.                 DispatchMessage(&msg);  Q! B* |- A- Q+ p, M1 f
  632.         }        5 l( w3 \" `! r9 Q
  633. }
    . @  o- N+ ^2 K2 e/ b; k4 h
  634. , j/ V& X5 G8 D/ |& _8 `: V  k
  635. BOOL bFirstChar=TRUE;) Y4 R% J6 O4 S" x) P2 ^

  636. 6 R' f. K) l( Q, w0 X  k
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    / q5 w8 r# i7 k8 x0 \6 H- y' t
  638. {. r9 D3 f: x1 R# N! d- s- {2 G
  639.         // TODO: Add your specialized code here and/or call the base class: H  a3 h7 }( N  g) p) K+ ]/ i5 {3 p" W
  640.   switch(dwProgramState)  d  `0 W8 t2 M& L* c8 w3 R  r0 O
  641.   {
    : ?0 r8 o9 Q7 n) U
  642.   case AP_NOTHING:
    2 [/ y+ s* U4 k2 l% ?
  643.     switch(dwStartUpSteps)
      h8 Y: w; `+ g4 `  f1 W
  644.     {
    & o0 X; o; p( o/ q/ z- I
  645.     case 1:2 A0 P+ f0 K; ]: t4 ~1 V$ m9 s% D
  646.       {- R& D; Z' k! j5 u! `3 w; F
  647.         int i;$ R0 m/ ~! t- `8 C% G3 y  E
  648.         CDC *pCDC=dlg->GetDC();3 Z' m9 F' {+ t" k
  649.         HDC hdcwnd=pCDC->m_hDC;
    0 [( V# }! r5 _5 |  ?& m
  650. //        Graphics graphics(hdcwnd);' s. j, G( o& Z7 a
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");8 ?2 I& M  x$ N: N% A! h8 h+ O+ b
  652. //        INT iWidth=bitmap.GetWidth();
    : ?0 W) c3 V% y3 d2 j
  653. //        INT iHeight=bitmap.GetHeight();3 y! ~' ~1 O" [8 ^% L$ J8 y( A9 J
  654. //        Color color,colorTemp;
    ' |& k# V: z; p" G3 b
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)1 a$ F- A0 x+ v$ _' K& l
  656. //        {
    6 Y+ {! |+ ^# @: c; F% B: y: ^
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    / U5 z' ^# L# \( S7 q4 `% y1 S
  658. //          {$ p: c1 g! }( ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);' Z& o" @, w3 U
  660. //            colorTemp.SetValue(color.MakeARGB(; d! ^, W7 {( B0 V; A; h) X* S0 l
  661. //              (BYTE)(255*iColumn/iWidth),
    7 w. W0 Q6 X- m9 k( J+ X
  662. //              color.GetRed(),1 b* Y1 d9 S" |4 @
  663. //              color.GetGreen(),
    8 L6 b+ n) h4 V
  664. //              color.GetBlue()));! H8 ]' x, C- M3 J7 F. m0 O1 k
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    7 {" n8 n5 D( W8 X0 h' m! a9 o
  666. //          }$ T6 g/ \+ C( o9 c+ x" l% u  L
  667. //        }$ ?7 n5 j: ^- ^- n, [, Z
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    5 _) r3 e' J* E. K% W
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # D3 a- f* v& X: n+ P! @
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");1 A" `) i2 |* |* N9 v5 F  H
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 [! `6 u( {4 \4 D* [+ D* E
  672.         for(i=0;i<240;i+=8)) v5 q: z0 o; P) P' `
  673.         {. S( B6 d6 G- j' y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! _& r" ~" w0 [' I4 D% Z# {" S
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, R: A+ g0 M! H$ L7 a! `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + W: Y$ o5 V: w/ @
  677.           Sleep(33);  y' z( a+ E9 y( F
  678.         }
    & C3 }, A5 P- I! f2 \8 A. l
  679.         Sleep(1000);
    , o5 d7 s/ G* n1 O; k) f2 g
  680.         for(i=240;i>0;i-=8)$ M8 R0 Y' v6 w- @8 S
  681.         {$ |5 \6 z; @( `" }, Q9 T' {
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* u" ?( U6 J+ G0 _
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% K4 B1 r. g4 M% R- i. o- a- [
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 ^  @9 V2 \4 ]6 p& o
  685.           Sleep(33);! ]' {/ x* V% x3 J
  686.         }
      z# _: r* J6 T% k
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ) g9 C) ?! K, R. p$ U$ r3 b8 F7 l5 Q
  688.         dlg->ReleaseDC(pCDC);" B1 |5 n5 \- t- ?
  689.         DeleteDC(hdctar);  \; N/ E. j' h' n- i* U
  690.         DeleteDC(hdcsrc);, _% D  _9 T4 w$ M4 ]& D9 Y2 ]
  691.         DeleteDC(hdcorg);
    / `( A( N4 q6 N" ?, o
  692.       }
    + i& k! E3 F0 V; D- [+ B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; T9 T; \& U$ n9 R) C; o
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    $ S6 ]) ~1 d0 o% O
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");; K2 R* t6 Z: o2 H: C2 }) H
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");3 K3 t  N, f7 a4 F
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; E9 f* R  t& ], d3 `9 p1 o
  698.       if(!Dn.Connected())) Y4 o) t4 A2 ^1 h7 F- I
  699.       {0 o5 _$ f+ V. f6 b& l+ R6 W
  700.         dwTotalFiles=1;5 @7 S1 s7 ]8 }) [, Y
  701.         dwDownLoaded=0;; }8 R' j, \( Y8 i/ \+ c* A, o
  702.         bSilentStep=TRUE;, S6 B1 V1 H6 o% l
  703.         bCompressed=FALSE;% j, x2 p% A" N4 v. W* H0 B
  704.         strExtLocal.Empty();
    $ T2 U+ I5 @3 m! ~0 Q
  705.         strFullName="readme.txt";. K! C" i' u( T! F. I5 q
  706.         dwProgramState=AP_CONNECT;$ X- U! y9 e9 {1 e6 t
  707.       }9 [  j. m9 v9 a
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    8 G" u1 n' n0 f6 W
  709.       dwStartUpSteps=2;7 Q' I/ k% g+ q
  710.       break;" T* o: x5 e7 r/ P+ c) u, N
  711.     case 2:) d3 O3 ], P: a" U) O2 H
  712.       {1 F2 J  G( `  @( B  }; G0 Y
  713.         int iEOF;
    8 f# N7 O  L' {# e4 o
  714.         FILE *fp;
    * E5 |. N- g% A- k5 |) @2 s% p
  715.         char szString[512];
    ) S1 V$ c, c0 e( m1 t7 M
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 T( _; Q4 g& p- F2 x- }
  717.         if(fp)
    9 G( S8 K8 A3 l. }2 r& m
  718.         {
    " e3 d# ~# ?9 |: F. Y  L
  719.           do
    % ~2 M0 p% v% v. a/ {. U
  720.           {
    " |& E. d  P* T) p! m
  721.             iEOF=fscanf(fp,"%s",szString);
      b( I3 h0 A. G: ~( s" [! i
  722.             if(strlen(szString))
    3 a  O2 q5 m  r- q. h+ @3 a7 i2 G
  723.             {/ ~5 D2 o6 j6 u
  724.               if(bFirstChar)
    * a/ ?' a( P7 {
  725.               {& |& t; b3 O3 h6 O4 B& k% K+ i$ _
  726.                 bFirstChar=FALSE;
    3 [! p: E% s* L' G7 @
  727.                 bConnectIsBig5=FALSE;
    % k+ X9 y6 I7 I  J( t
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    1 w8 D# U  }' g$ S! \* g: e1 c
  729.               }7 ~8 @# Q$ Z% a
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- ]7 s4 n: H; E! E
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    / V5 B: w# A5 v" R0 s# O/ g0 _
  732.               dlg->m_ListText.AddString(szString);5 O2 `* P. E+ U, @
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) B: V! V, ^1 N  U- |( F) }
  734.               *szString=0;
    # e3 a1 n2 R% Q) S( U
  735.             }
    , @1 B  J1 \3 z8 i& @: j& \7 f7 Z
  736.           } while(iEOF!=EOF);
    - a9 l, ?' L& r2 `
  737.           fclose(fp);
    ! Z8 m9 ^7 p/ d( S" ]2 g4 v; o
  738.           unlink(".\\DownLoad\\readme.txt");; l8 Z% u* K1 U8 G- W$ R
  739.           dwStartUpSteps=3;
    : E4 B7 Y6 \2 H, s* U1 X5 D, O
  740.         }7 k/ K3 s2 Q% r; @
  741.       }
    8 X# m$ F7 y8 V  I" n! Y  E
  742.       break;6 m+ z! }/ x" c& ^
  743.     case 3:9 n% U9 K6 Z4 J: {
  744.       if(!Dn.Connected())( s3 q& c: B& N  f
  745.       {8 J( D  B# \9 O
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    / Z$ i- N' x$ A) C9 S
  747.         dwTotalFiles=1;
    ' h4 O) u" s) Y& g& [
  748.         dwDownLoaded=0;
    * C% V* m. t/ S& F. P) w
  749.         bSilentStep=TRUE;6 O& w, L: k2 g- n: S0 a( X4 I
  750.         bCompressed=FALSE;/ z5 I* J. I+ M. d& J: {" l: f
  751.         strExtLocal.Empty();, n. s! G  _- k$ _. \% `
  752.         strFullName="checkversion.txt";1 Y( f9 f) A9 |3 a
  753.         dwProgramState=AP_CONNECT;9 M  y! I5 n* Z
  754.       }9 ?, c) @/ c0 e
  755.       dwStartUpSteps=4;! [3 m# \7 J4 l- g7 Z+ I+ D) X* p
  756.       break;
    - ^0 D' ^' y4 e/ x; J1 U6 L. X/ ~
  757.     case 4:
    ; j( B, y$ G/ O2 P0 e* t6 v
  758.       {, `( [  c% T( c- x2 r1 o' |
  759.         FILE *fp;% ?9 U, P, F4 t5 U1 X1 z
  760.         char szString1[128];- m( s1 a- A9 V, ^" X2 F# }
  761.         char szString2[128];
    * A6 D# @. t+ C2 q- f4 Y/ |
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( k9 q. G, o1 `* j' j, n9 W
  763.         if(fp)  `' ~* f& P, L$ @$ `
  764.         {
    7 n) x- t8 N) B  t! b% C
  765.           fscanf(fp,"%s",szString1);- V) j; e: B- j* {" I) P
  766.           fclose(fp);
    1 p9 F  g$ y8 }# H- m& E
  767.           fCheckVersion=atof(szString1);
    % C6 S# _6 g! G% h
  768.           fp=fopen(".\\checkversion.dat","r");$ j& Y( X3 F: g$ d9 P! s
  769.           if(fp)1 O* S5 U9 ~6 P- t" i5 _9 d
  770.           {. T- Y( K) d& t
  771.             fscanf(fp,"%s",szString2);2 h" W  I# B7 J) J
  772.             fclose(fp);
    8 K' C7 `& @! X$ ~' E( E
  773.             if(atof(szString1)!=atof(szString2))* _. G! a' q8 ?$ Z$ c# y& U
  774.             {. B9 y/ G5 n1 R# r1 W& x3 x
  775.               if(!Dn.Connected()): S+ z$ q( h, W; H7 L  L. P5 j% f
  776.               {% n" _' X7 v# z4 B* C( d
  777.                 bFirstUpdate=TRUE;( N, j3 f# g8 l8 B- o% d% [3 e
  778.                 dwTotalFiles=1;
    $ [2 _8 Y+ \: O4 x2 T! j2 Y8 u9 Y
  779.                 dwDownLoaded=0;
    3 B0 ~% h$ _8 n* [9 M/ Z
  780.                 bSilentStep=FALSE;0 i% w' E; s, y
  781.                 bCompressed=TRUE;
    " C  Y9 D* y& m& c# }
  782.                 strExtLocal=".\\DownLoad\";
    8 ?! [7 |( l6 a# ^- n. e- N
  783.                 strFullName="update.txt";, s: X1 ~' j1 |. _! _, m/ N- n
  784.                 dwProgramState=AP_CONNECT;+ |9 [, m- J+ C6 d  F9 `
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 f6 {% p* t6 f4 C
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) o/ H1 |9 k, @
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");, g! P6 h! @: J, C: [% X+ g9 r
  788. . Q" p3 p8 \$ u0 v( ]* m
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: j+ y# `  g! e2 Z& j
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    $ B  {' h8 z4 l" ^
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)% R( m" b+ O0 m2 K/ o- C2 ]/ ?/ }$ r8 g% _
  792.                 {
    ' q2 }1 ^3 p8 ]# E
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");( ]$ s* s0 F9 o9 W
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
      N$ v8 ]) Y3 K! F" Z2 D8 O
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ' Q: ]# J$ y) m1 V( g2 S/ {$ @( d
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! K: M. e7 X) z8 W' C+ W( T, e) c" {

  797. , i4 v4 _' |) v" g2 {
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / f2 i; j+ m# C7 b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. y: T; y) V7 ^; j8 t; O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    + y$ S0 @4 N, o& A$ k6 q; A
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 y% Q4 s  b% i/ h; v# G! z! @
  802.                 }* E$ N3 f* _: @& D! f  |) |
  803.                 dwStartUpSteps=5;7 I# V( W6 q/ @* d6 }
  804.               }- g* l. S/ M' t5 Q+ @" X  F) k
  805.             }
    0 ^5 z0 B' I* X! g' r) x6 \7 M( H
  806.             else
    ( q3 F- O1 |$ }. y+ }! `/ {/ ^
  807.             {
    " G$ Q9 W3 X  H) B" E- A* [8 a! j8 e
  808.               unlink(".\\DownLoad\\checkversion.txt");2 G5 j9 R6 u4 p. I5 S4 W. E& t
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . j6 {1 f* c' e. X& E+ _% Q; V( A
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 q. k1 e! J7 K/ s8 Q* J% Y# ~
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");! d2 k0 `$ l/ y( r$ {9 \
  812. : |2 A+ G  @( R. C# L4 a
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ }* e& \2 q, s. |
  814.               dwStartUpSteps=99;1 f; g7 p5 O2 i4 B) R2 d  h
  815.               bFinishUpdated=TRUE;
    " q- i; d/ i" u! q
  816.               bCanUpdate=TRUE;/ A7 \1 W! L7 L3 L' V% u3 X
  817.             }& I# U2 P5 v& ]! H
  818.           }
    9 v8 C5 o, x: Z# x) g3 ~
  819.           else( `1 c  s+ N! X; c- }! |# _3 p
  820.           {& N$ G8 U$ U- p2 I$ h) O1 v8 w
  821.             if(!Dn.Connected())3 J/ Q. q7 A# m1 q
  822.             {
    & {! ]6 |- f2 H$ U5 _
  823.               bFirstUpdate=TRUE;6 U, M1 c% f' e# h2 Q
  824.               dwTotalFiles=1;/ y% u9 R) U/ z; S
  825.               dwDownLoaded=0;
    : o" H: U: R4 j. E% ?; l1 V
  826.               bSilentStep=FALSE;
    0 E- I8 u& W# X5 b( \, n
  827.               bCompressed=TRUE;& T( c5 K- d+ k/ U
  828.               strExtLocal=".\\DownLoad\";9 [( ?, Q) L- Z* D) A5 n! c
  829.               strFullName="update.txt";  h* `2 {1 b" G. [* Q6 x
  830.               dwProgramState=AP_CONNECT;/ ~( C* C' ]. @
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; @+ ?& k8 V4 y( v$ v6 m
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 [# S- p7 Q$ r/ [' v
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! F/ c$ \- P) d
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 \) f$ ]4 L3 Q: L
  835.               unlink(".\\DownLoad\\checkversion.txt");
    * N( V1 u( |' f" K; [
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)8 N: M2 M6 ~; K0 Z2 {: Y
  837.               {$ c' e* p8 D: s2 b1 V: t/ F& C
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");6 L; y; i- P+ r8 ?, Q9 S) P
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");; p0 I1 [% Y5 o" Z. k
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    3 S+ @5 A& {* U" |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . d( y# S8 _: j% {8 d; z! m
  842.                 ; J1 i$ B' v, E( u! Q% K1 ^. W
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 O4 R9 ~* }: ]& c5 s1 j
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 r* W5 m8 i$ I0 _$ G( N
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");! v# V0 x' L0 D9 C# k0 d; h
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; n# z( H) b( ^/ M' {" o: g! B; A
  847.               }0 t  O% [# a( Y+ `" F) m
  848.               dwStartUpSteps=5;
      P* K6 V) u: g
  849.             }0 T+ Z6 [+ @/ m
  850.           }( D: {" Z6 `& S4 q! q. [+ V
  851.         }
    / U* ^- y) H; |' e9 |
  852.         else8 I9 ^" T  q7 z6 T" x8 p) {
  853.         {
    ! r! T: ?5 T; q& s3 i
  854.           dwStartUpSteps=3;# k0 }& J/ H8 [2 s
  855.         }
    # [4 N- Z% X* i4 i9 k
  856.       }, ?7 z/ L: \+ t3 `8 G. n) h
  857.       break;2 ]* ~7 M, T5 |0 b
  858.     case 5:
    ( V$ G' a4 e5 G; C' P
  859.       {
    # p1 ~. U+ `! ~" o2 g, Y  t
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): Q" @3 \. Y) Y3 K& x
  861.         {
    ) X9 O5 g, F4 `- C- l9 Y. A- P
  862.           int opt_overwrite=1;/ d8 B! Y. M( ^" h2 C
  863.           int opt_do_extract_withoutpath=0;
    9 @4 q# T  T0 A2 U" |
  864.           unzFile uf=NULL;
      _; N3 a! Z. [8 b
  865. ' T+ H! f' o4 k  m2 q" P
  866.           uf=unzOpen("Wsa.zip");
    0 Y. z4 ?( S0 D; T
  867.           if(uf), R& I! r  K" |8 E' [& S
  868.           {, J+ J3 u2 A1 T6 o
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);. x5 g0 J* A" f' y5 a3 \
  870.             unzClose(uf);
    ) u" h3 I; x$ p) P* u: S5 u
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");0 M  D6 R- i/ {: |
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    8 \9 ^- ?' B- p& A6 V/ c
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");& T( [3 `6 p+ v* L, V% }% Z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) v6 h$ O+ Y8 Y5 {: p6 G
  875.           }
    & X+ C) L0 s5 c9 o2 q* _
  876.           DeleteFile("Wsa.zip" );
    4 A: s+ M% z+ D' l9 K# _% D
  877.         }
    & ?0 m$ R7 K1 L* p' |. Z
  878. * D+ M. ]4 V5 j4 q
  879.         if(CheckLocalVersion())
    - N7 `) w: X9 u. l8 y' R
  880.         {
    " D; M4 \' B/ p6 l6 {
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");! S( c* c2 @/ n+ O3 k% `* W
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");. D. D) [5 Z" \. H9 a' K+ `6 i
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");' |* m' J5 G3 q1 G, z6 ~
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 y- @1 z5 s! x: n; W/ S3 U5 O
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);, h) y3 E2 t* E' Y
  886.           dwStartUpSteps=99;
      w# \5 H. q; {% n& Q0 x- O% ?
  887.         }
      f( @8 g( L+ i4 y6 A" P
  888.         else
    ' I6 r& ^! ^; S2 I3 \1 D+ x
  889.         {  z* q: [$ W! l
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' S' v2 S7 u1 b& A8 h+ P/ {
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");) W4 q& c1 \; _; {# o  U
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' l2 \  {( ]( w1 \

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

8 G2 ?! k  |- H3 M$ _2 G5 i" K8 ]0 I; `4 S0 I. c

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-16 21:21

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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