CSUpdate.exe源代码

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

7 b% ?! e. D  u$ Q( h3 L
  1. / RevApp.cpp : Defines the class behaviors for the application.
    6 f. w9 S9 k* Y* N* X7 A3 ~
  2. //
    / n6 h* P' D/ p

  3. * @: h6 h8 X( p: d* U
  4. #include "stdafx.h"
    ' l9 U  Z8 o: c6 \) W; u/ \! `
  5. 0 m6 v# u! o0 O7 U- Z7 {5 V9 L
  6. //#define UNICODE9 ^; C+ }: l+ I, M' D
  7. //#include <gdiplus.h>) H9 u0 a& ?- ?% z' D; t
  8. //using namespace Gdiplus;
    ) P4 Z/ j* ^; C3 \# {

  9. ! Q2 }' @" h$ l" {
  10. #include "RevApp.h"% {9 w: P% x0 w& M7 t& U2 V( c
  11. #include "RevAppDlg.h"- r3 T1 K4 }, p7 ?; U

  12. 1 |" x" y5 t$ k- `' o- I# @, q
  13. #pragma warning(disable:4786), t7 D( _3 `/ V# X/ D+ [& P$ O2 i4 v
  14. #include <map>
      a9 L2 Y( u  o6 W6 O' a3 y
  15. #include <list>' |5 J9 s! s9 |0 \; j
  16. #include <direct.h>
    ( {0 y; m; x" a* ~

  17. & c+ ]  _) i0 |: Y  b
  18. #ifdef _DEBUG* W& O0 [7 a5 |
  19. #define new DEBUG_NEW8 j7 s& Q! W& @$ A
  20. #undef THIS_FILE$ d: X2 X8 X. R3 @7 Y9 w- a
  21. static char THIS_FILE[] = __FILE__;/ u4 D3 s8 t- N
  22. #endif
    " `8 K# f7 `( a$ @. O- l. d
  23. #include "SkinResDef.h"& v$ M: f1 \6 Z' V  l- S% ~+ @
  24. #include "ChangeBG.h". T5 I. Q+ i$ Y
  25. #include "AFXINET.H"
    ) `$ T: k& ~; j1 l( I$ d" x
  26. ! C# T" `$ {5 G( I/ m6 _
  27. #define TRADITIONAL_CHINESE 0
    . i- b% q& o! [! q
  28. #define SIMPLIFY_CHINESE 1
    + g$ `9 B4 R" g9 K. u& m) y2 z
  29. #define ENGLISH 2
    / h2 T" B' c6 E# z! g
  30. int m_iLanguage = ENGLISH;& k/ t6 M0 c/ n* P0 r! G
  31. /////////////////////////////////////////////////////////////////////////////
    ( Y8 N  \+ l  p5 w
  32. // CRevAppApp$ j+ B) J; I* R! z  |" k

  33. . v3 o: l8 v! O& [- d3 I
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)4 J4 I4 [7 ^: n; k: y7 b  }: u+ f
  35.         //{{AFX_MSG_MAP(CRevAppApp)5 K3 G8 ]) |' K& m0 ~% ^* E
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.& l! Z/ f- s# o, G8 E4 w% W% q
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!0 V/ }4 p  H* f; X7 W
  38.         //}}AFX_MSG
    - p4 r  c- w+ u- h" a4 ~5 [7 v9 U# o! }
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)0 O( Y/ I5 m; C' F8 O8 K, l' p
  40. END_MESSAGE_MAP()/ O+ w+ J! n0 A6 d5 X

  41. ; _/ {2 [* [3 W; t' H1 j; R
  42. /////////////////////////////////////////////////////////////////////////////
    8 s: Z' H; o* _, P, M4 }& {  C
  43. // CRevAppApp construction
    ! X, m: Q. a1 v' V& \
  44. 0 h6 F% r8 K2 |; z  D
  45. CRevAppApp::CRevAppApp()
    9 N; b0 N3 u6 [# Y1 b9 x& c, y+ b
  46. {  g6 \) t8 S: g
  47.         // TODO: add construction code here," @3 i, P) [6 o" }) f9 m- A4 v0 R
  48.         // Place all significant initialization in InitInstance
    $ J4 L: J, v, a$ k! w! I0 g
  49.   bDisplayIsBig5=FALSE;
    + l7 |1 a" Y$ W! I: M2 [. v
  50.   bRestartUpdater=FALSE;5 v: ]/ _& T. ^$ j( x8 B5 S% C0 U
  51.   bFinishUpdated=FALSE;  j5 {6 J1 u( }$ r# @: X
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;- K5 `( I3 n# e# @% t# B
  53.   InitChangeDataBig52GBKS();' X8 F7 ?% D! e  [* I7 S
  54.   InitChangeDataGBKS2Big5();0 R- F6 n. c& ?! M; G; {4 _
  55.         //! A% A+ ?, G2 m: S  H2 U
  56.         bClickRunExe = FALSE;
    $ X1 `) J0 d6 f3 @7 A( D7 j* u( \
  57.         //  |$ Y" @0 \0 F8 Y
  58. }
    ! o4 q; N$ J7 R% H- s* d3 u- Q

  59. $ @! S' O" _- s9 N' A; \- `' n
  60. CRevAppApp::~CRevAppApp()
    : }0 t( E4 }% a, e
  61. {
    , _' L0 R2 ^; B" J1 d
  62.         // TODO: add construction code here,
    % V6 r4 c7 K* A0 u. L
  63.         // Place all significant initialization in InitInstance
    ; r. ?7 B( [8 v& M1 [
  64.   EndChangeData();* U/ `. R9 R; M
  65. }
    9 Q: V7 r8 Y* R

  66. : N) x, F  F5 a: J+ C% {3 [
  67. /////////////////////////////////////////////////////////////////////////////
    9 r# }1 p  \, D! D/ C0 r
  68. // The one and only CRevAppApp object- W/ Y7 X' i  U, H' C
  69. - a4 m5 E; h) o
  70. CRevAppApp theApp;
    : ]  l  t5 P! F, w; B# i

  71. ' u8 V; C/ _; v" F
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName). @2 E0 k  H; ~. y
  73. {, x, ?" ^: I" C+ B
  74.   int iEOF=0;1 a3 b) A" ]" e( G- o9 P: F% _
  75.   char szTempName[MAX_PATH];4 l/ N) ?3 l0 ?  v1 o
  76.   *szFileName=0;$ }! E& P$ _$ u: b$ Z# l$ p- S
  77.   iEOF=fscanf(fp,"%s",szTempName);
    0 s; A$ E, U" a( w
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')4 u6 l4 d( M5 ~- P8 u% u
  79.   {
    6 o6 k5 Z* ]$ j6 J$ H' t" B
  80.     strcpy(szFileName,&szTempName[1]);
    & J0 q$ c+ M3 N' q3 a7 [
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF); l5 c2 n, N3 S% a- c; b  p
  82.     {
    % [3 z/ ~: t9 ]* T
  83.       iEOF=fscanf(fp,"%s",szTempName);
    / i4 e# e9 w" [/ z8 M6 r  A# {3 n
  84.       strcat(szFileName," ");# A5 K& r* \9 g+ K* q9 C3 w5 D3 M" N0 B- n
  85.       strcat(szFileName,szTempName);
    8 o1 I- P+ U  T
  86.     }
    : E, ^) }+ N) m* W' O1 ^9 ^
  87.     if(strlen(szFileName)>=1)
    8 K7 g1 c: ?' X* o9 J. B  T
  88.     {0 I& R! w2 l& ~/ ~
  89.       szFileName[strlen(szFileName)-1]=0;
    9 O6 J) v/ u- z' y! w0 r6 }* `/ R
  90.     }7 O% V" }, {) {1 k! {
  91.   }" w+ s; ^8 F) w, h+ ~* h
  92.   return szFileName;
    ; O, w7 F1 f. ~3 z( |& {3 K, m
  93. }5 ]9 a% Y" C5 C& ^. R

  94. : \+ @! `6 u" \/ N
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)" N6 T: P! Z4 i" \4 b  T
  96. {2 v5 L' w* e; V
  97.   FILE *fp;  F& `2 M% o: S& h% g4 R( }4 V
  98.   char *key=NULL;; w* _0 }" r1 J# T) p: u
  99.   char version[MAX_PATH];- i6 l. w, P0 Y" i+ Z( E' z# N
  100.   LPUPDATEFILE file,olds;
    . g9 B% ~& h0 s
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" H$ e, [, u" ^  Z9 Q/ D3 }
  102.   C8 [! a2 l4 Z6 c1 g
  103.   UpdateList.clear();1 U% m  S$ O/ H; G9 i+ z
  104.   UpdateFile.clear();
    ' Y6 c) j+ V5 f9 }6 S) R
  105.   if(GetFileAttributes(filename)==-1) return false;
    7 |( }1 J8 X4 M" Y
  106.   if(!(fp=fopen(filename,"r"))) return false;6 y: D' I7 ]" a9 R
  107.   fscanf(fp,"%s",version);
    8 M# a$ V0 \$ X. J; G
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    9 d) Z0 j- z& z- L
  109.   while(fscanf(fp,"%s",version)!=EOF)
    & l+ g( h* y. b' d
  110.   {8 D5 n" x, C( z/ d
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' @5 A8 `( K8 A" C6 i3 h$ U
  112.     fscanf(fp,"%s",file->path);9 g: |% i8 Q1 q! d& l& p
  113.     ReadFileNames(fp,file->file);, z4 R# E2 e5 G) p
  114.     strcpy(file->full,".");
    2 ^3 e: }& S! @$ C. R) _7 ~; Y
  115.     strcat(file->full,file->path);
    3 s+ v) P1 G2 z% R- i; J- @1 F4 l
  116.     strcat(file->full,file->file);1 N- D! q- D4 M1 T: Z' A. U" r
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    $ ?+ j+ W0 J7 [3 |! V! Y$ h
  118.     {& |+ K; l( e' Z0 X* N) E# C
  119.       file->vers=(float)atof(version);! [9 y$ C6 c) N" U8 `
  120.       UpdateList.push_back(file->full);8 |2 J' E; d" [  X- n
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));: l8 j* D' k+ |
  122.     }9 }- \: D: r/ w% A% T/ G8 c8 X
  123.     else
    * q7 P: u  M+ e7 f8 @: e) I
  124.     {2 w" P0 o3 c" _2 C8 h8 Z& R
  125.       olds=(*p).second;  C% ^( e0 T: l4 \& [; O9 s7 ?- v
  126.       if(olds->vers<(float)atof(version))1 d1 R6 e, e% R& [+ C; w4 a, v
  127.       {1 `  m3 o# S# m2 I+ @! H2 ^
  128.         olds->vers=(float)atof(version);' j0 H+ t8 _- _3 l
  129.       }
    / N  C8 i1 j  _2 T; f9 N, h. n
  130.       free(file);
    ! V6 d1 ~/ }9 [9 `( q+ ]4 U- k: R( q
  131.     }
    ( Z+ y2 z0 a" F+ p
  132.   }
    * f; {2 b: q* ~0 {& @1 C5 g' a
  133.   fclose(fp);3 n: E9 s- |6 p. \% h0 o
  134.   return true;
    - c; B1 e3 h/ f0 @6 g! f& B
  135. }; z8 H8 M, t, l) ]
  136. * p" A. K( A: q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)& H7 F4 ^; V+ x" |
  138. {
    0 |" v, a" y3 z
  139.   TCHAR  szFull[MAX_PATH];* _! e/ c7 a0 Z/ I: o+ Q
  140.   TCHAR *token,*inter;" o( s! k3 @  N
  141.   *szPath=0;$ b- V  @: _3 p1 w3 z% @
  142.   strcpy(szFull,szFullPath);& F0 j1 I* }" w7 F' Q7 e
  143.   token=strtok(szFull,"\\/");% O7 T' `4 n  V+ k4 a$ y3 i: ^
  144.   inter=token;$ ^% j2 ?7 w- d6 l  @- S: m7 M  R
  145.   while(token=strtok(NULL,"\\/"))
    $ X. k( ]" a6 J8 `' j
  146.   {
    5 E# h+ i" e. L8 A) X
  147.     strcat(szPath,inter);
    2 O2 q' d" `  ]/ k
  148.     strcat(szPath,"\");5 P6 H* I; ^* z1 S) b5 C2 x4 V
  149.     inter=token;
    ) b9 g  U  a9 [0 x' b
  150.   }6 |0 b& j" P) v6 H* w& J1 R6 ~
  151.   return strlen(szPath);& P+ c4 d2 e- e0 D  ~5 |0 b/ U
  152. }
    2 Z& z" ^) l. d$ j; h
  153. ' r4 B4 `: W2 D' W
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)! [. M4 v7 Q5 A$ x, l# {
  155. {% t" |, {! d6 p
  156.   DWORD attrib=GetFileAttributes(Target);, W3 R/ a, C0 y7 J( s. F0 N. A
  157.   if(attrib!=-1)
    ; N4 A0 r2 h! d4 t- t* F" {2 a
  158.   {
    & _  }; a% U+ g: A9 n" x: s
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))* x# M, ]1 ^6 Q9 {2 J2 E) p; j
  160.     {
    , Q  c5 c9 p. N4 C
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 ]8 U7 B. s( G4 f: B/ |3 v: a
  162.       SetFileAttributes(Target,attrib);: G9 R* o$ q( l9 M# T, A" b
  163.     }$ |- I) u% L9 }6 W5 b6 h
  164.   }/ d* _! V, H1 [3 m, O
  165.   CopyFile(Source,Target,Erase);& o: P' j: N& o2 s" W
  166. }
    % [  U( r+ a5 N

  167. - _0 A7 r+ _2 d6 ~  M
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)& b1 b! N& T: I
  169. {3 z2 Z5 n0 B. ]  g  x
  170.      FILE *fp;
    5 ?& x" E) K7 p" j! [
  171.      char  szBuffer[8192];" W" ]9 M! M5 w, x& u$ _  ?
  172.   va_list  argptr;
    0 O& O$ N- A( v' n+ ]: Y% D$ W! H

  173. ' C+ f6 ]$ L; u" ]
  174.         va_start(argptr,message);. X$ }- f9 e, V  S
  175.         vsprintf(szBuffer,message,argptr);
    . g/ |9 K. A5 D$ p0 q7 f# R
  176.         va_end(argptr);
    : v8 O, g5 _2 k* @5 ?! Q
  177.   fp=fopen(FileName,"a");+ }5 R- e4 {* G- F1 k9 Y
  178.   if(fp)
    ; w0 r, ~3 C, H) n5 N& S! R- o
  179.   {
    % |" \* g( e* z& G* b. a
  180.     fprintf(fp,szBuffer);
    ; b! ~6 T4 h3 l0 Z: @6 M. M( C6 F
  181.     fclose(fp);
    & ^, O, Y8 L5 }' Q% h8 v4 r9 T
  182.           _flushall();( E# V/ A7 y: h. \
  183.   }/ {0 C! k9 c6 r) s
  184. }
    0 w: o3 B1 l6 G& b5 [
  185. / L2 E" I  [( q2 i
  186. BOOL CRevAppApp::Fclearf(char *FileName)  S$ U& X: K( j7 ^; ~% W: K
  187. {
      z) \" t5 @. [2 l( ^* }
  188.      FILE *fp;
    $ r9 q' q$ A8 O6 C8 Z1 Q
  189.     DWORD  attrib;% p; |' l& X1 i1 z
  190.   attrib=GetFileAttributes(FileName);, [# ?6 b  k: b/ ~
  191.   if(attrib!=-1)
    * V: }% s! X1 s7 h  Q$ f
  192.   {, F% R8 b- q6 J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);4 u3 j! q& z, l+ H" p4 N
  194.     if(!SetFileAttributes(FileName,attrib))
    # Y( `, d, x9 w
  195.     {
    ' k# u( ^0 i( J8 S+ y& }, }& L& M( I
  196.       return FALSE;: n: }- a- g( m+ f3 y# k
  197.     }8 m9 O3 X( K, Y; i. d
  198.   }: g5 Y' Q$ i8 b: U% j; ~5 I2 c$ @
  199.   fp=fopen(FileName,"wb");
    & Y6 X% K0 }( x( @# N) ~) [
  200.   if(fp)- C: y5 S7 Y  n( _, c
  201.   {+ ^6 u" y& D! P  a* D3 X+ k
  202.     fclose(fp);5 ?; x" v( s0 n, V6 p
  203.   }
    . d8 U; A8 F2 w5 {
  204.   return TRUE;$ N$ O0 k! L7 Y) ?) {/ B, u$ ?8 k
  205. }) v2 h0 i) G. J$ b7 d7 W

  206. . H" V( A. C0 K7 Y5 P
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 @9 \: h9 C3 A, n. h
  208. {  c0 f( s0 M' T) v+ q( {
  209.   char filename[MAX_PATH];+ T+ U( s* C' O' S+ l# x8 r. W
  210.   LPUPDATEFILE file,olds;0 f- r3 E1 s1 k+ F' J1 c7 ~" a$ x; H
  211.   std::map<int,CString>::iterator i;: C3 G% \- {+ H' c" J% l
  212.   std::map<CString,LPUPDATEFILE>::iterator p;8 g: H3 i) K) x- q
  213.   std::list<CString>::iterator l;
    ' v, J7 ]* T; X" D6 v8 U- X
  214. 1 ~/ c5 P* y  V: Y2 u
  215.   if(bFirstUpdate)8 P  E# v; T* K4 O6 W) O' g
  216.   {4 F0 A6 Q; i; f6 T; I9 ~& w
  217.     dwCurrFile=0;- O6 r' C; _3 h. V7 b; J
  218.     bFirstUpdate=FALSE;3 {9 k0 ^9 Z- D; i% Y) d
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 S( i% t# G' [/ Z8 }# {+ O, ^" ]
  220.     {5 I: r' v8 K9 d( Q# o3 \5 f% X
  221.       dwTotalFiles=UpdateLocal.size();
    ) R( _! L5 K* d
  222.       dwDownLoaded=0;% n, M$ Y; N; D3 _( S
  223.       bSilentStep=FALSE;
    . [" I* i% H, V  r5 N
  224.       bCompressed=TRUE;
    + `3 `! ]/ s! J$ a1 H
  225.       strExtLocal.Empty();
    5 u& R7 _2 m+ Y( J+ F* H
  226.       strFullName=(*i).second;3 z* |3 u$ u+ V8 Y: m
  227.       dwProgramState=AP_CONNECT;
    9 k$ c3 s% p2 C6 |, Z
  228.       return TRUE;# E+ r  T4 \* w9 B' A
  229.     }
    - }8 W  P+ |5 t# E) e' F. k4 Q" G
  230.   }
    # f- }& V1 t, T8 e4 u1 G( C
  231.   else if(bRestartUpdater==FALSE)
    . ^: ~. b8 b, _, _
  232.   {  `' H: K- v8 I! `) Z5 b# H
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()): S4 I! k6 D- ^1 d- n" @
  234.     {
    2 k% [3 {  v: X. H7 s
  235.       file=(*p).second;
    4 L- Z; a# I3 N9 Z
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())  e" ?# ~  G! |3 C/ e1 d
  237.       {
    * t; c' s) F7 J& y' r" @
  238.         olds=(*p).second;
    / m& r1 W8 A/ T% T
  239.         olds->vers=file->vers;5 o3 L) D/ m" Y& R
  240.       }
    # l1 `8 [' H, c4 u8 O6 e
  241.       else
    - Z, o& X: C. `
  242.       {2 ~+ u1 l1 p: A" ~( \4 K
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' ~: n# h, |! u0 ]3 R% M
  244.         memcpy(olds,file,sizeof(UPDATEFILE));0 Z2 }% {5 `& m! n5 l+ D
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 k' N2 X, G) Y; h* O
  246.       }
    6 Q% {4 w+ ^( k9 }% i2 y) z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    8 E% ?0 E2 N8 z  Y2 @& c1 d& ?
  248.       sprintf(filename,"(%s)",file->file);
    7 t: z6 p4 B- f- n. n. T; V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 P7 v# Q4 O" p" g5 O! ]
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
      W' p- k0 {8 n) G, p9 Y& M
  251.     }* I& _- I" i3 B& H
  252.     dwCurrFile++;0 t- Z! y; ~' [' Z1 o8 F# a: m
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    6 F) E( L8 Q* v, K! c' o
  254.     {
    2 }0 ~% q6 U' E+ W/ C( a
  255.       bSilentStep=FALSE;% G  I0 P# s* ~& F: c! }+ w
  256.       bCompressed=TRUE;
    9 U4 }4 s' e" S3 \
  257.       strExtLocal.Empty();: P3 g8 h! Y* k, ~* r. t" ^
  258.       strFullName=(*i).second;
    0 Q( b6 i4 W: h5 ?+ z* S
  259.       dwProgramState=AP_CONNECT;
    & f' s4 W9 }) q$ m" T
  260.       return TRUE;  c; n0 t0 w0 r0 q8 L: J- o$ p7 Z
  261.     }0 q7 X- b9 y8 T4 w1 O2 e+ s! K
  262.     if(!bRestartUpdater)
    2 C; C% q& y* \6 L, m
  263.     {
    9 t4 Y6 e) G: J* x
  264.       int iCurrSize,iFileSize;
    6 C" k- `4 C$ M5 L
  265.       iCurrSize=0;. K2 Q; m4 D+ Q0 w
  266.       iFileSize=UpdateList2.size();
    : P$ [! `, n$ k! v: J
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    : q8 `4 ]' c6 w; U
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    # A5 i2 I5 B" Y; j# G
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");7 w2 u0 |; y) D$ A
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) G/ u/ y7 K% p- s" a$ C4 E2 [
  271.       Fclearf(".\\update.dat");% N  h5 S* s( V; n' j
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    5 G! i2 Z1 O) n
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , o7 L* ?/ C9 Q* Z! C( a4 M
  274.       {
    1 o( r1 a, K/ n) L! w
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    : v! {" P0 f6 o) W/ k. ~- i
  276.         {
    * o. H. K% c7 a3 j# E; ^  n- b$ i7 Y8 `
  277.           file=(*p).second;; {4 Z: U+ a) w9 H
  278.           sprintf(filename,"(%s)",file->file);
    2 p5 @! W7 }; @! c9 r
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 j- j( k* _% f' t7 T
  280.           iCurrSize++;5 q6 X. V' C8 o% Y$ L9 n3 ]
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    , ?7 b, Z+ U  Y' ?) p# h2 R# e
  282.         }9 l( q7 f, A* Y1 M1 \
  283.       }
    8 Q# s+ p- ?3 i. q) O! B
  284.       unlink(".\\update.txt");0 ^- j$ v( Y5 s
  285.       unlink(".\\update.tmp");
    7 V; D$ I, L, p; ]9 K3 l: \
  286.       Fclearf(".\\checkversion.dat");
    * X7 D. F7 Y/ h/ A1 v9 y6 R9 X- E
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);8 L! T1 M, q- V9 E8 Q- v% q* c
  288.       if(UpdateLocal.size())
    ' |: @: i& r# |+ O: t& p
  289.       {
    5 ^6 ^1 |. Z4 r+ s; i
  290.         UpdateLocal.clear();' ?, P8 F9 _" e" w# ?% Y6 |. u
  291.       }; x: G- h) b# ?: ~
  292.       if(UpdateFile3.size())' n5 p( c; Z; C7 k% x1 F
  293.       {0 i+ i3 H8 F" x( J, X
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), u1 @: j, h. ~6 l: X% {. ~# a2 O
  295.         {
    & {9 ?' ?* q+ w  v
  296.           file=(*p).second;! ]; N/ C2 o4 o6 c7 e1 P
  297.           free(file);6 R1 U. `' {' k% w9 U. s9 {
  298.         }3 F8 ]5 D. N9 v
  299.         UpdateFile3.clear();! z& M* S3 H8 u- O/ r; [5 |
  300.         UpdateList3.clear();
    4 z) I- ^0 ?* [" w2 O1 u
  301.       }
    ! A2 e9 X8 f% b2 O
  302.       if(UpdateFile2.size())
    2 j" }* v% e$ K- A9 i/ `" G
  303.       {
    ! a+ o, m; U# a# c$ X( {+ @
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  k( T6 c" O) d8 T# q9 f3 m4 v
  305.         {
    ( O8 r2 [% D$ x8 f7 y6 a
  306.           file=(*p).second;( ^( I1 j* n8 E' ^- u' w
  307.           free(file);
    2 ~2 r* b2 H$ S# Y) ]
  308.         }
    , I- f2 k% @# M  Y
  309.         UpdateFile2.clear();
    " P  t+ f0 v3 F5 i2 }: }# ]- K5 w
  310.         UpdateList2.clear();
    0 Y1 i9 |0 {) S
  311.       }- B2 X, n) M) q9 |0 M- O2 K0 [( o
  312.       if(UpdateFile1.size())2 m0 j3 L3 P& F' Q/ {/ S
  313.       {
    0 G0 e) ~- F! q
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). f% S1 T) e3 d
  315.         {
    - O( u: C2 j4 K  p6 {& o$ t/ R; W. {
  316.           file=(*p).second;
    + E- R8 \* H7 w0 A9 P+ ~, s5 i
  317.           free(file);
    & v. k+ c, g: u0 o2 t
  318.         }
    ) d6 G+ u1 }' ]3 G- G
  319.         UpdateFile1.clear();& Y% I0 U$ c7 g5 B* h
  320.         UpdateList1.clear();
    * k* m0 c) k9 w8 i0 z5 ^
  321.       }
    : {0 y9 V; O; {
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ u+ X9 Z: v& ~5 }( X" u3 v, ^  p
  323.     }
    9 A: D3 K" s3 r
  324.   }4 i+ h8 f0 a; B) Y( c' m
  325.   return FALSE;
      `6 X, r! i$ W$ t( m( t
  326. }9 n$ c+ A  p# J
  327. ; U6 @( x, H2 e! |' f4 S% s
  328. void CRevAppApp::ClearAll(void)7 y+ D, {( L; p+ y3 c/ s3 I
  329. {' [% w  Y" b' x$ R) Y% l7 ]
  330.   LPUPDATEFILE file;
    ! }- \& J! g$ ~& ^5 N, t( I) D. I
  331.   std::map<CString,LPUPDATEFILE>::iterator p;8 g: F- c" R- f# i3 }+ d, l
  332. - I) r3 N+ i5 [* W6 O4 H. u6 ~! B
  333.   if(UpdateLocal.size())
    . e$ a! [" Y! L+ D: {% j6 N
  334.   {% @" Z7 [4 r& Z0 Y* q/ x' X
  335.     UpdateLocal.clear();
    0 F  h- K& a# f5 _7 t0 U
  336.   }
    1 L8 F9 ^8 W8 i7 g4 \5 O5 n
  337.   if(UpdateFile3.size())
    8 {$ s* z( ]3 s( \) w
  338.   {
    / {) l, U6 m: ^* P' _7 u
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & c3 q! U# g, v( H& K
  340.     {+ |) v5 n! q$ H2 V! O2 S
  341.       file=(*p).second;* d5 Y; B7 f' ^9 H( i. i
  342.       free(file);
    4 O: y( n+ ?' x& }2 m; U2 d& y7 O! f
  343.     }! u) _, \( C& ^/ g$ l3 @
  344.     UpdateFile3.clear();
    . ]# B, W( z* u/ W  I: D  }
  345.     UpdateList3.clear();
    # J$ d# U6 N7 L5 R0 Z
  346.   }: S% \! s/ r2 z8 H
  347.   if(UpdateFile2.size())
    ; y; [+ o8 Z# X
  348.   {: G6 [+ T2 h, V: W
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 e" P+ z9 W0 ]9 O: o
  350.     {
    7 G/ N( \% U. a" v2 N) K+ ~" w
  351.       file=(*p).second;
    + x3 y& T/ H5 e/ H1 R) e) q
  352.       free(file);5 ~) c! j& U' h! U* ~& |$ s2 d
  353.     }
    1 D6 y+ y9 {) _4 @9 f  H5 S# x+ K
  354.     UpdateFile2.clear();
    . M0 [7 k* F8 u- H, R$ ~. ~
  355.     UpdateList2.clear();
    . M1 x+ d5 h' }3 q# f; d; {  p
  356.   }
    ! ?8 K- S* Q7 i" B# d& n
  357.   if(UpdateFile1.size())
    3 O6 P% M- i5 b
  358.   {) m6 a* C" K$ s0 Q- x/ M
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- a' K+ K$ q6 Z( f
  360.     {; e2 z8 C5 [  N% ~
  361.       file=(*p).second;
    0 |- b, g, d8 D* {
  362.       free(file);
    % N% C4 U, m9 S7 |0 ]1 s. I
  363.     }
    " X1 {/ i# c. B8 C1 u
  364.     UpdateFile1.clear();7 v& E* f, f" Y
  365.     UpdateList1.clear();
    ' `9 _- w* g7 n1 X% T
  366.   }3 x' w. u2 ~7 E; ~+ T) q: ~
  367. }  
    * r  B/ r9 K- n" @
  368.   
    ) ^) @6 X/ e5 p- C- i" i' ^
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    - H& y/ X3 u9 R/ W" K
  370. {, U2 E: M0 G9 [) J. U+ v5 ?6 |
  371.   int c;/ k% N) |( {+ B6 d3 M" P- }' r
  372.   LPUPDATEFILE file1,file2;5 }1 R9 W5 {6 A/ e$ O3 t
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;, M8 ^) K: |  L( R, L
  374.   std::list<CString>::iterator l;
    5 C; N! F* C" ^" o1 I
  375. 4 p  f3 e: f( g1 I
  376.   UpdateLocal.clear();3 M( {. \) j  [$ o% |( m; O! q" ]+ G
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    8 C7 h/ K8 T- d  H2 o8 Z$ B
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    - K% T8 ]: {4 z* X6 X
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 e( S1 L, x6 q9 d. d6 u" o2 a4 O
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    + d1 U. a6 y$ W6 T0 y) a; a+ v
  381.   if(UpdateFile3.size())
    ( H" B5 z  ?/ Y' O6 ^/ l+ u! N
  382.   {
    4 D: {9 k- Z$ |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    , }( H' G; v, J( }8 u( Q+ g) B
  384.     {/ U" u1 w7 {: ^, b/ x, ?
  385.       file2=(LPUPDATEFILE)(*i).second;
    6 F- s: O/ u( Z
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); y/ U% o8 I4 h! i* {: P
  387.       {
    5 Z& b* _! }% O0 d0 g+ o/ Y" c0 T
  388.         file1=(LPUPDATEFILE)(*p).second;" G; O: g$ R4 t* Y  b
  389.         file1->vers=file2->vers;
    9 \) x4 e) S* |( ]1 Z7 M' d
  390.       }* {, ^+ N% D) v& s' R" @
  391.       else* I) t. f- W3 y- O  S# l# |- u
  392.       {
    & A: W9 t6 O7 o# V
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 h' r! o/ p/ h( t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" ?# e/ z* a- g; @1 L; }# u) ?* e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));! j- N* V; f; r5 X) M8 P
  396.       }8 s) T' D/ c& [$ `
  397.     }
    0 d; _; P5 c8 z/ {5 T' [1 p
  398.   }4 I2 a) O* J3 R) t2 U$ L8 |
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)$ b' ?/ f7 S9 m1 A8 S
  400.   {
    & V1 @  s: t7 \% p
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())7 |* `  E1 A6 ?1 Z7 L( J+ G( Q, W
  402.     {5 ?! W: y8 h+ Y
  403.       file2=(LPUPDATEFILE)(*i).second;
    6 a& D9 u* f7 ~6 H$ q/ h0 c
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; I+ w" g4 r  Z9 w) q9 b
  405.       {
    5 u; R, t6 ]- a$ M4 w, p
  406.         file1=(LPUPDATEFILE)(*p).second;
    : ?& z% y0 e/ q& n8 @9 \
  407.         if(file1->vers!=file2->vers)6 k4 B  T( A* r! O! y# l
  408.         {/ W- v1 e! u6 d/ X
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 I' v: Z; {2 r
  410.           c++;. c% C6 l; v3 C
  411.         }
    . ~2 K  t. g3 A  L; _
  412.       }# M, [2 G9 a+ m- r, J, D7 P
  413.       else8 j: l& ]' X) A. X
  414.       {
    ) ?% i4 z6 f/ v' r' S! {8 H
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 y7 a$ }' U9 I+ t6 F8 `
  416.         c++;; o0 B' n9 o1 S4 B3 e; w! {3 u
  417.       }5 ~- M2 C3 t8 \+ E
  418.     }; t; W. O7 Q$ H! y/ t! L
  419.   }7 O2 G! v# H' K" m% I
  420.   unlink(".\\DownLoad\\update.txt");
    ) q' m! {6 Z% w, e( h3 O3 U9 z
  421.   if(UpdateLocal.size()) return TRUE;3 v) N$ C4 f5 F# A# R2 m
  422.   else                   return FALSE;
    * S2 M' F7 S& @  e9 T9 a/ J2 m5 [
  423. }1 E, Z5 m0 z! B1 g) Z( _% j% ?( a

  424. / m5 O6 M+ ?- x4 k; E
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"* p5 W  X! |$ g! h, R4 G6 l
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"* C) Z; Q4 i& F+ W
  427.   K( D: e$ n9 p" P

  428. % m6 J2 m+ ], s# A, j% k3 O
  429. 1 D* Y2 c- W# j" E0 p/ C
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    " @( d6 }: V+ l) \. z2 \
  431. {8 J/ L. |' r8 @
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;( v5 Q7 y" M$ t" ~6 x
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , v1 o+ b. S7 R# J+ A' k
  434.   {1 G! w2 p# P# T% T, }! Y  C# T, e& w
  435.     char szLanguage[50];
    7 K" |3 h& {! T( o; i- b. o
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: s# w8 W  W+ \3 w
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  D7 t6 x+ y; z3 H2 _0 [
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      }* f, i6 _+ h
  439.     else                                   m_iLanguage=ENGLISH;4 f! H0 H# s1 f2 b0 K' a2 r
  440.     char szRegister[100];
    - ?' C, ~0 P$ t. s* G  O
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 U7 n5 r( K+ ~0 T' G/ [' H
  442.     strRegsName=szRegister;
    ( ^' z8 s* i: v
  443.     char szPatchURL[100];5 \6 z6 f' t' Y" `7 f' q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / A# A* o0 i6 }$ k4 q' m
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; A2 K& r) z7 L
  446.   }
    # E6 r0 u- z! X( f7 X4 ]& M: I
  447.   else% k5 [& j& }. ^5 D) \
  448.   {  q" b7 e% g/ b: J
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! J: I1 ]5 u- u9 }8 }9 ~# W% w
  450.     strRegsName=DEFAULT_REG_URL;
    / k5 N. K; R' L, P2 j
  451.   }
    * D$ C8 A" e& N1 I! G' B5 @7 ~) R
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    + @3 A$ b7 I2 m) c& }
  453.   {4 l# `/ n1 d  G" }! n% h; {
  454.     char szIP[50];, Y0 H+ S" S5 h
  455.     char szDIR[300];
    5 F6 P: B5 t5 Y; f
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))2 i' z8 K; A: a" l/ I% F2 e' z5 }' j
  457.     {
    6 b! }  a0 H" t1 A) z& s& l3 o2 y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      c7 C6 o/ c6 V& B8 ~0 |4 n2 a5 a
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    3 s7 q. N* |. Q' o/ h  c
  460.       strHostName=szIP;6 `2 Y! _' I( F/ k, W8 f( g* ?* z
  461.       strHostPath.Format("/%s",szDIR);
    4 @( g) z9 p; e. l' i# Q
  462.     }
    2 D" h7 [! ]/ i$ W. y
  463.     else% S) f1 u7 ]0 x( {+ `$ ]/ }
  464.     {3 G' v3 Y4 C5 \  [- z; G
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* V2 S5 c: P* E: X1 ~8 H- c
  466.       {
    . c6 q% v. N8 C$ M
  467.         char szLanguage[50];
    + u/ b1 N% l% _3 Z  F% `
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    # }$ B3 s- K2 E1 v% i' d+ {
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 N8 w! R( P6 Y/ f; @+ u
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; Z2 y) x" |: n1 ~) B
  471.         else                                   m_iLanguage=ENGLISH;
    - J5 x5 q; G. `! E% d
  472.         char szRegister[100];
    & c' \- X! w( P; y0 b3 [# K# Y! D
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) O) `' [  x* p* I& r* a
  474.         strRegsName=szRegister;
    5 G* L5 C( a7 [0 g' s
  475.         char szPatchURL[100];0 ~8 ?4 ~' Y5 ~  @8 J
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 L0 a  O& \1 D
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + X+ J/ X" S6 R3 x/ Y' `
  478.       }+ J' I1 ^  r, N5 D. B
  479.       else
    1 S5 }3 G. e+ `' c8 F$ ?( m
  480.       {! D$ o5 |. o; R2 h( f
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( G' K) y( m9 I  B8 z' x
  482.         strRegsName=DEFAULT_REG_URL;
    2 I: ?2 r6 ?8 r/ X" F3 S: G1 G! p
  483.       }# L( }0 D% U+ e9 C8 m' n8 T
  484.     }
    % E: b! G: \8 g' c+ F5 S, Z* k# @
  485.   }! \% s1 Y9 y6 E+ F
  486.   return true;& Z/ y; Q  g' i, \9 Y$ l& ^
  487. }8 b3 Y( ~# p' u6 @& s8 {0 N
  488. 5 L$ F) z3 M) ^6 d
  489. #include ".\ZLib\unzip.h"5 @7 V2 z2 m$ Y+ o
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);. T% L% q5 a! d! h6 c6 D
  491. /////////////////////////////////////////////////////////////////////////////
    * ^* N! v% G7 P1 H7 M. ^1 N6 y  ^
  492. // CRevAppApp initialization
    0 v' M  g; i) S& W
  493. , \5 l7 V' c% L: M7 P$ {2 N( i
  494. BOOL CRevAppApp::InitInstance()- V- R: C; y% e0 B9 R. P( s  O
  495. {
    + S- D: p# x1 p! W
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
      o. B3 B6 N' X/ D

  497. , B6 N- ^6 x. h/ r7 z! U9 ^+ j
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);4 U; S) P  W5 X, _3 \( m( R- p
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    8 F% }9 c2 q" j1 G8 o
  500.   {
    . d: P4 x0 M! f& l
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    $ H8 S/ d7 q8 `" b. }: O: n. J
  502.     GetPathFromFullPath(szPathTarget,szPathSource);1 L( k6 `+ }8 H8 x! ~. l& ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))& d0 }! _4 h3 B  l" i3 n1 R1 Q$ P
  504.     {
    ! y; W( X! ], B
  505.       strcpy(szPath,szPathTarget);) w9 `2 E# l9 |
  506.       SetCurrentDirectory(szPath);- l& a( Q( R9 f* b
  507.     }
    , R7 @3 e# E8 ^" n% G! d0 d1 m- j
  508.   }, z5 ^0 h6 m* v9 ]% ^4 T
  509. #ifdef _DEBUG
    + g7 q5 T5 e6 ]
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ z1 a8 B1 y* h5 m. T; Q* K
  511. #else: O4 k, @4 y) o+ h/ C
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " n5 L( u* t6 N- V2 j
  513. #endif- ]4 d, ^8 p9 ^5 G# h( G
  514.   {
    2 l/ t4 {! e$ H" F
  515.     char tempFileName[MAX_PATH];
    ) \; ?. P+ g3 D* {8 h7 [' q
  516.     strcpy(tempFileName,szPathSource);
    # Q/ t, {1 N1 ]+ G8 }: f
  517.     tempFileName[strlen(szPathSource)-12]=0;
    5 C9 X) L; r5 J6 _( |2 M
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ' Y7 K; Y  W9 q) ]# T# z, G, {' T
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    + O- Y; x) S5 S! |$ K8 Q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    # H' u% b, E% c
  521.     return TRUE;7 m+ ?( R* Q' T  u
  522.   }; ?9 i. `6 }; I  z% k- X. b$ ]
  523.   // Nuke 0118: Delete run.exe4 _( `( N7 g& w' o2 S
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );9 ^" x  N/ U% P8 O, ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    , o. Y: t. y4 b' _+ u9 G; L' R
  526.   if(!ReadCfgFile("Config.ini"))6 A/ I5 G5 [8 b& |, d3 _" I
  527.   {5 E' |3 A& S8 }$ ]1 X8 K
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ! M' B: j6 T; ~
  529.     return TRUE;
    ' u" v6 C% b6 i/ d: G& y
  530.   }( y$ x' p% [/ j& `( Y
  531.   HANDLE mutex;, i1 `' b0 v* _( d9 l5 L
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 V$ r3 {% f4 ^& b: f/ u3 r1 Y0 x5 r
  533.   {
    6 ^$ s4 M5 {& r! f
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    + S9 Q+ L$ T; O. ~) L, h  D
  535.     {6 K9 w, U& z1 S9 \7 e
  536.       CloseHandle(mutex);2 g0 n9 [6 W: b! O
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * {5 t. p( \- ^- F7 m
  538.       return TRUE;
    4 r6 {+ `4 B# Y, M2 J' ]1 l# q
  539.     }
    ; J: ?5 Z8 z6 A! g# m3 q$ A
  540.   }  
    - b- u5 [3 x5 r0 i' j
  541.   CloseHandle(mutex);1 `5 B& A% @$ L' n* N1 }
  542. . n9 w$ O& Q8 m: T7 T; M
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);5 T0 \0 t' ?) J8 N  M
  544. ( m5 M5 {! k, b& w" U) s4 \
  545.         AfxEnableControlContainer();
    2 `1 O+ Q+ A7 J$ t

  546. 2 g# |8 Z& U% [5 o/ ?
  547.   bCanUpdate=FALSE;" X& \4 n' R1 q( G
  548.   dwStartUpSteps=1;
    % d, d- T5 U, o9 f" O+ B8 S- N
  549.   dwProgramState=AP_NOTHING;' S, g+ {7 m7 H
  550. 3 I  p2 }6 \  w5 }4 f" d) y7 d
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & \2 t$ Q( m1 _( e
  552. 0 Q7 t* w# c" V3 K( M2 b
  553.         // Standard initialization+ B# n/ j( u9 x& e
  554.         // If you are not using these features and wish to reduce the size  K, R) ]# L3 N% N
  555.         //  of your final executable, you should remove from the following
    % J0 q- d$ W( `9 _$ a7 j) J
  556.         //  the specific initialization routines you do not need.9 S3 i  _& k& U9 D' _, e
  557. 6 v# T+ K2 L+ N6 b1 U" t
  558. #ifdef _AFXDLL
    : M2 Q- m7 G$ T  }6 Z9 F
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL* g9 h9 z+ e- L5 a
  560. #else
    5 q, P; ^7 B% ?8 q
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    5 m" E# G( @! x  J' v: ^
  562. #endif
    / ^1 s9 g+ d+ J6 A

  563. + g! [( \  S4 a0 q! I
  564.   dlg=new CRevAppDlg;) ^7 H1 r' Y0 G, o+ a
  565.   dlg->Create(IDD_REVAPP_DIALOG);5 D  j/ b8 F  O6 a/ h5 S" u  ^
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    4 \% K2 t' Q6 U# ?, y% E# [
  567.   m_pMainWnd=dlg;
    ( P0 Y4 r" K) W/ n

  568. $ E. u- k1 a! f. o: g0 v' m. [
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    % h! g, z1 V5 V1 \
  570. 5 [- X, {* ]3 k6 X% D; _) Q
  571. //  GdiplusStartupInput gdiplusStartupInput;* t6 v+ @- {' b7 v) i( s
  572. //  ULONG_PTR gdiplusToken;
    ) T- u5 D7 ]' [' C4 M8 M% N
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);  e) u9 c" X. K
  574. ) k7 R& U1 e) `! I
  575. //        CRevAppDlg dlg;. |/ _7 B9 ?1 K+ L0 K
  576. //        int nResponse = dlg.DoModal();1 _  H7 j2 d# `/ y2 Z8 |
  577. //        if (nResponse == IDOK): ]3 X. w1 U% H' @" I. u9 s2 q4 U
  578. //        {( w' v! w8 i5 Y$ @; t
  579. //                // TODO: Place code here to handle when the dialog is
    " X  K" D3 v; k) ^! f# x9 `- N+ @
  580. //                //  dismissed with OK$ F, ]7 F- I* Y3 t
  581. //        }
    7 s* J) l# K" b+ u- R- a. y
  582. //        else if (nResponse == IDCANCEL)
      A. s+ W( D3 O0 r  I0 e
  583. //        {2 e" k- u$ m) [/ F, b
  584. //                // TODO: Place code here to handle when the dialog is
    # q$ h# X: n' t" P
  585. //                //  dismissed with Cancel
    " [2 t$ M1 i) T
  586. //        }
    6 N+ z$ N2 m9 y+ _0 s

  587. 1 u. j9 m! z1 u% S
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . V/ \$ Y, |0 O+ |6 Z/ V& J
  589.         //  application, rather than start the application's message pump.; t' r) {! D" o9 }6 a' h
  590.         return TRUE;. a1 g  u" g8 {# K
  591. }& J5 {% x! I9 O/ x7 X
  592. 4 Z1 a2 c% M2 ^; B( N
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / G! m/ D8 i+ ~( E1 ?+ d" D
  594. {
    6 E# i/ K5 B& z& o0 W' n) s6 f
  595.   int i;# @7 [+ g/ l/ r* W( V1 b
  596.   char *szRet;$ ?, H4 Z! c+ \4 p& t' p8 l, l
  597. + s- O# R8 c0 A9 v: x, h
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    9 o3 R# z( R6 d2 b
  599.   if(sztoken)% j, H: A# D, @; ^% V/ b
  600.   {. x7 N9 Y- B4 k: o/ d
  601.     szRet=&sztoken[itoken];; R2 {# h2 ?" C, z9 O
  602.     while(sztoken[itoken])- A4 b  W+ r* R! t7 x5 s
  603.     {
    " @( m0 l" E. a: f
  604.       for(i=0;i<(int)strlen(token);i++)
    % Y) s. X! e4 d
  605.       {0 k4 j- ?+ F  U+ ^" n6 Z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    1 n% @/ M6 x6 W/ N/ b
  607.         {
    8 S4 N; M5 p: B* _
  608.           sztoken[itoken++]=0;1 c% [! V) _# t. C  @; W  g
  609.           sztoken[itoken++]=0;. S0 [6 e! A% B. o
  610.           return szRet;
    ! g1 p6 k! L7 }2 j  Z
  611.         }
    % q/ Q( V- R2 g
  612.       }- n3 w  S# ?3 d8 d; p8 U) D
  613.       itoken++;
    # j9 U- N( ]2 g- J5 P& [$ X
  614.     }
    8 P. Y8 N! N0 n, `9 T
  615.   }2 Q% e' ^8 L  `4 Z( g  i7 e
  616.   return NULL;
    : ?& g3 x! {& E
  617. }
    / M" g3 X. D) m  H
  618. ) C) o; l% O! T! k: x
  619. void ProcessProc(long Total,long Current)
    6 q) e* Z* A3 z# ^( y3 Y
  620. {
    0 u1 u6 T" L- n
  621.         MSG msg;; `8 U" Z3 m+ l5 V* s8 P
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    # h- A% J, o* x; P
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));, n; A/ ~& h3 S8 ^
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    * K, X: v2 j% P3 O- j9 k
  625.         {
    " X- z  W2 e8 s, q4 e- x& V
  626.                 if(!GetMessage(&msg,NULL,0,0))! H1 I& t# X; Z& ^
  627.                 {) N' N& i7 g$ Z& c
  628.                         return;+ b; Y- l/ q/ s: V' t+ Q
  629.                 }3 [+ G' v' g3 ?' H& w! ~
  630.                 TranslateMessage(&msg);
    & J. d$ D8 |& W+ `. _
  631.                 DispatchMessage(&msg);3 ~7 }8 F3 a1 F2 s& m
  632.         }       
    ; V! _) h3 v# O, i+ w  ~
  633. }
    9 C; f6 H" T+ q/ O: {

  634. 6 g1 ?  A) w( h* J
  635. BOOL bFirstChar=TRUE;
    8 i2 Z  x" X" p3 F( T
  636. ' ]0 ~3 f/ Q# r& b. P
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    9 u  y& L. x" \5 i  C0 d$ N$ x
  638. {7 s5 K7 L: K) n/ U9 W, D
  639.         // TODO: Add your specialized code here and/or call the base class' `6 s! G& A' S# L3 Z  i
  640.   switch(dwProgramState)
    4 E% `8 d% ?6 H. p: _
  641.   {/ s- s, [2 e% U: r; T9 q  z6 {
  642.   case AP_NOTHING:
    ( Z4 j( h% `4 ^! W" s
  643.     switch(dwStartUpSteps)5 k( O$ s* g4 X/ N( ~) X& I7 s
  644.     {' I+ ]3 a  }5 {. Y% n
  645.     case 1:4 x3 f; q0 \( W5 K! Z, ^6 w& }' }* ~
  646.       {; G6 e$ s8 t9 {! T/ I
  647.         int i;
    - T% Z4 r9 H" D4 L7 [" r
  648.         CDC *pCDC=dlg->GetDC();- k* u! v9 _! y/ P
  649.         HDC hdcwnd=pCDC->m_hDC;+ Q1 {$ Q, V5 j- r2 Q% T2 W7 R
  650. //        Graphics graphics(hdcwnd);3 u8 Q+ r9 X0 c0 _4 U! Y9 z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    , R. P* v' Y! }/ ^- b- ^, w
  652. //        INT iWidth=bitmap.GetWidth();% E: \4 C% R3 \7 d) F* V1 N) r4 F
  653. //        INT iHeight=bitmap.GetHeight();5 K# s2 R! W5 c/ J
  654. //        Color color,colorTemp;' M+ p2 M4 ?. Z1 _
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    $ \: M7 B' Z( C. m- X
  656. //        {: X" \) O/ w0 Z8 T0 M% M4 a9 }
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++), c5 t8 p$ T! i, m/ Q4 o6 q
  658. //          {
    , t1 X0 y/ m9 s0 R/ x
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      t+ I5 \3 ~* I0 b% e9 F* z8 H
  660. //            colorTemp.SetValue(color.MakeARGB(
    , f9 \. y# y% ]1 f+ I
  661. //              (BYTE)(255*iColumn/iWidth),0 V0 L2 O# ]7 o, r
  662. //              color.GetRed(),; `7 A6 C7 t0 Y9 D3 s: f1 v
  663. //              color.GetGreen(),
    : U7 m5 l! ?3 A2 i. \: X
  664. //              color.GetBlue()));
    6 D& P" q; {2 j
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    " i6 g) L5 Q+ y5 q5 ]: _) t0 u
  666. //          }
    & F0 E! f7 b" `0 g
  667. //        }0 x: j  r- k$ [# M3 f) ?6 N, _
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 C* [, E0 T; P2 j, N  j" T  i5 R0 F" ^
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: Y% H1 X. _2 X& F' T; B+ s
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ; I- x# d* v+ \0 p  [, S) W
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . U4 u' c8 K5 D% p. p( F# u, ?
  672.         for(i=0;i<240;i+=8)' A& t# c% z# w+ p  A
  673.         {
    * {- c4 z. K2 C! Z" k
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 b: E4 k/ s7 S% Z# T( x) ?
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + z4 F) m: ~8 L) F: \: f
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# K% P: v; B7 n/ V
  677.           Sleep(33);4 O, Z( g1 W; F9 T4 p
  678.         }$ @; u* Z2 O) I/ Y2 u
  679.         Sleep(1000);
    3 \8 C  J3 v( P5 u
  680.         for(i=240;i>0;i-=8)
    8 a- s' K. U" u, e4 k" l4 |& R
  681.         {$ O) W9 |* }6 d# |% R" q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ U" z0 d/ r' c* L" z
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : z# [! I9 O  B5 T
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ y+ @* E8 ]% H5 ?; `8 p
  685.           Sleep(33);
    # \9 ~6 a, V! J  A
  686.         }
    2 W* b! I6 u4 E) [
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    . R0 Y" k6 k# f; U. n- A/ d
  688.         dlg->ReleaseDC(pCDC);
    4 l/ |1 p( f4 X$ _4 Q' X9 S& F
  689.         DeleteDC(hdctar);( a  C4 u1 E( Y, v  {* e7 ?( Q
  690.         DeleteDC(hdcsrc);
    / ]1 ~5 E* d: C( U
  691.         DeleteDC(hdcorg);9 S! p! x* X6 Y1 U$ {3 _
  692.       }
    . u, n6 @9 C* I% g
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);- ]; Z, b* n* n" [/ O* E1 S
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");0 s5 C* H& K- M2 Z' ]& d; |: L  \( I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    9 v# `+ S' K; _& C
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");4 ]+ _2 D5 k! [7 ~
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , x* g( A* ^/ D1 E
  698.       if(!Dn.Connected()), I9 ]/ d" t2 s9 |9 g
  699.       {
    # E" Y# F: O  b6 ?
  700.         dwTotalFiles=1;
    : q0 e7 r$ Q5 }. q! o# Z
  701.         dwDownLoaded=0;
    2 Y( T' ?/ k% N; U1 p
  702.         bSilentStep=TRUE;  ^! X0 \4 s- V! Z2 g6 P1 ~
  703.         bCompressed=FALSE;
    7 U0 n# L1 e  `) i- J
  704.         strExtLocal.Empty();
      R- U! N* K# L0 f1 N
  705.         strFullName="readme.txt";. g" g  l4 Z/ a% T# ]" {2 y
  706.         dwProgramState=AP_CONNECT;
    & n  Q- N8 U7 z9 E2 L4 F# P
  707.       }, c9 {; _+ T& L7 l3 t
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    % @' y) L/ Y& T/ S/ J( \  m
  709.       dwStartUpSteps=2;  t4 a8 ~2 q! O1 ?2 X  Q, \
  710.       break;  W0 ~0 Z; Y$ ~8 }3 F3 z$ P
  711.     case 2:3 Y  f( Y8 ?5 J2 I8 |/ T& ?
  712.       {
    ( @7 h  }* S2 I
  713.         int iEOF;
    6 E0 P9 D! S+ H7 G4 o
  714.         FILE *fp;
    $ X& z. R5 Q. g4 O3 s
  715.         char szString[512];
    7 [5 I# V- j$ \1 q# L
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");) b# V& X9 D: M5 g
  717.         if(fp)
    - i0 w) k( m+ ]' r4 m8 k
  718.         {+ E+ U. C. g% w3 j$ }
  719.           do; E+ V/ u* X' W5 G' v1 W. j
  720.           {: c5 \0 ^3 H1 m9 t
  721.             iEOF=fscanf(fp,"%s",szString);
    " i- b  r$ @) j, d+ v* H
  722.             if(strlen(szString))
    0 W$ j2 h  c0 a, g* i# b3 u
  723.             {
    1 f  U7 n3 B* {/ x
  724.               if(bFirstChar)
    " e$ q- l  n$ X0 W, U  }9 t
  725.               {+ o+ q- w$ ]+ X, H- V1 t
  726.                 bFirstChar=FALSE;( s6 G. S. z" x& X6 w
  727.                 bConnectIsBig5=FALSE;
    + @; d* o' f! [* }8 N5 I
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    6 ]! _7 _7 i' r9 N2 y4 u. L) q" V
  729.               }
    ) i) U1 D2 {9 i# E  B8 N( P
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));% p& Y" N8 p5 s) {* ~6 F
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    2 ~4 a& [$ S: g& K" x
  732.               dlg->m_ListText.AddString(szString);
    ' \# L5 J+ X0 L1 r/ e* Z- r
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / B" G3 D0 [3 C& f+ C
  734.               *szString=0;
    & D' _+ ?+ d# U9 Z4 p
  735.             }
    0 N; a% p! q) u
  736.           } while(iEOF!=EOF);: O6 h7 R# Z$ y) Z2 u* e( G
  737.           fclose(fp);% w- p; X8 Z) L5 s% ?% e) ]& r
  738.           unlink(".\\DownLoad\\readme.txt");
    7 ]& _  ]% Y, J
  739.           dwStartUpSteps=3;$ V7 U$ C0 d; ~+ @& [
  740.         }4 k3 W# P: _+ y$ L' ]* I% S
  741.       }
    ! j, I: z& I/ v
  742.       break;, n' U" T- L# x5 w
  743.     case 3:
    % x5 o3 U0 q* s5 n6 U3 n  A/ ~9 R
  744.       if(!Dn.Connected())
    # b, }8 f4 F4 d" E1 ?$ k
  745.       {
    + e3 T; Q9 \& l3 n! G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    1 t! g/ S# E3 o/ O, n4 G
  747.         dwTotalFiles=1;
    4 I" K! W0 ~, u" R% L
  748.         dwDownLoaded=0;
    ; |0 i- ~) }1 V) o+ C7 D
  749.         bSilentStep=TRUE;
    4 J4 Y2 |+ c/ q/ d5 f( R. E/ s
  750.         bCompressed=FALSE;
    1 I9 F7 ~  y% w+ E, g2 \5 I* Z
  751.         strExtLocal.Empty();" M! [. f( ?5 g' D! g! f
  752.         strFullName="checkversion.txt";
    9 e# _8 l# P! y4 k6 q$ ^7 q  o
  753.         dwProgramState=AP_CONNECT;: M8 C! A1 |: W7 P1 z
  754.       }
    - D3 z! k9 h7 f
  755.       dwStartUpSteps=4;
    # |) r' z7 B0 F4 ~1 _9 c* A
  756.       break;
    ' G  h4 C. o) Q: S1 o6 a4 |
  757.     case 4:
    ) j2 P% n' a/ r: @1 o
  758.       {
    2 U% e) d0 j. \5 @4 X6 W
  759.         FILE *fp;: ?- S1 d$ m! q9 X. D) U
  760.         char szString1[128];+ Y' v' L) u7 i" S0 i9 Y
  761.         char szString2[128];
    ( B. X3 u$ t' c; ]8 i- V% k2 o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");7 r% _3 \$ x" O5 x1 S- @4 Y
  763.         if(fp)2 P3 J. S9 N& H- T* F! q
  764.         {- A7 R7 U9 }6 `: K: L3 {
  765.           fscanf(fp,"%s",szString1);, O/ J# u. ~. K% A. S  f
  766.           fclose(fp);! U/ m+ l8 k2 K! u4 C/ h% _# G1 p
  767.           fCheckVersion=atof(szString1);
    4 m0 n0 S2 `* M8 u1 c! p$ X+ f
  768.           fp=fopen(".\\checkversion.dat","r");
    1 R' b* ?* Y& i* h% ~
  769.           if(fp)
    + }$ A4 o1 x, T3 j
  770.           {
    7 V; I9 r( j4 X6 U
  771.             fscanf(fp,"%s",szString2);9 D& [$ z% b& E- k+ }3 |/ l
  772.             fclose(fp);
    ) Z' S# @6 [# h0 H! V
  773.             if(atof(szString1)!=atof(szString2))
    7 `& z8 O  g" d! p
  774.             {
    5 K( @. P* j9 @: ]' I0 J
  775.               if(!Dn.Connected())
    , W, }. W6 m. }5 l) a+ g
  776.               {9 i6 V- P( J3 m! e
  777.                 bFirstUpdate=TRUE;
    1 g, |/ s4 c# u$ M9 L, V
  778.                 dwTotalFiles=1;
    $ j1 K1 l" k+ N% c/ j6 D9 r
  779.                 dwDownLoaded=0;( v- S3 T5 w: z) ]- \3 |; u9 k0 o
  780.                 bSilentStep=FALSE;% J- _9 c* o8 j/ _5 g
  781.                 bCompressed=TRUE;4 p# |. k: S5 j3 h5 j
  782.                 strExtLocal=".\\DownLoad\";
    8 b8 S$ G' c/ A! M
  783.                 strFullName="update.txt";2 s  @& I. T. Y1 L4 Q
  784.                 dwProgramState=AP_CONNECT;
    % D7 T; t: Q9 C5 G9 E
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + x! X- @% a" H( y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 D' y8 D# L4 g
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");/ g( x+ |8 g0 D
  788. / k9 [5 z" Q+ N# U0 k, X) c' g
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 G' K- p3 ]- @5 ^/ G: {3 L" B+ p
  790.                 unlink(".\\DownLoad\\checkversion.txt");3 ~1 {- ^" q* O6 F6 X
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    - ?; U% J. U  l/ v- L
  792.                 {
    " t: m( I; F% O3 F7 I; P1 ]: ^: k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");  n" k4 p4 d7 k! k- b% A. f
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");$ e  f: M9 k6 K. u
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");: v6 L, ], n; j1 e  p: |3 C
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- b4 A) _  w* S

  797. # w" c6 y6 P; u8 C0 C5 W5 `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: ]6 s, Q) T2 n% a3 O' `- _  ?3 y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 q# u" R/ D) _0 E; @2 i3 Y/ F
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");; @* r, u) q) o& B. O! p# V
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 q: K5 K2 F; O
  802.                 }: F' ]9 a" z' K% q3 d: v1 s6 w
  803.                 dwStartUpSteps=5;
    4 I5 S, k$ T) G) |
  804.               }+ A* V9 m( m/ M$ n
  805.             }
    ' z( S, G3 ~6 s7 s$ g6 p7 x6 S3 I. L6 G
  806.             else8 D5 _9 ?( n" ~& d# }3 O+ Y/ t' C
  807.             {9 t1 R8 {7 g( E6 S' |' |' I
  808.               unlink(".\\DownLoad\\checkversion.txt");
    $ s8 f/ Z# B! Y) r" L. _7 Z! ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      S1 n6 R  p' H
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 y9 Z/ I2 I  k7 i( {& j
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");* F: h. M4 o/ x) x% t+ c# V/ ~

  812. 5 X1 M, P' A$ g; Y: k& r2 P  @0 d
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 S, v- _5 Q3 ]8 o- F/ Z3 k
  814.               dwStartUpSteps=99;/ P  \+ j8 G7 q8 ^  @- n" |/ Y" r
  815.               bFinishUpdated=TRUE;( b" b7 ^* u. V; f% Z. }
  816.               bCanUpdate=TRUE;
    2 e3 d6 o3 N6 s9 M: X) D
  817.             }
    9 v3 d" H. a( t, E8 W
  818.           }9 g  I4 F/ l) t% Z9 w0 r
  819.           else/ j9 z+ f' q+ v- n, l
  820.           {" g, i! _1 F7 j1 I+ E* e
  821.             if(!Dn.Connected())/ ?( S& C9 Z* q+ T0 {4 p
  822.             {
    % F' ~8 D+ A4 n( t, T
  823.               bFirstUpdate=TRUE;3 a8 t+ i! x( I+ a; X
  824.               dwTotalFiles=1;
    ' s5 g6 [; h& d- m3 A' c0 B" {5 p
  825.               dwDownLoaded=0;
    3 e+ g4 m  y! e3 D: S1 i, n  C
  826.               bSilentStep=FALSE;
    & t% ~  K  c2 S* }; N
  827.               bCompressed=TRUE;, p; f# R% d( D* {' j1 k- S
  828.               strExtLocal=".\\DownLoad\";
    : V% V3 T: ^4 N7 `3 p
  829.               strFullName="update.txt";6 l6 r  U- R, V$ _- C. E; N
  830.               dwProgramState=AP_CONNECT;- F) L+ e- d+ @) _
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) M8 B$ M! ]" G. [
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% |# v4 b# |. e9 G/ |
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");0 Q0 ?7 v2 v. a1 J) R
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! W4 u$ S, v! P! _
  835.               unlink(".\\DownLoad\\checkversion.txt");* V0 E) b; J4 t! y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    - x7 a- v0 r6 h4 Z
  837.               {  }2 p& x6 j. M4 [  l7 ?! o
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    5 Q' G5 z) L# b( O6 W
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");8 i6 T+ s0 b! O" X. O0 x) O
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    $ e) K, O0 |2 X7 X  q$ G+ p) |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" o' Y: S% U8 {$ F; Y
  842.                
    - K/ J( M4 r- p) y* o$ {- C/ A
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 ?* h: ^/ J  c: g1 D* |8 _: B
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ U+ ]' _* k: g9 z3 V
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");  q- f9 q3 c, D  {& Y1 O4 F2 i
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 |: t5 C( x# [6 Y5 _$ t- I" M
  847.               }
    ; E) C& g0 S% F- I! x
  848.               dwStartUpSteps=5;. Y" E8 k! U" U. n7 b( m
  849.             }3 Z  d; V- }" @3 }$ h5 z
  850.           }4 ]6 m! ?; m3 ~3 \% P) i- A2 q$ Z
  851.         }" |7 c0 A5 t6 Y
  852.         else3 e/ x8 Q" ?9 C) U) U# O0 ]; X4 G
  853.         {
    & F2 S! r1 V# J) k
  854.           dwStartUpSteps=3;  ^# \& u& b- L# x% \% Y% i7 W& X
  855.         }9 E- v8 |) p' e# [* e5 s7 f- o. a' L
  856.       }3 i* C6 }! D# J3 Q" ]
  857.       break;
    * x: ~) _2 M* j( y) g
  858.     case 5:
    + \6 h( {0 _. Y0 }  I) Y) H
  859.       {# Y8 F  Z: r, |; T3 k
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)5 E( C' v" x& [$ n8 \6 c2 k: ^
  861.         {" v3 e6 m% o' R6 w% B
  862.           int opt_overwrite=1;
    ; C" W# Y( T! u, Q- g' P
  863.           int opt_do_extract_withoutpath=0;
    1 X. a* b: O5 E) C( g
  864.           unzFile uf=NULL;+ a- V% H0 u* Z! k

  865. - Y" U4 ?6 _0 s
  866.           uf=unzOpen("Wsa.zip");
    - @9 H$ \- n" u" n) K2 S
  867.           if(uf)$ M3 g8 F; d) ?3 _4 k  V
  868.           {
    # H/ `4 Q  f$ Z$ X( k, y! c
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);/ R- `/ \1 G; n
  870.             unzClose(uf);8 b( x! ?% |: B3 B
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    / o: f) @2 l% `. I# c
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");1 |. |* G5 x0 B3 ]( o
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    , ?5 S4 B' ~5 ^+ N  ~0 d" c1 C! |
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( }0 g9 @) i; K9 E- x
  875.           }* M0 P* m" u8 T; I0 w/ L; l
  876.           DeleteFile("Wsa.zip" );
    1 [0 {9 J* Y! N
  877.         }
    : B7 u: X' E4 E

  878. 2 d; j6 E& ~! M! I: D; ^2 D
  879.         if(CheckLocalVersion())
    1 V: g5 G% A, G% ?1 X8 G! y2 h
  880.         {
    $ l5 ~1 c. Q, e, M
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ( o) g: M9 N5 Y1 u& \
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");" _9 b6 E5 I, ?$ I1 ]
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    $ }9 m/ ~% T7 W( W1 {' U7 B3 L
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + [% {- S: `4 H/ A) Q. |% E2 A9 Q
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);3 n( R, v0 B5 J5 X' S6 V; H
  886.           dwStartUpSteps=99;: Q" Y* O& J( J0 K2 k' ]$ z  C$ C
  887.         }
    : N4 s; q1 E# q! w& \
  888.         else
    : t4 ]4 U; u0 }0 I  Y# U: @
  889.         {
    , }& l# w$ }) c
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    0 a; F0 K7 C2 C5 }
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. m( r5 r# l4 q1 ^
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    + h+ z# \* s& g/ r/ k# v

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

4 [; R0 [! b8 W2 S, `5 w( ]& m/ P, b: Q: M$ j, g; b, N

評分

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