找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
8 d$ f  E  k! R+ Q; M3 D
  1. / RevApp.cpp : Defines the class behaviors for the application.% A3 ?/ G' e" i
  2. //* b5 h% n! ~6 f

  3. 6 W! y0 g8 B' Q) S( O% O! e' n0 N: I
  4. #include "stdafx.h"
    3 K5 S, d4 T' o2 ]# R$ w

  5. * v/ L3 a+ ~7 v
  6. //#define UNICODE
    . x& i, Z$ x5 B& t
  7. //#include <gdiplus.h>
    8 |) ~4 K$ O( Y' x
  8. //using namespace Gdiplus;
    $ U/ D" m# {8 U
  9. : k. B' j/ ^  X0 ?/ f
  10. #include "RevApp.h"% O# \/ a+ E; P" Q) d; {
  11. #include "RevAppDlg.h"4 d! T0 n. b& u; s! H7 e, L

  12. ( p$ D& `7 j6 U7 |5 }
  13. #pragma warning(disable:4786)
    . F5 f6 c, r. ~9 e" h+ j1 e
  14. #include <map>
    1 P2 \  f. k& Y+ t5 e# X6 d
  15. #include <list>
    * }$ z( M5 Y5 s: X/ o. M1 y
  16. #include <direct.h>: r* v+ j8 L( {7 Q, _7 f$ {8 C
  17. . ]' f& N+ b: N
  18. #ifdef _DEBUG8 h/ M. b  o# l7 y  p! v4 x$ d; x
  19. #define new DEBUG_NEW
    + y2 g  [4 c% D
  20. #undef THIS_FILE
    3 U2 k& p$ U, o
  21. static char THIS_FILE[] = __FILE__;! e6 k; E/ Z% L7 W7 P' C
  22. #endif) ?  i; E' \5 N! V$ _3 s% B
  23. #include "SkinResDef.h"5 g  p* l! S1 E6 v
  24. #include "ChangeBG.h"
    ; }6 t4 N% T4 L- Y
  25. #include "AFXINET.H"* {5 O. w+ }9 }# v9 z' \3 T/ s
  26. 8 w2 C8 ~/ ]  N: P  y0 |
  27. #define TRADITIONAL_CHINESE 01 ?2 }5 `1 }# e
  28. #define SIMPLIFY_CHINESE 19 N$ f! T: ]% T, Y. L
  29. #define ENGLISH 2. u, y8 s% v' I! ]! |6 J
  30. int m_iLanguage = ENGLISH;. o8 g! D- b! q  y8 X+ W# p
  31. /////////////////////////////////////////////////////////////////////////////
    . Q/ p# R9 r2 h5 r8 F* W( P4 U
  32. // CRevAppApp
    & b) E4 F9 o% |6 Y
  33. , t# H7 p4 K! Y, v" k+ l2 y( z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    " @3 q" F' V' {8 Y
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    6 `( V7 M) ]8 C* L+ V6 U* B# i: z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.4 M" Q: W8 Z6 F3 t
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ( j9 d, r8 j* L2 q! [
  38.         //}}AFX_MSG
    9 o' \* A$ s7 k7 h9 E2 R
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)# @8 b+ r" S3 B9 @0 ?& b
  40. END_MESSAGE_MAP()+ V' K0 c/ E0 N! z! t' m

  41. 3 P9 }+ E6 E" v. T+ W# u" o+ ~
  42. /////////////////////////////////////////////////////////////////////////////+ u* l5 k+ |) t6 C0 y) H" i
  43. // CRevAppApp construction
    0 D. \' x$ x4 n( y) k; C
  44. 5 F" @* v1 @- a+ d, A" Y) J  J
  45. CRevAppApp::CRevAppApp()
    6 k& d. V% h2 U& c- E1 s
  46. {
    : M# A" w& o! p. y  q& l
  47.         // TODO: add construction code here,7 q4 b6 ?* T' R; M/ {9 V$ _
  48.         // Place all significant initialization in InitInstance
    ( ]  j" A& f9 I. T; C# u
  49.   bDisplayIsBig5=FALSE;: g4 e1 p# Y) E; E6 Q6 c6 r  Y
  50.   bRestartUpdater=FALSE;
    5 L# l. x# y- d8 J
  51.   bFinishUpdated=FALSE;2 R# L: `- L; H4 ~& a: d
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;0 j3 P" H; E" k3 p+ m! U% l8 Y
  53.   InitChangeDataBig52GBKS();9 Q* b, S5 O% u% _- E8 b$ t! ]
  54.   InitChangeDataGBKS2Big5();9 w, f8 k& f! Y/ ?
  55.         //1 N2 O9 b9 [% {3 Z" t1 w
  56.         bClickRunExe = FALSE;1 O: o) V" _* S, J
  57.         /// Q4 b, |( c+ }7 U/ G0 ?
  58. }
    8 U! [# i5 o. {$ m+ Z6 K! g

  59. * ^2 D$ r& M; U6 f6 Z' A3 U
  60. CRevAppApp::~CRevAppApp()
    ' n0 M) P3 q* L# l& c' E
  61. {/ |2 R/ d0 l- t% X% l
  62.         // TODO: add construction code here,1 h$ C& G% i, X- ]- c, W2 R
  63.         // Place all significant initialization in InitInstance4 p+ Z+ B. w2 s6 c
  64.   EndChangeData();" L- J. _; Q( A% @* n
  65. }. _% ?# _% D) w* l+ U6 g
  66. . t# G8 W# [! N
  67. /////////////////////////////////////////////////////////////////////////////
    6 m' N7 u6 s1 p9 G5 q5 X5 I
  68. // The one and only CRevAppApp object
    2 ~  E5 s' n4 D/ U7 }9 I
  69. 4 _$ [! H- f2 F, \5 W
  70. CRevAppApp theApp;
    - ?: i3 ~, M& w% D' g

  71. . |) L8 I5 o- G, g6 K
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)9 \4 A5 B( }) f3 T, g
  73. {
    ) X, x- R' C8 f- O0 Z8 I, L/ }8 g
  74.   int iEOF=0;6 {4 ?2 u, ]+ m2 @. \! Z
  75.   char szTempName[MAX_PATH];4 i/ t) j" R- c" i5 ?/ `
  76.   *szFileName=0;& [* y3 `- o9 ~2 n' S2 q1 |4 i
  77.   iEOF=fscanf(fp,"%s",szTempName);
    : f/ m% O  N0 _9 F) r& B" Q4 P
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')# b3 k8 O$ m! ]5 h
  79.   {: \. }- U, a4 V' Z6 }! p. M3 w
  80.     strcpy(szFileName,&szTempName[1]);
    $ h7 J3 X" ?) Q- V) R0 \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)5 s2 a/ `% B) e/ D1 S. l
  82.     {
    1 B: [% ^" L8 ~6 ]6 s$ r, O0 e
  83.       iEOF=fscanf(fp,"%s",szTempName);
    : |& j: {5 b& ]. @+ P; a
  84.       strcat(szFileName," ");
    # C7 |. w7 N8 n% F: E: W
  85.       strcat(szFileName,szTempName);- k5 {6 ~: ~3 ]% s7 D# t: c
  86.     }4 p* z& ~/ w# R4 F* d2 d$ z
  87.     if(strlen(szFileName)>=1)6 ]( v) f& L, ?4 B, A
  88.     {
      C- u2 J5 d/ V% f8 y; d
  89.       szFileName[strlen(szFileName)-1]=0;
    ; I" @; S0 b  o- Y' ]
  90.     }4 O1 Y. P1 ]0 g& U  e
  91.   }  a& T8 c% e0 J8 H( O
  92.   return szFileName;
    $ h5 B4 d: W; H: B4 @
  93. }  o3 ^. M7 x# T/ v
  94. ; j( B% K: ~( m5 @) V
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)' ], l& o& Y$ }0 X# K; v
  96. {5 f8 l' N/ q, `" }2 c
  97.   FILE *fp;; L; P0 A- U& n. D# n) f6 N
  98.   char *key=NULL;
    3 t2 ^% s0 \, V' i( x6 D
  99.   char version[MAX_PATH];
    / R! m% P. e( |3 J
  100.   LPUPDATEFILE file,olds;2 ], ?5 ^1 K5 X* e* Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;$ d- s( K  X  B

  102. 4 v8 P7 _+ [# \- i
  103.   UpdateList.clear();% o7 U! u4 _" T5 X: r
  104.   UpdateFile.clear();7 n' J8 S" u/ x
  105.   if(GetFileAttributes(filename)==-1) return false;* @' z, d8 H) ]3 I3 }
  106.   if(!(fp=fopen(filename,"r"))) return false;' j7 N0 E2 x8 V8 t& T  x4 E* w
  107.   fscanf(fp,"%s",version);
    0 A# E; F( d( G) h" i4 P
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- w. s8 _$ Z; k- V  D$ O% [: {) S
  109.   while(fscanf(fp,"%s",version)!=EOF)
    $ F+ S3 _' h5 {. r) F( a( j( N2 M6 w
  110.   {
    $ m4 V. D# X" o! j/ X
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ m% Q3 L2 g$ _$ E! A' Y
  112.     fscanf(fp,"%s",file->path);: t' \0 u* O+ f
  113.     ReadFileNames(fp,file->file);3 r9 N+ ]+ o2 m2 j, Z/ N* X( b) N
  114.     strcpy(file->full,".");
      p. t" S- J! l$ F
  115.     strcat(file->full,file->path);
    ( Z5 P& C* C% a6 ]' e+ T  ]" O
  116.     strcat(file->full,file->file);0 W+ R3 @* @0 l" l7 J' I- B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    + i' W# p; e* v+ V
  118.     {
    " F5 R, Q' }2 E! k! s9 O  Y
  119.       file->vers=(float)atof(version);4 g0 n' u- H! ~/ B0 j
  120.       UpdateList.push_back(file->full);8 t4 y8 T4 t* {4 ?" _
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ( d5 R& _6 h7 [$ |, k* x+ D
  122.     }
    . B, Z3 Y/ K" b2 s- a, I4 D0 X
  123.     else% H  E- W8 c# c/ U
  124.     {
    ' M0 B) V' v6 {: n$ W
  125.       olds=(*p).second;
    9 f' c4 [) U) X1 [3 v- z2 ?
  126.       if(olds->vers<(float)atof(version))! \0 b& a* P( d. }1 P. S
  127.       {( _0 T% G; k4 ?3 _# l
  128.         olds->vers=(float)atof(version);
    ! D- v4 z' U% l* j' D+ E1 I& V
  129.       }
    6 a6 N2 V9 P0 j0 J* o( b
  130.       free(file);
    ; L$ \! a) f9 H- n2 v
  131.     }3 S+ W$ ]6 F. Q0 g( W) u# ]2 p: l6 `
  132.   }
    5 K/ |% Z; H+ J. E/ {+ I
  133.   fclose(fp);
    / L0 ]2 R4 y: y8 o# _! d
  134.   return true;1 t4 S6 c' J0 X, x* d# A
  135. }
    4 ?7 s$ P% P9 }6 {# z

  136. # ~9 l9 C+ k# A
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
      Y( ~8 l/ i+ R/ U
  138. {
    ) \- O, Y) w- C
  139.   TCHAR  szFull[MAX_PATH];) U& g) X/ v0 L; ~" Q' O4 l( {
  140.   TCHAR *token,*inter;
    ; c5 S# j7 ~( A* P* v( s+ t
  141.   *szPath=0;& f5 I9 I. i8 P. k0 O* _* c8 u# j
  142.   strcpy(szFull,szFullPath);' A) U& l: b  W7 e
  143.   token=strtok(szFull,"\\/");1 M9 A1 ~' F0 e- [) S0 i0 H
  144.   inter=token;0 `% n, I' e6 Z/ I5 |
  145.   while(token=strtok(NULL,"\\/"))
    % N3 Q% Y; o- k" l
  146.   {. i0 t# _: `/ i/ }* g
  147.     strcat(szPath,inter);
    + N7 \" ]5 E- v' R2 `# Q- r
  148.     strcat(szPath,"\");1 C" F+ b. {2 _9 x3 a
  149.     inter=token;
    + o/ ~: \5 E0 J9 U
  150.   }& n4 A1 d; E* e1 d3 v  `
  151.   return strlen(szPath);
    " Z1 F% B. s# C: I  f) J6 s' D
  152. }% ]1 X! m, F" S1 J

  153. 2 E& d6 H! f' @( ?  D! P; E& B& \
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)" X& w! R# t& H4 t
  155. {# h0 q. x5 D( @8 r8 m
  156.   DWORD attrib=GetFileAttributes(Target);( j2 D& Y# I3 c. p% @
  157.   if(attrib!=-1)5 N8 C) o3 E1 @& d1 Z5 U$ m
  158.   {
    + r0 G7 b/ _1 O1 B
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , c8 b' r# D' f$ N  q8 ?
  160.     {  B1 R. m) g$ w4 A/ g
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);/ S1 m, L' i3 j1 A6 a. F# }
  162.       SetFileAttributes(Target,attrib);% |+ U8 j% s  U8 c2 |# p
  163.     }
    , i. l; S2 E& H' ]8 Z# F2 C7 s
  164.   }
    : Q7 s7 R3 b7 t- v5 u
  165.   CopyFile(Source,Target,Erase);
    5 F8 v: A6 G1 e3 V- ?/ z" [* R
  166. }  \6 U- K& V! O" {! F
  167. * Z, m5 N& G/ j' ~0 X( t0 r
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ' Q! r8 c4 x# h/ V. q
  169. {3 u# D$ Y  j9 G9 G" h
  170.      FILE *fp;! Z+ n9 X$ t/ n7 t
  171.      char  szBuffer[8192];$ \0 {8 y; T6 c& ?9 r+ G+ f
  172.   va_list  argptr;0 Y' ?( i- s, ?# p, A

  173. ; }' u. r, a/ k  x
  174.         va_start(argptr,message);: r' L' g" k5 X$ Q6 t
  175.         vsprintf(szBuffer,message,argptr);
    $ C1 x8 \, c8 \
  176.         va_end(argptr);- b2 z4 d" E$ i; N, v7 d5 E
  177.   fp=fopen(FileName,"a");
    % i( ]) W' J: t+ T+ u
  178.   if(fp)
    ; p0 @% P" P, L- i
  179.   {
    ) M5 G; b6 \: G3 h2 s9 X
  180.     fprintf(fp,szBuffer);9 g4 y- i; _: y
  181.     fclose(fp);9 n4 {* L) S  {0 Y2 \  L
  182.           _flushall();6 n: V% s; L" k6 q& a4 z. }
  183.   }) W1 T9 f' T% j, A) e0 K
  184. }! _/ M$ e8 t, r5 G# Q& F0 w# @' e6 `
  185. : k, R) j: `, c2 `7 `9 s  n
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    4 S$ K1 c. R1 ~' o
  187. {
    , i  ?, F. `1 X1 u. d: d
  188.      FILE *fp;7 Y* C7 ~$ P' ]9 p, Y8 D$ s4 P. F
  189.     DWORD  attrib;
    0 _# F, P  z0 k; W
  190.   attrib=GetFileAttributes(FileName);
    ; g: T$ q9 t8 \0 E/ ]2 s* E( J/ n
  191.   if(attrib!=-1)
    9 G$ Y  q5 i8 O* x
  192.   {/ C( y( L9 d- I* n, Q" |% v
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ; A! p/ J' Z  g$ w
  194.     if(!SetFileAttributes(FileName,attrib))( @: K: `* ?# w4 i5 K
  195.     {* X' z' |: i! l$ }
  196.       return FALSE;
    0 ~+ q+ a% a* Y8 U4 \4 T) X
  197.     }* I& {* S# v: S- k* X4 C! u& b8 {$ G
  198.   }
    - k' {2 G5 F) t% `# }, Z
  199.   fp=fopen(FileName,"wb");1 T$ w6 B. y! f8 B) Z% ?% |
  200.   if(fp)
    " A$ W5 ?+ ~1 q0 ^* a( r
  201.   {
    . t5 l8 h2 ^$ I3 ?3 G* B
  202.     fclose(fp);3 v2 K8 Z! L4 p! t7 Y: A- B2 B
  203.   }
    ( o# c8 w2 v& a1 a
  204.   return TRUE;
    & J6 g  Y4 z5 W: J; b; T3 V
  205. }
    % A$ r# Y4 w  @4 ]+ \
  206. 0 S, r  f. R6 L$ L% q0 r8 J  H
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ( ]% s3 B7 T2 q( X3 z2 t
  208. {# y8 l. e; }. W9 ^0 J, n
  209.   char filename[MAX_PATH];9 _7 o9 j* z- Z$ q9 Y# H# R
  210.   LPUPDATEFILE file,olds;
    4 Z$ o3 ?; x! q, K% S) T
  211.   std::map<int,CString>::iterator i;
    # E+ m) ]1 U, V' ^9 w
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . T% T. ^9 O$ }/ M7 m' y* ]6 t, i( P
  213.   std::list<CString>::iterator l;4 @. ?2 O9 m; {/ r$ @4 m

  214. ) f7 U$ B) ^: D! a1 X/ T4 e
  215.   if(bFirstUpdate)
    ; D! [9 F0 L/ o" r1 }, u% `
  216.   {2 b( p9 @) ~# x# e9 l4 S. f
  217.     dwCurrFile=0;
    ! H1 ~/ j! N% v/ {
  218.     bFirstUpdate=FALSE;4 H+ J+ D  u0 c! J3 C- q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 v9 w7 f9 f; d6 @% O
  220.     {
    + Y8 p2 s: `$ S
  221.       dwTotalFiles=UpdateLocal.size();
    0 d/ K3 ?' O* o( F/ e1 R6 X: N
  222.       dwDownLoaded=0;
    & k, Q* |, K9 ]; w, g/ y) A4 E
  223.       bSilentStep=FALSE;
    7 z; Z/ F3 |1 h, F  z- y; |6 Z& ^  `
  224.       bCompressed=TRUE;/ B( ]2 x: J% U
  225.       strExtLocal.Empty();& A3 w1 f7 Z! m! Z
  226.       strFullName=(*i).second;! K5 X+ l3 F3 T1 L# O
  227.       dwProgramState=AP_CONNECT;
    : _2 E! |, W* X$ ~8 A
  228.       return TRUE;5 H& c8 G3 G5 M0 O% u" j+ T
  229.     }
    . c: @6 w' R1 c- ]( o: ?
  230.   }
    / X; b3 E, W4 R; N- q5 ^
  231.   else if(bRestartUpdater==FALSE)
    1 D' X# u' Q4 Q2 j+ Q5 {' d
  232.   {' t% F( V* f# F
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ( b1 F  b3 K, M2 g1 C
  234.     {
    ( |/ M% x7 F" ~* y2 ]% J
  235.       file=(*p).second;9 Z- g2 I9 _6 O8 ?. Y5 \: m
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ( N$ m; n4 K2 Z: o% u8 L
  237.       {
    : D5 d4 v1 `5 _6 B" T
  238.         olds=(*p).second;
    4 J2 k  [5 x/ t- J7 K& y6 g( O
  239.         olds->vers=file->vers;
    6 Y' `$ R! F. z% l
  240.       }
    / }' e8 Q- P: l4 ]+ ]: `
  241.       else
    5 R3 X; c! \2 T) p! L) [1 m* Y
  242.       {# |4 |9 z0 k4 V( W' E- s
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " C8 r6 C! u: `
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) F' {' I6 `6 I; Y, d6 w3 w9 P3 E% m
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));5 ?: Z8 b4 M% G; ~8 V7 L8 `
  246.       }- b2 N+ ?5 _* k8 X1 K" Q4 E  F
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    & i+ v$ c" a/ T/ G7 H
  248.       sprintf(filename,"(%s)",file->file);, B; N& S) p6 Y! q1 |
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : p$ R! |7 [" }0 I5 W" w& f! v
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " S# c" }$ u- ^& m
  251.     }2 d- u: H' x/ x+ B+ U
  252.     dwCurrFile++;% {! T1 W4 L& v2 `0 [8 X$ \0 Y
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , _. q# C$ d' q/ ?" z
  254.     {
    ' Q* `1 c( g. T1 X" H. A7 A- Z) f
  255.       bSilentStep=FALSE;
      y8 @# u! F6 L& Q+ C
  256.       bCompressed=TRUE;
    % j+ K7 [- p5 m' q% T
  257.       strExtLocal.Empty();
    4 W8 H1 Y) v, o0 w* b
  258.       strFullName=(*i).second;9 \& w8 i$ r* F" Q: O, }
  259.       dwProgramState=AP_CONNECT;
    # R- J+ I6 D" w1 O! w  A6 s# b
  260.       return TRUE;6 C0 H1 L9 s' P$ V8 j# A
  261.     }) N6 C. }! V7 a) ?1 [8 w4 g: p
  262.     if(!bRestartUpdater)
    % P: i" `, D4 S0 [! B, S0 d
  263.     {4 i+ b  y: O) F8 M1 M
  264.       int iCurrSize,iFileSize;
    7 g- q7 o( J1 u" Z# v* @' q
  265.       iCurrSize=0;; D3 H* f4 a& O( v8 Z: Y# K0 s
  266.       iFileSize=UpdateList2.size();
    $ z* |6 b3 _: L" K' H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ( }" e$ L/ p) M$ A
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ! S) |5 x% {: \$ U. R4 ^6 N
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");" A/ S" p) ^' \0 G
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ ~  V& w* H& V* P5 i( W
  271.       Fclearf(".\\update.dat");# \$ @2 F: O* Q
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    + q5 T) D, A" |3 k# ^( s- [
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)3 [  o! `2 j! x. y
  274.       {
    # _! e, w& m8 U6 F; L/ I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    . P% m2 P( z$ A- {, f9 L
  276.         {' V* j5 v) I! L6 b) V
  277.           file=(*p).second;
    2 z0 ^) j& T  e8 U: u6 S
  278.           sprintf(filename,"(%s)",file->file);
    & q5 y4 S: c- K: H% W
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & M8 F0 F" |! W4 `
  280.           iCurrSize++;6 v4 n; Y" h$ Y, h0 c
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));. O, r. S  m4 [  ~# V, ~  G  S
  282.         }* O9 x. n# V- O% p2 a, w& c" J+ j
  283.       }
    , t  T* W% p) {( T/ N0 u1 K
  284.       unlink(".\\update.txt");
    . R! ~5 @0 |+ g
  285.       unlink(".\\update.tmp");7 w/ M1 T! s# V5 t
  286.       Fclearf(".\\checkversion.dat");: j; W* }; J; I, D4 O9 j$ i- k
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);; r$ T- Q& ~# O: K; q% |) x
  288.       if(UpdateLocal.size())
    4 A+ ?/ I; y; a
  289.       {
    4 h- L3 [, }6 H- @3 Q
  290.         UpdateLocal.clear();: z5 n7 e/ N5 \- k" |5 u
  291.       }
    ; e% M* @+ o9 R
  292.       if(UpdateFile3.size())
    ( q: `" V+ i( R3 m
  293.       {* L3 _9 k" e) J2 O7 _6 x; m0 P, w
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 w1 s. M. j2 Y" R( l8 S7 E
  295.         {) S1 A( @& A" V# u1 y  }
  296.           file=(*p).second;& I5 `7 w  t9 x- W" ?, f- O' J1 `
  297.           free(file);
    2 L0 J* q% Q3 h
  298.         }
    ( Z* ^, S; j) T! u6 G
  299.         UpdateFile3.clear();
    5 }# \; k4 |6 z# B7 Y, S3 t: p
  300.         UpdateList3.clear();
    % f( G. ~4 v6 E" s
  301.       }- v; d4 d4 J) y+ b3 b( q# N( o3 @
  302.       if(UpdateFile2.size())! @/ m4 @! P' R* W& E& v! s/ h! s
  303.       {
    . C) C, l1 j3 c* g  @
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- T7 c2 V: R' p) N# a6 e' G" g; t
  305.         {
    ) Z" b; x' M) o% H; x% W( D
  306.           file=(*p).second;
    4 k3 q* Y; G* x; y5 u& g7 `
  307.           free(file);9 e5 C) }6 T( d  O7 M. H
  308.         }& n# \" N5 P9 @, e; _! `
  309.         UpdateFile2.clear();- o' P0 p% M) _* v' ^
  310.         UpdateList2.clear();
    8 e9 w  F2 j  _8 A7 w- V* m
  311.       }
    . D& ~7 R6 |2 W+ E4 `
  312.       if(UpdateFile1.size())0 r! H, B3 a* }- E
  313.       {" V4 W/ e' x& k% c8 c$ K
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( P1 Z/ u* E, y' T) [2 _3 R
  315.         {
    5 w( ~) x  o* I6 O' ^
  316.           file=(*p).second;; _  C( f5 V+ M
  317.           free(file);+ a& s" t, Z9 e9 o4 v0 y7 L
  318.         }0 u- @! P! N- J5 ]
  319.         UpdateFile1.clear();
    / d, E- n- S: E: w3 |8 O
  320.         UpdateList1.clear();
    0 A% m: g  I  J% Q) h$ C, E
  321.       }0 g3 L/ Z2 x7 A) H* ]. l) t
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    6 l! ]* g2 I7 g$ H
  323.     }
    * x) O& b+ j9 A* C/ X
  324.   }/ o: k- W( |0 F4 {9 }7 c0 i
  325.   return FALSE;
    ) d( O. |5 r7 W5 P
  326. }
    % _1 q( a! O2 M9 G( A$ B
  327. 5 m4 N! U1 v7 r3 k' |5 _3 K( g/ w2 b
  328. void CRevAppApp::ClearAll(void)" m) h0 u; Y/ K$ m: l
  329. {! P- Z2 w/ v* z+ ?
  330.   LPUPDATEFILE file;8 `7 ^( S+ g: Q, I( |/ d
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 G- u% h. X" Q1 a; i4 f4 \% `

  332. ( V( d" o8 Q) G" r7 W4 p0 B
  333.   if(UpdateLocal.size())6 Z1 F4 e7 ~; \( r
  334.   {
    9 {" i( ~! v8 `6 o5 x$ z6 a
  335.     UpdateLocal.clear();  v) ^! }- C3 j. q6 H* \
  336.   }
    - B& [( T- J8 [' u+ f" |$ i+ `
  337.   if(UpdateFile3.size())
    3 z$ s/ G4 v7 C7 _; o: t. {
  338.   {) V4 L" B, g6 m( |" b% G
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)& f9 l# V! q. l3 p
  340.     {6 ~0 l, H  @, Y
  341.       file=(*p).second;
    1 Q  e$ c# [& h
  342.       free(file);6 C' H4 k+ C$ V* S+ z
  343.     }
    5 k: @& g5 G% f/ j1 M+ o- q9 @2 U+ C
  344.     UpdateFile3.clear();
    / K6 I- `) Q+ J  a, {- Q# w
  345.     UpdateList3.clear();! d$ I/ X- a3 E  A" B- y
  346.   }4 B, W5 I1 z1 R+ p, @" S$ Z* c
  347.   if(UpdateFile2.size())+ P% y4 i( A6 p) c- m: }! T. O
  348.   {8 t5 v8 L( ]' j  n, \8 c
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - ?+ B; D& {$ V& b
  350.     {
    & |- i4 V: t% x5 }! \3 s
  351.       file=(*p).second;
    / n3 [" v$ q* P9 ]/ e! Z
  352.       free(file);
    , s' g, L6 R1 \5 Y( ?7 \
  353.     }
    & Y4 K, \. [+ V. f: j. P7 w+ v
  354.     UpdateFile2.clear();8 d8 i7 J0 x9 d* o. \% ?- \/ @
  355.     UpdateList2.clear();
    % U! s- R( n9 J. ~4 D' M; q
  356.   }
    ; d3 @; R6 ~: M' s) m8 V
  357.   if(UpdateFile1.size())
    : j1 y9 ~5 ?# \  Z8 a6 i
  358.   {9 Y7 o6 f$ t5 j; M& U+ [. l, F
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- I# |# R6 r: G, x. C& b& A8 L
  360.     {* H, i" H; Z' h6 L; Z
  361.       file=(*p).second;
    3 s6 q# B  ]" X) v
  362.       free(file);, }2 y. b: u" h& H$ U: ^* G! ]) x) M
  363.     }
    : m) p8 e) `8 M2 P9 ?
  364.     UpdateFile1.clear();! e) \, h2 i: [
  365.     UpdateList1.clear();& S8 Q& L; j  \# H. c7 F
  366.   }
    9 I9 F* ^$ w$ O$ U+ q4 _- r
  367. }  2 Z6 Q& J( d4 ]; G3 O$ g! x
  368.   + J- ]/ B- m1 B6 `& ^, Z$ `/ p
  369. BOOL CRevAppApp::CheckLocalVersion(void)( W3 E+ l  t# J4 X
  370. {$ }" Y2 l6 w# g# l3 P9 l
  371.   int c;
    # q" c  x6 C  I9 u, p7 F
  372.   LPUPDATEFILE file1,file2;: X" y) {: q9 }) h1 y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;. N( F* Z! |: S- Z2 q$ i" z4 `
  374.   std::list<CString>::iterator l;
    5 V# G9 [8 t* \. L
  375. ( m: g; ]: k) ?# a% \  ]6 `6 W5 m- Q
  376.   UpdateLocal.clear();) F% w- v9 U5 A
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);" q( C  X- k3 f9 h! s) O' H
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& h/ L2 p) ]7 |& u6 m1 f! g
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ( v2 N; B7 j. U: u
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' B# X. t0 @& w/ S
  381.   if(UpdateFile3.size())' y2 q7 L' n. u
  382.   {( g: W. C4 C. I5 G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)' w8 ~7 z& g6 \" O& }
  384.     {
    8 q( D# @3 v$ x- E5 y6 h9 e
  385.       file2=(LPUPDATEFILE)(*i).second;8 Z% u1 S3 l  `* @  w
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 x( I/ S- M# m: V3 E3 [/ V1 z* q
  387.       {. I: X: B+ B$ K, b! p
  388.         file1=(LPUPDATEFILE)(*p).second;3 D& K7 j5 L  X* I
  389.         file1->vers=file2->vers;& X. z( }" {8 @' k  R) x! Z0 w" n
  390.       }
    $ d' Y) P0 a8 u' f" N5 L; B  ~: R
  391.       else
    5 H, g* J/ b- S& T9 F. f% q
  392.       {$ u8 D7 P( `8 p) E: j
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 a/ j5 u9 a- u- [. x$ ^
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' E6 B0 |; s( E0 B; [9 d; l* _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    5 ?1 S/ K' z9 l  H, G
  396.       }
    1 m/ Z* Z8 U) s: M' [
  397.     }% G9 h4 Q& U( p6 P
  398.   }* N+ c6 G: m! G# L( j7 z  g5 P
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , r1 V! _% h! J8 T5 d
  400.   {
    . r+ v. h8 k& c( a: |) Y$ U7 T
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    7 I" k+ n. |; z1 z3 f5 g. j
  402.     {- g9 b0 I2 v* e* |5 U3 f
  403.       file2=(LPUPDATEFILE)(*i).second;
    8 `$ K6 D  d$ Z" K3 t' \) k0 ~/ q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); f+ a# B# G* I# F5 ~6 n
  405.       {# C3 r2 s9 N' U5 Q4 T' G; \: Q
  406.         file1=(LPUPDATEFILE)(*p).second;# n* h1 u  y# e( i) @, W  h
  407.         if(file1->vers!=file2->vers)9 G2 e  w+ F- i) `) k% B# A0 W1 g! j
  408.         {
    7 D: c+ W$ l; T6 g5 _! }- \8 ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 }, w0 S2 [  J( H' G
  410.           c++;
      Y2 s; E# K7 @8 i( ^8 N6 R
  411.         }
    ) G( F; O% ?* P" V( J" k& f
  412.       }; C0 n/ I2 \9 J- o: U$ j6 y
  413.       else
    $ d* l: O, w  r4 g% e
  414.       {# X; t4 S) Y2 }0 Z
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * G# U7 m4 ^% r4 i
  416.         c++;
    ! S, c. Q. _3 h8 ]( O
  417.       }) p2 ~+ Y0 M, h9 n8 w
  418.     }
    & X4 A3 L/ \! j: f0 v1 G
  419.   }
      Y- L9 d. ^( m" T/ {7 }
  420.   unlink(".\\DownLoad\\update.txt");
    / p* E3 u7 l+ Y6 v
  421.   if(UpdateLocal.size()) return TRUE;* T" v% ?% @2 G6 \0 n
  422.   else                   return FALSE;
    . Y9 U1 A2 Z* Z
  423. }
    8 @5 \/ a2 p8 `7 w8 }
  424. ; w% Z1 `1 \. H+ g- a
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"' p$ V5 Z; n( p) {
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ( a( W/ L8 P5 M, e* Y0 J
  427. ' L+ J9 g! t3 ^% i8 c

  428. ; Y" Y5 n( S- D: F) b  ^
  429. ! W$ z! C" b  G
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)3 p3 M; R4 x7 B1 l
  431. {0 y; f# l1 k2 W! o( k) G# s' ^4 I
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;7 Y  ~+ ^1 ]# c/ z: _  h4 b4 h
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 F2 z2 e1 ^0 g" E
  434.   {5 ~* c2 w" N5 u. {
  435.     char szLanguage[50];
    . |8 G: p+ @  `. P1 d
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 K3 h3 v+ s0 c! m+ T2 r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; @* l( E) {! u! B: ^& c/ Z, L" ]
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' @- P+ o- F) ?  z( K& Y
  439.     else                                   m_iLanguage=ENGLISH;
    , G% \. r3 X) K! E& y
  440.     char szRegister[100];  [' I8 x; @# Y* u" w
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    3 Y3 t8 x0 ^) L" i6 S$ ~2 V
  442.     strRegsName=szRegister;# C5 H. j4 c  z# k* u
  443.     char szPatchURL[100];
    & `6 \- P# J* y% m: [
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ; d; |$ _# e1 D' b5 Q  o
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) o7 j+ c3 s- J1 o  p* Y# F, u
  446.   }
    ) ?/ ?+ S& r* E" ^- `& L
  447.   else8 W0 O, M/ N0 Z  f& v5 \
  448.   {8 A6 ^  w# [& U! X
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ A" e3 C7 Y( c( e
  450.     strRegsName=DEFAULT_REG_URL;- h+ B3 u/ c. x) R) h6 K
  451.   }8 e: U1 e  U1 h% R# y8 W
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * k/ q3 _( B) R1 ^3 g4 F0 `7 L: I
  453.   {- |4 C+ B* V( |, c" A
  454.     char szIP[50];( J# L) G" N: V* J5 a7 @
  455.     char szDIR[300];# L# a% s$ E. {  z' W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    + r+ L: K1 a: D, U: S& ~
  457.     {7 e7 S4 I( o( w+ \4 C6 M6 F8 \* s
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");! J. U3 k& q' H/ ^7 M
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");1 }' w( H9 `, |9 y
  460.       strHostName=szIP;1 p8 |  z1 W% v- L
  461.       strHostPath.Format("/%s",szDIR);6 p( e% o2 U# @5 F' O& ]8 x; B' e  E* Q
  462.     }1 J( T8 _9 r7 I$ _( {2 R. s5 Q
  463.     else
      P5 e6 N+ q! A, z6 e# {
  464.     {: ]' }/ f7 W" e8 f8 H& L
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); A$ F. N. G, V, |4 c7 O6 D
  466.       {6 K. y6 g" g4 M* \% Q- z( Z% p  Y% E
  467.         char szLanguage[50];+ H( T  \5 q$ G% O
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; B' J# ^# ^+ X  m$ `3 o
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, N3 O' |4 w( r) d+ @
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 T% S$ S& U' K6 `2 P3 z! R* K
  471.         else                                   m_iLanguage=ENGLISH;
    ' R+ E  H  `. D: w
  472.         char szRegister[100];" H, s# j7 p2 X( l  T
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ; M) e' ]3 \! T+ R$ K
  474.         strRegsName=szRegister;" t5 L  Q: [; s7 y! a5 R
  475.         char szPatchURL[100];
    3 s9 q3 J+ A" D: `
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 b, v6 a# ~9 w
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      H  E8 E6 X$ g
  478.       }4 R1 }" }% D1 [( i& m2 Z0 _
  479.       else1 H3 b+ N( h) F5 m) o' Z! L
  480.       {" p9 @& U  v* @9 h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: r7 Q8 d( \0 j) T1 G9 a
  482.         strRegsName=DEFAULT_REG_URL;7 P. n  q0 D8 x1 B* S
  483.       }
    + W3 g5 G* R: `: D% Q4 }& A
  484.     }
    ' n* `  |( ?  a6 H* J" m
  485.   }
    + l6 e( F& l* H! u1 i! q: ?4 l
  486.   return true;+ L/ X" L) `0 z
  487. }5 G, v( A) x( F: v4 s

  488. ( m0 Y6 `% o& z- C8 n
  489. #include ".\ZLib\unzip.h"# \7 [( D/ Y. s. X9 O2 W) t3 A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);9 y: U9 o6 H% j1 [: _# j4 |
  491. /////////////////////////////////////////////////////////////////////////////& p- b0 X' X5 d( ^  C1 j
  492. // CRevAppApp initialization
    $ [7 a9 f. \1 X) b

  493. , z' `, b! M: y9 ^' V
  494. BOOL CRevAppApp::InitInstance()" [. g+ v+ N8 I- ]
  495. {3 O! e/ o  r8 z# h3 v, R6 i! R* _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    % ?5 `6 m% C/ o3 R- T
  497. ! I9 V& x- S7 w+ d$ D! o
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);9 l2 v  P/ e, p$ }6 y" M% ~7 N8 b
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    & A+ G, ]0 n+ K4 D9 W0 W9 o; J
  500.   {
    % N/ f, B7 @( ?: ~. e4 Q8 t
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! o4 \- t1 ?- D8 O% c' @0 T# r! G/ d, I$ S
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 ^# r7 E3 B! K- {7 C1 ~
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))  ]0 J1 J# x; O# m9 R
  504.     {; ?- k2 S2 m/ K
  505.       strcpy(szPath,szPathTarget);
    " J) g" x4 O+ W
  506.       SetCurrentDirectory(szPath);& e  M1 E# G7 Y8 V" P8 u
  507.     }
    $ {- Q# P( x0 R/ d8 ]& T
  508.   }
    8 F+ w6 x: v8 B5 r( y
  509. #ifdef _DEBUG; W' D+ J# R$ o4 ?6 x) R4 _
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 [4 c) [! [2 E8 z% a
  511. #else0 u) R0 D% j! U2 w* g
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 v- A3 t# F! s, B- k5 n
  513. #endif3 ]3 z1 f( A* g9 ?% A9 c6 N
  514.   {0 g: a2 ?+ F% C$ z* {
  515.     char tempFileName[MAX_PATH];7 E7 b6 l* n0 O) x, n1 D
  516.     strcpy(tempFileName,szPathSource);
    + g2 c- V; q  ?) Z
  517.     tempFileName[strlen(szPathSource)-12]=0;7 f5 U+ T  r( \( K2 E1 n# d
  518.     strcat(tempFileName,"\\$CSUpdate.exe");# c+ O' R" E; a9 J5 |3 s
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    0 \0 F% `% L1 D) k# I7 R. l7 E
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);, n( w9 t5 @9 m  z
  521.     return TRUE;' e. A: a2 W& J$ |0 P/ D3 _" z
  522.   }
    - y  i9 K+ B, N) f
  523.   // Nuke 0118: Delete run.exe
    ' A# [/ z4 j) P; b6 G; T. \
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    , G) C' ^( ?0 L8 U7 U
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");, M5 D3 L9 H, U/ x6 B# z$ i, o
  526.   if(!ReadCfgFile("Config.ini"))
    8 z- T! P, @! Y; b
  527.   {5 |$ p( N* W  B8 j
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    $ d: y# D8 ?1 T4 i' B
  529.     return TRUE;
    $ p& Y1 X- r1 J1 |
  530.   }
    6 t- P7 J( c: g( Y) u$ ~
  531.   HANDLE mutex;8 D6 j: x5 K* c6 T6 }. d
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))! \5 m- L* K$ \% M( a
  533.   {
    1 D9 W* E/ t% A; i
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)( ]$ I6 d) F# c. u
  535.     {
    + E$ t9 I+ I  n7 i
  536.       CloseHandle(mutex);+ o" a3 X% {& R0 `# K3 M7 D% O+ t/ N
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    . ]5 h; z( u* w! N
  538.       return TRUE;7 Q% L$ O, N& s* [) Q, O. d. J5 d: }
  539.     }1 W, W- \6 ~* g4 K& p9 o
  540.   }  1 i% o8 P5 ?% Z4 f5 [  v/ d0 W
  541.   CloseHandle(mutex);% L& l$ v3 w7 `

  542. 8 P9 D3 [6 y( e. p3 F" k
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);9 f7 X* O3 E+ d9 D2 b0 a1 |% V
  544. 9 g1 p2 s; j( Z! w
  545.         AfxEnableControlContainer();* u( B$ V6 b! E5 z4 V$ |. y$ h
  546. $ G, f9 u% j7 I' ^7 V) w% J5 V
  547.   bCanUpdate=FALSE;
    1 J, O9 T( c+ v: o+ V# u! Z
  548.   dwStartUpSteps=1;- S. p: m9 O$ q4 L& P) c
  549.   dwProgramState=AP_NOTHING;
    & f& f! Y+ h% L5 z9 s! U3 W

  550. % @4 n& N$ X/ w
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ U- r) _9 v4 t6 W0 Q2 j$ k
  552. 9 I, Q2 W- j% _1 f) b' [
  553.         // Standard initialization& p$ Q: u7 L3 f: _
  554.         // If you are not using these features and wish to reduce the size2 w: f3 G: K$ T$ U* j! b1 j# q
  555.         //  of your final executable, you should remove from the following
    $ R8 Q$ a% E7 L; D% X  C
  556.         //  the specific initialization routines you do not need.
    : y% b9 Y* `- A6 D* I2 H, P  r% O

  557. ; a0 x: W; H! g* c" Y
  558. #ifdef _AFXDLL: t3 R& k% a1 g" ^% w
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' ]% l$ k  V# H5 P5 p$ @
  560. #else" v0 H& u( D  s2 N* n
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically9 E+ ?  R" \9 E5 J6 Y# ~
  562. #endif; P/ ?$ E8 B7 s+ _: \: b: F

  563. 5 e& Y+ \, R, J5 j" B" [
  564.   dlg=new CRevAppDlg;
    6 |# N' ?9 z8 S+ W& t( p$ b
  565.   dlg->Create(IDD_REVAPP_DIALOG);
      s8 b, H1 Q# N- |7 w
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    & [& f$ E+ u7 d  t$ V8 I
  567.   m_pMainWnd=dlg;& u+ a) y4 h' I% |: D. e
  568. - a  c2 D& J$ D% j; t1 D3 O
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);/ T! J, `, D. s5 N  T
  570. # F2 l$ w$ H! P2 A4 Q/ W; ^
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ) r9 ?  L! n5 g# X' b" B' T2 f
  572. //  ULONG_PTR gdiplusToken;( T' @6 G% E2 _+ Y3 F
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    6 C' [# Z' z7 W, ~* h
  574. 8 Y" F& r- z4 i6 L- _/ w# j+ z5 k
  575. //        CRevAppDlg dlg;
    , }8 I: c4 h* ^
  576. //        int nResponse = dlg.DoModal();' C& |$ ?  E# K
  577. //        if (nResponse == IDOK)" I+ k- G# Y9 }* S
  578. //        {3 g4 U0 \4 \' F: D) t) X/ p/ Q
  579. //                // TODO: Place code here to handle when the dialog is: p. z2 z/ M! a5 |: d$ h: O
  580. //                //  dismissed with OK: J/ @& O0 K8 f
  581. //        }
    9 v- j6 Z2 V; @9 V9 g& o, H- e
  582. //        else if (nResponse == IDCANCEL)
    % d9 J5 R5 o. f# l+ J$ r
  583. //        {
    & x1 t* {* g" {0 a
  584. //                // TODO: Place code here to handle when the dialog is
    7 K$ C- {" o& A! A; c& J* C8 h
  585. //                //  dismissed with Cancel! W5 ?& o# \7 v& X8 S/ F
  586. //        }# v! X) L  \* i  f6 E2 K

  587. + O7 ^& f/ M( G0 e9 Q" `
  588.         // Since the dialog has been closed, return FALSE so that we exit the+ a0 n# Y" O+ k; ~& e- ]# X
  589.         //  application, rather than start the application's message pump.% ?7 ^% h  C6 k, i5 c
  590.         return TRUE;" ]2 N# Z  v1 e: N1 C
  591. }
    5 {5 Q6 \: u* F1 k9 Q/ L

  592. / z3 U7 ]3 L7 B2 N" L. a$ F: ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)/ c' K; X: i9 x" N6 q5 l- c
  594. {1 [$ R( j9 o3 L4 F% a8 ?9 ^
  595.   int i;
    ' |( R/ j; c4 D! B0 S3 W+ S) _; G- F
  596.   char *szRet;
    & d& V# Z0 S" p/ S( C0 p6 v8 v
  597. 2 s6 y. q+ N0 T$ C8 k( g
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ; R' f- c3 B/ c' L% }' T
  599.   if(sztoken)
    ! b& r3 t+ k0 y( p, i  Z5 m
  600.   {
      }% j" {" P/ q2 J3 P
  601.     szRet=&sztoken[itoken];4 g& u. ?- F& E; r( P  E# ]
  602.     while(sztoken[itoken])1 X* y% q6 f8 n7 _+ I- N
  603.     {
    ; v1 Z0 x8 L% r, T8 E
  604.       for(i=0;i<(int)strlen(token);i++)
    ' C! N$ Z* i( q& O9 P0 D( ^
  605.       {
    2 @1 W- R( Y5 W2 r/ J
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])# K" O3 [: {* t6 |; {. O' l- `
  607.         {2 X( i! ~+ m( b& b! s# ^
  608.           sztoken[itoken++]=0;9 W, _- n/ d3 v2 S& U2 W2 T
  609.           sztoken[itoken++]=0;
    ' O9 \6 V# q8 A, y$ U( w
  610.           return szRet;9 }% |1 O4 i" o. Q# W
  611.         }
    6 F  M1 A: l8 T- l' i* ]' Z4 N
  612.       }
    7 a) v; f+ e& \
  613.       itoken++;
    4 }/ A8 a/ m# e+ s1 E2 u
  614.     }/ k. k5 d% w- o
  615.   }- L' O4 Q* l! m: T8 l
  616.   return NULL;
    : G( k( {) q* C- @2 a9 I' Q
  617. }/ D$ D/ |) X1 t7 h5 H
  618. - G; F! k. S+ a/ e% o& S4 ?6 u
  619. void ProcessProc(long Total,long Current)
    : V% G+ p2 E( F& P
  620. {
    6 k; r9 G0 u& r! P
  621.         MSG msg;
    $ @& P" O& p# w* k$ o* z* f
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    3 x% g2 ]1 M9 J- v4 t$ P
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 E4 s0 W" c; O6 k- G
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 H, _2 {$ b* a. a+ U) \( b' w/ e
  625.         {7 h7 H# n# J) c& I9 r# a% Q# z
  626.                 if(!GetMessage(&msg,NULL,0,0))  z  p1 U9 y0 V' N: B5 O
  627.                 {' S8 a/ \4 O8 d& c0 @
  628.                         return;
    % i- y5 {% q. i/ K
  629.                 }
    " V* A6 K4 I2 ~1 ~
  630.                 TranslateMessage(&msg);
    + L) l8 D6 `5 ^
  631.                 DispatchMessage(&msg);
    1 w( f' @' m* Q" q: i) |' L
  632.         }       
    4 d5 z0 Q* x  P5 M. y; E( T) c
  633. }
    $ @4 G. _; q4 [, Q  t

  634. 1 Z2 k3 q: I  o' g  s
  635. BOOL bFirstChar=TRUE;
    ! T  K7 \. x5 z, Z  _/ K# j

  636. 0 o& n& ~) v9 O3 A" H& ~' F( c- B% T
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; ~% _! F/ F* W
  638. {
    0 F7 T! V2 X, L! r) @
  639.         // TODO: Add your specialized code here and/or call the base class, Y* o# z: k. z0 P) i/ }7 Z
  640.   switch(dwProgramState)
    , e/ U6 O: ]: Z/ |5 E' S/ u
  641.   {2 u# U( ~8 U) S3 H! }
  642.   case AP_NOTHING:
      }7 s1 {$ N$ y# D. B6 n( W
  643.     switch(dwStartUpSteps)3 o  w) ?& y# ~0 F. m1 a5 O
  644.     {
    : v- `. J' m! |$ K: b+ r' @3 b+ C, h
  645.     case 1:
    , C: r/ U9 }4 G$ m7 S( y" ?
  646.       {, x% r5 ^' j. Q
  647.         int i;. v6 o: Z; ~& z: j% k
  648.         CDC *pCDC=dlg->GetDC();" F4 ?1 \1 U4 d# K! v4 ]$ H
  649.         HDC hdcwnd=pCDC->m_hDC;$ U' ]# ]0 Y4 n3 S; v
  650. //        Graphics graphics(hdcwnd);
    - T8 j2 R# P" \# z6 Y3 ~- O6 i7 m
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    6 e2 C" Y. R. Y1 _) l0 E
  652. //        INT iWidth=bitmap.GetWidth();, y  J4 u3 _8 z1 G
  653. //        INT iHeight=bitmap.GetHeight();8 h; i# J- q! k, k1 Q
  654. //        Color color,colorTemp;+ t. z, I' \+ z' C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    , r; N7 N6 b1 o; y( J+ k7 O3 F
  656. //        {4 d1 }* `6 b$ v+ M6 j# d, v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ; ~# _* o  u2 J! o
  658. //          {
    : Z9 H" j/ ]$ \) u" y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    : k# O7 U3 \, b/ l. P+ j
  660. //            colorTemp.SetValue(color.MakeARGB(- N3 A! w  N8 z0 u' M
  661. //              (BYTE)(255*iColumn/iWidth),+ P5 v# p% c" _; W( I! C2 i
  662. //              color.GetRed(),
      r) z) M8 o% S! H/ j" K- R1 Y6 l8 o
  663. //              color.GetGreen(),: b* b* s! S/ ~# t+ R
  664. //              color.GetBlue()));, O! Y% P0 ~) F; X
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) |6 F: U6 @1 S
  666. //          }# h9 o3 j" N2 C  H; Z* X4 r5 T
  667. //        }$ ~: K, X! Y/ n0 B
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);+ C4 z0 q* {  }3 K
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 i, C  r* x5 T: S  s, f7 h
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ( K+ n$ C/ c* L% W& F( H. Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " P9 B; P- P' A7 T
  672.         for(i=0;i<240;i+=8). T& o6 p' N3 i
  673.         {
    ' b# O: k3 a4 f* G; S* T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( S8 A" S. n9 E" a2 y! C+ k6 M! s
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 g, X, a: c; o9 T
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 I9 d3 H" M+ e. G& G
  677.           Sleep(33);
    9 {5 |) {( U6 [  M
  678.         }5 W; e- t8 `9 q( ^
  679.         Sleep(1000);
    5 K; X! T9 u0 |8 w& J6 E1 V
  680.         for(i=240;i>0;i-=8)% E2 F7 w. J; C- f  m8 P4 P- u
  681.         {. G. Y9 Y6 F; v% v
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 {; n( o2 Y" D+ T
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);' h* u/ |9 N+ m7 }+ j
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - _& B2 }! \8 F1 d4 `! ~
  685.           Sleep(33);7 j7 [# k; u" y& n. o6 X1 L
  686.         }
    9 l/ ?9 r+ T6 Z% q. w# [  g
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 A4 A4 z- B4 \: N
  688.         dlg->ReleaseDC(pCDC);
    3 [0 i. u4 M, F, h
  689.         DeleteDC(hdctar);
    , V- V6 r: U4 B+ w! s% ]& M& \! f
  690.         DeleteDC(hdcsrc);! s* A% }% z8 Y% Y* x
  691.         DeleteDC(hdcorg);
    . j! z0 u* N  t
  692.       }
    1 x8 S1 U9 g" y4 L: r) [1 I" x
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);( P4 N% y; }9 c  k  h& M
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    6 S  P% o( q' \1 \. a0 `5 N
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
      h# D0 [3 l2 d' r3 S2 f  {
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");. J* G* k" ^5 `  p4 I
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * C& O$ x4 I3 ~* J
  698.       if(!Dn.Connected())+ P1 Y+ R1 p8 f3 R; [8 b
  699.       {! ~+ s& w/ z* q: {6 c& R! `6 Q
  700.         dwTotalFiles=1;
    , W1 y' {4 M/ V6 B7 @
  701.         dwDownLoaded=0;
    8 a9 Q+ E; A) I# r5 `# A8 B/ A
  702.         bSilentStep=TRUE;; J8 Q7 n, j! |5 C; P( x
  703.         bCompressed=FALSE;* H# U4 r% S9 k1 v# G" w
  704.         strExtLocal.Empty();3 e: L1 \$ i* \2 S
  705.         strFullName="readme.txt";
    7 U  _6 q- d$ u) ^* z
  706.         dwProgramState=AP_CONNECT;
    " p3 T+ c% @- Q4 z
  707.       }
    8 f% O  Y9 g. L2 X
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();- M* J" O! U  |' ~7 t' @2 p" R
  709.       dwStartUpSteps=2;" ?" Z6 @0 P2 D
  710.       break;7 D! X/ E, s4 U/ C& F* h4 ]6 [
  711.     case 2:( l# w( l2 B6 W$ D
  712.       {
    , P+ D2 n; q# z  c- q  X6 _( X& K
  713.         int iEOF;1 e# t+ D  I, b+ R! ]6 a5 _5 r
  714.         FILE *fp;  Z* ?0 o* R( P. T) A6 O
  715.         char szString[512];
    : [' H, r6 {  x
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    9 F8 ]0 t' I" \' L- K' r( R$ E5 w
  717.         if(fp)
    ' T* ~' a6 c/ B) c
  718.         {9 ]: d* Y/ V5 n
  719.           do7 Z% |: }. m, Q. x  }8 E  U
  720.           {, z- g' c; Q( o  n/ m) v
  721.             iEOF=fscanf(fp,"%s",szString);, |+ V8 s0 l. N, T( w8 ^% P/ s9 T
  722.             if(strlen(szString))& ]- {8 _. J: c; ]5 W
  723.             {4 B) }9 {# H# y. o% ~
  724.               if(bFirstChar)* o2 |& |/ c* A0 i/ k
  725.               {
    8 s) M) Y3 H2 f3 N/ Z2 `* Z
  726.                 bFirstChar=FALSE;' C6 o  |# b+ t1 N
  727.                 bConnectIsBig5=FALSE;
    . q7 n: l8 v: }7 K
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    * K( ?% j, i1 p1 @% c! U6 }
  729.               }: v4 {* Q; U) d6 L( C4 s0 g
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    4 [) N, O& k. @; q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));9 N' I: w- V# p2 g: d4 [
  732.               dlg->m_ListText.AddString(szString);
    9 }1 a& M9 P* V- W
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ s3 `& Z; \$ q
  734.               *szString=0;2 D, f4 T: r8 @2 e& Y+ y0 ?
  735.             }- K. s( i, b0 A- U4 t  Y, h, l6 O
  736.           } while(iEOF!=EOF);
    : X; b* T/ [' M6 \9 _7 r  i. M
  737.           fclose(fp);$ J3 Z* }3 g2 G& u& s
  738.           unlink(".\\DownLoad\\readme.txt");8 O- {% E; B+ |& ~( Z6 d4 |: u
  739.           dwStartUpSteps=3;. w0 m( X) ~. k9 A
  740.         }4 {( Z2 s1 s; x/ `4 N
  741.       }
    ' W+ n" g* J+ g2 [
  742.       break;. q( A7 T& U9 A8 M- L6 [, Q% L7 T
  743.     case 3:! I8 c/ _# ~+ U5 n4 ?2 m1 g
  744.       if(!Dn.Connected())
    % ?* ^0 V( I/ {3 Q
  745.       {7 {' G- K* s+ N5 a" R  A/ q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 q  T) X; ~1 y2 I
  747.         dwTotalFiles=1;9 R; E8 K3 F& S$ `
  748.         dwDownLoaded=0;* B8 `6 L( C4 Y/ E  t% }) s
  749.         bSilentStep=TRUE;
    1 c- I3 A; ^# o' g
  750.         bCompressed=FALSE;
    % @5 M7 G: x2 o( m1 i: y! u
  751.         strExtLocal.Empty();
    7 y* P+ |. Y* e8 A& z
  752.         strFullName="checkversion.txt";
    6 Z/ q; a3 j/ x& n
  753.         dwProgramState=AP_CONNECT;1 d& d. I4 X& n( r
  754.       }" W$ s, x3 D1 ^' @  r( U
  755.       dwStartUpSteps=4;
    1 F% e% T# Q) d+ [7 K
  756.       break;
    3 E- c& n  Q7 Q" C, q0 z
  757.     case 4:
    * \1 @# i, G- E2 ~! h9 S
  758.       {$ `- S) Q8 I  l2 s, Z- P
  759.         FILE *fp;
    ' ?7 j$ T7 Q4 ^3 u
  760.         char szString1[128];
    1 T9 Q! X8 c- }; Y
  761.         char szString2[128];$ |7 U& X/ j( b) Q( u. G7 D- y
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    . m0 j" \* A) _* q$ {" _9 K( c
  763.         if(fp)$ e( \' }: L4 H2 g: @6 I' j
  764.         {6 o2 u+ ^( p; D! s
  765.           fscanf(fp,"%s",szString1);, w6 }& k$ c2 k
  766.           fclose(fp);* t" s4 W, u, L2 g
  767.           fCheckVersion=atof(szString1);6 ?* w/ D8 e' i+ [
  768.           fp=fopen(".\\checkversion.dat","r");
    ) S" D  m4 ^+ P7 i! u0 o
  769.           if(fp)
    , l. ?# G2 u0 K% ^0 p, H# g
  770.           {
    ' \6 d' D4 s5 O
  771.             fscanf(fp,"%s",szString2);
    , |* V+ S4 ~" u8 \% i/ s, y
  772.             fclose(fp);
    ' ^) L- ?- H  d9 u
  773.             if(atof(szString1)!=atof(szString2))( p  J' P2 w9 v% V! {
  774.             {2 j" P! I) ~: r2 _; G5 ~
  775.               if(!Dn.Connected())
    2 ?6 @# G4 J% O/ ^& c" P; `
  776.               {
    4 k) N2 S( A* h
  777.                 bFirstUpdate=TRUE;0 C" [) t, ]. g  n+ a7 ]. `
  778.                 dwTotalFiles=1;9 c1 P& q- f) p" `/ m
  779.                 dwDownLoaded=0;
    & \1 F3 L* o5 n. N! x/ k1 X% G
  780.                 bSilentStep=FALSE;
      {9 m! }% G+ }6 ]: b  W9 ?
  781.                 bCompressed=TRUE;: {6 i) d" v5 ^9 h0 u& {9 X
  782.                 strExtLocal=".\\DownLoad\";0 b  E' T) T8 N  B8 ~+ q% w0 r
  783.                 strFullName="update.txt";. E# Y8 `7 g- I# O8 `3 l. Q! _( z) R
  784.                 dwProgramState=AP_CONNECT;
    ; T4 s- z5 k+ q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 Z/ g8 u9 v2 U$ L" j4 }: f
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 P5 H" j! g4 a4 S7 v
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");) n$ p# W/ m- G4 J1 w! ?& a" o4 n6 n
  788. 9 D% Q( U5 }5 w  d. ]) R) r
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 b1 t$ z0 T! D, T* C# p6 }
  790.                 unlink(".\\DownLoad\\checkversion.txt");# z# s9 n& z' f+ P1 D# P0 ?
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)( S! `4 b- R* }5 L3 g$ v
  792.                 {
    / r0 N. }! z- y+ w
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    1 F3 V# l& Y0 h2 T
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* B7 H: w8 D) J
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");2 f( P* g# v7 @0 N$ p6 z  u
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # |; V: A  V' X$ W# N( r& c

  797. 7 d& G/ ?& r  M) ?
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    6 A; F3 [( R7 C) t, R% o# y$ S3 Y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ L5 y8 y* a' Z7 s+ {
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");+ t4 a. Q+ B/ r/ f
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 V; @* C" `8 @4 D: E
  802.                 }5 P/ H7 ?6 y  K8 `* [4 q; x
  803.                 dwStartUpSteps=5;" O% A  t  E+ D& x3 n
  804.               }; Y2 b( f' n0 N& i+ e
  805.             }# h7 s: J& P) E
  806.             else6 l; Y# E) z0 R; B
  807.             {
    ( N% s$ J9 h2 p4 M- R
  808.               unlink(".\\DownLoad\\checkversion.txt");
    & \; C3 Q  O0 @/ B6 z; ?  j+ e
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' `6 I( W* b2 `; h
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");6 D+ Q) H: k% ~, M/ F1 |
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 i* c8 ]5 R$ U  v, J

  812. ; S& h& m& C9 `& @
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  o  s  U6 ], y# \
  814.               dwStartUpSteps=99;
    1 H+ n) o0 ]2 K' y' j- S2 J
  815.               bFinishUpdated=TRUE;
    0 V  }; \$ o4 r: X5 U4 {6 X" Q) c6 S
  816.               bCanUpdate=TRUE;0 ^1 S' J1 z. D# g2 o
  817.             }
    # B& n& s1 G# r4 m0 ^% v
  818.           }
    $ s" _- r6 S- }& q
  819.           else
    : A7 s0 x/ ~& J$ i! v
  820.           {' T( n% ?# R  k) u/ p: H
  821.             if(!Dn.Connected())6 \1 o6 t+ s$ T+ s5 d
  822.             {
    9 I. U- x& y2 O  H4 U/ `$ F/ m
  823.               bFirstUpdate=TRUE;( L' c7 H3 ?( t! Y+ }& \# e
  824.               dwTotalFiles=1;1 v" w$ e& ?" N3 U
  825.               dwDownLoaded=0;5 Y! H+ b" ]1 t6 Y' J
  826.               bSilentStep=FALSE;. {) \3 O, z" _1 V: a5 ^% M( M
  827.               bCompressed=TRUE;
    2 x5 O, A/ r3 D
  828.               strExtLocal=".\\DownLoad\";
      C; w! O, S+ Q% U
  829.               strFullName="update.txt";
    & W1 ^: P+ j. O9 A: I1 D
  830.               dwProgramState=AP_CONNECT;; p( Z0 x' H) Z, E# J
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; R$ U. E  u1 s2 B4 y( F; u5 K
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! {/ h. s+ Y4 j
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , ~( R! Z( Q# W% h) `
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' P$ J  A* w9 \0 a
  835.               unlink(".\\DownLoad\\checkversion.txt");' O$ v7 W, |( H; L* L/ I
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    * P" Z1 A* q% n" @# G
  837.               {9 l& L& M5 u9 @9 c9 }4 A  }- @
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");7 X# @; l4 E% J. O. W1 z2 g) n, ]
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    6 c8 W: O8 g) I$ z: d0 h
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");& |8 H! r0 ~# N1 X9 E# g0 u. ^, z# p
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' _* v3 x8 d7 h3 G3 ]0 X  V
  842.                 / N; t; Z/ Z4 s4 ]
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " e: M! |9 q" k
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    9 {2 j# j8 m  Q; a
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    & H, j& _0 n) J8 `$ Z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ O6 T- C7 ?8 V
  847.               }
    ( L# X) E5 t3 }, @* R* X
  848.               dwStartUpSteps=5;& L! H, F1 F' G4 q8 x
  849.             }  D: n& \% |& T+ z3 C0 |1 h. z) p
  850.           }+ D) x9 ~+ i; a+ F& @" ~
  851.         }
    8 r; \2 n, @0 g# f; }
  852.         else
    . h4 U" W6 x  ?. W5 ~
  853.         {
    ; m+ C1 J" Z0 u" g* K# u7 l
  854.           dwStartUpSteps=3;
    / f7 I3 Q5 m3 m
  855.         }7 w' N, \* C- I, s/ l& F% w
  856.       }0 J+ {0 E; Y, u0 N7 r4 a$ a  s! Y: I
  857.       break;
    , e' \2 W; ?. H  P
  858.     case 5:
    7 Q4 g0 R6 g# e- P# C
  859.       {
    ' \. j) Z" k/ v, e# \) j8 u
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    5 M  p* \& H  [* J( N" t
  861.         {4 H% Z& [; P7 @. s6 t! e& o! G
  862.           int opt_overwrite=1;
    ) r& b' ~1 \; q/ c& Z: \( V, D
  863.           int opt_do_extract_withoutpath=0;  w8 d# e) S# @
  864.           unzFile uf=NULL;
    ' V8 v4 x& L( W$ B+ P3 B
  865. ; F0 F* f+ j, S! d: Y
  866.           uf=unzOpen("Wsa.zip");8 k# ~1 f3 k9 m% S& H
  867.           if(uf)
    + ~9 L9 X7 u! P. m3 ]8 f4 q" E( @
  868.           {' \) N+ F8 |3 T9 z; Z! T
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);1 q7 }: Z) q5 ~& ^' H9 o
  870.             unzClose(uf);8 z2 ?2 t1 O* L7 T
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    * ]$ ~: Y, W$ W: Y( }' K+ F
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");  V( L; v$ {8 M5 r8 K( f/ _
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    8 p! }) p7 t+ e, |
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ h' X5 J  I  x( ]: B
  875.           }1 j+ h9 B5 ~) x
  876.           DeleteFile("Wsa.zip" );
    1 e4 j- y( o+ o: z/ V4 d0 e- ~/ u0 _/ }
  877.         }- f. W: N5 ^- z: d2 e

  878. $ C$ A" D* U; n
  879.         if(CheckLocalVersion())* n, M$ g* f' ]  Z" j7 ^! T
  880.         {
    + `8 [' o+ x" V7 m
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    . N- J$ M( U3 s4 ^: v! ~+ D
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");5 m7 y; N+ \0 ~0 H, ?% v- Q6 m( S3 |
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    $ x# }. C" z7 j
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + Y- F! y' z. C' n( p( G
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);! ^6 j6 `2 P; j6 X
  886.           dwStartUpSteps=99;; N: h6 ~: V3 C. a
  887.         }+ ~2 n  t% y( f, @: U1 q2 S* C
  888.         else
    6 @7 J) s/ F# N5 a
  889.         {
    # G! v1 o4 ~( P( C3 T# t4 h
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    # M+ Q  c( {$ T8 l% f. H/ X0 I9 }
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");: h" u8 a2 A6 f( P8 T6 h
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");5 A; [  Y, r" z5 W; c- o

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

. a; x% x  u( u* K
; n6 E' R& `0 G$ V

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-4 07:01

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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