CSUpdate.exe源代码

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

" h/ G! Y/ K- C; W% o, X- d
  1. / RevApp.cpp : Defines the class behaviors for the application.
    * T5 c& N4 e! t- T" x* h
  2. //
    3 _2 F) G2 v: A! x) ]9 t: A; w

  3. : f" Y3 ~2 h0 q" G
  4. #include "stdafx.h"
    9 ]5 V# p2 Y+ P& S7 p; d& J

  5. 6 j- X! x$ a2 v; }: |
  6. //#define UNICODE
    8 F4 E3 j  t& o" z+ x! [
  7. //#include <gdiplus.h>
    - E) [' P% c, R& N6 g4 J1 s' ?* o
  8. //using namespace Gdiplus;
    ( _; D, C' z: k1 \' J6 F, q

  9. ( Q. R& u( J6 }* \# \; {& x
  10. #include "RevApp.h"' \: U- o; t* |8 [0 m8 _
  11. #include "RevAppDlg.h"
    ! n% G6 I! C8 i2 w" Q
  12. 9 T0 o! Y# M& F! {* l
  13. #pragma warning(disable:4786)$ R9 G1 v; E1 D! Q6 z% ~9 P2 I8 z
  14. #include <map>
    5 G# l+ B) k- P1 w! S
  15. #include <list>- g  h0 i8 O" R- O5 W- p1 x$ s8 Y
  16. #include <direct.h>
    6 u( r; P8 P  h3 N8 z
  17. ) f- A9 t0 A. m$ K
  18. #ifdef _DEBUG2 q/ q7 G- ~+ l
  19. #define new DEBUG_NEW
    ( N4 g7 J9 y5 p2 N5 S9 [
  20. #undef THIS_FILE( T6 g) L+ B; g6 V+ A
  21. static char THIS_FILE[] = __FILE__;) z8 p' _! M- y4 _, Y* }1 n# w/ r
  22. #endif, I% `' B1 |/ z7 W" E7 ~( T# e% g
  23. #include "SkinResDef.h"
    : L  B$ b9 o! T" b9 G! A
  24. #include "ChangeBG.h"9 F! T- a+ ^8 H  }3 @' _
  25. #include "AFXINET.H"
      d' [2 [3 ]5 i3 w/ x, ^

  26. 1 l& s6 g( H2 `7 n( f
  27. #define TRADITIONAL_CHINESE 0
    5 o; ~( e: ^9 W$ t& e# x
  28. #define SIMPLIFY_CHINESE 1
    / Z) s+ W% J  w( Y
  29. #define ENGLISH 22 ?# n; H! \5 m& F3 e
  30. int m_iLanguage = ENGLISH;
    : Q# c5 a( b1 [+ ?' |4 Y
  31. /////////////////////////////////////////////////////////////////////////////* G1 I) @2 R5 V3 p) }
  32. // CRevAppApp
    2 J1 P, P/ I) o' m8 K

  33. 2 R  t1 f$ u% Q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    " h# D% X+ t' m3 |
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    , }7 c, V' l- j; s6 v
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    7 v- S) M: f+ s7 j" Z/ z! ]
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    5 J" E; W0 z; Q" `% z3 g
  38.         //}}AFX_MSG
    * C& [1 h0 U# O: A# I+ F2 d6 {! c' D
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp). e; Y8 L6 U3 R! N
  40. END_MESSAGE_MAP()
    ' f  [6 r) X8 ~5 _) k/ |
  41.   m. G2 S4 S8 X
  42. /////////////////////////////////////////////////////////////////////////////
    ( q  q2 g5 O6 ]1 R4 j& r
  43. // CRevAppApp construction
    . w2 I0 m3 _  E$ z; l% J3 M2 |! j

  44. 5 y' g" S! `  M4 W6 r% W: X
  45. CRevAppApp::CRevAppApp()
    ( G! k- Q  I0 a4 O' V( w
  46. {
    ' U. M  ^* x8 b9 L# h1 l
  47.         // TODO: add construction code here,
    * i& `5 E- M" t' f" @2 w% P3 U
  48.         // Place all significant initialization in InitInstance% U8 v# ]& x, m# O
  49.   bDisplayIsBig5=FALSE;6 L' e. Z+ h% L$ T0 @3 {
  50.   bRestartUpdater=FALSE;( b- N6 R3 R$ g  R. V6 G5 R8 G. P
  51.   bFinishUpdated=FALSE;
    ! D, H- n: b& A6 z7 R' r
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;9 l  ^; T8 B( D' L9 z
  53.   InitChangeDataBig52GBKS();
    8 k3 m# [$ {0 u
  54.   InitChangeDataGBKS2Big5();* a6 @% J5 _1 G1 M2 O
  55.         //
    9 v! i- F/ F7 |4 i& o3 e% q, [+ G
  56.         bClickRunExe = FALSE;9 f4 x- E  c: o, y0 P( y, N
  57.         //
    9 m8 ]2 f5 o- l' t
  58. }
    5 W+ L* U8 t0 t: A" ?7 @' x
  59.   [7 a- w* G0 @% v2 q* F
  60. CRevAppApp::~CRevAppApp()! ]0 r" c) ]( X; r: a5 l
  61. {8 }5 W( C' o* h+ g2 y" i
  62.         // TODO: add construction code here,& e! ]8 R/ \( a" m7 s4 E
  63.         // Place all significant initialization in InitInstance
    " |- h$ I) x% D+ T, n+ }
  64.   EndChangeData();
    5 ~' J$ T0 b, P7 I2 \
  65. }
      n% ~5 b/ o  E0 k+ _
  66. ' @5 w& d& p' U7 U4 [& x8 [
  67. /////////////////////////////////////////////////////////////////////////////& V$ }' S8 Q: V( M: v1 S7 G
  68. // The one and only CRevAppApp object
    9 v9 C# G# x/ W
  69. 6 ^) t% S# R8 M: \, t2 ^9 O7 g! z+ k
  70. CRevAppApp theApp;: {  B) Z4 K( M2 D
  71. 4 T# N, }) ^8 m5 r8 r/ P& G
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    9 m% B6 X; S6 ?; x* W& A; f) f
  73. {
    - a7 `: M: d- |: b7 O' A7 b
  74.   int iEOF=0;
    2 o2 `, M$ \& \- m0 N+ ~+ g
  75.   char szTempName[MAX_PATH];
    3 `) q% M$ f/ Y  S
  76.   *szFileName=0;
    % F+ F5 ~- j4 _0 M- a
  77.   iEOF=fscanf(fp,"%s",szTempName);* O) t5 L# @  g+ g: H
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    " a- P4 `9 D8 u! _: ^9 O: d
  79.   {. j7 V5 I! I9 w5 K# N" t
  80.     strcpy(szFileName,&szTempName[1]);
    : H" O$ ]0 [% l2 s. v$ B
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
      Z! r" s/ S! X. q% {, l
  82.     {
    ! [+ {- E* P" I" g  b- H; H/ X( z8 P6 O
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ! ~' F2 {8 E: b
  84.       strcat(szFileName," ");3 z/ R( _8 H5 P8 ^
  85.       strcat(szFileName,szTempName);
    & Q9 N8 V+ O. S0 }
  86.     }
    8 m4 I9 g. i8 B1 l
  87.     if(strlen(szFileName)>=1)
    $ _' T9 i6 a9 V4 ]8 X! q
  88.     {
    : q$ h" S7 X+ Z  J& u- s& h$ K9 m
  89.       szFileName[strlen(szFileName)-1]=0;
    4 }9 s9 I  n& Y0 c" m4 v, M
  90.     }+ x' I; F5 T9 ?; H
  91.   }$ U- K) J: r7 U
  92.   return szFileName;) M3 Q8 G# x  ~& T
  93. }
    ; P% }# D  }* T, m6 \! I

  94. & [+ b7 ^1 B$ D2 }$ m. d
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    * ]2 s0 }0 o  p5 O, W/ q
  96. {
    4 t8 }8 F7 J) B8 y& d# [9 c" [6 A
  97.   FILE *fp;- n+ L4 F: p& y2 W* G
  98.   char *key=NULL;
    0 v- W# E$ a4 r$ Z4 ~
  99.   char version[MAX_PATH];: y+ X( K" }$ }6 u* `) P  }/ ?
  100.   LPUPDATEFILE file,olds;
    1 s# o& j& L1 U4 o( t
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' g1 ]( ^1 s: P. v  b) d# `7 k
  102. 6 N, K% P" E  \# x# w
  103.   UpdateList.clear();
    : J2 Z4 X0 w! y) ~! B# e/ _
  104.   UpdateFile.clear();+ K! Q: V. H+ e
  105.   if(GetFileAttributes(filename)==-1) return false;3 s& V- \' H; J3 U; Z' l
  106.   if(!(fp=fopen(filename,"r"))) return false;
    2 E8 P, j1 I( N! S9 E
  107.   fscanf(fp,"%s",version);" J3 f) D* J: z/ P% B' d8 }
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    + f5 J! U2 S6 I
  109.   while(fscanf(fp,"%s",version)!=EOF)
    0 S. A; A$ X/ Q; V. L
  110.   {
    7 c1 |7 Q4 }$ R: [1 T
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) Z  t: `# }0 S" O- H
  112.     fscanf(fp,"%s",file->path);0 J# o2 @/ @+ i( D. t5 o3 L
  113.     ReadFileNames(fp,file->file);
    , b( a6 R. v, X0 n& Y
  114.     strcpy(file->full,".");
    + x  Y2 J$ y) c$ m/ s' I
  115.     strcat(file->full,file->path);0 Z' f% Z$ X! {# N/ y- i
  116.     strcat(file->full,file->file);
    ( S% u' o2 g% L8 \- n* G( G* B! S
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& I* x, n2 s7 k% f, \1 p
  118.     {
    8 d/ u4 G& V- _# [
  119.       file->vers=(float)atof(version);/ w  R7 `9 n7 Q. d5 {+ d. q
  120.       UpdateList.push_back(file->full);
    ! f: z: s/ n8 j6 b4 E7 }- y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));% e! ^  p3 I5 d4 O& O1 T: \% [
  122.     }
    # |% A/ u: G+ K! V
  123.     else
    6 h" e% _2 E- ^8 v* J
  124.     {
    - n4 ~% [# c6 _% x
  125.       olds=(*p).second;4 J! Y. A( X2 J+ r( x
  126.       if(olds->vers<(float)atof(version))) x2 @0 E, v" [  E
  127.       {3 g* R% W' A$ z2 g  k0 A. B
  128.         olds->vers=(float)atof(version);" g0 v1 S! ^7 O
  129.       }
    * s: J6 H: n" R7 V
  130.       free(file);
    / T" \. f/ @& ]2 @0 f$ X% I; u
  131.     }) G9 ^$ o( g) z9 m$ P1 h- `3 u
  132.   }' ^  y/ H; G( }# O0 |/ S- R0 p$ K) `
  133.   fclose(fp);) f, U) j6 ~6 @# v# Q
  134.   return true;; C# d" w3 o1 z' I. X& H3 G
  135. }' n4 Y7 Y8 N- {1 a3 j
  136. 0 u1 i& g3 ~( `  G
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    6 l: u7 j8 |  E2 L
  138. {
    " M) ^2 r/ @( ^. ?6 C  V: X
  139.   TCHAR  szFull[MAX_PATH];
    ) h9 B# Z3 J' P! @
  140.   TCHAR *token,*inter;
    / Z- p8 J( O$ B' t$ b' W3 ~% }
  141.   *szPath=0;
    + j* G8 X7 t8 j% [" d3 p3 s
  142.   strcpy(szFull,szFullPath);
    ) ^" W' }* g$ v4 ~6 M8 b5 |- m
  143.   token=strtok(szFull,"\\/");
    * ?, D1 Y$ L( J2 n2 H9 S; e
  144.   inter=token;/ A- V: k, p$ b7 V  P4 S
  145.   while(token=strtok(NULL,"\\/"))
    ' ^" M/ Y/ C, P5 T5 `6 T" _
  146.   {
    # L, k4 k- T- \
  147.     strcat(szPath,inter);
    ' l& A) M: u1 O# q; N
  148.     strcat(szPath,"\");7 Y* Z1 [' Y7 ^% v
  149.     inter=token;+ q5 R* L% P2 R6 p8 ?
  150.   }- ^$ Z0 c& Y/ q! Q5 J9 K5 q
  151.   return strlen(szPath);
    3 a& n( @9 Q# m: M. g; L. L
  152. }  b: ]$ p, S) i
  153. 9 W  ^/ I' ^- o% m- a
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)8 `6 W' O6 J& t
  155. {$ l5 d8 N$ f9 T9 i4 p6 r  H8 S: o
  156.   DWORD attrib=GetFileAttributes(Target);7 j6 @0 A  u3 g: V& F$ n; K# y
  157.   if(attrib!=-1). b8 U2 H7 A/ ]: c! l8 L
  158.   {' c+ ^( Q" x3 G1 z8 D
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' b5 T! H3 b! Z2 `# ?
  160.     {; E7 _3 u! [- Z$ N! a' E/ a& {$ U
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    / t1 l1 n- O) R, V0 ~
  162.       SetFileAttributes(Target,attrib);
    3 b: s" ?3 |# M. [$ n/ i
  163.     }# X6 ?8 t% k" G8 a+ u! p
  164.   }  v' h: v) K+ d
  165.   CopyFile(Source,Target,Erase);
    3 J) L' P# O- w* X$ M
  166. }. f, ?6 w4 z: ^7 W
  167. 0 n5 H: B8 U; [0 y1 n
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . {$ X# t& k6 e5 Q" F9 z3 g2 z
  169. {& ]& i$ U) T* [9 ^( R
  170.      FILE *fp;# N8 c& d  D* A
  171.      char  szBuffer[8192];6 N5 ?% ]) _5 d7 o) h
  172.   va_list  argptr;
    3 X# w" V# J1 D% k, f& c8 Y
  173. * d4 m1 r5 R( A  _1 ~' e! z
  174.         va_start(argptr,message);: Q2 C' J+ N2 K2 K) e
  175.         vsprintf(szBuffer,message,argptr);
    1 U1 K1 q. U3 F  W1 a
  176.         va_end(argptr);
    ) P$ \4 @& o# u
  177.   fp=fopen(FileName,"a");
    / T7 l4 d2 P5 M( T% X- `
  178.   if(fp)
    5 h( Z& b5 a% e8 z3 v- a
  179.   {
    : r, l5 b! c2 ^7 d$ z1 C: t
  180.     fprintf(fp,szBuffer);1 |. T# |& S, H4 J- i, l2 Z: Y
  181.     fclose(fp);
    / `# }( c) a* v6 h9 W
  182.           _flushall();
    ) E. x' t& F6 p; x+ y; i
  183.   }
    ! }4 k3 _. D2 W, p7 ?2 @
  184. }
    . N; q, H6 }2 b" Q1 U

  185. 9 s1 e1 V/ R# m* U8 q2 G
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    5 H2 k% p" {+ z8 e/ x
  187. {
    ' e" U7 a) a" X; M  j/ p: l
  188.      FILE *fp;4 `2 B  d  O* g. c% {
  189.     DWORD  attrib;
    $ x8 m- x' {! _2 b! c7 f3 w
  190.   attrib=GetFileAttributes(FileName);
    2 ^+ z8 T5 ?9 Q7 D* x. G
  191.   if(attrib!=-1)
    1 a4 c9 n7 s" H* n! R2 S4 e6 W
  192.   {
    4 |2 a1 ]2 m& C& M; l
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 ]: h' {* O6 n8 Z% [# r9 `1 Z; C
  194.     if(!SetFileAttributes(FileName,attrib))$ ~! `( c; l; R* U# m
  195.     {/ w; O  ?( o2 t, C  Z( x$ f
  196.       return FALSE;" F1 k3 U: w  t6 j& h  D  S
  197.     }
    $ ?4 t2 d6 Q! R2 n8 Q
  198.   }. S* S- N( ?. B; V' i* u% k0 f% n- Z0 x# k
  199.   fp=fopen(FileName,"wb");
    2 L# Y4 H  c% t) }, v
  200.   if(fp)
    , u5 |5 D! |2 N6 \% V# c
  201.   {& b! h/ z  R9 i
  202.     fclose(fp);
    - d1 H& y' y! D3 x; t8 N
  203.   }
    ; ^" o4 N. R" B; Z
  204.   return TRUE;: ~8 I* H" M9 i9 ~' d9 S: ]
  205. }
    / U/ _8 L; L& J* w8 F0 z; K
  206. 8 W! D( c# ^% t  }: P3 Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    4 l, l0 r0 y% [" P0 {4 k
  208. {
    ; l2 Y, |) Z6 t8 Q  c
  209.   char filename[MAX_PATH];# Q6 g, q+ T, l& _2 [
  210.   LPUPDATEFILE file,olds;. a+ f0 Z7 k: G" M
  211.   std::map<int,CString>::iterator i;
    + [; s$ H* z' O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;7 u: m* Q$ O# j" @7 @
  213.   std::list<CString>::iterator l;
    6 ]/ x9 G2 |+ F) t; v: T
  214. 3 [5 ?8 [$ m! n: O8 o
  215.   if(bFirstUpdate)8 c0 o: T% O' q, J+ R8 N
  216.   {3 f2 Z* c+ Z( a
  217.     dwCurrFile=0;% s* e- g6 _/ L( f
  218.     bFirstUpdate=FALSE;
    ; E8 B* ]' C$ Z. z' Z- Q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& J  I; x3 W- [6 `  P
  220.     {
    0 Z$ U4 z$ b# g1 f7 o
  221.       dwTotalFiles=UpdateLocal.size();: D) }- W* F( U
  222.       dwDownLoaded=0;9 J8 Z4 R9 ~2 a: T
  223.       bSilentStep=FALSE;: H- A+ Q1 e2 P: f" v
  224.       bCompressed=TRUE;
    " T: F5 @8 O8 h! S! l, r, S% b
  225.       strExtLocal.Empty();
    2 ?2 v4 P; I6 T1 y  O) \9 b
  226.       strFullName=(*i).second;9 S1 W' s; p* g- _! a
  227.       dwProgramState=AP_CONNECT;( V( B" K) x( Q& n1 E, k" p
  228.       return TRUE;
    $ S" J" C; r4 v
  229.     }
    9 t4 u: ^) s" I% `2 P  S& Q
  230.   }
    - U" W6 N4 o- ?6 K, O6 ^
  231.   else if(bRestartUpdater==FALSE)
    7 c: ^+ u$ }& d6 }8 H( z
  232.   {
    ' Y$ e" |1 j5 `0 C8 O1 V, w
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    , k: I$ `1 Z( s9 ]
  234.     {
    ! F, i' f5 i" [. K  N4 e
  235.       file=(*p).second;
    ' C) n) K0 Y4 {# B, ^0 @% o+ ?
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())" ~- Y) b! k0 R2 [6 A
  237.       {
    ( v# W: f( B8 N' i6 B9 Y6 V
  238.         olds=(*p).second;% S9 Y4 V, n. ]
  239.         olds->vers=file->vers;
    6 i2 g$ \. y# l5 U0 i; F
  240.       }
    ' r* x8 e! H& f' D7 S. E3 _
  241.       else
    ' v8 H9 l: E: J4 x$ Z
  242.       {  g# A% L  x+ w! w! c2 I
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; L' e' z& n% G: b4 T& d
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ' B* {& V0 C- Q: f& k: T) v
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));% n* z+ I6 R! h8 f/ c
  246.       }" T+ m9 |3 Q3 Q/ c$ W7 b0 Q6 `4 e
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ) \9 f8 j7 U' B. P  Q) |
  248.       sprintf(filename,"(%s)",file->file);9 K  t1 x( r1 b. p8 t8 i
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. t% |2 z% C5 i  W
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }$ d: {1 i3 a: T, p
  251.     }6 D: a( @  k4 ~  q/ g5 b# D
  252.     dwCurrFile++;* K( g5 o, `7 f% T6 @( U% {+ L
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * s, x! @5 R6 o4 R; j( P
  254.     {7 y, m. @  O8 W% `5 }( n' Q
  255.       bSilentStep=FALSE;' s) z' {8 d- q1 u
  256.       bCompressed=TRUE;
    3 L% I; B5 S8 N9 A) c
  257.       strExtLocal.Empty();
      A+ G- z* I* |& l
  258.       strFullName=(*i).second;
    ) |) U/ u" {+ n# Y
  259.       dwProgramState=AP_CONNECT;
    . X6 ^9 n9 P, V% ^0 `% m- ~
  260.       return TRUE;
    1 b% m3 f" b: q0 z& d: A; f4 R) T3 W
  261.     }
    2 x' G# `5 m. E) ~' F5 |. l( i% h
  262.     if(!bRestartUpdater)8 g8 O2 o5 x6 g' H1 W, a9 t( t
  263.     {
    % o$ {) p" M9 ~4 T
  264.       int iCurrSize,iFileSize;  B0 j+ O; D! W% c
  265.       iCurrSize=0;+ e; O  u* i9 I/ q/ V% M
  266.       iFileSize=UpdateList2.size();
    2 E: t7 r: N+ @- [& y9 v7 f( D
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");! T2 n" Z; C$ ~5 Y- D
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");" q7 M, g' p/ s. n+ D" U
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    4 [( d! e: N7 T9 c$ p" H6 [
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 w- r9 n0 P  Z( q. P) j, d
  271.       Fclearf(".\\update.dat");
    * q  T% f0 |, q2 [" S% y
  272.       Fprintf(".\\update.dat","Bloodyf\n");' x. d# R/ }3 U4 G* a( C
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)& g7 I; F" F- [* W3 @
  274.       {
      F# w2 G. Z" D6 R/ w/ B8 l
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 p6 S4 q3 I3 z( |+ W4 f/ R: |
  276.         {6 C: m( K! `3 ^" v% U
  277.           file=(*p).second;- |' F( H6 h0 h6 s
  278.           sprintf(filename,"(%s)",file->file);( U8 v. a8 h; z; U) R
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 P5 E, B/ ?, [' u2 O) @
  280.           iCurrSize++;
    ! }5 c) a  S; S, O
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));! W8 r) L( C' D
  282.         }% k( I6 F" l( X
  283.       }6 J  V8 ~3 r2 f; C
  284.       unlink(".\\update.txt");9 z' Q. {6 f! _: x
  285.       unlink(".\\update.tmp");
    ! v% X& `/ e% J. C( G8 F8 l. E
  286.       Fclearf(".\\checkversion.dat");0 g! d" X8 v" t: \5 d! b+ W- ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    + |3 s+ Y; A: O/ d8 g# S* w
  288.       if(UpdateLocal.size())
    " Z( [/ v* r) N/ \7 i
  289.       {" }& e, r% n# v
  290.         UpdateLocal.clear();1 |4 N* n, c4 f/ r: z# {. l. W- e% |
  291.       }& _' N7 q2 l$ z. a/ ~5 B
  292.       if(UpdateFile3.size())
    7 r. l- G* ~! A3 q0 h6 w5 S0 h
  293.       {2 k/ R0 U' ?% R3 W- F
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" v. P" v) u" n" Z8 r
  295.         {- s9 S9 u  K- ?5 A. {
  296.           file=(*p).second;
    9 Z2 A2 ^+ _! I6 N0 _- X$ J
  297.           free(file);" z; J0 A3 `) r3 ^- {, S  h
  298.         }
    2 n7 y+ ?2 j0 ^. Z( }
  299.         UpdateFile3.clear();
    : c2 u2 N: F! r" _# p/ g
  300.         UpdateList3.clear();
      j' }% f" A: B9 n1 G! M
  301.       }
    ; Y/ o; Z* c  P+ Z* s! ~7 W1 [% K& r
  302.       if(UpdateFile2.size())
    8 \& O7 }% h1 o# s3 X
  303.       {
    7 R7 o9 v& @9 a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ g! }  J: Z* y/ h. G
  305.         {/ t& w: U, C2 P; k" k0 w9 T
  306.           file=(*p).second;
    ; E2 H% ]! m* P  G: C0 D
  307.           free(file);
    5 l! {$ S: j% g8 q& y) e; U
  308.         }
    . R. d- @0 H* n; u6 L
  309.         UpdateFile2.clear();
    ' y4 w6 ?) Q; G3 Y
  310.         UpdateList2.clear();
    7 M- v4 h, Y2 e# _" a( Z$ w" H2 u
  311.       }
    ' a  V5 o% X7 H' Q1 o  b
  312.       if(UpdateFile1.size())
    1 \" w! J$ A. |% U2 }$ F- n
  313.       {) p4 ?& H- F3 M* G  c7 e
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( X- w! i) V2 N% ]3 Q& R
  315.         {
    8 E8 Q( x9 a' L& H- @2 L
  316.           file=(*p).second;
    7 z; ?  [6 j8 {
  317.           free(file);, P+ b5 _( V0 X7 q- B, ^
  318.         }( x- R& y5 r. N! A' s: r; C
  319.         UpdateFile1.clear();' \4 a  ~7 O- @) {4 W6 o
  320.         UpdateList1.clear();5 e) N# ?' ?( H  ?9 ^+ i" D
  321.       }
    ( ^0 H2 {! |5 f" P+ {+ L. D! J
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    + h  j1 N% l9 ?/ e
  323.     }
      V' R! o; K4 P# S6 G7 M
  324.   }0 v5 w2 J. [& S% I
  325.   return FALSE;
    5 R5 O7 T& ?6 F9 }* G
  326. }  H* u! i  j. y2 W2 a6 ]: G; d

  327. 7 ~5 B7 S- A1 t  `% Y
  328. void CRevAppApp::ClearAll(void)) X, G! [4 V4 p2 A. v7 Q
  329. {' V4 y# p, b7 U$ b
  330.   LPUPDATEFILE file;7 V6 r% e3 e1 `. T: A0 g/ _
  331.   std::map<CString,LPUPDATEFILE>::iterator p;3 l0 t0 {+ w3 m5 R

  332. 3 P" L: M6 A1 [! o& B- K
  333.   if(UpdateLocal.size())4 G% c4 z' c4 K) b/ E+ E' l3 D0 o
  334.   {
    " Y) }4 Y! _% s! f! g
  335.     UpdateLocal.clear();  B$ p) f* ^1 h+ Y( P7 p' l
  336.   }4 M( L7 f1 t, |
  337.   if(UpdateFile3.size())1 G- w( c6 t0 y  Z* t3 b+ W: M5 A
  338.   {6 M$ Q$ N% c% ~7 ]
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      B) t, g/ b# h5 z# g
  340.     {
    + N2 [+ N* ]4 \" k# `# O$ n
  341.       file=(*p).second;
    , r4 N% X" {2 I( r* L5 D9 g3 N
  342.       free(file);
    6 m) p% D" r4 w$ f
  343.     }
    ' \) p: S$ J/ X( X+ P1 p6 |. P
  344.     UpdateFile3.clear();
    " E; V8 }# \8 A9 K  l  J0 u
  345.     UpdateList3.clear();3 c$ z5 u. E: p2 r7 D  X
  346.   }
    0 A. x. Z7 e4 \+ E+ t1 k
  347.   if(UpdateFile2.size())
    4 w/ J1 ?" j' k/ U
  348.   {
    * _1 I8 y5 ?  K# m* B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ i1 `( s) h7 ]  ], o$ R
  350.     {
    ! y) v0 V* \' c4 g
  351.       file=(*p).second;
    ; l3 O/ |# [7 ^# M4 T. z
  352.       free(file);
    + J8 }9 }" o0 n- d" e& P
  353.     }2 F: R1 k  I: y" \
  354.     UpdateFile2.clear();
    7 r4 ]0 w% G8 `/ q3 g% o. v/ M" H
  355.     UpdateList2.clear();
    7 {( \3 V. M1 |$ J
  356.   }: @: \8 D3 `* j+ k
  357.   if(UpdateFile1.size())
    5 H) b+ O8 [  J. T' A4 M
  358.   {! o% K1 p% b, z( z2 o. D5 C
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 l- X9 Z7 M, X# D# I
  360.     {1 c3 b# K+ y4 y. K/ E
  361.       file=(*p).second;2 m1 o, F: k- r& e& Z8 }( ^
  362.       free(file);
    0 p$ f3 U% K$ C8 G2 R! v) R
  363.     }
    8 j: x3 S% h" Z! k, ~
  364.     UpdateFile1.clear();! r' a7 E- F* @0 z4 {' R# y
  365.     UpdateList1.clear();
    " G8 _& ~3 f/ U7 R! B# w$ N0 K4 r
  366.   }% B8 E6 N- x' c9 a0 G9 t2 H: q
  367. }  
    7 C4 r, ^2 v! e; d2 Z3 [
  368.   
    3 d8 `; q- w1 q3 t
  369. BOOL CRevAppApp::CheckLocalVersion(void)% S. T4 c. d" Z8 c( e( t7 }5 M
  370. {
    + E$ L% I7 ?  w- a$ K
  371.   int c;
    + v" E# L- q" E. ^& X) v" \  O
  372.   LPUPDATEFILE file1,file2;, N9 q9 P8 \7 j1 u4 Y1 ]+ l
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ) k* G" h5 S+ U  t
  374.   std::list<CString>::iterator l;
    + j8 p: n6 G" p+ G; Y

  375. 8 n7 a$ E: h  n+ \
  376.   UpdateLocal.clear();4 a8 a1 s/ L7 g* V4 }6 x, W
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);. S  F0 z; g7 d/ u
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& s* `/ T; Z8 u
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    - j4 _. @: }) c9 y" }
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);7 H( g0 d0 j9 `& h$ F0 J; u! e
  381.   if(UpdateFile3.size())
    0 I6 U& N- Z3 o6 G2 W/ P6 F
  382.   {
    . N0 V/ }/ Y6 A/ N+ n4 T, q( ^
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)) t2 e) B8 J% n$ F6 F  ]* x
  384.     {
    9 F8 M- N9 ~  e; ~( h' c
  385.       file2=(LPUPDATEFILE)(*i).second;/ G0 j; x1 ]  \4 p) Q) p$ h
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). c6 q- p4 K4 {, R1 J3 L
  387.       {
    : V- ~* H# c0 s2 I0 U4 [
  388.         file1=(LPUPDATEFILE)(*p).second;" c' [& ?4 G: B
  389.         file1->vers=file2->vers;
    $ I$ w/ {0 c5 [/ w8 {; y
  390.       }
    , V5 y* V( q- E+ [# R- T# G* J
  391.       else
    : |) H1 D' ?1 i5 c/ g
  392.       {
    : r& b# S  z! ], s. V- t' t
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  U5 E1 D3 {7 X
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    $ k, l. |  R+ L3 G4 k8 ^  b7 M
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));. @2 l" l' L- x# J3 c" s
  396.       }
    0 m+ ~: b. |$ M8 A
  397.     }% Z# k: M  l* F( O
  398.   }
    + O7 n* b# Y+ n  M
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; s$ S1 i; b; }. B% O$ R
  400.   {. u. E8 W4 F# `$ |
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()), K% I( o+ T2 W0 ]1 Y5 g1 R1 w
  402.     {7 n' ]( b& E0 B5 O+ V, O
  403.       file2=(LPUPDATEFILE)(*i).second;
    1 y/ Q/ _4 r/ N* E2 P
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 [7 d2 [1 k' j$ i& U/ D% B
  405.       {7 }5 r- R! |2 y9 _
  406.         file1=(LPUPDATEFILE)(*p).second;8 Y7 ^) i' p. C
  407.         if(file1->vers!=file2->vers)
    , n8 e3 @! @! C9 F: o# c, L* |
  408.         {0 [2 }( u: B4 b/ @( o6 P. J1 ~) X
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ Z# V8 A4 ]7 R
  410.           c++;; {; y( y# R- M# d( `0 C# M
  411.         }
    6 Y% _% T! y) K
  412.       }* P, |+ ]; U/ z. U3 k
  413.       else
    - M$ y, {/ S  V! V- Z) ^% }; N, N
  414.       {
    ( s3 A+ Q' j0 q8 v! i3 e2 |
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % j8 O, Z# J" u' F- K1 h# S
  416.         c++;: ~  m) O, z; p, J& s' ]( \, f9 ~6 D
  417.       }5 I( C+ |) G. X! Y: G* r
  418.     }
    , v: m/ U, Q( F( N& J' p9 O3 K5 d
  419.   }
    + x8 s$ c* L+ D% h3 [2 _0 H3 q! H- b" y) G
  420.   unlink(".\\DownLoad\\update.txt");
    ) \' d! u6 i* h& E2 g+ Q  k1 p# w
  421.   if(UpdateLocal.size()) return TRUE;
    7 r& x9 |; C$ r) W0 L' e# i1 y/ c' [
  422.   else                   return FALSE;
    4 K5 F, A$ q; u7 N0 ]$ X& G9 Y& b
  423. }0 ^2 S  F+ B9 s0 P
  424. . Y# E1 ~/ U% q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    & d9 m1 Q9 B  C  s. P/ E
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"% s) {! b# f- _

  427. # s: {9 p6 ?$ |! D$ M1 i
  428. * J, n: |( [8 k: Y5 u3 w, @
  429. 1 a  f4 x+ `0 j9 B1 o6 R# ]" I/ d
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    " b* J" x9 j, T, n6 W% p, F  b
  431. {8 Y! r! d1 J0 n0 R  Y! p  P% w
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;, \8 j5 T3 `3 V; r& P. D
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % ?( w5 i" B) u3 S- `
  434.   {
    ( k1 H- K; m% A- S
  435.     char szLanguage[50];$ B* l' f; `* i" `9 P) o; \6 \* z8 |
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . ~8 T3 `" w: a3 r2 ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 t+ L4 w+ S& U; L* n' k, s# s" W
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ Y6 i0 M5 _  l, j
  439.     else                                   m_iLanguage=ENGLISH;) d% a( g) |& C7 {0 l, v8 k: [  W
  440.     char szRegister[100];; J0 ]; I. J% O- r% g9 H0 I
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 ~$ {9 M  z/ n5 H; G
  442.     strRegsName=szRegister;4 {8 s8 C1 j% z+ J
  443.     char szPatchURL[100];
    : R: {4 I6 [% w2 r4 {2 P
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");, U! Q! `' d- N1 u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 V0 I) C8 y. M! K- M1 X
  446.   }8 t3 r  [! H) o% \- K. h
  447.   else! y9 Y( r! ~3 G( H& C
  448.   {
    * \6 C& C- i$ ?# m' C  \0 Q
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , Q2 j9 d2 i! R- ~% g
  450.     strRegsName=DEFAULT_REG_URL;- j( k+ d# d' ~2 q) V
  451.   }
    ! x3 r. y8 ^" f4 n3 n
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    - ~& V  B3 o: ?8 g' x, ~
  453.   {
    / P; X. v' d8 ]& W" k
  454.     char szIP[50];! H0 G7 d  n2 S7 ^* J
  455.     char szDIR[300];
      I6 _7 ]+ {1 t* y" z- x) `
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% \) u  z4 m  I9 Y# N
  457.     {
    & H: n% }" @- M: B- s4 |" U9 K9 P. X& W
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");" ]4 r1 [# [, S
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    : M; _: l# ?3 ~, @& H6 a( P9 i
  460.       strHostName=szIP;
    & P( Z# r, B: F. W
  461.       strHostPath.Format("/%s",szDIR);
    # ]2 _3 R4 |, X4 H2 S) r( f
  462.     }% ]4 O4 Z+ |( [' o
  463.     else
    % z; P8 E/ f! H! l* c: z) J6 R; L
  464.     {
    $ I9 }' o  P3 w: @1 [
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & n2 n  F- j; W' x+ P
  466.       {& b3 ~0 E: @& P4 {, p
  467.         char szLanguage[50];
    ! R7 S1 u- b$ V) T
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 c$ r2 @( F( r! m3 i# p, p# u
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;( H% C' _* t, Q+ r$ n0 m
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 s6 Y/ T/ P1 U  ~
  471.         else                                   m_iLanguage=ENGLISH;1 s' l$ {; k6 J6 e* J" v$ h
  472.         char szRegister[100];
    $ n* R9 ^% ]: h5 C2 J. I. ^* T
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 S6 V4 u$ K2 J
  474.         strRegsName=szRegister;
    , o$ \# c# h$ v6 Y
  475.         char szPatchURL[100];; k: k* [9 A3 r2 i% K
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 g; K: v& U' F) B/ g* b; ]1 J
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / h2 Q% T1 x! i
  478.       }
    $ ?/ q5 w1 r# B5 R
  479.       else. N2 _* B2 g  D1 q
  480.       {
    : M, @: I. W  m! U' `
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      {) F1 B/ j- G/ T( _" O7 |
  482.         strRegsName=DEFAULT_REG_URL;
    / S7 ^$ I3 J' t: C; ^" _
  483.       }
    6 @+ b  K8 Q  F$ [
  484.     }3 u- ]4 g. o/ U! e
  485.   }
    ; G$ _4 u$ i, f5 t0 H3 [" R
  486.   return true;
    + e4 B% ^. |$ E
  487. }
    7 _+ `) t# n8 y6 z, p9 E2 V/ l

  488. 2 f' C7 a2 ~8 y1 E4 c. m$ z* ]
  489. #include ".\ZLib\unzip.h"
    4 N" L" T$ j% }6 I
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ) W- y# k' r; y8 y$ D% o, R
  491. /////////////////////////////////////////////////////////////////////////////
      c. g4 l: a3 K. Z; L$ v9 c- l
  492. // CRevAppApp initialization3 x; \+ @* |- S6 w' m2 Y

  493. ! N  [0 G7 E; E* E' E- ^
  494. BOOL CRevAppApp::InitInstance()
    $ Q8 ~+ d; z" }6 h( n+ B
  495. {8 [* H0 P6 |; B9 c, E; c% B* m
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ; F" M/ b6 K* K
  497. - b$ U+ u5 P3 h
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);! M5 i, `( ~! v8 b
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    1 \7 X  f) e2 Q+ w+ E- d
  500.   {
    ! v+ Z/ R7 V: e
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");- c1 z% [9 b( Z( h( [- s* B1 o
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    * k3 S& t+ E/ o9 u
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    5 W$ U/ s8 d  I, J* W2 n$ B
  504.     {; @; O0 ~" q: ~1 X" S
  505.       strcpy(szPath,szPathTarget);7 V4 f2 d' Z+ f3 N& y
  506.       SetCurrentDirectory(szPath);" q" |% g1 K' t+ v
  507.     }5 o2 ~* t( j5 P3 L' C% `3 M
  508.   }
    8 K4 p2 _- O6 [! q8 T9 K7 h1 q
  509. #ifdef _DEBUG0 Y: H" w7 Y- ^
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 `+ F  U7 `' o9 i& r4 q9 g5 X  P
  511. #else. w  Y* e2 v# q/ T+ U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' V( f2 N& r. f$ E. ]9 U
  513. #endif  G/ r2 L9 ~+ m3 C* n' e6 f( \
  514.   {7 h( f/ E1 z9 k+ ~: V" O1 [  ]/ t
  515.     char tempFileName[MAX_PATH];, D/ l4 w) C, r
  516.     strcpy(tempFileName,szPathSource);
    - A, w5 w( F4 O6 i
  517.     tempFileName[strlen(szPathSource)-12]=0;/ t& f' E8 v: `+ V( K2 Q" h
  518.     strcat(tempFileName,"\\$CSUpdate.exe");0 W$ _. H4 y( w& H( T) Q( y* C5 C
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);+ A: N# A" {7 b) a7 S: T5 R, O
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    % C9 Q5 a& h! ]0 E# J8 ?
  521.     return TRUE;4 X/ L/ e; G' `$ ]& [* z4 g  E! }
  522.   }
    ) D7 U: J! O( j$ L$ e% ^, U
  523.   // Nuke 0118: Delete run.exe+ ?6 ]& _. U0 S! z- j
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );3 z  V/ e! u0 T- u. m. W
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");4 S4 J0 P) t# F( C
  526.   if(!ReadCfgFile("Config.ini"))
    ' ~' I7 a: G& ~$ H9 Q5 c4 Y7 {; h* x
  527.   {
    $ A( H% o0 r! G3 [. _( A
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    - L8 X3 f7 C) x% ^' N: w: R. B& n: _
  529.     return TRUE;- n' {5 C/ I2 r2 i( Z# P, p
  530.   }+ k" E' F# L: x9 o- D/ S
  531.   HANDLE mutex;5 |. m# H' _' w" o! R+ \
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    , u( I3 R! l% H4 Q
  533.   {. ~" `. P& W) e& q0 D  L  U
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ' f) G) K2 `. j
  535.     {
    ( j9 e" O& B, `, U
  536.       CloseHandle(mutex);/ H' i$ C+ Y2 `* i
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    / ~. I* `9 u- w: n, a( G" N
  538.       return TRUE;5 ~! n. O! J4 W0 h' j
  539.     }. q0 i& H* S; Y$ }9 C) F. F& J, ^
  540.   }  
    # W3 U. _& h) _9 g' M* }/ F
  541.   CloseHandle(mutex);
    : i. Y/ T& S% O( @+ M% p* y' J& T
  542. 4 n8 `) r8 n- J  p& m) \9 \* X
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    $ }" q# o6 `  m3 t
  544. 8 ?4 }- r, l* p( `
  545.         AfxEnableControlContainer();
    ( N+ J8 V+ m) S* N( ?6 s
  546. 0 y: V: o* O; j+ w0 T  l7 I( r
  547.   bCanUpdate=FALSE;+ k% e. l2 z$ m( U
  548.   dwStartUpSteps=1;
    2 E$ |* l  I& y+ t" S  L
  549.   dwProgramState=AP_NOTHING;  J7 S( S: l1 w* k4 d5 R

  550. ! u0 O8 l% U# `5 P0 k; B
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);, i! F- ~+ o0 Z$ `- c; ^
  552. 5 z1 t: w: r! ?2 |+ y/ i, W0 H
  553.         // Standard initialization% ^2 a( M8 O, s) k
  554.         // If you are not using these features and wish to reduce the size
    * W6 R' Y3 c1 Y4 J
  555.         //  of your final executable, you should remove from the following
    - i" @: `/ U8 f$ O
  556.         //  the specific initialization routines you do not need.
    2 g- w( l  O8 K$ J/ Z- |1 I3 W! y

  557. / o% F4 f0 g5 X3 ~) n. f7 y
  558. #ifdef _AFXDLL- ^& a/ S. z$ p# c% e+ ^
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    7 |4 U$ w7 G% R  v. W  P+ ~
  560. #else3 z% E/ x, a$ T$ |# w1 Q
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    4 Q$ ?3 a) E6 l3 g& s5 G' W. }
  562. #endif
    / K; A4 ?! D. ]; |! P
  563.   C' y3 _5 E6 a7 C! U+ H$ U
  564.   dlg=new CRevAppDlg;0 c" W2 [+ }9 j. \0 h- v
  565.   dlg->Create(IDD_REVAPP_DIALOG);% I# f! J# M$ N2 X; h
  566.   dlg->ShowWindow(SW_SHOWNORMAL);- d; v5 e+ `. D7 M6 H
  567.   m_pMainWnd=dlg;* z/ c, Z9 z; B+ @
  568. - C* \9 I. K, K  j7 i+ Z
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);( A: K- ]7 `! `6 l; a7 ]

  570. 0 U# R* d5 P; X0 y( f7 m5 k
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( c0 Q1 t$ p: }
  572. //  ULONG_PTR gdiplusToken;, ~& |  t+ S* W3 R" s: @* p
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    1 a, m) D$ b: z1 N) H+ P+ e5 \

  574. / w) D' s1 ~! a, V/ h
  575. //        CRevAppDlg dlg;
    : {& D# ?0 j! I- M  |+ d0 c; o
  576. //        int nResponse = dlg.DoModal();
    , C5 r; b1 t5 N* v/ z% m' @# |7 `
  577. //        if (nResponse == IDOK)
    " p$ K( c0 L+ B/ T) O8 U% K" b
  578. //        {
    3 T& y, J! A0 e( K
  579. //                // TODO: Place code here to handle when the dialog is
    ! ~- H: I+ J9 }7 F
  580. //                //  dismissed with OK. M6 b* X. X" g; {* U( p& P
  581. //        }
    7 |; I/ U/ F$ S) J" m( s
  582. //        else if (nResponse == IDCANCEL)
    - b; G1 {; |1 i* ]+ J$ E4 j# u
  583. //        {
    . b, K8 q9 N' D" {2 b- I" P- M
  584. //                // TODO: Place code here to handle when the dialog is' t  U  \8 d) k/ b3 K
  585. //                //  dismissed with Cancel
    2 ^% V/ |& l7 h; [
  586. //        }
    4 S: L* m# O, z

  587. 0 {& O  C9 @" U: _/ K
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    : m6 h% E5 `) l5 s6 r* _
  589.         //  application, rather than start the application's message pump.' \, u9 u8 O, Y6 m7 G
  590.         return TRUE;$ n1 F2 d- a9 O& i# c, ~& B
  591. }, W& V' i+ M9 N5 A: e
  592. ' s$ y* o, y! O- I/ n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    8 C# n0 t' l% P2 p1 U
  594. {
    . \) s4 S+ Y: x: G; i+ i+ i0 Z
  595.   int i;2 ]9 o1 D: I1 H6 V  V" X
  596.   char *szRet;% v. @; p: _% K

  597. ! s9 r8 h" }/ J  W& f
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    0 P6 U. }* s% Z( g
  599.   if(sztoken)4 \6 N) C# P# Q5 k6 J
  600.   {
    : P( B. I( H" {8 v: D" ^8 S7 `& I
  601.     szRet=&sztoken[itoken];
    " A- t3 P# {: T- _, L% x$ z
  602.     while(sztoken[itoken])
    # [( e" w0 b8 ^$ Z& n
  603.     {
    2 o' r% }/ @  V* S
  604.       for(i=0;i<(int)strlen(token);i++)5 h; Y6 f$ a/ H0 L; H
  605.       {7 B' N1 N/ [) A  H
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    : ?/ V5 U, p3 X- w
  607.         {
    ! C) O5 _- e4 }& L
  608.           sztoken[itoken++]=0;
    ' K2 D1 Z6 J+ {% g! y+ H
  609.           sztoken[itoken++]=0;* m( A3 X7 ?: Q- b1 a% n0 o0 N
  610.           return szRet;
    - u0 G+ F3 P4 w& J1 o7 y+ ^
  611.         }- m, ]9 d. D# z& G( q2 R
  612.       }
    / T0 j- [% j" w% g: Q# h
  613.       itoken++;
    : N, C+ O6 h; q/ y, o( l; f
  614.     }
    7 v1 ~# E( T& H2 `1 s6 ?
  615.   }
    9 ~! M8 l2 h0 u# E
  616.   return NULL;
    2 e3 U9 G3 a1 O& \; m" E, k
  617. }3 E- {& p% o5 N' Y5 f8 r
  618. 1 `1 q+ a$ C& [* d
  619. void ProcessProc(long Total,long Current)
    ) x( a! E% r5 z$ ]1 @5 J5 m
  620. {
    ( Q9 b8 H" Y! t4 b2 N9 l
  621.         MSG msg;& g0 n8 Z5 Q0 n. q3 c+ y- ?  p
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    0 T1 j' e' [# z) E
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 \$ C5 |# s2 ^4 l  w
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 ~# E- ~/ I3 P# u
  625.         {3 s$ s# g$ E6 P1 i2 V. q, p
  626.                 if(!GetMessage(&msg,NULL,0,0))) z# Y' b. d" O8 I% ~
  627.                 {
    : ~6 L$ Q& I* E- L; h1 G2 g( [
  628.                         return;
    8 ?; V& C: g$ ~( h
  629.                 }
    ) |- C- c; i9 I! i$ D* d- M/ `0 E
  630.                 TranslateMessage(&msg);5 Q( U) {% t+ I) D+ N7 Q
  631.                 DispatchMessage(&msg);
    . v) n$ I* p+ q# z/ m5 f0 D% O8 s
  632.         }       
    / F2 R0 ]6 @5 p
  633. }# l1 r1 l% a: i: g  r

  634. - R0 `8 q8 }2 ?
  635. BOOL bFirstChar=TRUE;
    + e9 x  |, l1 }$ X2 U: z* u/ D

  636. / O/ @& b) Z$ ]) w
  637. BOOL CRevAppApp::OnIdle(LONG lCount): A- N0 s7 R, l( x
  638. {0 w7 m, B0 [% Q- ]+ l* I
  639.         // TODO: Add your specialized code here and/or call the base class; _! J8 w$ X* q. U
  640.   switch(dwProgramState)
    : t% w# P8 K8 W0 t
  641.   {
    8 X9 E* `( I! t) E& B
  642.   case AP_NOTHING:
    - C) _3 o( b# r6 b& c& c& t
  643.     switch(dwStartUpSteps)5 D1 ]/ s( R/ l; a& q9 D. ~
  644.     {# S* t; L1 n/ h$ {4 L
  645.     case 1:
    / c$ G0 D/ U9 {5 q
  646.       {" I. X8 D* |. H6 D- b3 i
  647.         int i;( y4 T. {: x. P$ C9 D
  648.         CDC *pCDC=dlg->GetDC();" @( P2 {& p/ d5 S2 O  Q1 C
  649.         HDC hdcwnd=pCDC->m_hDC;
    ( z' j7 v. {  \( p# y/ [' ?
  650. //        Graphics graphics(hdcwnd);
    4 b5 j3 C/ l5 v' d& {7 k! w
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");0 H) e; @, H+ N" x
  652. //        INT iWidth=bitmap.GetWidth();
    + [/ o6 Z8 l+ E. B4 E/ V
  653. //        INT iHeight=bitmap.GetHeight();
    2 E$ f/ T6 l, d2 e1 z; ?. a9 k
  654. //        Color color,colorTemp;& }- @* R. o/ ]
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    5 g+ ?6 U5 _& @5 Q1 `
  656. //        {
    - r5 G! c( V  R1 K( k2 B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - X  x4 Y1 W5 s5 y( k
  658. //          {
    , B6 q( ?8 M+ C; s1 s$ ]$ I
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    : S" F7 A: E2 ~3 C8 [
  660. //            colorTemp.SetValue(color.MakeARGB(
    5 ^3 K8 }& N( P! E7 @. E. ~
  661. //              (BYTE)(255*iColumn/iWidth),& o4 e. k( u$ ?0 n3 w8 ]" ?
  662. //              color.GetRed(),
    2 S+ Z% v( R+ }% L3 ~1 `; d. ]& y
  663. //              color.GetGreen(),% f% C1 a0 l2 u- B$ l3 J# ?$ c
  664. //              color.GetBlue()));* v8 {2 M1 j' C% @$ @8 T
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ( y0 K0 Z) j5 b0 M( {$ o0 I) C& c
  666. //          }
    - H. [7 x2 Q; F) R! c. s; g
  667. //        }5 R& o5 c+ G8 B; f8 I& E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);+ [7 q- I5 b5 ^* ^
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 ^$ O: @* ?2 v1 ~. ]0 T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 o( i* b3 _9 J
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 t/ ^+ Q$ M. X2 ^* v9 X. b, q6 u9 ?
  672.         for(i=0;i<240;i+=8)
    # e. ^3 ~- Z) }+ {
  673.         {& z# h1 h% ]9 I  ]
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ R; b  V7 y# E* D2 J3 ~
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 ]0 H) b6 E8 I& I& A
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' y' \7 e8 G) z5 u2 e% [2 y
  677.           Sleep(33);
    0 f3 l" ]$ S; Q& U6 p' y
  678.         }+ v' \" g' a+ @: S/ B
  679.         Sleep(1000);. A3 ^7 _5 ^9 D$ q+ `& t1 y
  680.         for(i=240;i>0;i-=8)
    / \, C/ H% n4 v) Q% Z0 g
  681.         {" p3 @" U* H( K9 x# w: F
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 k9 b1 L! U5 e6 ]
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" \3 Y6 R$ ^. o: B. U. ~8 H
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - d, F7 ]9 g% `( K6 W- x
  685.           Sleep(33);+ ^8 \' d) H4 J- H; y9 t
  686.         }
    ) G. K  g5 d" {% a* G4 K/ ~  I9 Z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);# p! C" d& `9 U
  688.         dlg->ReleaseDC(pCDC);
    & S/ b4 u, M: I9 e! D# y6 l  F* u
  689.         DeleteDC(hdctar);5 O$ h8 o6 ]* Y# g3 M* G: }" j
  690.         DeleteDC(hdcsrc);' i& W: l* S  A( Z- G* c
  691.         DeleteDC(hdcorg);! x2 I; b; R! C5 U
  692.       }) d4 V, Y/ ]8 z: ?
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);3 o$ `0 w. U* M, E4 l" [: K
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");5 Z7 s/ a7 E+ t
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    5 L& h/ H' ?# {) Z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");* M9 e/ K! B* J+ A5 n+ r2 i
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) v+ |1 l& @2 E) x1 \
  698.       if(!Dn.Connected())
    : c* X' a5 A2 y" R
  699.       {
    8 ]( ?7 |2 H- d9 O: u% N1 X  |
  700.         dwTotalFiles=1;
    & O/ J7 I7 p7 p2 a
  701.         dwDownLoaded=0;$ j5 w0 g' c3 @: i, ^( c- p( o+ D
  702.         bSilentStep=TRUE;
    + w4 x8 C7 f2 [( F2 U
  703.         bCompressed=FALSE;
    2 x* z4 ]8 p; e
  704.         strExtLocal.Empty();; k9 ^9 T# u2 F# p7 ~9 A# {
  705.         strFullName="readme.txt";) p& ]4 a5 Y2 N6 s- f
  706.         dwProgramState=AP_CONNECT;8 ~+ x! J% V! s. R0 U* t5 c
  707.       }: o1 A" k: O+ ^8 j9 B4 [3 |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    2 [" I7 D! \" \+ U: n7 n
  709.       dwStartUpSteps=2;
    # P# T9 n, _8 e/ g0 H8 N6 I; _- Z
  710.       break;2 [2 l! W1 @1 B/ A) `$ @9 O0 Z, @
  711.     case 2:
    7 O' h4 n: o9 Q6 f
  712.       {
    9 T/ t- |9 ~' h" z7 }0 y
  713.         int iEOF;
    ) B2 [) o. @4 D. F5 [
  714.         FILE *fp;& d5 Z2 n) }- n  f) U
  715.         char szString[512];$ V" ]% t' c2 u0 v
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
      f7 H; \( e- Y' \" a
  717.         if(fp)1 I, Y4 Y! t: D* @" Z
  718.         {
    ( l/ X" N3 F: z
  719.           do& }/ ?! e4 @, E. w" K& j
  720.           {' [. l8 N$ G( l" G- m1 t/ |
  721.             iEOF=fscanf(fp,"%s",szString);
    5 B& g* L- r$ j( z) S; ]8 A5 n: Y
  722.             if(strlen(szString))- [% Q" k; J3 \  N- ~$ a1 i: a0 V( F
  723.             {
    ( e+ U; s) [$ R1 E7 g
  724.               if(bFirstChar). w4 _* ]. y8 z" W2 N# p
  725.               {. ^$ o0 _9 Z9 o, b
  726.                 bFirstChar=FALSE;
      c# G1 K4 d, ~( C4 h3 |) v
  727.                 bConnectIsBig5=FALSE;
    - p! l* A- p+ N% h8 b$ @% x
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    8 g9 Z$ O8 n) p' D
  729.               }4 F1 m: y  c, Y' G7 n) R
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 c/ A9 E, k3 o9 k1 }" U
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));: `3 i  ?& A2 ^) R: s
  732.               dlg->m_ListText.AddString(szString);* z0 A5 J% B( O. [) f3 f
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * D$ o3 W4 E# m+ ^
  734.               *szString=0;# d& Z, f; ^" u2 N2 o" ^, n
  735.             }0 I, M, @( l; y2 {+ k+ ~/ B5 h
  736.           } while(iEOF!=EOF);
    4 w+ [; `7 E* J' ~' d- h8 P
  737.           fclose(fp);: q) B# Y5 c: G# x
  738.           unlink(".\\DownLoad\\readme.txt");
    : y* f) D2 d+ M" h' K
  739.           dwStartUpSteps=3;
    $ V5 p3 `5 @* b/ v3 l: c6 |
  740.         }
    " I, d/ s* M9 s: S3 ~0 W. _
  741.       }
    + x. C' W& S  T" T, y
  742.       break;
      A8 ]8 [- g; x7 R
  743.     case 3:
    , y# Y. @8 o* h4 q3 T
  744.       if(!Dn.Connected())
    8 n' Y% s8 }; P6 l* B
  745.       {
    ( ]$ K, z. G% z5 @" |* T
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ! L2 a$ s9 q% ~
  747.         dwTotalFiles=1;
    ( ]( ~. I1 w8 W: Y) w2 M  H
  748.         dwDownLoaded=0;3 a- F, k: p5 Y
  749.         bSilentStep=TRUE;: }* U9 G, k, Y
  750.         bCompressed=FALSE;
    ; _1 D' A( y! C& H
  751.         strExtLocal.Empty();
    % H7 X) j$ s1 u; p
  752.         strFullName="checkversion.txt";
    ! U4 E1 i( D5 @) v2 ^' u9 w
  753.         dwProgramState=AP_CONNECT;$ h8 |, ~6 Y; }$ d
  754.       }) n2 x# }6 f- ~) x5 ^0 U$ x3 C' S
  755.       dwStartUpSteps=4;1 Y0 O7 Z9 a; m5 j
  756.       break;
    0 `% p2 z3 E- M
  757.     case 4:7 h  p, o2 C$ [( y
  758.       {) I: o& {1 O% n% L2 R' f- U5 s
  759.         FILE *fp;
    ( H. f1 T, A5 A, P3 \2 C% f  v% t
  760.         char szString1[128];; _! B- Y! a4 J: r: P
  761.         char szString2[128];1 k7 f1 l% B8 T" G; M, o' h
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");) D# i" z2 h/ R  V+ s9 j7 O% q3 S
  763.         if(fp)
    ) n7 [; m$ J, @" G6 Q  q
  764.         {
    & E5 J- D  }& H5 A2 o
  765.           fscanf(fp,"%s",szString1);* U! F% S' g% k+ m/ y
  766.           fclose(fp);! w# r+ Q3 m: f9 l6 a7 w
  767.           fCheckVersion=atof(szString1);
    8 e& Q  L. V' Q& ?. \! ~: {
  768.           fp=fopen(".\\checkversion.dat","r");* K6 G9 ?; O$ n# _' `7 g
  769.           if(fp)
    1 \) }; i  S6 T( q- _5 g
  770.           {4 r  d5 q: ]; v% ?. r
  771.             fscanf(fp,"%s",szString2);
    ; o0 Q/ j) U0 f7 N! {" g: ~2 l% `
  772.             fclose(fp);0 t* c$ t4 \% v4 z
  773.             if(atof(szString1)!=atof(szString2))
    3 f9 Z3 B3 `- R4 L) ]) Q
  774.             {) G& ?$ a, X+ n6 v
  775.               if(!Dn.Connected())
    1 h& K- Q+ L/ q$ v" X1 s/ P
  776.               {
    ! L$ F2 S7 W. x7 ]: _& ?" b
  777.                 bFirstUpdate=TRUE;
    8 d3 O9 E$ V& W0 L  |: @
  778.                 dwTotalFiles=1;
    3 |+ R! u5 J9 x3 n
  779.                 dwDownLoaded=0;
    & t9 z* r( x5 A) ~4 T
  780.                 bSilentStep=FALSE;% k* N1 Z6 X. |6 n1 g
  781.                 bCompressed=TRUE;
      L5 T0 g2 v6 }# G' k: R9 u$ Y
  782.                 strExtLocal=".\\DownLoad\";5 d6 ^+ K" t9 j; m% n, X2 Z9 L- ]
  783.                 strFullName="update.txt";; d: E7 r- D9 s% F4 y( [
  784.                 dwProgramState=AP_CONNECT;
    ( O! W! Y+ j" s( I, z+ S+ T- C
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 e* L) C. L* I( h$ H# L3 |8 v7 h
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 U- n) A+ g- O0 b* Z3 S0 w
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : G2 l7 L7 I) w3 g) X! Q1 Y8 `

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

7 q+ W" b  H2 z, k4 i& @
5 P/ b5 J( [. k- B+ c9 b2 x" k

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

寂寞在_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客服返回頂部