CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
7 Z3 Z( o$ Q7 {. w7 @; N) K
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 d% k* x3 {5 Q) F- Q
  2. /// w$ ]7 x' y7 j) ~9 j
  3. ( l3 Z# P7 ^% |0 ~3 s
  4. #include "stdafx.h"
    + R* f9 U% K3 a/ S+ Z+ N, o: U
  5. 0 {- q9 r5 t# O$ ~5 p
  6. //#define UNICODE: @, I0 I" \( l. j( K: q
  7. //#include <gdiplus.h>* M( \" E$ s# Z% l& k# w! n
  8. //using namespace Gdiplus;5 M+ t! Y  g( k4 F

  9. 4 I% Y* M4 Z0 B1 x
  10. #include "RevApp.h"+ g4 \3 P2 N' L8 s6 x7 d
  11. #include "RevAppDlg.h"
    9 C' A" ]* p" ^; z9 a) c$ x0 d6 S
  12. ' e  O* |9 o2 U2 H( i  p' V
  13. #pragma warning(disable:4786)4 _" U, f5 g" I3 V
  14. #include <map>1 G: _3 X3 J" T9 {5 X( s
  15. #include <list>" o* U4 |" w) f3 h' `" T
  16. #include <direct.h>
    , T4 l9 z* O% t" T: C2 g% y, y7 q
  17. 1 n6 C# M: q$ |3 O- A) i* v
  18. #ifdef _DEBUG
    9 h/ ~5 \2 j: A0 R5 z3 K
  19. #define new DEBUG_NEW% }+ N4 T1 Q. T) O
  20. #undef THIS_FILE
    , J. _! j$ a9 p( P
  21. static char THIS_FILE[] = __FILE__;
    . O* p0 ^+ W  g  Z' X8 e4 ^
  22. #endif
    : s/ R  b+ g' I0 T, c$ m
  23. #include "SkinResDef.h"
    4 {- g. t" p- \$ R# }
  24. #include "ChangeBG.h"" q8 a- c4 O& b. M8 G3 }
  25. #include "AFXINET.H"' F3 J6 B7 t& h5 ~6 l2 ?+ b

  26. 1 b( I3 O7 s2 v3 g
  27. #define TRADITIONAL_CHINESE 0- Q2 N+ u  P" w. q0 |3 x. ~+ o
  28. #define SIMPLIFY_CHINESE 1; x7 `$ e/ B: x; s0 g7 ]! f/ D
  29. #define ENGLISH 2; o; D0 Q0 z/ p1 G) {: o  r
  30. int m_iLanguage = ENGLISH;" M8 J+ p+ D: F2 q, e1 Y9 M# F
  31. /////////////////////////////////////////////////////////////////////////////
    5 m/ ^$ T: h9 {# w$ r7 {; J$ P
  32. // CRevAppApp
    & n/ ~! ^1 G- K- M2 ?* ~0 w" g
  33.   C/ @9 S2 ?0 F, k
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    4 k  @: T* |+ k$ C+ w
  35.         //{{AFX_MSG_MAP(CRevAppApp)
      [. i8 }# |7 [
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.0 \2 Q; f% b* P8 J4 r: c4 j  o  K
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!* V9 d' C& D, a. p( S
  38.         //}}AFX_MSG1 B% j  C' w3 |3 D( \; r, s
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)' T/ L. h. k  q! [1 e) o5 e& b
  40. END_MESSAGE_MAP()+ q" L- s: P% J

  41. . P7 d' l3 y, X8 c$ [' E+ ?
  42. /////////////////////////////////////////////////////////////////////////////, }6 P( x( u, e: x$ N! X
  43. // CRevAppApp construction/ R1 [" Q' T& O) }1 o
  44. 3 y. }6 p; n! e  c
  45. CRevAppApp::CRevAppApp()
    5 y% C6 G: N+ P# O# c
  46. {1 i! @6 L  s, y; g, G
  47.         // TODO: add construction code here,
    ! r4 ?; \( m3 B3 c0 B, \' I: m
  48.         // Place all significant initialization in InitInstance" `  I6 e! Q# n4 x$ }
  49.   bDisplayIsBig5=FALSE;: s# s0 R  e( b3 @9 ?. F
  50.   bRestartUpdater=FALSE;! F  L' [& Z( b" u0 M
  51.   bFinishUpdated=FALSE;% J3 l/ U3 o. p3 O5 _
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;* Z6 m: ]9 r& V! O
  53.   InitChangeDataBig52GBKS();' c* j$ r- `4 O
  54.   InitChangeDataGBKS2Big5();/ z8 h# u* f2 [
  55.         //
    , Z5 c# N* y, E7 I
  56.         bClickRunExe = FALSE;
    ' H- `. H/ ^* v# h
  57.         //4 r+ g& S* H/ X* {. U0 {
  58. }( i! r/ `5 Z* T0 K+ S
  59. ! J: H& T$ u6 P% g" W2 U4 j
  60. CRevAppApp::~CRevAppApp()+ f/ n1 \5 q! u& }! M# R
  61. {  W- V$ y+ `+ j# T
  62.         // TODO: add construction code here,5 f5 e0 I3 B" H9 _
  63.         // Place all significant initialization in InitInstance. }4 [. R0 M. f' _
  64.   EndChangeData();. A5 p% r$ n4 S, A2 W8 l' t# r
  65. }  t3 j, J6 w7 Y9 k/ s1 {  f7 a6 G

  66. 6 g% ]6 X; g. I  y( k1 x; S0 U
  67. /////////////////////////////////////////////////////////////////////////////
    2 q4 s3 @$ u( o- {0 Y+ X, m
  68. // The one and only CRevAppApp object3 e3 h7 A5 b: r) n$ F

  69. # ]" m' s  v4 N, [8 {1 `1 X
  70. CRevAppApp theApp;
    0 e% f5 F* ^* z. z8 g8 V" {

  71. , y) F8 q) w$ z3 R
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ' P$ X% y' O3 W, n7 p
  73. {" Y9 G$ q8 X- b5 G3 Q) H6 C9 j
  74.   int iEOF=0;
    : N9 u' d% m3 r/ x8 ~
  75.   char szTempName[MAX_PATH];
    8 e: a  K. N  G# t, i- d
  76.   *szFileName=0;
    , U' Z$ ]: h" j" C* m
  77.   iEOF=fscanf(fp,"%s",szTempName);0 o' K: p" T3 q7 ~7 C
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')* a  ~2 [6 k& u' D6 u7 T6 F* u$ H1 M
  79.   {
    " t4 F1 ~6 y* [4 U* R6 c7 T! R/ K
  80.     strcpy(szFileName,&szTempName[1]);
    ( G$ J6 G4 S0 f1 r# C$ o2 r  A; v
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    : Z, d  M2 U8 P# P8 D% A& G
  82.     {/ p2 h2 k" ~8 t$ [( e
  83.       iEOF=fscanf(fp,"%s",szTempName);# w9 a! v  j2 Y! ]& H& n6 y. W
  84.       strcat(szFileName," ");
    9 x& r) K1 ]7 U( J0 k- j% h
  85.       strcat(szFileName,szTempName);( [- p, i5 s: y9 G$ h3 s
  86.     }- P( W) U- \" a
  87.     if(strlen(szFileName)>=1)3 ?  R  D" Q' J& ?! t: n' b
  88.     {$ w/ c+ L$ e$ c& s9 c
  89.       szFileName[strlen(szFileName)-1]=0;" m) y8 m) J6 i) [, g1 ?
  90.     }
    + w  {- J( X) S* ?
  91.   }
    ; M0 c% D1 }( \; h8 `8 X6 A+ J
  92.   return szFileName;9 p, Z0 ~0 @. [. W/ |9 X' r
  93. }
    ! `* R  D* z( Y" b! h0 k* L7 H

  94. 6 a4 ]/ ~: J" S4 H8 \( S
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)1 q. v# ~) O6 k) T0 h6 D3 p6 g
  96. {
    2 A1 x' X4 i% _4 C& p2 @, C
  97.   FILE *fp;
    . s8 x1 u7 q! D
  98.   char *key=NULL;
    6 _% T- L' F- \4 f+ p  }5 `
  99.   char version[MAX_PATH];
    ! @1 k7 J' w$ \% q: d! U
  100.   LPUPDATEFILE file,olds;
    / `; Q) N1 n9 C, o/ p
  101.   std::map<CString,LPUPDATEFILE>::iterator p;2 U3 U, F/ _: p& {/ ]

  102. 5 |6 D' h- S9 x. B6 G, ?- N
  103.   UpdateList.clear();! P1 J) Q- C/ |) A( ]. T$ S9 n
  104.   UpdateFile.clear();
    , @3 [* e. g+ v/ X* B
  105.   if(GetFileAttributes(filename)==-1) return false;
    ! ^8 Q/ ?% R! V1 B1 }
  106.   if(!(fp=fopen(filename,"r"))) return false;3 U# ^- {# @2 \! ?( ?2 C2 [
  107.   fscanf(fp,"%s",version);+ [/ Z/ b; q1 Q# ^/ \* `: X
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . I$ x8 B* x- b: D6 A* B( u) I
  109.   while(fscanf(fp,"%s",version)!=EOF)* K5 E' u7 C8 a4 q5 O5 n( Z
  110.   {- u) j$ S" v. D& t
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 j' g7 T8 p: Y+ n! O$ w% L6 U
  112.     fscanf(fp,"%s",file->path);8 j* a& e9 O  T- p* k2 R
  113.     ReadFileNames(fp,file->file);
    6 z' V  `6 p* O. O" d
  114.     strcpy(file->full,".");
    7 I# R# [. l& t6 U
  115.     strcat(file->full,file->path);) B6 H& R( t% ]
  116.     strcat(file->full,file->file);/ d( R# y. M0 F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()), s9 L% u. U( }6 Y% g
  118.     {
    $ k& \. g5 Y6 C7 Q, x  l
  119.       file->vers=(float)atof(version);  Q: C5 u% y  c* R
  120.       UpdateList.push_back(file->full);# h6 f! w& y2 r1 ?
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    & v% G: m' R  A) A  [7 J: r
  122.     }  y' K# v  ]( E- c6 ~* P1 J# E/ v
  123.     else
    ' V0 I# w" h; U- W. Y
  124.     {
    4 [0 n2 R+ b$ _" l* s
  125.       olds=(*p).second;
    # X) F) U  {. n9 E1 U( {; t
  126.       if(olds->vers<(float)atof(version))
    " W! t. M$ E3 j
  127.       {
    $ B8 D! e) p4 F7 s6 _+ M
  128.         olds->vers=(float)atof(version);
    2 ]; X% t' P& P# K1 x4 ?) Q% C# j
  129.       }( I( H$ g" `3 Z9 @0 P1 E  t3 M
  130.       free(file);
    & F2 b- l; y$ f3 y$ }
  131.     }
    0 q* j  K6 p( s2 K+ g, Y
  132.   }
    % e( L5 n( Z/ r; s. v, k
  133.   fclose(fp);6 E' y$ o) ]+ u" @9 U
  134.   return true;
    ) g  l( g$ ~; x! n; |0 p- k
  135. }2 }* ^. K/ S2 q- ?- X/ W
  136. / E+ C5 U* w, X: O% o$ w. Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)3 ~2 k& d7 ]# V- @- `& T/ u
  138. {8 D, k  f' Y3 W3 s  z: y) o
  139.   TCHAR  szFull[MAX_PATH];
    % L( ?6 n- J- `* m' v6 i0 C" m% o4 I
  140.   TCHAR *token,*inter;
    , H) K  r* [  M4 [# Z
  141.   *szPath=0;' S$ f" b" S- I8 w1 j5 i
  142.   strcpy(szFull,szFullPath);4 z) j& Z3 K( X% N$ c
  143.   token=strtok(szFull,"\\/");! D5 q) e+ u7 ^" K  I8 |" g- a
  144.   inter=token;1 B6 Q3 r% e; X: S% t4 b
  145.   while(token=strtok(NULL,"\\/")): h, k* V7 @1 j& r7 |# O9 q
  146.   {7 M3 S# d9 ]4 C/ ]
  147.     strcat(szPath,inter);0 H- U6 Y- x4 J! {
  148.     strcat(szPath,"\");) @9 h8 |4 Y" u% o) j
  149.     inter=token;
    , I2 Q* l4 w' R5 q1 S/ t7 b
  150.   }
      O; r/ W" ]& n7 ~, W. o  q; e
  151.   return strlen(szPath);% }$ K' h- j- i7 T
  152. }4 m, M4 ?/ \9 |
  153. & f' g0 o% b" h5 o0 e
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)7 x7 p' e/ o. P; ~! r
  155. {
    , O8 U& e3 u, B
  156.   DWORD attrib=GetFileAttributes(Target);0 }% _+ e; h  Y/ K, F
  157.   if(attrib!=-1)
    * `5 U* H* A* o1 }$ ]9 e
  158.   {" X) a' b- h3 T% l; v! m
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    6 E9 U2 k/ K  w7 Y/ [. G+ J
  160.     {3 O1 w9 J! n% A& U- d0 l( q
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);6 n+ t5 O5 r9 c
  162.       SetFileAttributes(Target,attrib);
    1 s% w+ r3 [  j% Y: X' A5 m2 V
  163.     }3 S6 i  Q/ W3 J9 h1 k& s. I
  164.   }
    ) {) o$ e5 K& Y) }; P5 U
  165.   CopyFile(Source,Target,Erase);
    5 q* X1 ^# ^* M
  166. }- S6 I9 b  u, P5 h7 x$ @( u

  167. ) y4 {/ e9 v  g) ?4 f
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    1 |* J; h( M( u5 f- G
  169. {9 t4 k6 t* k5 J4 K
  170.      FILE *fp;
    . n8 d" a) N# p& h' o+ s
  171.      char  szBuffer[8192];( k, c: M6 Y. e' n' F, P0 X- I, [; y0 d
  172.   va_list  argptr;0 z& t! v: Y, g" ^$ z# I. g
  173. ) A8 C( C& l$ @2 M; }9 Q
  174.         va_start(argptr,message);
    . Z  y% k- g: l2 m, ^& z
  175.         vsprintf(szBuffer,message,argptr);+ |- W1 X9 c" S3 y) L
  176.         va_end(argptr);
    7 X$ ]% Q) e7 O4 b  I
  177.   fp=fopen(FileName,"a");
    " N. n+ }$ y% S: P$ K' ]" U& o9 h% J
  178.   if(fp)
    9 i/ p; g# w% h# b
  179.   {. l6 c  Z$ k" @' b# k
  180.     fprintf(fp,szBuffer);
    : p, K# Y  u! S7 b3 a9 Q
  181.     fclose(fp);
    & n! u1 `, N3 T9 e2 ]" F
  182.           _flushall();/ A. d6 V5 w6 B% y/ p( G
  183.   }; K& p7 E, a2 N# L( [9 {  c1 e
  184. }
    8 M8 }$ e7 S; V4 `: C& T! I1 a
  185. - e/ a! m$ s2 j4 Y) o
  186. BOOL CRevAppApp::Fclearf(char *FileName)! M& j6 c4 I9 e! ]( _
  187. {6 C1 Y; X% r+ C  A, K5 F
  188.      FILE *fp;2 s+ D% o' w% t
  189.     DWORD  attrib;, u4 U6 l$ o9 G
  190.   attrib=GetFileAttributes(FileName);* e: e6 m$ C/ }# M! I, S3 [7 u
  191.   if(attrib!=-1)- Y" D# E4 Y5 ]+ t9 B/ `
  192.   {
    % {" r, Q9 Y1 o
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    : |; E4 D& @. \& W
  194.     if(!SetFileAttributes(FileName,attrib))3 h& a% J! u9 Y- k, A& ~1 h6 f% e
  195.     {
    # Q$ [1 {6 U+ Y" c% C; s6 N
  196.       return FALSE;
    ' b, f% y! |" |- ?: ~) b8 r
  197.     }( {  n! z2 [0 T( T9 S( u
  198.   }5 @5 ~! u6 \. p+ }
  199.   fp=fopen(FileName,"wb");
    0 D9 v7 n1 j  s; t
  200.   if(fp)0 v( |1 N) R/ e5 G0 @
  201.   {5 g/ ~  a7 ]. z2 Z& }
  202.     fclose(fp);7 l, `3 w. ]3 Q3 R% n
  203.   }9 Q% s( D, m- i& E' T, N
  204.   return TRUE;3 Z/ m. ^: h, q) @4 z8 F
  205. }
    ! S( O  O8 m4 v) J% Q' B- M

  206. 9 T7 B8 t! G9 m9 S+ k& @. b$ ]4 J
  207. BOOL CRevAppApp::UpdateLocalVersion(void)" @0 I+ @  d0 X8 b- E
  208. {
    ) `5 \5 q$ S) k1 q* o. J, G
  209.   char filename[MAX_PATH];  T+ `( s. e1 R( i
  210.   LPUPDATEFILE file,olds;
    4 J# w9 p  g" d
  211.   std::map<int,CString>::iterator i;2 _% s7 X9 Y6 |7 \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    + U( ?: _5 C# _( }7 g! H% S) k
  213.   std::list<CString>::iterator l;$ Z/ F% t0 y. z% u3 y  G
  214. 2 N% I5 r0 x! C- g/ h
  215.   if(bFirstUpdate)
    8 E. `! \' l0 [
  216.   {
    ; B! q% U- U( F9 F0 g& I
  217.     dwCurrFile=0;6 z, n. r: W) u. x  U& k. W
  218.     bFirstUpdate=FALSE;- S0 K1 h# {' G  V/ {/ a
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , @2 p8 ]! {4 V" y" T
  220.     {
    9 Z# F7 j7 ]0 O
  221.       dwTotalFiles=UpdateLocal.size();8 U' w7 ^7 ~  O4 e2 k
  222.       dwDownLoaded=0;
    / a7 a1 O6 F8 ?6 q. N9 s
  223.       bSilentStep=FALSE;  r3 O( k) u8 d" P) X7 B
  224.       bCompressed=TRUE;) |! G5 ?' G& E9 r( S
  225.       strExtLocal.Empty();
    0 h" g$ s3 G( L, y* D
  226.       strFullName=(*i).second;) J* Z' _$ p6 N$ z( n5 D3 \, n
  227.       dwProgramState=AP_CONNECT;
    - @. E: W! E" O4 H; t
  228.       return TRUE;
    1 L" s6 [# J: u2 J
  229.     }
    ! h# k$ g* J& I6 Z
  230.   }2 U/ P. G3 c+ t# U% u
  231.   else if(bRestartUpdater==FALSE)
    " }; L9 _/ h. X' X) `$ P
  232.   {4 h. \7 U/ W& M% c2 s3 c. D
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    & v+ u* y; [# d% U, W' L  i1 ?
  234.     {. f; q2 U+ V  D  U
  235.       file=(*p).second;
    0 o3 \. {3 v- z
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    : c1 U2 T) K% W" v6 m. @
  237.       {
    3 N# ~7 r+ t! }
  238.         olds=(*p).second;2 }' E. B; B8 Y! s6 J
  239.         olds->vers=file->vers;
    : y$ ]7 A1 f% |6 c' B! i; }
  240.       }
    ' A4 p0 E2 s9 F/ P0 d  S
  241.       else
    . F5 y. m8 P# H2 A# Y1 O: n: F
  242.       {
    . A2 I: _( m/ f
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& ^, k7 l* M7 y5 a# e0 x. y6 R* x
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ ~& x5 x" @3 x# A
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 ]  c8 N/ p, q0 K
  246.       }
    $ t: z, a. H' p- Y3 r; H7 P% W
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    $ S# O: s3 H) M$ \
  248.       sprintf(filename,"(%s)",file->file);& A' t) x( I' T+ t8 `. g: A
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! c7 k8 e/ C- e. j( g5 y+ e
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }9 C, V- c* O* F% S0 d, {) B9 S
  251.     }" F* o) x8 j+ M1 a
  252.     dwCurrFile++;
    7 g( a; j% h2 K
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + I" a! O5 _. N
  254.     {
    ; @. ]% u! f4 V; L: ?# O5 r! k: ~
  255.       bSilentStep=FALSE;
    3 U3 e: ]' ?- b0 S7 N
  256.       bCompressed=TRUE;
    ' c/ }7 n. Z3 ?) B
  257.       strExtLocal.Empty();% x" J6 u: A/ I# Q  G
  258.       strFullName=(*i).second;
    % V; R: `* H, a, ^" M
  259.       dwProgramState=AP_CONNECT;+ \* b) J. Z8 p' X) {( X+ \
  260.       return TRUE;
    4 W2 C; g& R* q0 k# d8 {3 [
  261.     }
    . L: U& k% H2 m1 r! s) a* H
  262.     if(!bRestartUpdater)3 _) c# k* F& p; F1 _
  263.     {
    8 k1 J( v9 x% u! b8 {1 Z) L
  264.       int iCurrSize,iFileSize;/ ~' T) [% |! H( {% P
  265.       iCurrSize=0;& C3 l5 D1 i  d& Q4 }9 J
  266.       iFileSize=UpdateList2.size();9 G8 n( t! w# M. x7 C4 ^; I4 m
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");; i9 C9 e# h/ d. F; M9 l. m+ F' Z
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    9 D7 x, D# }! u( x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    $ T5 S/ x' J: r$ b1 p
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * ]- C+ C6 }1 _
  271.       Fclearf(".\\update.dat");! t+ ?2 t* t- h0 V
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 E0 r/ x. s4 H& J' M8 m
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)1 t: ~) F+ o/ j6 J! l
  274.       {
    5 u2 ]! g4 A7 n% p" r  Z2 [
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())+ r* J/ A: V! U6 E* m% t" E  M
  276.         {: y, \- ~7 U- ]* D2 u6 k
  277.           file=(*p).second;2 d. Q; ?) V) c3 ?  [' y
  278.           sprintf(filename,"(%s)",file->file);
    * C- P8 t- P7 p7 _5 J$ X" G
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # t! g" {! u7 |, D4 l% K
  280.           iCurrSize++;! X0 P' ~6 z' G" S( |1 V5 E
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    . l+ ?" a$ g5 Y1 l8 G) o0 `; Y. q/ u5 v
  282.         }! F' i8 L; [$ K5 q( ^' q9 y" Z
  283.       }
    ( ~, N' G! w2 A+ k, Y# C; ?
  284.       unlink(".\\update.txt");6 B5 S$ X' A' F3 Y" f$ A) W
  285.       unlink(".\\update.tmp");4 b. ]7 N0 v6 p# P9 m+ h: _. g  d
  286.       Fclearf(".\\checkversion.dat");! l* b9 R. E; j3 ?7 F* o. v
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    " e  \; W4 p: i7 E
  288.       if(UpdateLocal.size())3 D3 ^2 H: v0 W( D6 T
  289.       {, D9 _' q' h9 d' ?8 Q+ Y& |) {
  290.         UpdateLocal.clear();* q$ [/ ^# x% u- N# x
  291.       }2 X; t8 R6 r5 O. r- ^* r
  292.       if(UpdateFile3.size())
    & c0 I, `* G# e' B6 @; C
  293.       {2 g. ^2 z3 K: U7 T& h# l* v4 ]. c
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 Z& Q! _9 p: ^3 g
  295.         {
    ) c" X2 p) m' R: a, g; ^
  296.           file=(*p).second;8 f" i5 K1 L# }3 x7 ], `
  297.           free(file);
      {# l( j& @" C- C# [
  298.         }
    ; m. z. `/ E! H6 a) s  C
  299.         UpdateFile3.clear();
    & {6 m. z! m0 g
  300.         UpdateList3.clear();' F6 A* M% [2 |( G. U# C
  301.       }
    9 W% ^$ g. D5 E# M3 w: ]. m
  302.       if(UpdateFile2.size())- }# j! M/ C4 a3 N
  303.       {
    , R& S0 {3 B8 V3 O! ~
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      C+ [  P$ t7 ^! f0 _1 H
  305.         {; n/ J- k4 ]7 S2 Q: l$ Q
  306.           file=(*p).second;
      t/ G, P; ]( e+ Y. V8 b
  307.           free(file);0 s" w4 l4 Q1 |! J- m5 U) B
  308.         }, l1 ?& o( I/ |, A, N
  309.         UpdateFile2.clear();
    . h# g# P- C, N
  310.         UpdateList2.clear();2 N! n- o/ t% F& x$ D9 K
  311.       }. ^% E3 Q# p; w) n! v/ l
  312.       if(UpdateFile1.size())% O, K" Q6 E% |7 }% A; v! w
  313.       {
    . U  u1 ~0 o' o$ Y$ O- k
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # M! s: e0 _/ {0 L4 l! C: W
  315.         {
    % G& M; @' u8 i, i
  316.           file=(*p).second;( I/ }. N* h7 ?$ V- o+ ^" h# s
  317.           free(file);
    ; k6 P" @4 u: W7 M- d: ?+ |
  318.         }
    1 a5 {; @, H8 U6 n/ Q, r! R
  319.         UpdateFile1.clear();
    6 {/ n7 T( [: q9 D% G. I
  320.         UpdateList1.clear();& v1 m( ?2 X6 H+ I
  321.       }) P) x7 N$ |1 U8 k
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    $ {2 O0 I' o$ b+ y- l/ P
  323.     }8 H$ S" o. s8 \2 m6 }. W+ |
  324.   }
    ! J0 v" @/ N7 C5 J5 v/ _- H' h' Q4 w
  325.   return FALSE;
    & H! y) g) q) [. W5 S" _4 H3 y
  326. }
    $ Q4 ~" s# ?& `6 P: D
  327. . {% f1 X0 ]8 j% j/ D- C
  328. void CRevAppApp::ClearAll(void)
    % P. U$ K# [9 |" P
  329. {; G) v( F% j$ f' a
  330.   LPUPDATEFILE file;
    , p7 |# n8 G1 {' x
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 K) ], `. p% j+ R$ [
  332. % Q$ P/ Y9 J# \; P, L7 x7 E
  333.   if(UpdateLocal.size())
    ; Y, u- p0 {1 i) `- p  x' J# [
  334.   {
    ( x) a6 A  v9 p+ `+ {
  335.     UpdateLocal.clear();
    / B8 l3 L9 _0 m3 C8 N3 P# t
  336.   }3 ~  b7 m5 A) i9 }  _
  337.   if(UpdateFile3.size())
    ; }# ]3 B! a: e2 a3 F
  338.   {
    " z6 h6 e# `7 ?8 {/ b* F4 x
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' l6 }$ w3 \# k: H* k7 L
  340.     {. b' Q& D0 B! Q
  341.       file=(*p).second;  y. s3 W- I6 `% Z4 _) X
  342.       free(file);
    5 M& X+ \; P2 X2 [: q
  343.     }
    * R% n0 h" \2 j3 s/ n3 Q
  344.     UpdateFile3.clear();, w; Y5 K$ j1 u) m! k) |& O# S
  345.     UpdateList3.clear();
    8 x$ N+ `( k* h! h' b
  346.   }
    2 m, \# G6 G# j( O  j
  347.   if(UpdateFile2.size())6 t8 s. B. J. B9 H8 G  K/ Z
  348.   {. z4 N( s# c5 Y6 V
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' @0 l; x6 i% k  |
  350.     {
    0 p1 C/ s5 y" V' d% e6 A+ v' }
  351.       file=(*p).second;
    8 P+ C3 x) d- B; @9 I) {5 o
  352.       free(file);, B$ M  n# _! c* j% D
  353.     }
    $ I5 n+ T5 H! o3 H) v) D* B
  354.     UpdateFile2.clear();
    # _8 M7 P7 j; @
  355.     UpdateList2.clear();* W. V' R/ q3 j: E$ k
  356.   }
    9 N. I* |$ \: p5 v1 S( N8 m
  357.   if(UpdateFile1.size())" s) ]2 V( y! {  k6 C1 n8 s: J
  358.   {: N: {4 l# o( [6 l
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) p4 n+ z' J9 p
  360.     {
    8 y& \" O* ]/ z  W
  361.       file=(*p).second;
    . k; ?, {) q4 j6 j# s* f2 L
  362.       free(file);( K' B$ i! b: \' M: \/ W; g
  363.     }
    $ j$ q4 p9 y; C. Y# F8 h
  364.     UpdateFile1.clear();5 e: d- r9 w0 Z  ]/ s
  365.     UpdateList1.clear();; T) M  d9 b, }! O/ B
  366.   }
    & s9 V7 G: b7 y
  367. }  ' i* z9 e( [: i- t
  368.   
    $ W0 q: E$ B) c1 I+ g
  369. BOOL CRevAppApp::CheckLocalVersion(void)! z6 U5 G! b+ Q1 b
  370. {
    1 s- \3 z( w8 @# ^4 |3 R+ W1 E' _( V5 e
  371.   int c;
    0 [2 Z+ X  o# g4 f$ o1 j8 f
  372.   LPUPDATEFILE file1,file2;% |. }1 @6 o$ ~, y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , ?- S; g0 w7 X4 D
  374.   std::list<CString>::iterator l;
    ( y$ i' l$ X& E9 Z" C) l

  375. " M; u0 t% y0 @/ q4 h- U  X; G5 V
  376.   UpdateLocal.clear();
    0 K1 a4 Z2 |$ s& k8 R3 g
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);/ H) I; m: p" [$ c% I2 Y/ C2 ^5 z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);8 o) i; e$ d: _; w! e7 r
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    . b/ x' a& E6 }  V4 I5 f
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    . z# B0 A7 L1 ~7 h" E9 A
  381.   if(UpdateFile3.size())
    + K6 B% B) H% {. K# G
  382.   {
    9 Q% a. ~2 H- l" F* V
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)4 h8 d$ U/ L* b. |
  384.     {
    # H. {% }! [9 F' [* \# E$ h
  385.       file2=(LPUPDATEFILE)(*i).second;3 ], f' a% Z" i1 M, C( s
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' _/ D3 T6 {1 i# G+ D! W
  387.       {+ A4 t7 [8 D- ]+ @) `
  388.         file1=(LPUPDATEFILE)(*p).second;% P" X+ m1 W7 A
  389.         file1->vers=file2->vers;2 N. e; Z2 n# a# l% a
  390.       }% Y( n9 \) P5 L* L0 C* F
  391.       else7 w# W7 i6 b3 z. i9 w
  392.       {: g2 V2 w4 o* ^5 {
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 U7 ^: b- _% T( i% l1 G
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! ~/ S. @& c, m3 z7 _: s
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));  y4 |1 b! M& u+ R/ [
  396.       }) @/ I) R% }7 t$ F
  397.     }' t* M- q& L7 _+ f
  398.   }1 Y9 w4 V. Q; G. W1 [1 ^: J1 O
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)& L; ~+ [. F4 f0 D) w- q1 }. H
  400.   {
    0 w/ `/ [. r( Y. u; o/ Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    * S# z0 b& s4 P& ?
  402.     {  e* t: m' _8 V6 f$ r. I" u
  403.       file2=(LPUPDATEFILE)(*i).second;
    5 ?# i& u9 d& e/ L: A4 d* Z* q" p& X
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 M, A8 `9 I( ~
  405.       {
    % u+ W' E( p$ j  t  T
  406.         file1=(LPUPDATEFILE)(*p).second;6 z/ t. x- d5 R1 X- B+ o
  407.         if(file1->vers!=file2->vers)
    ' b* F9 j, I) y  d2 c3 @! Z
  408.         {. S1 |7 c( t) m% x- r& t) y7 w5 S6 s
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) m$ h" ^7 F: g  D6 c$ \* F
  410.           c++;
    8 M: \$ ^6 J; O4 D4 W5 K9 J- o
  411.         }
    # E, h( Y$ Z0 d& C
  412.       }
    : K' k$ f2 o" `2 v: Z! e8 D( G
  413.       else
    6 ]; f6 Z3 a4 K: e9 q1 \
  414.       {" m/ |- t8 ]6 L
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! r- U9 o' c% ^8 ]/ M
  416.         c++;
    0 v$ n* W" x7 V( [& a, D" {. L
  417.       }0 Q, g2 s! q; C: r% I: b! q
  418.     }. S; c0 h2 g: S! ]3 D# z( [* e
  419.   }' W( i: L: y# o3 K# i  [
  420.   unlink(".\\DownLoad\\update.txt");. V' C# M4 b% S0 B$ n* z2 Z
  421.   if(UpdateLocal.size()) return TRUE;
    # D+ q, a& ]: }$ t, x. s* r
  422.   else                   return FALSE;
    * U$ {! @9 O4 b
  423. }
    * K  g7 F3 U' _- D8 g- U
  424. , I& d7 p0 Y7 B& ]" R$ x( K# _
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! f4 K& u) e+ @5 `/ l
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    / P0 a/ |, J) c, C! ?2 I: I% l
  427. 1 H9 s: I7 i/ d$ K7 y- y1 B

  428. . z; l) p! W) u8 z; }, Y1 u
  429. % g8 @6 b! @! F. Q: o
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile). |0 ^" m5 T2 `7 y$ y
  431. {
    6 N* X& }! C4 [9 z: X! {. y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    , T! [& G/ g4 A. q; R0 d
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# ]! u; `0 W9 z
  434.   {0 S+ ~* D7 K/ Q% `' j
  435.     char szLanguage[50];
    - l7 I9 r/ _# P- f0 m5 }3 x+ M
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* ~, R$ \" g' p" }4 P
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 F0 E1 q* L3 J+ u5 z4 C
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / N! c2 m; P! f* |0 l
  439.     else                                   m_iLanguage=ENGLISH;
    " w- b5 g$ u5 k0 Z, O$ ]9 ~
  440.     char szRegister[100];
    0 r! R  ~- ]2 C6 k! J8 s
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 f1 @* X4 A: C# n
  442.     strRegsName=szRegister;
    8 G' l5 z/ V3 G. [
  443.     char szPatchURL[100];
      y9 ^1 W4 W" G4 W
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 R# w0 Q1 n% N: O  b9 Q$ n) w
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ Y; R5 n' `3 ^+ l0 c9 D4 M
  446.   }
    & K# k. |' t' ~8 q8 U2 b& Z5 O, L7 Y
  447.   else
    + @4 W( j3 ^1 h% F
  448.   {. L& q  e. q0 W5 {4 U+ A3 H: P
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + T1 S% C$ b. |8 C) d2 y
  450.     strRegsName=DEFAULT_REG_URL;
    : {8 }* Y- s) r
  451.   }# D' l; Q" c# b8 h- e8 J
  452.   if(GetFileAttributes("hosts.ini")!=-1)* y! [9 W9 g! v" G
  453.   {5 H! @9 z: V6 O6 f
  454.     char szIP[50];  {7 s! Y) F& ]7 M
  455.     char szDIR[300];
    ! I8 d% _8 v) z! b) j
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    . _- P. I' N6 T. B* O
  457.     {
    " Z, c8 W( T8 O) d- p: S" A
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* I' W& \8 ]- Y; t
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");; \8 j8 C1 i* [2 k2 @4 a0 i7 k
  460.       strHostName=szIP;% H! O8 V, R$ ^# \# q
  461.       strHostPath.Format("/%s",szDIR);
    + u' Q! w3 U, T, J* H& y" \
  462.     }
    + ~) h% I1 r' ?! h/ L, W
  463.     else
    5 _! a. G* f$ C2 F' u  C' E
  464.     {! H/ C/ t) _/ n8 I" i: \
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  q  ]/ p) {: S# y% @& @0 V: p
  466.       {: _4 H: s5 L: ]0 {$ w
  467.         char szLanguage[50];8 k9 ?5 b4 G* Z. n% W- ?5 I4 M6 w
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 Q$ g5 w$ A" S: ~) n* ]4 |
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 i5 f: e1 H, T* R* s: r
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 C3 {. t1 s* P2 i' Y
  471.         else                                   m_iLanguage=ENGLISH;- M! A7 E  m1 {  t
  472.         char szRegister[100];
    - \$ b/ A" x% x# K' ^
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# E5 S- ?3 Y" v8 B- R
  474.         strRegsName=szRegister;
    ; U( P# Q; B- g) F7 X8 I
  475.         char szPatchURL[100];
    + q5 u7 e- d! P  m2 r3 j3 x$ o
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : E1 ~5 _% Y# b& s* x2 P
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# q  F' E0 m! \: Z  l
  478.       }
    0 l" S1 G; H4 Q0 ~  e
  479.       else4 @+ X# M( T; L; A) N* z
  480.       {0 }3 L$ G; N* r" C) [
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 k3 T5 U  P' n5 @- P& |
  482.         strRegsName=DEFAULT_REG_URL;
    % {* n, O( o5 u# R& U2 n+ b
  483.       }
    - y0 T3 x% a4 [7 j; b4 M
  484.     }
    % ]8 g$ W& M+ w
  485.   }5 f) g8 G3 J% \5 w- `$ R" g3 e
  486.   return true;% c) ^, ^; e1 B  J( D0 ]6 t+ q
  487. }
      j  U* S/ M+ J7 q  W
  488. . X  U: B+ K" f2 y0 n& x
  489. #include ".\ZLib\unzip.h"
    8 K/ E9 ~9 p2 ]" Q$ E
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);1 s4 ?8 x3 `( i0 A5 s- z4 O
  491. /////////////////////////////////////////////////////////////////////////////
    / i/ g8 ]* u5 C' ^
  492. // CRevAppApp initialization
    ( p" M8 p; n, d" X( ~% D6 W

  493. 0 x% u7 j  K1 m- M1 e
  494. BOOL CRevAppApp::InitInstance()9 H; S4 B4 p6 @% R0 P2 u
  495. {
    / N8 l/ u' @: J! T% J  W
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    " G& J+ v  W3 E. K& `
  497. " M2 I, u% j; m' w. C
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    " S) n  w6 P* Y! B7 ]5 ]/ G
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)), }: j/ u/ W( l1 L
  500.   {
    ' l: V+ p! q% ]4 ]5 d% c* M
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    8 n) h9 ~2 F1 K9 E, ?0 q
  502.     GetPathFromFullPath(szPathTarget,szPathSource);3 T( \+ j& S5 T, B
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))  I" Z$ q% _9 A! z: q/ F
  504.     {6 q+ l2 Z6 S; f$ L; l
  505.       strcpy(szPath,szPathTarget);1 ^" D" \  Q& k
  506.       SetCurrentDirectory(szPath);
    ! }$ a( x) Y7 W* T
  507.     }" T6 o) T' D' u) t. w/ ]/ y) s
  508.   }
    ' T" x* k: P0 t. V6 x2 W
  509. #ifdef _DEBUG! o! o+ f% p( q6 I4 P
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + u. A0 h$ M7 m
  511. #else& u3 E$ x0 \- |9 @- O' S
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * b: q# E  ]! H' s4 n: y% O
  513. #endif
    $ c% c) o1 x& E) i* N
  514.   {
    , e- p/ \  |: R  [3 f0 s
  515.     char tempFileName[MAX_PATH];) R- x$ d* x6 t. d
  516.     strcpy(tempFileName,szPathSource);! S! u! }8 j' s0 W: ~: O, J3 O0 c
  517.     tempFileName[strlen(szPathSource)-12]=0;
    : E6 O5 m7 `+ V. i, i5 j% {7 H
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ) b. s! q  u( R) b( y1 @! D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);7 r' ]+ g4 S8 u- l
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);& R" c( F, I( O2 K7 Q
  521.     return TRUE;5 U& X$ W4 @/ f3 G. o. [7 ~" A
  522.   }6 C6 u- `4 J" A6 d1 D8 J1 {+ s! B
  523.   // Nuke 0118: Delete run.exe. |% w# J) z* {: e
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ) K4 d8 V. {" c* {
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + x$ {6 V4 g3 [1 Y# K
  526.   if(!ReadCfgFile("Config.ini"))
    * I% \3 j# w  j* H3 ~( y* D
  527.   {5 @5 G7 e/ u$ {8 D. p7 x
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    + h* f5 Z( L) G+ |% H1 `
  529.     return TRUE;! V7 S4 f; P, T. V. t# m
  530.   }
    0 E9 j8 E9 l- R
  531.   HANDLE mutex;
    ' o2 v: V" C- K) s% B& l! E
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))* R8 l( H  e- K; h% l
  533.   {7 x, H9 u1 Y) y; [
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
      r; u+ H' k( V0 V
  535.     {$ Q# T& r9 }4 p0 s
  536.       CloseHandle(mutex);+ |$ E" t' k& C0 ^  m
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " c3 o: m5 ^0 ?
  538.       return TRUE;. d# |0 F8 X4 ^3 x. O5 ~5 G, y; `
  539.     }
    5 C1 ^1 ~5 Z* J* E7 g) ?/ V
  540.   }  " O" y% d% a8 }; G) b& G
  541.   CloseHandle(mutex);
    & G& S$ k" N  @6 j; y

  542. 9 K, i# W% x7 `& u
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);, Y/ L; N0 l0 }! d2 a
  544. 8 o0 m* q- |# Z9 ^& O/ |4 }9 Z
  545.         AfxEnableControlContainer();" b( }# B  F1 ^$ k, y/ R: t" R

  546. ; C* _4 C$ ^0 J! T9 T8 T# s
  547.   bCanUpdate=FALSE;
    $ E8 ^; _  f* ~' Z" ?7 K
  548.   dwStartUpSteps=1;
    . e9 n( k; D* p& K* s- ]5 I
  549.   dwProgramState=AP_NOTHING;$ d4 A* u, D3 S

  550. 8 `; l% T$ o% R& j
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) a( d8 R5 Z/ H5 `* I# L2 d2 i

  552. & j; y  `) J8 l! |0 G
  553.         // Standard initialization, ?5 z/ Q7 h4 ~3 k! C
  554.         // If you are not using these features and wish to reduce the size
    0 E7 \9 B3 a7 n" n' |
  555.         //  of your final executable, you should remove from the following/ }; ^- t4 A% A5 X" n
  556.         //  the specific initialization routines you do not need.
    7 t3 ~6 G$ ^( }5 d' p# W. h
  557. 0 _1 k; M; _9 B
  558. #ifdef _AFXDLL
    . l3 _% S2 u; g/ R
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    # P7 m; n4 m6 `) a
  560. #else
    4 B3 o: t! H! E9 ?, }
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    : L9 O- i1 ~3 S6 A4 M" Z- D# I# R
  562. #endif4 p4 B( K8 H8 ]2 v) A4 |9 f& D

  563. ' N9 H0 d) i$ ?5 [8 U
  564.   dlg=new CRevAppDlg;; J; `! s1 B# z5 v; j
  565.   dlg->Create(IDD_REVAPP_DIALOG);* n1 ~" ]2 q  z; Z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    " B, ~3 j) g' ^, `: `7 r* |2 [3 M
  567.   m_pMainWnd=dlg;# z7 ]* S! w4 K) b7 {! j
  568. * u6 ]1 D  Z6 L. l% H5 e
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);+ ^, m4 z+ [5 h5 A4 [! J

  570. 1 p5 |0 a3 N' K8 C$ A7 E/ }4 I
  571. //  GdiplusStartupInput gdiplusStartupInput;, Z2 l% J6 Z: \0 d
  572. //  ULONG_PTR gdiplusToken;* J+ D& N+ o  [5 [( W
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);" w+ p. {( ?  b; w% ^& P
  574. 6 f) `$ S2 A" j1 ~+ e9 X+ U- r8 D5 z
  575. //        CRevAppDlg dlg;
    # O, L' A& e2 u+ ]1 s. r% V
  576. //        int nResponse = dlg.DoModal();$ I& S& G& Q) a0 n0 w
  577. //        if (nResponse == IDOK)
    & ?+ j( a7 v% z
  578. //        {0 Z: E+ g) P# W
  579. //                // TODO: Place code here to handle when the dialog is
    4 A, k: v5 R5 M6 B1 X7 F
  580. //                //  dismissed with OK. c9 w5 `5 t+ c
  581. //        }
    , E. L; |4 ?" x7 E; ?3 }+ a$ h
  582. //        else if (nResponse == IDCANCEL)
    ( i8 u8 j% L5 W3 g$ y- ^
  583. //        {
    ' ^, B; M. O, |
  584. //                // TODO: Place code here to handle when the dialog is0 {8 u% w% c2 x# {" J5 b
  585. //                //  dismissed with Cancel' _8 D, ?0 M3 n' L  A, m+ w
  586. //        }: p! P$ M5 @  z6 T; Z0 a8 h
  587. 6 X+ Q2 y9 k; t5 G8 ?
  588.         // Since the dialog has been closed, return FALSE so that we exit the5 D2 C$ ^: _2 w% G3 h8 \; ^3 g
  589.         //  application, rather than start the application's message pump.
    1 T: j7 l% o$ E+ ~$ I9 V
  590.         return TRUE;
    9 O3 o& T4 O" u- {7 T
  591. }: W0 Z* f2 Y  k" l5 k

  592. 6 h+ E4 S: T3 m6 s5 q% D3 v9 [, ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 F1 T& ~% L  k8 O* n5 f% ?
  594. {
    " x8 g' h: F! O
  595.   int i;
    - ^0 l6 y/ g: l( q
  596.   char *szRet;
    0 G# @9 a" @' A1 P0 t$ J

  597. 1 c" C1 k: l0 }1 W$ [+ V
  598.   if(pSource) { itoken=0; sztoken=pSource; }! g4 e6 O3 }3 p. p
  599.   if(sztoken)7 b7 ~8 }  H  m0 O- w# }$ c9 n% d9 Q
  600.   {4 x2 B# A5 z" P0 G7 y
  601.     szRet=&sztoken[itoken];+ X' K6 E6 O! n
  602.     while(sztoken[itoken])
    8 u5 |! B+ @+ f# W+ A
  603.     {
    # J$ h/ b' l" ?1 D7 m( q' I
  604.       for(i=0;i<(int)strlen(token);i++)
    ) Z# Y! Z, n! f1 F
  605.       {
    ) V1 U: K1 u8 b* ~: x( ?
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])4 z4 w2 g4 c, n$ A: M9 D, |
  607.         {# r/ z$ M2 q& S+ T! a
  608.           sztoken[itoken++]=0;
      y! s- `' r" p2 [7 i+ |" R0 k2 W
  609.           sztoken[itoken++]=0;
    1 K) s& c. @2 u. m, b+ j
  610.           return szRet;
    - ?2 u  [! o9 B5 e% F
  611.         }
    * d$ |2 T/ U1 \9 l2 I
  612.       }+ _& u8 \' o  M
  613.       itoken++;) w4 l+ |( v1 p& F
  614.     }
    " @# F/ h* M0 J0 G* x* ^) n( }% R
  615.   }8 t+ Y' q8 t& Y5 W
  616.   return NULL;; w- V' O0 y# M" w- E" X" o
  617. }9 A! i2 k& A' E, G' u

  618. - _1 d, D. |( @/ A+ a6 V
  619. void ProcessProc(long Total,long Current)4 R' o. u1 l4 {
  620. {; M+ `* y( [+ A/ P# s
  621.         MSG msg;
    ( G6 F  x) `1 |
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    $ B5 O) \1 q- e, `
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));; Y, z5 _" t% B4 H) `, I
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))9 _( X- h3 c. U# I: J* w! o. i
  625.         {2 Q2 ]3 R& N1 K8 ?* q
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! E7 p2 H' Y$ u. a
  627.                 {
    & [* Y3 M- T3 {3 c% u4 V
  628.                         return;9 A5 t* K: T7 t& F
  629.                 }6 w8 L) c; s" r: d  q9 S0 {# C* I
  630.                 TranslateMessage(&msg);
    , ^# u& D  H6 `& L9 i8 ~: d" F
  631.                 DispatchMessage(&msg);
    " g0 G! }* E; a, u; {& f0 m. }( O
  632.         }        - \( k" y& Y; [/ V7 t
  633. }
    7 B" Z0 K1 v! A) Y# L
  634. # i8 t& M+ H$ U/ C, [
  635. BOOL bFirstChar=TRUE;  |5 p2 x5 j6 X% E3 h

  636. ' K' [# r- r9 z1 e
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ ^* L; |, W( _" O
  638. {
    ( a& _: N5 K. P) w! i
  639.         // TODO: Add your specialized code here and/or call the base class
    % d5 y' l' ^3 N' b8 X# {7 C
  640.   switch(dwProgramState)1 u# X( S5 ]2 ]4 t- i7 Z. X9 g. o+ c
  641.   {) N! g# w' z& I9 [
  642.   case AP_NOTHING:
    0 f2 Y7 e; z, q$ B- n. ]2 G5 K+ f0 L4 {
  643.     switch(dwStartUpSteps)
    * k  X! b0 F# H* V
  644.     {5 c0 ^: f5 p, N, ?
  645.     case 1:/ x4 R# E8 G8 m. m5 k+ q  _- Q
  646.       {. D1 c+ C3 R  n
  647.         int i;" u/ [  J1 Y2 r1 T
  648.         CDC *pCDC=dlg->GetDC();
    9 }* y6 M7 x$ s) n2 \
  649.         HDC hdcwnd=pCDC->m_hDC;
    * ~2 x$ j, u7 d6 m
  650. //        Graphics graphics(hdcwnd);
    4 h% E/ Z  f! j0 O9 ~. k7 w
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
      r8 R0 V, T: C& Y! F8 X" p0 H
  652. //        INT iWidth=bitmap.GetWidth();
    / F1 H5 r6 \7 s1 N# E3 \3 g3 _: _
  653. //        INT iHeight=bitmap.GetHeight();
    6 X; `0 w. ~7 }+ c- g! ]
  654. //        Color color,colorTemp;& u, x: m* G- O. f
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    , n  x. b, l( M
  656. //        {* a4 O( ~/ L7 ^1 c9 K- c) k
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    : D. [  c' p; A4 s
  658. //          {$ |7 ?& N% d1 E1 x4 S
  659. //            bitmap.GetPixel(iColumn,iRow,&color);" i8 ?- t- `6 D; \" E9 u, B1 Y
  660. //            colorTemp.SetValue(color.MakeARGB(
    ' Y& a+ K; D3 o" m
  661. //              (BYTE)(255*iColumn/iWidth),
    * H$ B# O9 P" N: g/ c0 n" m
  662. //              color.GetRed(),
    * ~2 e: C1 r! l- A; P' P
  663. //              color.GetGreen(),8 g0 ?+ T+ a' I; V' I' c
  664. //              color.GetBlue()));
    2 ~8 ?7 O/ A* B% y5 r$ S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ; y! ]* d* M0 ^) {# W+ \+ R
  666. //          }, S( W1 a8 d( s
  667. //        }& K: P* b4 C1 N0 ~9 f6 R- x+ c/ K2 t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 d5 `/ Q1 M1 D: [# V
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");  R! e9 [8 {/ c( }
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");* r7 o. r1 a9 U7 q9 G6 ]  \" t8 o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 Q9 [  s! S5 o+ ?1 ?0 N+ H0 Z& c
  672.         for(i=0;i<240;i+=8)4 @$ S5 i9 u7 G9 I$ t
  673.         {
    ! R/ v# T- I, c3 S; ]7 g1 e
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: {; X7 O7 q6 a# H% e9 X0 y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & g+ E3 G2 ~" k# b! l* L& ]6 m
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 S2 G& e4 R* O/ N0 g6 h; i
  677.           Sleep(33);
    ! L1 U( X3 x* Q, t7 S2 \3 i
  678.         }
    3 C% K8 t) [6 t9 K1 s, Q# B
  679.         Sleep(1000);( \' }# t2 M) f, y; h
  680.         for(i=240;i>0;i-=8)
    0 g+ R0 \, k  N- X: L0 u* z
  681.         {5 {7 W. {; Q0 w: q& n# S' A( D& }6 `; U
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / l9 k$ ^/ f/ I2 r+ b
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . }7 h2 A/ z+ Z, g+ G! x- U
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 y" l0 p5 P# X+ a
  685.           Sleep(33);
    ! ~: c4 [/ |% W' u4 g4 R6 t/ k
  686.         }
    3 U! j7 u2 }  f3 u/ g1 F
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    4 D1 y0 S. l9 O
  688.         dlg->ReleaseDC(pCDC);8 i* C6 ^, F: a: [
  689.         DeleteDC(hdctar);0 S4 N2 I5 P. L7 O3 N- _8 ]9 h
  690.         DeleteDC(hdcsrc);
    ' K5 ]& L5 r/ F2 W1 ~
  691.         DeleteDC(hdcorg);$ i* `% O, P' |! U$ l
  692.       }9 {/ z$ w1 x6 F7 y9 A
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);: h0 N6 a- ?% {5 a7 }" J3 C) u
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");) o4 k3 y) @3 z6 ?  {6 ~! |
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    9 ^' `0 p7 x5 |6 z2 s( S
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , f# k+ X1 ~7 u% w
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 n3 H5 m1 N- `4 W+ |9 v
  698.       if(!Dn.Connected())! N0 z" ^2 ~% g0 I& K9 e0 d9 g$ A2 p
  699.       {1 [' L3 H4 A6 F" C+ Z4 C
  700.         dwTotalFiles=1;: W  W6 K0 R& U6 N+ L2 d' ?
  701.         dwDownLoaded=0;# H- |" @% R# {3 D
  702.         bSilentStep=TRUE;5 V. N, t8 E% a" m
  703.         bCompressed=FALSE;
      c$ j% u( g9 S5 |) A9 {4 w& j3 m
  704.         strExtLocal.Empty();& _: _6 o! D3 C9 S0 c( e$ O
  705.         strFullName="readme.txt";
    ; b+ ^( Z* Z3 b) D% g7 o
  706.         dwProgramState=AP_CONNECT;
    : _5 t: n* u; [7 j! J
  707.       }& R1 G9 I. ?. M* k: [' n
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();4 K" n* T9 g1 c) j
  709.       dwStartUpSteps=2;
    2 G: x4 T9 R, Z1 c/ t
  710.       break;4 c2 d8 a' q. |6 }2 ]
  711.     case 2:
    - ]# q5 X4 ~' l
  712.       {
    9 g4 p+ J1 i" \1 }# ~: _6 {
  713.         int iEOF;
    . j4 g6 G; Q8 u: G/ a' {. \+ N
  714.         FILE *fp;% S" z! x" Z, D* m7 d: J
  715.         char szString[512];2 G6 P, x& Y3 x; N
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");5 ?0 C; H0 F, u* o
  717.         if(fp)  m) l$ N* {( I
  718.         {
    ' v3 z  D; T+ k
  719.           do5 d$ d9 F6 @! l: ^* j
  720.           {* B, `( ]$ ?5 ]  A. Y
  721.             iEOF=fscanf(fp,"%s",szString);& n9 v( [! K, s+ z, ^3 ~
  722.             if(strlen(szString))
    5 l4 z( f! u$ q' I% u
  723.             {0 f% s% `7 e1 P2 j
  724.               if(bFirstChar)
    0 \" q: V7 x6 n1 F, T6 b
  725.               {- o' y# e; r* U! _; R- E
  726.                 bFirstChar=FALSE;5 A" z3 m, S0 A
  727.                 bConnectIsBig5=FALSE;4 V7 f, s" L  v
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    - E: O3 I3 G! R0 T* a4 c
  729.               }
      M; k3 _& I4 \( a6 D
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ; F4 f0 _" ^5 k' S$ G
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ( J$ z% ?5 n6 I; }# T
  732.               dlg->m_ListText.AddString(szString);
    ) {: r, H6 U4 O4 h
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " V1 Y; s- w% B9 Y  D9 L! C
  734.               *szString=0;0 z2 Q1 V1 c5 D: t5 s/ l# b  d0 a
  735.             }/ ~" j8 y+ `  d$ Z
  736.           } while(iEOF!=EOF);* C. l0 @* Y* u2 p
  737.           fclose(fp);6 L$ ]5 y4 ^& g  A5 a1 k
  738.           unlink(".\\DownLoad\\readme.txt");4 {, j! p0 o: {  k$ y
  739.           dwStartUpSteps=3;
    - |7 U# z0 s, L1 L0 [
  740.         }) s- F: q$ Y. S5 F
  741.       }9 Y* X" x- b( f$ g
  742.       break;7 k# E# M6 f, N8 }7 w4 c. d  y
  743.     case 3:& c& p1 o+ L/ S# I% f# V- T1 A
  744.       if(!Dn.Connected())
      B) L9 _, K2 N: F6 ^/ k6 E( m
  745.       {
    9 U$ l  D. j+ f+ t/ B/ I
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    7 o3 Z) R& [& t5 ?  B
  747.         dwTotalFiles=1;  B2 S" }) c# j
  748.         dwDownLoaded=0;
    6 K6 {7 K8 e$ M- ~5 @& f6 w
  749.         bSilentStep=TRUE;1 k3 q* x! {' u5 w# q' U1 [( L
  750.         bCompressed=FALSE;
    - P+ e" ^# L( k; E! L
  751.         strExtLocal.Empty();- s* y% e4 V$ L; l1 q
  752.         strFullName="checkversion.txt";
    " g  l+ K; [: r0 L6 v8 T) f  J: E
  753.         dwProgramState=AP_CONNECT;
      ]- ?: i2 W4 [7 J! G6 P
  754.       }
    2 W" z! I  X) W7 z
  755.       dwStartUpSteps=4;
    4 b1 M: p4 \3 Z$ i* c9 k' B
  756.       break;
    # [4 u3 r, M+ x2 z8 X
  757.     case 4:
    5 }" b" y4 m/ C+ y% I
  758.       {
    6 v8 U( \1 T4 |9 ^, O2 P/ x
  759.         FILE *fp;  j$ k' m2 Z$ H: j9 U
  760.         char szString1[128];
    ( m  u4 P9 `  C& a
  761.         char szString2[128];% W2 u  [  A" Y* ]0 W6 W# q/ y* L
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , y% F% o0 c6 n) c  l; y$ i5 W
  763.         if(fp)
    9 l: h" |5 m/ J# ?9 |9 ^) N
  764.         {
    ' R5 O( v- e* |' x/ W
  765.           fscanf(fp,"%s",szString1);3 t: t& N- F9 M6 O6 D
  766.           fclose(fp);# o7 k, @$ b: x: ]7 T) r; V
  767.           fCheckVersion=atof(szString1);
    - d. z$ J$ R$ E6 ?4 F
  768.           fp=fopen(".\\checkversion.dat","r");
    ' B) Q' ]; K. K% Y, d" b
  769.           if(fp)# {- `$ ?& r% \/ ~! ~
  770.           {
    8 R* R( a9 J! l; _; A
  771.             fscanf(fp,"%s",szString2);! V, p6 X5 s3 v" L* c3 c7 M' n
  772.             fclose(fp);
    ! B1 r$ I: n) I" d
  773.             if(atof(szString1)!=atof(szString2))
    $ I; n2 j5 @; l
  774.             {# Z, R5 M1 L. T; e( U2 r
  775.               if(!Dn.Connected())4 z8 i8 X4 `9 _5 y1 l# k
  776.               {) m% a' A$ H6 S: X* N* M
  777.                 bFirstUpdate=TRUE;/ u8 q' Z. Z5 P% G
  778.                 dwTotalFiles=1;
    5 `% H% f: k2 Q9 c
  779.                 dwDownLoaded=0;
    ! j9 ~3 S' z/ D1 V, A% T
  780.                 bSilentStep=FALSE;
      g$ R) _  j0 c( L; _$ D* t
  781.                 bCompressed=TRUE;
    ! E7 z( z- h$ s7 [& a4 p
  782.                 strExtLocal=".\\DownLoad\";3 Z, b: M+ G; u
  783.                 strFullName="update.txt";2 ^; Z( R" j( s+ |( ?) R" |
  784.                 dwProgramState=AP_CONNECT;
    ; ]$ ~) p! Q+ R  `" t2 Z- F8 L/ }9 ]
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . s3 n3 Q. B1 k
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 z( K) e! Q' D% |# s9 R" o, b  m/ o
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 d0 u  M0 I3 v/ W! r
  788.   s! i$ S# N* q2 e
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( {2 g7 Q- T# [6 a8 F8 p% c1 f
  790.                 unlink(".\\DownLoad\\checkversion.txt");# \& P7 W; K8 P1 y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    5 _" J% D' U( A' E) y; n; O
  792.                 {( V& g6 C/ U& @9 |$ Y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");' |# p" p* y1 v! u( r1 K) _
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 [3 U/ w5 \2 I$ }, B
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    : g1 u5 p/ |& K1 m% c6 b
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 L3 C8 |3 Q4 t
  797. " S# {+ }( p3 `) f9 D5 [' a
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! y# z8 m: l7 m- O
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % F9 I2 d$ T$ C3 K
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");: A, G+ F# b8 m) q6 s( V( }
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; w  }; K, K% c8 |/ g" [) F* ?4 S
  802.                 }
    3 H0 U* m  X, H- N" F+ F
  803.                 dwStartUpSteps=5;! d4 k4 O5 x+ t- A  k$ Z
  804.               }1 m  k5 s' |4 q7 o
  805.             }
    " \1 J! f# Y) s4 w- T" D. k8 L
  806.             else2 H3 ?- k5 W! v6 }6 y
  807.             {
    " w7 ]6 b& @% g, f: P
  808.               unlink(".\\DownLoad\\checkversion.txt");! O# V+ j: Q- W( x+ @" B$ F2 k
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");; B- }3 W8 l: e+ t; N" }
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % q. N6 a$ J! i; {9 \
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 \, |2 D6 ?; T+ ?- {

  812. 3 M8 l9 J+ Z' f- h/ [# b! [
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : J. A9 E4 J: c) G3 |
  814.               dwStartUpSteps=99;
    6 D1 q% ?7 A# O
  815.               bFinishUpdated=TRUE;
    6 b, @9 T5 o$ \. e( g6 Y: i& G8 `& E
  816.               bCanUpdate=TRUE;2 g( J: y2 P5 K  z; K% [) o1 _
  817.             }- `, K- W/ |4 @" Z; m
  818.           }" N5 a9 q7 _$ ]- p1 l5 O
  819.           else! o9 G' @, c% d1 S' f
  820.           {
    $ m9 I& \, x- L1 s# ]7 |) |/ P
  821.             if(!Dn.Connected())
    5 I+ s* u; Y$ t
  822.             {" n! {5 n/ A& e. ]3 C
  823.               bFirstUpdate=TRUE;9 @; Y. _3 P, u  h
  824.               dwTotalFiles=1;- t5 B2 ?  Q! r1 K1 {/ q, W9 G
  825.               dwDownLoaded=0;- ?; U( ?0 X0 b" `& O' z, X8 f( t2 t: d
  826.               bSilentStep=FALSE;' r" b4 P: a6 V! e9 ]+ B; Z4 g7 G8 L, g  h
  827.               bCompressed=TRUE;% N# ]( Y$ p* q" T  M  \
  828.               strExtLocal=".\\DownLoad\";4 N9 K7 o9 Q& L& R
  829.               strFullName="update.txt";
    % p7 g, S; T; n& i/ x! j& K2 q
  830.               dwProgramState=AP_CONNECT;
    $ R2 b! C; O6 M" [2 w
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 d9 f! N& w; w5 Z
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");! \3 m1 l( M4 `7 c3 M
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");- J7 t: q' \4 ]$ J1 D
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , e& H, _; h. L. _. ]4 v. y
  835.               unlink(".\\DownLoad\\checkversion.txt");) t" N  j: S7 c3 S5 j% e4 ~
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)+ B8 a! V& A6 {! Q
  837.               {: V/ @3 [1 }% W; p
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");. T- n+ }3 }" y, g# u- }- D
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");8 ~8 z; C) k. _. B0 Y' C
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");& B6 N+ ~; f" ^  g7 y1 R
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 S9 [3 C! d6 Z) F
  842.                
      \- V' q8 {! e# Q5 e
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: Y8 B. W0 C# P, [3 }  ^+ U
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; G2 T, T. ^& t8 X/ T
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");/ t6 ^3 }8 n; z% S6 V- n
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 C! \0 Q* {' ~/ K2 G" U0 O7 M
  847.               }- ^$ z9 j5 R9 d  U, m
  848.               dwStartUpSteps=5;% v& q4 j4 Q" u  e% o& }: H
  849.             }9 @+ S# V8 ^7 m0 x" G' t3 r
  850.           }: k) x2 u$ n) I. h# ]
  851.         }
    % y; k/ w( x* A  k  t: t( [
  852.         else
    ; s: x9 d! e  R$ d. x
  853.         {
    : q  G" p* n- s7 ^! M! Q- W+ C, H
  854.           dwStartUpSteps=3;
    0 e% A9 A9 d! T; y: m
  855.         }
    8 _( |5 Q3 N2 _2 W# Q& i: Z8 Z! K
  856.       }
    % D5 i9 A* ?% b5 E9 D
  857.       break;
    : v( d1 C! n( W! ~3 s3 }+ D( Z
  858.     case 5:
    $ b( k1 V5 A  j6 o: g% G: H/ e
  859.       {
    7 Q' w& P" V% K/ v* T9 T9 I  e
  860.         if(GetFileAttributes("Wsa.zip" )!=-1). ^6 T2 F& L: s
  861.         {8 ]. T, t6 p; [$ Y6 x
  862.           int opt_overwrite=1;# T$ T$ P/ q, o
  863.           int opt_do_extract_withoutpath=0;" u  \2 |: m% G+ ~3 d
  864.           unzFile uf=NULL;( E1 I' M1 V7 D6 O9 J* S* n( \

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

. S# I+ }4 x0 X; `5 y4 d, e
  t) u/ L8 M* b8 H

評分

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