找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
6 m- F* m- f# p: r; J
  1. / RevApp.cpp : Defines the class behaviors for the application.
    $ ?& D% ~5 L/ k& U9 @
  2. //- u% i& l. r' x
  3. * A) F/ W# m5 E" P7 }  |8 ^2 A
  4. #include "stdafx.h"; v! t- t, l1 ]
  5. " p6 N2 t: h1 b& j; R# N" j
  6. //#define UNICODE* [7 X, I) @( M* l% f/ m& q
  7. //#include <gdiplus.h>
    8 ^% k- e$ k4 X1 i& Q/ A
  8. //using namespace Gdiplus;  T* m5 Z- s4 Y" C. i0 m. f7 V
  9. 3 m+ R& P9 p& K9 Y; \
  10. #include "RevApp.h"
    2 p5 i. l$ T2 b0 |+ o
  11. #include "RevAppDlg.h"
    3 z$ H. ?1 O* R$ `" m; _' ?

  12. 2 ]7 d4 V+ w/ ]; w
  13. #pragma warning(disable:4786)+ S/ E3 ^9 q% E3 n
  14. #include <map>6 O$ A' r3 b+ p/ G
  15. #include <list>7 j+ P7 ?1 a9 I3 t4 U+ J$ c7 w2 X
  16. #include <direct.h>+ s5 U$ a* l9 }: q- Y( n' j% c9 |0 a

  17. 1 r0 M7 H5 p% y
  18. #ifdef _DEBUG
    8 t0 ~& R+ i" F% h1 x
  19. #define new DEBUG_NEW+ N& {* m' L7 l  e: x1 {* l
  20. #undef THIS_FILE7 c0 i0 [6 W% V1 F1 r
  21. static char THIS_FILE[] = __FILE__;( R8 q# A) y* O
  22. #endif+ z9 x8 [. s& c/ \/ `
  23. #include "SkinResDef.h"
    & {) }  f* |6 X( k- ?# i9 _
  24. #include "ChangeBG.h"4 ?. m; v+ `# g! J# O6 w- a
  25. #include "AFXINET.H"0 N/ R# W" \* ^8 Y* X- H4 f
  26. & |+ l! l' [% y: @! V
  27. #define TRADITIONAL_CHINESE 0: l$ p, N/ Q  @$ C+ [( a
  28. #define SIMPLIFY_CHINESE 1
    ' T2 e( M! V9 W# G! l; R% S
  29. #define ENGLISH 2
    7 S8 F9 a& Q  Q- q0 L  d
  30. int m_iLanguage = ENGLISH;
    0 Z  E( v4 b7 F' j! v" N
  31. /////////////////////////////////////////////////////////////////////////////% w9 D( ]; A( c  n# ^3 b/ h
  32. // CRevAppApp4 K1 h) j6 {. p( F" p
  33. * L6 e6 ?6 [( d0 N
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)8 U8 x( |6 W0 G
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) \1 Y9 d. A- ^& R, `4 C
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.- h* Q0 V' A! P% d6 [
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!" g, C! y- s1 H/ G7 F
  38.         //}}AFX_MSG
    6 ?9 d. b0 l- W5 r( ]% A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ; _: V5 d# A- Y" Q+ W
  40. END_MESSAGE_MAP()% k7 X& q+ W( l" ~  T
  41. ! E5 g3 ]* A" @% K! x3 J( o$ l
  42. /////////////////////////////////////////////////////////////////////////////# L/ k( M. b4 Z$ R! {
  43. // CRevAppApp construction7 @& V( |; M. B* f6 G

  44. . m" L- |/ G$ I( D
  45. CRevAppApp::CRevAppApp()
    ) G. m/ ^  J' ?$ o$ Q6 A
  46. {
    8 @2 Q1 y# n& c/ ]( w* a
  47.         // TODO: add construction code here,
    1 t8 Q, B! F! c
  48.         // Place all significant initialization in InitInstance# j6 o& F& H0 L) ^# H
  49.   bDisplayIsBig5=FALSE;
      ~) ?7 N* W' \' v! W+ L
  50.   bRestartUpdater=FALSE;
    ) p1 @8 h& c4 V" l# ~
  51.   bFinishUpdated=FALSE;
    $ f1 s! w* R6 Z( ~" {
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;0 V; v0 x: L8 E  P5 S* Y) |
  53.   InitChangeDataBig52GBKS();! f8 T8 e2 h/ o' l
  54.   InitChangeDataGBKS2Big5();
    9 F$ ?& g4 L6 B; s8 D) J
  55.         //
    5 M' p8 @3 q) D  Z3 V
  56.         bClickRunExe = FALSE;( ~) k' h* T& r% r0 X4 c
  57.         //
    9 H6 o$ v% v4 f$ e6 c# r# L
  58. }3 N3 X4 T% P) N' Q: |. ]; [2 e

  59. * i1 ?- ~% s3 ]( c+ @
  60. CRevAppApp::~CRevAppApp()
    . E7 x6 d, ]% m: w: d
  61. {" t% q7 o; w( B8 s
  62.         // TODO: add construction code here,
    " ?5 W( i0 M. h% l1 D
  63.         // Place all significant initialization in InitInstance
    8 ?+ l5 a. f! f( Y# r/ ~' [) H
  64.   EndChangeData();
    # t: r+ t0 }; Q" k7 Q8 G3 M5 k
  65. }. r: D& U( h1 m  ~7 C

  66. , e7 S6 X& m+ T) D) b3 X8 x
  67. /////////////////////////////////////////////////////////////////////////////
    + z8 J: ^% Y6 b$ u
  68. // The one and only CRevAppApp object
    4 ?" c/ }! ~* q5 b9 t/ e3 R! J5 {
  69. - v, A  C# G( b" K7 H7 ?
  70. CRevAppApp theApp;
    / r/ _5 j( }! m
  71. ' E- Q  `* }( H) u8 X
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)7 ?$ ~1 e9 |1 o# F
  73. {( |8 j  S* m% D- ]* C. s; U1 g
  74.   int iEOF=0;( p  I$ |: |  F; I# Y! C
  75.   char szTempName[MAX_PATH];
    & ~& G4 m5 c# s0 B7 ~% V; W" a% }
  76.   *szFileName=0;
    1 _. O4 [8 w( X$ e* u! k0 r* W
  77.   iEOF=fscanf(fp,"%s",szTempName);* C# R' X  r: l2 f. p/ g
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    $ \- V+ m" M$ ]' r( K+ B6 t
  79.   {
      ~' s; q# M1 z
  80.     strcpy(szFileName,&szTempName[1]);
    ! i- _- ?2 J* t& z! }' A
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    6 \; U' l5 E# a1 l
  82.     {
    + T1 ]' E2 I4 a" a
  83.       iEOF=fscanf(fp,"%s",szTempName);5 Z1 }5 d6 d5 M- F2 a, x
  84.       strcat(szFileName," ");+ K. R$ a. i) ^
  85.       strcat(szFileName,szTempName);* J' u( k" {0 F1 m9 k. f
  86.     }
    8 t0 L. m) f* O" a! s
  87.     if(strlen(szFileName)>=1), V, ^4 H' g( i& X# T$ ]: D; c
  88.     {+ J& u; s; `+ r0 q4 r) v
  89.       szFileName[strlen(szFileName)-1]=0;9 a- T. `: t6 B
  90.     }
      P9 c3 m6 T0 p- X) b- o: N! Z! Y
  91.   }4 _( O% T% P( d
  92.   return szFileName;
    - d+ h! d/ V! {" B2 d6 c
  93. }5 g0 x' F2 _& b& j; Y  e- y; |

  94. 1 K7 j* g' m/ `+ m0 k
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    $ Q' l. \' F9 Y; F9 D; Y) [  B
  96. {
    " W' B; i/ x: w! C1 O6 u8 C
  97.   FILE *fp;- W, u, c6 N7 P% f
  98.   char *key=NULL;
      F# _8 g  n% s( `6 I
  99.   char version[MAX_PATH];. k$ t8 b* \7 O
  100.   LPUPDATEFILE file,olds;
    / H' {; j) B' t2 O+ s* e
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 P) y% i3 Q; U0 N
  102.   I9 c( g/ J: \. p/ g" Z9 n' c6 J
  103.   UpdateList.clear();
    7 @! B) C) P1 ^0 s
  104.   UpdateFile.clear();: [. [0 D' ~8 H6 ~% A+ i  }% O& c
  105.   if(GetFileAttributes(filename)==-1) return false;
    * ]& p4 N- x4 k7 e
  106.   if(!(fp=fopen(filename,"r"))) return false;
    $ M# Y: }6 H$ e" Q' C
  107.   fscanf(fp,"%s",version);; p# S1 V' I6 _
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }2 u2 E5 w6 X! e& t1 @  x
  109.   while(fscanf(fp,"%s",version)!=EOF)
    - M2 M9 l4 o: }
  110.   {% E3 u2 E9 _" M* w  }! E6 i
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 {6 E8 i' Q5 S' c
  112.     fscanf(fp,"%s",file->path);
    ( h+ d! Y" o- T; r! Y3 d- q
  113.     ReadFileNames(fp,file->file);5 D2 }  Q/ `. y7 v/ r' R, p
  114.     strcpy(file->full,".");
    - |% X$ f2 s( G" s
  115.     strcat(file->full,file->path);7 i; K0 L3 {/ `
  116.     strcat(file->full,file->file);2 e4 R, U4 {; @
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())  G+ u0 R$ `* B6 ~0 P
  118.     {/ E0 x4 k# E/ j# Q  u/ [
  119.       file->vers=(float)atof(version);2 \9 Z' \) `3 b) h6 I0 ?$ E
  120.       UpdateList.push_back(file->full);
    ( }' M/ I* d$ I% O- Y5 ]# ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    $ n( W! _4 J5 t
  122.     }
      d8 e( T* U2 n8 ?. [
  123.     else' G2 k( }5 |9 F! @
  124.     {  @0 a1 [% h! v
  125.       olds=(*p).second;  i9 Q5 j4 a# c* k6 C
  126.       if(olds->vers<(float)atof(version))! V" O7 E  e3 [3 e$ N$ K7 j
  127.       {
    3 W) \' J9 d. [8 j; X
  128.         olds->vers=(float)atof(version);. I" [% K+ W) A( N# z
  129.       }3 M8 w* e9 @2 T7 H; d' e
  130.       free(file);. K# l/ [" [/ U+ L6 M. c
  131.     }
    + I/ q5 i9 f: `8 S, v4 y
  132.   }
    * x8 s# i) o: P% w
  133.   fclose(fp);* d) d4 J7 i8 h( R- s2 Y; q, v
  134.   return true;
    ! ^; [' M+ w8 g8 i+ ?! u- u
  135. }! Q( k$ Q* P, d# Z5 B

  136. . C: Q' j0 |9 J
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  r; N% l4 C  |5 Q% ]
  138. {
    * ?2 c1 O" y3 n; w/ _7 C
  139.   TCHAR  szFull[MAX_PATH];
    8 K7 e: h3 }( T
  140.   TCHAR *token,*inter;
    0 \, M' }7 I' Q
  141.   *szPath=0;7 b+ L9 K/ J5 i- X3 B
  142.   strcpy(szFull,szFullPath);
    / o6 s6 z8 n, |5 b" s
  143.   token=strtok(szFull,"\\/");
    % Z  u9 Q# O% k, e! L4 a9 \
  144.   inter=token;7 k& g8 b$ N4 m  k6 p+ R
  145.   while(token=strtok(NULL,"\\/"))8 `4 Q4 L, A$ s% d0 I. {% P
  146.   {
    9 R9 A" f  B5 G( ?3 H* x, \
  147.     strcat(szPath,inter);6 ?6 Z7 a' G4 F; v! {
  148.     strcat(szPath,"\");
    # t  P& M6 Q5 I# o
  149.     inter=token;& _1 j" j4 D2 v& m: L
  150.   }" l5 l( Q) }6 R3 \% z6 s5 r& y* H
  151.   return strlen(szPath);
    7 t, L% ~  p" x! G
  152. }# N. X8 r) v7 k- t$ T+ `; n
  153. 4 B6 h8 l7 |! s* r* P' A2 _
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)4 ]7 ^0 i3 x. M) m$ o) j4 f
  155. {- C. t7 C9 Y& [) u8 f
  156.   DWORD attrib=GetFileAttributes(Target);9 W' G) a3 y. k- [) Q$ M$ x
  157.   if(attrib!=-1)# s6 I7 H) k* |3 E( N& u& l
  158.   {
    3 X6 i/ R8 y1 k- z7 P$ |+ o! t' _
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    - t. B$ h+ N% M5 r4 D0 X/ c/ h2 |
  160.     {7 X, h& {) p# q* U8 c7 X
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    1 M! ^; |1 |5 W9 D2 [
  162.       SetFileAttributes(Target,attrib);
    6 h) i# m% |" ~. L/ b2 w
  163.     }
    + l% ]8 q! C7 [
  164.   }
    6 Y+ Q$ B6 z+ O! [  I. o: k5 x
  165.   CopyFile(Source,Target,Erase);
    1 v7 r2 B( Y& T2 L" m
  166. }
    3 @4 y& n* S- W2 V

  167. $ m  c! k( O$ |. q: d
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)( C. C1 [0 F! g9 m
  169. {) F/ W; h0 e3 u$ `1 Z
  170.      FILE *fp;- b' [6 ~) }& R- Q3 ^
  171.      char  szBuffer[8192];0 K* A9 Z$ b4 l5 M
  172.   va_list  argptr;, N1 O+ a& g# M7 ?8 g8 u
  173. ( t5 s, ^. S* S6 j5 o0 W8 R9 N  A
  174.         va_start(argptr,message);
    ) K: k2 x& I9 R
  175.         vsprintf(szBuffer,message,argptr);
      n( A6 x1 o: I. J7 [
  176.         va_end(argptr);+ j0 q1 z% }2 X! M
  177.   fp=fopen(FileName,"a");
    - q& e# b# S# [9 g; _( _7 R# F
  178.   if(fp)2 x4 @+ [6 M2 {, ?1 z* @3 Z  \
  179.   {
    ( b( |" }( S" s/ ^, H
  180.     fprintf(fp,szBuffer);& l) B( c* j4 w+ |, l; u+ m' R  t2 ^
  181.     fclose(fp);
    - L) Q0 k( Z# A4 m4 T( ?
  182.           _flushall();% F; Y2 k( \- J
  183.   }
    * j% M) ?; O  r& U
  184. }6 U+ }. ?# S5 W4 m1 y6 m% t' G

  185. * ?3 d, q( F  Q2 u
  186. BOOL CRevAppApp::Fclearf(char *FileName)- D* P! E% _1 v3 P$ `$ P
  187. {3 M8 m0 J/ W/ Q. d, T; q0 q
  188.      FILE *fp;
    ( u# i7 j8 I7 l  W9 u, Q
  189.     DWORD  attrib;
    . `5 Z. l' Q( q8 A2 Y9 @
  190.   attrib=GetFileAttributes(FileName);3 t3 [( m' n# X/ V( R
  191.   if(attrib!=-1): e- F- k6 z% E  y7 \
  192.   {9 `; b# q6 q+ u& H- p
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 O8 r, W9 R1 y% t8 {# W  S
  194.     if(!SetFileAttributes(FileName,attrib))6 [+ q; y2 ]  z+ A5 J
  195.     {* o( x# L$ l+ t: y) w
  196.       return FALSE;
    * v8 N. F5 B, z- M6 d4 _: y
  197.     }
    5 ^* w9 w: e0 z. R+ _
  198.   }' h7 ~  ?8 N* D
  199.   fp=fopen(FileName,"wb");. H( @+ ^+ o2 @- |8 ]% Z
  200.   if(fp)
    . R+ J1 }( J' Q
  201.   {
    6 h. ~9 T7 ]: ?
  202.     fclose(fp);
    . w- B7 M8 E; s+ `
  203.   }0 D3 _+ Y' U) O# L: T2 p
  204.   return TRUE;0 D; w* u  B" k7 Y8 w
  205. }) m' L6 L. l* c1 ?4 b7 z

  206. / N! W' y: m$ h& @  ^' @  Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    # V- b- ~" l% y, l/ Z" {6 t6 u% l
  208. {
    ) X! B8 @* C$ B# d, F
  209.   char filename[MAX_PATH];7 {( t( ?& w) h) J/ t3 N
  210.   LPUPDATEFILE file,olds;
    # @( C8 b" M9 S# n, g; M& `
  211.   std::map<int,CString>::iterator i;
    4 v3 w. l. U7 S4 }/ P  f6 G
  212.   std::map<CString,LPUPDATEFILE>::iterator p;+ f3 C+ c6 ~4 o8 x- }0 a+ h2 B6 r
  213.   std::list<CString>::iterator l;
    1 h1 t8 e2 a5 h: R8 y( m$ J

  214. . R3 r2 w+ Q% m: M  C
  215.   if(bFirstUpdate)
    ' x, W9 ?/ c# V, c* q9 w7 R
  216.   {5 w" p- w' ?) B( u' U- R
  217.     dwCurrFile=0;
    - H6 i4 d( U0 W) G9 g
  218.     bFirstUpdate=FALSE;
    + c% o( O5 ^0 W/ c0 V. z4 f8 @
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 k; y; J. ?# N, W0 ]6 N
  220.     {1 {9 C2 y  X. v  m# M, {
  221.       dwTotalFiles=UpdateLocal.size();
    5 r$ r+ g( ^2 \
  222.       dwDownLoaded=0;
    ; }8 c2 E6 @  y
  223.       bSilentStep=FALSE;) M# v" @9 V6 q
  224.       bCompressed=TRUE;- f( ~- m% P. q- `+ {5 v) v
  225.       strExtLocal.Empty();
    % O2 B& O8 |( M
  226.       strFullName=(*i).second;
    , G! M: b2 Z+ s( H0 M! A
  227.       dwProgramState=AP_CONNECT;
    : {. |* V# C1 X; |5 Q# ]( i+ [
  228.       return TRUE;
      \- s0 D5 o% s) ~2 m, l
  229.     }! I, _2 M; y  t3 @
  230.   }% x3 v& M: z/ ^* N0 a7 z7 v
  231.   else if(bRestartUpdater==FALSE)- I# M' V; T5 T+ j7 R
  232.   {
    + R( P/ A' w/ W" R4 s
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())) C% Y: [9 n$ l" N2 ~: s% x' w' B
  234.     {2 Y# l0 e& D% Q) g
  235.       file=(*p).second;) x: W' |9 }5 h, S
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    3 X5 I: T# A3 A4 K1 P0 x% H6 K
  237.       {2 u1 i& G& f" g3 H% k
  238.         olds=(*p).second;( E; N/ ^4 m6 P" z7 P8 ]
  239.         olds->vers=file->vers;
    2 F4 f" [4 M/ I9 L6 q  z
  240.       }
    ; ?' b8 ?; @# r9 V
  241.       else
    % M  Y  k1 Q2 o' {* E
  242.       {5 G1 d" ?: C* Z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# l; E0 A. j, m; |' _) P7 p
  244.         memcpy(olds,file,sizeof(UPDATEFILE));% ^) U( I6 t9 Z3 B' r5 F
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));$ d" l; ]5 E) T8 H$ c- y* _
  246.       }8 Z3 k' z- B$ q5 ~9 _
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");5 L% n: I7 L+ W" S
  248.       sprintf(filename,"(%s)",file->file);
    9 S. J/ }' D) t/ N) l" V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, A4 q) l$ M. y% Z0 P2 [
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    9 t5 ^9 M# _6 Z( A
  251.     }, c, H3 }7 Q. G
  252.     dwCurrFile++;
    2 j" ^6 _  c( |. X/ P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; R% t# k/ N6 E. z9 D1 a2 V- ~
  254.     {
    ! @3 i- a% l* ?8 a. ]+ ^
  255.       bSilentStep=FALSE;
    1 @7 `/ X$ f, E& y$ l7 v
  256.       bCompressed=TRUE;7 U( k3 T/ z. u+ o
  257.       strExtLocal.Empty();
    ( [3 K- e, d2 w3 U
  258.       strFullName=(*i).second;
    & Z+ j% V4 K, w' l: T
  259.       dwProgramState=AP_CONNECT;9 Z# w+ F5 }  b8 O9 k' x
  260.       return TRUE;6 n: }; G' E$ i. H6 w* Y
  261.     }
    # q* T& U% q0 w' r4 s9 G
  262.     if(!bRestartUpdater)8 f7 d0 S1 D  N' B3 S
  263.     {# U  g1 C9 R9 k# D! J" M+ [
  264.       int iCurrSize,iFileSize;
    4 U/ |% h/ i* K9 u
  265.       iCurrSize=0;" C  K% J0 a: }( s& e
  266.       iFileSize=UpdateList2.size();
    5 W* w; P0 J" i+ c$ E$ l+ k; S% ~
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    & l. ?! A2 E, i* i8 v9 Y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");8 h3 R# h  a% z/ S
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");2 A- v/ r4 B8 y% K2 e
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 e0 B, j  I2 N( G$ J$ @% C- U* T
  271.       Fclearf(".\\update.dat");& W5 U6 S5 b3 x
  272.       Fprintf(".\\update.dat","Bloodyf\n");9 ~  F0 N6 u8 W- R. Y! x
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    - E" _8 E+ W4 r/ h) r6 }0 p2 S
  274.       {
    ( _2 P. E. c2 K7 @2 c
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()); C7 h/ G6 D) n3 [" f7 N
  276.         {! O! g4 b$ I& Y! E" T! n0 \0 j4 W
  277.           file=(*p).second;9 N0 a0 ^1 V: o
  278.           sprintf(filename,"(%s)",file->file);
    4 P$ Z) e8 y( I. U0 ^
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 r3 F4 W6 I* H! W, t' K
  280.           iCurrSize++;
    * |; `  Y4 m7 m, H$ G5 T3 @
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    3 d7 K1 }$ |/ i& S
  282.         }
    + _) x; Q$ x6 \8 n7 w, H4 A, J
  283.       }
    6 \. r: G6 w# U( e& f
  284.       unlink(".\\update.txt");( J  @3 O0 S- a. i& O) p
  285.       unlink(".\\update.tmp");' j4 y9 |/ F4 j* a3 O: u
  286.       Fclearf(".\\checkversion.dat");
    9 L. e0 Q! l  R. E, P; S1 Z; S
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    % C* O+ g+ I( R" Y7 k3 |+ w+ x
  288.       if(UpdateLocal.size())
    ; Y: v. {: i* {4 T; |0 w
  289.       {
    ' \7 B+ F4 c4 x) o
  290.         UpdateLocal.clear();- r! ?& [+ e7 Q0 i$ q
  291.       }& O" Z( u  c2 r; g
  292.       if(UpdateFile3.size())( o  L( B7 y" U  ~' O" X) E9 R
  293.       {! r3 ~: B) u/ p) @, o8 y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( J2 N5 w, `6 g; O: A& M0 D- F: B
  295.         {7 F9 z" K* _* }0 K
  296.           file=(*p).second;( B' i: _, V, M, O3 Y/ o
  297.           free(file);
    $ j# ^8 ?; q" U6 I% C5 p! A+ z8 e
  298.         }$ x* a# {5 {( ~, c# M1 P4 E7 L3 a
  299.         UpdateFile3.clear();
    & T# j- z/ p  q! x' n; l* y
  300.         UpdateList3.clear();5 l1 O9 X2 C* a3 h' ?
  301.       }
    ; S: |. e0 `0 ~$ S
  302.       if(UpdateFile2.size())
    " [4 g' R* g$ j; J3 l
  303.       {
    % H, w2 J/ i2 {$ {8 I7 L6 r) I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * I" H. Q$ x3 B5 O
  305.         {
    0 r" C2 G: N8 d$ Q2 U
  306.           file=(*p).second;, x1 e: F! d9 L+ u
  307.           free(file);
    8 O6 _1 g/ |0 b' w
  308.         }. K& N: |. g# {4 j/ K
  309.         UpdateFile2.clear();) C9 r/ L& j7 ~& _5 l8 R4 o' P' R
  310.         UpdateList2.clear();+ a  v6 ~" J* @0 h% w" M& |2 Z' S
  311.       }& O; i* ~0 M+ n$ }
  312.       if(UpdateFile1.size())6 }  h0 {0 I0 G( ]! @
  313.       {
    + G$ x  `" C5 ~# n, Q' k, q6 B
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* w7 X% z3 o. i0 M" e
  315.         {
    ) b8 ]8 a6 J  q( E  q- y" j
  316.           file=(*p).second;
    ! u9 T/ }* ~3 j5 b0 F1 W# ]: G
  317.           free(file);
    ! r5 K  T( _, @, w* J1 d
  318.         }
    2 @) G( v& @7 k+ l  h1 F
  319.         UpdateFile1.clear();
    * {" U# A9 f1 s6 C, l, @5 w' G
  320.         UpdateList1.clear();6 i% k  V+ A4 a' q0 p
  321.       }
    : w& s$ f$ a& ^
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; t4 `7 _! r' Y. `# b5 f2 Q
  323.     }
    4 r' e7 M0 T% c3 I! |* O+ _
  324.   }
    3 H& k" v1 R& K+ N- @! A: S0 p
  325.   return FALSE;
    / R4 a2 t" C. [6 C: G
  326. }
    . }) F$ M& M( G1 ?5 B' Q7 m
  327. % o% c7 |" }/ o  m" z& J0 H6 z2 y# X
  328. void CRevAppApp::ClearAll(void)
    8 \( h6 ?4 n$ r& |9 Q
  329. {6 `! ^% D2 \# \1 e% t
  330.   LPUPDATEFILE file;
    8 w9 K( \+ K- I  S* Y0 H: }
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 `; F( t/ c; X& A2 i

  332. / k3 B! |8 B/ a8 w
  333.   if(UpdateLocal.size())8 N8 P! t9 `$ a9 _# [& }' P. K
  334.   {
    + L8 Z, |! \- b) f& I
  335.     UpdateLocal.clear();
    1 z( ?* Y* p5 H, p# l9 u5 ?
  336.   }
    8 J; p( k) Y, D7 e6 C2 O
  337.   if(UpdateFile3.size()), L+ ]( H' H2 q, ?
  338.   {
    3 Z2 H' k* p& S$ A, T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 \3 M! W6 P4 w% M  q/ f6 n
  340.     {
    2 m9 r9 E* q: G& `3 |+ a' W, ]2 Q
  341.       file=(*p).second;  {  C9 _: w: s% L/ b& r8 i
  342.       free(file);
      U, i4 f8 h! _' @8 \1 z$ b* v7 Q
  343.     }# C" [1 o$ l4 _$ Y" q; _& }/ N0 ]
  344.     UpdateFile3.clear();
    " l& R! T/ e: ~4 _9 Y$ T
  345.     UpdateList3.clear();
    0 a$ @! m& C5 w! |; C% J, J$ y
  346.   }% e$ B: v% V2 Y+ z( {$ y
  347.   if(UpdateFile2.size())
    0 W5 [7 I" I1 t, g: `; D
  348.   {
    7 q( G3 R  \( A6 Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - K6 s- G: m7 ]) b0 {9 v3 G
  350.     {
    ( t! s; f/ v5 ]8 _3 x
  351.       file=(*p).second;
    % @8 W& O$ n4 m
  352.       free(file);' M) u( Z7 G6 E  J1 ^3 y
  353.     }% T2 w0 V' r' d6 ]
  354.     UpdateFile2.clear();( t) T  r# c7 {5 M2 G! J: |
  355.     UpdateList2.clear();, q3 t8 C8 g, G4 C3 ]
  356.   }! [! J* j: Z) l0 X) [! v9 E
  357.   if(UpdateFile1.size())
    4 p$ |+ ?- w4 q5 J! W$ o2 T' N
  358.   {# C5 L, M5 W* A) D! I2 o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) R0 c; r7 r& w
  360.     {
    ; y7 D' N* Z9 G! u
  361.       file=(*p).second;6 L, z) Y, o' a4 r6 {
  362.       free(file);6 Y* L' S0 y& K. f+ }* h, ]6 F2 Y
  363.     }
    1 ?' k0 y  ~( f- J) A8 n) J
  364.     UpdateFile1.clear();0 B8 A- p: X2 u4 Y$ z
  365.     UpdateList1.clear();
    ) q8 y$ q7 |  e+ k0 I( H  l
  366.   }
    1 c7 R, z. a/ [' i
  367. }  
    & _8 B3 M+ {+ C# t4 k
  368.   % F6 ]( s! n0 {5 K
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ) H+ V$ S# E$ p1 G0 K7 x6 V+ N7 `
  370. {: |, v* _; l" y* V8 R9 [
  371.   int c;
    . b% S6 y" e, c4 Q
  372.   LPUPDATEFILE file1,file2;
    / T, \' D$ Q" c, o0 W
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 ?# Y# I: _  H2 p
  374.   std::list<CString>::iterator l;6 ^5 v. Z. U' z7 J! I* o" ~

  375. 4 R: g4 N/ e0 m1 F( y& }
  376.   UpdateLocal.clear();  s3 }1 w. Z0 y* c0 f% N9 B
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    % m1 ?: |3 w: u! G8 \
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    8 S# I) o0 ^: L' G$ B
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
      m1 Q3 [4 t/ S
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);, x. s0 ]+ k0 ?+ s  ^! Y
  381.   if(UpdateFile3.size())( R+ U9 F3 m0 _  d' u7 i" J3 m
  382.   {
    3 r+ z: ]& r6 d( J/ d6 f
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    7 }) O! f) x' M$ D: [- G# N: u. P* N
  384.     {  O6 k) e7 n6 Z! L& c
  385.       file2=(LPUPDATEFILE)(*i).second;& D, \! g$ Y+ K5 b( Z
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' u5 f/ F# ^1 t$ j0 L8 R
  387.       {
    , \& c& D, Q7 v
  388.         file1=(LPUPDATEFILE)(*p).second;
    4 }" @6 ?3 d8 g; Y
  389.         file1->vers=file2->vers;
    ! P6 \: H! k( q: g
  390.       }
    3 L" i2 C& Q9 ~% l  {8 {
  391.       else" i# B8 e( C2 S! f; U; C
  392.       {# }* R' z! N4 j' r" S8 q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 v% ~6 C% i/ r6 J: z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 @! Y5 r$ F/ F  U2 I. e( }
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    $ o8 b' H9 s) @  Q
  396.       }* j& V/ x/ \& T& J# K: i- I5 j
  397.     }
    * N: T& G' _  M8 Y( D' Q/ {
  398.   }
    5 I+ K; ]+ ~  D
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; f5 [3 C3 ~0 _" r3 g/ E; P) _
  400.   {
    8 M7 S7 t& U0 w, h# d) ?  d
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    8 x1 \* E% m  e/ W3 G' f
  402.     {
    - y: {) H. L$ @9 z
  403.       file2=(LPUPDATEFILE)(*i).second;3 T/ C8 D$ @/ i6 n1 z  x4 X% R
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " w* t5 x! S; e, Y# L- u# y, b
  405.       {  @' D' Q* G) F9 ~! h# w* l
  406.         file1=(LPUPDATEFILE)(*p).second;
      a( k( V# t( q7 N# a& c
  407.         if(file1->vers!=file2->vers)+ ~1 c- _3 N% k# N. i1 j8 y
  408.         {
    / `* d$ u4 q3 A' R4 O
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    , v& q. g# E  j/ m
  410.           c++;
    ! J; ]/ x  N' t: l* }
  411.         }& R6 h+ h; P: ^' K
  412.       }! \- f( q- G; y
  413.       else' u  c$ P0 {+ \+ n- z* z* r. E/ C
  414.       {
    * ~# T+ a" _6 ^9 I0 v* w
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) S1 ?. U$ A3 o8 C# v' J
  416.         c++;
    7 d1 m) o9 L& z/ U: J% `1 S
  417.       }
    , F5 M5 p9 G9 @0 P+ c
  418.     }
    . r  D7 s+ y6 u
  419.   }
    2 D6 L1 S! k; C& \, E8 k
  420.   unlink(".\\DownLoad\\update.txt");3 p  X6 m7 X% L( i5 {* ^8 D
  421.   if(UpdateLocal.size()) return TRUE;
    $ |8 y) f: J! h6 ]8 R5 f2 e8 B1 c
  422.   else                   return FALSE;& q$ `4 c6 j: E. D# h* }* p
  423. }3 J# X( s0 H3 ~$ @6 \/ e) _' e

  424. " K: H# Y! z- U- S- j. m
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    " x2 j5 X9 v9 m' L1 f
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' ?6 [7 |. P+ j# ]  D: _6 ?. n0 B$ y
  427. ! a2 B! b# y$ y, s/ }! ]
  428. $ A: @+ w" M& L% k6 W. G  S
  429. 9 z( E3 ^' `+ l- y! y' h
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)# f9 d/ b8 x, n9 [
  431. {
    $ {4 f- w  P7 g  t2 H
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ! |4 H' V0 B) T3 E
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    6 P3 {$ P, M9 [; ]# b+ j1 N% P
  434.   {" `# @7 r% x2 c3 b2 [" L+ M0 i5 ~4 C
  435.     char szLanguage[50];
    8 z7 g3 M- n9 W+ U) P1 U: b
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! ]8 g, g0 v- x7 L& Y& R7 E6 {
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ( _- S/ {* N% y" b1 e  @8 S
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 ~. X4 }7 v* W! T4 h$ O
  439.     else                                   m_iLanguage=ENGLISH;7 p" n$ Y' J* J5 l8 m
  440.     char szRegister[100];. C( h) m, }: i: p- ~. A% _
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' y4 i" N$ j% [, ^& W
  442.     strRegsName=szRegister;
    / V. I3 l$ T  M+ I8 ?. S) C! n
  443.     char szPatchURL[100];7 }# r2 Q9 M: X0 g" F. m
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 w3 Q3 V$ h5 Y+ V& X
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; S4 b% ?  A1 N  ~
  446.   }
    9 `2 y0 H" }2 ?# f' ^* q
  447.   else7 Q. d% ~# r- k9 F& P6 {
  448.   {
    * U5 a- F# X6 t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ ^$ F9 @8 O3 Y0 Q" {) U
  450.     strRegsName=DEFAULT_REG_URL;. `$ _, \+ C- e( b7 ~) G
  451.   }
    8 h* J. }% Q; e! ~2 T/ n
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * M! b- t; [& Z
  453.   {
    : e: V% Y) l: q: H9 l+ E5 z4 U
  454.     char szIP[50];/ C$ |2 W0 c% v3 A/ Z) @% u
  455.     char szDIR[300];) `3 K; G3 {9 K- i4 r( P6 y
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    : ^0 Q) x0 ~! ~4 K* [
  457.     {3 Y& ?) u5 b7 y7 j) M8 E1 @8 Q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    - J( W8 w" J. r+ Q  y1 z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");& ?$ d7 l7 f% |3 A7 u- [
  460.       strHostName=szIP;
    ' E& c2 O/ O* C. E! W, {
  461.       strHostPath.Format("/%s",szDIR);
    - y- {7 c4 H7 f4 I% {" Z9 X) L
  462.     }4 }4 n' ~+ D5 ]; b3 b+ b+ m
  463.     else, t: D1 q  O3 T; \
  464.     {" d4 Y& y; @; p4 b! Z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , S. O' D7 u, w% b$ ]/ I+ G8 S
  466.       {
    7 C. p4 F! R! x+ E3 M
  467.         char szLanguage[50];$ J& v/ R0 D+ P, q! J3 Y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- q. |7 r! V/ q8 R9 L( L1 f
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 L' k( _# u, ~! _5 h& S, M
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 T7 ~  z4 ^9 q- x- V
  471.         else                                   m_iLanguage=ENGLISH;
    $ H  M$ F4 ?3 H+ P0 T# Q3 U* S
  472.         char szRegister[100];
    9 m/ u- ^  z3 Z) p
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. s; O6 a! i5 i, W9 ^
  474.         strRegsName=szRegister;
    " N, |5 }% i* x6 B
  475.         char szPatchURL[100];2 l& @4 n+ U3 b% k& G
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");0 X! y/ d7 Y; O+ t. B4 q0 u* l8 P
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 f. k- B6 f( n  S: x+ I
  478.       }3 a" B& G2 M0 b3 o2 R9 b9 f: Q# n
  479.       else
    1 r+ v9 ?3 b3 A6 z" x1 h
  480.       {
    , [7 V  a7 n9 q) t% z/ T
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; H; f+ X4 r6 U
  482.         strRegsName=DEFAULT_REG_URL;# J& f. K/ s  N% z
  483.       }( i( i8 ]: G8 X  W
  484.     }
    7 `6 z$ t' i( q7 o
  485.   }
    5 N5 w' r0 f+ `! Z) i( V1 F$ j% l
  486.   return true;9 r) ^4 a0 O2 [2 h
  487. }0 `6 z" A' E; D* ~/ H, S9 ~  `

  488. % W/ H9 l  {4 X9 Z" u1 X3 S3 P
  489. #include ".\ZLib\unzip.h"
    $ T. N5 B* K4 A) H+ A5 M
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 q% P7 T) X2 S4 o7 v
  491. /////////////////////////////////////////////////////////////////////////////
    ! ^' N( c  D7 Y$ Y, I
  492. // CRevAppApp initialization* c# F; Z: B$ |. a- ], c
  493. , g. v$ W' `+ U$ r, {
  494. BOOL CRevAppApp::InitInstance()- E( H* j9 l# V7 ~# Y
  495. {, j' x" \) s5 m, D6 c
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ! e- ?% e" Q1 ?; y) E/ n
  497. % q$ \$ x3 F: I9 u7 e, i
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);* h" _* E7 H' j
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    # \1 ~* ^6 R+ F" m
  500.   {& T/ x2 y, k) ?! g) D1 m7 O: O
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    % f  R9 [. \) M) w2 D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: T0 ?- t& v/ v/ X/ r! Q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    % y. ~0 `7 E1 }* z( @
  504.     {
    ; P; [7 u4 A& H
  505.       strcpy(szPath,szPathTarget);
    - l1 o* i, y; ?' ~) H6 o
  506.       SetCurrentDirectory(szPath);( ]! P! @- {; g' Q7 _  z
  507.     }  J! F/ T# f1 {: x/ J
  508.   }
    $ W: \$ z* x6 J3 b, Q
  509. #ifdef _DEBUG2 c  R1 X  T5 r2 P9 X9 l& b
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . `1 i% S4 d* l, _
  511. #else
    . x! U* w# A1 O( u# a% J+ t" m
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- {% I  [$ I2 K! \8 U2 s
  513. #endif
    + s! m* ]! m* V( x) S
  514.   {
    ! L% q  j+ f+ Z0 i* S& i
  515.     char tempFileName[MAX_PATH];
    8 |  u/ u  c8 j, r
  516.     strcpy(tempFileName,szPathSource);
    6 T; _4 u  k0 N3 w2 U9 N
  517.     tempFileName[strlen(szPathSource)-12]=0;  S4 @. ?7 h* E' r
  518.     strcat(tempFileName,"\\$CSUpdate.exe");: v- \) q2 X( g+ C) [/ h+ C
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ( S" c- B2 c4 e: j5 n
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ f5 R; e; _9 L1 u' q: K! V+ B$ a
  521.     return TRUE;5 s0 }1 Y/ b( a8 _( @2 F
  522.   }
    # _8 J" W8 J8 ]; B5 R9 Z+ E
  523.   // Nuke 0118: Delete run.exe+ ^  _8 g3 [5 S5 U3 I# _" Y* W& e# J# M
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    + V0 i! t: M) [% m' P& t+ F' o
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");. v9 O( D  J8 k# m
  526.   if(!ReadCfgFile("Config.ini"))) T$ ?: b& w) G2 ]
  527.   {3 V! e3 H  y/ f! E4 C; I
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);" W  ?$ L2 A6 _5 S
  529.     return TRUE;/ b- }; v: X9 _) Z* P! u. {
  530.   }
    7 k1 O2 p3 y9 H9 O3 q$ F5 d( S  M
  531.   HANDLE mutex;. u9 J: E7 j* {! d( y! l+ e, n
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
      U  V% `; J7 \1 K" D4 a
  533.   {* t7 H+ x4 B0 }5 B$ V
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    + E, T3 n/ J& |' F. w
  535.     {' x6 n; |* V+ s) B" p; `* C8 J
  536.       CloseHandle(mutex);* F* n, e! T1 S; ?1 Y: l" e
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);' v; L4 C, x6 Q- H1 q
  538.       return TRUE;
    9 m: U( T7 r8 [7 a  G6 p
  539.     }
    ! I; ~2 A( [  l$ w# c+ N. v
  540.   }  
    : i! y" x+ N7 o, A
  541.   CloseHandle(mutex);
    4 {) ]7 u& D. m
  542. ' \4 s: _; k) U, d2 f3 M3 P
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # o6 r9 O: Z5 z6 z% C8 O
  544. 6 w4 L1 T' R5 ~6 W/ f: Y
  545.         AfxEnableControlContainer();4 A/ [! {% Z0 J5 A& r& o
  546. - ?% q, t% P  x: `) q/ u
  547.   bCanUpdate=FALSE;
    " Y) G. \. k2 K; }" }6 I# A
  548.   dwStartUpSteps=1;2 L+ l% G& W& r7 V
  549.   dwProgramState=AP_NOTHING;
    4 C: P1 u! \" l& k% K8 P$ N
  550. $ T/ w, h9 P9 P/ \6 o
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    : f9 y" ~5 B( f- ?4 ^

  552. , V$ [( N- B2 a, q0 ~+ [) d8 y
  553.         // Standard initialization
    , @6 G8 F. J" c% v
  554.         // If you are not using these features and wish to reduce the size9 m' g0 Z1 ]2 }( T$ p5 S6 _
  555.         //  of your final executable, you should remove from the following
    2 @6 g( v/ I- A- t5 O, F" B
  556.         //  the specific initialization routines you do not need.! V, J0 W5 t2 @* }* P/ s1 A: w# r
  557. , \7 A: M# X: w& j  l' @7 ~
  558. #ifdef _AFXDLL+ p% M2 f- Z$ A* O
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    * k( @& y+ Z! d8 m" k
  560. #else6 e1 N5 O0 I, o3 E, \2 `& H( Q: P
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically% N3 g' q0 S8 q5 ^% b! ^
  562. #endif" }% y# I2 n0 B% ?# L2 |/ C* _) N+ m
  563. 6 s& C. X/ t' {0 z4 l
  564.   dlg=new CRevAppDlg;" G0 W9 M- D) B* T5 G9 m; }7 b
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    9 _7 P. k% I, N# H" k% b( p
  566.   dlg->ShowWindow(SW_SHOWNORMAL);+ `  ]6 x$ V) E7 I6 M$ c
  567.   m_pMainWnd=dlg;- [( Z8 ^; P* c( T2 l
  568. 8 q' X" g8 W& c. L& ]
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);+ k8 Z# |" s' V9 @& d
  570. 4 n. l' |+ `. g: j
  571. //  GdiplusStartupInput gdiplusStartupInput;9 m4 y/ Y& v. n" n  k- G4 y
  572. //  ULONG_PTR gdiplusToken;  `9 F; Y6 N' g' U4 ~5 S; @* f
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 L0 A' k! N3 E8 M

  574. 5 ]2 f* v+ m) x% E2 `: m
  575. //        CRevAppDlg dlg;: [- j# l) b2 c% E7 N) K
  576. //        int nResponse = dlg.DoModal();; X  @# F6 s& Z  Z( h
  577. //        if (nResponse == IDOK). t2 c7 `3 }, _% J. K# M
  578. //        {) K, {) j! {. Y
  579. //                // TODO: Place code here to handle when the dialog is; F) X, b1 k% \; \, R
  580. //                //  dismissed with OK5 i$ Z6 w8 p  p' z
  581. //        }; e9 }4 z6 H1 }& C! I- g
  582. //        else if (nResponse == IDCANCEL)
    * u  K9 }" W8 g) W. y
  583. //        {& s2 G$ y! E3 X! b
  584. //                // TODO: Place code here to handle when the dialog is3 k1 ?7 I+ u' c3 N! x# o& x
  585. //                //  dismissed with Cancel
    3 Y! {" z  X7 W
  586. //        }: W6 G' t% |3 T- @% J0 ]; c: P

  587. , r; U4 G/ n/ \: P" w1 O& F- {
  588.         // Since the dialog has been closed, return FALSE so that we exit the
      b: D* Y5 [' R) P0 y2 U
  589.         //  application, rather than start the application's message pump.7 ^9 a3 U& z) Z  t4 l" o
  590.         return TRUE;
    8 i5 Z5 {& g! H
  591. }
      x) O: j& k! a5 \4 ?) @; F* C5 H
  592. . `* Z1 M% o( o5 W  m9 `4 O( K) Z
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    " H6 T- F" t# J$ W0 A/ `
  594. {
    . t2 N7 e3 y8 g4 v# |" s& A7 \
  595.   int i;, K& A5 g) x9 ^, I; y4 B4 S; n9 n
  596.   char *szRet;3 C7 |8 Y+ E1 q0 a$ M& F( v

  597. ; m, W# k- L$ N* N: r( W* t5 v
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 i# ^' C" B* a2 O
  599.   if(sztoken)
    9 b# W- X7 _4 j# P2 o* m" j* S
  600.   {+ h& H5 g" h2 V+ x* f, {8 e* ^; a
  601.     szRet=&sztoken[itoken];
    ) F) p& K  E6 H, s2 o7 V
  602.     while(sztoken[itoken])
    7 Y8 K, v* F" ^
  603.     {5 c* n# ^, D7 }& Z
  604.       for(i=0;i<(int)strlen(token);i++)% V, |7 K, W! Y: j0 H! n- [# [5 k
  605.       {6 ]$ E  i+ o" w6 `6 c5 ]( G; J- e
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    & v  M5 R4 q* m
  607.         {
    - e2 A* J+ S$ E
  608.           sztoken[itoken++]=0;
    9 O/ S8 w; s# s/ e4 K0 k
  609.           sztoken[itoken++]=0;
    : u  N) F0 r/ x5 u) x/ J( L% d0 i0 {
  610.           return szRet;+ q6 A' N4 P6 l2 V, d  ~
  611.         }( ^$ Y2 ^) G( \  D; f( b$ H
  612.       }) v4 `/ o) m: i( C( g$ y
  613.       itoken++;. o- _4 p6 P( X( u5 A
  614.     }" h; j7 h7 p# }% `5 k
  615.   }
    , D0 s; z) ^9 R0 o. P
  616.   return NULL;0 i# W- y' E/ j2 _) w
  617. }
    + D  x. ~  P% G; C, J
  618. " h- ?# a, D1 n& L
  619. void ProcessProc(long Total,long Current)4 V6 C' G; @8 `% s; p  q& @
  620. {
    ' e3 N( W$ l3 ]$ X9 `& r
  621.         MSG msg;3 C) E4 ~, G. V9 M7 |. S4 S3 B
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ! Z, C9 l# ~$ i
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));: H8 B4 G( x: h5 [/ B8 D# @1 G
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ; F) k& @+ v; h% G6 o- u8 I
  625.         {
    . I( k' l; l4 S. F7 J) Z( t$ D$ r& X
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! s5 m- S6 T! N. k# t* a
  627.                 {
      m7 N# H: k: v
  628.                         return;
    ( j  i6 K; R# j" x; m+ A# O
  629.                 }
    ) ~. |1 A1 X& [1 B
  630.                 TranslateMessage(&msg);1 Y; v2 p2 c9 w8 F- I  _1 v9 v7 c
  631.                 DispatchMessage(&msg);
    $ e. L2 q. C2 {4 c! [& x
  632.         }        1 {- C8 w% N6 I) H' w
  633. }
    ; f. {6 W  I" _/ D5 y% A
  634. * W, h1 K" E7 y2 Q9 W/ \
  635. BOOL bFirstChar=TRUE;& x9 P9 K8 U' p5 K4 {
  636. 9 x# {% o, y$ z0 \% c# x: M% `
  637. BOOL CRevAppApp::OnIdle(LONG lCount)6 R" w" H1 |4 `* x3 N
  638. {
    5 E/ ]9 R/ [2 `0 ?8 X# l8 a
  639.         // TODO: Add your specialized code here and/or call the base class; _* M' r" W( F6 g5 i/ I
  640.   switch(dwProgramState)
    1 l) l! F9 B  b. q, M4 M) l
  641.   {. u' ^! \, N; }8 {( l
  642.   case AP_NOTHING:
    8 w8 S$ o9 F! Q8 U
  643.     switch(dwStartUpSteps)  N8 l* z# G& K- g% X
  644.     {$ a+ R: X3 J2 _3 P- U/ F: s; i
  645.     case 1:; @. ^+ [5 d! ]- v! e: I; ]! Z, y" s
  646.       {
    6 s8 |6 O6 m4 M& G9 a
  647.         int i;
    $ ]5 O- H- K0 D
  648.         CDC *pCDC=dlg->GetDC();
    ( Q% U1 K; k0 i) L
  649.         HDC hdcwnd=pCDC->m_hDC;' t# @* ~2 ^; F6 D" F
  650. //        Graphics graphics(hdcwnd);) G- S3 d/ [0 @% R2 W
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");* s/ U: b& \" ?7 ^6 R6 M# D0 q. j
  652. //        INT iWidth=bitmap.GetWidth();# \5 L  N  p, _8 z. |2 y$ g
  653. //        INT iHeight=bitmap.GetHeight();
    " s# r8 Z. S* _
  654. //        Color color,colorTemp;
    # N; `7 K# |3 `/ x
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)( s) P# p2 y3 {4 R
  656. //        {8 ?& C. s& r7 @& D) c0 x
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    7 X" G# T. i# s
  658. //          {9 @4 S0 q0 Q  p- J: v3 X
  659. //            bitmap.GetPixel(iColumn,iRow,&color);2 t7 m1 J5 `! H
  660. //            colorTemp.SetValue(color.MakeARGB(- _- s3 C' |5 m; l; f. ~% i
  661. //              (BYTE)(255*iColumn/iWidth),0 p/ Q7 J) Y/ ^/ _" i1 z
  662. //              color.GetRed(),1 W) X- V2 `# P' `
  663. //              color.GetGreen(),+ i  w( ?. Y, C" R
  664. //              color.GetBlue()));
    " x' U3 Y. j9 m  w7 q3 n6 ^
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    - o! A/ |' U; ~- x
  666. //          }
    " N$ J; o+ S/ T; c
  667. //        }
    + y$ w# u+ }! {8 l1 W5 ^0 Y& j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);8 P; z: f8 Q& S; l4 k
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 T' K, g! Q. [/ ]
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    8 [, }! T7 ?' D1 S
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 g% f1 ~$ d  r1 U/ {$ d
  672.         for(i=0;i<240;i+=8)  M. h7 `/ |7 j! P& A8 B# t
  673.         {3 @8 D) N3 Q2 a) I& [( p+ P  X$ E! c
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . C3 |7 C& f/ R8 u1 u: ]
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 y+ e, r; p2 Y$ b
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % W# C, N3 G# P# C' ?
  677.           Sleep(33);
    " A7 i5 T4 {4 G  a, h( e
  678.         }/ b0 {4 }( ^- F
  679.         Sleep(1000);
    / K6 ?/ G0 @3 h
  680.         for(i=240;i>0;i-=8)
    & t& A1 S* u( ^$ m4 L
  681.         {
    7 f* M; F8 f7 z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : f( }& @7 U1 _4 A% }. `3 x
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& S" Y* J7 D( m. r
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & u9 b/ Y3 m# u  ]6 k4 Z( T6 O! E) Z
  685.           Sleep(33);- g6 V  a' A* c- m8 ^  H
  686.         }
    2 q4 U3 z8 m4 C' Z- ?
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);. `/ w2 S& x% e) ?/ x% P
  688.         dlg->ReleaseDC(pCDC);1 \0 x/ o& ?( x  K" B* \
  689.         DeleteDC(hdctar);
    ( l7 |, b* y+ A7 z8 @
  690.         DeleteDC(hdcsrc);
    5 K; I/ J0 {% g/ ~+ o( n3 i& o  C
  691.         DeleteDC(hdcorg);' S7 X; |( c  `1 a- e
  692.       }) e9 Y' s: P4 E$ z0 X
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 A6 J/ q6 w: m$ F6 s
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");1 J) J! q+ q; c! e& S  e; _; X4 r4 j3 A1 ]
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    2 L1 A; d4 U6 S* v7 f
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");3 w; e: h/ f: T' @  @2 V
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; j2 X: p& y- g: A
  698.       if(!Dn.Connected())
    9 Y7 ?5 Q3 }5 I/ j5 X1 `
  699.       {
    + b& o! ?$ d8 f; B; E8 u
  700.         dwTotalFiles=1;; C& m6 u6 H/ ], {
  701.         dwDownLoaded=0;
    1 p* x4 V' R) m7 [) w* U- q! @8 [# P
  702.         bSilentStep=TRUE;
    + E0 G7 f6 O# V1 d' c
  703.         bCompressed=FALSE;9 g- ?8 K% A" p& V- b3 |9 E
  704.         strExtLocal.Empty();1 s+ c7 l  G7 p; j9 O
  705.         strFullName="readme.txt";
    " L5 S0 `. c9 d+ T
  706.         dwProgramState=AP_CONNECT;, D2 H$ k0 j" ?) T( |$ {
  707.       }: ^) K7 L3 c8 v
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
      r" h9 m. q6 ^6 ]  Q
  709.       dwStartUpSteps=2;
    1 @% a& p: X6 @. F& I$ O
  710.       break;% R2 B& b9 }& |& C' C! r1 l! ?# S
  711.     case 2:5 P4 |0 ]: y% P3 B
  712.       {$ c" B, N, |( m/ H) d$ O
  713.         int iEOF;
    4 b' B( c$ E5 v# q# r
  714.         FILE *fp;
    4 Y7 P% E, L$ F9 a5 {, ?
  715.         char szString[512];
    6 S! ~! _1 y2 A% G
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 @0 E8 |5 d* m, R' m2 {
  717.         if(fp)
      |% u, g* i9 Z& Q
  718.         {
    4 A7 [* y) H/ c% z7 K+ [
  719.           do9 t( C1 N+ H) A6 [( }$ {! ]/ S
  720.           {
    9 z) x+ }+ Y6 O5 ~1 @9 q
  721.             iEOF=fscanf(fp,"%s",szString);
    , m0 z8 K4 N/ k3 P+ v
  722.             if(strlen(szString))
    * O3 B  S9 B4 g- G
  723.             {* M: L+ C7 |1 f# g: b
  724.               if(bFirstChar)6 ~5 i( b+ D/ h; f
  725.               {
    % ?) K' i6 j% ^
  726.                 bFirstChar=FALSE;3 k5 [. t2 F3 d0 X' O
  727.                 bConnectIsBig5=FALSE;
    . }) i3 _' K/ D' Y4 ?" l
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    & [0 d+ J. o: ]* c
  729.               }
    5 ]) w$ }0 I( r- \# b( N+ P. o, n
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));* w+ E0 u2 ?) s( `
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    * y3 l' ~* c8 f- V
  732.               dlg->m_ListText.AddString(szString);
    : x$ F9 P7 w) `* b" S, P
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ ]' }) G$ z7 p5 Z9 u
  734.               *szString=0;  H; r9 h0 v- Y4 |2 A
  735.             }( ?; h; A( z% A& ^0 j5 {" Z
  736.           } while(iEOF!=EOF);/ q# |6 h& D0 E. J
  737.           fclose(fp);- C2 \. v7 ]8 ]% i/ v
  738.           unlink(".\\DownLoad\\readme.txt");
    . b& ?# ^  d1 `2 M& f+ r
  739.           dwStartUpSteps=3;
    3 O7 H/ y, M* A- G  `0 ?7 N0 x9 n# e. D8 q
  740.         }
    ) b1 y: ~$ Y  N( ]
  741.       }
    ; P0 g$ x# d& `: d: |1 r6 h
  742.       break;) d- f& [8 \% Z/ O, C
  743.     case 3:
    ' t6 z9 H4 k' U; B
  744.       if(!Dn.Connected())
    & B" _1 A* q: a4 ~3 S8 T0 o" t' Z8 X& t
  745.       {; V0 W' w0 C0 l/ q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);0 T4 S0 ]) F. F/ D
  747.         dwTotalFiles=1;2 s7 G7 p& U( t' r8 y
  748.         dwDownLoaded=0;
    9 q6 K+ v9 u9 G5 s+ ^  |
  749.         bSilentStep=TRUE;3 {% L+ t. R3 |2 A) W, S
  750.         bCompressed=FALSE;
    1 V; ^0 o; u9 X4 \0 U
  751.         strExtLocal.Empty();% W7 k, \+ g" L
  752.         strFullName="checkversion.txt";
    7 R* |+ k' l$ e9 b. z( y+ u7 [
  753.         dwProgramState=AP_CONNECT;
    # e' l6 }) n  g1 B+ @" b
  754.       }0 w) c0 U% X8 I+ m* _1 S* ]% Q
  755.       dwStartUpSteps=4;
    1 b  a" |* Q" @& g
  756.       break;
    ( B5 Z2 F: ^. N5 @
  757.     case 4:
    ; h; Y8 j# _* U, _3 E* H" C6 r
  758.       {3 j: v7 n2 G" N+ D3 o/ r
  759.         FILE *fp;
    $ y- ]4 t, J: z5 u) j9 I
  760.         char szString1[128];( I. _) k9 U. h" a) z
  761.         char szString2[128];
    6 s1 Z" {6 J" Q. F; Y/ C
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");. T' \6 f9 [" L
  763.         if(fp)
    / a) I4 \8 i" J, x# B0 U
  764.         {
    $ v$ J% S1 e) f( U9 f% V) J0 t& v
  765.           fscanf(fp,"%s",szString1);; S/ a- c0 S* F2 c4 H
  766.           fclose(fp);
    ) [$ h- C" R4 N* T% {* q6 K+ k
  767.           fCheckVersion=atof(szString1);& K  q( c& X. T  ]& z2 ]
  768.           fp=fopen(".\\checkversion.dat","r");
    + ~- @3 l3 N3 M% F
  769.           if(fp)
    $ Z# l  m! I( E6 W, w2 T
  770.           {
    $ `, f' L* B: g2 L  V1 r
  771.             fscanf(fp,"%s",szString2);( e/ k  p/ W3 U
  772.             fclose(fp);
    9 k% g- d8 o' U" ]
  773.             if(atof(szString1)!=atof(szString2))" R' R- F8 q0 S+ o% Q& S; C/ e
  774.             {8 P2 U1 u* c! s8 _9 O- B
  775.               if(!Dn.Connected())$ m+ W) A7 G1 V) o+ a) Y. y& S
  776.               {
    3 Y1 [' [' d% B: V0 A7 f* @
  777.                 bFirstUpdate=TRUE;
    * C$ @+ a0 m5 a$ X  A
  778.                 dwTotalFiles=1;
    8 K- [& g& z3 _4 v- E8 E
  779.                 dwDownLoaded=0;
    ( i4 q$ [; H( l( M- Z
  780.                 bSilentStep=FALSE;
    # w( S2 C: }2 r, _$ }" K5 p; Z# I4 [
  781.                 bCompressed=TRUE;/ h$ L- ^# d% E4 C4 g. n7 {+ d' ~
  782.                 strExtLocal=".\\DownLoad\";
    ' ]% c8 H% a( @9 o% c
  783.                 strFullName="update.txt";
    " {  g2 W' B3 e: J
  784.                 dwProgramState=AP_CONNECT;+ E4 B+ X" m' e, X; l) t0 t
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 g: @6 a2 `. `% \0 c( g; t% E
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ s* B- F4 y* D7 X) F$ q, K, J
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 t$ n' U1 f/ Z# o
  788. " X: x8 A1 W6 g- a4 E
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; _$ n, v. a3 t
  790.                 unlink(".\\DownLoad\\checkversion.txt");  K5 s8 N5 h  Q4 F# S( w6 Z/ [
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    . J; \# e% L& Y9 {' K
  792.                 {
    9 C4 }3 T% V; y3 p2 v
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");% j8 }( S7 z  j4 _  g
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ ?* u5 A; ?: d
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    , Y/ H1 k, f1 z( V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      L& R& I+ B8 i1 `  H% d! W/ w
  797. 2 ~, c2 t: |( o
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 X, U( ^9 H. w) B: M) F& T- o- B
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    5 P; u2 G( o7 i1 ^% t, N! y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");; w2 z$ I5 {, k
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 j7 W6 z. \& Y& O4 A
  802.                 }* v& g* @9 g: I, N# y
  803.                 dwStartUpSteps=5;
    5 A3 [  g  C8 c2 n( |3 m
  804.               }5 e' c) b% \, s0 H3 X
  805.             }# c! p$ J4 ~" a  j" U
  806.             else
    ; G; I7 V; n6 q
  807.             {8 j& S" w+ E! D, V) o0 C
  808.               unlink(".\\DownLoad\\checkversion.txt");. L8 ]  e# |# \) g
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! s1 l" y+ t$ O. `. b! p) C/ R
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
      {: \3 ?9 s, f3 n3 r0 T
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");8 L3 O# y7 R, F  h, M$ T: _4 K" R3 [
  812. # S$ D& }5 T7 C& ]: \8 ^3 Q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& P! z2 ?, |- j" {
  814.               dwStartUpSteps=99;1 i8 [- K5 D' \3 y5 j; ^! h# ~
  815.               bFinishUpdated=TRUE;
    5 |; `/ X8 ?+ x4 A: h
  816.               bCanUpdate=TRUE;
    + k; B( d, }. }& ~: S& N
  817.             }* W4 t0 p! H9 a7 n
  818.           }
    ( _) s4 v& M' Y
  819.           else
    7 [& d8 A9 W( q
  820.           {5 n3 D  X$ }: [. s8 P) `
  821.             if(!Dn.Connected())
    * s1 m2 Y: T- m) Y  l. i% @2 ~
  822.             {
    ' B- E, |- G& z' y# v
  823.               bFirstUpdate=TRUE;, P: R! m# L/ Z/ ~# i. _1 S5 J
  824.               dwTotalFiles=1;
    : ]; Q: t4 H! f
  825.               dwDownLoaded=0;; o& r7 [- b9 s% @' C! c: G
  826.               bSilentStep=FALSE;
    " `5 ~  C5 X7 N( V' c4 R- S
  827.               bCompressed=TRUE;# z5 _% S0 H, }0 H% T
  828.               strExtLocal=".\\DownLoad\";
    1 O- j# u' s, u
  829.               strFullName="update.txt";
    : a' W# D& Z4 W0 d1 R! E% c& t
  830.               dwProgramState=AP_CONNECT;4 |2 w1 C) U. Z8 y, w$ `& h" A
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 C: [8 |' {- c, Z
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' v: |+ G& t, _1 W$ Q" ]" {  J) l
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : J. _3 k" R; `, k. s
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ z+ O; Y/ l0 C: I
  835.               unlink(".\\DownLoad\\checkversion.txt");( q+ y, i. T* `8 S
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)1 m# F# o. j0 h2 L- U
  837.               {7 z  s* _3 o! I; g
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ' W- A/ r+ b: q* l8 N! }% R
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    + U) O* t8 j1 J8 L& }4 L+ W- a
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    & o7 {2 t, V8 ^! P
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 e6 x/ q( _- A0 P
  842.                 % f9 x" H) I& j7 u/ o
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    8 Q5 P2 y) [5 n9 p! v0 R% K  c
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * s- K, h5 l, c/ @7 `* X9 C  k; D
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");) }. Z! I2 p% s) m! g
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ z3 i/ b2 y9 o4 L8 l. ]# N
  847.               }
    ' f/ o8 `+ m- d0 d
  848.               dwStartUpSteps=5;( z$ y% F. F9 s6 B1 f8 z: {6 w
  849.             }$ d4 `# X! z9 g2 N; q, ?+ A: ~" o
  850.           }. g% c1 ?- j- T% W5 P$ h# X
  851.         }
    4 C5 @, ]. a+ u2 Y4 [
  852.         else' }$ n& U# B4 G' ]& @
  853.         {
    8 G& Y; G* |2 F7 D* D$ r
  854.           dwStartUpSteps=3;
    2 K- `9 W1 d2 k$ r& b, K
  855.         }4 l  Z3 v# k/ b1 ?
  856.       }' X0 A( D) d6 P6 X1 p/ M( Z
  857.       break;
    & R) j( J4 M" ?9 j1 Q1 j, x* n( {
  858.     case 5:
    4 O' R. {+ |% |3 O* F) x
  859.       {3 w( x* c3 g8 G$ ]& b' j
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    6 n$ g! h/ x! p! r, A
  861.         {
    & L5 m* l0 E6 x' S4 p! K2 \
  862.           int opt_overwrite=1;- Y( o( _) H' c, \% Q8 W$ {6 b  z, S
  863.           int opt_do_extract_withoutpath=0;
    ! `0 _% {; }/ P" [
  864.           unzFile uf=NULL;1 `: w5 n' j4 x+ U) Y! [

  865. : C+ `* I+ I. s
  866.           uf=unzOpen("Wsa.zip");
    . m) l2 V) N2 @; W2 ~' d; K
  867.           if(uf)
    # G, l; m0 u, S! X; T- M
  868.           {
    + h: ]$ T4 G! \$ m' Q
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ! }* f! S3 g0 c! `0 I( u6 ~. ~2 f, p
  870.             unzClose(uf);8 |$ e, t: @9 N, |, R" g/ w  ?2 m
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    + Z# j# `" L; t1 {9 s2 p# r1 [
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    2 ]5 K' `/ m4 Y$ j  ?: Z
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    1 f) V; d" h) q! S9 @" t
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; d( r' c7 @9 w* h
  875.           }
    7 i4 ?( l* B# T3 n
  876.           DeleteFile("Wsa.zip" );
    + R1 E3 Z& D& }4 W0 T' o$ h
  877.         }
    ; X5 N" b! s/ w4 r

  878. 4 c, Y3 U" T7 q* I- F
  879.         if(CheckLocalVersion())9 }; l: g& X( u" h0 F+ Y# R- y
  880.         {9 Z- _% S( _6 I  z+ m8 v5 v" K
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ; Y/ ^1 q" ~; k+ U# P2 C8 k
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");1 X' s# \! J) r2 c
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");, z- O: {& Z, C0 o9 d2 z7 Q
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 s7 i& r( |  D1 e" {+ W
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);8 q. @; _* u, }+ c# F/ q" I  u
  886.           dwStartUpSteps=99;
    $ @3 `3 ?' W- c6 D$ e
  887.         }6 k1 {8 J1 V4 n) x+ P6 q
  888.         else
    . g; F+ E# |8 W0 v+ f2 Z+ \$ n% ?
  889.         {' t1 M4 a" ^2 `1 }! E1 W; |! Q/ m
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 \: n2 c. e" a7 i9 U
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    1 X; S  g' E0 L! Z/ O. m
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");0 F( u8 D9 h/ p1 a

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

3 F  L, N- B( V5 m+ ?( y" c8 d. V2 x/ p0 z

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

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

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-2-23 13:47

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表