CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
% u- L& j0 }/ J6 Z
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ' Q9 C2 m: ~6 T5 X
  2. //9 @! y& A- Z* ?; `% n1 i5 t2 r, c

  3. 2 k0 N$ J# z' Y; P, ]% C9 w* ]3 g
  4. #include "stdafx.h"4 |! R$ c  j( S* l" D6 A+ O

  5. 2 |4 h' r3 f) H4 V9 A
  6. //#define UNICODE
    * e( u( [9 a+ V+ }% U
  7. //#include <gdiplus.h># Y6 ^* w; r* Q& f/ p. K5 g& t
  8. //using namespace Gdiplus;
    ' s9 h% z6 C2 X! {" z# ~+ n7 x
  9. " {; w9 z, a3 `7 x: ]& r, z- G; F
  10. #include "RevApp.h"
    9 m$ H+ ^( `) @6 v9 ]
  11. #include "RevAppDlg.h"
    ( j: q6 K8 `4 x7 |5 a5 P* R

  12. " L8 G7 _* @# n7 J$ ~5 B
  13. #pragma warning(disable:4786)! X" n& y( N; b" `( |
  14. #include <map>6 b# l) k$ O& G: T5 w
  15. #include <list>
    6 ]8 N. }% g* V
  16. #include <direct.h>
    ; f7 f! W0 ~0 v; m1 U
  17. ; Y% p' R5 O: h, R) |8 ~. D
  18. #ifdef _DEBUG2 ~$ `/ V% k  \; N0 x1 }
  19. #define new DEBUG_NEW
    $ k4 P. G; Y: E& I/ `. z* v' U
  20. #undef THIS_FILE; V( O' a1 }) ]; D5 Z. x. R
  21. static char THIS_FILE[] = __FILE__;& v0 r( H' E$ g. J/ o$ Y
  22. #endif
    2 n! [; l8 c8 Z4 M0 @) U
  23. #include "SkinResDef.h"
    / k8 q/ U, l2 [" w) `
  24. #include "ChangeBG.h"
      ]& F& b6 q* n7 K$ _
  25. #include "AFXINET.H"
    ) S+ {$ l# a  o& |8 Y1 Y9 X5 c: v0 f
  26. ! P  p5 ], U' v! z
  27. #define TRADITIONAL_CHINESE 0# L/ N6 ?. b/ @1 ^# \
  28. #define SIMPLIFY_CHINESE 1
    5 c" O' W3 J) N8 I+ }# n. U/ N
  29. #define ENGLISH 2
    : A& @; h1 J# E$ b1 a) ?1 Q. o3 F& {
  30. int m_iLanguage = ENGLISH;" Q) _7 L6 q1 o+ ?% `
  31. /////////////////////////////////////////////////////////////////////////////
    ( F+ d, Z, J2 J, Z- g, P
  32. // CRevAppApp. B# R" v4 _' ^7 R

  33. $ K5 c+ I( M6 G( G4 N# Y, k1 d
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& g8 {8 I# v0 M
  35.         //{{AFX_MSG_MAP(CRevAppApp). p  W, Q9 g! _9 Q& `; Y6 i0 S
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here." x* R% Y" p% J! B) F( x( ?* ~
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!; v8 I6 M$ y# M. x, B% I/ H0 x2 W
  38.         //}}AFX_MSG
    ; y2 i+ G3 e6 B
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)+ R3 q( P/ F1 L$ Y9 x1 I
  40. END_MESSAGE_MAP()
    & j+ K$ J9 \. h3 W

  41. : e  ]7 y) @5 R: o8 v% F
  42. /////////////////////////////////////////////////////////////////////////////
    2 ]/ f: x6 M1 h0 a! J# o6 }
  43. // CRevAppApp construction
    + J9 }* _0 J) d" y# T4 ?

  44. & I! O; t1 o  Z& l; x
  45. CRevAppApp::CRevAppApp()
    ; [% i0 Y/ T) \" I. C+ h
  46. {
    ( _6 d% Y( ^) ~( T& l
  47.         // TODO: add construction code here,
    + t" o% C+ {: Q; j2 Y
  48.         // Place all significant initialization in InitInstance& h- {/ K* `5 _
  49.   bDisplayIsBig5=FALSE;
    3 x/ b. `4 o/ m0 G
  50.   bRestartUpdater=FALSE;
    ( s+ I" F* }, a
  51.   bFinishUpdated=FALSE;1 E& ~/ s5 E7 a( b/ a* L; E
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;9 I" t% F  {& ~) a9 o$ H& ?" F
  53.   InitChangeDataBig52GBKS();* [% u& j( `+ w: K% @  a
  54.   InitChangeDataGBKS2Big5();
    9 _- {3 C) N/ f9 ~
  55.         //
    + `& [! T1 l" L& D- T
  56.         bClickRunExe = FALSE;
    / B% F) _( R5 _# W4 @+ b, T( A! O; I! s
  57.         //2 x! X7 x  j% W3 m
  58. }
    # t0 c/ ^4 Q1 V' h; |. C5 Q
  59. : A( u8 b+ f$ }8 Q1 C9 G6 h
  60. CRevAppApp::~CRevAppApp()
    : {$ C0 l& U3 F; W4 z
  61. {
    1 x0 a( q4 f4 |" m
  62.         // TODO: add construction code here,! |6 f7 w' K. j% z( [( e
  63.         // Place all significant initialization in InitInstance0 N% y4 c" y1 z' O! u
  64.   EndChangeData();
    2 g4 @9 _9 Z* n) O1 k
  65. }3 ?; y" @6 j) f8 B' ?+ V

  66. ' B( E3 s  B8 ]; Q
  67. /////////////////////////////////////////////////////////////////////////////2 a6 q- H! X$ I# d! G* H
  68. // The one and only CRevAppApp object
    2 s# ?) P; I  t

  69. 0 t  R( ?# `. ^. c% i
  70. CRevAppApp theApp;+ h; A+ y- I& J7 A3 `6 K3 [/ ~

  71. " u. w9 t+ E3 R
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ( z7 m3 V4 s$ g  K, x
  73. {
    : I) J6 C' Z  \" D( f$ D
  74.   int iEOF=0;
    ! w* `6 X, T! d3 {" R
  75.   char szTempName[MAX_PATH];
    $ h+ B7 T! A$ G" G4 K' \. n
  76.   *szFileName=0;7 K+ o2 t5 ~' V) [. n& I
  77.   iEOF=fscanf(fp,"%s",szTempName);% V: h0 I( ^/ ?4 T, L& y- \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    3 O0 s3 ?/ m( F: B' c0 f
  79.   {
    ! W1 a( G6 ?1 z! Z- i
  80.     strcpy(szFileName,&szTempName[1]);, b8 |7 z% _6 v% N9 U5 p# t8 U
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    8 y7 U  B% x- ?# s1 O7 n
  82.     {
    - f1 H  K$ _) e* d# R& J
  83.       iEOF=fscanf(fp,"%s",szTempName);6 J+ V$ j3 a  I
  84.       strcat(szFileName," ");
    ( f3 U7 t5 L9 r
  85.       strcat(szFileName,szTempName);
    6 Q! }, E  y5 Z) m8 V' M
  86.     }
    ) [( y$ a- ]* a9 }0 O1 I7 i
  87.     if(strlen(szFileName)>=1)
    2 r, V  H- V: Z! `3 |
  88.     {
    9 J$ c- l% }2 F# l
  89.       szFileName[strlen(szFileName)-1]=0;: p( a, O7 R4 h  h$ Z7 S1 f9 D) X
  90.     }8 a. w8 ], ?! W+ E
  91.   }
    ' K6 P) o3 \( u! X+ y
  92.   return szFileName;* I  n8 Q6 K2 Y  U- f+ v( Z
  93. }- Z. }! g* H8 G

  94. 8 t$ n- Z2 D& E5 e7 R
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    # ?3 t4 \7 A  d( Q! C9 _
  96. {' W3 X5 G6 T1 R0 s
  97.   FILE *fp;$ p; g2 f' D) O* Q% `" }' k
  98.   char *key=NULL;
    + A" ^& m( Q" ]: J- Y
  99.   char version[MAX_PATH];- T% G0 F+ a$ T: J2 [) q
  100.   LPUPDATEFILE file,olds;
    1 l% H* o2 z: u; Z% k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;% |& D0 {) K2 P, {3 J9 H

  102. ! x' d* m8 [6 m( h5 P5 I- k! `$ Q
  103.   UpdateList.clear();
    $ v( L( `& `7 b9 }7 F
  104.   UpdateFile.clear();2 \; k( d! b7 m% c
  105.   if(GetFileAttributes(filename)==-1) return false;7 Y6 s' A6 @1 Q/ ?7 [
  106.   if(!(fp=fopen(filename,"r"))) return false;
    3 e6 {! H8 l7 y4 Q  q6 ]' Q
  107.   fscanf(fp,"%s",version);
    8 V4 c) J7 O8 ]
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    & ]; }2 z: @2 g5 g+ E' m8 }9 P5 U+ H
  109.   while(fscanf(fp,"%s",version)!=EOF)! q- b9 U; U: r! W
  110.   {
    + @- _; |4 x. I. p* C
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 V  V8 [  |0 l: I" Q
  112.     fscanf(fp,"%s",file->path);' |  a) K$ U5 F1 D' I7 V. A
  113.     ReadFileNames(fp,file->file);' \) o- k; P* h
  114.     strcpy(file->full,".");& b3 ^, U, ]5 W# c' S
  115.     strcat(file->full,file->path);
    + b$ b/ H( o8 R/ ?9 y+ C
  116.     strcat(file->full,file->file);! ?. e" k0 K: w
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())' E3 D+ M! v* h% b0 X, \- X
  118.     {& @3 {4 L3 i, U3 E9 `& G6 Y% q8 O
  119.       file->vers=(float)atof(version);5 g# O/ r0 p- D) E- C/ l/ B
  120.       UpdateList.push_back(file->full);' S/ R  h, u/ O% G; J& ~4 ~/ E
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));0 \: z0 Y& [4 O& w; \5 X7 ?
  122.     }1 _# Q8 f! I  J( W
  123.     else+ L5 F9 n/ _  e; Q
  124.     {
    6 ^  L- a' y: w1 B
  125.       olds=(*p).second;6 _0 h: }5 Y3 `6 e4 J" m8 A' z7 U& m
  126.       if(olds->vers<(float)atof(version))
    , H4 {# F5 p9 F; e: y3 j
  127.       {
    ! x2 b( E! K- ?
  128.         olds->vers=(float)atof(version);9 y/ ?$ o# _8 t3 C; `. P5 y6 t9 B
  129.       }
    ! H5 Y. n, K6 a5 n, W8 z2 g* P
  130.       free(file);
    3 m: I# Z. R) S% G; T) v
  131.     }
    ( S6 G3 I0 q) y! t2 W' P+ l
  132.   }
    4 \: C0 d8 ^2 O' }% q! U+ h. X
  133.   fclose(fp);2 @& ^; d3 `; Q% D0 a6 U. E
  134.   return true;
    8 {' V- ]6 O3 _7 y9 [
  135. }
    ( y& p! ]; ?  d1 _; G+ H
  136. ( D& C) ^0 j; h' }
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    6 U" k$ e$ b" u3 q7 Z" m
  138. {( u- p& @5 L/ S7 C. o& d* Y3 }
  139.   TCHAR  szFull[MAX_PATH];
    5 u- ^) w6 T6 c" C
  140.   TCHAR *token,*inter;
    - F) Z+ z% e' }& J
  141.   *szPath=0;" d! m# a: K9 U0 N
  142.   strcpy(szFull,szFullPath);
    8 ^( _! o2 h/ g: u4 i! l, Z
  143.   token=strtok(szFull,"\\/");' e% x2 V* G& Z% D1 ^
  144.   inter=token;" B6 x! U5 L. {. t" ^2 ?4 R
  145.   while(token=strtok(NULL,"\\/"))" a" K0 q- y+ D+ \
  146.   {
    3 f; n' H* N1 r3 V2 _
  147.     strcat(szPath,inter);) t0 N) ^: r1 l& p1 b6 D
  148.     strcat(szPath,"\");
    5 D" J# n! o/ v
  149.     inter=token;
    7 u# ^% g; s" W! g& V5 z/ @
  150.   }
    % k6 C1 o* a3 v; {: f; o) g
  151.   return strlen(szPath);% Q' [/ z. b7 v# \/ {6 \
  152. }
    ! q0 o* d" q0 O) T
  153. + }( x4 a( j2 n7 F
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)8 D, ~/ G# g: _5 r, a$ B% s& q- G
  155. {8 H4 U5 h+ z7 c
  156.   DWORD attrib=GetFileAttributes(Target);% K1 w% Z/ d; d( T% _6 t
  157.   if(attrib!=-1)
    + h( j3 }- z6 O8 h+ u
  158.   {
    5 g- M- W* J" [# Z$ o" Q9 i! r
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))- ~9 z& a; B* ^% F. Q
  160.     {+ ~/ x, M& M  h9 X# ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    7 Z1 h& I8 _) N. n$ W" v
  162.       SetFileAttributes(Target,attrib);+ D2 j5 X9 G6 U  U5 k
  163.     }
    : L* R0 a5 g2 J+ T; T% @6 T6 V
  164.   }7 ]8 B5 [0 F4 W% y6 V/ G
  165.   CopyFile(Source,Target,Erase);
    ' N% D  u* h+ T) }
  166. }
    5 G: l9 K& m; [1 {' p. _- f& K2 X
  167. 6 d" W% D$ m7 w* N( p$ T1 Q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & i. Y' @, O& F. w9 {+ _
  169. {
    1 k5 K$ Q# N+ \6 ]
  170.      FILE *fp;# T7 Y& r( ^- G8 `% k
  171.      char  szBuffer[8192];
    ; }  v; X$ }6 V/ A* F# @
  172.   va_list  argptr;
    + M% h9 m; ]# v$ u' V3 l# F
  173. 7 j7 Z% Z5 k( w* e9 k
  174.         va_start(argptr,message);
    , x9 m* t" v+ \$ p2 u  X, r! _" U5 j
  175.         vsprintf(szBuffer,message,argptr);, r0 u- P+ O1 {9 M' C+ Q; M6 ^7 }
  176.         va_end(argptr);' c/ g' e: o$ D; M& I
  177.   fp=fopen(FileName,"a");
    $ M0 }. y1 e) J+ H& o
  178.   if(fp)
    $ D4 x# ]+ c% g- {3 J
  179.   {
    % N" y; c/ _, U
  180.     fprintf(fp,szBuffer);
    - `  q$ W9 D; ]) {% }$ c; q
  181.     fclose(fp);+ ~! M% y/ g5 ?% j9 w
  182.           _flushall();
    $ i: O) M6 S+ S/ R. w" M0 V
  183.   }5 k: H2 g. y7 h" ^! R' u
  184. }! p2 s8 `+ i' U0 h7 J
  185. " n; |) C* ?. }, v9 O
  186. BOOL CRevAppApp::Fclearf(char *FileName)* h! x# N- x' `& t, D0 Y( V+ c
  187. {
    / \5 O* z* u+ C# ~- v
  188.      FILE *fp;( u% g, K5 N, _4 v
  189.     DWORD  attrib;
    % L6 b! s+ L- ^) ^3 o# C
  190.   attrib=GetFileAttributes(FileName);
    ( n8 E$ L% ?/ T% E" y
  191.   if(attrib!=-1)
    : C* s' N: t" e- E5 ^6 r  ?
  192.   {2 A* H. [- B9 ^$ Q3 S' ]
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);3 E" l  M% w4 ^2 l& ^
  194.     if(!SetFileAttributes(FileName,attrib))
    6 q/ D" U  R$ A: u! u+ e" x& L
  195.     {
    6 O2 G& U+ `. D, J! C9 ]
  196.       return FALSE;
    . @7 t: B2 E; j" s4 k
  197.     }
    ) @  d, v& v) r/ o( r
  198.   }7 a$ H8 \! L) M9 N, w9 m
  199.   fp=fopen(FileName,"wb");3 U' ?% k) S+ {3 B! t
  200.   if(fp)
    9 e5 u: s8 l0 b
  201.   {
    ; g2 k' x' h# Z2 @7 m
  202.     fclose(fp);& |  ]- u( c9 G9 s0 p
  203.   }
    ! V+ k$ D1 J2 n5 ?3 Y" ?
  204.   return TRUE;
    , ]$ c' N3 y8 G! p" r
  205. }
    ) a& l" u& r7 ~( Q" e' i( q2 P5 }

  206. 6 b& y+ C+ ^: ^, ?  D/ v. H; L
  207. BOOL CRevAppApp::UpdateLocalVersion(void)5 z5 o  r* v: f( \+ l5 i) f
  208. {. e7 }8 ~& G: U
  209.   char filename[MAX_PATH];
    / M$ R, z& T- r: v$ Q, a
  210.   LPUPDATEFILE file,olds;
    + L0 G+ s. p( Q1 G0 w; C
  211.   std::map<int,CString>::iterator i;1 S: v. V0 Y# x; ?# y1 @
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) x2 _$ j. ^9 P2 L
  213.   std::list<CString>::iterator l;
    / X, b3 i* C. H. r$ ~/ o
  214. / }& Z" s2 o, z2 c  E4 X; X% T
  215.   if(bFirstUpdate)
    1 T9 n" y9 |; o) Z& C8 f
  216.   {
    + f$ G; ]3 a& a" N9 N0 m
  217.     dwCurrFile=0;" u7 c9 U; T. v1 h3 G( _8 i
  218.     bFirstUpdate=FALSE;
    * S* Z: z& j. ~, E2 t
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) U+ T2 G6 d& M3 Q
  220.     {& w! h& p! n: D% O* n
  221.       dwTotalFiles=UpdateLocal.size();
    9 `& m. s  W* p: v! {7 p: L8 e# N
  222.       dwDownLoaded=0;
    , H2 h* N  X/ h! ^6 M; W
  223.       bSilentStep=FALSE;( l3 a* F$ f# o2 y7 W
  224.       bCompressed=TRUE;* F6 j" V+ \7 B9 t" k# V! C" u
  225.       strExtLocal.Empty();
    1 ~/ c1 @3 z! ~- R# g- P
  226.       strFullName=(*i).second;- D* ]7 n8 m+ c( t1 n# I+ g/ T
  227.       dwProgramState=AP_CONNECT;
    # e& D( O% J7 g9 J; p
  228.       return TRUE;
    : ]. F9 F7 \. @% r& f7 }( y
  229.     }
      A3 @7 j/ x* {/ c$ a
  230.   }
    ( d. m8 S" Y; \! K8 X: o
  231.   else if(bRestartUpdater==FALSE)
    ' J/ u1 f3 t2 \2 a0 z2 o7 N5 ^
  232.   {
    8 Y) D2 b& s" z- ]
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())( o6 ~, {3 r$ X+ ]5 T1 L
  234.     {
    0 q& \# B, S6 [1 y3 ]1 T  C
  235.       file=(*p).second;
    + c: W! y/ J9 [4 H
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())6 Z+ Q. T- k; J& S+ p) w
  237.       {
    - @4 G8 O: `) C+ h4 }
  238.         olds=(*p).second;  x) @  ~( t' U3 P9 [$ j
  239.         olds->vers=file->vers;" M1 a4 o; F& h" ~6 f3 v
  240.       }
    ) x; R/ p9 G7 e( u8 R
  241.       else1 t6 [' P8 n& Y" _% s
  242.       {1 a# }- Y/ Z/ M4 ]
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( A$ N/ Y! E% @, Z/ @3 ?3 T
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ t1 z  [8 R$ z/ r" P' P
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    * D9 Q( j7 b5 C- P% m
  246.       }! S  \! f& A/ E
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");+ R, D- V; Q5 g! k% Q: {
  248.       sprintf(filename,"(%s)",file->file);& w$ R! {; h# d& I
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# D- e4 r7 K5 k5 {: n* w( \4 B! f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }( p% p' @+ ?' q8 {$ H* p; P
  251.     }
    6 u+ ^) _5 {- V# n! J1 B! d
  252.     dwCurrFile++;
    . u+ ~  J5 d! ?# _/ t
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ M, M3 c  q# a8 G' i% |& }4 n
  254.     {
    ' y! j5 M8 R" o$ F
  255.       bSilentStep=FALSE;' o- ^! M  @  N3 }" z; L
  256.       bCompressed=TRUE;
    . |% V  L  M; ]8 Y, v" J; U- e
  257.       strExtLocal.Empty();
    2 g& F: o1 x  @" E+ B
  258.       strFullName=(*i).second;
    2 ?/ M: W4 j7 r
  259.       dwProgramState=AP_CONNECT;
    7 x% ]* Y) j+ b/ u. V
  260.       return TRUE;
    ( u  A! p6 {8 Q5 p
  261.     }" Z- B3 q) [. b2 p& F; u9 R4 ]
  262.     if(!bRestartUpdater)
    . S( v/ S- C2 X4 L8 k
  263.     {
    # t! D: ^* Q+ k6 G* v9 j
  264.       int iCurrSize,iFileSize;! C% `* T' n" ^$ W7 o- A
  265.       iCurrSize=0;/ y0 I3 [& p  B; I
  266.       iFileSize=UpdateList2.size();
    # x* r& f& z4 l3 p
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    * {' f9 _2 a, X$ U1 F3 t& ?: ?7 R8 G
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
      a6 Z+ u* j4 E, H  v; P
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 |6 A3 l9 t1 b" s1 X2 M4 U
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 `' O% w" x$ Z, x9 O9 H
  271.       Fclearf(".\\update.dat");
    2 D3 j1 O, v& R$ |, J8 f
  272.       Fprintf(".\\update.dat","Bloodyf\n");; `- G, \% {( r( l0 S- I- {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)8 E6 @3 C9 J- s; r/ |/ {: K
  274.       {  `+ O* |/ W4 A3 O6 j4 f
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    % X( y3 U! S$ i' g, D: q
  276.         {% E8 W* J9 b6 X% g
  277.           file=(*p).second;
    % Z7 v  e* ]1 Y( u6 ]. q
  278.           sprintf(filename,"(%s)",file->file);
      y0 o( B- S/ j! [
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' f* ^- \/ ?5 ?
  280.           iCurrSize++;6 W9 J' R& I" s* `
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % t2 @; w5 U. k+ M3 ]- m7 b! o" p# Q
  282.         }
    7 W. g. F% y; s% {. e2 h6 ^
  283.       }; t( }8 A" v/ t* B, @. k8 y: d# N6 n
  284.       unlink(".\\update.txt");
    % G- j1 E" W' H7 I/ ], Q
  285.       unlink(".\\update.tmp");, a% k1 y& J8 ?5 n- w  W
  286.       Fclearf(".\\checkversion.dat");3 [1 D2 R- ?3 \- H7 e; D+ }
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    0 Z0 s1 x3 G% w0 I
  288.       if(UpdateLocal.size())2 g/ Q, [6 l" M* k- ?6 C+ g: P: S
  289.       {' T. k+ M6 ?, W# g! a0 x& _8 A
  290.         UpdateLocal.clear();% o) ^' _5 [7 @( J0 @( j
  291.       }
    5 M! G% X8 U% ^9 [
  292.       if(UpdateFile3.size())7 N0 |! q; S8 r6 h  @  M5 K8 X
  293.       {
    6 f' P$ w" A+ A# N) X
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 @5 j+ f& L$ l8 B  Y8 F% c
  295.         {
    ! q7 J+ _. E% r# E
  296.           file=(*p).second;
    * J( \7 U8 g2 M6 O
  297.           free(file);
    , @4 c- V. k$ {! V6 i& c
  298.         }# b7 X: }. O6 m  p8 h3 t
  299.         UpdateFile3.clear();
    + j3 M/ m) f" {2 C- x% d4 ~) d5 `1 \
  300.         UpdateList3.clear();6 S/ a' J  i- r5 ?! ?5 ~' T
  301.       }+ y( K8 Y  R9 N* _
  302.       if(UpdateFile2.size())
    ( Q. H# W" K6 |( ^( \$ A6 T
  303.       {
    9 Y! \$ M/ G3 f; k+ f* `
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' q/ v- U- u5 v% E( {+ J- p" _
  305.         {# K1 u$ p# t  i
  306.           file=(*p).second;
    : G) m1 s$ _: S# V
  307.           free(file);
    2 A2 @* G! R+ t0 r
  308.         }
    7 A/ N$ z# K/ c: l6 W8 m5 ]( W  @
  309.         UpdateFile2.clear();: H5 {3 R$ [# O
  310.         UpdateList2.clear();; }; |5 p1 y- i7 O1 [
  311.       }! m1 p( }& s( Q  Q' N( x2 f/ `  N
  312.       if(UpdateFile1.size())8 }0 R6 C) B' N  U/ E6 `
  313.       {' L* m" B: K2 Z' I- c/ @
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 w! L( I* a2 ?% J
  315.         {& J  r* D0 |, q( b. s$ l/ J
  316.           file=(*p).second;
    , J  ?1 W2 r% g* ^2 H; V  t
  317.           free(file);
    1 i( F8 R3 l' S5 @% J; R
  318.         }
    , _" U- |0 K$ C7 Z- _
  319.         UpdateFile1.clear();8 k# M3 z7 ^! R1 `7 U9 q
  320.         UpdateList1.clear();+ J( P9 a$ e2 q, G3 I5 t$ J
  321.       }
    % b8 G; I- ?& }8 H& D9 K" ]: k2 j
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));7 ]0 K/ V: u% j: z
  323.     }
    6 ]4 N; p9 v1 n2 c
  324.   }
    5 }+ t/ f6 e3 m7 _
  325.   return FALSE;- @' x$ C* B' d/ v7 k6 N1 w, E
  326. }7 Q( L$ B. d6 P8 R$ u  S3 }

  327. 8 z1 l# G9 b+ x
  328. void CRevAppApp::ClearAll(void), H  r3 j! G* O% M, B/ g/ r
  329. {# M3 O  M6 K& Q! ^. R# j, G
  330.   LPUPDATEFILE file;
    # Y0 H7 N8 V' ?5 r
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) A6 x1 y) }+ e  M1 P& A, j& W) ]$ b1 i; v
  332. 1 L6 K  E- N4 f0 g
  333.   if(UpdateLocal.size())
    , ~4 J' h7 ]4 |0 G/ T7 `$ i) _
  334.   {7 L4 U* l0 |/ T3 K; V3 `
  335.     UpdateLocal.clear();# P8 a2 `6 C( m5 t) d2 M0 V
  336.   }7 I' A6 J( j2 t
  337.   if(UpdateFile3.size())
    " T: H, q+ v- _; S0 C0 X0 ~
  338.   {
    , c% J" n) }) T5 S
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 r- W" N3 s# \
  340.     {! r5 Z' U5 G0 i" H( s; Q
  341.       file=(*p).second;
    0 J% v0 t( ~7 Q" c' x* p% B
  342.       free(file);# Q. e/ N( w" o. }  Q8 ]! b8 O7 v
  343.     }
    ' a5 _3 L* `$ b9 y" \! o+ \
  344.     UpdateFile3.clear();0 e" a+ V& a: `
  345.     UpdateList3.clear();& X* f9 ~) q# B
  346.   }
    * ?$ `2 K# x8 w" S. j# h
  347.   if(UpdateFile2.size())
    ! k0 e( U0 \  W
  348.   {: a+ ^  E% N/ A9 l" x: H
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , M  q  N& u9 Y& \* q1 p1 n) X% |
  350.     {1 t6 v. o; ~% o: g1 [
  351.       file=(*p).second;
      k( @7 q# X; e9 n& i9 Z" P
  352.       free(file);
    7 u: a& {! _- M( E) M+ c
  353.     }0 s; {/ |5 @4 Q5 M% N
  354.     UpdateFile2.clear();
    , d- w, t+ Y& I& [; i
  355.     UpdateList2.clear();
    $ ]' M2 _: c# [/ s9 a
  356.   }0 x6 C; }* e- \8 X8 I: `4 z; t
  357.   if(UpdateFile1.size()). d0 v4 G( [5 v2 R: q, A% Z
  358.   {
    1 }8 _% m. y% x1 c
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    3 c+ {& K/ }+ d" e4 {1 Q
  360.     {' A9 Y. N0 ^' N$ }" @
  361.       file=(*p).second;+ E6 v# v4 D! L9 T4 ]1 ~
  362.       free(file);2 \. z2 u% d# I6 k6 {3 Z4 a% e
  363.     }: ?6 h& j  S# o4 I2 C
  364.     UpdateFile1.clear();
    " p5 L  Y" n& \3 l. h1 q
  365.     UpdateList1.clear();
    6 _: h6 L; Q8 _2 T( {
  366.   }; ]4 J: w* o) ^/ x8 `( X* H8 D
  367. }  ( G, F2 f" x# i( _
  368.   
    0 m1 ~2 f! I5 o% c6 v. n
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 n+ I( e' Q+ Z! a0 o5 a
  370. {0 a; ^8 c" K9 h% F
  371.   int c;- J5 \" z8 G3 F+ n  ~4 T
  372.   LPUPDATEFILE file1,file2;* `3 f' ^3 `  H5 ]7 o/ z% `
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;3 G- ?$ N) R) D: Q1 |# x
  374.   std::list<CString>::iterator l;
    ; V/ i  _' P  t% j4 c% c: j& F1 P3 m
  375. / |" O5 t/ R' l: s1 I
  376.   UpdateLocal.clear();1 W- h8 B% k2 L- O. ^
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);) u( d- G" _6 }
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    5 [4 W) \% A5 p  o/ k3 _# E3 }5 V
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
      J2 T3 h' G. A2 r7 p. m! e
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);2 v* o' L: ^9 F( Z. f: g
  381.   if(UpdateFile3.size())9 V. Q5 s  W4 l( ~% C
  382.   {
    + c- E5 R4 q) R0 ~
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)7 M- G5 h, h, V' Y& O
  384.     {
    4 Y& t/ j1 @) c3 z( ?
  385.       file2=(LPUPDATEFILE)(*i).second;- c! ]+ Z; S$ k6 M8 w9 J! |
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 R2 }. _5 I+ K4 W& ^' e
  387.       {
    : h* E; ]$ {. u9 ?3 C" _' o6 Q
  388.         file1=(LPUPDATEFILE)(*p).second;
    # s; p+ u& e+ s4 g2 x! ]3 {+ A
  389.         file1->vers=file2->vers;' V5 ~8 z& _0 ?3 E& j7 C
  390.       }: o1 [$ ^& u. ~  l; u
  391.       else
    0 C5 [/ f7 T2 d2 j
  392.       {& l6 k, N- P" x# j% O! G4 y, E
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 i" M1 w$ K/ c- ^
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));# A" j& S3 @0 n; }
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ) A+ `/ `& L$ _. N1 q- m
  396.       }
    - r8 e1 c- I, X- @$ |2 i2 k
  397.     }$ _. V" \& w* D1 d% `6 ~1 g
  398.   }7 N: p" e( z$ S. p0 V: c' S
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( z* ^1 {! F/ `2 ?# _3 ?
  400.   {
    # p2 K1 K/ x1 f# V3 G4 A3 a
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()); W+ B# L/ B5 `5 N  X* j
  402.     {
    ( H% ^% [* V8 u5 D) z
  403.       file2=(LPUPDATEFILE)(*i).second;4 T5 @  N& Y5 Q1 y+ L% ^8 ^( y
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" U/ k) o( s) j- r0 r% H
  405.       {0 r# @& v7 e: Y9 I( ~9 y
  406.         file1=(LPUPDATEFILE)(*p).second;6 p% N# G  [7 g& _8 U# c: K
  407.         if(file1->vers!=file2->vers)2 [# Y/ ?1 G- I+ i
  408.         {
    ' o( w  ]+ ?+ V$ q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # v  d. x3 e4 [3 [3 Z* c
  410.           c++;" }" A# R- f/ C8 l: u, P
  411.         }
    ' a, z7 I* F5 k- h
  412.       }
    7 R+ [7 H3 Q) I6 d! s6 @/ Z
  413.       else
    . t- d/ S5 b7 C. f' g
  414.       {
    ' y3 W2 y1 ?7 W. Z: w4 U$ C+ Y9 Y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 a4 n4 X8 P# F" ^- x" v
  416.         c++;
    ! H" s. \0 h6 k9 W  W
  417.       }1 x/ S: q7 e, [( |+ w6 ?' p
  418.     }
    & r, [' j# B; d, m: N' p
  419.   }5 p- ~9 k8 N: b- q# O4 K& q
  420.   unlink(".\\DownLoad\\update.txt");
    5 E& w% \' `$ U
  421.   if(UpdateLocal.size()) return TRUE;5 O* Q. p2 D5 Q& s; G, ^% ?
  422.   else                   return FALSE;
    ! W( L. P* p3 p" }- H( p
  423. }3 N" h: @4 i" i9 @4 w

  424. ) _& Z; [% _! Q# w/ o/ B  s" ]2 Z3 ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    2 F/ ]1 Y! A% [4 z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    9 g7 A) A& [( b2 e
  427.   L: P& n9 t& O( @; q9 N1 P1 D' j9 i

  428. $ F1 `% |0 L! x9 i; N/ s
  429. 5 ~# s. W; f8 f- c) `: q' v* I3 w
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 L8 C" m* a( w/ b7 ]" m$ |2 y+ b) R* o
  431. {
    : [4 C! o9 o5 |0 X
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;% P% u9 d  k; v* R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * ~& A! W( ^- Z1 o
  434.   {  g4 k7 L) O; l. f; t: O, `6 l
  435.     char szLanguage[50];. m3 c8 U0 I3 Y* h( B7 M
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, P! P4 i- K% T8 Y& s
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : D  H5 P: J/ V) e% g
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ c( @" }+ M6 Z+ N- V& m
  439.     else                                   m_iLanguage=ENGLISH;. C/ t; |$ C( o. D
  440.     char szRegister[100];
    & F" W3 t% l" r8 R7 Z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# c$ V6 n- F, Y  S2 b' C
  442.     strRegsName=szRegister;4 O3 o% V$ q8 |- n
  443.     char szPatchURL[100];- U2 _: E) \4 }  G8 N
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' E7 y$ y- V9 T* s; D
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 n; C% r) }- i( l& y" u
  446.   }6 K8 \; w( B, y) a7 b7 @
  447.   else' [' U( p) Z) m  O- w: E: [* [
  448.   {: a, D( A8 w8 ]7 }  B
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 A' K* J$ d% T5 G. N+ ]
  450.     strRegsName=DEFAULT_REG_URL;
    , c: u" r" p2 N* S2 F  {- o3 C
  451.   }
    : |3 y5 B8 C3 G7 M% Q. I! j7 l
  452.   if(GetFileAttributes("hosts.ini")!=-1). {( D" {- D. }$ k
  453.   {# ?  N1 h8 E( M
  454.     char szIP[50];. o, y: I. D4 M2 k; v" c7 |. q' G
  455.     char szDIR[300];
    , z1 G2 Q7 o. t# R, Q6 O0 t
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    " L% M! P3 ]1 j* H
  457.     {' T3 F9 V1 g1 B1 G2 N+ F7 m
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    6 B, m( g8 I7 D4 c, j- Q$ ~; H
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# i. F) t+ s) z4 T" G1 ^, }1 n
  460.       strHostName=szIP;
    / m8 f" z8 B  _' r
  461.       strHostPath.Format("/%s",szDIR);6 V7 F* o9 d* P: P) s
  462.     }9 S) e3 n1 Y2 U
  463.     else2 D9 H* }, o5 R7 j; n3 g# A, R. [
  464.     {, a8 i. `0 @8 J9 L
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& f; A. A7 f6 B+ G( [0 N
  466.       {. K. P0 M5 u, B$ I* E
  467.         char szLanguage[50];
    . M8 S& c* u- U0 E1 d
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 D* o" ]% T/ O8 g0 y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    6 i- _9 }( g% q1 n. ?5 m. d
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' @3 W0 Z1 L; k
  471.         else                                   m_iLanguage=ENGLISH;
    % B: b2 |4 c% K, T" S- G4 X, f$ S
  472.         char szRegister[100];
    7 H0 C( z  X5 z$ Q9 ?+ k$ R6 O
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % z6 J1 f/ i! B6 M8 I5 r
  474.         strRegsName=szRegister;
    ' E6 x  X. n5 p. w" x+ |
  475.         char szPatchURL[100];
    $ t, H2 R8 F4 C: Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");2 |. @8 X: H- D' n
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  @" V3 g' ?$ o+ k
  478.       }* M7 v; [4 H' N
  479.       else
    % D7 F! q' b3 i! n% {9 P
  480.       {- u) R% Y) q# Y3 _
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# m  E. V* T, I2 }8 ]
  482.         strRegsName=DEFAULT_REG_URL;
    / N9 a" y* J1 N8 O5 N
  483.       }
    " X2 k" G: |6 D+ D
  484.     }
      }' E' T4 D+ Z) [( q" |
  485.   }: t/ N# T; w, K4 T  n/ y* ^
  486.   return true;/ _1 v$ {$ E" l, Y% @( y
  487. }; c  T  I9 v  r. k* ?3 F- B
  488. * j) p1 e" Z; F- r4 j8 S* i" u9 j  c( x
  489. #include ".\ZLib\unzip.h"5 h# D* k1 v6 q5 Q# G" @
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    4 M  F4 w8 |1 @1 X5 }
  491. /////////////////////////////////////////////////////////////////////////////0 F1 a5 I: {" T. M% P2 A' H: S
  492. // CRevAppApp initialization
    : G1 U$ h' e) v0 R5 F) i+ |' s: ~, `
  493. % D9 Z/ B5 f, Q2 s' p3 q* K
  494. BOOL CRevAppApp::InitInstance()3 C) l5 U4 o8 H4 I0 F! J1 ]) Z) j
  495. {
    ; T8 g/ r9 Z! U) s3 \- ]4 L5 Q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];8 U+ |! {( i* l6 s) D
  497. ) f' F) r* G7 c8 j& g) A8 C, _
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    1 @- O0 ~" H) h3 u
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))8 `9 {) g- O, Y
  500.   {" i1 ?- W; a* q- k. @
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");% ?- y0 b; o& p& _
  502.     GetPathFromFullPath(szPathTarget,szPathSource);1 I+ T+ V2 R1 ^% P+ D
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    0 h+ I9 k3 ~' y" i9 |4 ~" D3 ~
  504.     {
    ; A% W/ g5 E. v$ y; u6 y: i: O% J+ _
  505.       strcpy(szPath,szPathTarget);  |( P/ R- @3 ^; I6 f9 w
  506.       SetCurrentDirectory(szPath);
    2 z- [, T. u3 ^1 C( c' `
  507.     }- E% A- S  ?1 I' {9 C  ^# Q
  508.   }* A3 b+ ^$ W, T
  509. #ifdef _DEBUG
    8 n4 e6 V, I; Z0 a" ]
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); ]1 D# N! |+ k* \/ U* g' c4 E
  511. #else
    3 H( X0 t3 x' j: w1 ^* T* ]. S
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - H% E6 n% R- R( v
  513. #endif- l1 v7 b1 V. W9 c' b4 {8 O" s/ ?
  514.   {% j: K  z4 F% q8 U7 e8 p
  515.     char tempFileName[MAX_PATH];0 m' G0 F% k: i8 |5 x5 ^% h5 X& u+ c
  516.     strcpy(tempFileName,szPathSource);" i' c3 w: ?/ n- F
  517.     tempFileName[strlen(szPathSource)-12]=0;
    : J, `' o3 `+ H) W4 A6 J
  518.     strcat(tempFileName,"\\$CSUpdate.exe");, i5 n, |2 G( u/ Y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);7 a7 |! ~, B  Z9 L6 G
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    6 z! W* j0 P: o+ `7 T0 D- p
  521.     return TRUE;
    0 f9 {& ^7 L( P4 p  ~3 d4 b# T
  522.   }
    ! g$ L7 s! i  ^% Q
  523.   // Nuke 0118: Delete run.exe
    9 K5 ]' p7 Z3 |. Y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    % I4 W) i6 N! t
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) N0 p$ v7 E' \4 ~) y3 z1 K* q
  526.   if(!ReadCfgFile("Config.ini"))
    ' D4 D! h) S) K. A
  527.   {
    ; N$ \2 K$ P- n% ~4 s( o# [/ B2 P
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    , Q3 v8 f9 J7 y- M8 s
  529.     return TRUE;
    8 @2 ?; ^" n2 {* E* z  M
  530.   }4 ?! C3 e; w+ V2 m2 N
  531.   HANDLE mutex;9 A8 {) [  P0 m2 y8 Y7 s
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 s0 c) s9 a7 v' j$ g( k2 z+ p& }
  533.   {, @2 k9 [6 s$ \5 S+ H
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    , u- @, o# q% t
  535.     {& F4 F" a% l( \0 K1 F
  536.       CloseHandle(mutex);
    & l. k" [( ?0 i% l, E
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);5 Q/ {: [* G- d- A7 U) i7 V
  538.       return TRUE;
    " e9 Q$ G0 _8 o9 I, ]
  539.     }
    6 A3 b8 G2 ^1 ?/ ]
  540.   }  , V; S( Q6 ]+ J4 n) _
  541.   CloseHandle(mutex);6 Q' c3 m3 p4 o2 f; y. C" v7 l
  542. 4 O- }. A# \/ @3 M3 O5 O
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    * h* z3 a5 e6 {7 ^
  544. 0 n2 j9 o# }% R& N
  545.         AfxEnableControlContainer();( y' a% s3 J- O9 ^8 ~
  546. : Y2 Q: K3 Y2 |5 o# D, P( v/ ?
  547.   bCanUpdate=FALSE;
    / G4 P& V; N3 K% `7 A" l
  548.   dwStartUpSteps=1;
    % r; m9 r% k6 g( v# P' ?
  549.   dwProgramState=AP_NOTHING;: u2 V/ m3 \; A& Y8 y' E
  550. 0 u+ t# v6 I  A+ ~0 i
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    * d1 i( E$ w7 C0 Q
  552. ) \; l  C* Q' c1 A9 q
  553.         // Standard initialization
      L! @9 ]) s$ I. p4 k+ x
  554.         // If you are not using these features and wish to reduce the size
    , c& \/ [: {/ q: V+ L8 P) F
  555.         //  of your final executable, you should remove from the following
    ( T5 N) l6 K2 {; Z$ ]
  556.         //  the specific initialization routines you do not need.
    + n; O3 s0 m  E
  557. 5 O, O+ Z. i! \2 @
  558. #ifdef _AFXDLL  Q) A8 z& W' @- N9 J9 n# r
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ! m) V+ k& U' G& e: m2 c
  560. #else
    ; C+ T5 b( o2 I/ R
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    # Z6 V' w+ C: t% l7 o( I
  562. #endif% L5 F- y% m  I$ F, O
  563. ; K8 f8 g( g' Z
  564.   dlg=new CRevAppDlg;
    ' s9 T* m8 [4 ]* |# g
  565.   dlg->Create(IDD_REVAPP_DIALOG);$ @1 t9 H- g+ [" i; ]* H7 u
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    , U7 _; H6 j" o) w! q8 t# J
  567.   m_pMainWnd=dlg;
    . n$ N8 }. B  r' I( [# k" K) Y
  568. 4 ?" H5 C1 b. Q: Z/ m
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);$ L, X& c' Y7 ~! p( l/ h6 |

  570. ( p7 A7 ?7 e/ A, _( n
  571. //  GdiplusStartupInput gdiplusStartupInput;
    & C9 r2 ]/ v& m
  572. //  ULONG_PTR gdiplusToken;
      Z( E0 r$ k% v* }5 t; d; R
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);' K6 D4 `7 ]/ I( i) f' Z
  574. " Z8 ]' [! f: q
  575. //        CRevAppDlg dlg;
    ' C; K+ }* k( P$ j5 _5 U# w
  576. //        int nResponse = dlg.DoModal();
    # f; U# L$ n/ Q
  577. //        if (nResponse == IDOK)1 z# G2 I# r  s3 N( k: d* t) i, G
  578. //        {! W: m2 n1 \6 f2 w6 [0 r: Q
  579. //                // TODO: Place code here to handle when the dialog is
    - L4 `1 |+ A) b. }: j6 e
  580. //                //  dismissed with OK8 c7 y4 b+ _$ J6 J0 u
  581. //        }
    8 ^0 \2 h' S5 G: t/ ]/ ]7 x, k0 v
  582. //        else if (nResponse == IDCANCEL)
    + C& ~: g' Q! a  O+ z* G# ~
  583. //        {+ K' V2 w7 x" t2 F
  584. //                // TODO: Place code here to handle when the dialog is
    ( J+ O7 m7 ^7 y6 x% t
  585. //                //  dismissed with Cancel
    1 F2 D5 u5 e0 [! A
  586. //        }, G: t4 \9 r! i4 _- b7 b

  587. ! \7 Y; I1 N8 b6 \+ q' M" f6 G' G, n
  588.         // Since the dialog has been closed, return FALSE so that we exit the$ d! \# r; t/ T+ ~3 P! W
  589.         //  application, rather than start the application's message pump.3 e* ~' f. a( s7 \. A8 x" }
  590.         return TRUE;
    0 F* t2 C3 H' f5 e
  591. }) Z/ h8 u  p0 @
  592. ( r1 d9 q$ w+ P; g: j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)0 F9 G$ d) Z8 B2 W4 k* @2 |5 H  A/ q
  594. {) t( a8 H8 X4 Y) m2 p1 a# m. {
  595.   int i;
    ; P# I& x/ B( b; I( W7 {0 @3 H
  596.   char *szRet;
    . o+ n: P; T( W- Q
  597. + H8 f  d$ Q! c  X
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    $ A8 A" S# _; ~- n# \  ^7 \
  599.   if(sztoken)/ j8 ]) }; \3 r
  600.   {
    7 F% A6 F/ N5 t2 s! p2 {
  601.     szRet=&sztoken[itoken];. _! t2 D3 ^6 |! L; s9 `, ~2 U2 |
  602.     while(sztoken[itoken])
    ( W" M! p+ Q' s) V
  603.     {& [+ G& u5 v: Q
  604.       for(i=0;i<(int)strlen(token);i++)
    $ @8 c, \# e2 A& K, j3 e
  605.       {; r8 }( T0 Z" _( V
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])  i7 a9 G$ M& l& Y
  607.         {: L( r- g, A8 |+ M/ L
  608.           sztoken[itoken++]=0;
    1 l% q! u% s; Q& t7 h7 |
  609.           sztoken[itoken++]=0;: a' }) i0 t- P, ^
  610.           return szRet;
    $ k: n. J5 ]+ ?4 v/ \% X* d; o
  611.         }' w4 J/ g- ?" i. ]) ]% Y
  612.       }
    4 b: U' D1 U- P* |) z- m
  613.       itoken++;& ]7 L! P+ a) X! {+ l2 ^
  614.     }" ]9 T/ T/ U$ j' w' B% M, F
  615.   }$ m% h% Q3 {: ]8 V- ~
  616.   return NULL;
    ' ~* I  X* P) H9 e
  617. }- }; u& c) n( M0 K
  618. # j3 p  v, t+ Z9 i3 c+ ~3 _4 `" d# X
  619. void ProcessProc(long Total,long Current)0 L+ F8 g3 t' R8 B, S3 _; C
  620. {
    8 r# y/ s1 w2 o/ x# `: X# T. U0 _
  621.         MSG msg;0 T7 f% {& h* o$ D. n# e( ]
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ! q/ m4 a4 d6 D/ k' u4 ~- `% w! d
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ( _, u# N1 S( j0 Z
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))6 u% u3 `( H2 N; x4 I
  625.         {" x1 W4 D9 o5 S' i' N" X. V
  626.                 if(!GetMessage(&msg,NULL,0,0))
    + ]% B3 {# ]# G$ G' T: X3 e, e
  627.                 {
    - U9 s& W& E* @3 s1 m
  628.                         return;
    ; |* I' h2 O' W! t5 c* O
  629.                 }, L0 j% U& C* a( o& K. X5 ^
  630.                 TranslateMessage(&msg);
    * N7 x3 Z0 p' T
  631.                 DispatchMessage(&msg);" e2 O5 z' T; y& Z: f/ J/ k
  632.         }        3 k- O1 ~4 p( n  ^8 H
  633. }
    - A1 A! c- e6 F* x7 c+ Y' x$ ^

  634. + V8 x$ f( c; S/ t0 Q
  635. BOOL bFirstChar=TRUE;6 F- D( X* a7 y  i

  636.   L0 x# H7 H$ f+ H. ^
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    5 v$ }7 s$ T: }$ G
  638. {4 O! P0 \; R8 Y, O8 o5 f
  639.         // TODO: Add your specialized code here and/or call the base class4 j' L  l+ e6 L( Q, Z. y
  640.   switch(dwProgramState)
    5 I- J" V. R! u* X2 i
  641.   {( S/ b. s8 ]5 ^% K# A. }
  642.   case AP_NOTHING:
    & b# b. l# B7 G& @3 i- c
  643.     switch(dwStartUpSteps)
    2 s0 o7 N( H* y4 c8 h( N- k) P
  644.     {
    & \* v. x) \, G
  645.     case 1:
    & r+ ?* c9 ?  c2 T7 k& S2 a
  646.       {7 u( d8 w9 I+ Q) j- g% P0 v  g
  647.         int i;
    % ^. m4 y5 }& Q, i- D; j
  648.         CDC *pCDC=dlg->GetDC();
    : O2 M) D3 J+ r$ D" i7 `
  649.         HDC hdcwnd=pCDC->m_hDC;* e0 V. V. q$ @" Z. j6 F; f* H
  650. //        Graphics graphics(hdcwnd);0 l# U. U0 b: n3 h3 ]8 O6 B$ ]
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");% ?& s! c1 V4 W% `6 |
  652. //        INT iWidth=bitmap.GetWidth();
    . l; g8 x+ q8 |% e
  653. //        INT iHeight=bitmap.GetHeight();
    8 v" E9 p3 t: ^! r
  654. //        Color color,colorTemp;
    : i$ _' v, z, L! n7 i9 g
  655. //        for(INT iRow=0;iRow<iHeight;iRow++); o, |$ t3 j& K5 ?8 G8 |. V
  656. //        {! q; e' K' D8 {- b! g3 \
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ) H8 I; o! \6 \
  658. //          {
    % N+ A7 t" W7 Z) q9 Z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);! S! l- v/ p  W0 O/ p0 a
  660. //            colorTemp.SetValue(color.MakeARGB(
    , K- n8 P; o9 O: j
  661. //              (BYTE)(255*iColumn/iWidth),- w+ |: S2 X3 i  E2 H/ J3 s* _# C
  662. //              color.GetRed(),
    & s  G! G( p( H; [
  663. //              color.GetGreen(),; i& [9 a/ T& e1 [4 O
  664. //              color.GetBlue()));
    " z4 K/ O4 s% t5 Y# H
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);: u: C$ l  K7 V, B6 ]* B4 B
  666. //          }2 x6 I: V6 L9 [+ S& O( J2 a) A
  667. //        }) n! x, W: t+ e  F
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);: T! _  Q3 l2 i6 i
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & B1 ~5 B" ]$ e. I8 i
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # X2 M7 a& I, s$ o: i. j6 o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " v$ n' [. P( b5 s7 j; A4 [- @
  672.         for(i=0;i<240;i+=8)
    2 t6 C1 [: C, z. P# `+ O/ {5 y! _
  673.         {
    2 d% C/ b. b2 C9 T: }% T; J2 C' D
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; w* I0 m/ n8 Z# q7 Y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# R6 d, t# `. C5 x( T( k
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      [0 F8 Q* @2 F( O/ {
  677.           Sleep(33);! x& M" f9 I- d6 \
  678.         }
    0 R0 U/ d1 h& f
  679.         Sleep(1000);
    % D1 f4 k$ l, \( q9 Y5 n# @: {. `5 N
  680.         for(i=240;i>0;i-=8)' q' G" H7 e4 ~2 g7 |7 z& T! J7 E
  681.         {
    9 B: W8 g6 Q' q2 F6 r) H: p
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . }6 J# z7 {/ ?- t0 C* @
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. m( Z8 F* l( F% q/ W( E; V- b7 A
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * P7 F8 G) v& J6 H' Q4 s6 s0 g/ O1 [1 ?) Y
  685.           Sleep(33);
    . D& V8 s6 q( U7 Y7 Y
  686.         }0 i5 g1 J) Z4 p# ^1 W! Q7 {4 B, q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    $ _1 c( e, h$ X
  688.         dlg->ReleaseDC(pCDC);
    ( ?+ p1 x' f  z
  689.         DeleteDC(hdctar);9 i: k& J6 B2 u$ t1 ]+ u: M! |
  690.         DeleteDC(hdcsrc);
    8 R1 c4 j- E  D+ w1 P9 x
  691.         DeleteDC(hdcorg);
    9 J5 \# h1 p% }' x4 s, ?
  692.       }- j: g/ g2 c3 H( C7 @
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) n. ]& V$ E4 M5 @" ]6 p! P/ F7 u
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 i; A$ p* D8 C7 t- k7 s2 T
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ' ^! t7 i- d7 `
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");6 y- O. o4 J1 Y0 y! ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; ^5 V+ a9 ~" ^% ?1 ]
  698.       if(!Dn.Connected())' y0 ^# Z  S) B' t* E
  699.       {
    # M  }. e+ u1 s" U
  700.         dwTotalFiles=1;
    * R" x3 t8 O: j
  701.         dwDownLoaded=0;5 ^% w7 N/ t3 C1 r+ f
  702.         bSilentStep=TRUE;& @5 p9 s3 `1 A1 g5 y- M
  703.         bCompressed=FALSE;
    # ^* u$ s6 `9 J: a& P& x
  704.         strExtLocal.Empty();
    1 J% [8 n: ]6 [9 ~) U7 `1 \; {% K$ `
  705.         strFullName="readme.txt";- F' }$ w( L7 l" j$ D
  706.         dwProgramState=AP_CONNECT;% u. i1 m+ X$ }9 ?! z" S
  707.       }
    : ]% W! C7 J" e, C
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    8 r# @2 l; E5 I+ E# V; v
  709.       dwStartUpSteps=2;
    9 d( _! J/ A  |  \
  710.       break;
    " D  c5 g  e5 E* c2 ]1 I! {
  711.     case 2:
    1 e! S+ P' q* M1 h
  712.       {
    ; O, J4 E* f' ~" n, X8 S
  713.         int iEOF;
      _. C) n8 X) k/ k8 t: O$ P
  714.         FILE *fp;' I% }  P0 N" Y- s- G1 y3 A
  715.         char szString[512];: P' v! M# R8 Y( z5 F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' D( W% |; p' X6 Y$ \
  717.         if(fp)+ o8 @1 }6 {6 t' n
  718.         {+ c: _! [* [$ l% ~7 @
  719.           do, l4 K* J( Q6 F* z
  720.           {
    0 |. O+ V9 d3 K! i4 g. F
  721.             iEOF=fscanf(fp,"%s",szString);5 K5 p% f. ^+ C5 ?
  722.             if(strlen(szString))  Q8 D, n) C& M4 d% N& W5 n! i
  723.             {
    " H8 L; W- [0 @8 ?) W8 |
  724.               if(bFirstChar). J3 K$ S8 d5 J$ p0 H
  725.               {
    5 \4 V2 S) L0 z2 r
  726.                 bFirstChar=FALSE;
    ) s/ k! U9 R& x0 I/ G+ n% }' Z. o) T
  727.                 bConnectIsBig5=FALSE;
    : E/ @5 L. Q4 P: y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;/ X- M# b  y% i) M; u
  729.               }
    , C* k/ n; \, {# ~& r4 _/ R5 I0 M
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    * D3 x" u" P% r7 y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    7 H. Q2 k0 U, F) ], R
  732.               dlg->m_ListText.AddString(szString);
    9 s" X6 `: ^) y2 ^4 U
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + G8 g: ?/ i( k% x" w
  734.               *szString=0;
    9 w" z: T% M: ^6 {* w) [. b
  735.             }
    ! c7 Z' n& M% W2 }
  736.           } while(iEOF!=EOF);
    5 W! r* i- w  c; V5 X4 X
  737.           fclose(fp);
    & K% j$ W7 v% K  Q
  738.           unlink(".\\DownLoad\\readme.txt");1 m2 B0 g2 T7 ?! B( c9 Y
  739.           dwStartUpSteps=3;5 t  {/ [: Y2 D, F. n) f7 ?
  740.         }3 l9 }/ x. N& ]/ E7 u  y' ?
  741.       }
    1 ?+ L0 c" @5 i+ U: U. e
  742.       break;) K+ g' h8 _, y; `( }1 F# r
  743.     case 3:) F: Z* A, M. n, S
  744.       if(!Dn.Connected())8 d# Y* j, C7 c, |( S6 C
  745.       {2 R$ p5 L6 b2 Z; Y) y5 l
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);5 Y" Y4 \- x* `8 _! u
  747.         dwTotalFiles=1;
    1 \0 F, E$ {, y! L% }+ T2 e
  748.         dwDownLoaded=0;0 F( y. }% ]( e4 ]: l; l% I
  749.         bSilentStep=TRUE;$ n6 a- T7 a1 H& S
  750.         bCompressed=FALSE;
    + q$ p3 O( ?& N+ P5 }' R7 r" q
  751.         strExtLocal.Empty();
    ! X) m6 `4 Z2 Z" v5 i- X
  752.         strFullName="checkversion.txt";
    * o# o: P8 T# i# I2 x5 w9 ?$ K
  753.         dwProgramState=AP_CONNECT;
    0 \5 Z& N2 f, |4 b
  754.       }5 m; ]1 D, x+ Y2 U
  755.       dwStartUpSteps=4;: D  |! z+ }' \, E+ m- B- Z" A6 q' v
  756.       break;; r" z& x) Q. H% v4 w! Y$ n
  757.     case 4:; j. X9 J( w$ |& \9 m
  758.       {
    $ A2 m8 {* }: d+ k+ v  n3 s
  759.         FILE *fp;
    " G9 @; b3 b/ C! A0 x8 A. @9 y, ]( R2 b
  760.         char szString1[128];
    & |6 S. Z; I& Y
  761.         char szString2[128];
    ' m% M$ K, v6 y
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");. Q3 {. C4 V6 {0 s+ E& g7 f
  763.         if(fp)
    - H- _" Y5 z5 T, ?( R
  764.         {1 r2 B2 v2 L9 s( W! U5 E4 @1 F
  765.           fscanf(fp,"%s",szString1);* \6 `( g3 @6 J. C! n
  766.           fclose(fp);
      ^: r8 H. e7 c8 V& E% Z: Q" j
  767.           fCheckVersion=atof(szString1);
    , J" f4 r+ o3 ?  k" K
  768.           fp=fopen(".\\checkversion.dat","r");
    : H) m8 D( C3 C
  769.           if(fp)
    % G) }1 a8 o9 g1 X9 X  W3 D
  770.           {
    # ~5 s1 @+ V$ q9 J; i3 Y8 r$ C
  771.             fscanf(fp,"%s",szString2);+ N4 V- {% H. |5 j
  772.             fclose(fp);  }# T: z' r0 q' O& x3 S
  773.             if(atof(szString1)!=atof(szString2))8 I0 o* a% `/ E6 d  c
  774.             {
    7 U* z! D4 J1 Y9 D8 D6 U
  775.               if(!Dn.Connected())# Y! o' i1 @' X# m  V
  776.               {
    $ M$ {6 s, v% w0 o
  777.                 bFirstUpdate=TRUE;
    # C6 u8 m9 w9 n; @
  778.                 dwTotalFiles=1;$ `' `, e5 J7 o+ c0 U& c/ ^* i
  779.                 dwDownLoaded=0;
    $ Y# C/ ]: W. [; I$ ^
  780.                 bSilentStep=FALSE;
    5 b& Q; A  D: X/ l
  781.                 bCompressed=TRUE;
    ! L) V2 S( A- g6 f: `+ m  d
  782.                 strExtLocal=".\\DownLoad\";" }& A" w, C# t/ A
  783.                 strFullName="update.txt";: F4 N+ k0 ]" R% r4 g
  784.                 dwProgramState=AP_CONNECT;
    : N2 J& B0 C9 x2 ~$ K
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 G+ B) u: ~. C# Y  ]
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ h: H# R9 d; ~1 V% ]" v7 s7 x
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % X3 _6 W5 R  Z/ d- f

  788. 7 K& v6 ~8 x* F+ U% R7 n
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " t6 J1 l0 g7 a/ _$ J, V# i5 v+ W
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ; M: F4 T& V2 E3 t- u& m9 X! b* Y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / b9 D" r( L" w, m0 J; j- Z3 F
  792.                 {0 I/ X& J, ~" ~3 P" h- Y6 r# d# l; l
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : H: C2 i" l6 o/ _" G
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");0 a+ a3 q4 F2 A  g2 p. c4 e
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ' Q4 B0 i4 k# q7 b; E
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 z& B1 I& T) g

  797. 9 I1 r! _+ S% ]) |
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' z' A; A! {- |# R7 x) {4 w3 T
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 j4 F, \6 }& \% e
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    # A, @( t% ]9 l, }
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ A  t, A! ]. B" b
  802.                 }
    " z3 A9 v5 s7 h" X2 y  e
  803.                 dwStartUpSteps=5;
    6 n1 P3 D8 o+ l+ I
  804.               }
    7 E+ G$ ]0 j! Q4 g( B: C
  805.             }
    + S0 W1 U4 D$ X  J
  806.             else
    # s: m& S' y3 E3 f- c
  807.             {& K7 b0 ]! v4 H4 }
  808.               unlink(".\\DownLoad\\checkversion.txt");( [: U% E9 t# m8 i+ ~* R* L% z! U! |
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / A) s4 N9 ^7 N8 l: I3 G4 T2 L
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ! [2 ]9 ]2 ^( ^, D
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    * y2 o6 u8 p, Z
  812. # z0 y# V/ y& X4 S1 }5 Y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 _0 m+ _+ Z- J; s# j7 J0 ^
  814.               dwStartUpSteps=99;
    " [4 x; h/ r9 f4 l
  815.               bFinishUpdated=TRUE;. U+ m4 x6 m5 q' P- C: C
  816.               bCanUpdate=TRUE;
    1 N9 t# }  P9 B7 p3 a
  817.             }& z- o+ C% f$ z. C$ m* L( a" x8 m2 \
  818.           }
    , \3 r8 O  U. V
  819.           else
    - F7 _2 }% o' o$ P" R  b# Z
  820.           {  J3 k) H5 N# E( w; p/ J
  821.             if(!Dn.Connected())
    . g/ A/ S/ R# Q; P( b
  822.             {( o, }; Z3 A+ y7 j, Q" G& g
  823.               bFirstUpdate=TRUE;) r5 d! N( D: s7 W: j7 m
  824.               dwTotalFiles=1;. n4 w6 ]) B+ h1 H$ r/ o& O, S! j
  825.               dwDownLoaded=0;) W/ h5 ^2 D  ^+ `  }
  826.               bSilentStep=FALSE;2 ^9 K/ y6 f. ~* ~3 m3 F
  827.               bCompressed=TRUE;$ q* |! g! x( o9 D
  828.               strExtLocal=".\\DownLoad\";3 [2 I% K4 B4 Z8 f
  829.               strFullName="update.txt";
    6 v- `5 Z  K3 T2 V8 `
  830.               dwProgramState=AP_CONNECT;
    1 m' B9 A9 {# c. I; ~
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 |) d' [' _: v, u3 |1 u7 W
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ' @9 ?0 X2 h1 Z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) l- V5 ~: ^& i6 G+ P
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 [6 ^+ T1 H9 x2 u6 Y) N
  835.               unlink(".\\DownLoad\\checkversion.txt");
    6 k  G& J5 R  k  j; @) `% P' l
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)) k. k5 e' ?& |. ~4 ]4 F' R/ B
  837.               {4 z# ?$ }/ v4 k% k
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    7 u% o! _  B9 b- z, _/ |
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ! ~3 G* h8 t; z- _7 y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");6 F8 _: x9 L" A# i
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% W. }- a; p: Q6 L& s4 m
  842.                 1 W# t: q( Q; l" Q! f. y2 {, r
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % o: [4 ~' n  v& L( l2 }- r
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    8 R4 t1 @4 M, _% x" P
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");/ J+ {  {) v5 A  e) w
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . W# I! ~5 c2 o7 C, e0 z2 a, q
  847.               }, e+ z# H/ T  G- W' S
  848.               dwStartUpSteps=5;
    4 q. \0 P0 u: Y* \
  849.             }& T7 H9 e% \' \4 K
  850.           }
      t; {; ]6 N& }1 ?9 E$ F4 w  n
  851.         }# [2 Q( X- U% {$ h
  852.         else
    + t4 l  x' F0 f! K/ a
  853.         {
    8 ~4 k0 g9 X' [' r1 n" Y* i
  854.           dwStartUpSteps=3;
    ' T0 X/ I% {2 X" J. f" G2 C
  855.         }
    % M; ^9 f4 `* X, p& [
  856.       }
    4 @: y8 {! ~. A" H, f
  857.       break;1 ?6 O! ~3 }6 ?) ~) H3 V6 W
  858.     case 5:9 _. V/ L( I# s! l1 Y5 L
  859.       {
    7 }, [5 V  G( c
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)! L2 }/ B! [; K5 @& v
  861.         {, v1 S4 D9 {9 U4 }) K1 M
  862.           int opt_overwrite=1;
    / t- P; X9 S9 Q$ {2 w
  863.           int opt_do_extract_withoutpath=0;# j% p7 {; Z/ v1 T! \5 U. b. B
  864.           unzFile uf=NULL;
    , C3 ^$ Z/ P, u- K( Y6 Q0 O  A# K
  865. 8 k& q1 O+ [) p
  866.           uf=unzOpen("Wsa.zip");  w( q2 _/ u. a( R9 G
  867.           if(uf)
    6 s* D5 a4 r- q9 x: ~( F% _
  868.           {+ S. X1 Z! `  I# h6 A
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);& {( S/ l/ h& [1 V3 M
  870.             unzClose(uf);
    , _3 S, d0 _, G
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    / a. U3 G& O/ E/ Y( v* R
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    % d$ q2 L% Z) n4 W" Q7 T8 |
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    7 T) f4 ]( m, @
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: c6 }  S6 w; a/ n  H
  875.           }* b: P3 h: p  ?
  876.           DeleteFile("Wsa.zip" );
    * c* f& `3 {4 K6 T8 ?6 A
  877.         }3 ]) T9 s/ ], A! Z* d. z

  878. - k% Q0 z2 B8 ^$ O
  879.         if(CheckLocalVersion())6 z5 z0 }2 Q+ F% d1 d6 }
  880.         {4 s) X3 _: q& |$ l6 B7 f
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");- V1 u. i+ r) l( I. y' o& D6 n
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");- e$ I$ K( l* v1 L. U
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");/ L7 ]9 X) e7 O# @7 `! ^
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) o1 @8 m7 P3 G  q# S
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);) T: J5 L( C9 V! J/ a4 T" _% D
  886.           dwStartUpSteps=99;
    # y% s! T. J1 F) r% `
  887.         }
    & w' ~4 s9 V5 e" Q; O& |: Z2 s
  888.         else
    8 V. u( k7 a3 S: A0 m
  889.         {% w: ]& i( M- C+ P1 }+ _
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    0 z3 _+ u+ L- V- y
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    * r8 }3 G4 m& M3 F: ~4 h, N
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");' }2 P1 j9 v% P# M/ k8 _( u* ]

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

# d! @8 [) r- P; W( ]* v1 ?5 T' K  p/ t  L" l: @

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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