CSUpdate.exe源代码

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

# O' q8 Q3 a) u) K6 Z. H' P
  1. / RevApp.cpp : Defines the class behaviors for the application.6 l; F; y! O: o) D1 A
  2. //+ o. \2 P3 r1 n$ I
  3.   K* ^% ?! ~' v+ U; I# `# X
  4. #include "stdafx.h"0 u6 S' p! Z9 F" Z! K) e9 K
  5. 9 Z$ v1 j- f8 _1 H  w
  6. //#define UNICODE
    9 P- b  i! i. V: g
  7. //#include <gdiplus.h>' R2 u7 g* [9 q$ X+ c4 x, |& U
  8. //using namespace Gdiplus;
    : u7 Z! a  w9 B) J
  9. & ]; z9 o  F. `# t5 C6 Y! a
  10. #include "RevApp.h"/ h; m/ A( s" Q7 S& Y
  11. #include "RevAppDlg.h"+ j7 d- k2 Z: m/ e  I5 [

  12. 2 \- E& a$ f& Z- S2 R6 n4 B6 I9 a  r
  13. #pragma warning(disable:4786)1 p: x( q7 l! c+ m6 q! h$ P- M
  14. #include <map>
    0 G- m% h" D' @2 k
  15. #include <list>
    7 |; f1 ?# C; W$ k! b
  16. #include <direct.h>9 r& p- M9 }1 l% C0 L2 ~2 ~3 }

  17. 6 O: P3 l" Y* W$ u+ J
  18. #ifdef _DEBUG/ [* K' ^8 w# |
  19. #define new DEBUG_NEW) k1 [- G5 s  m8 t1 b& ^. x6 d
  20. #undef THIS_FILE' W5 F# V) T9 A  J' V! j# A9 |, {
  21. static char THIS_FILE[] = __FILE__;
    2 ?5 ?& D7 e& n
  22. #endif
    + K  t. I9 Y( |* z4 o  r/ U* a+ T
  23. #include "SkinResDef.h"
    # z9 x. J/ ~  a* K
  24. #include "ChangeBG.h"
    9 V( ~  L# r& P* r
  25. #include "AFXINET.H"1 q, H6 z8 d1 n1 Z& Y7 V0 z+ I5 `
  26. ' z: T' w/ g, H1 b
  27. #define TRADITIONAL_CHINESE 0" S9 `* w; _$ ]" P! {( d
  28. #define SIMPLIFY_CHINESE 1  \9 F% p" z4 R$ g9 m
  29. #define ENGLISH 2( J2 [* n) j8 l3 [) j' m, S
  30. int m_iLanguage = ENGLISH;! Q! s! |$ o, P" l0 Q' b7 b
  31. ////////////////////////////////////////////////////////////////////////////// p; ^% `- y- O
  32. // CRevAppApp
    - w* E% R5 p# j; l

  33. - t# H7 A$ }! `# e' t  N9 o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    - c1 ~) N4 }: ^9 _! {% D
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ! E' E0 ]1 L2 D9 J; l$ ~4 E6 S8 K
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.  B; `  z! q/ T4 K$ Y, ?2 h
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 u0 q' T- g3 {- ]. I3 K& V1 f
  38.         //}}AFX_MSG
    4 f, m2 b; A3 A/ p5 {4 z0 e) O
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    8 Y4 n# t# p/ V6 w2 L* K
  40. END_MESSAGE_MAP()# V/ i4 |! }. |) J. m7 u
  41. 0 n( N$ D' ~) p4 B1 M9 M4 V
  42. /////////////////////////////////////////////////////////////////////////////
    - h) s! M/ x8 r  c9 U7 L" w
  43. // CRevAppApp construction4 O0 M$ R) [) w! ?- h
  44. , p' w. Y4 G/ |! i( ]1 C2 J
  45. CRevAppApp::CRevAppApp()
    % k: [0 o1 z  V
  46. {( n, ]+ @( @4 m( c$ F: }  }" [( ^
  47.         // TODO: add construction code here,
    3 E, I! A3 X* D. \2 l1 Q  }5 @/ f- Z
  48.         // Place all significant initialization in InitInstance# v4 Q* O- S& Q' T& f# L1 p
  49.   bDisplayIsBig5=FALSE;
    6 F; P% L/ k: Y
  50.   bRestartUpdater=FALSE;
    * V  r- k0 p, n4 U7 t* i# _' o. i
  51.   bFinishUpdated=FALSE;
    + T  L8 M$ h6 e$ G7 w2 o/ L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ Y/ m4 @9 g; b$ y
  53.   InitChangeDataBig52GBKS();2 W& `* _) K2 p" h- B
  54.   InitChangeDataGBKS2Big5();
      `! F# z) ~8 C' T7 t; B2 n
  55.         //) d& ?) v) b; }
  56.         bClickRunExe = FALSE;
    9 x- C3 i7 G, f
  57.         //
    8 t* x8 N) u# j% E
  58. }
    9 @5 \& `& L% O4 V

  59. ! [; g6 D8 D; w' A2 D& m9 D. v
  60. CRevAppApp::~CRevAppApp()
    . _+ M6 V$ b" N! B4 {2 g
  61. {
    # q% k3 s$ a6 V# L
  62.         // TODO: add construction code here,
    ; d! H+ v6 C" k; z- P
  63.         // Place all significant initialization in InitInstance2 `4 C/ h3 l6 U; H7 R
  64.   EndChangeData();
    , A0 u" U( H! J1 I, x# z
  65. }
    ) S1 c  g- h+ C3 W' c; h

  66. * h9 E0 ~9 s3 y( W3 S. @, J
  67. /////////////////////////////////////////////////////////////////////////////* j1 j; n: a# B, c
  68. // The one and only CRevAppApp object
    + c+ r9 L; U1 G- e% Y% \1 i

  69. . {1 M/ w4 Q6 s) ]
  70. CRevAppApp theApp;# n0 h+ z: ~9 p3 _4 [. m

  71. ) C' R3 w& U6 n1 f$ `1 }, X5 |) v' y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)( R# q4 H' v. ^* w+ E6 f
  73. {5 l# S  P5 w9 U: d, H4 s6 C
  74.   int iEOF=0;
    ( [! V" r' ?. |8 I+ M4 b7 p
  75.   char szTempName[MAX_PATH];. V$ u1 a5 x. f. C6 u- d2 T' d
  76.   *szFileName=0;
    , @9 [; o3 B5 C2 d; p' N
  77.   iEOF=fscanf(fp,"%s",szTempName);5 D6 y+ G7 U$ X/ B$ p1 s
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')$ U7 P' k( w6 F; s
  79.   {/ r& ?2 y) {/ [8 h! X/ ^
  80.     strcpy(szFileName,&szTempName[1]);
    3 @2 j4 G+ F+ D2 `; Z) U4 u/ B# b
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    2 d) A: U1 s- u& W4 _8 X. |2 G
  82.     {
    , k: n; Q& k9 R6 f9 c5 N
  83.       iEOF=fscanf(fp,"%s",szTempName);
    6 e/ L2 `1 e8 Z, N
  84.       strcat(szFileName," ");$ q$ n; u, `& S0 ?# ^! r1 d
  85.       strcat(szFileName,szTempName);
    / L' @2 @. G, s6 Z
  86.     }
    4 S" N: z7 I( x: j0 D* C) E; Z
  87.     if(strlen(szFileName)>=1)
    7 Z3 F2 H& Z' {1 o' o9 `: q: B$ g
  88.     {
    - U. T1 M9 }9 ?! f9 h2 D9 J) ?
  89.       szFileName[strlen(szFileName)-1]=0;
    9 t2 W1 n6 U' K: e" ?" F! y' G
  90.     }
    1 U1 D! E! x: B4 F$ O
  91.   }
    7 h: `4 ^8 A! p8 t* P! L. r5 m
  92.   return szFileName;
    ! C5 C4 ?2 U- f: a7 F& p, R
  93. }
    & C' z4 Q; S" t% p( I+ Z, A
  94. + ?  k+ t) h; ~8 ~; t8 I* p
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)2 M0 G0 z8 P2 F5 _8 T4 X7 x7 x2 n! T
  96. {, D; q$ J: B3 e; O3 R! t7 D
  97.   FILE *fp;7 w: s; a: ~* q& o
  98.   char *key=NULL;
    9 D/ u0 q) L& @0 j
  99.   char version[MAX_PATH];3 s( {, \  ^4 p  |0 D
  100.   LPUPDATEFILE file,olds;
    6 K/ v" D, \/ m2 `8 [& V7 t7 e
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 _# p" K5 E# U5 d6 P
  102.   R, I& y0 O; T5 M2 Z6 o7 ?. e& ]
  103.   UpdateList.clear();
    5 t- ]9 X& A6 F- L( f# c/ S
  104.   UpdateFile.clear();) J- X/ H1 M- ]' N
  105.   if(GetFileAttributes(filename)==-1) return false;
    - L4 U# H3 l; N
  106.   if(!(fp=fopen(filename,"r"))) return false;7 _% U! u$ q( S7 ?2 C& P) H
  107.   fscanf(fp,"%s",version);
    / K. W3 ?. a  W2 D: ?; M
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    - u. h+ T- ^. u* S: n
  109.   while(fscanf(fp,"%s",version)!=EOF)1 g" r$ D5 z; O. @% Z' g7 m) g
  110.   {8 p1 y) q! S, A! U# d- U
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & I2 C- P# \3 q% p& E5 \4 L* B
  112.     fscanf(fp,"%s",file->path);
    / m' z9 h( _) O
  113.     ReadFileNames(fp,file->file);
    4 n% Z% K2 `" D% q
  114.     strcpy(file->full,".");  [8 |3 O# T. u; J
  115.     strcat(file->full,file->path);
      u, B4 A! s1 |2 y- x- B. V
  116.     strcat(file->full,file->file);
    , t6 t6 e1 C- _" o: G
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
      b" F8 t. s$ z$ D
  118.     {: U2 I& m( U1 t4 ]% Q6 Q  I
  119.       file->vers=(float)atof(version);
    3 S9 z  M: g& |: Z) C
  120.       UpdateList.push_back(file->full);
    ! f9 E, l/ J* D3 H
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));/ {  l& {. l0 k% J( S* [
  122.     }
    ) Y6 J7 e  E* C* t6 w3 Z. P
  123.     else
    . W1 x9 Z# x: q1 |6 |/ ]1 {: I
  124.     {
    2 ^" h& @: ?/ T% H$ e
  125.       olds=(*p).second;6 T% R4 ]6 q- s/ U( I3 \9 E& s3 D
  126.       if(olds->vers<(float)atof(version))
    5 e1 P& {+ e+ v( e0 t. Y
  127.       {
    1 z! R8 {( }, X4 n; w! A8 r$ _, e5 y+ \
  128.         olds->vers=(float)atof(version);1 X  E+ W+ ^" q8 D+ f
  129.       }: k+ i' c" _* e% [
  130.       free(file);3 C. z7 Q; K" ~( p6 O) g  [$ \# Y
  131.     }
    6 m- ^# a4 P5 l5 o; P% K
  132.   }: F! _, f) B9 w* F) h$ B( {
  133.   fclose(fp);
    # E3 Z2 b6 y& ?# y9 O  w
  134.   return true;
    + d. `. t) I0 u4 z4 T5 P
  135. }% ]. \. h4 X; E) [4 O0 t

  136. : @9 x0 U& ]) y; e8 w) h/ m+ p
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    0 p" u3 n" \6 h; I* V
  138. {2 J& T( z% r& ?# k* f4 M
  139.   TCHAR  szFull[MAX_PATH];
    9 _- k0 X4 u8 {, u/ S/ _% m* Y* L
  140.   TCHAR *token,*inter;7 X7 R# M- m& P8 l- h. b' v
  141.   *szPath=0;
    / u) A8 f* h! H6 @' m: v
  142.   strcpy(szFull,szFullPath);% J: X( T% s- P; y# p3 p) Q! b
  143.   token=strtok(szFull,"\\/");7 p4 m2 k1 v* z& r/ x$ U  [$ i; ]
  144.   inter=token;
    # ~2 J8 [, o& D+ c
  145.   while(token=strtok(NULL,"\\/"))
    1 a( j! R, X+ d) J: q- K9 c0 t
  146.   {6 s! F% I/ O* `4 ?9 d
  147.     strcat(szPath,inter);& @0 z; X0 W7 O5 w' S# o# S# ]) F
  148.     strcat(szPath,"\");3 I4 R, R. o) X7 J- C- F  x; ~; h, {
  149.     inter=token;
    % C9 Q. S# q: s9 x0 {! J# _
  150.   }. j( b/ Y- @5 _1 ]
  151.   return strlen(szPath);
    # |, @9 N4 L' g7 e3 u" F
  152. }. [, b- c2 [( i- X7 X& t) ?; S9 l

  153. ) t6 ?9 X6 b2 t# H- o- ?
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)3 a# ?' Z7 G5 x( ~
  155. {8 Y  v' A. d8 D2 m5 n
  156.   DWORD attrib=GetFileAttributes(Target);! _# @) _$ w/ ]( q. f4 M4 R  Z
  157.   if(attrib!=-1)6 Z3 P* `2 P" Z& w4 b3 B: Z
  158.   {
    ) ~) i0 Z. X' V
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))) |9 K  H+ e; Z" @! n4 Q
  160.     {
    7 {9 A" a7 u3 ?# F/ y. x
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    2 b, l( R+ U: Y/ W3 e, Z7 O0 E
  162.       SetFileAttributes(Target,attrib);
    6 Y4 E8 X; S( {+ |
  163.     }# z5 ~6 K& Z# l$ R: H
  164.   }
    " L# ]8 p* {9 i% H4 S3 g
  165.   CopyFile(Source,Target,Erase);( b7 |5 p% r3 f/ S; d
  166. }' Y+ F& x. U( s- H9 m6 j

  167. ; j3 }! R' S& _- B1 [9 _
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    , L6 Y- ^# k& u; u) R5 [
  169. {0 m* P+ I# u9 C" c
  170.      FILE *fp;$ A7 K0 {8 C8 M
  171.      char  szBuffer[8192];
    ! w( V- g; {" e# {4 V
  172.   va_list  argptr;6 t! I/ S9 Y: R) A6 L- F( l" t6 Y
  173. : c% z8 i  }- ]" ^  s
  174.         va_start(argptr,message);- S+ D( L7 [& f/ t2 s+ G, z# e
  175.         vsprintf(szBuffer,message,argptr);
    / u9 v0 G: y& P' N% q
  176.         va_end(argptr);
    # X; Y, h/ L! W( B; v4 m: H" ]9 H  E
  177.   fp=fopen(FileName,"a");
    " f; N  O$ K- o5 g0 S; i
  178.   if(fp)4 M% J4 x9 W+ f% `: y
  179.   {/ r5 R5 ?9 ]6 L
  180.     fprintf(fp,szBuffer);# D( K2 m( F; I- d: `
  181.     fclose(fp);
    4 g% w8 a% f( b: z
  182.           _flushall();% v+ Q4 W# H& [; @; K" p7 a6 A/ x6 b. P
  183.   }. z* N( [* \& r
  184. }$ I/ L- N; d1 m& P( ?0 I2 o+ J
  185. ' Z& a4 V& u: t  M/ W6 V" i
  186. BOOL CRevAppApp::Fclearf(char *FileName)9 C" w( _  c/ u5 l8 [# C
  187. {
    0 C0 k. J; Q$ e5 z' A9 T! y
  188.      FILE *fp;
    ( p. {4 D* e) H( V8 _
  189.     DWORD  attrib;
    - R/ s6 `0 ?* ?2 J
  190.   attrib=GetFileAttributes(FileName);
    / p4 @, q$ F/ h: r" I
  191.   if(attrib!=-1)
    $ X: ?/ l: o1 l4 E6 v
  192.   {0 L+ k$ X6 U0 n+ o3 n
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    . O4 ?/ |: a: @. x
  194.     if(!SetFileAttributes(FileName,attrib))1 G+ ~* S( a( K2 K
  195.     {7 {  f, J# r0 X* P3 L1 J6 M! I
  196.       return FALSE;5 I5 ?1 g# m5 W! @5 j8 B3 P
  197.     }
    ( w$ P+ p5 s7 o2 U, b, r
  198.   }4 R( ]4 |/ W# S; ?' C- P; }0 e
  199.   fp=fopen(FileName,"wb");: {: F% s" v5 w) _; s9 m2 h
  200.   if(fp)5 d& @7 A; @# b9 n% D' ?1 v
  201.   {
    % F5 _0 B4 O8 E
  202.     fclose(fp);; n3 f3 P1 L8 ?6 k$ @* x
  203.   }
    4 B$ E4 R0 `$ n# v; c5 K% e0 y
  204.   return TRUE;6 o& o1 n& f7 {+ R
  205. }
    , U9 f3 i, k* a+ |4 A

  206. ! h% z; u7 n* @. @* c
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      ?6 C2 J* |/ t3 m
  208. {2 K2 M. T& H- p* n: e. K$ `
  209.   char filename[MAX_PATH];
    " M% c) \, K0 Z0 N
  210.   LPUPDATEFILE file,olds;
    $ C( T/ C! F4 z$ c! @
  211.   std::map<int,CString>::iterator i;
    8 t* u2 ?# H: Z' c+ }! T% J
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    & f1 M5 i' _( y) r! ]& _: }
  213.   std::list<CString>::iterator l;  p9 D. R* }8 S0 s; ?# \
  214. / W2 K7 D* f# n" V
  215.   if(bFirstUpdate); I" H3 J# D* J& ]7 e
  216.   {
    ! o, L; R  ?4 U8 O
  217.     dwCurrFile=0;2 A% p% i3 c! i$ Z9 Y, g* U" U3 Y
  218.     bFirstUpdate=FALSE;( R0 x* B1 u5 j
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 ]- u5 n0 t# X/ i2 b$ r$ N9 z1 b0 {: W
  220.     {
    , D4 c8 t4 w( ^. U8 D& G9 T
  221.       dwTotalFiles=UpdateLocal.size();, T+ f, x+ t) v' o
  222.       dwDownLoaded=0;7 k- K% @7 i& Y% R# v: Z5 a
  223.       bSilentStep=FALSE;
    $ @/ T- B% f2 W# K
  224.       bCompressed=TRUE;
    : o- P8 ^( }  J/ j6 Q0 C$ |, [0 e
  225.       strExtLocal.Empty();/ V% ^4 @! r* `% a- _1 Z
  226.       strFullName=(*i).second;
      C4 G6 S9 c) P+ I6 U
  227.       dwProgramState=AP_CONNECT;6 x. |6 C6 M. l: H6 J4 q
  228.       return TRUE;
      J( U, U. O- F1 v1 C0 R
  229.     }0 {7 P; G  ]: Q8 E9 i6 b1 I/ |8 i
  230.   }4 F& _5 T  S4 ]# e. G
  231.   else if(bRestartUpdater==FALSE)
    - K3 M$ O2 _9 n2 ~5 T5 c; j$ T% j
  232.   {( Q; ?  C- z6 g: `4 I, F2 B
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ; S2 m2 U- x2 j0 V5 R, q' @+ G
  234.     {
    / h* X$ ]. Q4 @$ _
  235.       file=(*p).second;
    9 e# {9 V+ ]2 h0 [( B! W6 d# L
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())# r8 L% M' K# f8 o* r
  237.       {% |7 i9 ]' `. y- Y5 ^6 b* n9 R5 n3 j0 ^
  238.         olds=(*p).second;3 `& H! Y  U4 w' [3 x3 ^
  239.         olds->vers=file->vers;
    , Z& l' S& ?3 ~: Y
  240.       }! o4 u- U' a% R+ i* A" J3 o
  241.       else
    : o. E3 b( W# r) y
  242.       {
    ( m- T* I- g, T* N; Z4 {1 P
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 J3 _. w* l! c
  244.         memcpy(olds,file,sizeof(UPDATEFILE));- l- O$ o, i) W- Y8 e8 c" K7 N
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    " X: N5 G0 r  O4 U
  246.       }: w2 l, ~, ~9 V3 `
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");& w7 K# W( {5 x* H2 l
  248.       sprintf(filename,"(%s)",file->file);, g8 V: z% j  T: G
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * i2 p6 S4 b( ~$ J
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    # a& O! T# ?- T' Y6 t
  251.     }
    9 S5 F  e6 k3 l3 K* N% I9 c7 Q3 c
  252.     dwCurrFile++;7 L- ~. w; R2 e' q5 f! e  h& z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - ~1 d5 E, g" Z- _+ n3 p; D5 G) k- x
  254.     {
    " j5 u$ q( i+ |* o5 e3 E. O& T+ s
  255.       bSilentStep=FALSE;" _1 f& k! ]* s' i" h/ P1 Z
  256.       bCompressed=TRUE;6 {: f% N. T9 t; {$ o
  257.       strExtLocal.Empty();
    1 Q  a' D; a+ u
  258.       strFullName=(*i).second;) y: A: T- P9 r/ B$ ~* M
  259.       dwProgramState=AP_CONNECT;
    0 h& m$ h$ M- m* ?3 u
  260.       return TRUE;
    $ |3 D; o' T# x1 \, |3 v& r7 y4 o! B
  261.     }4 _8 F9 V3 g; |& n) k* r
  262.     if(!bRestartUpdater)0 G6 f2 L. @: J+ a. @
  263.     {: ?1 w$ s( J6 v& x* S- i7 C
  264.       int iCurrSize,iFileSize;9 I6 \& t0 N" \
  265.       iCurrSize=0;
    9 m) w2 p7 p* O6 A  {, H
  266.       iFileSize=UpdateList2.size();6 [6 ~. N% r$ ~2 ^
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % C) L# K% Q: W
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");/ V) L! ^& @) _* n3 k2 t# i
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    1 t, q  M! g1 D, d, r& \) d& \# a1 W
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 S! B1 L3 G' w/ ?& E3 S* ?
  271.       Fclearf(".\\update.dat");1 q2 r' s; P6 P; l! n2 x' r) O
  272.       Fprintf(".\\update.dat","Bloodyf\n");* y4 h" X( l$ v) J5 h" T
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)+ U' s; x$ ~8 k- w7 ~2 T8 k0 J
  274.       {
    1 f8 h) I( d7 s/ m( Y7 ]
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()), }# z  q" \( M+ w# D
  276.         {7 U4 L4 f; I& j1 @; b, A
  277.           file=(*p).second;' V' g, J# m/ n2 ~4 u! e
  278.           sprintf(filename,"(%s)",file->file);
    , Z+ n' X/ E; E) e
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    . J0 p$ z. ]( [% |/ T
  280.           iCurrSize++;) n) ^! w. c5 w6 n  X
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));1 q" w- q( |! X2 T& c
  282.         }
    0 c2 {9 V  t1 ?2 ~) Y. @
  283.       }2 }, @0 g6 J/ ~) d" c6 u: ?
  284.       unlink(".\\update.txt");
    3 a) ]+ R+ |! p) i: ~
  285.       unlink(".\\update.tmp");
    $ o3 {& W$ G; u4 I
  286.       Fclearf(".\\checkversion.dat");7 q/ Y9 G( u, p8 {4 u0 x
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( _( R6 {1 |" _! B( Y& W2 X
  288.       if(UpdateLocal.size())" i# C+ K* b5 y5 E1 t% t1 i9 y
  289.       {; D  I4 ~3 Q6 b3 K( b7 A
  290.         UpdateLocal.clear();
    % Q: P' y- e1 w  l9 m$ o) N0 l$ u
  291.       }
    3 l$ G6 R* j2 X; g* k
  292.       if(UpdateFile3.size())- \; {. I; s: a) p+ c% M0 I
  293.       {
    ! @) B( B+ w  \1 h& g
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) I+ u3 g5 S9 \) H
  295.         {/ G$ O1 m' T* F7 A
  296.           file=(*p).second;" \; s' G  C1 A9 _5 e- h% P
  297.           free(file);* U! N7 n5 D2 k0 F8 P  n
  298.         }! K- D# I6 q1 [4 [
  299.         UpdateFile3.clear();
    , b" _5 L/ B; f" c4 c2 G' h8 C9 j
  300.         UpdateList3.clear();
    9 ?. R* |$ C) g4 V. J7 X
  301.       }
    , Q. S; G  g# J. f8 _
  302.       if(UpdateFile2.size())
    & l) f' }* r6 W4 w9 O5 l
  303.       {
    0 ], ^. {6 X& y' I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 C! n. M$ I& O) h( E
  305.         {
    / B/ `! J6 k) c; x2 K2 o* \
  306.           file=(*p).second;
    " u  X+ X4 b& ~1 l8 s4 P
  307.           free(file);; H- R$ x+ Y& O3 l' q5 Q
  308.         }3 R) S; m! ^$ o: o
  309.         UpdateFile2.clear();
    ) y  k  T/ {+ k, b
  310.         UpdateList2.clear();
    5 m6 w0 G/ [7 T) m( w4 x+ m8 i
  311.       }) }7 S5 I; H; m( S1 q6 [
  312.       if(UpdateFile1.size()): B% O4 o& {0 z6 N: `- A5 O
  313.       {
    & H, Z6 A% ~$ v! i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ W  B# z, c: G1 y2 A0 T) o: v1 ~
  315.         {6 R; [& d2 {' ~% E
  316.           file=(*p).second;
    & E6 E7 _3 Q9 n% O" Y
  317.           free(file);
    3 ?+ u  `2 Z: Q
  318.         }
    - w7 Q& s; c$ a) r
  319.         UpdateFile1.clear();
    & E0 m1 T- {: e! s% I, d1 e: {+ a
  320.         UpdateList1.clear();
    " Y0 w* r* {$ y2 |: ?
  321.       }
    # Z6 ?# ?1 h$ U5 u5 l
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    9 _- f- x& _) W* G0 _" X& [
  323.     }% K8 m; H% S+ c. p5 |# D% s+ {
  324.   }/ H1 s3 u  n" [0 r9 v" N
  325.   return FALSE;
    * \4 ]' {' r) A8 }; \
  326. }9 p) ~9 N! R" H3 @* {
  327.   Z0 m" b) Q0 d0 p$ @: p8 n
  328. void CRevAppApp::ClearAll(void)2 _4 V2 L/ O5 u  c3 ]; `
  329. {
    , s) z' x) i, }, s+ T
  330.   LPUPDATEFILE file;3 ?# J- ^( Y8 b' ~
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( C4 V8 f* z8 U

  332. / }4 t' P, r' ~* v# x
  333.   if(UpdateLocal.size())2 F8 R. [9 }6 @3 O# p, _9 ~
  334.   {7 ~+ ]- `) p0 |
  335.     UpdateLocal.clear();5 e5 F& ]6 y4 S# Y7 c; L
  336.   }
    ; T2 F( k4 z4 j; R% J, a8 I0 g
  337.   if(UpdateFile3.size())
    2 G, M/ q( A9 x! L
  338.   {
    0 g+ c( i4 K; n/ H" N+ ^! x- _
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)1 k) _' x1 {" j% i
  340.     {
    * a, R; D) M. F( f' L) q0 M
  341.       file=(*p).second;. j7 n* c3 d$ j$ [) V" N
  342.       free(file);+ S- E! W$ \( y: i# X' u0 _9 H
  343.     }5 t7 }% V) u" a
  344.     UpdateFile3.clear();/ O; u$ @, J* Q
  345.     UpdateList3.clear();6 H9 y9 B0 d1 p9 `2 u! w
  346.   }
    , n' M4 {: D/ a& D8 \. J
  347.   if(UpdateFile2.size())1 R# d' G- `, Z" A) c+ ~" j8 }
  348.   {
    ! P% Z+ m6 W; a% V( [
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 T9 D: k. P+ Y. y  T2 T
  350.     {/ |5 n5 ], _0 }# h, g! B
  351.       file=(*p).second;
    & _0 O/ E, S" M- B' L0 U0 A
  352.       free(file);
    2 n8 k* M9 h* h0 J6 v8 D
  353.     }3 d, o% O: l1 I" M. {
  354.     UpdateFile2.clear();" W9 L0 J, Z* s+ J2 R: z, P
  355.     UpdateList2.clear();; Z" G, G, F% H. t% _0 O! z
  356.   }0 _( \& |# p. j/ L# o& q6 a2 L: U* u& F
  357.   if(UpdateFile1.size()). @7 P+ ?5 K# R6 s- S5 H
  358.   {; t' h6 c4 k4 w7 z3 r. R0 X
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; J, @# Z. I& r; s% d3 R- K
  360.     {
    1 T3 n; |# \/ \* p
  361.       file=(*p).second;0 B( V' Y, i+ c% H& r* v
  362.       free(file);4 H+ ~5 l$ x& X0 e) O& R+ B
  363.     }* Q; B- w. k5 Z7 M2 f3 h* A5 j" u
  364.     UpdateFile1.clear();9 Z% J* L/ X  ^; D* A
  365.     UpdateList1.clear();' U5 i* ?7 Q) z' q* H2 i
  366.   }
    ; q- s) [; \  O2 K
  367. }  ; a* ~" x* p; f; z' z; i- g4 ~) S
  368.   7 Y, }3 B( U3 B! ]: d
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    , c: I5 [$ O+ h) J3 \
  370. {9 U: Z, V, ?2 u* F4 D5 u
  371.   int c;8 {& ]% d, K  r  m
  372.   LPUPDATEFILE file1,file2;' w- O( R7 H6 ]- [) i8 S8 O7 N4 X& V
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    # l# k, O8 Z$ `, N- ^  c6 ]- c1 F
  374.   std::list<CString>::iterator l;
    4 z. }5 p9 N' I( K, B3 B. y
  375. ) k8 J8 A3 K$ X. Q* T4 P( H
  376.   UpdateLocal.clear();
    ; W# O" N7 r4 c
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);) ^1 _2 ~& Y, ]6 ?5 u1 v- j
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    % u9 C" i1 T. W# q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);: I% ]: U7 Y5 ]7 v$ K9 b
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);; I! S& K& ~7 b* r1 C4 Y+ f9 B
  381.   if(UpdateFile3.size())
    ; V2 x( L8 {  O2 r7 g5 _
  382.   {9 R" e( {- I. J" y% n: |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)4 N  L3 L3 A: `2 [1 Z) v
  384.     {. Y; j/ M9 Q4 [8 z0 N
  385.       file2=(LPUPDATEFILE)(*i).second;
    ) Y6 ?" ^/ W8 Q, e& l7 d8 l/ x( D" Q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) v- ^  n7 o. K& I# e
  387.       {5 E( q" Y0 W/ |2 k, r( j! n7 W8 n+ B
  388.         file1=(LPUPDATEFILE)(*p).second;) j! J$ N0 N0 p4 O
  389.         file1->vers=file2->vers;
    * H1 B- [* ?5 d  d: y$ Y
  390.       }
    ! J$ p" G+ D! W8 a
  391.       else
    + u, G& ^) d8 ~6 U
  392.       {
      s8 g  s7 e( A+ A- }
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 G- |/ t% n2 ]) ?
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    8 Z( w' A' |0 @
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    * A7 t7 g! c# B5 `, }
  396.       }
    0 H' G1 h# T  o* y
  397.     }
    8 Q2 w% N( J: N
  398.   }- ?& ^7 t! {8 f5 ?
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ V( m0 w/ l: u2 A9 z5 S0 T
  400.   {7 m  W* q4 `: l# h  U2 ?+ p
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ( a$ y  [; p( C6 r3 X2 \
  402.     {
    3 u( i( `% o# L5 o, P9 g) g" L( H
  403.       file2=(LPUPDATEFILE)(*i).second;. @( D9 n$ P6 w0 ]& s
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " N; h2 s! l4 V* Y
  405.       {
    7 Y7 z: D% S+ W: v. s" r
  406.         file1=(LPUPDATEFILE)(*p).second;# h4 J  o9 f  C, M* p" Z
  407.         if(file1->vers!=file2->vers)
    1 D5 g0 B2 s& c: g& Q
  408.         {
    $ T3 U1 b# D6 s; G9 K7 {( t) s8 \
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 h/ m/ q* Z+ {  B- U& a/ m& l4 x
  410.           c++;3 m# \2 V1 b6 g% o7 `
  411.         }
    . e9 T' v# @3 {/ x% H
  412.       }% L0 L, f: |3 W3 G
  413.       else
    ' g; a- U! \! E6 H1 R
  414.       {
    - x5 L' d' m) R- z, Y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 a4 B2 @* P- g, x3 {& r
  416.         c++;- T6 C# x  v- |& {/ k
  417.       }: ?3 _; e1 K6 ^3 x6 [
  418.     }
    : |7 P6 r' V4 k& E/ M9 T
  419.   }& R$ {+ T3 A5 C, c  |' l8 ?" s0 w
  420.   unlink(".\\DownLoad\\update.txt");! U8 E# Q9 [. q4 N" B3 \
  421.   if(UpdateLocal.size()) return TRUE;
    7 W" Z! J+ V. [- L$ f
  422.   else                   return FALSE;. w% u$ ^- y. T- D0 c4 i
  423. }
    4 l( M5 G3 l5 o# E' L

  424. 3 d; ~' v5 ^+ x
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      m; |1 y- p7 E6 J# N
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    9 A2 h  ~8 H) M9 U  T# f/ p3 z
  427. 5 x0 `" N8 ^4 V) W2 j0 r6 C

  428. / X  P! i2 m6 |

  429. $ \# H" I- V7 s8 h9 i% k
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)2 B2 n1 S% ]2 ~( I1 e
  431. {3 O1 j/ y8 d# k, U, n
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;  y2 d# \4 K3 Q. y6 ]- S
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( Q: R( W+ O8 m* a8 P# ?
  434.   {. _, B8 q; j8 O) g( C2 z" r
  435.     char szLanguage[50];, q& Z! q6 c# m5 L" ^1 t+ g7 P6 ?
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 U9 L& }1 i2 k1 `$ v$ r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# ?% @: |5 P  S! h
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 o$ x; p2 K( U# D
  439.     else                                   m_iLanguage=ENGLISH;" {7 ^8 [$ C! f/ H
  440.     char szRegister[100];
    2 C3 c9 I6 |3 @- ]
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & r9 F% b0 P7 u8 D7 @% a
  442.     strRegsName=szRegister;2 Y2 `. D- k% u3 j
  443.     char szPatchURL[100];
    & [5 F7 _) G5 i8 z+ H$ h& F( c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 z( u# Z$ g( L( i( w+ B; b7 C
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);! Q1 ~1 Q( C7 H' A7 G
  446.   }7 [' [7 `4 J6 r( e) r
  447.   else
    8 }% D! K- \. _- ~- b( P
  448.   {
    ! P4 w' E0 f; k7 |# j$ {) d
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' Y0 @1 A3 R/ e! }) G
  450.     strRegsName=DEFAULT_REG_URL;
    : X' d) j) a! c* D0 Q- K
  451.   }
    2 q! O( O0 v& Z9 G
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    / _; _8 x; N& d6 u2 A% C( Y# H( R
  453.   {
    5 D* L8 ~) S( J
  454.     char szIP[50];
    * R- B4 k) E6 y  e/ e
  455.     char szDIR[300];
    % t4 ?6 o# w7 e" W, c/ a6 T9 L
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))# E& f4 {' U  Y% N( w) v  K
  457.     {. S9 s  r9 n' G$ V! ^
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");# H7 Z9 o3 [) h
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");6 p7 L1 t7 d7 }. F9 X) T+ Z
  460.       strHostName=szIP;
    : _: I; H6 }2 Z) U7 d0 n
  461.       strHostPath.Format("/%s",szDIR);
    - [8 @6 D  e& K4 S0 @# t
  462.     }& p2 j! `  o/ f4 h" y
  463.     else
    + D; k$ P; c$ f8 M1 B1 R/ H5 M* C
  464.     {
    ( j) U- P! g6 @1 Y' r/ E, }
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) A( p6 x/ A% b9 C/ l: i
  466.       {5 k8 W- T& j9 k# n# o) W2 {) H
  467.         char szLanguage[50];
    9 a& C# s% ^6 e7 |0 F
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* J/ u8 b% |6 Y- b! {
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 l; v  r) h; C/ Q5 P  [) D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / [; x2 o  Q3 Z3 o. b
  471.         else                                   m_iLanguage=ENGLISH;
    2 r; k. B- g- V: I
  472.         char szRegister[100];/ c7 J& L" K) n- K; S/ `  L: G
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 E9 h+ X6 a( U5 H
  474.         strRegsName=szRegister;0 q. i- G# c* B0 V" Y
  475.         char szPatchURL[100];
    " N- E% e! U' F# E1 z
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 o+ `* I, h$ T( F
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ J% D' y4 E5 v% x7 p1 J6 ?/ i
  478.       }- U. u" y/ r* ]. A7 `
  479.       else7 A) E7 H$ a# d# P6 ?
  480.       {; e" K- a0 n! P- R! w5 E! m( y
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( {+ \9 b' F) H5 f! b
  482.         strRegsName=DEFAULT_REG_URL;
    & f* @8 t0 v; |$ R# u' b
  483.       }$ ]' e/ I/ t' u- Q' v  [3 H9 `
  484.     }
    # i, Z$ V/ }3 m
  485.   }  t- A6 U5 l; i+ D- n
  486.   return true;
    : c4 P5 U# f. h+ I0 l. u8 Y
  487. }
    ) r, o8 k, Z  A2 E2 w! y2 A- J7 d/ O

  488. ( L' j1 b% U( c! O4 j9 P! o+ ]
  489. #include ".\ZLib\unzip.h"
    ( p: Z' E9 b) g. [
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    9 [6 n4 M; q- t0 D. Z
  491. /////////////////////////////////////////////////////////////////////////////
    % B" F  ^9 t: j- z/ u
  492. // CRevAppApp initialization
    6 K( {' ]' n& Z8 m/ \

  493. % @* g$ }& B$ c
  494. BOOL CRevAppApp::InitInstance()1 z, D( I3 J4 c! \( h
  495. {6 U9 Y* n: p+ c( d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];: P9 \- ?' m, k: [
  497. 1 \; F6 ?2 L- j1 O& e
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / T2 y. u  e6 m+ ^& t) l! e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))! ~$ p! L% |. ^1 H" D/ d
  500.   {; i  q) p2 j0 Q  v
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");% i* U2 D. n- z* W
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 v  K$ X5 ~& p8 R
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))& c/ @8 U; N  ~( Z
  504.     {
    1 e$ P6 _/ k3 e1 n- @( L
  505.       strcpy(szPath,szPathTarget);: c2 r" L( ?& c+ f" v0 ~- J
  506.       SetCurrentDirectory(szPath);
    1 ?4 [* {9 M5 T0 p
  507.     }
    " W6 o4 V/ S  }& F* Q
  508.   }
      q% c# c7 h# r! \/ p: Z2 j
  509. #ifdef _DEBUG
    - c1 H6 f% y- }4 @$ J/ h' S+ w
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , l& g" J3 Q$ j" c% Z7 P3 n
  511. #else4 _& h2 a$ |6 ^/ x6 h4 B
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    1 g* s7 Q. ], c9 R' N9 g, j
  513. #endif
    ) I& I$ n+ `8 d% V  h
  514.   {
    : ?# r/ E) f/ _$ z) g7 I& }7 e
  515.     char tempFileName[MAX_PATH];" L+ l6 C: D% S, j  F8 ]
  516.     strcpy(tempFileName,szPathSource);# U2 Z2 g( q0 [3 w1 Z
  517.     tempFileName[strlen(szPathSource)-12]=0;4 V( V, k" |4 R+ w0 i) @
  518.     strcat(tempFileName,"\\$CSUpdate.exe");) J; T! k3 s+ d3 S7 o9 U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);# }( d+ t* p0 L4 Z+ V0 G
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ c! L' R' M% V# n2 j5 N9 C
  521.     return TRUE;
    + h- E- }& M2 B4 O/ u; C3 z) |
  522.   }4 y5 \  O( u2 ~8 R4 l/ c8 Z
  523.   // Nuke 0118: Delete run.exe
    . e: x7 M7 C9 ?
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    + O* d: n  \' N
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    : |7 v4 t. h2 ]. ]# v
  526.   if(!ReadCfgFile("Config.ini"))
    . h( b9 O4 s# O/ ~) f* W4 l
  527.   {9 n/ m9 F  {4 q/ `) r2 w
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);; X' h- Y7 q3 v' ]8 r6 [* n$ h
  529.     return TRUE;  \% v$ Y4 P3 {/ J1 {8 E) w8 }: Z
  530.   }: O, _( B9 |) }! A* d0 D8 W
  531.   HANDLE mutex;7 S6 ^) z  {* j# J! R2 Y; H
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 V" C( q/ Q" [) ]
  533.   {9 T0 Q; e) p4 o) Q' q. ~
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)7 K- c9 L" p0 z) d! l
  535.     {
    2 L7 e: U% e0 M9 Y9 p& {
  536.       CloseHandle(mutex);4 G9 C" e2 j' D- V+ j8 F5 y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);( T2 Y. k4 C4 H, e. \/ k6 @
  538.       return TRUE;# E. w9 l6 N" C0 H8 e  t) o) _6 b
  539.     }
    + O1 k) e6 n$ |* ]3 Q) ?( a
  540.   }  
    7 L4 [9 e/ U) Q, _$ z6 E
  541.   CloseHandle(mutex);6 x4 ]+ @0 D  x' T5 z/ n2 i$ b
  542. & B0 L0 J! f1 h( f
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    $ m5 R9 o2 `9 ?- O, ~! {* o6 |

  544. & X: S  ^0 ]8 X5 ]7 k: M
  545.         AfxEnableControlContainer();0 }, N6 v  w7 S- a) U4 g/ ~
  546. " z4 ?% _' f( x  ?3 F
  547.   bCanUpdate=FALSE;
    * f" s" _: Y* z1 F- w3 [" {2 F. E) A
  548.   dwStartUpSteps=1;, ^( Z4 n- f) p/ P( P# l
  549.   dwProgramState=AP_NOTHING;
    1 o9 A, x6 @; j3 c6 Y( z9 k6 d
  550. # f3 c4 j* J, d- R' v
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);6 L! f3 m. t2 P7 b

  552. 6 H. J) Y6 _6 O( ]7 T* S
  553.         // Standard initialization
    - e( R8 X5 o  _
  554.         // If you are not using these features and wish to reduce the size# m8 _/ ]" D) v) M- A
  555.         //  of your final executable, you should remove from the following* j" L# L( f% N9 L* G) L; V
  556.         //  the specific initialization routines you do not need.
    . G0 g1 U; T9 Y0 A% F
  557. , ^$ |0 {- [+ h/ d
  558. #ifdef _AFXDLL8 }6 {( y3 K) v0 g2 W
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL4 V9 B5 b) P; Y. V% f
  560. #else. F% i( b9 Y4 b2 c/ o- ~8 a
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically( l* q9 I4 T# R  \- }+ q, m4 k# C
  562. #endif
    ; s2 P$ e! P& Q" E8 K
  563. 6 j8 n: T( G/ i0 E, e
  564.   dlg=new CRevAppDlg;" X. o) |4 Q2 P7 p; I  u
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    # B$ C6 |0 Q9 L, V
  566.   dlg->ShowWindow(SW_SHOWNORMAL);; t- K6 g( I' W3 Z/ k1 J, v2 {
  567.   m_pMainWnd=dlg;
    . t9 O. n9 O7 C0 ~: c+ p) {5 b+ Y
  568. 0 c  z! T2 R' J/ J& r) e
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    & N* t$ L( N" C$ |( m. [
  570. 9 c3 z7 t& _3 S
  571. //  GdiplusStartupInput gdiplusStartupInput;* Y0 J' u  T$ k/ T
  572. //  ULONG_PTR gdiplusToken;
    4 H5 @$ O* @6 s5 y! \
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! l+ b# B9 b8 |5 J6 @8 m3 _

  574. 3 U# x8 O% q: w' z4 u
  575. //        CRevAppDlg dlg;
    1 n) D3 a$ D( ~3 e* V
  576. //        int nResponse = dlg.DoModal();
    $ f: V, U+ L3 A( E
  577. //        if (nResponse == IDOK)
    + R! H: Q( Z0 T
  578. //        {
    , e+ ]2 h6 y' s3 E3 c7 m7 H4 t
  579. //                // TODO: Place code here to handle when the dialog is
    + ^. L& h3 I4 ^7 D) W6 Z/ d9 f
  580. //                //  dismissed with OK
    ) c5 I8 P' O: K% U
  581. //        }
    + b5 z% N( V) }, F5 j( ?8 N
  582. //        else if (nResponse == IDCANCEL)) p; W. ?) l+ ^$ Y
  583. //        {
    7 q. w$ M  S6 I: Q  R3 Q3 g
  584. //                // TODO: Place code here to handle when the dialog is) h5 o; j% ]( j! K  A" C2 D4 z- x
  585. //                //  dismissed with Cancel
    2 e" W; t$ Y% H' k6 f, z6 ?
  586. //        }
    5 J, M& Q: E7 w, p
  587. $ P: X/ g& D9 m" i. I0 B( Q0 I2 l1 d
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    + s  u* J, C) m$ G1 \" ?# f
  589.         //  application, rather than start the application's message pump.! S: E8 P* K$ ?; i  ?  f
  590.         return TRUE;
    ) W' _- I3 S  n" w5 O" M6 \
  591. }- V. C3 N4 ?5 @7 D4 x

  592. ! C. y1 M+ b  S4 ^. R- e6 [
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    2 c- B( ]! ~0 C3 W) h' O
  594. {2 t& W- X* t; `. ]; A* J
  595.   int i;4 i# i+ z2 S# s$ w
  596.   char *szRet;; m# G4 U/ s4 V

  597. * @" i1 }- T3 K. t
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    8 X) m) {( G: Z, i# A
  599.   if(sztoken)6 u% n. B! C  o0 _( W
  600.   {) v' @# R* Z' ?/ @" w% X, N
  601.     szRet=&sztoken[itoken];- A, Z( i4 e6 |! f# m5 w! p
  602.     while(sztoken[itoken]); x* I3 `* d. i# r$ G  j1 D
  603.     {
    " d4 D: f- Y4 l& \- W) z
  604.       for(i=0;i<(int)strlen(token);i++)2 _: Z% Z5 `$ I$ y
  605.       {
    2 R! [& x( `4 L6 b7 x$ }9 _" G
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])2 a& y7 ?' `  h6 t' d
  607.         {1 {  h& t# \9 |3 g+ G  j( u( T
  608.           sztoken[itoken++]=0;
    ; |7 G( R' j( B+ p/ K
  609.           sztoken[itoken++]=0;
    " d; V( B9 z' H7 E4 E% l4 I& S
  610.           return szRet;
    $ H) ~' T$ l% u" {9 p
  611.         }
    2 m5 [: |' j- ~6 {
  612.       }$ N, J2 P8 \8 O( c& }
  613.       itoken++;
    ( U. X! H5 r" z* I6 _: T" p
  614.     }/ d6 b* P% n; Z; Z
  615.   }$ d) L% k2 H# I6 e
  616.   return NULL;
    / ^- X/ ]  m6 s: D4 L8 X/ l
  617. }% ^; p  I( P- g0 S3 d- `( ^
  618. 5 `- b/ I" |2 C: j: }; K* e+ A( I" ?  _
  619. void ProcessProc(long Total,long Current)6 D1 q3 J' S# x* J" m' k8 ~
  620. {
    ' L0 P0 c3 ^3 w* J1 I
  621.         MSG msg;
    ) N" w  j  J5 d! I
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);% I( A  X8 N: E2 z" u/ a
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));+ z3 G) s: M; S' y6 e$ z7 E
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))6 C3 U% m0 d% h% s
  625.         {
    6 l- |9 s7 L5 q  Q
  626.                 if(!GetMessage(&msg,NULL,0,0)); \5 R' z, f  Z* u& n
  627.                 {3 e$ [" G; e7 L. m
  628.                         return;
    9 g2 [/ R! n4 |3 n" \; @
  629.                 }% x6 a# i  `+ X
  630.                 TranslateMessage(&msg);: Z; f( ]8 Y& `+ t6 c
  631.                 DispatchMessage(&msg);
    0 ?- q* H" K2 H' e" B" a" o
  632.         }        ( Z( A% e7 M& o) D! L7 p/ }' D' z
  633. }
    $ O+ r4 F- Y7 b/ h' G8 ~) l% ^
  634. - L7 q% n- Y6 L; Q* a
  635. BOOL bFirstChar=TRUE;4 q7 g7 v3 Z9 W7 y0 }! [: w+ c

  636. % D% C2 H4 N% i* I
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    , \/ y# W- a9 X
  638. {& `8 Y8 P7 e8 m2 ~0 v$ ^
  639.         // TODO: Add your specialized code here and/or call the base class; p3 n! X* e" }8 ]! F+ `
  640.   switch(dwProgramState)
    6 T5 P. \2 ^$ K! U+ M  C: k
  641.   {
    % p. O) u$ X/ [, Z- P) k( z
  642.   case AP_NOTHING:' ]9 H2 {% X6 H0 j+ z. A' R9 n$ j+ ~- y
  643.     switch(dwStartUpSteps)
    & N9 o. T* e4 J4 }
  644.     {
    " y3 Z" e( ^, l, n* A* A8 g) [
  645.     case 1:
    + v( O% V9 H$ R
  646.       {4 Z: b$ p/ [$ U) F% O
  647.         int i;/ F: A2 x$ s( `. M7 M4 w1 K
  648.         CDC *pCDC=dlg->GetDC();
    / m+ R) Y" l' [4 l+ ^; ]
  649.         HDC hdcwnd=pCDC->m_hDC;
    1 J+ G* g$ |) ]0 ]/ k5 P9 E
  650. //        Graphics graphics(hdcwnd);/ e% h/ T8 ~3 o6 P7 A0 N' u4 x
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");. I0 @6 }3 r% t- H6 f- B
  652. //        INT iWidth=bitmap.GetWidth();1 A0 C" ^7 y; h; ?. o) I' s
  653. //        INT iHeight=bitmap.GetHeight();
    ! N( }6 a" x7 W: [, g* Z& `. U4 z( y
  654. //        Color color,colorTemp;  C8 F; R: \% n9 y8 ?( u
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    6 b& l1 v" J! w
  656. //        {. F) F* n% f' P" W; A/ e6 E
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ! `0 x3 b9 `- m& i) t
  658. //          {) o( `8 `+ W1 [) X9 m, g
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    % J8 P5 _  ?; Y$ t7 B
  660. //            colorTemp.SetValue(color.MakeARGB(' p( y' M% n2 r6 J5 ^' u
  661. //              (BYTE)(255*iColumn/iWidth),* q' \/ {2 A8 Y
  662. //              color.GetRed(),
    8 M& ~2 k& e3 m& B  Y' L& Z7 [
  663. //              color.GetGreen(),( ]/ }% Q# B! ?
  664. //              color.GetBlue()));
    - r% ^) m( b" p* n+ k8 B
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' w$ d8 Q& i& n5 W# d+ j! w; i
  666. //          }
    7 L% [. ~$ K  _0 K0 E/ `
  667. //        }
    , N9 D! ^  V" T; k0 j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + @6 i. ~( U1 |7 U) P% ]# t, D
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; x  }* s0 \3 Q. a( R
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ' p0 E4 B) p) o. v$ W
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! @6 p  }% q* Z, D, ]
  672.         for(i=0;i<240;i+=8)' @4 G2 I6 `3 p+ f& T
  673.         {2 V- N4 q1 |4 E/ z: F5 O) U: ~
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);8 z5 l( A! k. o5 q; x. e% w( M6 ]
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    8 ?% ?6 `  B# M# G
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " o- w1 v5 x' g9 w1 ]1 y
  677.           Sleep(33);
    / V) c. ]# [+ w$ }/ c
  678.         }$ x' {% k0 z1 A7 a2 N4 S7 j( k
  679.         Sleep(1000);0 ?" Y  D, V) C1 P$ n# X
  680.         for(i=240;i>0;i-=8)
    6 o/ d' q3 \$ s( z& K9 |
  681.         {5 f, A) k1 r! W9 ]% q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 l4 l- [( j8 N  U; o# ?: q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# p& ]8 m: g. x0 H+ L5 }
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);! T* G8 y* z# ~
  685.           Sleep(33);
    6 ]" \; \6 \* m
  686.         }
    8 }; ]: T7 C; A
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    3 `. J6 E4 i: k
  688.         dlg->ReleaseDC(pCDC);
    6 @0 f* Q( t) }! ]* I. i. c) u) l
  689.         DeleteDC(hdctar);
    ) Y# N) c% u0 g! C
  690.         DeleteDC(hdcsrc);9 p% J2 z$ i% {" q8 S4 {' b2 u1 t: P
  691.         DeleteDC(hdcorg);
    " A! p# E6 v1 x7 M0 c6 ^
  692.       }
    . e( Q( f0 G( u( D) v
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    6 R" T7 v/ {  Y* J2 L) ]
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
      u+ L- Q* Q/ k1 c: }; A
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");* P0 t6 I# Z$ K
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");6 m2 P$ ^9 a- u# _: E9 D/ e
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " s# k: |$ G9 ?& i1 s- G, g
  698.       if(!Dn.Connected())
    6 V7 z) ?2 \7 G- U# ~3 N; \
  699.       {1 F3 D& Y* I3 e6 z
  700.         dwTotalFiles=1;/ P$ o4 ~$ s1 w4 w3 |9 n8 ?
  701.         dwDownLoaded=0;
    . L6 I' |/ P! l0 W, w
  702.         bSilentStep=TRUE;
    # M$ s6 `% M7 x% R" M) [+ x* p3 x
  703.         bCompressed=FALSE;
    * K- v4 c7 E$ q% ~) w3 n# l  d
  704.         strExtLocal.Empty();
    , ~+ t3 E8 ^; i
  705.         strFullName="readme.txt";
    9 M& k. J$ L7 j8 V% O
  706.         dwProgramState=AP_CONNECT;: s6 \8 ]5 m1 N0 c& G
  707.       }3 B0 n) k. ]2 W) `' |2 v! R; B+ U
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    4 |+ Y1 K3 E4 q7 K0 Y
  709.       dwStartUpSteps=2;9 T6 h) F5 l8 C, X* r1 {
  710.       break;1 i/ g6 h3 X" M
  711.     case 2:* p: h  y% g( C1 T- z
  712.       {
    9 ~9 ^2 Z( z8 |& Q% r: D
  713.         int iEOF;
    - [8 x2 X% D4 u7 _
  714.         FILE *fp;
    - H" B3 D8 k4 {6 c+ ]5 ?
  715.         char szString[512];
    ' {' o9 P* h" k$ c8 t
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    " ]- q7 X: _6 j: @! R! ]% Q- ?! ], g
  717.         if(fp)
    6 H% t1 H" {4 A: W
  718.         {
    9 m( r2 K& O0 I! u4 T" ?$ _
  719.           do
    , B" h: T, b' W/ T1 i- ~
  720.           {8 ^! r  z+ @( X
  721.             iEOF=fscanf(fp,"%s",szString);* L- m+ T  Z6 V& D$ T
  722.             if(strlen(szString))
    3 s: E( b1 z& P4 ~. _& B4 ~
  723.             {1 T4 |0 F( B( _4 A1 f  v: |
  724.               if(bFirstChar)
    8 T9 I/ D+ c9 k. T5 h0 u, B, T
  725.               {
    ! ]- I" W' q# d
  726.                 bFirstChar=FALSE;
    : x6 l$ a+ R( C3 _4 G9 V
  727.                 bConnectIsBig5=FALSE;! U+ a0 w! Y9 y( n. v
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;5 U5 y# E/ B5 B! f9 Y
  729.               }
    , d* ]0 C0 T9 z1 d! t* S6 P6 ]
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));3 m9 [# f  K6 W' j, W
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    6 _) J7 H) y& b, B2 z3 F* }
  732.               dlg->m_ListText.AddString(szString);0 E9 m; ]( t+ T1 n# B  r/ X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 ?  Z, K- G  ?+ J* `
  734.               *szString=0;, _0 }5 H+ w: g) M) K1 W, [
  735.             }
    8 t  {" }( Y( h" w6 i: |
  736.           } while(iEOF!=EOF);/ `6 [# {$ S8 e/ K/ m
  737.           fclose(fp);! k5 Z% g9 o7 h) h  Z
  738.           unlink(".\\DownLoad\\readme.txt");& D% ~, k5 z$ f; [
  739.           dwStartUpSteps=3;
    * k5 i9 T0 {9 W- L2 P' G
  740.         }
    ( M  E# I- s, Q
  741.       }
    & m/ [( y9 ?5 V" v8 Z
  742.       break;
    ! Q5 a8 f& U2 P& u2 a
  743.     case 3:) t8 N" C* ]3 H; X
  744.       if(!Dn.Connected())1 \5 {3 r$ [& ?
  745.       {, H6 B" ^+ B* j
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    2 S: u: H6 J) L/ _) q
  747.         dwTotalFiles=1;
    * c; E. e3 Z9 ?! b# j
  748.         dwDownLoaded=0;
    5 `! n) J2 {6 s$ I% e
  749.         bSilentStep=TRUE;7 n' q2 @: A* T3 |" D; q; k, W; |
  750.         bCompressed=FALSE;
    2 \+ f& {/ C- j% Y# X* d" z% `% I
  751.         strExtLocal.Empty();
    . j9 L1 i- Q( i1 Q$ A9 U6 h
  752.         strFullName="checkversion.txt";( G$ t* f; Y0 k% o2 z% c0 a
  753.         dwProgramState=AP_CONNECT;1 l! \: c2 J$ Y% d7 p, H
  754.       }
    # U3 v$ k: Y8 q' X' s
  755.       dwStartUpSteps=4;# C' m6 @1 Q# U" c/ D% G% g3 W
  756.       break;
    . ]# |: q" ~% R" z" R9 V+ ~
  757.     case 4:* I- \7 _& D3 ?
  758.       {
    : B* Z1 }4 z! Y# s; e
  759.         FILE *fp;2 `( F  l* D0 c, P$ j/ u
  760.         char szString1[128];
    % j0 X! Y0 V! f: I8 J( d
  761.         char szString2[128];
    3 D* \( V+ [+ ^, E4 \
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");1 i; G+ W% ?& T
  763.         if(fp)  G" n7 }$ U! w' D/ M0 I( w0 C
  764.         {
    8 D" W" p, O( W9 @. k! ~* F+ r
  765.           fscanf(fp,"%s",szString1);2 w$ N2 l9 J+ U: ^; N% W8 }$ `# A& ^; j6 w
  766.           fclose(fp);
    # ]. f& M9 `  f" Y- E# ^/ f8 _
  767.           fCheckVersion=atof(szString1);+ e7 D; I6 M+ m7 U1 b! Q4 \$ w
  768.           fp=fopen(".\\checkversion.dat","r");
    " m& Q6 `( G. i1 {9 ~
  769.           if(fp)# C4 D8 \, z% V/ \: r9 j, M
  770.           {
    1 ^5 `4 {# }) B, O( |
  771.             fscanf(fp,"%s",szString2);
    3 E5 l# }: v4 T# J
  772.             fclose(fp);2 a( v# z1 O& `
  773.             if(atof(szString1)!=atof(szString2))
    3 I. M1 X$ Q" S. {" v% Z: `- F4 G. o
  774.             {
    ! s9 S! A" N/ L" a
  775.               if(!Dn.Connected())
    0 e, l# f3 M$ @) m- f
  776.               {2 B7 V# t- G7 g
  777.                 bFirstUpdate=TRUE;
    4 X; G5 b8 B0 N# n
  778.                 dwTotalFiles=1;
    $ K! `# x/ _& a. a9 }' g
  779.                 dwDownLoaded=0;
    4 i* q6 e# H# J
  780.                 bSilentStep=FALSE;
    % R# D! t) ]- ^' g9 S7 v
  781.                 bCompressed=TRUE;6 I4 a! j+ R+ o, Y5 P8 h/ O
  782.                 strExtLocal=".\\DownLoad\";! T1 l) f5 ^3 v# F: a. E$ q/ s* j2 R
  783.                 strFullName="update.txt";4 I4 f& B" u- ^" n/ A
  784.                 dwProgramState=AP_CONNECT;; O- o. c9 q; m
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 k$ g5 m7 J) E$ @; i# P/ K
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");! A/ Y" _. j% s$ p9 a
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");& z- r& X, |: x! N+ p' u+ q- Z! r

  788. # \) F% p% M4 c
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 i$ r! g% F+ ?4 v1 V
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    3 t6 O7 r  f& n9 c9 E
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    , s: \. D7 b* `! i% T& _1 K
  792.                 {
    + X7 B' p( U5 l3 O/ b; i; i7 H! c& I
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( t9 w- M) ]: m4 ^# ?+ g
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    * s' p, n9 x2 v, I/ H
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    " Z7 {9 f5 S# R4 f1 V- C
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 T, m) j; c" ^; q9 n: A2 B( [

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

) O( R  |3 L' P( s3 ]. I- ]8 H7 `1 D6 `$ W) h* D5 q6 ?+ C* l7 b* ]

評分

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