CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
, g2 d9 J" P1 T; ^
  1. / RevApp.cpp : Defines the class behaviors for the application.
    8 e3 M, O* ?( C
  2. //. P, S. E9 ~* F, d) r

  3. - K- H4 X8 j) e2 Y9 J" @- a" l
  4. #include "stdafx.h"1 \6 L$ e" e4 Z/ L' U+ |3 O( m

  5. $ Z: p1 v" h# p: e' L; a* e- R
  6. //#define UNICODE. N* U( _% O4 E* I1 X, X1 E+ L+ X
  7. //#include <gdiplus.h>
    5 {2 r- j+ G( `& A) `: R7 }
  8. //using namespace Gdiplus;
    0 ~5 Y! C) _: i; s9 j$ g
  9. + u3 o7 ?' W6 d5 c+ @. N; L
  10. #include "RevApp.h"3 N! }& V% I; I
  11. #include "RevAppDlg.h"& \6 W0 o* h/ a3 D( j

  12. ) M4 M) i! E% }; g$ M) A
  13. #pragma warning(disable:4786)" g+ X3 |- Y$ {5 l& X" Y
  14. #include <map>7 m9 o1 N8 z/ U9 [  H
  15. #include <list>9 S: b0 N  ~. ?! A
  16. #include <direct.h># l( X' A/ c" O! ?

  17. $ p0 }  g: h5 L( k$ O2 o
  18. #ifdef _DEBUG' q5 L3 d* }% M
  19. #define new DEBUG_NEW+ M* d+ ?6 s4 W; N" o
  20. #undef THIS_FILE
      Y  D! {8 V4 x! K
  21. static char THIS_FILE[] = __FILE__;
    0 ?5 ~3 X' C, ?9 k! g
  22. #endif' ?# X- M% v' S3 w; I& }  n+ D5 c" t
  23. #include "SkinResDef.h"
    ! |3 g% M% n+ E( U4 a: m9 {2 U3 y3 P
  24. #include "ChangeBG.h"
    6 b2 `$ ?  k( Q% h: L) ]' a
  25. #include "AFXINET.H"
    & W9 L6 h, `. b0 g/ G. ]
  26. . G2 ^% g4 W1 u$ @
  27. #define TRADITIONAL_CHINESE 0
    1 d- y) d! `3 I
  28. #define SIMPLIFY_CHINESE 1% b6 \# Y& U7 G3 C5 @3 U
  29. #define ENGLISH 2
    3 v4 t( y0 @0 M$ z9 n0 z
  30. int m_iLanguage = ENGLISH;
    $ D# H1 }3 V$ }4 y
  31. ////////////////////////////////////////////////////////////////////////////// w( R% O9 l( i" i9 f
  32. // CRevAppApp5 I6 D# C  ~6 E& F( f9 u
  33.   x/ T! p4 C, d) a+ K" V
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)( C5 m6 f  p$ E, X
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    7 i; T0 {9 V" r" w2 o$ D4 L& `
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ( I: ?& P1 O& X: [
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!; H9 o) `# a0 p0 @* l# ?
  38.         //}}AFX_MSG
    : p* U& U8 k# Q! _% W# q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 d0 O2 r5 E0 k1 M/ U# v5 l4 Z7 ]2 a
  40. END_MESSAGE_MAP()
    * `4 Z9 @8 b4 k! Z0 A4 C! G  m& I

  41. 0 g+ b& y3 u; S# t$ x5 `
  42. /////////////////////////////////////////////////////////////////////////////% s# p3 |3 Q2 j* p- S, {
  43. // CRevAppApp construction
    , v. j' o) z" f+ C" q

  44. % L  W; _; g7 r2 ^: v% u9 P5 a9 |
  45. CRevAppApp::CRevAppApp()
    " [; e0 G5 f* D  Y( B% q; c
  46. {
      ]7 |5 q) o  @4 R8 \- e  z
  47.         // TODO: add construction code here,7 P( s$ d) k1 J+ ~3 Z$ t  V5 M% \' E: V
  48.         // Place all significant initialization in InitInstance+ k7 c8 y8 u3 Q4 k
  49.   bDisplayIsBig5=FALSE;
    , x1 H  s; e( L+ T5 C
  50.   bRestartUpdater=FALSE;
    : y, d  h# x* e3 s2 y- D* G! s
  51.   bFinishUpdated=FALSE;
    ! m6 u% V: ~! X
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    # i# }+ D3 H6 r% |2 A- e
  53.   InitChangeDataBig52GBKS();- g+ `$ t7 m( Z7 y. w
  54.   InitChangeDataGBKS2Big5();
    ! F9 F( d  W; x% C
  55.         //; a8 M, X5 E9 G
  56.         bClickRunExe = FALSE;
    1 c! z, G7 u! E+ p$ a. Y! g
  57.         //
    6 g5 W5 d) B/ H( y! H' w+ Q: V
  58. }, |; |; g* E  A5 _7 Y1 f
  59. : h( k/ H7 X& y8 [! W, o3 r
  60. CRevAppApp::~CRevAppApp()
    5 w0 W0 |; R8 J$ i
  61. {
    $ ^; N! @+ |4 M  b
  62.         // TODO: add construction code here,# L) g4 V' D% C2 a$ m  V2 O' l
  63.         // Place all significant initialization in InitInstance
    ) O( \: y% i+ N% F8 u1 P% I
  64.   EndChangeData();
    + J4 `- O8 F' `: o$ k1 O6 w, ]0 w
  65. }
    ! s4 i/ y4 s3 I, O6 `) E& K% O4 t
  66. 4 l/ k1 @; [- u; A
  67. /////////////////////////////////////////////////////////////////////////////1 ^- y) F0 X( d  w/ `& I% B
  68. // The one and only CRevAppApp object
    - c( Q  s4 P: ^2 U/ i
  69. ( }: c( q" R3 f  R* _3 A
  70. CRevAppApp theApp;/ q: X! F7 ]2 X0 d
  71. ' w5 |! Y$ u% P+ E6 n
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)1 u+ y. h1 A9 a6 d: L  _7 ?; ]) e2 i
  73. {
    * o$ T+ v: m$ Q. H6 @& L
  74.   int iEOF=0;6 O, ^9 Z" ^' n! \$ }' U
  75.   char szTempName[MAX_PATH];+ c0 m+ o- v' M& m% t
  76.   *szFileName=0;
    - u9 V  p& g7 r5 i7 \7 k. T5 G$ I/ U' w
  77.   iEOF=fscanf(fp,"%s",szTempName);. x5 U9 m2 b5 G% B, k
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')" L, X4 u. _! w( ~3 b0 j
  79.   {
    ( K9 X- I  f- i
  80.     strcpy(szFileName,&szTempName[1]);
    # j3 X9 _* q1 p
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) P, @1 j! m. Y5 \- O! A
  82.     {
    1 M( b% |) [1 p' v; f' P
  83.       iEOF=fscanf(fp,"%s",szTempName);7 G# G0 n0 y# ^% P3 T- l3 K6 n
  84.       strcat(szFileName," ");+ I! m* V, [: L2 T/ M9 H
  85.       strcat(szFileName,szTempName);
    9 V: X, r9 V. w* U
  86.     }( p. H4 h2 H0 q1 T2 z
  87.     if(strlen(szFileName)>=1)
    , ^' i! J  O3 f& @) O4 x
  88.     {0 }2 j, w8 n; }3 v; J3 k" k" ^
  89.       szFileName[strlen(szFileName)-1]=0;
    0 M0 J, y" i' I$ ?- o5 [! Z
  90.     }3 @3 {/ _. r0 r- n
  91.   }$ i9 y+ H$ X+ i
  92.   return szFileName;3 C5 Q) [! _! C7 L
  93. }1 q9 a  N6 _, {7 x0 r2 u
  94. 8 M/ B, O2 P' G( }8 s# `6 k4 u1 z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    - ~: J/ n5 {1 @# I4 A
  96. {
    2 F( q' m' @8 {% `( Y% Q! T
  97.   FILE *fp;
    ( O3 L9 i$ `9 r0 e5 l: c
  98.   char *key=NULL;
    ! N! x- i1 V- j
  99.   char version[MAX_PATH];* n* l" O9 ~0 Y( D/ w
  100.   LPUPDATEFILE file,olds;
    7 Z, F5 W/ i9 n9 }9 Z* R
  101.   std::map<CString,LPUPDATEFILE>::iterator p;+ `) M4 x% A0 e
  102. # |& N! O9 L) J! F. N% ^
  103.   UpdateList.clear();
    7 P. b2 y  ?4 J* i1 [; J9 h
  104.   UpdateFile.clear();
    ) I1 C1 [, j2 ^0 H  b
  105.   if(GetFileAttributes(filename)==-1) return false;- s; }/ W* u0 G3 [+ N# V2 A
  106.   if(!(fp=fopen(filename,"r"))) return false;% R# W9 v' f5 `
  107.   fscanf(fp,"%s",version);
    " D% L. ]6 c6 h
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ! k0 p3 E- k! G% U: z9 g% J, n0 ]
  109.   while(fscanf(fp,"%s",version)!=EOF)
    2 I+ i( a/ y" d7 r- V7 U* K" E
  110.   {2 O, p7 p, y7 o. w
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 p  m, U# }% v7 ?0 d  Y7 U
  112.     fscanf(fp,"%s",file->path);% q! h+ o) ~$ [) u+ P0 E7 l- s& S
  113.     ReadFileNames(fp,file->file);2 W( Z- S- J* Y& D3 `( B& E
  114.     strcpy(file->full,".");
    / H/ B2 [, ~( E0 R4 Z8 y
  115.     strcat(file->full,file->path);
    * C. P* i* N0 E, w7 Y+ S' @' O1 x
  116.     strcat(file->full,file->file);9 \! {- A2 j. O( G5 r* a' Y1 [/ u  `
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())/ D# F- h$ H, Q! y  o9 F6 f, u( [
  118.     {
    3 P& A" N* y; ^& |
  119.       file->vers=(float)atof(version);; Y6 b. U, |" j# K. ]8 F9 ^* m
  120.       UpdateList.push_back(file->full);$ {# e. V8 K8 `$ L: I1 |: F2 y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    % e! m; ~0 z+ f" ]. l9 L5 ~
  122.     }
    5 b" n5 j) J% z' U8 r6 _# k( l1 C# \) x
  123.     else5 `) I* _8 g% @. R' e
  124.     {
    " Z+ u& k& r0 h3 {7 }
  125.       olds=(*p).second;
    1 F4 |5 e6 [, g  P# I3 I
  126.       if(olds->vers<(float)atof(version))
    0 z9 S1 x( j5 r+ b0 E
  127.       {
    # L' E  l0 U+ T0 E4 a& }* S) r0 E
  128.         olds->vers=(float)atof(version);( d+ W3 M0 l! w# y" h. Y# _; m# w
  129.       }
    : I. G6 b; U" ]. o- A4 Z9 F, x
  130.       free(file);
    $ e0 U6 V" o' S) C
  131.     }( c- p% o" F! b9 T
  132.   }2 w' {. _8 U7 }* O$ j' [
  133.   fclose(fp);
    0 b; |6 H8 r( _" p6 h! @8 ?
  134.   return true;% m8 Z" D: l) L( Z
  135. }* q" }0 c: f3 u9 ~8 T. {
  136. 4 l5 n' t" S1 J) k
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    7 W6 i/ ?- ^1 B0 L% x0 s
  138. {4 E4 i( o7 _! N% F& H/ K# A& k- |
  139.   TCHAR  szFull[MAX_PATH];; M6 D  `- [6 ?5 p7 Y
  140.   TCHAR *token,*inter;
    6 s6 ^+ w7 ~; F4 z
  141.   *szPath=0;( ?( ~/ ~+ i% b! F
  142.   strcpy(szFull,szFullPath);
    * j# r& F% O5 N% P
  143.   token=strtok(szFull,"\\/");( S. `- {3 l$ Q- @# @6 i
  144.   inter=token;
    / r3 w" J1 _" ^% Q
  145.   while(token=strtok(NULL,"\\/"))2 v% n6 U% D" j2 b! D' m
  146.   {
    $ D. @+ y& x9 a' ^
  147.     strcat(szPath,inter);8 B5 ~( g* ^! b3 i* `
  148.     strcat(szPath,"\");! _# ^0 F6 r6 B$ }; p1 i
  149.     inter=token;
    ( E# w. G8 ?9 {1 ?; ^
  150.   }7 a% M, d& m' a$ m2 T" b
  151.   return strlen(szPath);
    * b( T& |& `' i6 K) K
  152. }
    & H* [) }. Q+ j' g8 s5 `9 l

  153. & l, l9 ~6 v( V* y7 ?
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ N9 }; D8 ~: k" f
  155. {- A- }1 D& L7 x0 c
  156.   DWORD attrib=GetFileAttributes(Target);& Y% [2 `: b2 b* e2 y
  157.   if(attrib!=-1)' z( v  f" M% j' m' ~5 f1 |
  158.   {+ s' H" {; S- P7 ]% D/ N7 }* M4 p
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    7 X5 @" y2 C* D) o& s
  160.     {, w" m, H9 `2 W! B7 C6 V6 R1 o  O
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    2 r, {8 i, G8 ]
  162.       SetFileAttributes(Target,attrib);4 m! g; J+ n+ e5 \; U( {
  163.     }
    " f3 v+ X4 s; f& C6 h  R
  164.   }
    . t9 N1 F, w. c2 b
  165.   CopyFile(Source,Target,Erase);
    / ]8 t! e8 j* ?5 B3 k: _" ~
  166. }5 C9 q+ q; U! U! K

  167. ( O# }8 L1 m. Z. }6 E( \. {% N
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    # d+ E+ x. S( r+ c2 l3 ~- b
  169. {
    8 Y* U- h+ o# U+ l. b* Y& B
  170.      FILE *fp;
    8 G" }, k% j- {- ~5 {$ k1 ^2 H
  171.      char  szBuffer[8192];
    ' _2 [% Q6 k. r7 M8 D
  172.   va_list  argptr;! K: @, d/ R9 @! f6 D
  173. 2 c- S5 i4 o8 C" v; P3 f! ?& d
  174.         va_start(argptr,message);
    1 Z6 o3 M1 j" K( l+ _
  175.         vsprintf(szBuffer,message,argptr);
    4 c" i. R  l9 o
  176.         va_end(argptr);% K! C! u8 k% s
  177.   fp=fopen(FileName,"a");1 I* {& y; V. _8 U
  178.   if(fp)1 K( g; ~6 r  `( k* b% v
  179.   {2 M; e, A9 S; G) `( M5 X) i
  180.     fprintf(fp,szBuffer);1 k( I1 E; k7 z+ B" c! n
  181.     fclose(fp);4 G- C, Q* l5 s' f5 ]+ [
  182.           _flushall();; W& X1 q5 r- @. E- A& M" g+ Y
  183.   }9 V- T( K1 G# f- N
  184. }, n/ V! r& q: a, [+ v
  185. & g; S9 n* x9 A: `& K2 Z) y/ U
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    % x/ V% R1 F! z
  187. {3 T0 n9 w" A% V* p
  188.      FILE *fp;0 t5 |4 I, S* f' @. D
  189.     DWORD  attrib;
    , x2 F/ t) {5 c* i
  190.   attrib=GetFileAttributes(FileName);6 [- {& p; @  J! i( ^
  191.   if(attrib!=-1)
    * L/ H+ `* ^' R$ _4 U0 b+ Y+ r
  192.   {
    * f) _; w* O/ {( @- a7 d2 f  ~. F
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);9 F( B+ W9 c) M
  194.     if(!SetFileAttributes(FileName,attrib))6 c; e" Q/ C( v: ^& _3 r
  195.     {
    7 ?6 a# z( }8 Z5 F- S
  196.       return FALSE;: ?& ^5 ~. Z) f; \& z
  197.     }5 a0 {( ^# ]  a- x! I; p
  198.   }  ~  N+ ~( n" E: ?- H8 X7 _; Z
  199.   fp=fopen(FileName,"wb");
    , Z- J- C8 g3 q! w+ ^
  200.   if(fp)1 c9 J0 H7 T! \! p. z
  201.   {
    ' L( l/ f, Y) m7 }* V1 m2 _
  202.     fclose(fp);. w" `: }" G7 t3 |: `! J
  203.   }
    5 {  `" r3 D) A2 d
  204.   return TRUE;
    6 B/ F& s7 |' r% B5 C, |
  205. }
    1 }* o' b7 w; H2 a
  206. - X* x: x  @' P+ r* t; d0 E3 v& U$ n4 a
  207. BOOL CRevAppApp::UpdateLocalVersion(void)8 e8 E5 @/ ~& m
  208. {
    5 w; J  F" C) U  Z0 m: D! e
  209.   char filename[MAX_PATH];
    8 R% y2 b7 N7 i3 z9 u$ V( u) w
  210.   LPUPDATEFILE file,olds;
    6 v7 @" h7 l' Y* ?( y5 D- c
  211.   std::map<int,CString>::iterator i;
    3 ?# v/ q/ O6 g! k$ ~" F* o  _
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    . `3 ?3 ^% c, o8 H, b
  213.   std::list<CString>::iterator l;
    ' j2 Q% F/ x9 e  @
  214. 9 x: ]- w% i, g" V0 x
  215.   if(bFirstUpdate)
    3 u: V. O  k& X
  216.   {0 U( j) r& S7 p5 j
  217.     dwCurrFile=0;
    " c1 }4 Y6 j! C2 q5 [2 o
  218.     bFirstUpdate=FALSE;
    ) d2 L+ `/ L0 q# [
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 |& [, Y1 `  u; G/ k
  220.     {4 {  t  P# X% m; s, N
  221.       dwTotalFiles=UpdateLocal.size();
    ; k& B" t4 F* H# P+ ]1 |. ]
  222.       dwDownLoaded=0;
    + v% F" M! w& G# q
  223.       bSilentStep=FALSE;
    5 L0 l6 E; q3 f' Q- k% K
  224.       bCompressed=TRUE;  h$ u* x0 g/ k& ~$ e
  225.       strExtLocal.Empty();
    5 r2 o6 p6 h: V0 m
  226.       strFullName=(*i).second;
    ! f7 u7 ?6 N* J1 S  u" o* Y
  227.       dwProgramState=AP_CONNECT;
    2 d' l3 f  {, x2 ]
  228.       return TRUE;( K& Z- b+ x: ~- z9 q
  229.     }
    , _) o- h- N) Y
  230.   }$ Z& @( M, |* P
  231.   else if(bRestartUpdater==FALSE)6 Q' M2 W, i4 V
  232.   {
    % t, i' O0 h4 o3 g$ O7 v1 B
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    + y; O  L0 I" g
  234.     {# w$ O7 F. c1 q  l; z0 e
  235.       file=(*p).second;
    % }" ^6 a2 V3 \( G9 g
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())' O( l) z/ [" f4 I* g  V3 ?
  237.       {
    ! m8 v0 j6 ~+ V! {# k
  238.         olds=(*p).second;4 [2 }+ T* L- `; z6 z
  239.         olds->vers=file->vers;
    % S* V# f: `9 o) Z" j2 d) i; U3 s
  240.       }
    9 B, m: o# L& t7 z' M
  241.       else
    3 I, m% Y2 R/ {7 t5 d6 y) [
  242.       {  L& }9 z! r4 H" e  r
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 o" j2 a  f) U6 ?2 K' t0 [! J
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    9 T1 D/ i8 G" O0 I; a  [% G
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));; R, i: Z* h. B: s( X1 b5 g
  246.       }
    6 Q- [  e+ S% `! c+ K5 n8 M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");9 p& i& P3 L( |1 K& U; @+ @
  248.       sprintf(filename,"(%s)",file->file);; \9 V5 j' Q* `  p& B* F
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 _/ s8 W6 k- V1 C. k% [  n+ @
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }$ Z! W7 A6 F" E# }# o# X8 N
  251.     }
    ) W! }3 F% M' o1 {
  252.     dwCurrFile++;
    * V5 M/ a  N8 [! Q% _, U* ?
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 V0 t2 F- M) E
  254.     {
    1 z) u8 ?! y- [! W! h$ z
  255.       bSilentStep=FALSE;
    7 M5 _7 b6 ]( }; I0 |6 I
  256.       bCompressed=TRUE;5 m8 I) y7 A( k/ x: X" Z6 T
  257.       strExtLocal.Empty();
    + p8 [, |5 x8 B9 b  L
  258.       strFullName=(*i).second;( u$ O+ W0 z- ?" [) B8 \7 X
  259.       dwProgramState=AP_CONNECT;
    4 N, U: p  K  C; V: K3 W/ I+ I, ~: z
  260.       return TRUE;1 U  A: W# e+ M; {8 w9 a, v/ o9 R+ H
  261.     }
    8 g% N8 t" I9 f0 \* G
  262.     if(!bRestartUpdater)* A1 _: ~& |& K# ^, a3 ^, J) B
  263.     {
    % s# y. P5 b9 A/ m+ n7 s+ a' R
  264.       int iCurrSize,iFileSize;) w& w" J! Y8 E( _6 W/ _
  265.       iCurrSize=0;
    $ P4 n* x1 }8 [' R* D+ t: D$ ]. R: \
  266.       iFileSize=UpdateList2.size();) ~! I1 C( d' m
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    2 t% Z* p* y* V* r
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");( u) p; [+ o" F( X6 L, Q" f/ g
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    - `; p% C' E1 s) k) P$ R
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 m  ]  R. u! [/ U6 v, Z
  271.       Fclearf(".\\update.dat");
    ( M8 i3 Z4 F4 F. q  r
  272.       Fprintf(".\\update.dat","Bloodyf\n");' |9 P6 x7 v1 u7 Z' t, ^( r1 O- E
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)3 J% V+ ?5 D: T1 w' d/ H; |
  274.       {
    3 U) I$ A( |" W1 i# ~* u' N/ P8 S, T
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& a# _: t1 M7 h" q
  276.         {5 _/ @+ ?& ^1 O6 N4 O
  277.           file=(*p).second;1 Z5 u5 `  O* B; u1 G* C+ m3 J7 Q
  278.           sprintf(filename,"(%s)",file->file);9 t) }0 n2 v9 z0 _! d% w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 n# Q& Q2 s7 Q
  280.           iCurrSize++;/ y' p) y3 Q# s  x5 \+ a9 u% J
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: U9 V# d% [  P
  282.         }
    7 _4 g, Y2 v6 Y, e/ D5 `" @" Q+ f
  283.       }9 G  e( _3 {" _6 \
  284.       unlink(".\\update.txt");
    3 }$ \- A# N+ g; W9 P6 W# ^
  285.       unlink(".\\update.tmp");
    2 Q0 g; r1 i: i
  286.       Fclearf(".\\checkversion.dat");, |) b/ e+ W- O" a
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    * Q  L+ f/ q0 r& m+ y: `! T
  288.       if(UpdateLocal.size())) l4 [7 F6 ]% `( q1 u
  289.       {& _/ k  W# _- T) j7 \
  290.         UpdateLocal.clear();6 z5 ~9 l% s+ q. f! p
  291.       }
    . a/ j, R$ _5 `- [2 u3 P$ o
  292.       if(UpdateFile3.size())
    1 {" P0 y0 m5 a$ e4 S
  293.       {. v* O- J3 w+ q4 T
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% |% x4 S2 W" k. T) v, K
  295.         {
    5 |! |' G' s5 X% |/ `
  296.           file=(*p).second;9 g6 Q/ D& D+ F/ I3 h  [
  297.           free(file);
    , b/ y) Y; w  M
  298.         }
    # \; n+ i. n4 J" Q) V* a  t
  299.         UpdateFile3.clear();6 \# R. }7 {3 l$ n3 J
  300.         UpdateList3.clear();
    1 |- |: `. S# i9 ?
  301.       }# l1 P* X# k/ p) _$ z7 w0 f+ T
  302.       if(UpdateFile2.size())
    - D7 M) ?7 e% @& n' S! C) q
  303.       {
    8 Q- L2 l" v7 m7 I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). R5 G( @* j  i7 {+ C
  305.         {7 ~: O1 C4 i( t
  306.           file=(*p).second;% g$ {' L8 F: ]$ R2 v4 \
  307.           free(file);4 H6 V7 {0 {$ Y* w1 m
  308.         }
    : l1 H! ?: R  V/ i# Y4 N( _
  309.         UpdateFile2.clear();
    2 G/ E- B8 \" W  x1 R
  310.         UpdateList2.clear();
    ; M3 ]3 R5 z  U! V! F
  311.       }
    ' K( K6 i2 L+ U8 Z: U
  312.       if(UpdateFile1.size())# f" ], U+ \2 B: s$ r2 g
  313.       {$ A4 \3 {( g1 {$ m' W6 O
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & e+ @. a8 J# V8 [6 ?
  315.         {
    ( o( Z% ~8 s' s) _) e
  316.           file=(*p).second;
    8 b3 Q! h* E, D6 V# C& h# @
  317.           free(file);
    9 {' B6 W6 j5 t* ^$ b9 |7 b
  318.         }
    : m' s9 ^; z# z% o8 @& D2 ]
  319.         UpdateFile1.clear();+ M: R, M0 S9 T/ `
  320.         UpdateList1.clear();  `3 N, R/ p$ E9 Z
  321.       }
    , P  j1 t) c: @4 A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ) o- ~3 @' [! u
  323.     }  k3 u& h9 U$ v3 A
  324.   }
    1 Q  B. E2 n4 L0 @
  325.   return FALSE;( m- K- R% u/ |) Y& k# H
  326. }2 L9 o4 h5 p& s6 I7 J

  327. , W1 z" P# v# f
  328. void CRevAppApp::ClearAll(void)& B, j; l( W- N  u
  329. {
    1 [8 t3 \% b/ Z; F# A# Z
  330.   LPUPDATEFILE file;9 q, l/ V8 k$ U0 V/ }4 y: R
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    % z+ A4 p% R) p1 g5 @, I" p

  332. ! G, W0 F4 I6 `, q1 _
  333.   if(UpdateLocal.size())5 M8 y! S0 t$ \2 B$ [. X3 E
  334.   {
    * f% g9 ?$ L! p3 `
  335.     UpdateLocal.clear();1 C$ S$ Y% `# q9 Z) P
  336.   }
    2 R0 _4 a+ Q6 P, P
  337.   if(UpdateFile3.size())
    1 |) o" H; ?% f" k; c
  338.   {
    0 M1 w  e& U. f9 x0 A
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" y( `! i8 {" K- {1 I# \' U9 t
  340.     {
    3 J* W, k7 ~* f
  341.       file=(*p).second;0 r& g' g0 [, e1 i
  342.       free(file);
    4 x# v$ O& X$ `
  343.     }
    # c0 j2 d8 t& {' b2 n8 M
  344.     UpdateFile3.clear();6 h0 A7 P, e1 O+ Y
  345.     UpdateList3.clear();
    % M* c: W/ q; u9 C# c
  346.   }) ^$ M5 X6 F9 I) ?2 ~' H$ l: w0 S
  347.   if(UpdateFile2.size())
    5 m/ A; [" E3 l& x7 \
  348.   {+ Q& c& x+ |/ w
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 B+ G2 m# g$ z4 v# {
  350.     {6 `; s. m* F: G; Y/ h. N
  351.       file=(*p).second;- J2 U- u! u- j* ]6 {
  352.       free(file);% b  _! g6 S; _
  353.     }3 |/ |, q2 W- z
  354.     UpdateFile2.clear();+ q+ i# N- \7 V7 k
  355.     UpdateList2.clear();6 E2 b3 X* E" V5 F5 `+ s2 T7 S
  356.   }
    0 [1 n5 _$ E6 _) Z
  357.   if(UpdateFile1.size())9 C$ A3 I4 g8 {  T! `% |  s) t# ?- G
  358.   {
      m6 k4 x7 B' i* H0 N9 P
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 }$ x# v, T, W
  360.     {
    2 P) a% e- B- t; W! x4 v
  361.       file=(*p).second;! ^# e/ l$ w' m' k5 S# ?% D
  362.       free(file);
    * D: S( Z' M5 w9 \5 }6 K! N
  363.     }$ J' k$ _/ A3 f
  364.     UpdateFile1.clear();$ V( @, E: Q" M9 Q% h& s5 C
  365.     UpdateList1.clear();
    . \* m* C8 j4 a3 r0 |; p9 w, z
  366.   }6 [2 ?+ l! P) B5 {; ~) _4 O
  367. }  
    0 a- W4 n8 ^5 ^
  368.   
    2 W7 K; |* @: e' d- i
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ; T  y& J8 H) \5 J- }$ H- e/ X0 l
  370. {
    9 G  n. i$ A' r+ z
  371.   int c;
    ) f2 V) K3 q# O. P- ?; S
  372.   LPUPDATEFILE file1,file2;3 b  }/ t( Z1 d- s
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;5 s' Z' U, g1 Q/ \' Q! J
  374.   std::list<CString>::iterator l;" O! s1 c" m. Q( Y, ~9 s

  375. - W, W) c% b, u3 S7 t
  376.   UpdateLocal.clear();: M, i& e6 J" N  |6 t6 m4 W1 V
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    , n; N8 Z) K0 z! ~
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& t" P5 ^* x+ r& K( C
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' o4 e% b4 o+ F
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);$ c2 t5 D  c1 C+ M
  381.   if(UpdateFile3.size()). O! @5 G8 R" A" j2 X6 f
  382.   {* ~- `  X8 a- K% K! G# v
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    0 B- g% c5 w& Y( ^# {" R5 {3 j
  384.     {& u5 l  }' c; [: X2 T  ?% v1 Y
  385.       file2=(LPUPDATEFILE)(*i).second;7 w) k# M9 z# ?2 `* @
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 F* {: n4 r& r+ Z/ _  `& I
  387.       {
    * u+ V. C4 v( N/ [1 o( F
  388.         file1=(LPUPDATEFILE)(*p).second;  }* d+ ~& F6 q% j
  389.         file1->vers=file2->vers;
    # E' b+ N& v8 c
  390.       }
    % g3 q+ T% \" T# D( r
  391.       else" t* Z6 k) S- h5 m3 u
  392.       {5 J, K+ {# b/ M! g  J+ n  E
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 b/ V7 M6 x0 k. J* H; ~# d7 M
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    6 O% Y& V+ z0 j. e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ( [8 h$ M# j( j
  396.       }+ i  Z  b. M3 k4 J7 t
  397.     }
      ^$ c" R" V& i7 _2 Q
  398.   }8 Y; ~+ r! d" L% c- K8 B% }
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ r, p3 t" z& B! B% e
  400.   {) I. c# O; i  _  j  t3 g
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())) O# }$ l& ]4 A! h7 Q/ Z
  402.     {! B) n6 m+ ]3 \; G1 ^% \' J
  403.       file2=(LPUPDATEFILE)(*i).second;
    / L* C/ j8 l9 w6 }& o5 D) V
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " c& D  s; l6 E% }2 q( F9 g' g. D
  405.       {
    3 e7 [  a6 e) U# a+ [" Y) X7 f
  406.         file1=(LPUPDATEFILE)(*p).second;+ y# b# ]# y$ u" k
  407.         if(file1->vers!=file2->vers)& E- {0 Y$ u: n  L0 C3 Q  Y* G% j' w
  408.         {
    2 J6 ~/ B- I+ _, Q' k9 o
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. P8 e" l% O: e5 Y& m: S' y( N( b1 O
  410.           c++;
    ; W, ?8 D3 n) O) K
  411.         }
    0 @5 q$ \% l, C  y1 {
  412.       }
    ; N- T1 h+ g/ H* e& d' V
  413.       else' G8 z% a& A9 B; [+ C- M# R4 [) N
  414.       {- X/ Y! A5 x# x# x- e! g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( Q8 \) I# Z% y- d5 L% p# f' b) R
  416.         c++;
    : J" f- f) h4 x3 [3 ~
  417.       }
    ) p' G" w5 t$ o  y
  418.     }! V4 l+ o# E8 L6 V  y* ?# q1 U
  419.   }% K! F' e5 r5 R8 n( g& v- Y1 n, h
  420.   unlink(".\\DownLoad\\update.txt");
    $ o  `$ M/ n5 v  A# |6 @
  421.   if(UpdateLocal.size()) return TRUE;# _& V1 ^) j/ |+ z2 U
  422.   else                   return FALSE;& J( |- B! s8 Z4 E0 f
  423. }- n+ O1 }! Q: p* C
  424. 5 k5 t' o4 K# u) d) S, W
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    . k" w: x9 B" j9 e
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"9 F6 M. }& r8 a. y# x2 _$ ]
  427. $ M, z1 v# F! [

  428. 9 w! w3 C0 [: R) U9 _
  429. 0 C5 k9 e* V( m: f2 A+ f) m
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    * d9 I( Q( R1 B8 ^3 V/ m/ m
  431. {! I" O& ^7 H8 Y% ?) M0 Y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 j6 w6 @1 U, c
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * u; Q! K, h) l% }. k
  434.   {
    5 O8 r7 F4 D% ?; U5 B% ?
  435.     char szLanguage[50];+ Q9 D0 C( ]8 m
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " G0 S+ \2 M6 v! }/ K9 n
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : O. I# x6 w1 g& j' E9 p% \, ]
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;( S  D- O( Z% w3 v
  439.     else                                   m_iLanguage=ENGLISH;% |; m; `+ \. q+ X9 {* [1 j. T
  440.     char szRegister[100];' w" U) A7 F# i9 C9 d* K7 s* T
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    0 f* {+ q; X( ~* J7 r" V
  442.     strRegsName=szRegister;( F3 N) r+ h2 L8 v( b5 Q
  443.     char szPatchURL[100];; a9 @& e6 N7 _3 O, \1 S6 {+ H
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 q% Z! M2 C6 o4 \6 F: V+ F
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ x8 a) Y7 U$ w& R# t5 N) k
  446.   }
    , u' T3 R6 j! I7 T
  447.   else
    5 J; @; r- K" j# K/ k
  448.   {
    8 o# t2 H; T/ K. C$ s2 A# J7 s: d
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    " ~/ F6 M7 Z) h
  450.     strRegsName=DEFAULT_REG_URL;! V/ u1 N: m; b9 u4 X1 D1 r* W
  451.   }
    ( H7 o& f5 a$ S/ A' B4 G
  452.   if(GetFileAttributes("hosts.ini")!=-1); B3 w& E, J1 n3 K7 Q
  453.   {" ^& s6 h4 |8 g" a  t1 Q
  454.     char szIP[50];
    & S) i( _6 k! Y4 H6 N) |& r
  455.     char szDIR[300];- b6 o8 l: z7 e% a; d( d+ j
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))" j+ X* ^( B9 m( v/ p" i7 O
  457.     {1 k& U# A( X# }  n* y  i
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      ~% D& B- ~9 k" L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    + S" N! l  r! W7 B: S7 a, e
  460.       strHostName=szIP;
    + c1 d1 `( e$ b3 h" D% U! F5 k
  461.       strHostPath.Format("/%s",szDIR);1 m8 J9 l+ B) n% d  x: m3 E
  462.     }
    0 q* n9 [7 S2 N- O7 r" @
  463.     else
    * J2 m2 L6 V6 R% e3 b" }, L6 G% @
  464.     {( E* X" M! T, o3 _0 Y
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / r; H( {9 v3 Q
  466.       {6 ~4 U8 N( y. c. n( F* N' b9 i9 `
  467.         char szLanguage[50];
      E# M6 x4 ^6 M& w: I9 Y  y% J2 _
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* n8 e5 \/ k6 S! z8 ~
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 L& X  R5 x. {- g# N
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ Z$ [, }' Y2 n' u. O) O0 r
  471.         else                                   m_iLanguage=ENGLISH;0 I, R! m+ D0 T* [+ t- [# `$ Z" _
  472.         char szRegister[100];7 |+ W3 I& Z8 C  }6 V4 z0 D
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    * y( S% V: C2 _/ k. L7 E" |
  474.         strRegsName=szRegister;/ |5 m' ~/ h& D7 w! k- h9 C; _7 g
  475.         char szPatchURL[100];
    & ?: L9 h7 h' E2 f+ `9 E$ s3 D- d2 \
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");  v+ W6 V& D! L& J& `8 j. K% F
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & F1 M( X7 l/ I) R: H/ b0 j
  478.       }' Q* v$ A# F8 }" |
  479.       else. y. E8 ]5 M! x# F/ y
  480.       {
    ! c( `' R3 @* j# {  H+ o
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 K* H* l' i/ I! q+ F
  482.         strRegsName=DEFAULT_REG_URL;
    ! L: b0 @- K: q; Z
  483.       }" s5 z; k1 |# c5 M
  484.     }
    5 d5 [6 R3 j) U# B3 q
  485.   }
    & A, W( Y* `. h4 Q) G! F  H$ O7 ?
  486.   return true;: V5 T8 O- O! p  ?. v& i; b
  487. }0 W$ W' M3 w# c9 j. O! l

  488. ; R& ^6 u- {. \
  489. #include ".\ZLib\unzip.h"
    1 }/ Q  }, E" d) ?4 ]4 M7 P7 k
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);/ L' q( Z; F2 u0 d( i  B% Z
  491. /////////////////////////////////////////////////////////////////////////////0 [* S/ m- Q( m
  492. // CRevAppApp initialization7 ~* ?' C7 I  A( G1 y1 T2 j. k
  493. & [0 s7 t+ |/ I2 G8 k6 S  [
  494. BOOL CRevAppApp::InitInstance()
    ) x+ c. W- ~: i, J1 }
  495. {' b' b5 ~6 s* z  u2 |: p
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];6 k9 M' W; p* f+ g% A  a: ^

  497. 9 o' U1 U/ `4 Y' t! M/ R7 A1 j# p
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);9 `6 S% v2 P; R
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))+ ]+ U5 m7 V7 K! j' G) L  [
  500.   {
    & w3 \5 c4 u- N- z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");1 g, F0 z9 f! M% N0 z1 n
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    & U# R. K3 Y) g+ p+ [; H
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))6 a7 }2 r) c3 X$ ^+ e
  504.     {
    & ~! b0 w) w0 G/ Q0 ~
  505.       strcpy(szPath,szPathTarget);
    ; ~- v% b# b  J0 O, B
  506.       SetCurrentDirectory(szPath);9 N8 a) }$ }" T  f. Q8 c
  507.     }# ?1 {7 v( n: ~9 x* w& ]+ _
  508.   }9 d8 b0 W+ n. q+ E
  509. #ifdef _DEBUG
    ( J) H6 ?  f8 X5 Q3 @6 I
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      z9 x/ q! t) I' f3 g
  511. #else% T6 n9 }% G# j9 d$ Z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( _& w# G: S6 C( Y; }( g' h  x$ t
  513. #endif
    ! |; O% ?. d% |4 E6 e2 d
  514.   {
    % R2 @8 H0 L7 P& A
  515.     char tempFileName[MAX_PATH];  M6 }8 L9 L* p2 N+ ^* k7 O
  516.     strcpy(tempFileName,szPathSource);
      c% b/ T9 O8 `7 Y8 o' N: R: e' R& @. `
  517.     tempFileName[strlen(szPathSource)-12]=0;
      M* z5 j$ y& p0 U
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    9 G! K( z; k& T9 H7 z7 H) A# a
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 K, v0 ^. l& c6 v
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ( s7 L" |; A. k1 W  A. P
  521.     return TRUE;
    6 B8 ?$ J( A0 N* W. c. G  c
  522.   }
    4 Y' i& ?; \9 r  X* r6 M
  523.   // Nuke 0118: Delete run.exe
    6 L3 |! H* L8 Y/ \
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );9 J. Z& D1 g3 S8 H/ n7 l7 N5 f/ u
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");. e, {9 B! @2 B7 x2 \
  526.   if(!ReadCfgFile("Config.ini"))
    " e0 U& A3 O5 P1 `2 I5 n
  527.   {; d5 }( @. D9 l9 a
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);6 M$ e4 V6 @: V7 }+ S& a7 J- |
  529.     return TRUE;
      L: _3 N/ ]) t7 d" h7 X* [
  530.   }
    4 t6 e' v# S4 E( R. e
  531.   HANDLE mutex;- k: D' N( X. B& G# R/ x: Q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    5 f( s( h; a% ], w3 {% c8 C7 z/ |
  533.   {
    0 w/ D2 Q, o# w5 K1 J9 d
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)' P  M# u# m! d# ]
  535.     {! j/ F$ a/ x! o; M# G; j' S6 T
  536.       CloseHandle(mutex);4 R( L- J* Q8 G, B3 l
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! F& p4 D4 K/ i$ U( N
  538.       return TRUE;+ r/ A8 g. ~/ z4 l! d" J7 y6 d
  539.     }
    ; v1 C( D% D$ r( j9 Z9 X$ H* e! a
  540.   }  . C) J" M' x. E  x5 t- R
  541.   CloseHandle(mutex);
    4 L. B  Z+ C/ q$ \% s' C2 |5 S
  542. 9 T2 M! ?( M& M) G( C, M  {$ K" L
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);" n; h# c' {3 y0 \4 l9 L* |

  544. - A6 X+ D6 C( h, p9 Y3 o4 O
  545.         AfxEnableControlContainer();
    1 w" y& {5 B9 b1 U! O- \, v4 F

  546. 4 O2 Y9 g5 z2 B' G2 O0 n3 H: F+ Y
  547.   bCanUpdate=FALSE;
    * N4 b* t2 L* X$ {
  548.   dwStartUpSteps=1;  Q" o9 A! q. v) V1 N+ @5 Z; b
  549.   dwProgramState=AP_NOTHING;# d( K' `; [! y% ]* m- o
  550. 0 _* j! d0 u. `, z: j% J
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" C1 {9 Q' t* {! I

  552. $ L7 E6 Z0 X4 [5 H" k
  553.         // Standard initialization
    3 K+ Z, U6 f/ b+ N. {( ]  f( K  h
  554.         // If you are not using these features and wish to reduce the size1 U5 H3 w) R0 x  B
  555.         //  of your final executable, you should remove from the following
    5 D1 R( ~: V) W& A9 t4 L5 M$ W
  556.         //  the specific initialization routines you do not need.. ?; f; E4 O1 i1 z  C

  557. 1 @. `; @/ u; N# U
  558. #ifdef _AFXDLL& c8 ~% ?# }. C& G5 x
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    % ]( G9 y' ^2 C
  560. #else
    5 {- M2 i, ~3 R" q. p
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically0 i5 Q: q! h8 m* d# B! E7 V; q
  562. #endif
    9 E+ ]3 }, K+ R( `0 X# l* G+ e
  563. ' B& y) h* z! |
  564.   dlg=new CRevAppDlg;! N; }  H0 B6 c# b7 E
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    $ B4 |/ n% j8 W5 W
  566.   dlg->ShowWindow(SW_SHOWNORMAL);- z" [7 j) R3 @% T# h
  567.   m_pMainWnd=dlg;
    3 L0 m# x3 h7 m

  568. 6 K# a9 `% [/ k/ t0 O1 R0 p6 j
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);# O" P1 x# D( A, y0 |

  570. 1 b  z! Y5 }3 x& N* Q7 ^! D
  571. //  GdiplusStartupInput gdiplusStartupInput;
    4 G8 L9 c& x; H0 p9 v
  572. //  ULONG_PTR gdiplusToken;
    ; }! o6 v2 m' w6 P3 E# B7 ^" C, M! C
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    2 n# L. q; [% \  r$ W

  574. * _* V6 T2 `% G4 u. M
  575. //        CRevAppDlg dlg;# y+ F2 |6 G0 M/ N  I5 N
  576. //        int nResponse = dlg.DoModal();
    : l, e% Z; r( }, g; f
  577. //        if (nResponse == IDOK), x/ L4 s% a0 V" j/ c
  578. //        {
    8 _: m( G! f9 {' l
  579. //                // TODO: Place code here to handle when the dialog is7 N& j( @. s/ E( E
  580. //                //  dismissed with OK' a3 I, }; i+ w& @$ o, m
  581. //        }
    # }7 Z/ {; }1 s. N! z, b
  582. //        else if (nResponse == IDCANCEL)  R. \1 A. j& x) M. I! {
  583. //        {' T' U3 W" s2 O: G
  584. //                // TODO: Place code here to handle when the dialog is
    " |, J3 }) C9 x' w3 W$ c3 u
  585. //                //  dismissed with Cancel3 Q" F  |: M0 m1 M! J
  586. //        }
    $ \/ L4 u+ @" E3 x* p6 s7 a, ?2 r

  587. ) K; e/ |2 ]1 ]8 N' X0 |; H& N
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    5 r* a1 Z; f7 w" h' o
  589.         //  application, rather than start the application's message pump.2 n2 y8 ^' d4 I" b. t  e% n- H0 Y  T
  590.         return TRUE;. S; V$ i! m1 q# X
  591. }
    0 m( t3 j( r7 e+ I% j" i
  592. . V% `; I9 ^2 C3 B; p
  593. char *CRevAppApp::strtok3(char *pSource,char *token)# ?: Q! Q# F$ g: m$ O+ O0 t1 {2 `
  594. {: o! G( D5 _; x- [+ W+ ?
  595.   int i;
    + ]6 z7 P) u' K& f
  596.   char *szRet;
    ! V0 x. ^# ?9 X

  597. " M7 u9 y4 |2 K1 W! q
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " K! Y7 P; g6 S* P. J7 t( D
  599.   if(sztoken)
    ' Q- q3 a: v9 a0 T0 o9 R6 I4 i
  600.   {' e0 s7 Y% ~, ~
  601.     szRet=&sztoken[itoken];
    $ E6 h4 \+ Q0 u1 w, D: k
  602.     while(sztoken[itoken])
    / b- h2 L! b/ q% W% v# `" ^
  603.     {  }) @* r' u" h* l. `
  604.       for(i=0;i<(int)strlen(token);i++)
    2 O% ^7 @4 x( W. Z
  605.       {) V4 ~9 @( A; \/ f
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]), c' s; r. z" [1 |5 b  H
  607.         {# k0 Z# P: j0 i# ]% Z
  608.           sztoken[itoken++]=0;* [9 Y6 T' D- @2 T& j
  609.           sztoken[itoken++]=0;. {1 r, p) V5 y) _- B
  610.           return szRet;
    / i5 Z) S& N2 ?! v7 i5 y8 C
  611.         }
    & d+ ]1 J# G6 A: ^2 h8 i
  612.       }
    ) a; g. i1 `9 S. g$ _# P
  613.       itoken++;
    ( h4 r9 L7 W( c* H, y
  614.     }0 w/ W  A9 g7 T  C, m( V
  615.   }
    % l2 S- B  a3 e( w' X( c# P
  616.   return NULL;
    # i0 b& w' d9 Y% `$ q7 K+ _. G% X
  617. }
    " v6 l+ g* I( J

  618. 3 w* Y8 x# S7 m( d
  619. void ProcessProc(long Total,long Current)9 B  V& J3 ]; L3 p
  620. {/ }( f9 x, X" r1 b  B7 _' P) S
  621.         MSG msg;( `7 a1 z( y. u6 D' g
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);$ ^2 A5 A8 F: `/ g8 G5 M$ x
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ( k7 L5 s7 ~( @+ R
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))$ u  g2 m4 }+ D% H/ ^+ z; ^
  625.         {- h  B! {& P8 X7 f" ^
  626.                 if(!GetMessage(&msg,NULL,0,0))0 I+ f& p7 h& u* A4 J# R, r
  627.                 {
    ; H& L6 ]2 U) r% y7 L. ], t% w% e2 A
  628.                         return;$ y! m# d! F  r; w- A# I$ _. g- {
  629.                 }
    0 J+ D! q- F( O3 @
  630.                 TranslateMessage(&msg);( t- ?) P! F+ ?5 z
  631.                 DispatchMessage(&msg);+ }/ s* n6 A) e7 i# X4 ]
  632.         }       
    " B1 ]8 t/ I. r- M6 b0 p
  633. }
    . U" l5 a- V9 T& x, F! o! Y! ]% a" S
  634. 9 |1 {" }5 d0 Z% {
  635. BOOL bFirstChar=TRUE;
    5 l% ?! {$ N9 Q( a. A7 y% ^! ?. h
  636. ( w( [7 ]9 l- A
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    + ]4 e. a: h  C
  638. {! c$ E9 k7 z; q6 Q" ~" i, D& E
  639.         // TODO: Add your specialized code here and/or call the base class3 u( B6 _9 w1 v; u  a1 g
  640.   switch(dwProgramState)
    * T$ \6 d( p6 W% u! w& w
  641.   {2 b6 U2 h3 X( R& O3 I# U1 B/ G
  642.   case AP_NOTHING:
    ; \+ r* W( U5 n
  643.     switch(dwStartUpSteps)
    ( @$ D% n  H0 S. n/ A% h2 `/ }, Z) a
  644.     {: t6 J/ ?- e8 D
  645.     case 1:. P% S! z# i% C
  646.       {
    + C! {( B8 S( i. `7 B
  647.         int i;! v6 ]0 S+ F) B7 u* ~& i1 Z! a
  648.         CDC *pCDC=dlg->GetDC();( ?4 W% l3 z6 A% z( q5 V+ [/ P0 m
  649.         HDC hdcwnd=pCDC->m_hDC;) Y: ~+ ~9 R8 w. C9 P8 V
  650. //        Graphics graphics(hdcwnd);
    : \& z$ y( L0 x
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");) u+ M" J% H* i6 s( E5 X; u
  652. //        INT iWidth=bitmap.GetWidth();
    + Z2 f8 `0 H) b) {( ^; b
  653. //        INT iHeight=bitmap.GetHeight();
    " R( M4 _' _$ h
  654. //        Color color,colorTemp;9 o" a; ^) p/ q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ Q+ o6 W' S/ t+ E. g7 D! x- r" T6 x
  656. //        {  J$ t) \& S& }9 f
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    0 v$ X3 [2 \) e: b: G
  658. //          {
    , K' A: Z* w; V1 q
  659. //            bitmap.GetPixel(iColumn,iRow,&color);# S) v# ^& e3 U" O  _9 E
  660. //            colorTemp.SetValue(color.MakeARGB(- O+ h; [, m; z4 m  m' n
  661. //              (BYTE)(255*iColumn/iWidth),
    5 X/ l+ G$ O+ w! Z  K; l. a3 I0 s7 L
  662. //              color.GetRed(),* m- e- ]6 Z) L9 R/ H7 B! s
  663. //              color.GetGreen(),
    * B$ e2 n- M; O* l* I1 G
  664. //              color.GetBlue()));5 P8 ?" j( |4 W0 W% p0 I6 ?
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' F9 w4 a# O7 n( s9 Q0 ?+ x. D+ ]
  666. //          }
    7 ~, _1 h+ T  u) `7 v5 X7 Y
  667. //        }
    3 T# ?" a* F( K% L% Y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    0 V1 f  j% t$ _4 e3 \. n
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( T7 c3 R6 w5 H2 m3 Q" S
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    * p# z8 Y& w1 h/ K: q5 e
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + h9 j+ h+ Y1 B8 V. |
  672.         for(i=0;i<240;i+=8)
    ) O& u; O3 S2 w8 i  M8 @% R
  673.         {6 u! |3 H9 r4 Z" S8 g+ T0 v4 @
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & `5 ?0 z5 C  P5 f
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  Q4 Z$ x6 g( N6 j
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 E9 E5 i4 S' y6 X  f. P
  677.           Sleep(33);
    2 h# z- f4 |1 G) P
  678.         }2 o* ]. P' `, S0 o/ x% k+ X5 O$ _
  679.         Sleep(1000);
    $ E' `2 Y6 |, o- c7 @7 T( L
  680.         for(i=240;i>0;i-=8): S9 x5 D: B  k- @$ d7 p9 q
  681.         {! b+ i; c. r* v. M3 u) K0 A
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& d* `' r6 Y+ a  G7 X: X
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ `- r6 A3 F' V- k/ Y; {- G7 R8 v* z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 m$ G1 A4 l# a: h, N9 O; x4 w" X
  685.           Sleep(33);
    ' R# ^+ m2 t2 f2 U# f
  686.         }' G8 b" ~7 Z* @
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);0 q% w. m: j( n9 z$ n. j) R+ N
  688.         dlg->ReleaseDC(pCDC);) B  e5 u( r3 w
  689.         DeleteDC(hdctar);0 w4 O( c5 Y  \1 r2 ~; w
  690.         DeleteDC(hdcsrc);
    8 F$ W/ j8 O: ^% c" W/ I; H
  691.         DeleteDC(hdcorg);" T& \- T( ^! S/ o. s# ?1 ~7 s7 `
  692.       }
    8 b/ v! v& ^2 i. m
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    # U) ^! m+ }& h4 \+ C1 u
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* v5 P  m5 w3 \6 w
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    8 m* i0 e* V! n# q8 F
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' Z. R- z8 [, r2 j, Z" e
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) D9 C5 u4 X* m/ p8 n+ t* @6 |
  698.       if(!Dn.Connected())0 h( d9 _% P8 W; E( A" z8 g
  699.       {5 q4 _4 I+ d$ Z/ n
  700.         dwTotalFiles=1;! N* K8 j, P, l, u8 D2 Q' E8 Y
  701.         dwDownLoaded=0;2 P, A! G  D1 a' j) [9 J5 R
  702.         bSilentStep=TRUE;
    - e# K: J  |3 \
  703.         bCompressed=FALSE;
    - v' v$ G- X, U$ h! ]. X5 l
  704.         strExtLocal.Empty();. w& N6 }) o! B% c  l1 c
  705.         strFullName="readme.txt";! \+ y: d" j: \6 j0 U: t  g
  706.         dwProgramState=AP_CONNECT;
    1 p& P+ F, p0 s/ T3 V0 w5 K
  707.       }' m4 x' L: c# Y% D$ t9 {' E5 Q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();, Y# J$ V5 R8 }9 r% C- y( H
  709.       dwStartUpSteps=2;+ T) f4 w5 l4 I, z
  710.       break;2 ^& E6 ^6 D* `% g9 Q
  711.     case 2:7 P' q, n& o& Y! X  B
  712.       {. @7 @0 y6 b% f! c  k
  713.         int iEOF;
    * F. M! i" B: f( E  r& S) {
  714.         FILE *fp;+ H7 N. C0 |$ D8 R, v
  715.         char szString[512];; w4 Z8 a* e+ @2 V7 R
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ! b" {0 b) Y: n. P0 _
  717.         if(fp)
    8 s, A- c, z3 [
  718.         {
    + X4 C9 `# z- O0 }
  719.           do- \8 r( {: o8 T! F% V2 K4 [) ~
  720.           {
    5 Q, [' ?; P7 O& @3 l
  721.             iEOF=fscanf(fp,"%s",szString);
    + q" H/ I& ~6 e$ h
  722.             if(strlen(szString))
    ( c/ C1 L! s5 {; B
  723.             {
    6 y1 d  y+ G" B9 b: m2 B! L( h
  724.               if(bFirstChar)( o0 F9 y3 k, }0 p4 `8 q
  725.               {
    , C1 Y% Y2 N& Y. w5 ^
  726.                 bFirstChar=FALSE;/ M% f. B$ T9 y3 Z) p; c5 U  s
  727.                 bConnectIsBig5=FALSE;5 p. U. e3 y) p0 ?) K3 L
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    4 b6 x! Y* }; q- i  @
  729.               }
    6 V  ^! q: H0 H1 j" c" ?; r6 z- x
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 F/ B3 P) w# \% e; N; e
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    / ]/ r$ I5 I; s, o7 H6 L
  732.               dlg->m_ListText.AddString(szString);2 P; a* y, U7 w, A; y
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , a$ |+ `$ }2 f% r
  734.               *szString=0;- e( I5 G. y3 S
  735.             }+ h) c5 E( q0 e. Z# {  U  N" o& W' N. p
  736.           } while(iEOF!=EOF);
    0 n/ B9 ]' c# D% i3 _5 r
  737.           fclose(fp);
      v7 y1 R6 T* s# ~' w! [
  738.           unlink(".\\DownLoad\\readme.txt");0 ]0 I. i7 C1 G) k
  739.           dwStartUpSteps=3;
    ; I& V" C- N( O2 I: S
  740.         }
    4 j/ D; U% [4 i2 g/ q
  741.       }
    ' Q8 g6 W) _' s$ @! l
  742.       break;
    4 l! @  S8 [& V& ?
  743.     case 3:
    1 j7 _& |5 P6 Q8 T2 ^: N( I
  744.       if(!Dn.Connected())
    5 o) _- r! B8 I" {$ c
  745.       {
    5 Y* E4 ^% K% F0 Z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    4 v7 P( q8 C+ b9 I
  747.         dwTotalFiles=1;* |+ v- i, u% ~0 s
  748.         dwDownLoaded=0;
    ) m2 k! L' g1 w4 T* j# q( k, T
  749.         bSilentStep=TRUE;7 O% X3 b' K6 H) e4 i
  750.         bCompressed=FALSE;& n) x, J8 `9 k4 r
  751.         strExtLocal.Empty();5 n8 j9 }$ R* ]4 M
  752.         strFullName="checkversion.txt";' g' u1 A  {8 x2 }
  753.         dwProgramState=AP_CONNECT;
    : W2 G2 X4 `9 z
  754.       }5 \" r6 I  e& \# e7 F  c! ~9 F
  755.       dwStartUpSteps=4;4 i7 x0 S+ T2 f
  756.       break;% a1 U# Y  T. k) X
  757.     case 4:
    % h6 a' W- Z9 _, {
  758.       {" {/ A* H/ p# X' M, n) D
  759.         FILE *fp;" u! Y9 L9 S$ F: v) U
  760.         char szString1[128];
    3 _5 R  ?$ n9 p! O6 U4 P
  761.         char szString2[128];
    % R& \  C. t4 V
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    $ ^, f: ^0 r, q' j, l
  763.         if(fp)+ f$ J4 U* C3 ]( v, G  L0 x# s
  764.         {
    & a3 C8 b$ a3 P* t% Q5 F& z
  765.           fscanf(fp,"%s",szString1);
    # Q) v( w2 ]+ ~! s$ R2 I& R6 [
  766.           fclose(fp);
    4 _- Z* \1 n- |* Y& Q% N
  767.           fCheckVersion=atof(szString1);
    / I: W$ ?6 A9 L2 u, U) b
  768.           fp=fopen(".\\checkversion.dat","r");
    * h- C5 N! h- b0 t
  769.           if(fp): F, S: n" c& @
  770.           {% v" y& ^% r! A7 K- ^; Y
  771.             fscanf(fp,"%s",szString2);
    9 O- W7 _1 t) L
  772.             fclose(fp);
    " o; S  k+ x: x2 |( j  @5 x7 W6 I: y
  773.             if(atof(szString1)!=atof(szString2))5 q( b9 t: A) G0 x; O
  774.             {0 T. x8 G: s% J: l% l/ M
  775.               if(!Dn.Connected())2 {3 H0 _0 D% _6 h7 m
  776.               {
    ! X( ?0 C* o- \) U
  777.                 bFirstUpdate=TRUE;! C$ N0 J. F( n$ K2 A
  778.                 dwTotalFiles=1;4 d! Y5 q" g* B2 m' K5 S
  779.                 dwDownLoaded=0;
      }+ M3 {- @% ~: ~
  780.                 bSilentStep=FALSE;+ \; T0 v6 G/ r8 ^4 G
  781.                 bCompressed=TRUE;3 ~( X; V/ u/ }
  782.                 strExtLocal=".\\DownLoad\";
    ' [5 \8 `3 e! J1 K/ f' i0 o
  783.                 strFullName="update.txt";
    8 g0 M( q8 t5 O* x" T
  784.                 dwProgramState=AP_CONNECT;6 z) u: c; e, B% U
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");& x! e2 T$ Q! c& z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; T; N8 ]# ?( J/ Y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");+ ]2 \$ ]# j3 m5 ~& R
  788. " I1 V6 L) r" e
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; B! k! w4 y2 t' q$ J
  790.                 unlink(".\\DownLoad\\checkversion.txt");1 c4 ?- N, ^# K( M0 d
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)% q) l( U% S+ o6 q7 m9 i, `: Z0 d
  792.                 {, N' D" K7 T; G1 x
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");2 P3 E( ^0 C1 x! E/ n% B, A) u% v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");! s; W" F9 E3 r4 S( s
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");+ m9 k1 g0 o; ^& E, z* ]* T
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , f- t+ ^1 ]1 A0 P3 V
  797. 2 k0 T- R# Z, h/ F
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");( d7 `) i) l; Z- [
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 z4 i7 q% B$ p# v7 H5 U) s
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");& d" p& C( d: t, {
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ \$ t1 H) |4 D/ G" _( h! D
  802.                 }8 h! K" O: I' W4 S. {7 U' ]0 D
  803.                 dwStartUpSteps=5;4 L8 b7 Q  {) H& s7 E. B
  804.               }# \9 }4 L! @5 D' Z2 M
  805.             }* Z! H% ^4 m8 Q. \9 v& ^# L' U
  806.             else! y! I. y) L! H% F% m
  807.             {
    * S( l! d3 K% ]. z, s
  808.               unlink(".\\DownLoad\\checkversion.txt");. V6 l. o( \9 T
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* ~' P1 C- x4 I7 S4 D: z+ |$ y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 j/ D& u0 U; k: r) {4 X: o: _/ O* E
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 G2 V3 y$ e& E/ u1 F) s

  812. 7 R: a" u$ V' F8 q5 V8 T1 G
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / F) E* p) q- C9 c: o9 d
  814.               dwStartUpSteps=99;( i) O  f  t4 A5 [8 S4 U6 f
  815.               bFinishUpdated=TRUE;% G# }" {7 Q7 @0 H
  816.               bCanUpdate=TRUE;, Z6 v" g+ t8 D& J
  817.             }
    1 ]4 \! l9 M2 `3 Q+ G7 w
  818.           }& Q2 a, f/ ]3 |1 A
  819.           else
    , q- p2 S4 T7 l$ W9 x0 y
  820.           {
      D" l) d# [' p! y1 s$ o5 G. U( a
  821.             if(!Dn.Connected())
    , V/ K0 {6 r; E, ?! t; a
  822.             {
    " F  W' k# p9 P" \0 k$ A! s
  823.               bFirstUpdate=TRUE;
    ) W5 g! b, {% E! S
  824.               dwTotalFiles=1;
    8 C/ U# `, I& V( p6 ?
  825.               dwDownLoaded=0;5 }! l  o- t* o; U& D) I6 Z
  826.               bSilentStep=FALSE;
    ( }. L- v( W$ G4 ?1 ~: e
  827.               bCompressed=TRUE;
    7 n) K- C: P7 E7 K( S
  828.               strExtLocal=".\\DownLoad\";
    / x. v3 X& ]; U1 @
  829.               strFullName="update.txt";
    . N8 h  I7 `% ^) ?3 `
  830.               dwProgramState=AP_CONNECT;) @" o9 x2 i4 [
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 e/ s3 V+ Z2 r. h$ y! d% M
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    % b6 G  H5 n6 T* R0 A8 h
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");, M  h( ^4 q" i$ A, k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / @  O/ _& o' r. v! O7 ?
  835.               unlink(".\\DownLoad\\checkversion.txt");
    " t2 g& G0 A8 _( K' r; I; F
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)' }# |6 f* ~  k3 d4 y, i- o  R- Y
  837.               {
    : O3 P  d8 H0 M6 e5 w
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    4 l! a# c: Y. u: T& b4 H& O
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ! R# f8 E, H& Z3 P, @
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");5 M* l# `5 h9 v) o
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ g% E; ~3 Z7 R* y- r% V' w
  842.                 # D# i3 M, g8 R5 V
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! h& N; o7 I$ s2 T% d) C) h
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 m4 K9 k: K! M8 A, l6 d
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");$ ^, q7 R4 m- K! J( H0 G" v3 i
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 P' [% D0 b( i
  847.               }
    1 c: ]8 n% q3 u, }5 y
  848.               dwStartUpSteps=5;
    2 ^- X5 V7 N+ d+ Q% w, ?: [( [! T- m$ s
  849.             }, J& W5 N) Y1 l2 u4 S
  850.           }
    & J' b' Y5 R2 o1 z+ T
  851.         }  ?: I, O! n" [) y2 l5 \/ R/ [4 x
  852.         else. l& v7 p2 i3 p3 S3 L9 C2 b
  853.         {- ^: |1 o& o. X
  854.           dwStartUpSteps=3;* Y7 r+ ?2 m( H
  855.         }7 e. G: N/ R0 Q" G
  856.       }
    9 n; u- Q5 ]  t
  857.       break;0 M" V3 i" p/ x+ f+ o; V2 B5 v2 l' [2 }
  858.     case 5:
    - d- u5 q* k0 W2 u
  859.       {, A/ Q& z  p8 P* n7 ?
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    : n# b5 E4 Z/ d& ~5 [
  861.         {4 V6 h; Q1 m% {* P! @
  862.           int opt_overwrite=1;
      D6 [% C) t9 N* h4 @
  863.           int opt_do_extract_withoutpath=0;
      P8 G% @1 f5 I" U4 P
  864.           unzFile uf=NULL;
    ; X- d7 T! q" o1 m1 J3 V
  865. ; P8 v9 C+ t0 o2 J- ?/ c8 @
  866.           uf=unzOpen("Wsa.zip");) J' b$ r9 B& e; S8 q# d% V! R. J
  867.           if(uf)
    ' O( `! \# k2 G3 l& t8 A1 _
  868.           {
    # B4 Z1 z% q" b
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    / v( z: U" a! `% k, i2 O4 a
  870.             unzClose(uf);
    . V5 o( r# Z: B, O$ F  _
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");9 Q9 F4 c7 V) W# x4 ~& f2 f! u
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ( a1 h7 Y+ I' n. ^
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    6 C: o& |- {+ F7 J" j
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 t; s  j0 E3 f0 M! b/ t
  875.           }! J) Z6 @7 J: r) g$ S1 M
  876.           DeleteFile("Wsa.zip" );, `9 j8 R3 Z6 b% X9 y1 t! T
  877.         }2 A# ]- e5 m8 j( Z

  878. 9 A  \, @. p) q( v! Z* i* H
  879.         if(CheckLocalVersion())0 i( X  W" c( f) Z- O
  880.         {7 Q" B' w: ~$ j7 q: w$ Q6 ~: q
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");* W6 B) E2 Y  r
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");6 D$ \, E6 u5 h; L$ B1 Q
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");( `# _% {/ \' X
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # @8 ~/ X5 w7 s6 }7 }* [$ J1 w
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    , N+ h! p# a3 b" |, I' h9 P
  886.           dwStartUpSteps=99;6 h8 v5 ~. Z3 m; D5 D' O( d+ V9 b
  887.         }" Y  |- b9 w) q" ?% l( Z# \/ }$ n
  888.         else! s- ~4 n6 s9 [2 |( Y* r/ @( @
  889.         {
    8 k& ~1 @9 n' {  r' G4 }5 c
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");; M/ o6 D; C" ]! W8 v
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' l% {1 L7 N) x7 c: e0 S* X
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    . W( v: e* S2 P

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

8 p% s: {& q! y5 ]; ?
+ J1 X! f! C) N. p, L3 F

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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