找回密碼
 立即注册

CSUpdate.exe源代码

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

5 [6 k7 j, B6 j; }' u* x
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ' Y; h. W' y( f8 s
  2. //$ \$ r1 n" h% I" v9 i

  3. / E( q5 V  X7 j: @, n2 `
  4. #include "stdafx.h"
    . s; m, z# T' E7 L, V3 h
  5. + ^* c0 O4 ?2 e
  6. //#define UNICODE
    3 X7 l' W8 Q7 c7 f2 [
  7. //#include <gdiplus.h>1 ~7 N+ Z6 a7 G2 W6 O3 H3 d
  8. //using namespace Gdiplus;9 o; J5 R; @9 e9 X" r+ w. J; D
  9. ( X6 W7 e. F; k% n( O4 w. J
  10. #include "RevApp.h"
    $ R2 ]+ F& a6 l
  11. #include "RevAppDlg.h", [* s2 O! c% [' Z: @" }& G- o" O" ~
  12. ; b5 Q5 }, E/ w( {; w
  13. #pragma warning(disable:4786)
    0 ^& @! M) z4 i' f. f
  14. #include <map>
    * `9 L6 F+ e1 D- l$ I# ^
  15. #include <list>
    ' e( Y7 v$ m4 P' K8 T
  16. #include <direct.h>+ f. V/ S6 C. g7 D6 Q

  17. + x/ i$ ]! ?  D) z0 R) a
  18. #ifdef _DEBUG
    ! e, H" M$ M/ x) z) M2 N
  19. #define new DEBUG_NEW3 @: g5 i6 ]- m: b
  20. #undef THIS_FILE
    % j3 f1 ?. B5 a7 J. d& r
  21. static char THIS_FILE[] = __FILE__;. e! @; o; u5 {
  22. #endif, C- [) X& c! o( o6 O- q( H
  23. #include "SkinResDef.h"
    " \) u5 b5 \* O: i* O
  24. #include "ChangeBG.h"
    / ?( S* E2 n+ B) K1 f  Z. e8 o9 x
  25. #include "AFXINET.H", O- V) g* S+ z4 ^3 y/ [
  26. ; s* d( l/ Z# T
  27. #define TRADITIONAL_CHINESE 0
    1 }& x" n. j; F' |1 i
  28. #define SIMPLIFY_CHINESE 18 A: O' q) D1 ]& y: D
  29. #define ENGLISH 2/ Y% ]5 |& A7 S1 K6 A9 D
  30. int m_iLanguage = ENGLISH;
    - \. Z$ o/ u) r9 ~( f1 s
  31. /////////////////////////////////////////////////////////////////////////////4 S6 x  R" c6 u& W9 N9 z  i
  32. // CRevAppApp1 @! n6 a. ?+ h, b7 ~2 H3 z: R0 u
  33. 8 a8 i1 g3 q2 m" Z
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)4 f2 V2 O' H( O: N2 m  s% _
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    . E& v6 I1 g' }2 c7 }1 j
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.8 b) @8 Q: O8 w- Q! H
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    8 y6 j0 }( I( F( _5 v
  38.         //}}AFX_MSG  K2 h8 w' ]2 ~3 T
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)2 r! O/ c, T3 R" \9 z) N6 O8 |
  40. END_MESSAGE_MAP()
      y) R" N+ E! W! P
  41. 2 m- m1 r6 Y5 n5 `. k( `
  42. /////////////////////////////////////////////////////////////////////////////
    . H! l! i. _. `2 Z% {
  43. // CRevAppApp construction8 T! K. P2 [7 n# G9 N0 N. b/ B

  44. 7 N2 {; X# S/ O" O% d$ D. w; _  Q0 ?
  45. CRevAppApp::CRevAppApp()$ K7 Z) g2 W5 v( Y  e, U) l
  46. {6 f- A$ y9 y6 f, D, i
  47.         // TODO: add construction code here,
    3 {, U/ r( g; d: p9 w3 S% |
  48.         // Place all significant initialization in InitInstance
    , ]! J4 V2 S' F& A
  49.   bDisplayIsBig5=FALSE;& ]3 t3 u- Z; U
  50.   bRestartUpdater=FALSE;6 I' A6 D5 M% w' h' d. g
  51.   bFinishUpdated=FALSE;
    : p; d9 H, s% c/ _! o8 O% m
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;% [3 R$ x. x5 ~# E2 H: x
  53.   InitChangeDataBig52GBKS();
    0 x# f7 V! P$ @+ w8 r
  54.   InitChangeDataGBKS2Big5();
    . @* R0 i; j9 E3 Q' f' ^  L) V% j1 _
  55.         //$ k+ S5 ~) z3 r" u2 Z% G
  56.         bClickRunExe = FALSE;
    $ P1 @: C2 z) O
  57.         //
    ; e4 J5 f+ U) {9 S2 D
  58. }8 m* C# m0 o7 ~% |9 P1 i0 {: K

  59. 0 L( ~" V- K7 b
  60. CRevAppApp::~CRevAppApp()0 r" m0 [! r0 S' D  u/ u
  61. {
    * G! P* c7 \9 I; T: s9 r
  62.         // TODO: add construction code here,+ b" Z, F5 S# ~" Y% Q
  63.         // Place all significant initialization in InitInstance% P, k7 Q, b$ N
  64.   EndChangeData();3 c. n1 N1 y) T# t, P! A. k
  65. }
    0 Q/ O; x8 \+ U9 M/ ^0 d1 |
  66. 9 B& i$ _! F3 [1 \, g3 o
  67. /////////////////////////////////////////////////////////////////////////////
    7 D8 d$ F5 l, Q% w
  68. // The one and only CRevAppApp object
    & ~3 T1 Q: ?  s2 F/ E- ?( m
  69. 9 o# X) K: T/ Q& G* O; X  i
  70. CRevAppApp theApp;2 S) t- b1 Z6 ?+ z9 E

  71. . ^$ V$ w8 k( O  `  P* @
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : C  q- W" @6 b( ?, i
  73. {
    / X6 ~3 l5 z4 ~: W1 k  T
  74.   int iEOF=0;
    : f! k& S7 i3 v1 o- o
  75.   char szTempName[MAX_PATH];
    $ i9 z2 v, G* s8 `" t
  76.   *szFileName=0;
    0 S' d2 N9 \4 e9 u
  77.   iEOF=fscanf(fp,"%s",szTempName);
    : x( Y: n# S4 }4 a
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')7 K1 J, ^: |/ W% J9 b* l/ ~2 |
  79.   {
    0 ~- L9 {1 l( L$ j! L. a9 y: G
  80.     strcpy(szFileName,&szTempName[1]);8 }  y) c( T% F
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)- d8 j: v6 K1 x* ?( |) |
  82.     {
    1 l( j2 a3 U) g, H6 P+ K
  83.       iEOF=fscanf(fp,"%s",szTempName);* y: ^% I& i4 j9 S6 Q) K
  84.       strcat(szFileName," ");2 m- W: h3 J- y) V
  85.       strcat(szFileName,szTempName);3 z3 B* g9 X# j3 |( G
  86.     }7 o2 a! l( ^5 U  h; }
  87.     if(strlen(szFileName)>=1)0 b& ~6 J7 b/ k* C
  88.     {' z/ [0 H6 w3 g* m8 K# q
  89.       szFileName[strlen(szFileName)-1]=0;2 T# ]0 ~0 b: O; A7 c) x
  90.     }9 W! b1 _  Q) I: T/ C" o
  91.   }3 D. {) V2 o( C) |' l5 G# W
  92.   return szFileName;
    7 U) f$ M$ H: k3 O4 I2 t: @9 W
  93. }2 F. ?$ I+ Q$ S1 j- h7 r
  94. % Z: Y+ v6 N- I2 T6 Y5 P
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    , u- C0 @: |3 Q0 H
  96. {: d" A' v# P8 m& k; n2 G3 m
  97.   FILE *fp;" z8 ^6 B" @0 b3 Z8 J- A
  98.   char *key=NULL;
    $ B7 [6 `) e0 {- X. V/ W) Z
  99.   char version[MAX_PATH];, P6 h& s" K0 B+ L
  100.   LPUPDATEFILE file,olds;' _$ y: i- y- u: F/ C5 X
  101.   std::map<CString,LPUPDATEFILE>::iterator p;7 I% M$ |2 f6 |4 q2 y' f4 {

  102. $ n; V0 N' ?! P: [& s
  103.   UpdateList.clear();
    # E9 ~& R. ]5 M0 E6 L( h
  104.   UpdateFile.clear();0 \, B% c% r) I4 b5 W  R
  105.   if(GetFileAttributes(filename)==-1) return false;3 l! `5 @3 y) u1 i
  106.   if(!(fp=fopen(filename,"r"))) return false;: y2 G! a7 u6 Z& @5 c
  107.   fscanf(fp,"%s",version);" P' `$ l% q% e
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    , ~) Q$ i& Z  V$ Q* R* y* A
  109.   while(fscanf(fp,"%s",version)!=EOF). q4 k; }) e7 w3 ]. g0 O1 `4 ^
  110.   {6 m0 S, v0 F2 c! M1 [; U
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 a" `# J. Y- n: R3 X6 c5 n
  112.     fscanf(fp,"%s",file->path);, @/ w$ p( d% X" ]% k
  113.     ReadFileNames(fp,file->file);5 V6 K" y; \3 F0 a
  114.     strcpy(file->full,".");, V5 `  y& R( d  v6 [2 o
  115.     strcat(file->full,file->path);$ T/ ]9 {$ n* Z  b' Y& D
  116.     strcat(file->full,file->file);
    1 J' i9 `( ~8 t0 D
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())  f) H0 Z' k8 L  N6 @. v
  118.     {% ~- S6 k. t" S  d3 I2 N
  119.       file->vers=(float)atof(version);
    ( h& m3 q" l  A5 D# m
  120.       UpdateList.push_back(file->full);
    0 `, e; X, @/ [$ r- T/ s1 \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; f( ^4 ]) N) a+ G$ F' n
  122.     }
    ; B+ S6 m& r# @' K3 \
  123.     else
    8 @6 G% O' K2 z/ j. ^2 j! X9 a' c
  124.     {
    $ i4 v) S6 a) s
  125.       olds=(*p).second;
    8 X1 L( `3 o' z/ t
  126.       if(olds->vers<(float)atof(version))
    * f5 W* }, g- G4 e! m+ h& c
  127.       {
    ) Z" \) K2 w% s, }+ N
  128.         olds->vers=(float)atof(version);7 F! d1 ]. G* B" X4 [) |
  129.       }
    $ P- Q% E" x" E2 D: }
  130.       free(file);
    % B0 i, [9 s0 Q, q3 s; H
  131.     }
    ; o# |' f5 O9 Y  M- @* `2 y
  132.   }
    3 @. k6 P  c! L3 \; f5 d5 E$ F0 F
  133.   fclose(fp);
    " C2 [* n0 d) r9 W7 v' I% \3 s, `
  134.   return true;4 T6 d& ]0 S' F* n
  135. }4 ^! {) r, g  Y; q: Z$ z% D8 D. a8 [
  136. - ]; G6 n2 u5 w
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    " P5 k9 {1 W% O  `
  138. {
    ' y+ F. _/ o$ T, u3 D
  139.   TCHAR  szFull[MAX_PATH];
    8 e, K( D0 I1 T- {& C
  140.   TCHAR *token,*inter;
    ! w( t  ^$ w' R: W1 }( \
  141.   *szPath=0;! y1 G5 O. U4 C6 b; I
  142.   strcpy(szFull,szFullPath);
    : [5 V, E2 U, |$ M
  143.   token=strtok(szFull,"\\/");
    ' z( M  ~8 i8 j( m! D  ]5 C
  144.   inter=token;( D# G& \# L7 V+ t+ b# r
  145.   while(token=strtok(NULL,"\\/"))
    + R) ?$ Z! Q3 L' O/ y' z! }
  146.   {
    2 i4 \6 J, h' v- t3 ?6 B
  147.     strcat(szPath,inter);$ X" m5 O* a+ ^, J: E" v
  148.     strcat(szPath,"\");  Y8 D8 t% ?+ O4 y
  149.     inter=token;
    6 [' M5 Q- m0 u- J* t* B6 f1 E+ c
  150.   }
    ( j1 a! _3 x' J% i$ k5 {' R# ^0 f: ~
  151.   return strlen(szPath);
    6 R; U. a2 U" n) G, M% x: }
  152. }
    - w% ?( r2 d% U5 V2 }$ t) d

  153. 5 g8 y, j5 L8 R' T  g( C
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)# @9 K* T# ^4 b! {$ p/ S1 G, J2 S
  155. {
    7 G+ x0 C+ s9 a0 W( H% T7 V- V0 H
  156.   DWORD attrib=GetFileAttributes(Target);
    . X) q/ I3 u; R8 A7 m7 ^& M: L
  157.   if(attrib!=-1)
    * H3 E& M9 B+ ^3 l+ }" _
  158.   {
    5 N: ]$ T( a, n
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    5 x: Z4 ?+ [1 k' F9 ~
  160.     {
    1 ~+ A1 s3 ?" |1 q: E3 t
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);$ ^. K; P8 f/ O7 E/ T9 r0 u
  162.       SetFileAttributes(Target,attrib);
    - D8 C* _( n1 S: {# P1 p
  163.     }
    1 V: O5 O% S1 r/ V* ^7 {) P
  164.   }, W9 H& i$ T) R; R/ @# Q
  165.   CopyFile(Source,Target,Erase);
      p9 R7 `6 J3 Z' B. \
  166. }6 I, P) P4 K. G2 H6 y8 c" H
  167. 7 i* ~" ~0 C" K% V4 V/ L- f
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    $ U& Y# f' B6 k, F
  169. {' D7 v8 L1 I; ]$ a" {$ p
  170.      FILE *fp;
    1 b4 G5 ~% F- r. g% {9 p
  171.      char  szBuffer[8192];. `+ O5 ]( a0 V' y6 \1 L
  172.   va_list  argptr;
    ' h) C. i* `& p0 \# U

  173. - w5 l5 G! K8 f7 ?; ]- M
  174.         va_start(argptr,message);0 b" [/ ]. R) Z) \) Z
  175.         vsprintf(szBuffer,message,argptr);
    6 D9 h8 z/ C  V7 {! r' m. G4 y% Q
  176.         va_end(argptr);
    9 a& O+ k- x7 y* R5 T% n
  177.   fp=fopen(FileName,"a");, @9 i# a8 L  w+ Q- `6 R1 h
  178.   if(fp)
    : N- M( f; G6 E+ [$ u5 d
  179.   {
    - b; i" c+ R  M% G: K* s
  180.     fprintf(fp,szBuffer);% W, k% j/ `* v) O
  181.     fclose(fp);2 v0 v4 T  _. s7 t' Y
  182.           _flushall();
    . D$ s& g0 U- T+ m2 h% n
  183.   }# }. y# K3 m4 y. B" e: w8 h
  184. }
    : _* R  X/ o/ R" h4 R# I' t
  185. $ g6 A$ ~1 ?, Q7 J
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / n2 {0 G" A& |) O/ y5 n6 u
  187. {- D' w4 y% }$ S" s3 _$ [
  188.      FILE *fp;
    , i3 z* \/ S$ i1 ]4 V" @
  189.     DWORD  attrib;
    & s+ [" W+ N; f# W% b8 C
  190.   attrib=GetFileAttributes(FileName);2 E. ~3 a# `. X! o! b" e  o
  191.   if(attrib!=-1); ^" N" Y# s0 A% y0 F$ M
  192.   {3 n2 E  {* L; I3 A1 Q* B
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    : ?0 j/ Q2 m1 A, G5 e) Q
  194.     if(!SetFileAttributes(FileName,attrib))
    ; P7 K2 E# {" b# N- J% H
  195.     {% U. z& s* l% _. a$ y* K2 I  O
  196.       return FALSE;
    % `  }. y8 F# c  W7 v2 u
  197.     }
    , U$ \) ?! f; c1 }+ d- }- `3 t  ~
  198.   }
    " y8 b$ N' C2 ~, m4 f5 I' g
  199.   fp=fopen(FileName,"wb");
    % b9 N1 O6 l9 U
  200.   if(fp); U' z2 u: r# }2 I% B. s& F/ C) P* {; \
  201.   {7 l! W; _! D8 ]9 o. J' R& w
  202.     fclose(fp);! P( w+ `. W6 d: k) V: t& ?
  203.   }
    1 X5 l! `4 {6 X* V! R+ J! q7 t1 |
  204.   return TRUE;4 N0 K# Z4 o; U9 t7 G) @6 @
  205. }
    : i+ L/ L) n: E2 k
  206. ! f' V- i6 ]" C3 K; N
  207. BOOL CRevAppApp::UpdateLocalVersion(void)' d& N3 n: g7 q3 p" [; F4 u; n
  208. {
    . ]$ Q* }0 c8 K# a* n3 C7 _: B
  209.   char filename[MAX_PATH];
    ; o, e$ v1 C5 d* J1 F! L
  210.   LPUPDATEFILE file,olds;
    * F$ n+ c: ^6 L2 y* b
  211.   std::map<int,CString>::iterator i;
    * k; m! r2 p" Z0 T4 S, }# W
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . R& l; w$ H" U% n* Q# n8 g
  213.   std::list<CString>::iterator l;2 X4 q' ]6 V' E+ K/ D& ^" T
  214. & t* [, E# w0 G
  215.   if(bFirstUpdate)9 J0 U2 F, X2 N& l
  216.   {: a: O% h/ K7 t, s# R& T* K0 c5 Y
  217.     dwCurrFile=0;
    ' V$ J0 Y% Y+ A! I/ R0 A8 }3 A8 l
  218.     bFirstUpdate=FALSE;6 Q! C* Z6 p. C: ~2 e) ~7 r. R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 _! s8 y0 ~+ L0 Y) V) t
  220.     {
    $ W0 Y) _0 G: w7 `
  221.       dwTotalFiles=UpdateLocal.size();; Q3 ^9 Q0 E; S* M; F0 I$ T. u
  222.       dwDownLoaded=0;
    2 q* h% I9 O3 [/ l: o9 a
  223.       bSilentStep=FALSE;: |+ a: O8 R/ ?
  224.       bCompressed=TRUE;
    0 n% X1 J" G( }5 O. o
  225.       strExtLocal.Empty();
    1 o1 A# k& ?0 c
  226.       strFullName=(*i).second;( o5 s  }. d( ~# w" O* \" F& g
  227.       dwProgramState=AP_CONNECT;
    1 v1 M( c: x% I) \$ p" V" J% C
  228.       return TRUE;
    & s9 f' M" L1 l1 O+ H  x* {* J
  229.     }
    # C; U( y) i2 M9 n& H
  230.   }
    * e( B2 J4 P2 N) A5 I
  231.   else if(bRestartUpdater==FALSE)
    8 c# k0 I2 F+ ?/ M
  232.   {0 s1 S2 @& K' X4 }" Y6 n. h
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())0 X# z3 a7 t) j2 Y5 g5 s2 ~
  234.     {
    ! u) [; j& G. w$ ?0 w, d
  235.       file=(*p).second;8 i/ z% R  s$ o2 M# x2 t; }
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())* ~& k+ [0 B7 c) c3 R# X
  237.       {
    ; g4 M3 J" K; X' M8 ~9 R
  238.         olds=(*p).second;
    2 n1 M' {, K- \5 B. L5 K* a& {
  239.         olds->vers=file->vers;
    9 v3 I! h* L  L" x
  240.       }& m1 O8 ]0 @2 i4 k" D2 A
  241.       else
    3 p+ k: y7 O$ B8 n9 z" f1 j
  242.       {
    " c/ g. I" C. a
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 e+ J  ~7 w1 p- H2 v
  244.         memcpy(olds,file,sizeof(UPDATEFILE));/ Y$ B, M$ x% }1 s
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    7 s% D& s  ~% x9 A" T
  246.       }
    1 v) D- L* D' q7 k3 ^( L
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");& M7 H# }: ~1 ?+ ?2 g" R
  248.       sprintf(filename,"(%s)",file->file);! a+ T" M' E2 a* s" p7 W! t
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      N2 b% t& g9 j, p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }7 _( r  ?( K" @& ?
  251.     }& R; y) D5 g  e
  252.     dwCurrFile++;
    , O  u7 S2 w# J* X/ o
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) Q: O/ m9 K. {0 g
  254.     {0 ^7 T$ ~+ C* I9 m+ s4 H$ D4 D
  255.       bSilentStep=FALSE;) v+ o2 e5 G/ x& ^
  256.       bCompressed=TRUE;
    ; v: a9 E5 X! Z9 @' |
  257.       strExtLocal.Empty();
    : }, t* B5 `) a- ]& ^1 R5 @
  258.       strFullName=(*i).second;
    + X" h: _$ c  s! F, x
  259.       dwProgramState=AP_CONNECT;
    7 f! y6 d8 @  T
  260.       return TRUE;2 H, a/ X# o3 g! m! _
  261.     }2 G' B0 h; s, a* u- Y( l
  262.     if(!bRestartUpdater)$ E+ l2 B' {. V% n4 Y0 h4 ?
  263.     {% e3 U. P/ F. b- l) O. o
  264.       int iCurrSize,iFileSize;+ e1 {! |9 x2 G
  265.       iCurrSize=0;
    + }, O) S# s0 j! y: I4 g
  266.       iFileSize=UpdateList2.size();
    + `5 ~5 ^1 z" p
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    5 j; x7 \+ u( ]- V5 c+ j+ H" {
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    5 Z8 V8 |3 S  ]* u( i
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");$ n8 R. i$ z# U! q1 U, F) l. I1 B
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, @# Q1 Z9 [6 Y
  271.       Fclearf(".\\update.dat");
    " ]- Y! b; O6 y' }, K1 x
  272.       Fprintf(".\\update.dat","Bloodyf\n");# q6 `4 o  c: i& f  j
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ' \* H' S0 R) ^3 S! }, [/ t
  274.       {
    9 v: d: ]8 S0 Z# x
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ; b9 u" ^( P# g' r" ^  a5 s
  276.         {
    6 u5 i( I4 L- t2 x0 h4 w% I6 R) d
  277.           file=(*p).second;
    9 ?+ \6 _3 ^" N5 c9 n3 Y
  278.           sprintf(filename,"(%s)",file->file);
      _8 P+ O9 |3 U8 k6 q* r( V
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# I+ j3 U  t3 D( i  [5 o3 u
  280.           iCurrSize++;
    ! E& A0 G: o2 L5 X$ j* ~1 `
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    0 x9 s; K/ ~4 B* L! M( L) }
  282.         }
    / I' E+ o7 B' e  q
  283.       }- @" J, O; K* i1 m" ?* E1 b
  284.       unlink(".\\update.txt");
    # q2 J& i8 v1 e
  285.       unlink(".\\update.tmp");: a' c/ P7 ^) r' i+ ^5 N  b0 ^
  286.       Fclearf(".\\checkversion.dat");. P2 w9 U3 @+ z. D+ n4 l6 W
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);, E( G2 D7 y" ^0 |
  288.       if(UpdateLocal.size())( V$ L. |8 G( m$ i1 T3 g3 K+ ~! A
  289.       {
    9 d! K* v1 k! S" l$ C" P2 J" J
  290.         UpdateLocal.clear();& H" r6 V0 H/ l& h7 l5 b6 L
  291.       }( h1 V% A; d. g0 J2 u) X# r
  292.       if(UpdateFile3.size())
    ' N% u  r/ |  U+ L: ~' [- X% m
  293.       {
    - K, g, T1 t" D) k* R( m6 `
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), }  V# G3 U* E1 V' t' m) j; b
  295.         {
    6 b* }" s- {; v2 Y2 E9 O( L
  296.           file=(*p).second;* q% |4 c1 R+ q
  297.           free(file);
    3 p5 M1 h+ p3 U6 j) W) a. g
  298.         }
    9 H' F* ~& F/ y) Q! R* a0 @
  299.         UpdateFile3.clear();( v& ?' X& v7 N+ t, i
  300.         UpdateList3.clear();) c* R. e; i7 {9 ?( w1 _: L
  301.       }
    1 ]6 Q# m# a; J: t
  302.       if(UpdateFile2.size())
    # l. V1 M3 L; J7 B1 t
  303.       {
    ! i2 _2 t1 d# a- u
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . p1 H1 C! [& ~  u: j. m
  305.         {7 G, \  p/ H- Z$ [  d2 g
  306.           file=(*p).second;  ^/ s% R3 a* f$ H5 V3 R+ b
  307.           free(file);' g( H* }$ D9 G& D  D
  308.         }
    , U9 g, a( Z: x- j: o  M) k
  309.         UpdateFile2.clear();# m; b( U9 h5 x8 A4 p
  310.         UpdateList2.clear();
    / U" z/ Z5 U0 i
  311.       }
    ! O+ T3 e) l( d3 S
  312.       if(UpdateFile1.size())  D9 }2 _+ n4 B# @% t2 V: X
  313.       {# y- o' f5 _7 D3 B
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) O+ W$ n1 i. _9 e
  315.         {$ T/ S# ^$ }& h* k
  316.           file=(*p).second;1 }( o! A3 h9 z  |. v
  317.           free(file);
    # L5 Z& m2 X" f8 q
  318.         }
    ( S$ t" L& y5 B" C
  319.         UpdateFile1.clear();7 e6 W! _# H+ a8 t- {
  320.         UpdateList1.clear();
    ( Y+ I: H, }# i* ?8 c
  321.       }2 y3 I' A! L, a3 @5 T& ]
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));1 c. ?* `- B# n4 t% r
  323.     }
    # d& V! o) H. o8 _% I; q
  324.   }0 c0 A( {+ ?6 w' Z
  325.   return FALSE;! v; Q# R/ ~3 T) p5 e# X
  326. }
    8 F% q2 C4 A! J. p
  327. - k5 u! t! b/ ]3 j
  328. void CRevAppApp::ClearAll(void)
      I6 B& e& E! u: s
  329. {
    , M! x/ T% }* g3 z
  330.   LPUPDATEFILE file;5 `/ ]: X9 A- l( C2 ~5 c6 s
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * `4 S1 L( U6 ^, ]/ r  h' b
  332. 9 j+ M7 L0 ?. d' G8 b0 M+ w
  333.   if(UpdateLocal.size()): k( H0 P& L* j7 j- o
  334.   {' y- G" c# w$ U1 C8 K
  335.     UpdateLocal.clear();
    + b5 q9 d; v- S% s/ v
  336.   }" `/ e* y5 `) n
  337.   if(UpdateFile3.size())+ K& [  i  s+ L0 h* S
  338.   {1 o5 d' Q3 a/ m* a* M! v+ D* y: I
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      B3 M9 Q/ Q: l9 \
  340.     {
    : E/ w& W+ f8 d5 c
  341.       file=(*p).second;/ z3 J- P/ d2 O/ U
  342.       free(file);
    ) E7 {0 I. d6 ]* ]- Y. @& ~  M
  343.     }
    ' G- s. p  Q2 \; Y- B8 y% e
  344.     UpdateFile3.clear();0 m1 ^7 w( C3 u" U/ i1 ]9 ]
  345.     UpdateList3.clear();$ L4 o* ~9 r2 ^, m  u, I( h- b
  346.   }
    ) K) ^" L' @8 l& @& e
  347.   if(UpdateFile2.size())7 a: P; o( N! _" G
  348.   {5 Y* x) w, R/ [
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" D" f+ R: V; |5 t% G# L
  350.     {
    : b4 ^$ q+ p1 k8 u- J
  351.       file=(*p).second;
    9 x7 K0 y+ L  Z2 e! g. e
  352.       free(file);
    4 y, D8 d; z0 C5 O7 q* S  {
  353.     }! b$ l" g& j& u8 z+ |
  354.     UpdateFile2.clear();
      h/ G$ b  k# H) e( V
  355.     UpdateList2.clear();
    % n+ M2 b, N+ t& G% _. V8 @
  356.   }
    0 r6 A# @! W  @# k5 |
  357.   if(UpdateFile1.size())" }3 x0 E% P8 `; J
  358.   {
    : X2 ?* x. B) |: N6 g
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 P. o1 M  {( o1 v" \8 s& y
  360.     {
    8 o5 R9 m- p  m6 W. \" Q
  361.       file=(*p).second;% a+ @$ V2 i6 v' p6 K3 e
  362.       free(file);
    3 B! n" {0 l" d; k1 S; [5 n+ {
  363.     }
    7 d, q2 M8 Q+ r. @! @0 C
  364.     UpdateFile1.clear();
    $ J. m: E3 O: z7 `3 c( I
  365.     UpdateList1.clear();5 T" K2 ]4 U. `- |
  366.   }2 @( {% t; I2 F& S
  367. }  ( ]6 X) ~) @; `
  368.   2 U0 \) L2 m: ^' g
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    & |8 Z* P" b/ W( q8 h/ E
  370. {
    + y9 d4 F8 \2 X, K2 Q, z* z
  371.   int c;
    ( b$ N/ W6 y. W( [+ S
  372.   LPUPDATEFILE file1,file2;* I/ D* i3 J, F; o7 f
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;8 W4 L" y' X. f  }7 V( t
  374.   std::list<CString>::iterator l;0 M2 {$ {& g6 \) L& Q
  375. ; t; E. _# @5 ]0 M5 r$ X
  376.   UpdateLocal.clear();
    * }7 x4 {3 D1 |) E* f+ L7 E
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);3 ]8 [* r* r; [! i
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ! Q, g, h$ ?' @4 n9 i" x
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);- @; l% I2 K2 U( m) I
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);- d+ V$ w3 M8 \, r8 E
  381.   if(UpdateFile3.size())
    4 P9 b5 w- }+ B. i, b4 U8 s% |) [
  382.   {7 B- o  e( ?' ]! _( _( N9 ~# B- J
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); U. k$ k' S  m5 ^' c
  384.     {9 Q( _& {- w& \( n; M3 A
  385.       file2=(LPUPDATEFILE)(*i).second;
    , @* l7 [3 `, w+ K# I8 h" r, j
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 H' f; @. I1 a7 `1 F. J
  387.       {; R8 v* }0 l' w& K# K5 Y& o
  388.         file1=(LPUPDATEFILE)(*p).second;
    1 y" P4 E0 i, o* h' U5 h+ K+ D
  389.         file1->vers=file2->vers;" ~, V. E5 r7 s2 d- W. l' b( f& j
  390.       }
    8 E' S: T1 s7 l4 u  l) U4 g
  391.       else
    7 |/ Y' `& @: q7 k$ J. l+ M# u
  392.       {( L8 |1 |* F# H
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / }5 |8 Z! c. _* F; z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    / {% b! b  _9 S3 d
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));( g0 B& |& `$ p7 k/ C+ }
  396.       }
    ( b2 E8 i6 s- [. f% H8 O
  397.     }2 n- O1 N  S' S
  398.   }" J# E, X, C- ]1 [+ p/ i" v2 l$ Z' G5 f& |
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . {" A% r( z. a8 j- M
  400.   {5 A; O/ S! N+ z$ P2 F5 t% u
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ( ?* U  |- O' ^$ f2 V& m
  402.     {
    $ S7 d/ E2 G0 {6 m
  403.       file2=(LPUPDATEFILE)(*i).second;
    : j& {) E" E4 a  Q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 ]# L7 J/ F) f! ^2 S
  405.       {
    9 C2 Z! V2 g5 R- R
  406.         file1=(LPUPDATEFILE)(*p).second;0 u( G7 W# l+ g% c; }
  407.         if(file1->vers!=file2->vers)3 I. c5 ^) L/ w0 x2 h
  408.         {; n( T- r- [( c
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: {7 p( o4 _- W7 }( q! b1 d( K% X/ B
  410.           c++;+ \4 \$ s- [) X: c
  411.         }: V! q, `/ k8 u$ I
  412.       }
    8 E! m% K7 b( {) K+ h# ~
  413.       else
    1 ~6 o& q) `+ l! w! q. C
  414.       {7 m3 ]7 ]1 B+ |" C, m
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . q9 ]& Y4 V- |% i
  416.         c++;
    " p& X4 I9 ?1 k' f% T* \4 v
  417.       }
    7 l. d3 D& I, M, d6 M' O0 T2 L
  418.     }! r  ~) U/ t! W  s6 e
  419.   }. Q8 D( |  I1 U( a- Q
  420.   unlink(".\\DownLoad\\update.txt");
    1 W2 L6 d4 s% |  i0 K/ o6 t+ e* s) A! C
  421.   if(UpdateLocal.size()) return TRUE;5 i& D7 Q$ ?0 \3 u4 h* C2 K
  422.   else                   return FALSE;
    5 I: k# I: x8 t3 j
  423. }4 J! e3 v5 d& Y, T9 p% [
  424. 8 g* |0 |) s# W4 ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 a8 I& i% f9 @% \5 P' D+ o3 O
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - A8 |- P) \) Y, z0 m: E8 V

  427. ; Q" K6 F, o) H8 H$ D
  428. + H2 I& K2 v/ `, n4 Y% |3 `
  429. 8 ^$ V+ V* _* k5 u# K% o
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ f% N7 Y! y/ @' g; {
  431. {
    ; Y8 Z/ F4 l: o! x' C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    2 Q2 _% `0 H* @- ?* b$ w
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; g& P* f: [, S; Q- Z
  434.   {' M) a: m! T4 a' @' d: L2 O( Z
  435.     char szLanguage[50];
    # h& |* ]3 p2 ]3 @
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 ~7 i: s# v- t& k
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, ]8 u; @# S: ^# ^4 x% t
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ ], v- c7 Z+ q( \5 \2 o% ]7 i
  439.     else                                   m_iLanguage=ENGLISH;$ I" J( x* J! P
  440.     char szRegister[100];. S+ r9 [/ n5 x+ {9 A2 @. M: W
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # k+ ?, M  t( t8 _
  442.     strRegsName=szRegister;6 T. J" w1 K+ Y0 S/ i/ b) H- c
  443.     char szPatchURL[100];; @" C* M( }: ^0 d1 n! N/ d
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 q' ~9 f. {2 o$ X( M
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ E7 }/ X* i- m9 A
  446.   }
    2 {: W0 K% B! a
  447.   else0 c! G4 L* O- J$ ~2 F
  448.   {
    3 Y( V5 P4 i0 v
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! w" i: w8 S' G0 B5 s$ `6 ~. M
  450.     strRegsName=DEFAULT_REG_URL;
    4 ^7 b4 O& G6 |7 ~
  451.   }% j/ A# i1 ]* p0 |( h# W: L" w: V( J
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    $ }! L# V8 r9 y& V
  453.   {. k( `) l0 P2 U( z; k, i
  454.     char szIP[50];
    : g# s4 u) s+ k4 i) f
  455.     char szDIR[300];
    ( j$ z! @- e- u' I
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))1 m4 R+ ^; j4 ?& W9 Y, H9 Z% E) Y4 H
  457.     {
    * {  S  p3 u6 `7 ]  K) g4 s
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");0 |8 c4 u+ N) s! a. S* U
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");; A7 R6 h9 z1 _0 H4 [7 Y2 d
  460.       strHostName=szIP;
    6 \6 \( l' d3 m, W$ I3 q: M
  461.       strHostPath.Format("/%s",szDIR);, }' C: |& {# s
  462.     }
    , J' L. t% p" G% \/ [
  463.     else
    9 o$ p( C( N4 J7 {& m* @. q
  464.     {* R" w! j% T1 f8 l
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , U' R; c" l2 O5 W
  466.       {
    9 ]( c* ~/ v% m5 r3 ~7 g4 F" S
  467.         char szLanguage[50];2 T$ P5 h' _4 i! e
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' N' A& k" J' }% f) S/ J
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: j0 U' l! _4 q2 s3 C2 w5 W
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;: R  f# h# n' R0 ^
  471.         else                                   m_iLanguage=ENGLISH;
    / u0 X- ~% r9 y' b
  472.         char szRegister[100];
    ) Q* {* O/ f# G, i: P" K( s
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' Y$ l( k; |" l8 ?
  474.         strRegsName=szRegister;
    ) H8 \+ }: j3 S3 W- b
  475.         char szPatchURL[100];
    * `# Y5 k6 g# L( K: `! b; k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' M3 g0 ~. S+ p; c, `& o; N
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  t0 T8 B7 }1 g7 q: Q5 m! @
  478.       }3 @" P( T; X1 W5 f
  479.       else
    ; G( u: A! d3 R7 e
  480.       {
    / y7 P; G7 n% I. l2 v* }+ u' V- e1 [
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 V5 e% r$ y, P3 m! D2 R' S
  482.         strRegsName=DEFAULT_REG_URL;9 x# g9 k( Y9 j* Y% o! {
  483.       }0 t+ v. `" N, ^" Q, P* x  h& ^3 Q: P
  484.     }
    : J8 l1 L2 D" ~- ?/ o
  485.   }
    ! Q' b6 G1 H# h! I; Z
  486.   return true;* }2 x; B' ~$ L$ E
  487. }
    : _5 g' ~7 v7 d. V- o5 }, o

  488. 6 z0 ~9 k# k) D# m  O. `9 j4 a2 U
  489. #include ".\ZLib\unzip.h"
    . _3 f0 t: o) i7 |# P" E
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
      y# s( ~; H7 j# M1 R& P. y/ Q
  491. /////////////////////////////////////////////////////////////////////////////
    1 H8 ^7 y: b, ?: k
  492. // CRevAppApp initialization
    2 D' r" z  F. `; V. x6 L

  493. ; E) K  B* M0 u
  494. BOOL CRevAppApp::InitInstance()
    ' D+ y7 h5 ~* {7 I$ j' {' K6 Z! {
  495. {
    8 P4 B4 ~) }9 B% i
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];9 P; s2 p2 D2 ^3 F# K. z0 _

  497. 3 k: @* F1 K/ F* C0 X, t: r
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 Z9 L7 c9 M# _% [, X& t  q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ; v* x9 r; [! `) g& c1 T
  500.   {
    $ n. b$ n# Q! |6 D5 t
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 D& K* X8 F/ k' r' \
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    0 P$ v- W0 t- I
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ; b7 K$ Z4 g- {, @* |+ d
  504.     {  d0 c# Y! S+ P1 ?* w3 S2 b& S
  505.       strcpy(szPath,szPathTarget);/ V( `( C( s' v9 f, X
  506.       SetCurrentDirectory(szPath);! U" V- I3 J, ]- A! r; {5 w* ?4 Q5 {
  507.     }
    + g! Y% Q% K; x! [# s
  508.   }- W. f) H4 e1 D( g9 [( J6 e
  509. #ifdef _DEBUG- c1 |1 c$ R( \: |
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 C4 \' S/ k7 S! G4 T( ~
  511. #else, B' C8 E1 G0 A# ?$ s# s
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). ^0 R  E. s; e) w2 k
  513. #endif% M! j4 Z3 F9 \( l' Y2 s
  514.   {+ K1 p1 ~2 Z3 n4 \2 F$ X
  515.     char tempFileName[MAX_PATH];2 q) a& }( C# n. w8 S
  516.     strcpy(tempFileName,szPathSource);
    , j, F) H# K+ N$ P+ d
  517.     tempFileName[strlen(szPathSource)-12]=0;  v4 w4 c1 \( V8 j" g+ g# Q3 E
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ! Z( t0 r0 v5 R
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);9 n. H  r# k2 z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    6 \* f8 I7 I7 S1 z) A! i* K
  521.     return TRUE;
    2 d/ x0 \2 `1 y% |9 @: g( S
  522.   }
    ; Y+ `; ^% E. o  _9 ]/ w# L
  523.   // Nuke 0118: Delete run.exe+ G: W% m; e+ f7 {
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );7 r% W" f& U) {
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");2 t& [; a3 s' j2 u  h! H; Z3 f
  526.   if(!ReadCfgFile("Config.ini")); G, B/ k. j# o, \
  527.   {
    ( S; y! n8 p" g# m% \
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
      e% {+ y- h2 }  T
  529.     return TRUE;/ N5 l: _7 d  U# P) k
  530.   }" x: w+ I9 w0 ^# i) L2 y
  531.   HANDLE mutex;3 T, W4 M: [$ G2 D+ `) t9 G: @
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    7 W( ~0 G7 _7 P3 M
  533.   {- M$ C0 y. F% ]2 B2 k
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    7 ~! T6 I* x1 }1 Q1 ~
  535.     {
    2 a0 c% ?4 A; Y. S* R  V
  536.       CloseHandle(mutex);
    : q7 h" C, A. k% u' Z( B: s' }
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! U7 i9 o3 V/ w$ A# o
  538.       return TRUE;; P0 K& L5 Z, _0 H$ q. ~5 n
  539.     }
    ! a( V$ F- B( N
  540.   }  
    ' z/ ]( e5 a7 A3 a6 h3 K, C  j3 x# W9 |
  541.   CloseHandle(mutex);% `! K* b0 s# M( b2 t  U
  542. 7 a, @$ z( z. Z' S" L: h
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);: P* ?; e& ]5 O

  544. " e- N  j6 V* e! }% t
  545.         AfxEnableControlContainer();
    4 M" O' x- p# K- a

  546. / Y' s4 t& g) ]
  547.   bCanUpdate=FALSE;7 G+ S! Z& p0 E) |$ a9 D" `- I
  548.   dwStartUpSteps=1;
    7 R+ N" Q- P0 _) R6 C8 H
  549.   dwProgramState=AP_NOTHING;: S5 D7 v! I$ x( B

  550. 7 J, G. O6 A8 E6 D$ G
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);& J9 R4 h# n. b$ q: O
  552. 6 ]' U/ U: Q% j& i* G: a" J
  553.         // Standard initialization
    % G" D  K# i% o
  554.         // If you are not using these features and wish to reduce the size
    / \. w+ Q, o; z. ?) J
  555.         //  of your final executable, you should remove from the following% O3 s; y7 {& c# e& p
  556.         //  the specific initialization routines you do not need.% J+ C% M& @1 V

  557. 1 |! J5 ?9 o3 B2 j; c& H, Z+ E
  558. #ifdef _AFXDLL
    3 _) o2 U, W' i9 g2 q" Z5 X
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " Q; w/ V5 |- @, ?( F. j
  560. #else
    1 F3 E7 s7 _# h3 a$ ~0 ?: [2 y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 b6 W" `9 T- o7 _, F/ `0 A
  562. #endif, I6 j5 ~9 _8 G" d
  563. ' P0 ]- Z2 o$ \. V
  564.   dlg=new CRevAppDlg;
    ! J* U( }* P; M2 _+ o, y
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ; }( \* B% W" @6 L2 x
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ' j( l. Q/ r' f+ u7 ~
  567.   m_pMainWnd=dlg;: J% f7 {; O$ o+ R
  568. , f. y# U) W! M& z8 [
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 m9 p$ T2 j/ @

  570. - d% ?/ a6 u1 ~6 j
  571. //  GdiplusStartupInput gdiplusStartupInput;
    5 ]# _0 P2 z$ }' L* ]* g$ s- M! r
  572. //  ULONG_PTR gdiplusToken;
    ) u' I! L8 c! t. s) ?1 N. ?# r" J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    6 [  ^5 q6 W$ R1 j0 L
  574. / z' T5 D: `# B9 P" \
  575. //        CRevAppDlg dlg;
    ) W) @# y1 f) @. u) z" A
  576. //        int nResponse = dlg.DoModal();" b) }! o3 D- y; n7 b
  577. //        if (nResponse == IDOK)
    ; u. d! ^" _( W: P+ H1 V" G5 E+ v0 Z
  578. //        {) y0 F5 t) Z! y8 B1 V
  579. //                // TODO: Place code here to handle when the dialog is3 d, k; i; U+ e6 H
  580. //                //  dismissed with OK
    ( K/ s6 j7 q1 \. i1 k  J- m' O9 t
  581. //        }! i6 @3 J9 ?) l3 X  Q
  582. //        else if (nResponse == IDCANCEL)/ U" ^3 K/ v, T8 g+ S
  583. //        {
    ; [0 b* h/ {1 ^1 q3 V
  584. //                // TODO: Place code here to handle when the dialog is0 o6 x/ C8 K; w8 H/ ]7 j# J
  585. //                //  dismissed with Cancel$ T! p4 v, s* w  U- L/ b3 S2 r4 \0 b
  586. //        }1 ^/ d+ ^% }! e; R  O# ?6 x$ W
  587. - R- l& Q2 q& c- U9 ~/ I  f
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    , X% c+ Z# B' F) }6 P4 Y( |: `8 ]
  589.         //  application, rather than start the application's message pump.! Z4 W1 f7 _: E; b( A
  590.         return TRUE;
    + z+ r- V6 w! R& B9 h
  591. }
    ( R5 o8 i8 ?# J9 u

  592. , q) l1 x, b& r( W8 E' Q7 m
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    , M' Q( ^/ f2 h8 X  g
  594. {
    4 `+ x; r1 M; A$ _) }
  595.   int i;) m( n* t: \+ z5 c3 ^0 W
  596.   char *szRet;
    8 ]4 F& r; B. o# N

  597. 9 \% A* c3 p" t( y
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    , _, a2 t7 S7 S+ z; f/ w
  599.   if(sztoken)1 @& _# K0 h6 [0 O
  600.   {# Q1 a5 ]# c: k5 ~( i" A
  601.     szRet=&sztoken[itoken];$ A% |; T  Y4 C4 }3 P" j  A
  602.     while(sztoken[itoken])4 Q4 T& e+ K3 F# T# I
  603.     {
    # I/ S3 J, k& k- ]* k$ z' J
  604.       for(i=0;i<(int)strlen(token);i++)* \. S" f! d  \& ~9 I+ f
  605.       {% _1 P; E. e* C- O) K1 j7 b
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])6 {, K% l% l4 w6 F% u/ J/ ?2 O
  607.         {# S# Z( e7 T2 N: Q0 n1 N  b* r' M
  608.           sztoken[itoken++]=0;
    7 b4 l7 F/ }5 E0 j
  609.           sztoken[itoken++]=0;
    9 c: c! F2 Z8 K" S  m. ]
  610.           return szRet;7 e- |4 {% q- I5 d: p
  611.         }
    9 G4 W) C1 y" @: P% R3 w, V; c
  612.       }
    $ N/ T% n) R" {4 Y5 |
  613.       itoken++;" Y( a0 T2 ~# g- F  o+ {: T8 E. N4 n. n
  614.     }
    9 z1 @& t8 y/ k0 o0 W1 s
  615.   }
    ; I) C: U: g" p/ |: e
  616.   return NULL;# N- h9 q- N! }( T  \8 o/ v3 p
  617. }
    . p" }& O2 C$ _0 G

  618. 4 Y( j4 L) l; A8 x$ ?& f) o
  619. void ProcessProc(long Total,long Current)
    5 ]6 x. v- s$ r, R6 c: d, m* ^( ~
  620. {
      h: o. n. ~8 T2 A
  621.         MSG msg;
    , G$ A0 F; D7 |: b8 _: v  V
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    : O$ q4 D6 r$ M
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));6 F0 L+ l. C8 r" t* d3 P
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    # o9 i) M& `2 V1 P. C+ k
  625.         {2 t9 R' Z$ n; w# m! ~( r' n% \* j
  626.                 if(!GetMessage(&msg,NULL,0,0))5 q/ |6 a  o1 M9 x' @1 T1 V
  627.                 {
    + @" K; Z" _3 e- {9 U) @9 ^% `
  628.                         return;
    5 J0 F/ S% X+ z6 A% I1 y
  629.                 }
    ) {4 ^* U' G/ p! i2 j4 K
  630.                 TranslateMessage(&msg);2 q3 a3 m- F9 `4 `/ z1 B0 v) l$ L
  631.                 DispatchMessage(&msg);; Q$ W; ]3 m( ~2 F$ h! r3 W& {2 L
  632.         }       
    5 F' \9 r% i3 @" e
  633. }  J7 C. D( _6 [
  634. & J1 l; H. p: |$ F
  635. BOOL bFirstChar=TRUE;
    3 V( K) n0 g2 o" J
  636. 3 B& T( q( g. A( d% p# s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)' ~  L, y+ ?* G6 K* f2 V
  638. {% u; I% b& S3 K9 K: }0 ?+ t: n0 O
  639.         // TODO: Add your specialized code here and/or call the base class& }  d& S% T! m  U. s% i1 C! y, ]
  640.   switch(dwProgramState)3 D5 r: h) ^; L
  641.   {; j0 Q5 T, M1 b  f' @( [9 L
  642.   case AP_NOTHING:  n: {, w* Y9 W1 X1 \" S% N- Z
  643.     switch(dwStartUpSteps)
    9 N/ o. |  s1 e- ]& }# w
  644.     {
    9 S% h1 x' T  w1 K. [- C
  645.     case 1:
    : v! U$ w9 X8 ], x( [6 v  q
  646.       {4 e! p1 U: n& a* d: L9 I& h" I
  647.         int i;
    4 @. ~+ W( R+ ~  O
  648.         CDC *pCDC=dlg->GetDC();
    - G0 o. N, F; L
  649.         HDC hdcwnd=pCDC->m_hDC;" X, [5 O$ f# b: ~4 c2 f
  650. //        Graphics graphics(hdcwnd);2 b9 N' c$ z+ g2 `
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    " R; z8 ^1 L: S$ m. S. b4 h
  652. //        INT iWidth=bitmap.GetWidth();
    9 P* Z" z% I7 v% t! ?
  653. //        INT iHeight=bitmap.GetHeight();) E# q! l+ m6 n: f
  654. //        Color color,colorTemp;
    * ]/ B( \7 v/ F( X6 m3 |* W* a
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ) R# c9 C0 [) }
  656. //        {
    $ n# m1 R' V% `( f! C, G) F
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)* D6 m2 R) a" N3 ?. o8 g# ~
  658. //          {* y8 L8 B3 K& t& D) O. f4 d3 r  _$ @
  659. //            bitmap.GetPixel(iColumn,iRow,&color);. R1 I9 V: A+ i: A0 g. `- q5 ]
  660. //            colorTemp.SetValue(color.MakeARGB(+ `' t4 ]! i4 Q5 ~* |
  661. //              (BYTE)(255*iColumn/iWidth),3 l6 x5 h5 O. o' G4 m- r
  662. //              color.GetRed(),) U- |2 v  K: x
  663. //              color.GetGreen(),
    * P; _3 V" m; O: t, b2 S
  664. //              color.GetBlue()));: v* X# E9 ?7 _4 X# g& I2 z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);  c7 h# B# C" ?- h6 S9 o, u2 k
  666. //          }
    8 x7 F9 X: T$ H8 U
  667. //        }
    $ |9 w: w( Z+ B: W+ F5 c" c
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);3 L+ P5 ]5 L/ |7 f! |4 Z, Q, z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 A; u  R5 W8 u% h9 f
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    . N) Y5 V4 D! X% C$ _
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + a2 }2 O8 M( q; n1 D! o8 p7 i- D
  672.         for(i=0;i<240;i+=8)9 D7 l1 T- e  \( W+ ~; ~
  673.         {
      q- G0 M$ v9 u4 `% r
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; `8 R$ ?+ k" N! C% b
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# |5 f6 [% |/ q# F. m1 b
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% ]" o1 _! C5 `6 J) c% h) l
  677.           Sleep(33);& r6 Q: }9 h3 ?( d/ w
  678.         }; }- f) _4 [" g
  679.         Sleep(1000);2 E2 k: F/ I+ M( R  B
  680.         for(i=240;i>0;i-=8)* z" I- f2 o) y; a  c- x5 U4 l
  681.         {5 U3 Q: s. ?" W, b$ d! ?
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* a# d: F3 f) K4 u( t
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 y4 t8 s6 n" `' I, f( C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : f1 ?0 n; {- q" y
  685.           Sleep(33);" n; t3 A% S" q  s
  686.         }
    1 o% Z$ E# N* X2 f2 G
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);: F  F# G* j* `9 Z  T1 h
  688.         dlg->ReleaseDC(pCDC);
    + N4 u& y; U( W$ }: S& n
  689.         DeleteDC(hdctar);
      o& c$ o6 B0 W  B
  690.         DeleteDC(hdcsrc);
    1 @9 y8 J. m4 k" H
  691.         DeleteDC(hdcorg);
    / v8 D  G4 g& w  z2 M
  692.       }* P4 ?6 ?3 s0 d) i; ?
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; Z6 A6 o1 y1 a- L3 B2 _( d  k
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");, P  o% M0 o6 t
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");. S, X- C% Y0 B9 t& ^# B+ q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");& m, ?" _' _/ g' ?0 L: t% i/ S
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * |8 B" h" M4 D! v; U
  698.       if(!Dn.Connected())
    % Q# h, I4 P1 B+ v2 `
  699.       {: D! l0 s# P% E7 s4 i
  700.         dwTotalFiles=1;
    0 E. g  n9 x( I) w8 J
  701.         dwDownLoaded=0;
    * C; h8 R$ c) x
  702.         bSilentStep=TRUE;5 Y" U! ^+ ]# A8 p  ]" V
  703.         bCompressed=FALSE;" U* w  J4 r! k( k6 A/ ~" J. f6 n
  704.         strExtLocal.Empty();
    0 G: t6 u% A  ~  \' i3 F! v
  705.         strFullName="readme.txt";3 I. c+ \* J0 i% a
  706.         dwProgramState=AP_CONNECT;  S+ F. f1 M8 ]  b9 @; x4 Z9 h& t/ C+ X
  707.       }. l. a/ ~6 x5 x& [( ]: f
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    9 e' T; i$ `, z
  709.       dwStartUpSteps=2;
    # Q/ t$ S1 C! O* t
  710.       break;' F8 z3 {. [! w7 L
  711.     case 2:
    ( N! r+ F6 s' z  o& @' @& ?" @9 a
  712.       {4 M. C  Z) Z  m; A0 E- |
  713.         int iEOF;
    7 i0 N+ Q% M+ H$ s1 k/ P5 g9 o# w
  714.         FILE *fp;) K2 B: s5 i) }$ i  A9 t8 r2 e$ ^' X3 v
  715.         char szString[512];
    ) P- D. C" E* p( E& D4 D$ g
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");0 L3 _  N. @% V1 h% l7 W& O; a1 f
  717.         if(fp)
    3 m6 O' r0 V! ^$ m; W
  718.         {" h0 B% C) S& `$ j7 D* Q
  719.           do- l: K; P; ]5 E3 N( f8 X& t
  720.           {
    , @! v# R8 \! ^! ?9 G& v
  721.             iEOF=fscanf(fp,"%s",szString);6 e0 M& u+ R/ w. n/ i% k
  722.             if(strlen(szString))
    6 U0 p7 _* q' a$ m
  723.             {$ m0 y% F0 @. b3 q- J
  724.               if(bFirstChar)8 C3 f. ?3 ~3 B8 B$ Q: N- V
  725.               {
    : G% U) i0 ]. D
  726.                 bFirstChar=FALSE;5 ?/ z) t* @; {# v2 i0 J! H
  727.                 bConnectIsBig5=FALSE;
    : H! t5 U. H0 \  W  H3 u
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    / x* d0 x0 N4 v* [, D' |
  729.               }
    2 t) |* s( a8 J- _6 ?8 n
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- v3 l8 j. l. ~' A2 M9 I
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - D# j; H. q5 i# b- c7 o
  732.               dlg->m_ListText.AddString(szString);
    " `, |! G0 r" @) W
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 Y" Z+ f' P& _8 \6 M
  734.               *szString=0;
    1 k! p( a4 O+ M- J- S
  735.             }2 ]2 u! k2 v/ Q1 I; F
  736.           } while(iEOF!=EOF);
    ' P+ D7 ]1 C0 o' j' f$ Q. ]2 s
  737.           fclose(fp);
    1 X0 @: @$ K/ K, q
  738.           unlink(".\\DownLoad\\readme.txt");
    ' z4 l( o" g- b+ B
  739.           dwStartUpSteps=3;
    . s- ?3 d5 i6 ]+ }" b8 u
  740.         }
    * b$ v2 [& ^( Q) o" u
  741.       }( P- O2 N' \0 d" K2 \" u8 p
  742.       break;
    ) x/ [2 ?; _) t8 v7 s# }
  743.     case 3:7 z; ]" s: `9 G4 l& X  L& i
  744.       if(!Dn.Connected())# g5 K) t" J1 O; e9 @: G; z
  745.       {) o, u4 X4 X; P5 ?
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);. Q( y+ y/ U, O" W
  747.         dwTotalFiles=1;
    ' H2 Z! K$ @, E; C3 r  v
  748.         dwDownLoaded=0;, u& T3 f5 w( t0 y
  749.         bSilentStep=TRUE;
    ) L9 M: y; `. u2 N
  750.         bCompressed=FALSE;
    4 F) ]) [6 |* h5 N1 L+ o
  751.         strExtLocal.Empty();
    # t6 z* A& o; I4 S$ N
  752.         strFullName="checkversion.txt";* k5 e6 \% }, V" O1 `
  753.         dwProgramState=AP_CONNECT;
    + Z$ H- }& J$ q$ B% A
  754.       }" t* `( v3 ?4 J
  755.       dwStartUpSteps=4;
    ! R3 {7 {9 Z" g  \" E
  756.       break;
    ; \. ^1 {, N6 h, ?
  757.     case 4:
    9 ~/ |& J. s. l) b1 o- P1 Y2 ~
  758.       {
    : [" M% {/ J2 b% K
  759.         FILE *fp;
    - i" F# M. C  e* V! l& V
  760.         char szString1[128];
    ! @/ r1 S' N, U; C7 u+ E) P9 b$ G
  761.         char szString2[128];
    ) ~7 h8 h9 M$ S5 C5 v0 _. W
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    + M% K% M0 {8 o9 {" n7 [: c7 ~
  763.         if(fp), I- [) y% l( U
  764.         {
    4 n3 x8 v* C! L- f; {
  765.           fscanf(fp,"%s",szString1);
    / y  }) D( l9 Z6 A6 I+ Y# x0 u$ w
  766.           fclose(fp);* ~) x) \, J' L. K
  767.           fCheckVersion=atof(szString1);8 N! U; c& N5 q$ h5 o% K
  768.           fp=fopen(".\\checkversion.dat","r");, A+ v$ U) ~, U
  769.           if(fp), B5 J2 p/ X. j' L
  770.           {
    $ n& z. b! ]# _# q% A
  771.             fscanf(fp,"%s",szString2);
    " G) k8 ^2 ]" x! J
  772.             fclose(fp);
    4 R5 f8 X. ^# U$ a/ ]7 \! f$ p1 f/ w
  773.             if(atof(szString1)!=atof(szString2))
    * s+ t, f4 ?( P0 y
  774.             {
    5 F% B8 @( ^, [
  775.               if(!Dn.Connected())! B% f$ b! S& a' B' G6 o# R- Y5 y
  776.               {& x2 {- j; D; C# N8 ]; Z
  777.                 bFirstUpdate=TRUE;8 q& H! y' H  c$ ~; j9 Q5 g
  778.                 dwTotalFiles=1;
    / k# l  e$ _" R) h! T9 M0 T
  779.                 dwDownLoaded=0;
    7 L+ g( A" z4 @  w% a* ?
  780.                 bSilentStep=FALSE;
    " R/ w* Q7 V7 o- c! @
  781.                 bCompressed=TRUE;  L) U, u6 j2 S' ~
  782.                 strExtLocal=".\\DownLoad\";
    # g- f( L# L" G7 S+ {. X) q
  783.                 strFullName="update.txt";
    2 ~/ m! h/ `% h& p" V
  784.                 dwProgramState=AP_CONNECT;3 g% Q2 P6 l% X% p
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % v  i- S; h" c1 R  y5 X( n/ q
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 s& G7 e5 a; v0 o7 G/ W
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / Y; q9 E# a& o2 b
  788. 4 n9 ]$ x8 O% u+ x
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 W6 j2 K& J9 k! w. [- [# I$ G
  790.                 unlink(".\\DownLoad\\checkversion.txt");" d1 F7 Z& g/ i5 [
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    5 [8 v2 Z0 w* g5 ^/ g' e0 ]& M
  792.                 {
      L! X8 }- |# M% r  e
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : ]  N2 A: c0 ]. D: m% k
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");6 ^% T6 {( t9 E4 X/ N& M
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    - W) G. V; s6 L1 e
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 P6 E0 m; p) u% ]! H: x
  797. 0 ^0 y0 l. c! B: w$ i# L
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ S7 [/ o1 z* e& O, A  G3 y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    1 w. O  B2 ~( V: A1 m8 u
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 w" Y( }* u( y2 X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 N3 P: d# R( [' u
  802.                 }, X' H- I6 K1 k! h# P3 @! D
  803.                 dwStartUpSteps=5;9 F7 M8 n5 v4 n
  804.               }& _" L4 I" a0 M
  805.             }
    8 _! {1 Y* M0 z2 T. ^: k6 K3 W
  806.             else
    0 O: H5 p) Y5 e) t9 v( }
  807.             {
    $ i7 w1 N  J% D3 ?3 t) p0 T
  808.               unlink(".\\DownLoad\\checkversion.txt");) z, h& T6 p1 W0 L1 _
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    0 n* W' ?5 {) B: W0 T. h% W$ q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    1 @  [$ h+ Y+ T+ b- i
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ Q! D" f0 [+ c% N; `4 G: V$ J
  812. 6 E+ w' N/ r6 r& U5 \  ^
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , n( Y: H, I$ W1 ?3 E/ C6 M9 I8 V
  814.               dwStartUpSteps=99;
    ' A! E* j! I, K6 s3 |: d
  815.               bFinishUpdated=TRUE;# _  q6 c1 j3 `
  816.               bCanUpdate=TRUE;+ y, U; }. m6 C3 ^
  817.             }$ |6 `. M- U/ U( ~& L& U' i% l
  818.           }
    3 v* T: y4 C/ ?% F, N& F
  819.           else' \; W7 T& K5 W4 p1 H# h
  820.           {
    ; {5 T/ m9 X, x9 ]- g1 H
  821.             if(!Dn.Connected())% v3 }( H1 ~! f6 e, G
  822.             {! G  ~6 Q+ @3 ~2 S! K: S6 V; A
  823.               bFirstUpdate=TRUE;
    8 |- E+ t4 k* e% l2 b4 _5 G! \
  824.               dwTotalFiles=1;+ G5 @$ R: @9 j4 A9 V1 d$ l6 B2 l
  825.               dwDownLoaded=0;
    1 s: ]  _0 `$ n$ i! l* v) P
  826.               bSilentStep=FALSE;
    / B( z  W* ]8 M% A# u7 v8 f
  827.               bCompressed=TRUE;
    + {" n! L4 w( `
  828.               strExtLocal=".\\DownLoad\";
    ) {; U  B8 X# ^) ?( D
  829.               strFullName="update.txt";
    ! a+ v  E# Y4 j4 R
  830.               dwProgramState=AP_CONNECT;
    ; i* g+ b6 X1 l; L9 A, V3 H4 n0 H$ h
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ W/ T) o1 a3 j/ ?
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # m( N" P( q* i$ h8 z/ R8 ?
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , c% y5 @% Z% m( a3 g
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 W( e9 D: u( P7 p/ k
  835.               unlink(".\\DownLoad\\checkversion.txt");, r) l* z* |! B) q6 Z* f0 |# C4 [
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    0 d' u& }; b+ n. w  m0 g* D5 y7 k2 {
  837.               {. L( ]6 T& t/ W) s
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    - I" [# G: a5 Z! p3 T
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    - i1 y- \+ Q, C' ]
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");. M( u: i# ^9 N7 j) O1 q2 H( Z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# ]4 l9 G- u1 C6 w- G3 g7 X9 W. f( J9 u
  842.                
    ( H# z! I0 e# c8 |( W* i
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 o% a0 v" y& D+ ]
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; H1 a, ~5 y1 g
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");( v. s9 F. y* g/ G8 t0 \* T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 B+ i: `  V* F) o/ T" B  h
  847.               }
    5 r- e* C8 m5 P% g7 r
  848.               dwStartUpSteps=5;
    8 S" J! s) C% X  ~  r' ]+ ?; g+ [
  849.             }. b% W9 V/ C4 P7 [9 M' B7 y9 a8 ?
  850.           }
    ' {% Y! [+ i5 t: T- u5 r+ y
  851.         }
    % a- t' J4 z" Y8 p
  852.         else
    ; \; b* g: n% f3 e
  853.         {
      k2 E6 ]& H. k5 i# ?- ~
  854.           dwStartUpSteps=3;
    8 X8 E( {+ y* K" D# D# ~
  855.         }
    ) M# c/ g% p  f' M
  856.       }
    5 o! \( D1 o! K3 p! O/ l9 D
  857.       break;5 o- M" V1 B" i" @
  858.     case 5:
    0 W  ~) M6 d4 C( Q) M
  859.       {
    " H& N+ w5 f, V
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    * j. ]3 I, ^4 }* T+ j
  861.         {# D1 ]- F5 g" y% ?' ?1 a) Z3 H8 G
  862.           int opt_overwrite=1;9 B& _& t, h& d2 H
  863.           int opt_do_extract_withoutpath=0;
    , V* D! n! C: ^" F9 [  Q
  864.           unzFile uf=NULL;# e( `$ P! x: o5 i

  865. ) R: H  Y, k' {' R/ C/ e
  866.           uf=unzOpen("Wsa.zip");
    $ C& i) t3 B& S& S, {+ ~7 c
  867.           if(uf)
    3 N. o! ?) Z* t" T* I
  868.           {) j  I; N# ?# Q  m/ I
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);" l# \$ \- P5 N  T/ C  K+ _
  870.             unzClose(uf);
    5 _* i9 v$ g) D8 a5 K# v( c0 K
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");3 T# X, r  x2 v
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    . V# ^- o" O" \" c' w$ {: Q
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    . _& f5 X: |- b, j
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 V9 S& u" _/ T
  875.           }
    1 B' F& s* [5 E- Z4 W
  876.           DeleteFile("Wsa.zip" );/ K, }% Q* _7 P2 C% m5 T% x) v
  877.         }
    2 y+ a- [# ~5 i* l/ ~; Q2 I
  878. 8 D: u9 V: g3 p
  879.         if(CheckLocalVersion())
    ; e) b" r( u( G! j
  880.         {
      f: C1 {2 {3 P7 W9 s4 [; H+ y
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    & L+ J- ?6 p$ }5 s
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");# _+ }( a* u. ?- g9 m' h& s
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");: ]6 C: M2 y3 C( _, p: w# |
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 ]% w, }3 S( Q+ \+ g) W
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    8 M' _9 F: G0 E6 X9 I* ^( i
  886.           dwStartUpSteps=99;  g" m' [% G$ D( g9 s
  887.         }5 r/ z& v, ^1 z  \' {) L
  888.         else; R, }# Z. I# x$ I8 i
  889.         {
    . ]4 D6 \! j' [. w0 r5 d
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' g( k% g8 Z# I
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ X# O) h8 s- j& a$ V  |
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");! \1 Y5 C! Y: M& n( q+ [

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

& u3 G5 [' K8 y- t2 X8 c- o) R8 I7 Z. W7 k

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-18 04:50

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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