CSUpdate.exe源代码

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

  Q- f) K. E' X" F( N4 m
  1. / RevApp.cpp : Defines the class behaviors for the application.+ j& n3 X" e) ?  N
  2. //
    4 j. H/ [- [, D5 @) Z5 J/ G

  3. 6 ^9 c, r2 T5 H/ n  }
  4. #include "stdafx.h", U" ~9 h. f3 ~
  5. & z% S2 g% n4 u# g
  6. //#define UNICODE
    ; S9 x& g! j; }7 f3 K
  7. //#include <gdiplus.h>5 r; q1 p/ B5 y6 `. Q$ Y; I9 @
  8. //using namespace Gdiplus;6 W! l! t) \) `- S
  9. . _5 G; L8 s3 Z8 C2 h9 @' z1 c$ ^
  10. #include "RevApp.h"5 w& m* S* x+ N7 f) Z$ [: K) Y
  11. #include "RevAppDlg.h") c3 ~. n2 J( G. v
  12. 2 K6 c) i; ~' F6 ]" r
  13. #pragma warning(disable:4786); g0 Q' M8 \4 n0 c5 g
  14. #include <map>" G) z7 Z( r. p. R+ Q
  15. #include <list>
    " y' s3 b% \6 C- L! m
  16. #include <direct.h>
    ! J- F6 M; ]7 ?4 n: h

  17. 6 F/ w0 r, w4 e2 c+ o
  18. #ifdef _DEBUG
    ; Y2 @4 }$ A9 e# `* \
  19. #define new DEBUG_NEW
    / D5 E5 g+ B8 m6 S7 i9 J
  20. #undef THIS_FILE
    $ R6 W7 ~7 t5 s) r7 h
  21. static char THIS_FILE[] = __FILE__;
    * w" c9 W) I8 O
  22. #endif
    . G! @* l5 h0 h7 K& F) `* `
  23. #include "SkinResDef.h"
    9 X: n! Y5 L6 Z, X3 }
  24. #include "ChangeBG.h"
    6 N; C" Q; [: C4 v/ c+ q1 }
  25. #include "AFXINET.H"/ k( G. d: q: r- @1 G5 d9 P
  26. 9 ^! S% I1 I: y6 R) T
  27. #define TRADITIONAL_CHINESE 0
    / D& g3 }0 m2 \/ i4 m
  28. #define SIMPLIFY_CHINESE 14 v- l" u  U& a. r
  29. #define ENGLISH 2
    4 O" ^$ M5 ]4 Y0 D  m0 |. y8 C( g
  30. int m_iLanguage = ENGLISH;
    ' p- ?6 ^  r6 X! F6 C: a+ f
  31. /////////////////////////////////////////////////////////////////////////////+ S+ G6 h9 V5 E  m) P  j+ Q' E' U
  32. // CRevAppApp  b, c7 J6 Z  e

  33.   Z/ F% r' H" F. f/ M1 ?5 m
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ) J% b0 Z0 Z* X+ F1 b6 X9 D6 \
  35.         //{{AFX_MSG_MAP(CRevAppApp)7 \( K, `* n5 {
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    9 e' G# [9 Z; o& Q# X# _
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!5 C8 G2 ^1 r* K; t& d, Y. H8 H
  38.         //}}AFX_MSG
    ! d+ g; ^. n. N/ D! ~! @
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    6 F8 ~0 _0 x+ j4 m
  40. END_MESSAGE_MAP()
    " |6 j* O7 ]" Y$ F( x2 a' {2 i" ^, U

  41. ! V5 N. X7 n' C/ e: [
  42. /////////////////////////////////////////////////////////////////////////////% _* u* f# m1 m& i
  43. // CRevAppApp construction
    & B  U. Y1 p7 u7 S8 o6 k& E( U+ p

  44. / d  y  p, q" k" K4 A
  45. CRevAppApp::CRevAppApp()1 ]  S2 |0 @, V8 G7 ?
  46. {
    0 p* q- X0 x. ~- z
  47.         // TODO: add construction code here,; _1 E  n* V# z( n( Y  S8 [
  48.         // Place all significant initialization in InitInstance
    ; B' N  U5 i0 @/ }" ~1 y& T" O7 n
  49.   bDisplayIsBig5=FALSE;
    1 E. A7 w: e1 n% r* Q
  50.   bRestartUpdater=FALSE;
    # b) \- O- c9 _) g1 |3 `4 R
  51.   bFinishUpdated=FALSE;) G2 w+ n7 s' t1 I4 C* t
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;6 D: [5 U$ e' y' v$ K$ A% l
  53.   InitChangeDataBig52GBKS();% f' D" V) @# ^' N0 ]
  54.   InitChangeDataGBKS2Big5();
    $ ~$ ]# G. Z7 F4 j
  55.         //! W0 i- c' J3 l# U* l  w1 {
  56.         bClickRunExe = FALSE;
    + j. ?" I1 J  m3 {
  57.         //3 E: c) |3 N' n  E
  58. }8 j. g% R, k  L. }7 k0 T+ l* `( ~

  59. . @) V3 p1 J/ k1 g# J
  60. CRevAppApp::~CRevAppApp()
    # u& y" l1 _7 s5 i* D3 U3 W" k
  61. {, |2 z& P  V3 x. m4 T5 d
  62.         // TODO: add construction code here,3 f" X, I+ P7 o( V$ h
  63.         // Place all significant initialization in InitInstance
    ) B6 s+ f& ]/ U- U- H, B8 L! Z
  64.   EndChangeData();0 T/ w1 n0 z2 F
  65. }4 A3 m" v7 {8 C+ N) P7 x4 }# H
  66. + V# P* m8 U# @
  67. /////////////////////////////////////////////////////////////////////////////
    # B" t4 b1 n. p4 R! h9 f
  68. // The one and only CRevAppApp object# y# Y7 x5 s) Y0 U
  69. ) A( _$ T5 Z( F+ d, ^
  70. CRevAppApp theApp;
    ! o7 c2 M7 X8 Z  {6 m0 J! R2 V
  71. 6 s+ O/ e8 J& T( y3 A/ z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)1 u) E$ `9 B# v7 c9 g
  73. {% Z0 L$ Y) ^0 o- C" Y7 m6 t8 w
  74.   int iEOF=0;
    ; q4 W" X7 V4 j- v7 k- d
  75.   char szTempName[MAX_PATH];$ p( `8 l- t3 c$ K8 F( B! W
  76.   *szFileName=0;
    % R# ~7 [2 E5 J3 W: _/ q( ^
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ' n" B) F4 \7 z& k0 P! P
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    9 X5 Z; P0 |0 q+ n- g. b& W: ^
  79.   {' G3 p$ ^. t( a1 K
  80.     strcpy(szFileName,&szTempName[1]);
      [; O% L* n* n3 r3 ~' x
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    7 k7 b/ K5 t$ u- S- W: F
  82.     {
    3 ?8 d% J. k( v
  83.       iEOF=fscanf(fp,"%s",szTempName);$ R6 H1 v! ]! D, _/ p" q$ _
  84.       strcat(szFileName," ");' J6 @9 [' U0 N" I
  85.       strcat(szFileName,szTempName);, S5 ^3 G; E/ ]+ \: [
  86.     }
    0 y1 [5 h4 X+ T1 }1 O
  87.     if(strlen(szFileName)>=1)
    & q. i; [& \) U9 S; Y
  88.     {
    ! Y4 P9 |. I5 x. a+ N
  89.       szFileName[strlen(szFileName)-1]=0;
    . b% T8 u# A; |# _0 @" c6 v. M! d" o6 _
  90.     }
    * E2 J. @& E& i" ]7 |2 E
  91.   }3 G9 l; a4 O* p6 y/ w
  92.   return szFileName;
    . Y3 n& Z, m, G$ M: {
  93. }% z" R2 I$ h+ [
  94. % V8 z$ X) I/ n3 Y( c( Q9 _3 Z  P2 y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)4 ~- ]8 B/ n  Y5 K8 i
  96. {
    / H% c" P9 b; u0 W* [6 Q6 T
  97.   FILE *fp;
    . M, ?! u8 B8 E" A! V" h
  98.   char *key=NULL;
    * N+ O  a$ O4 Y. H
  99.   char version[MAX_PATH];4 B$ q6 C) b# o3 H6 G( [
  100.   LPUPDATEFILE file,olds;
    . }% g* X8 A* c8 l7 |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;( r7 M$ Y6 |0 o
  102. ) Z' c" c+ j7 H2 y2 {/ Y. o
  103.   UpdateList.clear();
    8 e" N  p) E3 n7 Z
  104.   UpdateFile.clear();
    " l) _; J- V- k9 \. n4 x: A
  105.   if(GetFileAttributes(filename)==-1) return false;( k: d+ C0 d$ W
  106.   if(!(fp=fopen(filename,"r"))) return false;6 A# Q9 D' i" l: z" B
  107.   fscanf(fp,"%s",version);! A0 r* P& q; }: l
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }5 B) D) A+ O1 e( j/ Z) z# Y
  109.   while(fscanf(fp,"%s",version)!=EOF)
    5 p7 W% Y; y* C6 K/ M5 J: r0 u
  110.   {9 p$ N/ d' g5 [$ K
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      f$ I( w# v9 A* }2 x! [/ y9 _
  112.     fscanf(fp,"%s",file->path);
    7 r3 ?; ?. M2 U3 F3 `
  113.     ReadFileNames(fp,file->file);7 O' {, h9 h% d7 u- A0 q) e# W8 Z0 f
  114.     strcpy(file->full,".");
    + o: n8 G' c9 X" w+ k4 B9 O8 l
  115.     strcat(file->full,file->path);! b4 a- k8 w" Q6 f& O* W
  116.     strcat(file->full,file->file);, }; e) Y6 ?# Z: O0 T+ A
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())( @' v; R3 ^. k/ C3 h' u' t% T
  118.     {
      u- D1 |! G5 C: a0 b) c1 n: k  [
  119.       file->vers=(float)atof(version);
    ! i2 N, H+ H+ z/ b4 ]- U
  120.       UpdateList.push_back(file->full);' \( R. ?; t; Y4 x8 v
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    - p& G$ n, L- I  I6 [' ?
  122.     }( T  L& T+ C- w; J2 h2 [; l
  123.     else6 h9 s4 c! K5 F" ^$ }3 Z. ], D7 H
  124.     {
    : ~& i5 k! [/ \5 I
  125.       olds=(*p).second;& T4 X) R( m, i# g: {) d3 p! s
  126.       if(olds->vers<(float)atof(version))3 Y" Z9 Z* N5 C1 n
  127.       {6 _6 A7 E: W. v, U! W' L
  128.         olds->vers=(float)atof(version);5 [8 I$ u: v+ L
  129.       }; R  }7 H$ ?0 \7 b
  130.       free(file);* M$ z3 i! L+ g0 l7 K, f* F$ W
  131.     }0 z6 R) s2 D& _+ q+ ~- N; V! X
  132.   }
    ! N# N8 w1 n  O' c1 f0 K
  133.   fclose(fp);
    4 h% w0 K9 y* k( r, O
  134.   return true;
    4 o0 e) Z' F+ E
  135. }
    & ~0 X, X- ?" Q0 [5 L
  136. 0 ]9 G8 P5 J2 W9 ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)" a/ c1 [$ s7 @3 X  L4 x1 q
  138. {* O. D8 `3 z8 K- F2 u
  139.   TCHAR  szFull[MAX_PATH];' u" ]3 P& O! v& T! a" j8 s% K$ U! u
  140.   TCHAR *token,*inter;
    # a% c+ f4 }! w% P+ n) X
  141.   *szPath=0;& s! M, ?" G* k4 ?1 x
  142.   strcpy(szFull,szFullPath);
    7 ?, Q% _, q% |0 K
  143.   token=strtok(szFull,"\\/");6 a7 K1 r) s9 R% i5 M8 ^# M9 S% I
  144.   inter=token;
    - F& M: \3 u( s1 c  z) \* x. J
  145.   while(token=strtok(NULL,"\\/"))  n( _4 I4 U( I0 K+ }
  146.   {2 T. B1 k* P" E( T( [% [
  147.     strcat(szPath,inter);$ r! [# }2 U( ]9 j/ z5 G9 m
  148.     strcat(szPath,"\");
    6 C8 R2 E  p; b5 }: g& E
  149.     inter=token;( h  Y( o' b5 ^: o# o
  150.   }
    9 `. d8 |1 t- ]
  151.   return strlen(szPath);
    $ b5 e5 a- `2 j. n7 b
  152. }% n7 U) P; O1 r7 S
  153. * z8 U7 y. o9 a* d  q/ g( [- N# i
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); G. Z8 K/ c- t
  155. {9 S  c$ ?( @9 W$ T
  156.   DWORD attrib=GetFileAttributes(Target);
    - N# [, j- T" e: t& w$ O! r1 J
  157.   if(attrib!=-1)
    + f0 C- j% L  I" @6 X. ]3 Y: Y; d* A
  158.   {
    / C6 N, |: p' Q* L
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    2 i& k; x5 B: L% h; W9 o
  160.     {2 H* L" v: f. {/ {' R% w8 Q# i
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    6 ^6 e8 I" P0 Y
  162.       SetFileAttributes(Target,attrib);+ U* G* Z3 W: `# e. T
  163.     }
    8 M$ Y% m# T1 G
  164.   }
    $ j! n3 s% ^& v( |
  165.   CopyFile(Source,Target,Erase);
    " ]% e" y% R& |/ P+ c( P
  166. }
    * k: j  E  n) v, t3 K/ I
  167. , }, E6 u- G5 w8 m/ x
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . {* @) Z% j+ p. m( |0 _) K
  169. {  Y) P# Q* y0 j* x/ h2 W+ `) |
  170.      FILE *fp;7 f2 i+ ~" v( j8 N! b9 m) a
  171.      char  szBuffer[8192];
    6 d, k) ]; n( a' u7 V( L9 d+ J
  172.   va_list  argptr;
    + H; P5 X' Y, D% M! a' w# H
  173. + M% Q( v+ N- k+ T6 L5 G) u
  174.         va_start(argptr,message);
    / e: }; }5 t! ~4 \* D! _& c, ]
  175.         vsprintf(szBuffer,message,argptr);0 D5 x% P% O! l8 _9 m& T
  176.         va_end(argptr);
    3 E8 I2 p+ J, k" v* Q2 M
  177.   fp=fopen(FileName,"a");
    " Q1 Q$ {3 ^( Q5 \. E0 x' d
  178.   if(fp)# y7 C" \$ p& q! P' S  b
  179.   {
    ) r+ r4 s, j1 {2 e- p
  180.     fprintf(fp,szBuffer);
    2 ?) _  W* ?# Q# Z) t
  181.     fclose(fp);
    % N7 U) Q! t2 b  U
  182.           _flushall();
    & e# A% R  ~1 Q. p3 W
  183.   }
    4 o' ~6 j0 V7 G
  184. }
    ; M2 Q: A% v1 `1 G1 w0 u6 y9 g6 u" l

  185. # s6 S) b1 ]( \" I) R8 F
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    - y. I/ z3 u0 l7 x, N# Z) A& s
  187. {5 ?1 M) t% x$ [6 }; Z3 r
  188.      FILE *fp;
      F& N( {# g6 I7 c* [. E& ^  k7 S
  189.     DWORD  attrib;+ A: o' `8 l; f4 B( O: f. \8 H
  190.   attrib=GetFileAttributes(FileName);) b% Q# _, ^' F8 a5 L% {6 d0 }8 p
  191.   if(attrib!=-1)! G: b) t  T7 G# A5 o* Y2 i$ ]
  192.   {
    ) d; e* F. S& r9 F. }1 J/ l& c4 u
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      A8 b% ]9 h) ?2 \- `
  194.     if(!SetFileAttributes(FileName,attrib))' Y# |- n9 g- i, y, s: L5 V& W: ~
  195.     {
    # C: x2 c! @  N
  196.       return FALSE;! U$ B6 k. z/ o$ G
  197.     }3 U2 O' y1 f! g2 `3 R. N
  198.   }% G) V0 S% p9 e7 \, ~
  199.   fp=fopen(FileName,"wb");
    7 ?+ U. g  c* q1 j; W: f9 {# Z
  200.   if(fp)
    ) i& U, h1 r: K
  201.   {
    0 I, U6 m5 U$ S8 `( i
  202.     fclose(fp);
    9 Z) C/ X& ]3 r/ @1 F: A7 d
  203.   }
    : t; U1 ]' c5 M5 F) ]7 I; Z2 l
  204.   return TRUE;8 }" v- Z& D5 K/ Q( v
  205. }
    0 w* {' u0 {( @2 F
  206. 9 k7 I+ l( b- F4 Y1 G' S- q8 ~, w
  207. BOOL CRevAppApp::UpdateLocalVersion(void)+ Y4 |; q' b- K4 q" L. w
  208. {7 K0 t: r% s0 k1 N$ B+ l7 W" H! s
  209.   char filename[MAX_PATH];( O2 l. j: y9 l1 U# z
  210.   LPUPDATEFILE file,olds;! d7 P# N, L4 A8 P* j7 c& B
  211.   std::map<int,CString>::iterator i;+ l, B! \8 l& K! x. d
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    % n) x* n1 r7 E/ ~. V
  213.   std::list<CString>::iterator l;
    ( S# V0 k  k/ c: |- O6 X7 o

  214. 6 L. \3 V$ b: v5 \3 L& g7 M2 |0 z/ @% {
  215.   if(bFirstUpdate)3 N5 J" u9 Y7 Z3 Z6 V9 D# B& [; G
  216.   {
    7 ]$ {- m. J& `, z# ?0 J
  217.     dwCurrFile=0;
    # Y# N" x1 l8 l
  218.     bFirstUpdate=FALSE;6 |# _2 k: T/ Z" q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). ?; t+ Y* s" [& }2 D3 V5 G
  220.     {
    $ a9 t' q3 G# W& Y- v3 V9 f. c! ]$ E
  221.       dwTotalFiles=UpdateLocal.size();9 D, h+ j3 J& B9 p* D
  222.       dwDownLoaded=0;+ ]6 o; i6 n  M7 G
  223.       bSilentStep=FALSE;
    - E7 ^6 o& U8 m5 f7 b
  224.       bCompressed=TRUE;
    % G: k* `5 S( {9 S0 m- s" }
  225.       strExtLocal.Empty();
    3 D4 z& h; {/ R) D+ R. }9 R
  226.       strFullName=(*i).second;
    - A  |$ r1 \' m( x# m: Y7 w" {. z
  227.       dwProgramState=AP_CONNECT;
    $ A$ K* O5 \. O3 S1 t
  228.       return TRUE;
    $ z7 o1 h0 r% M! ~" ^+ M
  229.     }: ^- r7 X$ H# @* t+ C
  230.   }
    5 i% ?9 E/ q# Y( N% ]3 V4 G) [
  231.   else if(bRestartUpdater==FALSE)+ c% {, b" w2 z8 v
  232.   {: h# y2 d" J5 ^7 w" m
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())! n8 z) d/ G  G3 t& I/ g8 A9 V
  234.     {
    & T/ T9 e+ f6 r8 |+ ~* s
  235.       file=(*p).second;
    3 l4 Y9 m% x8 v3 X: ]+ t
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - E/ J: t6 b) X  g5 z  u0 k  }7 U
  237.       {1 `. t, \- i7 b( {) I; T6 ~6 U. U' M
  238.         olds=(*p).second;% x" d- ^/ c3 a1 @: M
  239.         olds->vers=file->vers;9 o* m$ T* h, m  A/ |) ]2 |6 J6 X
  240.       }
    + G( X: w1 ]# s! E
  241.       else( j+ H5 e; p2 h
  242.       {6 S1 J* u1 T8 P4 P3 p0 {$ i
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & E" m! z3 V5 @  w  F+ ]
  244.         memcpy(olds,file,sizeof(UPDATEFILE));: p0 u! U2 w' W) Y) [
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 s  g3 L1 a7 X" k
  246.       }
    / }0 i8 Q7 ?8 a5 P
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# Y' |3 X) p$ K( W( E# K
  248.       sprintf(filename,"(%s)",file->file);; _3 _; ~5 F9 P0 U, |
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 c) A( L7 d& [. V# Q+ c4 r% Q' \4 X
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }% \' E: a  D! M# ]- _" B" w, v
  251.     }* @, {0 F! z  W; M* o4 k
  252.     dwCurrFile++;) ~" `' }9 b) H1 i
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ r7 F. P: z+ y9 ^% r
  254.     {
    " s( B: o' V* J4 z% M
  255.       bSilentStep=FALSE;
    $ c$ R- u" a/ v+ {# ~9 |4 o
  256.       bCompressed=TRUE;
    $ r% }  G5 @8 `3 \% a" d
  257.       strExtLocal.Empty();; n+ S( Z7 E9 ^$ \
  258.       strFullName=(*i).second;
    % H" O6 m( i" _
  259.       dwProgramState=AP_CONNECT;: b: k" m$ h: w# z. S! l1 |4 E
  260.       return TRUE;
    ) e) o4 r1 o9 _( a
  261.     }" a. {% M" s! T8 o* v
  262.     if(!bRestartUpdater)
    * e. _$ M# }2 I( g
  263.     {% [" g9 p; n/ l  d
  264.       int iCurrSize,iFileSize;
    ! h" J: c3 C' v+ ?9 Z1 G
  265.       iCurrSize=0;; K! ?' g2 l2 m& [6 i
  266.       iFileSize=UpdateList2.size();1 K' k# }3 [  I. W( m
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");3 `( z5 [; E9 R. X2 B  ~
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    5 V2 k1 M# q2 |: ?* m
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    & I( u2 B! o: b/ m% g) Y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 n/ f/ `! ^6 {/ n  H; y
  271.       Fclearf(".\\update.dat");/ H) R2 M9 b9 q( i3 _; q
  272.       Fprintf(".\\update.dat","Bloodyf\n");  T3 z4 y5 b& z: l
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)% t9 L' R* R/ z
  274.       {
    " Z) [% D- t0 ^& D/ v2 Z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& e2 i: \9 A& `; V
  276.         {; F" v1 G5 y$ ]8 q2 E
  277.           file=(*p).second;+ b" x  y. v  J( `- L, c/ ]
  278.           sprintf(filename,"(%s)",file->file);5 z1 v, e& x4 h* `6 v
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* j$ z2 A1 x3 o3 Y( A3 x
  280.           iCurrSize++;
    - I& x* s  B& ?; y) q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      n0 e+ P+ K  j  [
  282.         }/ z. t% |# g$ [5 l3 l& H4 y
  283.       }
    / i8 b" v8 A/ ~# T) |" h- H, f: K8 V
  284.       unlink(".\\update.txt");
    7 K8 S5 o  [+ F! m" a/ i8 i1 k
  285.       unlink(".\\update.tmp");
    2 z7 T1 G3 d6 H$ f
  286.       Fclearf(".\\checkversion.dat");
    5 d& g1 C5 ^5 o7 M* A% o" K, W
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ! k' f7 W0 R; H7 z
  288.       if(UpdateLocal.size())
    4 }2 `5 G& G. d! f) J
  289.       {
    5 ?  J. u& e. G$ }% O) E  v" `+ r
  290.         UpdateLocal.clear();7 O3 u: P  [! }
  291.       }
    1 [. w; M( y: C" j4 A
  292.       if(UpdateFile3.size())
    6 m( H4 B! G( k5 [6 z4 [& ]& u
  293.       {
    ! i/ n( G! o$ o/ s8 \' m
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ( d! r# P/ T5 h  I# X
  295.         {8 h3 n0 x9 `- O: }8 B
  296.           file=(*p).second;0 L1 h: i( N1 F, s
  297.           free(file);+ L" R/ i/ P: k; _
  298.         }
    ; v* c3 V/ @5 m
  299.         UpdateFile3.clear();
    ) f$ G0 y% m# F+ l* s" b, e4 v
  300.         UpdateList3.clear();
    # G0 c3 T5 Z3 ]% l3 i
  301.       }. x4 a7 Z) C' N! q! V
  302.       if(UpdateFile2.size())
    & b" Z$ w( q9 b1 [) w- r6 H
  303.       {! }0 m8 ^* t6 G% F; K
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : {! D: F7 t) B$ |  K3 v( g: H3 ~
  305.         {
    . D' i* S- O2 \" ?/ g5 @' j9 R
  306.           file=(*p).second;3 ^& o3 i* M$ r. e4 U
  307.           free(file);4 Y) F7 Q) p1 {! g# g% F. h0 @+ c
  308.         }
    - {$ T$ r) K% O, i# H
  309.         UpdateFile2.clear();
    ! O( X! ^% X8 b
  310.         UpdateList2.clear();
    5 F. V) ^6 Y( `* C% O  Z; h/ A  A
  311.       }- ^0 n0 l8 j# V" e5 {; H
  312.       if(UpdateFile1.size())
    3 i. }) i0 ?2 f" M' x4 F
  313.       {% x6 x& E! a. j' j
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( |, y; d: t; e' F" Z: S. d
  315.         {' y" W5 [- T: t" K
  316.           file=(*p).second;% h" n% m( G  a  ~
  317.           free(file);
    4 J" o5 K+ M2 U( s0 X
  318.         }4 a3 X9 ]$ ]$ g
  319.         UpdateFile1.clear();
    7 a# _" h9 D: o/ G- A3 w
  320.         UpdateList1.clear();" I% t, Y4 w3 z; ?
  321.       }- y( q4 U: e) J, L
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    - A% [( B  c  G" l0 H
  323.     }7 P3 z; K1 t( F1 k
  324.   }1 W' V) H2 W* |! X+ H
  325.   return FALSE;
    * z" @8 R+ V! w6 L
  326. }
    ) s$ y* P: N! V, [8 P
  327. - ^5 s: A# C- G- F+ ]9 G! o
  328. void CRevAppApp::ClearAll(void)
    * q1 X1 F) W3 t! _6 O
  329. {
    0 L$ I  @0 m5 A8 ^1 l: K
  330.   LPUPDATEFILE file;
    : Y; [; |9 ]6 g0 L7 C5 J2 ^/ i3 s
  331.   std::map<CString,LPUPDATEFILE>::iterator p;1 d2 j7 R2 G: ^, R% b7 g' ]

  332. # \* B" c2 q8 L9 O3 k+ `* s- l+ `
  333.   if(UpdateLocal.size())6 Z- p; {8 l; z" G
  334.   {
    . O6 ^# r/ K. B  h
  335.     UpdateLocal.clear();
    $ R4 h& e  o7 k$ _; g7 Y
  336.   }
    ) d9 k5 ]$ z6 b& B9 H) \
  337.   if(UpdateFile3.size())
      }) E* W1 [/ z; ~# m
  338.   {; }9 b$ l5 [) f7 k2 ~* z/ i$ {2 k
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  X1 E' U1 B5 T' X* m
  340.     {
    7 ^; E$ o4 Q9 {  u# @1 `% p7 Y
  341.       file=(*p).second;
    ' p$ K5 M6 h1 K
  342.       free(file);
    5 E# `0 ~1 N' P# h8 [3 P
  343.     }8 v: |' t1 q6 {& V
  344.     UpdateFile3.clear();
    ) ~  s, u1 I- \) R- u* e# i
  345.     UpdateList3.clear();1 Q/ s4 _6 m, o' f' b( O7 m# v
  346.   }
    6 Y. T( O7 x5 t" L
  347.   if(UpdateFile2.size()). k7 q3 n6 t8 J. d7 u) D. p
  348.   {
    8 b) {0 v2 V, p* r
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) O, c+ {. T2 T
  350.     {
    , F4 R$ U0 T% B. E
  351.       file=(*p).second;. e, o. A" m0 q! K
  352.       free(file);' N! h+ N& T) R0 k: a# t
  353.     }
    ; V" D4 ?0 k4 ?
  354.     UpdateFile2.clear();
    $ u9 `* p* h% J6 N7 I1 j
  355.     UpdateList2.clear();6 J( h6 ^% F; E. r* Q6 I
  356.   }# a/ O6 {* P) w6 n
  357.   if(UpdateFile1.size())
    6 }  M' ?9 G5 M& b) j! g
  358.   {
    ! _0 m$ f# k3 u+ i+ o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 `, H3 m: \5 R; z4 j
  360.     {$ h: g3 U- l2 `" P: {
  361.       file=(*p).second;
    + i+ V! @, z$ R! K; ^, `! p
  362.       free(file);
    % h3 b# @% Q/ L1 V% M8 I9 Q( A8 K" j
  363.     }0 `4 e. q$ b: I# W  a- T/ B5 J
  364.     UpdateFile1.clear();' g2 f0 }6 @+ x. p/ [* |- B* }
  365.     UpdateList1.clear();
    : x) f" v7 Q- Y& V2 M& c" n
  366.   }
    ! x: m) x8 p( W- q5 q* J
  367. }  , @+ r" _+ C- x4 J" g1 T, y
  368.   
    5 b( U0 X0 \  Q# I+ [
  369. BOOL CRevAppApp::CheckLocalVersion(void)3 \6 ^; [  W% B" J7 \. c6 g% }+ ]
  370. {
    + C: O7 a8 \9 v" N. }  V- \* h8 m# V
  371.   int c;; _' Y5 T2 a* n& d
  372.   LPUPDATEFILE file1,file2;
    : q4 r/ K: e6 p3 C/ v3 L3 z5 y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;6 e( ?: O3 p. M9 ^
  374.   std::list<CString>::iterator l;
    : l) |+ o) j) p8 e

  375. ' i5 b6 R' T' t. d5 s# R3 I! j
  376.   UpdateLocal.clear();6 {) h: n9 z: ^2 v9 c
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    6 V4 z' X+ v; T
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);1 W. Z* ]: p$ v
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);, S: Y/ v9 C/ V  M- Q4 G* V
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 Z/ Q: Z2 S5 ]: z
  381.   if(UpdateFile3.size())* _" P" b3 f/ ]) ~  ]4 D- m
  382.   {
    & P2 E, X$ F. \) W5 W8 E% G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)( W! L% v8 N' s3 C5 |
  384.     {
    ; f" ^# {: Y( T: s
  385.       file2=(LPUPDATEFILE)(*i).second;$ u" ^; N* Q( E2 m3 \; v1 X
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 ~# T8 q: {. T" u4 K
  387.       {
    * F. i  T+ l% J, p
  388.         file1=(LPUPDATEFILE)(*p).second;
    ' s& u2 Q. j5 [  ?2 s
  389.         file1->vers=file2->vers;1 {3 A5 X0 L9 j9 d# ~: S3 y2 t1 a
  390.       }8 Q, q; B- j% K9 U+ d2 t
  391.       else; C4 e  Q$ C: D8 y  q+ y
  392.       {6 [; Z8 S9 b( M, J
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) n- t) j# C( u
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    5 v% H3 ^- J8 S4 n: J
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));6 i8 S% X; O: k2 [: K1 T, u, |
  396.       }
    3 n: D3 g. @( C' e& s- C; v
  397.     }
    4 Y9 u3 n2 z6 D
  398.   }, w/ P0 `7 J# s6 K6 T
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)+ V, ^- l1 |4 Z) C; q
  400.   {
    " n, T; K6 B, M6 j
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    4 [' i' o9 n% H1 p" k
  402.     {8 f$ [* M1 a! c* @0 @* V, H
  403.       file2=(LPUPDATEFILE)(*i).second;
    , U- u0 ]# ^5 |5 N% Q! k1 `
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; D- ?7 f! {' s! A7 x6 v. B
  405.       {! }1 S! y# Z7 R2 p% q
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 X' Z6 V* A% B, z* _
  407.         if(file1->vers!=file2->vers)
    , _( `' f0 J1 h) J" n- ?' i
  408.         {
    5 W. l' T0 Z2 u0 I
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 ?* @2 B$ k6 r- L
  410.           c++;
    " z/ l6 Y' b) _
  411.         }
    / Y1 y' _/ f* k. x- ^
  412.       }
    9 D" g5 U6 e7 }$ \0 D) d' A
  413.       else/ P9 u* e# B, o# f5 |
  414.       {: Q: Y3 H- t3 _3 l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
      \4 o3 P3 t! S3 }, A, l
  416.         c++;
    ; O) ?* g* q1 R8 Z
  417.       }
    1 J8 n/ L& Q0 A& {+ e
  418.     }
      }( B; h  b% \4 E0 b
  419.   }
    7 T+ Q' J# U/ f- l1 h
  420.   unlink(".\\DownLoad\\update.txt");
    2 t- `5 l0 I: a! G. @" L
  421.   if(UpdateLocal.size()) return TRUE;1 c7 r1 ]$ b4 a) _/ {* M
  422.   else                   return FALSE;: i2 j: X) {1 F7 X
  423. }
    7 Z0 r7 {. @# l2 N3 u' J

  424. 8 F/ z9 c- h" l0 H
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    % Q1 |% F  |6 [- T" {- {. b
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    5 z0 |- }, H: e; v

  427. + @3 B5 ]1 k8 |! V& r8 S, X

  428. ( q9 e2 D/ R! R) P
  429. , e5 V7 V$ ?% z& |* v( C
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile): r5 o; `0 ^9 G- f8 E9 @- E
  431. {" ^! H. m9 t# p# S. |0 B. b2 x
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    1 i) j( o# Q1 k
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) x& ?- n4 U; S. n7 m
  434.   {! \) P0 q/ V  W. l
  435.     char szLanguage[50];
    ' J" ^& j" m& r# Z+ A! Z% r
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" a  I- x" F/ p, S
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ v% Q& ^- B+ k3 t9 d* j$ j
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- ]. K& G5 o) \' t
  439.     else                                   m_iLanguage=ENGLISH;
    , u+ A+ }: W: D7 |
  440.     char szRegister[100];+ d) n2 q+ O: Q+ l1 \
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 E$ i2 B* |" e1 l8 f
  442.     strRegsName=szRegister;3 [+ U# J5 W2 T/ k. V
  443.     char szPatchURL[100];
    # U2 \7 `; J8 C, s3 d# y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      K4 i  X  @; _$ [( [
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! U: o  e/ i$ h) G! e* ^1 y; p4 G
  446.   }% q8 ^. j$ n6 n6 `# \0 `: x. m  T
  447.   else
    : h9 _5 Q7 e, \3 Y/ ~/ g
  448.   {
    9 T) P$ Q6 W/ A3 }! h
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% c" j5 j: ^' e  m  O/ E+ _
  450.     strRegsName=DEFAULT_REG_URL;
    7 U; {* L! ^9 b/ J# i' d: P( r
  451.   }8 L  F3 ^4 j# T# F& E- y
  452.   if(GetFileAttributes("hosts.ini")!=-1)% r% k) ]7 C$ E: n2 E
  453.   {
    * y% x& c* U6 N4 q" ~
  454.     char szIP[50];5 g/ D* P( n( R% k
  455.     char szDIR[300];
    : [, ]- c# I0 D2 d9 q. m0 h
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    / b* e# F3 `9 ^
  457.     {
    / I1 {( A# B* {" E
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    % m4 m9 f5 J0 k1 @7 |, b0 J
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");; h8 r+ V2 L) Q( n. P1 b
  460.       strHostName=szIP;
    9 E$ L$ ?5 E4 o
  461.       strHostPath.Format("/%s",szDIR);* c1 X- c, m; ?+ v# K
  462.     }
    0 _/ D$ i6 O/ L1 c" T; S6 x5 m* _5 V
  463.     else' r! I, U) Y* d
  464.     {
    3 K8 X( n# A/ l$ U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) i6 r6 ~- e; N# ]- K
  466.       {
    * S, N* d  G2 I/ r5 g
  467.         char szLanguage[50];
    * a1 g- @/ Y" a. j
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 n- v. l& D6 ^6 _+ ?
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ B. B, {+ p% P
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# C8 z5 F4 _6 @+ W6 k- V- Q" X
  471.         else                                   m_iLanguage=ENGLISH;+ u, Z1 O4 h. \' V+ R% C
  472.         char szRegister[100];
    2 v/ M* c) A, p# l
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! F0 D  w& r0 |* l" E
  474.         strRegsName=szRegister;
    1 _. K3 [& j0 m, k- r# ?. a( j
  475.         char szPatchURL[100];
    ) @9 ]* ?. C" x- g1 J; a
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 a5 W' C% E) R  F* l
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , c6 K6 _- r* A1 Q  t4 V, c
  478.       }
    2 M4 B8 R3 {; e4 }
  479.       else; N) W; C9 J! z) M
  480.       {3 O! G( x# o$ N) Z$ [' E5 {
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 N3 N# l7 u) p2 U" P
  482.         strRegsName=DEFAULT_REG_URL;
    / D" Y1 j; j6 B' M6 p) U! r' `
  483.       }
    4 B* P  P4 N5 V
  484.     }
    3 u: f" o+ O& H$ R
  485.   }! m& w: ?( H8 @( z" S6 o) p
  486.   return true;6 V& L( C, |+ }6 z' c2 t! H
  487. }  H) T! k# z5 J! u: N/ d

  488. 6 E0 A) h* Y) T5 s0 Z
  489. #include ".\ZLib\unzip.h"
    4 l' W' i8 f4 ]5 L
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    % s5 o* W9 p2 `2 h
  491. /////////////////////////////////////////////////////////////////////////////" c, f/ c% D9 N1 M  S1 r
  492. // CRevAppApp initialization& ]) W. B1 Y# i+ `, t4 ^% }  L/ Q

  493. * p' r. C6 d2 ], V1 o) _
  494. BOOL CRevAppApp::InitInstance()
    ; Z( k" I1 R# E4 o2 B( z3 [( }
  495. {5 G/ V/ E) Y' A0 s
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];: U; a0 [' V- S; A

  497. 8 M; F  [  L8 Z2 I: r7 ?
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);( J5 j" {9 ^& T6 E; ?4 ~
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    8 x2 Z: n% M: n" k, k7 G9 g
  500.   {1 m" C6 P4 q; L" P: F. b/ c$ _
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
      {: h, q; f' R- ~$ K. v/ L+ v
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 V- W3 J/ l) K. g; t3 I* B- D  x
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))% z( J0 j3 v( q. U2 @" M& X
  504.     {. f5 E, g. H6 g! L! j
  505.       strcpy(szPath,szPathTarget);
    - S$ @7 ^$ y, q$ S7 I7 `" C) \% n6 ^
  506.       SetCurrentDirectory(szPath);, H) t6 S) h, h1 x" @3 H/ @
  507.     }
    8 k, e  ]9 U, m3 m
  508.   }" J2 c  ]+ v( O
  509. #ifdef _DEBUG0 h# V, K/ y6 }: ]( ^
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 p2 F. w4 e7 d0 t+ t6 @
  511. #else# B" P+ k" w0 K4 ~9 _7 P
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ a6 i3 x2 M4 @+ C1 K4 Q8 w1 D
  513. #endif* W* U+ L7 V. ^; o1 x; s
  514.   {, e- E8 T5 c1 i6 k7 d8 h) h; }$ g
  515.     char tempFileName[MAX_PATH];1 m# `* U9 v; B
  516.     strcpy(tempFileName,szPathSource);
    " w6 b) c( ?7 b: D! T8 V
  517.     tempFileName[strlen(szPathSource)-12]=0;
    # ^, G; e9 `/ r! B4 D' c
  518.     strcat(tempFileName,"\\$CSUpdate.exe");* t* B2 Y) j2 ^$ d
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    / Z4 T0 H4 |! }( e7 _# }+ _
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);: d8 n; x% }3 u6 w. O
  521.     return TRUE;
      s! [$ n9 Z! }3 c5 g
  522.   }
    - `& S* |+ {; r, H- K/ O: b
  523.   // Nuke 0118: Delete run.exe
    ! E, n# }# E9 A7 t9 x
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );' D) J8 v- r+ h, h# i% p
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");$ q; x* U3 b3 }! d2 Z) d+ Y0 q$ p+ X
  526.   if(!ReadCfgFile("Config.ini"))6 h0 h) q) `% ^. d
  527.   {; h: i, ?7 W9 A/ f1 p
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    7 F8 I7 V% S( @3 H
  529.     return TRUE;' b+ o% T6 ^% [
  530.   }& ?7 J7 h3 Y4 @" [. P
  531.   HANDLE mutex;
    + |) z  |) M4 `' `9 a# }
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))5 d( E0 l4 Q6 v
  533.   {% Q/ J. J! R/ A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)2 F& F) o' Y# F6 W1 Y: h
  535.     {
    , `2 P# E6 q; u1 ]: G/ e
  536.       CloseHandle(mutex);, |& d0 F% C; f8 d/ E8 O
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);$ B* Y1 V. ?" q9 Z/ e7 V
  538.       return TRUE;
    $ e( p0 w( G* C# v) Y
  539.     }
    5 X* N/ I9 X- U) {. K8 r& x
  540.   }  
      }* \4 ^3 _5 r
  541.   CloseHandle(mutex);* B9 M: ^1 x3 \6 s  X

  542. & ]6 j! f" A* e3 [) R
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);' L* w" E, a+ O
  544. / B# d( m0 m! D$ l- p& u
  545.         AfxEnableControlContainer();0 q  U: {9 q2 a' [& ]
  546. , J- N7 o6 `* S# o
  547.   bCanUpdate=FALSE;
    7 ?1 _* E6 Y! v) q1 v; A* ~
  548.   dwStartUpSteps=1;
    . L7 v; X1 j) v+ Q$ e  d6 f4 i: a
  549.   dwProgramState=AP_NOTHING;
    1 p: C+ U, ]2 C/ A7 m) _

  550. ( w& W. h. p/ v  D5 C
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    # e' x* m# K# F3 y: U1 B9 I
  552. ) {7 f: M: T  [# _, U2 V
  553.         // Standard initialization
    3 F0 [( l2 f% F* d; H4 j
  554.         // If you are not using these features and wish to reduce the size
    . }6 L% d' @3 Z
  555.         //  of your final executable, you should remove from the following
    * l8 x( ?+ n/ D  O) E6 F2 @5 J' N
  556.         //  the specific initialization routines you do not need.
    , k' O% q7 |/ Y
  557. / n4 E* p: ?2 Q, y
  558. #ifdef _AFXDLL. s: t4 H* o" w, \/ I
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL' g7 E& q; }# ]& ]3 e, `/ y
  560. #else
    ) Q  s, c5 a7 O! k5 z! x& J
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ o6 \" |3 a  P
  562. #endif! a- C7 N& a# V" x- u% C1 e* Z. n$ _4 y0 e

  563. * ^! M& E6 t0 \5 g! Y. y: `6 p
  564.   dlg=new CRevAppDlg;  ^4 _0 l! Z  l/ B  F& K
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    4 u( l) s2 ]; P' q( F) l
  566.   dlg->ShowWindow(SW_SHOWNORMAL);, }% G# K% _- z. I5 u2 Y( J
  567.   m_pMainWnd=dlg;
    % Q' p( p$ p3 c0 i- f. l
  568. , i( X8 }, A7 q1 q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 W0 m2 d5 \9 N- \) F
  570. , j6 q6 R1 c7 O* t4 w
  571. //  GdiplusStartupInput gdiplusStartupInput;
    . u& Z, S, h! R! P% a
  572. //  ULONG_PTR gdiplusToken;
    3 X$ q* `9 N4 ~
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);* ?& A. O( @5 ]; }% L3 d

  574. , ~0 j. Q& g7 G5 ~7 g; W
  575. //        CRevAppDlg dlg;
    ! a+ C6 `4 C; W
  576. //        int nResponse = dlg.DoModal();( ?) e( l: j; M& z7 X
  577. //        if (nResponse == IDOK)- A: H) x* g. |. ]" E
  578. //        {
    & F4 s! l, ?# H/ U& Z# @
  579. //                // TODO: Place code here to handle when the dialog is1 Q8 J. F! ^/ V. _
  580. //                //  dismissed with OK
    3 w' i* W8 o4 |
  581. //        }. U: I) c% S6 R. a7 D! q
  582. //        else if (nResponse == IDCANCEL)
    ) l% ?: K# r! ^! x) M% X" E
  583. //        {( |- h7 w& w4 u2 j; y
  584. //                // TODO: Place code here to handle when the dialog is
    ( y; L0 k- ^5 x
  585. //                //  dismissed with Cancel8 U* o' U# I& h4 ~
  586. //        }
    * e9 N, i) R# }9 ^2 \' S

  587. 6 X% M6 I3 ]4 T" B9 K' [; G
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    + A- d+ F  w6 I. ?9 I# D; h
  589.         //  application, rather than start the application's message pump.9 O+ r6 I. M0 Y8 E% l! f' p
  590.         return TRUE;
    , v1 h$ G& y  w# d% J, m
  591. }
    , f& {" k% n# O% X

  592. ! d" [* M1 Z' n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    # c. q1 }2 C/ o. T- o% l+ [) [
  594. {
    + Z- `* W" K1 r8 Q: G: N
  595.   int i;
    ! a* {8 K* r8 P; |0 R
  596.   char *szRet;) ?; S. _# m. M9 B
  597. * _0 s! V( d! y
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    & o( l4 {5 G+ C5 f1 Q
  599.   if(sztoken)6 A- w, e4 ?0 s# c. M0 k
  600.   {
    ) B$ C0 r* m' e7 l7 I$ }
  601.     szRet=&sztoken[itoken];0 X% X, N! W" a7 x" p$ c4 Z  k4 [9 S
  602.     while(sztoken[itoken])  N! M6 U7 |5 A; K1 A
  603.     {2 l- u8 R# ~4 Y  Q! P5 I
  604.       for(i=0;i<(int)strlen(token);i++)( {# m4 G) Y; |* }
  605.       {
    1 g3 d: q% n% A  w5 ]& v3 e
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])7 v0 x& Y) {  I2 }1 j
  607.         {4 j+ m8 n" x: U7 \' A- w
  608.           sztoken[itoken++]=0;
    ! p, P6 z- B+ l. I9 ^+ G  J. d) O! i
  609.           sztoken[itoken++]=0;; X) a. W, @5 M& x0 n# n0 s9 Z( F6 s
  610.           return szRet;  c- o9 H2 S7 m8 m, [* a
  611.         }9 D/ ~3 V# A8 K. L2 ?* P
  612.       }
    8 ~: R9 R* Y0 F) x9 n$ D
  613.       itoken++;
    ; x) _& S- W3 b
  614.     }' C" N2 U5 v* A* L9 K
  615.   }
    3 }2 x1 W# p) @4 B
  616.   return NULL;
    + [6 V% H# V4 O( W: L' L
  617. }( J9 N. X/ A2 p; z5 t" p
  618. " M! G8 V- b: L2 |0 D
  619. void ProcessProc(long Total,long Current)+ W8 M/ |& @7 l0 v- ]+ J0 P
  620. {
    # n& H8 W/ Z: ]: r8 M
  621.         MSG msg;
    1 p% V. u/ W6 \
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);3 V5 w: c  `, ~% v3 _9 K7 R( l/ B- V( b
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    9 W0 m% O- i: {& n- @8 m  L
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))$ D5 w% j3 u& w% G
  625.         {
      {& J% F' g) G: d) f! N* _
  626.                 if(!GetMessage(&msg,NULL,0,0))# g( U; x! O! r9 n+ C
  627.                 {
    : \4 a* d# e( W; o- u5 T9 s, n+ G
  628.                         return;
    - @8 H8 Z, E! }' c$ P
  629.                 }
    " g% v! S  S% r% q' e
  630.                 TranslateMessage(&msg);
    0 s9 S. ~# w8 W+ [( }+ Y
  631.                 DispatchMessage(&msg);
    ( H9 I+ U# _4 ^! Q; d2 T' ^
  632.         }       
    9 K8 @. w1 I+ n8 x4 }) |
  633. }7 i6 S) \3 {, L- c: J
  634. ! \2 f. i. J+ e8 I. k: D$ r
  635. BOOL bFirstChar=TRUE;, I3 W6 z5 u- s4 U

  636. 8 L2 n" U4 C0 y8 z
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 f# ?$ a6 y. H6 R6 ^3 O3 m
  638. {
    " @1 o3 ]/ z; \  r; V" b6 R
  639.         // TODO: Add your specialized code here and/or call the base class$ \5 |9 I4 k! k1 W0 g( T. ^, I: u
  640.   switch(dwProgramState)
    ' e, F4 A; E0 \4 j* R* z
  641.   {
    9 Q+ d8 c& |8 H' f: U- n
  642.   case AP_NOTHING:
      B' [0 F2 p0 I- p
  643.     switch(dwStartUpSteps)
    4 r2 k& t3 g8 m8 z) Z
  644.     {
    5 x$ c  F7 n% D5 `, K
  645.     case 1:6 K, ?' E  {) b3 |% Y; |
  646.       {
    / a/ j5 O; {6 Y' V
  647.         int i;
    / k6 S& z/ Y& H) l6 _/ l
  648.         CDC *pCDC=dlg->GetDC();
    / L7 v  ~/ e9 r" t/ q
  649.         HDC hdcwnd=pCDC->m_hDC;- }6 G2 H, B: e, J5 \% G
  650. //        Graphics graphics(hdcwnd);% [. c/ F* k" P# p+ H6 Q  |
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");0 i; \$ x0 O  Y- ~- [4 c8 A
  652. //        INT iWidth=bitmap.GetWidth();
    ! r6 T& Q8 U% ^9 R  N& `
  653. //        INT iHeight=bitmap.GetHeight();4 X  |0 g: @2 _* w
  654. //        Color color,colorTemp;
      R. [" k+ n/ e1 p3 ]( f
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & V! c- q; y: [1 F5 \
  656. //        {( i) V  g; m0 p6 u
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)5 S9 @6 n& H* r% Z
  658. //          {) `& }. f0 l+ F) S) {! M
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    8 j( R5 R# \# e
  660. //            colorTemp.SetValue(color.MakeARGB(
    3 R. ?; M" d- h2 |: g) I
  661. //              (BYTE)(255*iColumn/iWidth),$ k* a$ Y. z2 ^" o9 O7 e
  662. //              color.GetRed(),
    ! H. U8 m' w$ t% w& d  i
  663. //              color.GetGreen(),
    " [5 {* N4 f- e2 W# L" K
  664. //              color.GetBlue()));
    1 |& \" U9 f6 W; v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    3 ?, {2 v# [: l. ?: `
  666. //          }
    ) e9 F) u0 z/ V  b' Q
  667. //        }
    % h8 ^( a8 q, c
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);4 ?2 |# S; P1 v* K( n; r2 X1 ?
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 U0 z1 s0 a9 H2 c$ ^# g" R% V7 ^
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");% N6 s" [4 H, M7 y* T3 P: ]
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( k* ?6 a- l7 Y0 I/ R1 C4 b
  672.         for(i=0;i<240;i+=8)
    : R+ L" {# M( \: C( f9 v' ]7 n# c
  673.         {4 T& U& I( F/ ^  D4 A
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 l- V. o  \" w5 X. e
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 z! `- [7 c, E. X6 d4 z
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! l: \' A0 r: k/ Q
  677.           Sleep(33);
    ' P- I5 H7 }- f4 _4 @) `! x. i  H
  678.         }; A/ k, N3 d' a. x" W& @' k& c9 m
  679.         Sleep(1000);
    $ \/ _2 s% P7 F/ d& i+ _# F  ^' S
  680.         for(i=240;i>0;i-=8)3 i' U: X& m3 Q2 L
  681.         {
    # k" k+ j. K  `2 E# v7 J6 J/ z! q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 A* E* O% f0 h7 n* E
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 F$ m3 J' `/ W% K% b/ D
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & m* K8 d2 \$ ^# S4 y# x
  685.           Sleep(33);, N. N3 F. I( R
  686.         }% @* n, Q0 l7 j- B- @! y; w
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    " [8 h/ W6 T( q5 j4 U5 [
  688.         dlg->ReleaseDC(pCDC);( x$ |$ d, w3 w8 U
  689.         DeleteDC(hdctar);
    * {" f+ H: f. {9 n% A+ m8 G9 D0 D
  690.         DeleteDC(hdcsrc);/ ^3 [0 M- n( t3 O; o) r
  691.         DeleteDC(hdcorg);
    1 J- C, u2 f! ~/ F6 X% m# h
  692.       }
    - Z+ M% Q2 S/ t- _
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    1 N- a% {( p5 }5 C+ g  B6 ^2 F7 E! \
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");) N( a6 i: D1 i0 \( n% h9 D
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    * o; p! F7 ?* b0 @; c3 r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( B& e& Z9 P; R5 O
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 F; W: j  r7 H) ?. n  |1 j
  698.       if(!Dn.Connected())* K1 A2 f, L$ c' u0 T
  699.       {
    ) Y, V1 m. ^' a5 N& c/ i' J2 P$ x
  700.         dwTotalFiles=1;
    . v* T' @% J* j% t* Q2 W9 r
  701.         dwDownLoaded=0;, f- x) x6 W" A. [) c: I3 ?* S
  702.         bSilentStep=TRUE;6 U' h7 K4 r6 i
  703.         bCompressed=FALSE;4 S1 [9 W/ ~/ C$ h! J  t, W( v; {
  704.         strExtLocal.Empty();; O3 c1 p" s) k2 m) I/ R' d; h! z! ?
  705.         strFullName="readme.txt";! c+ m+ k6 M/ p5 y; s  V" Z; g
  706.         dwProgramState=AP_CONNECT;
    ! |) V# T6 `% B; v. E% R3 N$ ~
  707.       }
    7 d7 X( B5 l4 A9 ], @- h+ ^/ C; n& P
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    " o5 k* F9 ?5 ~; f. v7 _
  709.       dwStartUpSteps=2;0 Z- G* G* E$ v4 F7 j4 k1 j
  710.       break;' J/ z& L% V. ?
  711.     case 2:
      V/ K( m- g+ m3 z- D/ V
  712.       {
    # K8 Y9 [( }. i2 o8 O
  713.         int iEOF;
    . l! }2 @0 V1 v# Q, @1 K* X
  714.         FILE *fp;, s1 K. V+ e3 c  O
  715.         char szString[512];$ M7 M) F' N4 u! K; K) _. m
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    9 ~( Z$ }+ n0 S  o: Z4 @$ s
  717.         if(fp)
    4 ^" `' z8 G' }, O" A
  718.         {
    8 Q, N$ j% w3 h1 X3 M/ v
  719.           do
    ( t* t- X7 Q9 ?& b+ E8 `4 @0 x
  720.           {. J3 }5 ?% B$ m3 e8 \
  721.             iEOF=fscanf(fp,"%s",szString);/ c% {' w  g: }; K' e' S( y- n- \
  722.             if(strlen(szString))
      s1 Q8 _1 B) ?* u  i
  723.             {
    , z( L: T8 N! l7 z; W3 P0 m& J9 i
  724.               if(bFirstChar)" H" ?! f" u" n  G* n6 Z
  725.               {
    $ i" z2 _7 U- f3 p  M& d
  726.                 bFirstChar=FALSE;
    & T4 [  H' z+ r# ]
  727.                 bConnectIsBig5=FALSE;4 \) y% n: ^6 N  r0 z6 T' d8 n
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;7 F. r" b0 S, X, h
  729.               }
    ! z, g1 g; J0 a- k( |/ V
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));% G$ ^1 u4 u- y7 |" p# v
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));6 O" d4 Q& N, n0 q  G
  732.               dlg->m_ListText.AddString(szString);
    ' O) a" X. r/ r1 y
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / h  A% |! f+ Q4 ?# }$ }
  734.               *szString=0;+ t  I3 \$ D6 {( Y
  735.             }
    1 V, U: _" ~/ t& h" k) T' k. L
  736.           } while(iEOF!=EOF);
    3 C. G8 u7 o2 W2 M
  737.           fclose(fp);  e4 B2 _; w, Q* @
  738.           unlink(".\\DownLoad\\readme.txt");6 {7 R' h, x! ^) s: X; a$ R
  739.           dwStartUpSteps=3;
    0 r- R- D2 Y! I& `+ `' Z
  740.         }
    , w3 Q6 ]9 p! W$ J' r2 \/ h
  741.       }- f  l/ x. `3 n, ~5 m9 C
  742.       break;# ]) c4 ]& }0 _8 z- r! y
  743.     case 3:
    % ]# F) j0 L1 I) M
  744.       if(!Dn.Connected())
    5 j* T& k" V+ b4 C2 P1 D4 Y
  745.       {
    : }( K- z  D$ w) E6 C; u& L0 Z; a
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 M2 _/ X- D9 F. f" t8 i
  747.         dwTotalFiles=1;# w; Z8 f# _; n1 Y/ v
  748.         dwDownLoaded=0;
    ' y6 a: }5 p6 d( E0 Z/ H
  749.         bSilentStep=TRUE;# s% I- M/ U+ P/ k0 I/ U/ B! L, |) _
  750.         bCompressed=FALSE;4 A6 ~/ @: A0 A9 \0 B* T
  751.         strExtLocal.Empty();! L8 j) q2 m1 C
  752.         strFullName="checkversion.txt";% ^. m) {6 {+ C0 F! ~
  753.         dwProgramState=AP_CONNECT;( U! A. d6 F5 J5 \, ?
  754.       }
    , B5 ^  e6 r% @3 c9 H0 n5 ]
  755.       dwStartUpSteps=4;
    # G* k) B1 Y3 r
  756.       break;" k7 ~% \; k& q4 f" z) e9 s
  757.     case 4:
    ! }3 G# N' y. c4 I4 a+ s1 [4 Z9 h% Y
  758.       {
    : q( A( C, W, }
  759.         FILE *fp;
    + f0 ]; i( ]% o. z& f; V% ~3 n
  760.         char szString1[128];
    " A: t& ?1 y2 Q( i' [: R; w( f
  761.         char szString2[128];
    ! H/ z! P0 a1 E2 d9 k1 b
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    0 g5 }7 h$ ~7 g4 a
  763.         if(fp)
    ; |* z- F8 j3 r2 O
  764.         {  u$ X) E& w0 n  p6 B/ y/ |$ A
  765.           fscanf(fp,"%s",szString1);
    + R3 T2 a6 Y  W9 s
  766.           fclose(fp);
    ) b" g: ^! r* T1 \! G: m
  767.           fCheckVersion=atof(szString1);. {5 g8 \+ U/ v. |: W
  768.           fp=fopen(".\\checkversion.dat","r");
    7 N# w+ K! ~) f" @
  769.           if(fp)+ R" @# [5 C( c) Y( }
  770.           {
      a# \* C$ Q# p- s5 y% Y& ?
  771.             fscanf(fp,"%s",szString2);, G8 ]2 ^7 u' P+ \
  772.             fclose(fp);, K3 f+ d* }, S/ x4 }7 e
  773.             if(atof(szString1)!=atof(szString2))
    ( m3 q7 A  u8 r4 y. h, A8 Z
  774.             {
    3 `! `  k! Q% H2 P: D, }
  775.               if(!Dn.Connected())+ o5 J( |9 ?! p1 e! ?( ?2 M
  776.               {7 y! J: U3 Y% W7 V
  777.                 bFirstUpdate=TRUE;
    2 s% i- K6 Z' T* I
  778.                 dwTotalFiles=1;
    8 w  n8 V8 N2 w' L# X' H! D
  779.                 dwDownLoaded=0;( Y5 F2 L* K& n
  780.                 bSilentStep=FALSE;
    ! S3 A; @& f- e, V, p
  781.                 bCompressed=TRUE;3 `6 e9 }& s& ?
  782.                 strExtLocal=".\\DownLoad\";6 ]2 Y4 a2 }* i& F# m0 h
  783.                 strFullName="update.txt";
    $ Q& v, F+ ?3 `6 z6 o4 Y/ _, o, o. Z7 n/ V
  784.                 dwProgramState=AP_CONNECT;. I2 {3 K5 F6 H; I& {9 u7 k
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / \5 i+ X+ s4 [4 ]9 a* S- b
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& D1 b5 T  i7 s; U% U7 N
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- `3 |4 t. Z# T; c9 B) n' M3 W
  788. . t& c. j, x" ?) i& ]& _
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * E* P  g$ N: ?! t0 y
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    & I& \* A9 ]# A7 c1 W4 [
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)8 Y0 O! Q' F; v. h+ B
  792.                 {! P3 T3 c: |& T1 A; l: }. l$ k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 e4 o, V0 t( g: o* h7 }% o
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ; ~3 [+ p% ^5 Z  w; |
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    1 v9 l4 _/ Q1 S% @' v( Y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' ~' s, j; e) I5 O+ j7 p0 d

  797. * P4 g& z6 [3 |/ O, N, b' e
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");& s  r9 W6 v2 R' a
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" |0 g! S% Z  H: d
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! {: B; S" k- D) U) K+ i8 H* g
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 C- V1 g4 ^! V% L! _, e& N6 J
  802.                 }% ^( ]" n7 K/ N3 a) U$ @; Z
  803.                 dwStartUpSteps=5;
      w; Y. A* M; a. T% \4 w2 L
  804.               }2 E& V+ s0 Q+ k: j' J+ J' A5 k
  805.             }
    % ^& h* z, J: y
  806.             else
    ' m/ w1 I, g6 ^, b7 _0 m* L
  807.             {' G" u  W8 s, z
  808.               unlink(".\\DownLoad\\checkversion.txt");
    2 ^$ e0 W4 {8 F: n, N% a
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");' O/ ]/ f' Z1 G$ ^/ T% t
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : Y1 Q, O+ a7 M" G/ d& z  {* h
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ( z; n' Z/ s: @0 f7 B# G

  812. 9 K! D7 R% D' w3 M
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 ~+ b+ l1 z% Z. |% d
  814.               dwStartUpSteps=99;& k# O, P- F9 \/ C7 g# X
  815.               bFinishUpdated=TRUE;, R" _; B3 c5 M) o3 s
  816.               bCanUpdate=TRUE;
    - A/ @) `  P( V2 A* x6 L! ?# q5 g
  817.             }  q$ g3 n# K+ \0 ^) X2 q" O
  818.           }
    5 k7 @5 }1 t% G& f: y5 W
  819.           else% h6 m+ c6 M. q* v1 c5 n( x
  820.           {# U+ Y9 r: h" h/ X
  821.             if(!Dn.Connected())
    " u) Z$ G4 ~  E$ p
  822.             {
    7 M7 I0 a) u7 c6 u
  823.               bFirstUpdate=TRUE;
    6 w- o, o% c5 R! V* r
  824.               dwTotalFiles=1;
    : e/ D- F- L1 @2 {) Y# n+ e- E
  825.               dwDownLoaded=0;" T/ s# i$ D/ s2 p2 W7 |6 [
  826.               bSilentStep=FALSE;
    1 b8 L+ X) g# C- D2 @$ \% b5 E
  827.               bCompressed=TRUE;  @8 z! J- C' A% W' x8 Z9 X
  828.               strExtLocal=".\\DownLoad\";4 y' |; H! M+ ~% n
  829.               strFullName="update.txt";2 L9 t/ c/ N: A# `7 \, k% Z
  830.               dwProgramState=AP_CONNECT;
    + s# u/ T& }+ J4 @& V8 ?+ B# G6 X
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 H, s" t; \" g
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: B% d. t" a) P  M. I
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 C$ L7 e: d' H
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / F7 E6 I1 t. d' K9 X
  835.               unlink(".\\DownLoad\\checkversion.txt");% y3 w% D4 F' Q/ ~; r
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    6 ~- t8 }* c$ q# ^# t
  837.               {% O0 u9 E0 ~7 ~2 E
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");& |: K. \6 i! x; u, k: X( x7 }
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");% ]8 t3 o0 Y8 ^1 k4 m% n  W, J
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    " x) m9 r0 t) n! v
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 C4 Z& \+ `8 @8 }# L6 y% n% ^
  842.                 ' z; q8 X9 I( d  e$ Z
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");' r1 y6 ]( ^  H
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" T6 r1 A4 F/ q
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");# G! [! y1 s- ^( Z3 X
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 D% ?* J4 M/ v* l$ J! X
  847.               }
    * ?6 _" u, K+ b0 ^( K1 h
  848.               dwStartUpSteps=5;$ F  p4 N; f* F, _6 x
  849.             }- T3 H  T: P; W. t
  850.           }( W. t" F* m' E- C( j* W% s- V, p
  851.         }
    3 F) b/ [# K! x; T  y) a* n
  852.         else
    ; D+ |5 w1 z1 X
  853.         {) V4 L$ P/ {, B$ I* X, |
  854.           dwStartUpSteps=3;" W+ ?0 I1 B5 l3 \0 o
  855.         }3 |7 y1 y" B5 z( s$ A7 {4 S" B3 F2 E
  856.       }4 j7 o5 |  ]- x& U- Z6 U) r
  857.       break;2 u- ^/ N8 d4 u& {( ]5 ]) N& Y1 W
  858.     case 5:
    5 W' H/ G5 ~/ U& b
  859.       {
    * v- f7 e" \/ U( W
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    6 V1 I3 ?. {! e. H* `* F
  861.         {0 y# E' o# C9 z3 Z  H
  862.           int opt_overwrite=1;
    / y) U& J5 C% \8 j8 w  H$ a/ N
  863.           int opt_do_extract_withoutpath=0;
    8 H8 g: H% h8 B! j( h
  864.           unzFile uf=NULL;- G7 I7 B. y: j! C: O* k' d! O# J6 d( D8 t4 h

  865. % ^% `' S2 t3 K* @3 u0 m
  866.           uf=unzOpen("Wsa.zip");
    ' t. q  b3 M0 E4 y4 E7 M
  867.           if(uf)
    + z3 n! I6 ], P5 i
  868.           {
    ( W9 D( U7 V8 S. J( y. F5 [
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
      H5 c& c. g$ ^% _  ^
  870.             unzClose(uf);
    # g5 M7 {% x. n( s/ ?
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");$ |! D$ m1 F  D% }
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ) ~+ _' A2 }4 h, G; h% f
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");9 Y  L' |/ a1 ]( ~; e
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 f/ l$ v7 y8 M6 ~8 v' h. _
  875.           }
    8 R  r1 r6 H! c1 O" a- v
  876.           DeleteFile("Wsa.zip" );
    1 E* f0 T) t6 [* t1 |
  877.         }
    7 ], w( \" d+ o; y5 B, ^

  878. & {3 t8 R- J' E4 M2 z6 i
  879.         if(CheckLocalVersion())2 o: i) B+ }: i. U
  880.         {
    $ U* Y) J+ ^# v+ M! u
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");( ?+ L8 c$ W; g( _4 {
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    : m% P0 q, |0 h5 z+ F. M
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    * D$ n/ _# h4 J- ^3 i: d
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) j1 x/ U: a1 s; ~; K; m  S! `+ N* p
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);6 f6 d  V1 `- h/ P1 ^
  886.           dwStartUpSteps=99;3 p% t: `* t& p0 A! J4 u0 O
  887.         }
    : s4 Q5 A% G* r6 L* l+ o  o
  888.         else
    2 r: H! r2 g; d
  889.         {
    # N8 F2 @- o- X3 g) L. V$ o
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    3 p$ L/ _5 W& n: c
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" J5 p+ _( \5 Y$ ^* e
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");6 ]  W3 g+ @- i9 K5 d% [5 W

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

( z( |! h0 r8 ~$ ~

評分

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