CSUpdate.exe源代码

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

. t' `6 P! D( t% U; r5 v7 H0 ~- G
  1. / RevApp.cpp : Defines the class behaviors for the application.; e& G) U1 |! S: u" c
  2. //" |1 n$ l" a$ N
  3. & S$ x7 F  G0 r) b& U
  4. #include "stdafx.h"
    7 K3 c; F4 _& _6 i- `# e) ?

  5. ' v2 C0 P& K0 Q/ l2 C  r
  6. //#define UNICODE2 M+ ]: {) C# G) F1 ]4 \
  7. //#include <gdiplus.h>4 q9 r/ \; c4 T& L% S3 s
  8. //using namespace Gdiplus;
    # `3 N% S6 B% U' z8 c8 [6 j7 v
  9. ; d# U( U: j( l/ P
  10. #include "RevApp.h"" }% c8 Q0 x) a& ?% J, V( v- E
  11. #include "RevAppDlg.h"
    # p/ V  m) |7 Z

  12. 9 @+ O- o; o$ e/ R
  13. #pragma warning(disable:4786)- U1 V% E. i* M; N
  14. #include <map>( F/ x+ G+ p6 Q% H
  15. #include <list>7 _* G$ v. S0 |) L
  16. #include <direct.h>4 U# ?, }' ]: [8 e" N

  17. * U+ H$ m$ A, K1 T
  18. #ifdef _DEBUG
    ! l9 H( V" I: h8 Z5 d4 c, o
  19. #define new DEBUG_NEW
    . z: C, }! G1 [# g9 M+ j
  20. #undef THIS_FILE! y) x5 ?9 ?+ y& V7 K
  21. static char THIS_FILE[] = __FILE__;
    5 |* s$ T. b# l7 F* _9 Q
  22. #endif
    & J7 {9 d6 ?; c% q& _0 g& D
  23. #include "SkinResDef.h"
    ) ?* |9 E- W. U. Y5 ^$ o# |
  24. #include "ChangeBG.h"
    ' C6 D) L7 j# Y
  25. #include "AFXINET.H"0 F7 K- ]* F% p5 M
  26. # z! f: V' \" U# h; v% R5 D) S% \
  27. #define TRADITIONAL_CHINESE 09 P3 W9 Z5 D& `9 J
  28. #define SIMPLIFY_CHINESE 1
    0 r& M: b8 t$ g
  29. #define ENGLISH 20 a& L" q& V3 c9 E: c$ F3 ?3 ^4 s
  30. int m_iLanguage = ENGLISH;
    * M/ B% W& V( r0 o6 R  k
  31. /////////////////////////////////////////////////////////////////////////////
    4 [- P  t& ], ~- X5 N4 r
  32. // CRevAppApp
    ; m2 Z5 o2 R6 Q

  33. 4 c0 l' Q2 R7 x) J1 j% w& l
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    1 Q: d0 ~2 k6 P0 \1 y3 v+ X
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    # A! R$ K& p, g; W# q1 o3 g" [! m; O
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    1 X; J: w2 b, z
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    , @/ U5 i) s' f- a, ?; ?2 w7 V
  38.         //}}AFX_MSG9 t0 k$ s3 A& U) g
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    : C! ~; v. Y% f, c) _. U% J9 W
  40. END_MESSAGE_MAP()
    / T0 m. {5 E1 e" T9 r5 ?

  41. . k/ e* t9 ~7 R7 Q- E
  42. /////////////////////////////////////////////////////////////////////////////
    ) r3 N5 N, b" A( {# e9 w
  43. // CRevAppApp construction/ G+ K- O3 C+ X1 }- G; M9 o# f1 w

  44. # [& t9 @/ W6 Q
  45. CRevAppApp::CRevAppApp()
    ' O( p0 r& ?8 k/ R6 N- R
  46. {
    $ B3 V0 v$ W: T0 P
  47.         // TODO: add construction code here," Q& d0 O  ^3 p' [
  48.         // Place all significant initialization in InitInstance1 I" |2 G1 V& H2 w0 `3 L) b% H' v! v
  49.   bDisplayIsBig5=FALSE;
    4 U: Z" z8 o- q& {1 u
  50.   bRestartUpdater=FALSE;) f4 H9 ]; _% G; l
  51.   bFinishUpdated=FALSE;7 }4 b0 e  ~' D5 `( V
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    * Z. X, h2 A1 X' l
  53.   InitChangeDataBig52GBKS();
    4 D! u0 ?! w3 V9 a9 `$ \& }
  54.   InitChangeDataGBKS2Big5();
    2 `( \# o! J, [; R$ Q- v
  55.         //! v3 L; V% p8 y" P9 r9 l6 u
  56.         bClickRunExe = FALSE;6 h2 b6 _5 W  b9 D0 G' v/ k
  57.         //2 j1 z! P/ ~8 `8 m
  58. }
    7 {, a- F, O' W$ X. y
  59. + u6 ]  w) a3 ^/ S5 f7 B  t
  60. CRevAppApp::~CRevAppApp()
    / C7 N9 ?/ Y; A. }* ~
  61. {
    3 ]( \6 ?" \' d) [: ~# \& ^( ?! r
  62.         // TODO: add construction code here,
    4 S& l7 h6 V  r( a# E
  63.         // Place all significant initialization in InitInstance
    # v- s! A7 R2 q; o5 k# F+ t
  64.   EndChangeData();
    ; o6 p5 P; n8 j- x+ n' A: o4 [1 w
  65. }
    ' w7 X8 Z7 o$ ]; Q! f
  66.   L' w8 Y1 Z4 V! w* e7 `+ Y
  67. /////////////////////////////////////////////////////////////////////////////" Y7 o, x$ y3 ~2 E! Z
  68. // The one and only CRevAppApp object
    6 L2 _% C* Y+ _- E( K4 T

  69.   j) \( |2 x6 J9 q" e1 w. ~; q
  70. CRevAppApp theApp;5 O, `8 S9 s/ l& Q
  71. 9 Z# p1 z, h7 e3 i5 l* ~
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    / J! f& q7 z+ |3 w
  73. {# M; R" x* [5 m3 N3 C1 J9 X  a# [
  74.   int iEOF=0;
    / L0 ]7 v4 r$ P- I9 G+ m% W
  75.   char szTempName[MAX_PATH];
    0 x9 u1 s  K' b
  76.   *szFileName=0;; H( \3 C5 G, b/ H: S
  77.   iEOF=fscanf(fp,"%s",szTempName);
    3 T/ E$ t2 X5 P1 L( r6 ^2 X
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    . P' q9 _" l7 z
  79.   {4 ^- J* t" _% }; a
  80.     strcpy(szFileName,&szTempName[1]);, d2 b# i$ h1 h: j' y! |
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)' L1 r$ w! r! c. w' P" m2 y
  82.     {
    & j% n. e; q3 U+ ~' a) L
  83.       iEOF=fscanf(fp,"%s",szTempName);* D# B: L: r# b$ j+ w
  84.       strcat(szFileName," ");  j9 G' S. U; I) w5 R7 F+ e: ^
  85.       strcat(szFileName,szTempName);
      o3 S! r4 E8 A% u7 l
  86.     }% }+ Q1 A) r. [3 [( Y, n
  87.     if(strlen(szFileName)>=1)9 D. C: ^4 J2 u1 s9 P* q- I2 x
  88.     {
    ' n& J* T6 i" o1 _% X
  89.       szFileName[strlen(szFileName)-1]=0;0 u( y1 n5 d. H; y" i
  90.     }
    $ Q/ W4 M% n! |. E. h4 v8 ^5 v' C
  91.   }' y9 C1 Q+ t( ?& j
  92.   return szFileName;; c, {7 W# C+ W0 z( l
  93. }
    , k! c; I9 q) Y0 t% f& L! \

  94. , j2 m8 n5 R4 d
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    $ l# m! b+ A0 r- h+ D6 P( Q
  96. {/ P# H' d' l& O# {+ `
  97.   FILE *fp;
    . G0 B8 r% [  z  Z8 K
  98.   char *key=NULL;
    ! h5 K2 }5 ?4 N1 M  {
  99.   char version[MAX_PATH];
    9 \' Q, a: a  ?  a+ d
  100.   LPUPDATEFILE file,olds;
    % X3 j$ g& D- N# y2 M/ I
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 ?* k8 t* `2 o" r# n* N

  102.   }' N5 V" n0 ?' \- @& D# u
  103.   UpdateList.clear();' z' r4 Z* e; {
  104.   UpdateFile.clear();- \) i; Z# T2 O; J5 L. e
  105.   if(GetFileAttributes(filename)==-1) return false;
    + ~0 B: G2 K& ^! O* _, L4 d
  106.   if(!(fp=fopen(filename,"r"))) return false;0 W* O: P! d! O) D$ Z* q1 D, x
  107.   fscanf(fp,"%s",version);! X  j; C: }+ Z. F: ?
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    * h: S* D3 n+ s3 i' Y2 n9 r" \
  109.   while(fscanf(fp,"%s",version)!=EOF)
    3 g, V! A5 x  P3 {& @3 [7 H
  110.   {
    ( _* o! ^, @6 \9 I- a( }% V
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 I4 s4 @, t6 l) E9 S
  112.     fscanf(fp,"%s",file->path);* P; g+ l7 `# p/ j7 m
  113.     ReadFileNames(fp,file->file);
    6 B2 H' w! b8 H% O$ w
  114.     strcpy(file->full,".");
    5 v- U" t# M* B7 _6 J
  115.     strcat(file->full,file->path);
    ' l# W7 T: c, Z! D4 c' L% \% C
  116.     strcat(file->full,file->file);
    / e7 a& l! U8 k. T# H
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())6 M; N, ~2 y9 B6 g
  118.     {
    9 v: M4 F/ c2 \( ]% \) i
  119.       file->vers=(float)atof(version);
    6 I0 l* e. Q/ y8 S5 E1 b! z5 L
  120.       UpdateList.push_back(file->full);
    8 Z7 `- \& i8 D+ k
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    9 @# Q4 {! Q8 I; D4 x$ B4 t
  122.     }$ R( V" g/ U# N. t* K0 A$ \: s
  123.     else4 H; a; k2 Y& M/ M
  124.     {& I# B% w# g8 E9 i9 s$ R8 e6 s6 i/ K
  125.       olds=(*p).second;
    - q1 `, z1 v5 j0 x: p
  126.       if(olds->vers<(float)atof(version))
      I' p. ]) |; d& J
  127.       {
    8 m. L2 l0 s; S) j- k! J$ h
  128.         olds->vers=(float)atof(version);) |( u5 y  x' ^- ?, K1 W( j4 R
  129.       }8 ^) U. C  x, n; Z
  130.       free(file);! c3 |: b! Q" l/ b% Z
  131.     }
    ' K3 A3 r4 }( i' |& Z: D. ?
  132.   }* o' f* q- W: r
  133.   fclose(fp);
    / e. y0 _; `4 q, P) j
  134.   return true;
    $ S2 i, @9 S6 E: o4 z8 @% ]9 W; p. a
  135. }
    6 d: X' }% Y7 ?* E& s: N3 q! @* j* Z

  136. $ n4 }* V; y! b, {+ A
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    2 {- `% B# W, s: Y- B
  138. {1 z* k/ d% ?; m
  139.   TCHAR  szFull[MAX_PATH];
    & C8 I$ K, i9 [+ R0 F. {+ C
  140.   TCHAR *token,*inter;
    . m+ u' v( [& T9 q$ l/ p1 x
  141.   *szPath=0;+ Y8 M" |/ R* P0 A7 |
  142.   strcpy(szFull,szFullPath);
      |% C! R& y- f/ j/ B, v
  143.   token=strtok(szFull,"\\/");7 _9 g$ m; @7 d' S- i
  144.   inter=token;
    ; H3 V" N0 ?7 H% t
  145.   while(token=strtok(NULL,"\\/"))
    8 g9 a5 Q; N' `& k: a- r
  146.   {
    ) w# }. ?- W! |
  147.     strcat(szPath,inter);
    " q1 }7 d9 |& c  @$ P
  148.     strcat(szPath,"\");" P% g4 Y. B; X) Q
  149.     inter=token;4 a: l* V9 G  x0 l
  150.   }, z# M! n9 {5 e* U
  151.   return strlen(szPath);3 R# X  Z$ G2 t" [
  152. }+ i: i: G2 v! o3 x
  153. / w' n/ S% s& [4 n8 J4 j; R. {
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)8 P% ^$ v: ?* s2 f( \! {( S
  155. {6 D% N7 \% e: C  Y7 k
  156.   DWORD attrib=GetFileAttributes(Target);
    # m! W! A+ y  y' u3 E, z, |# p2 Y
  157.   if(attrib!=-1)
    8 M7 ]& }( I' _% q4 b# }4 N
  158.   {# n' G2 S* {8 T! Y% T/ q, k. u
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))% V9 J+ k" j/ p: f1 w2 s- d
  160.     {
    3 C5 a+ l3 e( e9 U  q/ X0 t
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);" W5 z- f$ A) M
  162.       SetFileAttributes(Target,attrib);7 n2 G& V3 }% H& g, K+ Y  C
  163.     }* v$ s+ M7 B+ \) B
  164.   }
    : p* K' K, Y* a3 U3 d6 D" e
  165.   CopyFile(Source,Target,Erase);+ o/ P3 h; c$ e0 F* P
  166. }) p: t. i+ ]  l" |' x) |

  167. + I" h) ?; f% M4 H# T2 F, v
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)$ w" W; K5 o  ?  t; U. i
  169. {3 Q1 c* d7 j1 I2 v5 O% |
  170.      FILE *fp;
    * o' m/ W) a: Q8 A8 k5 x& `: C
  171.      char  szBuffer[8192];" [# r% L  G8 A. p/ m0 q
  172.   va_list  argptr;
    ( t- V+ N6 g9 q' b3 y4 J
  173. $ x1 Y+ y4 A+ l" V8 V" Y; v4 P5 u
  174.         va_start(argptr,message);6 p, U/ K5 Y/ k8 d
  175.         vsprintf(szBuffer,message,argptr);( f5 u$ B2 e# r5 M8 p2 V' s
  176.         va_end(argptr);. Q9 b- g0 b) H$ O0 a
  177.   fp=fopen(FileName,"a");
      W. i1 G8 Z7 O$ t# g
  178.   if(fp)
    & p& U) L* u7 f: `" _4 J
  179.   {
    2 w' [6 J: h8 H  u  v
  180.     fprintf(fp,szBuffer);1 P# R; `1 q3 n" q- s( p8 h9 B
  181.     fclose(fp);
    ! s+ ]" ^/ x% p: J4 ^! j
  182.           _flushall();
    " s8 i: o+ E$ K9 k* }) E+ ]
  183.   }) [$ [; p/ T: I; b5 a8 [8 b" u
  184. }9 |% `' u  ^) m  t# ~) F

  185. $ V0 G- c( B' q8 Q. c" u& T9 a1 W" d& g
  186. BOOL CRevAppApp::Fclearf(char *FileName)& s- v3 x3 _+ J. B) C( u
  187. {. {" \/ e) w/ @2 V) H& z! ~) B
  188.      FILE *fp;
    2 j4 V9 P4 s( n- [8 C- T, _6 K
  189.     DWORD  attrib;& Y$ r2 s0 C& [9 U
  190.   attrib=GetFileAttributes(FileName);! n7 v3 e9 r+ p; _! W
  191.   if(attrib!=-1)
    9 k; ~9 L' l, p- p7 ]$ \
  192.   {+ M8 A% i# `# r) D  f
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);8 Z9 {/ L9 |! _
  194.     if(!SetFileAttributes(FileName,attrib))( N' O* [2 M' V/ j  X# x8 }
  195.     {
    5 V: Q& U" W! m& ], _  C! v
  196.       return FALSE;! H6 o3 C+ r" @5 P7 ?2 N6 n% L
  197.     }( k8 b. ]; `' m+ e7 b, J! B
  198.   }
    * g9 c8 Z6 _7 z$ n; C' E7 |
  199.   fp=fopen(FileName,"wb");
    , m- T4 G4 p5 [$ ^* S. x
  200.   if(fp)
    , M( Y* b0 B( V
  201.   {, L6 g  j) E4 c9 q) U! ^( c
  202.     fclose(fp);
    & o* z/ O! X0 U+ S* i5 b# j
  203.   }- O5 s! Z/ d& ?* i6 Q7 {
  204.   return TRUE;& @0 A' `/ z$ W
  205. }
    + @, J& _" f8 E
  206. ; ~2 l, H% y( T
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 M4 f& D2 D4 I, C4 A1 b: z: x" T
  208. {
    & |) J1 c$ }6 j2 ?6 H3 V" U* E% g
  209.   char filename[MAX_PATH];
    % N# \5 v5 g/ U- A* |7 S: S
  210.   LPUPDATEFILE file,olds;' R  \& O( T$ W
  211.   std::map<int,CString>::iterator i;
    ' J8 N0 f* B5 W- W/ y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    / i) e/ X# }1 n7 |: ?
  213.   std::list<CString>::iterator l;
    . ]% G5 b) }: n  E# M% c! T" G6 |8 p

  214. 0 S9 P- L! a" {; d. B
  215.   if(bFirstUpdate)
    7 D" c& Z/ F1 F3 _
  216.   {
    ( e6 Q$ o2 A- o) B+ B: J. W# D
  217.     dwCurrFile=0;9 _( X$ E8 u+ d8 {" ~6 Q
  218.     bFirstUpdate=FALSE;$ ^7 [4 k' P& H! |. r) h
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) F4 l+ g, X- T
  220.     {
    % l  L+ H) F2 G9 \
  221.       dwTotalFiles=UpdateLocal.size();
    2 {6 |( y+ p2 u7 a
  222.       dwDownLoaded=0;
    * F* e& y% b' F# |& @; t# Y5 C9 i
  223.       bSilentStep=FALSE;
    & K0 I8 x* v- s* j+ ^9 N' k: i4 h
  224.       bCompressed=TRUE;" G: O) b9 ]- }  Q: _
  225.       strExtLocal.Empty();
    0 m' }6 f3 \# h0 {5 d
  226.       strFullName=(*i).second;
    0 m; Y! n+ l1 X4 ]) {6 |
  227.       dwProgramState=AP_CONNECT;
    9 e) U3 [+ R6 F: @% h
  228.       return TRUE;% U- R# o* m0 `8 b8 N5 Y/ v: \
  229.     }
    8 c: M0 N/ v0 ^' T. ]8 f3 D
  230.   }5 F: ?" R; ~9 L  C
  231.   else if(bRestartUpdater==FALSE)6 I- ?' E" J- K0 a
  232.   {0 v7 ~9 q6 o2 `$ x- W9 L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    4 v8 u$ w! A; ]/ q7 F
  234.     {% b, l# ~7 u7 Q3 O  C
  235.       file=(*p).second;$ U# ^+ p% ?0 Q6 N8 \
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())% A  W/ `/ c, a) V/ ]
  237.       {! g7 {3 n" i7 `& M) J# C
  238.         olds=(*p).second;; d) R. }1 t( B1 h* e" u
  239.         olds->vers=file->vers;% ?7 U* z/ F7 p6 D' `0 I
  240.       }& S& [4 ^/ N* ~' ?  s6 U! S
  241.       else6 n, e$ r+ _9 c  r* o; b- r
  242.       {
    - I, Q$ S; Y" E2 {
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. _% p9 {- w( O
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ' Y$ X& H5 C/ J- Q7 `- Q: x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    2 X9 P! [) p& z3 ~
  246.       }
    9 P4 k; p0 b* _, R* w
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");0 i% O2 G# ~2 `) Y! ^* O
  248.       sprintf(filename,"(%s)",file->file);0 u9 k; \+ Z# @, T5 f
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ) X% u, H/ T0 [2 {( q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " [' _5 z) V9 I2 R  A1 C
  251.     }
    1 {: R# Q9 @. U/ B3 R7 ]0 |/ h& t
  252.     dwCurrFile++;
      i' _  [; [8 k5 C$ B# w7 ~
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())' J8 n2 ^5 ?2 M7 ^+ k# J) W
  254.     {5 A# {9 ~" O# k
  255.       bSilentStep=FALSE;' A1 l  F% O: ^; Z% {% j2 ]- [
  256.       bCompressed=TRUE;
    % `5 T1 A, ?, I. Z) J4 z, K2 d
  257.       strExtLocal.Empty();
      p) Z# P) A6 K
  258.       strFullName=(*i).second;5 _' }% t# t2 Z( c
  259.       dwProgramState=AP_CONNECT;: z& L1 M" J5 L- g8 {4 b6 c
  260.       return TRUE;! [- |  t6 c% ]5 o, y! c
  261.     }
    . ]% f. }  \9 U/ K* c  w& _
  262.     if(!bRestartUpdater): m5 o/ w$ e- X6 E- @# c' g6 z
  263.     {, o- W/ ~0 {! m1 _+ _( [
  264.       int iCurrSize,iFileSize;: r/ b3 K- f9 [" E8 g2 ~, P  g
  265.       iCurrSize=0;' F) E6 Y1 J) w) W( q% e0 U
  266.       iFileSize=UpdateList2.size();
    ' |4 R! b% B7 I9 Z8 |
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 |, p5 q, f5 w6 w( F  B$ P
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");$ `; U; S5 J& i0 \5 W/ j
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    3 `- p# M) C/ P; s5 O; U5 M
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 @+ @/ j; Q, u$ ~
  271.       Fclearf(".\\update.dat");6 X3 K) ?( d4 V* Y8 s! W2 y) t7 L
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    9 i1 |+ ^3 L! Q6 B" L
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 g' f" ~0 `; j6 g$ M2 r! A2 v! S
  274.       {
    7 ]8 z5 W0 [# k* ^# n
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    / C  y9 a8 K% l6 v/ b& U- ]
  276.         {5 r# A1 p" X0 W: s: ?5 r3 X
  277.           file=(*p).second;
    " F: v& ^+ [9 X9 v, Z
  278.           sprintf(filename,"(%s)",file->file);
    ; T( L5 n5 I0 l% z9 x
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( Q, H+ {% V+ ?
  280.           iCurrSize++;, f, x+ C$ {8 U) R, [3 E% w7 u
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));" i! x: Z/ e! v' x5 T
  282.         }
    ) l$ C$ V8 L' [: ]0 C' E( Z
  283.       }
    , L+ h" z# p5 ]/ g& @$ P  n; a
  284.       unlink(".\\update.txt");
    ( s# N% K5 z0 C
  285.       unlink(".\\update.tmp");3 `. o' r* o5 m: M  M% a& @* w/ e! K
  286.       Fclearf(".\\checkversion.dat");- E; N- V; V8 c  @; I- S
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
      `: F& `( |3 x& w( g4 H( n
  288.       if(UpdateLocal.size()): n* u3 b: S; Z( a4 n2 f
  289.       {; G1 ?1 k1 e: e/ ~) n* c" b
  290.         UpdateLocal.clear();
    ) o  V) t8 I0 I( D
  291.       }
    6 p/ `' E2 X3 r. t* G  y3 S3 V8 v
  292.       if(UpdateFile3.size())
    # d, F0 H+ N% R7 n. ^! z% G
  293.       {+ I& X3 n  y; C, ?# o$ A4 E2 y1 r
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" D7 X8 c' a1 H# S: s  D
  295.         {! @- h, R2 W; I( u" I% }
  296.           file=(*p).second;
    7 X$ l( t( S. h
  297.           free(file);
    & l+ k5 [& A0 W
  298.         }
    7 K. P* i3 c( T! H: Z+ g8 q2 i8 ]
  299.         UpdateFile3.clear();. r) y& L0 t. z7 H
  300.         UpdateList3.clear();1 f8 a6 X8 R* _) x. i9 {  T9 D
  301.       }; _2 `) [4 U! G' d: Y
  302.       if(UpdateFile2.size())
    2 k' G% ~" A0 B' b1 e9 M3 C
  303.       {3 N0 b; c1 ^& H( Y8 s' {6 z
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) {- [$ F5 @  T1 d; E
  305.         {! M7 k: K* a, }/ r& X0 I
  306.           file=(*p).second;( q: \5 o8 p" b9 V
  307.           free(file);+ x7 I  J9 \: `9 S  t, E
  308.         }+ m6 U( I: p! [- G
  309.         UpdateFile2.clear();7 K2 d; i6 {8 w
  310.         UpdateList2.clear();6 z6 o" _- B( P# C5 j
  311.       }
    1 d9 ?1 `( G/ C6 a: I. f
  312.       if(UpdateFile1.size())
    % y* L( S  |! y# G/ w% s
  313.       {
    4 ]# q: p! X2 f/ X" V1 k
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ N# S) U$ \& L$ S* C- c- g
  315.         {
    5 L6 H2 N0 {2 J; c" ^" h$ L
  316.           file=(*p).second;
    4 T! d! A. M+ O2 W
  317.           free(file);! Y" M6 Z7 R  f* h: ]/ m* k" m
  318.         }
    % H" g. r0 d/ ^1 K: v
  319.         UpdateFile1.clear();
    7 C  N- I% e( l
  320.         UpdateList1.clear();3 O$ G" M- [6 y6 w7 T
  321.       }
    * o! c/ N) Y( `& r/ s& x
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));6 N' K; R5 M& U1 d
  323.     }
    0 n/ b6 @2 d* k- d# ^5 q" Y
  324.   }
    9 q5 ]4 w& P7 \& H" y; r$ F7 L
  325.   return FALSE;" v) D/ R5 d- i6 F6 ~
  326. }
    & f  p1 S; I2 a. K0 I

  327. : ]% f- a( U( c: F* j3 S
  328. void CRevAppApp::ClearAll(void)
    / J* H1 Y1 v: r) P' @! Q
  329. {
    % b) |9 |6 \; M6 n7 `! B0 S
  330.   LPUPDATEFILE file;* _  t9 K6 K! }; {2 p2 P+ j! b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;, P3 P4 b9 `4 U7 |' A3 x$ `

  332. $ J/ D* Q  m! T" r; ]1 a+ V0 u
  333.   if(UpdateLocal.size())7 ~8 R4 G. H$ V# _& ?
  334.   {/ x$ C& }1 }# W! \0 d5 T
  335.     UpdateLocal.clear();
    . R. _% q$ r& j' b+ O. T5 t
  336.   }
    6 j6 M) M( y% s( h
  337.   if(UpdateFile3.size())& J/ x+ q. @2 d9 F
  338.   {, s) y/ H% `' E( U0 K. L  m
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ `6 }2 p5 R  s) i# }& i
  340.     {
    2 C6 j2 X) U9 o$ G
  341.       file=(*p).second;
    # B5 h9 `3 _3 e4 g1 E% G0 P! M
  342.       free(file);0 ]( h2 c/ i' v! ?
  343.     }
    ! a% C  F8 c5 R, \; y
  344.     UpdateFile3.clear();* V7 |9 w* [5 c! T* t0 ?; ^7 Q9 T
  345.     UpdateList3.clear();* C( ?* b0 D0 W" D0 j/ _
  346.   }
    9 E2 b  T5 n. Z1 J# b' U
  347.   if(UpdateFile2.size())$ h2 t6 G, P; D" ]+ L: J
  348.   {
    + H2 d$ w# e" a, u0 }3 B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' e9 C; u2 i) Q* x! A" x5 Y
  350.     {
    ( a# t3 f4 t# w
  351.       file=(*p).second;
    * E% ]0 M) y0 e8 o2 E# E
  352.       free(file);
    0 P$ x# O: _% X1 E& I
  353.     }% h" e/ V+ {) F8 O- N' M( T
  354.     UpdateFile2.clear();8 A1 A' [4 l4 z& S/ P  ~" g
  355.     UpdateList2.clear();
    / R. ]/ j: x/ r& g% |
  356.   }4 h( S- ?  Q5 {' Q
  357.   if(UpdateFile1.size())
    3 O4 m3 H- ^3 _* [, b8 r$ ?2 u- t
  358.   {
    - S1 N$ r) F% ~$ ]
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . @' `/ S$ j# ^6 Q: m
  360.     {
    / @9 v/ j6 ^/ R0 W4 ~+ Y. K4 N
  361.       file=(*p).second;
    1 Q$ B7 u9 U! {3 n& V
  362.       free(file);" _; _9 e: N: V
  363.     }& C$ z2 ~! t+ v0 s# Z3 r. S; S8 c* r
  364.     UpdateFile1.clear();0 ]5 H0 a! \4 L) m' d
  365.     UpdateList1.clear();8 o$ c, t( n! f0 K
  366.   }$ d$ m/ D  A: ^( \+ v- Y
  367. }  ( Y7 c9 C- k  Q
  368.   
    , i1 [1 d; ?: N! [# f) t, T* _
  369. BOOL CRevAppApp::CheckLocalVersion(void)6 y  z: X% J* E6 s
  370. {3 J+ N" j+ w/ b0 \! o6 h, Y
  371.   int c;7 L: X8 d# {. r1 h' f5 E: c  D
  372.   LPUPDATEFILE file1,file2;6 W2 q1 I# U6 W, Y$ P: S* O) M
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    & r. k/ J' [( e1 K. g+ A
  374.   std::list<CString>::iterator l;1 P1 _# |: n' m) J4 h% z* q

  375. " c3 C- t7 j$ w; z% O; b8 Q' Y+ Y1 T
  376.   UpdateLocal.clear();
    % G( L2 w6 p! F8 u: E' L6 ?7 h& X
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    * E( \; J1 E+ m8 I0 }
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);- H. O# R- b, n% T# x/ F" d" M
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    5 M# P; {% p0 _! D# ?* m
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 r% i6 a; {, W7 ]! h. S7 A2 c
  381.   if(UpdateFile3.size())
    8 Z1 B4 g: G4 @/ u' Y4 P' t2 f
  382.   {
    ' M2 v+ j0 C4 f1 p6 f( L
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++), r; j! A/ Q0 j' M' T* U, e
  384.     {
    , d. Z  P8 [5 g" n: X
  385.       file2=(LPUPDATEFILE)(*i).second;" P) p0 @, z9 V
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 K0 Y1 M; K- F
  387.       {
    # R; T9 g  A( o( l
  388.         file1=(LPUPDATEFILE)(*p).second;1 Q; S! r, ~" {6 J- \
  389.         file1->vers=file2->vers;* P6 g0 j" \) c: Q9 J# `
  390.       }
    9 A' J. x, C. o
  391.       else/ c6 Q9 y" j/ D& U; l% F1 B' J
  392.       {& l; M) p, S9 g0 X8 v4 G# U; ~3 w" @
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: {3 L6 ~  u2 S' L( @
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 K* w/ e( n1 b  x. l" M( Z& a
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));' i1 S) A; ~) |0 s4 `" o3 o
  396.       }, W8 W7 s* y1 G2 _* y9 w
  397.     }* Z; i1 M: m5 J, e, r6 I
  398.   }# s5 W$ a0 x- N3 C  P7 T
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)9 x2 U% c; d* \3 q: D$ m
  400.   {
    ! r( D' r  s7 K8 {/ l
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    0 }* `: j% T7 v$ q3 s; ~
  402.     {
    1 X& O% T3 G; g+ L4 x- @
  403.       file2=(LPUPDATEFILE)(*i).second;- x& e: k* J6 J' S2 s% B
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 b8 _4 l* ^0 k! p, A7 `- A
  405.       {) p: d" K' {7 V% `
  406.         file1=(LPUPDATEFILE)(*p).second;
    ! e7 ^9 q  D  ^- {  |
  407.         if(file1->vers!=file2->vers)
    % ?: O2 I6 G$ F7 B$ W
  408.         {
    , e$ Q" T" |$ b" ~3 [6 V: P2 H
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 _) |! ?* [  [: k
  410.           c++;: X- R5 V6 T: O" ?
  411.         }4 O: {3 S# I9 X. F2 x+ u& N3 |
  412.       }
    2 G. J/ g+ c4 l
  413.       else: u" `; Y/ ]2 @8 w/ {! {
  414.       {8 e$ A$ k) m% P7 I' l3 w& n  u1 N
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 }6 [0 Q: t/ ~- C# I. l' z2 [+ g
  416.         c++;1 o7 O; p9 Y! J
  417.       }
    " B8 L3 Z% F, Q3 D
  418.     }
    3 L4 }& ~. S, w3 G. ]5 R
  419.   }
    - k3 _9 ~% f$ t/ T0 z4 N5 t
  420.   unlink(".\\DownLoad\\update.txt");
    7 M5 w6 {+ n) H) l% C% s$ Y. K
  421.   if(UpdateLocal.size()) return TRUE;
    4 x. u# z* I) }& P
  422.   else                   return FALSE;5 s: s0 b/ H  _" D0 [
  423. }
    : o3 C! u) \; M3 a0 W

  424. & F& o; i- |6 C/ l) k% X
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    # [" o. S, s, E. W& K
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"" {% y" L* J+ J" d

  427. ; R3 @. g1 o/ `' e7 b
  428. 1 a0 C3 w4 l% x: o8 c5 v# b  I

  429. ; O; j& |# Y- u3 i  l
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
      ^8 K9 y! [: W. k4 z
  431. {
    6 N+ B  r# T9 C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;" S1 ^) b  \4 w$ V$ q8 a
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 S* U+ t  d. [
  434.   {+ e/ x, a" f2 Y0 d4 D, N+ r1 `! H9 |
  435.     char szLanguage[50];
    5 l6 Y* v: L/ z8 t7 ?( l
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 A4 E( r+ {8 C( h& [. K
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + E! t; M, m* P) K+ G
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & J  M  E7 }: M; E5 t& v# v
  439.     else                                   m_iLanguage=ENGLISH;; q( `: A5 I+ J. O3 K
  440.     char szRegister[100];/ k6 P% c7 _; P4 a4 \; f! J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 ]% `  C7 C  E2 Z% d# I+ q4 r
  442.     strRegsName=szRegister;# g) N* Q, ]4 C# ^
  443.     char szPatchURL[100];: ]4 r% N# J# @& Y. m! @6 m
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 K2 J7 U9 n% y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 M1 ?$ V( E+ ~: g  [8 u
  446.   }& i& S. l0 f3 t6 _; `8 o  R
  447.   else) m3 ?" f  u& @2 q0 s! C6 _
  448.   {3 J7 X, r1 {* n9 a. j8 g3 n0 p: n5 v
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* S, j' O. Y4 |9 @8 Q4 I' h
  450.     strRegsName=DEFAULT_REG_URL;
    ; Q3 g# @  c7 z" x5 V. G
  451.   }
    * F) K3 C; ]9 z( L2 B
  452.   if(GetFileAttributes("hosts.ini")!=-1)4 b8 ]( G5 j, J/ u3 T
  453.   {' r3 t5 @( n0 Y
  454.     char szIP[50];
    ' p" o) J8 c  I6 C2 w
  455.     char szDIR[300];
    ! b. L# \; g' K2 |7 t5 ]: ^
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ) ]- D9 Q# a2 p9 L; C
  457.     {  B* w" e  ^7 ?; w+ p4 m1 }' z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");7 U( b  f) Q6 u( D
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");* e3 Z0 z! L; r( t8 m6 r- o7 A
  460.       strHostName=szIP;1 A9 R; h8 S: b2 ?
  461.       strHostPath.Format("/%s",szDIR);0 F3 D2 `+ h8 a5 J3 x( Z
  462.     }4 [9 X7 j2 V: K5 J5 J& l+ \
  463.     else
    " `* l- e0 c, f9 ?. B, }
  464.     {$ |) j5 ~1 B# ^% I/ K3 ?/ w
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - i$ `6 i& u7 U! d
  466.       {) h& B2 p1 h' N3 \
  467.         char szLanguage[50];# {& W0 W- `+ D6 t7 ]
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: q' z! w# \/ F. i
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : U' S$ M4 ~* b, o) h4 ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  A/ B- Z. Z/ E5 A2 w* y4 D
  471.         else                                   m_iLanguage=ENGLISH;) c5 r$ x& W8 ~8 X) e
  472.         char szRegister[100];
    / q% D" P* ]" l4 `/ S
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" G8 i/ Y3 \$ y* e, ]
  474.         strRegsName=szRegister;8 n2 w3 v" Q9 i6 m
  475.         char szPatchURL[100];5 b7 \' u: Y. C( M$ o( o
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 Q3 P( Y5 F! V, X, t
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 n1 X$ i8 G& N: n+ ?
  478.       }& m- O6 i' f3 Q3 [7 Z! j
  479.       else
    9 q+ |! ]# k& g5 c6 |7 r2 B* f
  480.       {* V( \, c: w+ L7 P3 ?9 M
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( c0 v% W/ ~% G0 m" {6 m8 K2 Z
  482.         strRegsName=DEFAULT_REG_URL;
    ) J( F7 i$ t+ X, w
  483.       }. |: q% r5 a' p& w# E$ g
  484.     }
    2 P0 L5 k! t1 l" C( P) I
  485.   }
    3 f9 t2 B% d. r; z& X2 F9 U  T
  486.   return true;0 o. i0 u0 L; f/ e3 N3 Z
  487. }
    + }) o; D! K- L4 |( i' t

  488. $ B- l2 E. a2 Q8 y6 j) |
  489. #include ".\ZLib\unzip.h"
    ' R; B% s+ {: F: O2 Z* P2 {; r
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    6 e; Z5 e% ~9 k. t& y: f  D
  491. /////////////////////////////////////////////////////////////////////////////7 p# E" N# r/ ^4 @; O: }
  492. // CRevAppApp initialization" }$ q1 H( }( x: {0 f* z2 t
  493. : h' a7 M4 c" q' d
  494. BOOL CRevAppApp::InitInstance()
    0 ^, P& x8 M- c+ C
  495. {
    : V0 ^0 E. F0 W$ r2 t
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    : b5 V/ B- A( s$ `
  497. + r/ q1 t4 Z$ V# G: H
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);% h1 J+ {) q2 |& A
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    - n# y# B+ i2 D, h7 h% r
  500.   {! ~, x3 S; _+ H+ t0 E' ^
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    7 D8 _" o; S' K! O1 K4 w
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& q/ O6 J- L: o$ n# {0 T
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ) Z+ d5 Z5 B' F5 Y- |6 W8 m0 ~
  504.     {
    / O: N- k: L9 f! p5 j
  505.       strcpy(szPath,szPathTarget);+ o: q3 h' u, o+ Q- C: }$ v/ ^' O
  506.       SetCurrentDirectory(szPath);$ B/ N" s/ V. t5 y9 l9 U- M3 @
  507.     }
    2 W4 V  ^3 S% R, I2 c2 G
  508.   }
    9 v$ x/ e$ E& V  d3 Y. R/ j; ?
  509. #ifdef _DEBUG
    " [' T7 F% Q4 d3 V. S' H8 f
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! E8 X( }# |% l- @9 K/ a
  511. #else) C$ s, D  j1 n( @: Y3 e3 e
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 z% p( f3 w! E1 `- }  k  Z
  513. #endif+ T- r; `, A" O8 T  Q8 ~9 N
  514.   {- |7 Z% p# ?3 y) x' a) y
  515.     char tempFileName[MAX_PATH];) N) x9 S7 d  j$ K6 [+ {% X9 F; ^1 g
  516.     strcpy(tempFileName,szPathSource);
    6 }. |! t' c! U: [( l3 T; H
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 E0 v. X. U1 t+ u
  518.     strcat(tempFileName,"\\$CSUpdate.exe");7 k* m: M3 ~5 p0 H/ i, X3 k5 m! {
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);# K2 T8 B1 E7 K9 s. q0 `$ _, j* O
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ' v4 S. O4 }  a3 u* O2 E7 x
  521.     return TRUE;
    ( q9 E. C; x) R6 g- K/ u
  522.   }+ p% \) N6 o& s% U3 j
  523.   // Nuke 0118: Delete run.exe
    . A7 T. Z- V+ v/ p2 D6 Q
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );( C3 G/ R; ^' T5 v
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    7 p0 l# {/ o4 I4 a
  526.   if(!ReadCfgFile("Config.ini"))
    * s4 U! s5 b2 ]
  527.   {
    9 X1 Y$ [, `, V7 U
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    & {" [5 T. j8 e% J' B1 m3 Q
  529.     return TRUE;( ~( f4 x, |, J
  530.   }
    5 S# D* {/ y% A+ B% n1 |
  531.   HANDLE mutex;
    % M9 a0 d0 {( H/ ^( c, X$ T4 {7 O
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 t& p( u( w; \7 r% w8 s  R5 H
  533.   {
    5 q2 ~9 G, w' \; s" d9 b9 X3 c6 j
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    4 M$ x3 R3 m7 K9 Q% y  h8 O& N, X4 ^! V
  535.     {  L( K; ?( t3 f; P/ w
  536.       CloseHandle(mutex);
    4 O- x7 N* ~, ]" \* Q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    , q* n& I4 a) z
  538.       return TRUE;
    0 F  e) Q& s& G4 Q
  539.     }
    - b+ [5 }, x, v) S+ h
  540.   }  
    ; O) Y$ {& K- x
  541.   CloseHandle(mutex);
    4 _  T0 u1 A3 d% o# X- X0 ~3 F
  542. ; H4 ?) ^0 j7 S! L  E3 P4 R4 H
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);- G* I" k2 R& j$ n+ s* z: ~

  544. 9 r2 \8 z& y% H4 X4 L
  545.         AfxEnableControlContainer();
    $ E% N+ W! H' T. T8 R: n
  546. . T9 y: e% ?8 O8 [$ x
  547.   bCanUpdate=FALSE;$ u; ]4 x- H3 u! `$ P3 W- d
  548.   dwStartUpSteps=1;
    7 \/ v. Y$ x2 T1 _% f
  549.   dwProgramState=AP_NOTHING;
    9 k" W. u0 e$ ]- U
  550. 6 c2 M( `& ]: D  D8 U! H" x, g) `, o
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ( _  h4 g, k8 z8 [/ u

  552. 8 u% [4 H6 ^- S. c
  553.         // Standard initialization
    ) I; @1 N& `# R3 U1 g( l" [
  554.         // If you are not using these features and wish to reduce the size: l6 z6 U$ @9 Z2 G
  555.         //  of your final executable, you should remove from the following+ u5 ^6 \3 b0 K7 Q/ L* U
  556.         //  the specific initialization routines you do not need.
    * w3 ^( e" F# q* f( g1 Q* R8 N* M* |4 C

  557. 6 y6 E; |2 I; \; X# X. z
  558. #ifdef _AFXDLL
    + C6 r7 u% p7 P
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 u; B/ ^) h: R8 z9 @
  560. #else$ n) Z5 z. R. S; \6 Y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically2 Z) O9 k; c% o8 j( a  l; i+ [
  562. #endif
    2 S) `3 q: ]/ L, V: y

  563. 8 c. O) ?$ Z  O9 i( v( C2 k) i' x
  564.   dlg=new CRevAppDlg;: }0 T% i* h( v$ p+ `1 k% {' P
  565.   dlg->Create(IDD_REVAPP_DIALOG);! d: D$ k1 f' x5 d( B, P% v
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ) g% p- K- `6 D6 c6 F1 E  Q! l
  567.   m_pMainWnd=dlg;
    2 [! s9 H1 y' a! i4 O

  568. 0 D) T. G4 |7 F0 H( H
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);  p" O4 b7 Y5 c- H

  570. 9 {; M# w# _8 K" T6 o* L. \
  571. //  GdiplusStartupInput gdiplusStartupInput;* O: X7 g: H- b: o! y3 I
  572. //  ULONG_PTR gdiplusToken;3 a' j& B3 ^* @6 P
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);. L" i6 q! w) i. E: K' {: X
  574. ' K% o; s# h# q
  575. //        CRevAppDlg dlg;
    , D0 }. A% s+ g9 L/ L
  576. //        int nResponse = dlg.DoModal();( m- @) h6 g: \$ @" y
  577. //        if (nResponse == IDOK)
    : ?. Q: R$ q( i, N4 B
  578. //        {* o- w; A  J- P- L" C! z$ j$ g
  579. //                // TODO: Place code here to handle when the dialog is
    1 @$ N- S/ h1 v) J: m9 j" `
  580. //                //  dismissed with OK
    & c3 u$ {* z! Y; D, c: h5 j
  581. //        }
    / f: v* g! b: p3 `) ~8 S
  582. //        else if (nResponse == IDCANCEL)+ j/ e, _6 y) d2 r
  583. //        {5 G" v, A1 X1 i7 O' B3 ?5 M
  584. //                // TODO: Place code here to handle when the dialog is" ~( e; A, }1 F( |. N/ g& A
  585. //                //  dismissed with Cancel  ]' [% O1 g5 h% l% {
  586. //        }
    ' z2 Y  n% t) T4 }

  587. ( A# k; h3 h1 s6 o/ ^
  588.         // Since the dialog has been closed, return FALSE so that we exit the1 K9 P4 q6 S! o1 W% O
  589.         //  application, rather than start the application's message pump.' w4 L) c) X4 x8 ~9 A* o/ p5 b1 i
  590.         return TRUE;2 ~3 H6 d  f8 ^& N
  591. }1 n( X0 G: @$ A$ }

  592. ) G) N; h7 u7 X7 ^
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    $ v" b. h7 n6 ?* a) t( ^- q
  594. {/ l! v: \4 D$ d$ t
  595.   int i;
    7 y  G, s' v3 r1 @
  596.   char *szRet;1 q+ W  ]" M* V( O7 l

  597. # f8 N$ \# y5 }2 ]( B2 Q
  598.   if(pSource) { itoken=0; sztoken=pSource; }- k7 s0 B' E! G7 e5 G, f% M
  599.   if(sztoken)1 ^" M  v( x' G, I6 a
  600.   {  d+ C" b! v% K0 g/ _$ ]5 ^0 h
  601.     szRet=&sztoken[itoken];4 G3 r3 k8 ]5 o& M2 X% S
  602.     while(sztoken[itoken])
    3 x. v8 h( ~0 ?
  603.     {  V3 f2 Y! K1 Q' u  r, C4 c
  604.       for(i=0;i<(int)strlen(token);i++)
      J! X, j( W& H( r+ g0 u" r# X
  605.       {
    3 b: w! T- G( o( ?) A) {
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    7 z8 {' L- c; ^
  607.         {
    " f1 l* y: O7 L: n6 {$ p
  608.           sztoken[itoken++]=0;: X' m  ~. w' U$ [, K9 i
  609.           sztoken[itoken++]=0;; R9 I7 {0 M0 ^+ }, b
  610.           return szRet;
    3 S2 g* [' [) S& ]7 e$ r9 Y
  611.         }9 m$ R: o# O; J7 g$ _7 `  v% m
  612.       }
    ; ~5 I8 L) ]# A2 k0 W, z: ^
  613.       itoken++;) V6 N) p/ |5 w& D$ k$ U. f+ m
  614.     }
    5 v* O1 y! x6 {7 F4 \/ T
  615.   }$ ^5 g! s6 J( e2 ~
  616.   return NULL;; r5 {: k  P  D4 T
  617. }/ W+ O) B' ]# J% L

  618. ( o( m1 [: P& t  h6 H1 W9 h% p: R
  619. void ProcessProc(long Total,long Current)6 \. U# W$ w" U1 B  O
  620. {- q" I5 ~0 t& f! Q3 Z
  621.         MSG msg;
    ; G+ i* N5 I1 r. @. c; @4 J
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);, ?. V# j' }, Y% q/ i! Y8 P8 T/ b
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ! t! Y# W- h, r. E9 F2 Y, \
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + y( Z. u- j' \3 G: b. k. P  _
  625.         {- J8 d  Q3 c# }" N4 l7 ~
  626.                 if(!GetMessage(&msg,NULL,0,0))+ c' j- r' B# q. E1 h" e
  627.                 {
    8 T6 ?0 |. [2 o+ }+ @( W
  628.                         return;
    ; e' p7 a9 R8 u/ M0 q* J
  629.                 }
    9 T7 a; N1 Z" o1 E8 g2 B' a
  630.                 TranslateMessage(&msg);
    , Z! P/ c; G) D* D3 b) s
  631.                 DispatchMessage(&msg);2 B3 n  Q- i- M/ B8 Y. {2 d& K0 u
  632.         }        & m, ~: R7 J9 w; i) L& x* u% U0 K; ^
  633. }& x0 q, A$ n, l- ]8 n
  634. 9 p, S5 G8 i5 y. p; w0 z/ K
  635. BOOL bFirstChar=TRUE;
    * r% q3 ?! ?! t* l
  636. / h7 l) H" x% x$ F# ~  X/ W3 K
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ( G0 g- V+ v6 f" i: P5 l) B/ C$ m
  638. {
    6 R7 Q$ O/ m5 {, G& [3 V
  639.         // TODO: Add your specialized code here and/or call the base class) |7 o1 ~6 z% t! H4 ]
  640.   switch(dwProgramState)
    8 _  o( }; n0 v  w& O
  641.   {4 ]. R/ O% p) V6 T; b! u* J2 e0 Y" |
  642.   case AP_NOTHING:
    / i2 \/ W( \" C( B9 ^7 Q+ I
  643.     switch(dwStartUpSteps)/ S. ~, T$ f% }; b4 Q
  644.     {
    1 q* e, t3 Q1 k  B
  645.     case 1:+ V# r, c: W3 A* v, I" P
  646.       {
    / X$ V  F* Y, z& _0 I- P1 o
  647.         int i;
    ' i. E5 @! R9 D: b* d$ s
  648.         CDC *pCDC=dlg->GetDC();
    ( ^  _' d, Q' l
  649.         HDC hdcwnd=pCDC->m_hDC;
    - O- f- P+ J$ d- `
  650. //        Graphics graphics(hdcwnd);
    . S' Y: t' b3 n8 v+ K, @
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    + M* j6 p5 x3 j# v4 P
  652. //        INT iWidth=bitmap.GetWidth();7 H9 a5 M' H. I
  653. //        INT iHeight=bitmap.GetHeight();& Y' `4 P! s$ h$ X
  654. //        Color color,colorTemp;2 u/ u* V0 p# S6 \+ H0 H  E4 `& d
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)  q3 ^' S6 z( D4 y% v6 V
  656. //        {
    " ]" E) f5 f7 b% N. L
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)4 u4 W* ]7 A) v# S+ b. E
  658. //          {
    : `' m: U- L- ^( S) J; n
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    % p6 @) Y/ U/ |3 i. i# s" l6 u) q
  660. //            colorTemp.SetValue(color.MakeARGB(
    ; u1 a- L5 u( y  e# e! E2 o
  661. //              (BYTE)(255*iColumn/iWidth),2 Z. w5 u) A& ^
  662. //              color.GetRed(),1 J  Z: @3 g# {; l: e7 A
  663. //              color.GetGreen(),& o$ }+ b9 o8 k. k' \
  664. //              color.GetBlue()));- `5 \" _  T& h- y: a
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    5 p/ h" q+ H5 H' `" C
  666. //          }
    8 @4 o* P% L/ O
  667. //        }5 M: I- f6 Q7 M8 _- r& I$ W' j  F
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);) d8 P% W: u3 M9 i
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" G/ ?7 Q2 p+ A; z" l0 F9 R
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 t' A5 w6 P  S) n- I% I2 |& U
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ [+ q8 d' x1 U6 S( N
  672.         for(i=0;i<240;i+=8)7 l" W5 ?' l9 M9 Z
  673.         {! ^" u& ~. @0 g8 ^( o: w+ i; \
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 a* U& l. x! N7 P' G4 o
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* E: v) s' g( ^' J
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);8 Z; s! S+ u: B, f! L8 }
  677.           Sleep(33);$ z, m0 n, ^. ^/ r( c9 o/ t7 r
  678.         }
    : W! j; D0 m/ U1 }1 z
  679.         Sleep(1000);
    $ t) F9 E& E; l5 }4 Y; d8 E
  680.         for(i=240;i>0;i-=8)' G4 f* t7 N! ?  v# y& p$ f2 x
  681.         {# ^8 y2 g5 k2 `$ p+ m1 w* _
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 j7 ]3 E" i4 O! l; a% w
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * |" C( g" a2 g' f  J
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& F# u0 a6 _3 {4 U$ [! i
  685.           Sleep(33);
    8 I* G: Y; O  ~
  686.         }
    + }2 h6 V4 Q1 l7 _1 O0 m
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ! }9 X% r* a9 C" b
  688.         dlg->ReleaseDC(pCDC);3 F# k" B1 L: ^! _; u4 w3 d
  689.         DeleteDC(hdctar);  `' }( G9 o# X$ ~
  690.         DeleteDC(hdcsrc);
    . f. [( z; W) A! i
  691.         DeleteDC(hdcorg);& `( G2 ?6 B, q; B8 P, a
  692.       }  o% E* k/ K/ q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 n. G. N' J$ h4 ~6 Y0 s( l5 s
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    1 B' \1 M9 D5 d: t
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");/ P! Q7 H# x$ \! ?( x% G, m; y
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    : I+ {# N8 _) V& L
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& S) X5 m. V! |: L3 `
  698.       if(!Dn.Connected())
    ; M3 }8 X9 j& b: b  |3 w
  699.       {* a9 }$ e4 L/ o' X
  700.         dwTotalFiles=1;
    ) \  K+ O6 p2 C2 K
  701.         dwDownLoaded=0;+ C/ u. j8 s. r
  702.         bSilentStep=TRUE;, z  i5 e& ?8 c: D2 A" x
  703.         bCompressed=FALSE;: }9 m* t' Y2 b2 H3 u  v  O
  704.         strExtLocal.Empty();/ Q$ K, D* M# ?% |8 U" a/ N
  705.         strFullName="readme.txt";4 }: q+ ]! N  v' f+ j
  706.         dwProgramState=AP_CONNECT;9 K* d+ q; v3 L4 L) @
  707.       }6 \3 `2 G: I, U6 y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();; X! {4 @' M+ T
  709.       dwStartUpSteps=2;4 w1 N* g) D" k( p, {7 k; e
  710.       break;. s# a- j$ L; s5 }  @) z
  711.     case 2:
    6 W$ A$ y0 ?. |* ~6 d6 ^
  712.       {
    0 H2 ]" `9 n) ~. e
  713.         int iEOF;- k, j0 A  R2 W$ e  z5 s* U! c
  714.         FILE *fp;; p! I* N1 W+ K3 {& _4 t
  715.         char szString[512];$ A3 ^5 |  W5 q' z: g9 x
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");" Z+ e3 f# L! v/ _- g
  717.         if(fp)
    : h" Q4 C0 z9 R
  718.         {6 P/ u. Q# ~: g4 c1 d" g; b# W
  719.           do$ j& w: d$ b: G1 h
  720.           {4 ?$ S/ E2 }9 M3 S+ [1 e6 U
  721.             iEOF=fscanf(fp,"%s",szString);
    4 H. G) f6 k  D) u9 D
  722.             if(strlen(szString))
    ( N4 y3 h& J  a1 e& P1 N
  723.             {) _% ?. I9 @3 I8 i6 [7 a0 D/ H1 [
  724.               if(bFirstChar)( ^" T7 ]! D' s# z" Q$ e
  725.               {
    * d6 Q- N6 w7 X7 o5 F
  726.                 bFirstChar=FALSE;
    # A4 r  d" E8 J" B: x
  727.                 bConnectIsBig5=FALSE;
    & e' g1 t  n  Y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;0 b( U0 Q: s* b) Q$ o" [1 M3 k" \7 P" d
  729.               }
    5 l! |. z6 x, r( s/ G8 u
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));2 y- E% z& @& W9 e  F6 c* d
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));% Q4 [- m; @  d+ L  `2 d5 |! Y
  732.               dlg->m_ListText.AddString(szString);
    " H& b5 N' M0 w8 z4 @! J0 A& {3 e
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / d) r6 n. r% v+ {
  734.               *szString=0;# R  `: O  w2 A4 u$ o* S
  735.             }
    9 O3 v/ j; D/ p4 g
  736.           } while(iEOF!=EOF);7 c: b$ K0 R1 L+ _( _2 G- U
  737.           fclose(fp);! o: |* @% k; @* ~7 w* Q
  738.           unlink(".\\DownLoad\\readme.txt");
    3 q$ e3 Y- U: a0 G# Q
  739.           dwStartUpSteps=3;
    ' v" [; S. r  r" O5 N7 F
  740.         }
    1 s' v7 Z3 i$ o: _4 j( G
  741.       }
    5 o  t; ^* {/ X, T
  742.       break;
    8 [! K" F9 \( Y; Z0 [
  743.     case 3:
    . S& V( R" E% @3 w4 X7 U2 Z" ^9 n
  744.       if(!Dn.Connected())
    1 P1 l- ?$ m( l9 w+ \% x" Z
  745.       {/ n2 ]7 [: f+ m; t$ [+ W& Q/ z, {
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ' ~1 y! x* ^# i/ E" F; o
  747.         dwTotalFiles=1;
    7 ?. G7 d1 W! t& |7 s" D
  748.         dwDownLoaded=0;3 [" o) }$ u9 o* ]7 }
  749.         bSilentStep=TRUE;
    3 X6 T; a5 a% x+ H+ x
  750.         bCompressed=FALSE;# h1 O0 z! G1 F0 z
  751.         strExtLocal.Empty();7 W7 E- O" i! _+ Y
  752.         strFullName="checkversion.txt";9 d; ~2 W  u* v, Y3 z3 _$ F/ `! x
  753.         dwProgramState=AP_CONNECT;
    8 H1 n1 P4 F* p1 e! k1 q
  754.       }
    ) D) w+ b; h4 d. [2 J$ w
  755.       dwStartUpSteps=4;
    ! p+ V/ |. D( g( x: _9 t
  756.       break;
    " S1 j) E! v5 @( y5 O! K, T( Y
  757.     case 4:
    $ B" F0 E4 F( v- [7 @/ h
  758.       {
    ( V0 O1 ?4 R3 C# z  s
  759.         FILE *fp;! P) Z" w$ p+ ^  @
  760.         char szString1[128];# x: P$ R# B. n( W% S
  761.         char szString2[128];
    1 @0 J) X4 v' V! N" b
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");$ P8 F. B3 s* j0 X3 U
  763.         if(fp)
    ) d2 {2 I$ v/ S5 N8 O5 T
  764.         {
    , w5 w. C# j' P7 o
  765.           fscanf(fp,"%s",szString1);8 V3 r) R5 Z- g4 v8 g) ^1 C
  766.           fclose(fp);
    ! j* t( K1 {% Q2 ]/ j3 Q# ?
  767.           fCheckVersion=atof(szString1);7 n! k% F  |* U8 B# s) f/ [* ?& k& x
  768.           fp=fopen(".\\checkversion.dat","r");
      V% B' H+ i3 P- X% k
  769.           if(fp)" L0 n+ l7 z* r1 ?7 G1 M
  770.           {& M* K' k' z& I, s! C6 ]% ^& k! x
  771.             fscanf(fp,"%s",szString2);
    6 y( |6 P. @' w
  772.             fclose(fp);
    / L- b& H9 J& Q; {3 G- P$ K) T
  773.             if(atof(szString1)!=atof(szString2))6 \: R( X+ P5 k+ \( U; a  K& h
  774.             {
    3 |4 `/ M1 r  ?4 I$ l6 F
  775.               if(!Dn.Connected())
    4 E4 A' g. k6 g
  776.               {
    ) d$ q; Z2 p6 t: N
  777.                 bFirstUpdate=TRUE;2 U2 [+ a0 H& K+ }
  778.                 dwTotalFiles=1;3 p7 p% p4 o+ v" R: m9 p
  779.                 dwDownLoaded=0;
    1 K1 l6 a8 P% U0 r. [* z: V
  780.                 bSilentStep=FALSE;
    : o4 j. Z1 [" ^; K, S& K- A2 M
  781.                 bCompressed=TRUE;& E" o2 ^, A  Q7 Z1 B' R
  782.                 strExtLocal=".\\DownLoad\";
    0 v+ q; ]" p$ @0 H/ t
  783.                 strFullName="update.txt";6 K/ W' i0 j+ b- H* c
  784.                 dwProgramState=AP_CONNECT;
    % H+ ~8 c7 ], ^% F, |. k+ ]
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : ~2 a' h, L5 [/ k6 Q
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 i& {# v: t1 M$ v
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");; C$ [' @5 P( [5 W. R4 s

  788. 6 c, F2 c/ t* a, P) ]6 C% q+ ^
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . T% q) k  V2 ]4 o
  790.                 unlink(".\\DownLoad\\checkversion.txt");' W+ y9 |/ S9 t( [) R6 u0 r! X
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; }, o8 f8 b/ h/ [3 V2 h4 \
  792.                 {
    , _" x/ y6 Y* ]3 Q: f
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");; [$ ~. g$ E/ r4 O
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");/ o4 n1 s: s2 m+ P+ ]5 }- l( K1 Y+ ]
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    3 G+ U" |3 s8 W, W1 }* ]3 f  E8 p/ a
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ V3 n) C& q  V7 f; `7 w
  797. ; f  p0 W2 Y" {1 z
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");' T5 e5 ]$ s) Q) c& A6 X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 v  I3 @9 k. r: F5 l) h+ D# T( s
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) \2 k0 g; R6 O0 Y  `% d7 I% a) T
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ s1 `! l8 E- u: e8 H1 m
  802.                 }/ m& M( c8 }  v2 j* K5 j
  803.                 dwStartUpSteps=5;
    1 x* T% [7 o6 c) T8 ?- _
  804.               }
    0 b5 Y8 q: p, ]& T7 y# W
  805.             }
    : o5 E" i! G* l3 I% v0 Y" a
  806.             else
    & i, f( H) h* [& V" f* H. P
  807.             {4 l; B4 O+ i& U+ m& |( d' |! I
  808.               unlink(".\\DownLoad\\checkversion.txt");
    + s  A3 N& A  x; U7 `
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& t% c6 L0 d6 w" h/ {1 q0 N
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ( ^% n" [5 W# K" M/ f+ ]( r( E, C, x
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    1 J! X0 q& P7 B
  812. - U0 b- _5 @  s/ q+ E2 ?3 V) g6 [) c: U
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : n2 J- N/ D+ w/ @: ~
  814.               dwStartUpSteps=99;
    ( q% ~- v! n! X
  815.               bFinishUpdated=TRUE;- W3 J3 I( m. P& q: w: A
  816.               bCanUpdate=TRUE;
    8 G1 b5 U7 \7 |( P# ]0 Y/ D
  817.             }- i1 K7 O/ g" }$ A5 Z
  818.           }
    + I6 g9 Z3 _( e' E1 [) Z
  819.           else1 e; |1 b' H5 I! K
  820.           {$ c, n& s0 W% P2 M( ^
  821.             if(!Dn.Connected())
    ; y) T) [& A0 l! U# R  M$ ^
  822.             {
    7 V5 @2 ?  }+ @4 d
  823.               bFirstUpdate=TRUE;( ?, h8 A& o- g! v
  824.               dwTotalFiles=1;
    ; ^$ [" _- T  t9 c( N* T! X- \5 L* |
  825.               dwDownLoaded=0;
    & S% b. U7 d3 h# Q
  826.               bSilentStep=FALSE;
    # N  L3 ^, d! o- b# }/ }
  827.               bCompressed=TRUE;
    ( S$ b; w" a6 n1 b1 Q' j
  828.               strExtLocal=".\\DownLoad\";
    8 [2 d. a# l; l; K2 q6 [# L) f
  829.               strFullName="update.txt";
    $ u$ {4 a4 I2 u  [( ]2 a' X. C' ^
  830.               dwProgramState=AP_CONNECT;
    8 a& }% q  g: _9 k. ?: W" W9 e/ X: C+ ]
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 q- f5 q  l* `0 U- s, q9 ~
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 K6 R  [/ `  V0 |2 m* u+ M4 S" ^% D
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");+ s; J' r! n: \
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( J! u5 w$ w1 `( w% U- f
  835.               unlink(".\\DownLoad\\checkversion.txt");
    + t% _6 Z6 ?8 Y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    0 d5 ^& q! p7 ]3 D7 V% }
  837.               {
    ) ^# B1 S, d, t+ i
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    5 N/ D" h* b% K: W! [
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");8 O6 u9 M2 O! r) Y* k8 _, b6 v
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");, r* I6 Y2 p: s6 U3 B
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 H& t0 h( i+ y  i3 {# u  o
  842.                 ( A& Z" v3 ~# Y' V' t) A
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  {$ E% J% ~1 ^- Z' e8 L* T- ~
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * D8 h$ ^5 y+ U, M1 z8 K/ T$ [/ e
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 {) w; T1 F4 t1 C: d% n5 f
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 j' t. {6 e) I" S
  847.               }
    4 {+ e' F) M$ w& m$ y
  848.               dwStartUpSteps=5;
      d3 j, ^4 ^" `8 y8 Z8 |$ n$ v
  849.             }
    3 B) B8 n5 ?3 @1 G/ `
  850.           }
    ( M0 j2 z1 S+ u1 O' U# \/ s
  851.         }
    : a2 O* {$ z5 p7 t- U$ a% I6 Y5 V
  852.         else; {7 P7 \$ q- @6 _
  853.         {
    2 J4 X, M& }( a' g3 J
  854.           dwStartUpSteps=3;  [- M: f) K6 f
  855.         }
    # r' u0 `6 x' P& M
  856.       }
    0 ^- T8 I1 d2 }& T
  857.       break;& ~+ j4 `& Z/ O$ J( a. b' w
  858.     case 5:
    * F1 d1 [; g3 P, Y
  859.       {+ H5 K) ]2 s" ?+ Q! ]
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    & b- Q" Z% M9 \' m  f
  861.         {* c6 H% b  c6 ~' b0 |- e1 f% _
  862.           int opt_overwrite=1;; [" O; w( ~. \: a7 t' a* |, a, w
  863.           int opt_do_extract_withoutpath=0;
    ) x6 A1 z# ]# o& k% L) t6 V: v, S
  864.           unzFile uf=NULL;# F( S5 R+ v- _2 V" Q: X

  865. + d9 q) ^4 b9 i. I
  866.           uf=unzOpen("Wsa.zip");: ~+ a, |: m( E$ L2 {* y1 t8 _
  867.           if(uf)4 R% {( i" c; }. Q$ K% ?8 ?
  868.           {: c: Y$ c* I0 a4 o% ?
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);  V# V3 Q0 H" c6 D
  870.             unzClose(uf);) _7 ~% Y0 y! @0 |- p
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    / P2 {# ~* o: {
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    / u/ B0 ?2 Y6 c4 B( d
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    5 D+ q# J9 s1 h: ~4 g, Z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 P) d' r1 e$ }' `. |
  875.           }
    # N4 X. V, o6 L( |2 V' M: Y
  876.           DeleteFile("Wsa.zip" );7 Z( ^/ w1 T$ m+ t# C! ~; A& g& C; o
  877.         }, R" b$ v% W; G! G% L/ M
  878. " L9 ?/ E% W9 Q( k8 A: R
  879.         if(CheckLocalVersion())' i3 a) Z3 \' L7 d+ J
  880.         {  }8 d4 l- u( {. N( R' |, p+ m
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");6 z& w3 ?" ]& x
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");7 s& u$ R% }  I' J5 d/ b2 I
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");2 x$ `4 d) U# m% ~! C  h$ ]7 h
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 c3 J7 |5 ~& c, _* B, h% i( L4 L
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ( ~+ M; C2 b4 s3 J8 P* J# d0 y
  886.           dwStartUpSteps=99;+ B0 \& b/ a3 e3 V' Q1 I6 y
  887.         }5 y3 O; ?. k4 y
  888.         else0 D* X: V# l5 c) ]2 a2 G" _
  889.         {  _9 @- {  z  L
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - q' V3 O1 ?$ |% o0 G
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");0 ^! B, y* d4 r$ v1 t
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");) ^- M/ K$ w- v7 k

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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