找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
# f0 p7 U2 t" M7 P
  1. / RevApp.cpp : Defines the class behaviors for the application.- f( [; J  X6 u, b% r
  2. //
    $ C2 f6 e; {+ a3 p6 {

  3. % v" o, o4 t+ ]
  4. #include "stdafx.h"
    ; G; w6 Z. [, }
  5. : {9 ^8 |: G& ]
  6. //#define UNICODE
    / V/ B) p( p: `- e1 V
  7. //#include <gdiplus.h>  `+ a2 D' T# |  y$ ?
  8. //using namespace Gdiplus;
    + Y- {7 u  b0 S% D2 g

  9. & q; d) K: t# d& w* [: l$ k
  10. #include "RevApp.h": W/ w" ~1 Q& \7 l  ]+ k0 W8 J; o: Y
  11. #include "RevAppDlg.h"
    - [' _* i0 V/ @# v$ _

  12. 8 [+ \- g  ~- {7 U
  13. #pragma warning(disable:4786)8 x/ N6 w) G3 ]
  14. #include <map>5 T5 y/ r; s8 Y* Q) D4 e1 k5 G; _
  15. #include <list>
    * A: x2 F; u! E- K5 _  P: v
  16. #include <direct.h>9 A' i4 g4 S1 }1 P
  17. 0 R' O+ N% @( A, _
  18. #ifdef _DEBUG
    , [: T( x; F& O4 S  T+ a
  19. #define new DEBUG_NEW7 G1 F& o* u+ e! P
  20. #undef THIS_FILE4 A  S4 |- ~5 e! u
  21. static char THIS_FILE[] = __FILE__;9 Y6 e, i/ H# E- j* d/ l
  22. #endif- x. W# T: f3 W( N: j
  23. #include "SkinResDef.h"
    , a8 d! `9 {+ \+ e6 V6 U2 M) @
  24. #include "ChangeBG.h"
    1 G* \: U; B& c8 N$ _7 R( _5 P
  25. #include "AFXINET.H"4 k( e( N% b5 {& }& D
  26. ; B  J) {% o8 q! y0 f
  27. #define TRADITIONAL_CHINESE 0
    " C$ B3 G( X& o1 H
  28. #define SIMPLIFY_CHINESE 19 E, m8 @7 V4 C) o: L2 \3 A' b7 B
  29. #define ENGLISH 2
    : r# B: I3 d" b0 {9 [
  30. int m_iLanguage = ENGLISH;
      j- H8 ~6 m% `& s8 ?4 r- ]
  31. /////////////////////////////////////////////////////////////////////////////
    + P+ _' i' E5 o
  32. // CRevAppApp
    % j- e6 \0 f9 B8 a- S0 C
  33. + u! x2 H) R1 B( c# }* |
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ! M# x& V% V2 C6 _- ^8 s) d1 M- u
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    , x1 H$ e8 {" [" D6 B
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    - B( E: O: T- y3 y; K! V6 ^7 p
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ( R% Y9 b% ?2 l/ q- I( F  d+ X1 E
  38.         //}}AFX_MSG
    / r2 d7 Y, ^. H' R
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    / V, P! `; x: J9 d) D& E
  40. END_MESSAGE_MAP()
    . n- u4 b1 u' U. x! S( z
  41. # l1 b  N3 O6 f  E
  42. /////////////////////////////////////////////////////////////////////////////
    9 O  \% ]8 }3 a* y% J
  43. // CRevAppApp construction9 }: X( i. P4 F" E2 x8 y

  44. ! _' ^9 |2 V% g
  45. CRevAppApp::CRevAppApp()) E5 v5 I1 i, K" j8 |- d
  46. {
    & N6 W( e8 t; n) u( h/ C; k% u
  47.         // TODO: add construction code here,* D% }9 D  _+ p
  48.         // Place all significant initialization in InitInstance3 M; a* i; Q0 M( ^  `
  49.   bDisplayIsBig5=FALSE;8 V0 Q8 I$ K2 n5 q& b/ Y
  50.   bRestartUpdater=FALSE;
    * l6 s9 w  L  {& T( O
  51.   bFinishUpdated=FALSE;
    2 ^8 y# A7 W* Z6 _
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    * c4 j& U7 O9 Y9 Q" u
  53.   InitChangeDataBig52GBKS();* a/ P$ Y9 O  F3 f" `9 w1 y
  54.   InitChangeDataGBKS2Big5();
    7 |2 u" O! k) @( z9 \9 V! j: K+ w' Y
  55.         //
    4 P9 @) N& M3 A$ r, E" [
  56.         bClickRunExe = FALSE;
    ; a, N0 g" r' {6 h+ j  d. r% l
  57.         //
    5 [7 j9 t$ @4 A
  58. }
    : O$ l6 ^& Z) p0 l* i
  59.   n2 u6 D; ~$ ?% M
  60. CRevAppApp::~CRevAppApp()4 i; x8 L3 q1 F( _% A# y
  61. {
    * z/ V% y0 g/ {! X
  62.         // TODO: add construction code here,
    + L$ b% K9 T# B1 S  Z  ^
  63.         // Place all significant initialization in InitInstance
    4 `+ M6 B) S4 |. W
  64.   EndChangeData();* S8 Q  ]' c$ x; y$ C( ~
  65. }: J) Z+ N, q1 u7 q

  66. % L0 R  ?, P4 Q- P0 @1 y
  67. /////////////////////////////////////////////////////////////////////////////, k/ C# o" j5 |  j9 t. K7 H
  68. // The one and only CRevAppApp object  s" e6 u4 }; L/ m+ H9 O: R- R
  69. . ^' m( \6 a% q6 }9 d# C
  70. CRevAppApp theApp;
    . j( B" j0 x) M1 h& r) Q3 w

  71. ; u8 {& L" W8 I! e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : o! {) ^$ v- d: O- b3 n' u+ ~2 a+ I
  73. {) E: K* D( a2 k& ^# X% K
  74.   int iEOF=0;7 H/ G9 k4 W# R2 }9 c
  75.   char szTempName[MAX_PATH];$ i$ y& i  {" T* T
  76.   *szFileName=0;
    8 |8 S4 B2 b2 _
  77.   iEOF=fscanf(fp,"%s",szTempName);
    4 X: Z8 j/ o4 o  E- q
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')- R* v3 S( _5 {9 G
  79.   {# i$ ]% o# z& ?* c! Q
  80.     strcpy(szFileName,&szTempName[1]);
    6 u% v' U$ C8 \( `0 G
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)$ I1 }0 r4 D0 s! _- i/ Z* Y  r
  82.     {5 P/ t; P* ~! V& @% C: D. V
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ! n( V" j; E4 S. m
  84.       strcat(szFileName," ");1 {" k0 `4 W! j) z3 [
  85.       strcat(szFileName,szTempName);
    - f8 f( m2 ^' C# B/ o3 r
  86.     }6 `4 H# f( ~6 e) L: b2 W
  87.     if(strlen(szFileName)>=1)- n$ t3 a3 N3 ^
  88.     {# q% F+ I, N; i) H( E+ f
  89.       szFileName[strlen(szFileName)-1]=0;
    * r) K+ R8 c1 U6 }
  90.     }
    6 _) R1 a# ?, N+ |) @* D  c' I) B
  91.   }! M" ^+ |& c7 s3 p+ N& V& q
  92.   return szFileName;9 e7 p0 {& h% I8 X" z  H0 M9 e
  93. }
    5 g. s# f( [: ?: o6 ^- Z

  94. 6 c: F4 S/ y8 u) B: t  c" ]" p7 @
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)5 R, |% e* u. f+ O$ v. V. a
  96. {
    8 }  ]) P* x. C. F1 F9 M
  97.   FILE *fp;1 Y7 ~1 H+ \8 H) H: V, E5 |
  98.   char *key=NULL;
    % ^4 P: P" K# G/ D$ Q: b0 V
  99.   char version[MAX_PATH];
    , a9 o# o9 x) W" [0 P7 A
  100.   LPUPDATEFILE file,olds;2 M2 P5 b, q: w$ i; [9 l! u
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
      @; k. `# c; n7 p9 N' K& L% w5 N# |! Y

  102. 6 E2 D% g( c; ~1 U: e
  103.   UpdateList.clear();  y# F1 U5 V6 x
  104.   UpdateFile.clear();6 l5 |2 |$ G: @7 ^/ n2 y! Q7 j, ?
  105.   if(GetFileAttributes(filename)==-1) return false;
    2 W) m% n, P4 T. Z: m/ m; m
  106.   if(!(fp=fopen(filename,"r"))) return false;
    " U& m* W8 T# ]; K) o' v5 O* A
  107.   fscanf(fp,"%s",version);
    ) N* S1 W) n% b3 \
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }5 n. W6 [  X8 n
  109.   while(fscanf(fp,"%s",version)!=EOF)2 s1 d  ~  n' p5 E) z7 y
  110.   {. u. c2 c& }( V4 I8 h. B# S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 x7 r5 |3 F+ q$ l$ b7 F
  112.     fscanf(fp,"%s",file->path);
    5 o, c5 M5 G' P0 l
  113.     ReadFileNames(fp,file->file);9 S4 g. |& O, I" l
  114.     strcpy(file->full,".");
    7 r8 F" Z& \1 ]0 c; V
  115.     strcat(file->full,file->path);/ b3 _$ e* O: T+ M
  116.     strcat(file->full,file->file);7 C- l* v; ^' E4 m0 `" X; V; ~
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    * Y: e, ?( I, e2 a
  118.     {
    ) z9 b8 X1 `$ J/ A# o9 o6 w
  119.       file->vers=(float)atof(version);" A* G; q; R9 }1 U, F6 t, P
  120.       UpdateList.push_back(file->full);
    7 i" Q8 W3 M% p! Q0 T& j. Y0 B
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    6 V2 i0 R, A7 e" L5 _. G! v0 x
  122.     }
    8 O! @. _) _6 y9 b
  123.     else
    3 {7 m$ e  W) _  T4 N
  124.     {
    7 J; F# e6 Y: s- S  @+ r: `
  125.       olds=(*p).second;& r' S/ r( n# m
  126.       if(olds->vers<(float)atof(version))5 v6 L8 d. N7 Y0 n. _- Q
  127.       {
    1 m8 f+ N( t4 @, I( E0 _
  128.         olds->vers=(float)atof(version);
    5 A& m% ], x8 \: t6 ]  n8 U2 k
  129.       }
    ! l- M, W: S/ N; h
  130.       free(file);& L% p  \" ?0 O3 s/ I
  131.     }% h; j# ~, T. R% R
  132.   }
    8 {: \1 ~0 q2 J
  133.   fclose(fp);
    6 R" V: @; s) o% |
  134.   return true;8 r" V6 H: i2 s  A. i
  135. }
    . I6 H+ x, O. N. T" ?1 D) H, w
  136. " m  K& q( p" w2 z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    9 u4 u* H2 M3 Y( S5 }5 c5 y
  138. {
    1 }1 h0 H* P7 B4 P
  139.   TCHAR  szFull[MAX_PATH];
    4 @, E) _; y. ?/ s) ~# h
  140.   TCHAR *token,*inter;
    ' O8 ?) P& z5 ~  n) L
  141.   *szPath=0;
    . @* a, G1 T9 A2 I+ w8 }+ q1 Z/ O
  142.   strcpy(szFull,szFullPath);3 x$ G$ t. X4 V' w' i7 A8 V
  143.   token=strtok(szFull,"\\/");
    8 V7 |; c, V: }
  144.   inter=token;
    5 u7 c: ^  `6 `# l
  145.   while(token=strtok(NULL,"\\/"))/ b5 f# m' g" G9 v
  146.   {
    ' X+ t* b, f* M0 z1 D
  147.     strcat(szPath,inter);+ i; j9 U3 g& a/ g. O. w3 d0 A6 I- z
  148.     strcat(szPath,"\");0 p# _9 m5 K% t% Z! ~& w
  149.     inter=token;
    . o8 |3 J  ^, E1 v) D. D3 @
  150.   }+ ^+ C( {+ O, w* L% q* O9 d0 Z
  151.   return strlen(szPath);$ D* h  s/ |4 T- `, C( C2 L7 [
  152. }( B. }$ k$ [9 ], S

  153. 7 R. [& D& F) g
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    - d3 {1 L( t$ I6 N2 N
  155. {
    - N* [  q; Q* [: i5 h" |
  156.   DWORD attrib=GetFileAttributes(Target);
    3 B6 P9 H4 U6 c/ ?  r
  157.   if(attrib!=-1)% {. e+ Z9 D9 [2 f
  158.   {6 I# i. j) a+ N+ }5 S& H
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    : u! b" s0 C& n3 _
  160.     {
    " `1 c% Q7 `+ r5 X5 |2 E* P
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);9 H3 U7 h, W: }, v' V: ^
  162.       SetFileAttributes(Target,attrib);4 _/ i$ z5 e3 `1 G% r/ O2 l
  163.     }
    " w- k1 S9 }& L
  164.   }
    & `+ r$ a$ h( k. c$ U- ?
  165.   CopyFile(Source,Target,Erase);
    % Y8 g4 E3 O6 r
  166. }9 m$ o) T* u( r, X, F; c' ]

  167. ) u) f* O. b( x( u! }) E0 N! v* n
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)8 N1 M4 }0 R  ?8 `) J" e
  169. {
    8 ~2 F0 b0 G: q6 Q& W
  170.      FILE *fp;
    ; `  o' o9 U$ y. a9 f" s
  171.      char  szBuffer[8192];3 t# C8 M" P! s' K/ [
  172.   va_list  argptr;* ~: p5 p( \: f) L  d$ \! U8 y

  173. % d8 j! y) P1 D$ n% |, ?7 K' O. A
  174.         va_start(argptr,message);7 a  v' h1 J* M$ f% i. F
  175.         vsprintf(szBuffer,message,argptr);2 R/ ]; K6 B, {
  176.         va_end(argptr);, C: q4 [$ K" t/ w$ A  \" k
  177.   fp=fopen(FileName,"a");
    5 `5 M9 i, b; z
  178.   if(fp)
    + ]' |* _, K  M0 V! W7 e
  179.   {& [! T) b& o9 D7 ]1 S0 d
  180.     fprintf(fp,szBuffer);
    # e. j8 @4 \; P* k) t
  181.     fclose(fp);
    9 p3 E# a* F' U7 K* P' g
  182.           _flushall();* E7 n1 k) M  S
  183.   }
    5 _' v/ D! z3 R7 p1 j+ [" ^
  184. }. d; `& v! m. N+ n9 G8 D

  185. # O4 E1 a7 N* ^1 |# t
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    5 e) _1 z) s$ i/ H9 O) k1 m3 w
  187. {
    % `. B3 J2 G3 K# n) G
  188.      FILE *fp;6 B" t1 i7 \8 L) I. k  n) q6 [( i
  189.     DWORD  attrib;
    ; t; k* z7 ?7 P* }# D
  190.   attrib=GetFileAttributes(FileName);7 `! Y3 ]2 `" O& T5 U
  191.   if(attrib!=-1)
    ' T$ a8 @# O; F" G3 f
  192.   {0 `" {, W- E6 r& a; C5 W
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);4 _9 S* M% [6 N) h$ ^: T; t: ]0 q& @# r
  194.     if(!SetFileAttributes(FileName,attrib))3 v% A8 W# x% H5 C& z) b8 S5 f0 _
  195.     {
    , R' U, k% s' c9 @# y' c2 D
  196.       return FALSE;
    : R+ B0 z% Y* T+ m- ]% H
  197.     }! Q: Q( w) d* g! g. R4 ~
  198.   }
    # |% p3 j4 f# o  a
  199.   fp=fopen(FileName,"wb");
    8 P) a- u# M  ?" T
  200.   if(fp)! F/ h& S1 D5 I, T* V6 ?8 F
  201.   {" P0 R% ]( J0 d7 z+ J7 \" q
  202.     fclose(fp);
    0 i# H) ]$ Z% @) ~
  203.   }. P7 y5 g5 U* o0 ?% w8 P3 A2 Q
  204.   return TRUE;" J$ [7 ]5 O6 [! O
  205. }& }* h. P5 r+ A9 ?3 Q) e

  206. 6 F; `5 A. }" _) w3 ^
  207. BOOL CRevAppApp::UpdateLocalVersion(void)" m9 F- @' z. `( g& F6 p1 `' q( V: H
  208. {3 k$ r* V( B, k( M$ ~' R
  209.   char filename[MAX_PATH];4 ], p  S6 r; g9 i
  210.   LPUPDATEFILE file,olds;5 Q$ P/ D( T( |3 M
  211.   std::map<int,CString>::iterator i;6 b) \8 o7 z4 A1 {' z, K5 I
  212.   std::map<CString,LPUPDATEFILE>::iterator p;4 `2 O& o- c; R! I. P# g
  213.   std::list<CString>::iterator l;( M6 B% G: X: K

  214. " Z, U. m0 A% d9 S
  215.   if(bFirstUpdate)9 a6 u# _- J7 v# x9 y( g
  216.   {/ k" z/ _! Q+ }/ I
  217.     dwCurrFile=0;
    " p1 |- [1 q: `" H
  218.     bFirstUpdate=FALSE;& }+ s2 e" A" s" Y5 C8 a# \
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); g  P! I! r/ Q8 Y
  220.     {( ?# Q% Z* s, O4 W- |
  221.       dwTotalFiles=UpdateLocal.size();" `/ @' P# y/ T3 C& k" o0 |0 {" [
  222.       dwDownLoaded=0;# Q; ]5 d1 C- n) t* S
  223.       bSilentStep=FALSE;  Y2 {" N' R. a# f! Y  ?$ O
  224.       bCompressed=TRUE;
    7 p! ?* B$ h1 d
  225.       strExtLocal.Empty();- \' k. m) I7 P1 x) ], g
  226.       strFullName=(*i).second;
    6 Y, @4 W6 z( d- I% E
  227.       dwProgramState=AP_CONNECT;
    4 k7 Z' m: ^* F9 [
  228.       return TRUE;- y+ f9 s; k& g  e# v
  229.     }; Y" ~- ]7 }  ^
  230.   }
    " b3 J) n; x5 ^  b6 B) Q
  231.   else if(bRestartUpdater==FALSE)0 \0 g. G8 q0 p) S% y
  232.   {
    ; ?& o5 `0 W2 O( h
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())8 t! n& c, n' D/ v7 h
  234.     {1 O2 C" L/ T6 y' T
  235.       file=(*p).second;
    " J, w* g7 s' {$ z7 N
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    : H+ [# J; u) Y7 _' [. ~/ {
  237.       {1 G9 }* W& i, W% l, \- F
  238.         olds=(*p).second;
    4 d/ j) p4 P& X5 ?9 l$ o4 K
  239.         olds->vers=file->vers;6 T1 h$ @2 l' U% V6 `: L
  240.       }
    5 i) _) H, \( G8 c" y% d
  241.       else
    1 n) Y8 Z( s$ @  [5 V$ b! c
  242.       {
    3 A' N' r4 T0 E  n* G
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  w9 {4 c" @4 P2 j; ~+ R# W  x
  244.         memcpy(olds,file,sizeof(UPDATEFILE));: a$ f4 L) _. x( d5 |7 u; y$ u) F
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ! G7 `2 ?. @  ^8 N. q$ l5 \7 E' C
  246.       }
    1 k) B' X: k# f- B, H3 H
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 {( v7 m3 t% m* \# |, v; |  k
  248.       sprintf(filename,"(%s)",file->file);( _! Y, n) B% V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ( a6 l  P6 F; R/ j
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: T3 H/ S5 V( E' i& `: H
  251.     }$ |! h/ }' ?4 s+ f: P  |
  252.     dwCurrFile++;
    % |) [9 I3 U0 q. p! F6 l6 z" K
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " _" `3 K: z; M' F5 i
  254.     {
    - D+ I5 t3 \1 V, `+ }" Y+ k
  255.       bSilentStep=FALSE;. I' |1 k& T! U" o
  256.       bCompressed=TRUE;
    . {/ F( a* H, P+ W" Y4 d# Z
  257.       strExtLocal.Empty();& u9 Q; G" v( W( Z. T" \1 D
  258.       strFullName=(*i).second;/ j; P8 y  @" H
  259.       dwProgramState=AP_CONNECT;8 v7 B% w6 {, p* o" @
  260.       return TRUE;/ j) S; Q- e# w1 h
  261.     }7 d4 Q* l  ~+ i+ P& d( O) B9 a
  262.     if(!bRestartUpdater)
    . A" Q! u# ^/ b; n
  263.     {3 ?0 z6 g6 T" h3 Q; q# Q
  264.       int iCurrSize,iFileSize;0 z+ A7 F7 E: e
  265.       iCurrSize=0;: _2 @* ~; Z) r6 |
  266.       iFileSize=UpdateList2.size();
    6 \' s( H: J9 o& ~3 r! i0 t# D
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    4 ~; o  O/ n3 m
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");; \' N/ W9 B, b$ @
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    $ {# p3 N! z4 _" \
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) q0 o; j0 a/ F) Y( ?+ q/ i: a' h
  271.       Fclearf(".\\update.dat");3 n! D% \4 }- o; T* _* ^, H
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ' a, x- Z: W; l; E7 k! N
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 G/ h) ^4 o/ y$ m, j" @
  274.       {
    ! h6 o6 \' O$ x0 L6 d( r
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    * {" S+ s. x+ ]' j  x# k7 k
  276.         {
    9 K+ m1 w6 C& t
  277.           file=(*p).second;
    ) R( {8 c  A1 A9 G
  278.           sprintf(filename,"(%s)",file->file);2 {" i3 {- J" @2 j8 N1 H# c5 P
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 u# a- c% U7 \# @
  280.           iCurrSize++;, [2 `3 G) Q: n" Q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));; X' I7 _4 ]! q( D
  282.         }
    # L/ x: }  D+ N, ~6 ]' B3 z
  283.       }( y* t- s; l; w) G7 b% E0 S4 E! _0 `
  284.       unlink(".\\update.txt");4 E/ W0 t, @4 @
  285.       unlink(".\\update.tmp");
    ! V9 u4 s" ]9 j# k9 ?
  286.       Fclearf(".\\checkversion.dat");: @6 s9 g: H' f
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);* ?) w7 `" B6 v" \
  288.       if(UpdateLocal.size())4 G. Q' D. Y6 ^! l4 J
  289.       {4 n) [  ]% c' F- U' T
  290.         UpdateLocal.clear();  m0 s2 D7 o0 A: D9 R  m& c
  291.       }
    7 N2 V: k. S; `+ i( d& R
  292.       if(UpdateFile3.size())* W1 d4 J3 F$ y! u2 w3 j
  293.       {; U5 k0 T; K& k
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! X; w9 t- M: g. f
  295.         {
    4 s! F8 Z0 l) a% O& ]. u
  296.           file=(*p).second;
    1 N) H" a5 E2 s* X, r* x
  297.           free(file);
    % s9 a6 X" l" I4 t: k/ r  u
  298.         }9 W7 I) W8 s, S5 d! p8 B/ o
  299.         UpdateFile3.clear();: J! v5 Y; E; t: K' x  W4 m- F
  300.         UpdateList3.clear();( ]: m2 j' u# n9 d9 [, w) n$ D
  301.       }
    4 g$ j- @! N! V9 y" q
  302.       if(UpdateFile2.size())0 P. n: e3 J% n
  303.       {% g( B8 y8 N7 m5 v
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). Z+ G7 D7 A* ]5 L: V+ ]' I
  305.         {
    5 m- n$ L" U8 |$ S5 e
  306.           file=(*p).second;7 o; e2 H" {) V* y$ m
  307.           free(file);8 ]9 Q  U5 k  S" b0 s& P# T
  308.         }
    5 G( x' D. ~' f/ ~
  309.         UpdateFile2.clear();! k. d" V3 ~" v' P7 U4 C
  310.         UpdateList2.clear();
    , c$ c5 F7 j' s  ~; H3 ]
  311.       }
    / v6 l) H$ b1 p2 @
  312.       if(UpdateFile1.size())/ |9 Y, F  R  \0 `; C
  313.       {
    " u- \% W' T6 [9 d" x& m6 p/ f5 X
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , {) c8 V$ y% R2 _
  315.         {
    2 [  s, v: V$ b1 A& g: {, T1 x) @
  316.           file=(*p).second;* Q' o& Y) R6 z9 U, y
  317.           free(file);
    0 R3 {2 O4 R% I3 V
  318.         }! K( V3 l- P) S1 g! j* Q  m% ~
  319.         UpdateFile1.clear();
    & E9 s( r# J  l# t
  320.         UpdateList1.clear();& G' Y! A  D7 k# M
  321.       }2 E5 |+ D1 o3 l  Q  r
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    8 v. b- Q. C' ]* w
  323.     }
    $ f& S5 a) D4 u' }! G
  324.   }3 J! N2 k5 R& F  F- O( x$ K# ?
  325.   return FALSE;
    2 B0 w0 l- l- S8 _
  326. }  Q/ Q6 {& w. Y7 n2 [

  327. # b* }; ]: Y# z5 R! l" Q
  328. void CRevAppApp::ClearAll(void)
    * z3 ?  R; S, f; Z- y
  329. {
    5 l+ I( Y. X! \
  330.   LPUPDATEFILE file;
    , r3 E$ t& r5 ^. \# G  n9 \
  331.   std::map<CString,LPUPDATEFILE>::iterator p;: U; ?4 P) s" _, \. X
  332. " _; g) }1 ?- M! S% C+ x& t
  333.   if(UpdateLocal.size())4 W8 ?- C+ i) C- w
  334.   {
    1 U" R+ D& V& B5 P
  335.     UpdateLocal.clear();( a* @' t" c/ V/ A. P3 t& J
  336.   }4 c& P5 `; z1 S1 ^$ n
  337.   if(UpdateFile3.size())' {2 C9 \! \2 a$ B
  338.   {* B/ n2 ~+ c7 c9 a) v3 ]
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% D- d) H% @! ?! ?4 K
  340.     {
    8 {, Y- p7 s+ a8 O
  341.       file=(*p).second;5 |  S) h9 o* S9 N1 o" m( d; g6 n
  342.       free(file);
    ' g8 Q! O  H! m6 N! J& E/ i
  343.     }
    8 T; J4 ]7 w! e
  344.     UpdateFile3.clear();- N# A7 _' }4 T" x8 l  [2 O
  345.     UpdateList3.clear();
    3 m2 D$ d4 R: _$ T' _3 X8 s2 T
  346.   }
    / z% r: \+ Y/ V1 g6 w
  347.   if(UpdateFile2.size())
    / I+ l5 v, o3 X$ b6 ~& H# O- _
  348.   {
    : U  V" p2 X: k
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * k4 p* |& [3 F) f/ ?  W7 e4 E3 w9 V3 U
  350.     {
    ( y2 b6 |2 H  I0 D+ o, [' J- c) g
  351.       file=(*p).second;: E8 f- Y" W3 }2 \2 n
  352.       free(file);/ N' o  S$ [' z9 L7 H. D$ ]
  353.     }. U! J( ^' @/ y9 m
  354.     UpdateFile2.clear();
    + d3 ^3 c/ b' w9 m. `5 z3 |- J
  355.     UpdateList2.clear();
    - o9 s2 R1 P+ ~& U; Y4 ]
  356.   }
    : Y0 f3 q( v9 z1 B" ~  U: L1 G
  357.   if(UpdateFile1.size())) j! Q/ C# S% h' E0 X
  358.   {
    0 O9 L! Q% G8 Q; x  `
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , k) P9 v, v, u2 j# L
  360.     {$ o' t  o: z8 P3 s
  361.       file=(*p).second;4 S; [& O7 Q6 z7 Q
  362.       free(file);: p6 N0 r$ `6 ~0 b
  363.     }3 h5 l* _! L3 d- p6 ~- Q
  364.     UpdateFile1.clear();, t- ]' u" M* M/ y. E4 w: l0 \
  365.     UpdateList1.clear();
    / o4 F" }" J' \
  366.   }
    , n/ O- n( J9 a  t& j
  367. }  
    0 O! y* R6 D6 x, R- H) [
  368.   
    . U8 n( `% b! @& [* i+ \
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    * t. b: M; a1 [* C5 Y
  370. {, ^+ x0 s" P/ R( D9 Y
  371.   int c;
    4 D  h/ R" q$ w* p5 M; E) Q
  372.   LPUPDATEFILE file1,file2;6 p2 e) ?: Y8 N9 o
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ ~1 s- T& r- c/ n
  374.   std::list<CString>::iterator l;4 x+ T" S, i8 J7 Y% \

  375. 6 D4 v4 b7 h' w5 H* \
  376.   UpdateLocal.clear();
    - Y0 s/ m. B' ]$ r( y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 H& F, b' X$ B5 a' Z+ M  `2 @
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    $ r& ]& s3 N& {, b
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    & H: \$ m* O9 ~  N* t2 }# n& F; q
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);* C" p  \# q0 M
  381.   if(UpdateFile3.size())
    3 |' h' e" Q& e2 g/ t4 g) T
  382.   {- f$ d5 v4 k/ M2 U* r/ t4 N
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    0 k3 a' p( u9 Y: a8 c1 r' t
  384.     {
    . G0 U/ r4 s; |( b, x
  385.       file2=(LPUPDATEFILE)(*i).second;. `! T6 P& Y$ R* O9 k6 }
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 x) e3 C; q3 a
  387.       {
    * e$ \' T4 K5 R9 l# r3 e& B  ?
  388.         file1=(LPUPDATEFILE)(*p).second;% s! X9 Z' ~1 u* V6 X- {
  389.         file1->vers=file2->vers;
    ; w1 w) r4 U3 K! B; J- s8 L
  390.       }* p" X" t% G. O- r
  391.       else! U7 u0 c; E- l) `% b0 R
  392.       {
    9 `) N8 m+ {! y; `# k0 s
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & [% u( r/ z6 ~
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    2 p4 _4 i: L6 ]* |2 B# ^+ v
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    : q3 \9 t3 y5 b, I% D$ t4 C# S
  396.       }( q' \' w3 d% K* Q6 R: [, F  ~
  397.     }
    $ g7 {; N2 Q3 a; g; E
  398.   }5 b) q5 Z1 N& E; w) p3 T- f; ]5 A
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)+ S# j% P; V/ a+ A9 R7 `) Z
  400.   {% |9 }+ G+ `+ ]
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    * m" J2 l; x' D; y/ `
  402.     {
    5 \- v$ c/ p/ \/ j& N2 x6 R+ o
  403.       file2=(LPUPDATEFILE)(*i).second;
      r9 J; o* @, j6 j7 j# [$ W: V* q6 x
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * U0 B; V' J& `* R+ c  _- j- g1 C
  405.       {
    2 M5 z% x* ^% t- O
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 s1 R2 I8 b0 o7 F7 L, f
  407.         if(file1->vers!=file2->vers). U7 G9 h! I& {6 H( u
  408.         {$ H0 ]: u- d" \
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( k4 v0 `& H% }- G* f
  410.           c++;
    1 P/ ?9 X# \1 X, M, O
  411.         }
    ' {- o. e  ~7 b% B0 ~+ K8 _
  412.       }
    0 V. k* H; Q; j* x$ Q6 P9 v8 R
  413.       else
    , r$ Z' G  ?! U' `2 b& P
  414.       {
    ( }8 a5 ]+ G* |6 @
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; e" Y# }2 {- i  W+ y5 O  l
  416.         c++;4 o9 t* p, \, l& K* g" y* I
  417.       }8 q* T( M9 w! M0 i; |6 j
  418.     }
    " }0 E5 e- I5 V
  419.   }
    9 s8 c; R9 k* }" S* h/ E9 m) v/ @
  420.   unlink(".\\DownLoad\\update.txt");
    " M7 [; s$ l; P9 C) g4 _
  421.   if(UpdateLocal.size()) return TRUE;
    : V0 o; h8 D) Y# \* d) P! u
  422.   else                   return FALSE;
    ; V/ o( Q2 F: O* Z( n; R
  423. }! Z2 E& F+ m7 {  _& l# O

  424. 1 T. @$ B% W% M  [* O+ @# m, _8 h, v
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! i0 [3 v" K9 j0 X4 @7 r: T& y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"7 `. v5 B# ]; |. w/ H
  427. ' o! Z, u" a. C' {) b

  428. ; b2 z. ?; v, S/ [

  429. 0 N6 D5 m2 v, B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ! ]6 K6 k0 m/ j, X; D
  431. {8 o3 R0 E% }1 r, v1 k
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;/ h- Z+ i/ e: r
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), u/ ~6 ?4 u' p, S) K- _$ z( S
  434.   {, J( E7 S9 J1 `* |
  435.     char szLanguage[50];
    $ L1 x" G. p8 k; Y! w6 `9 {; N- b! X9 j
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  m5 @+ k; W% W* [& M
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 c$ i: ~' b+ e% ~
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 M+ `0 O/ a2 k$ h  b4 A8 `
  439.     else                                   m_iLanguage=ENGLISH;. u9 H+ o8 z4 Z" U
  440.     char szRegister[100];5 H& v/ f0 {5 i: H( \# a1 N% S8 z1 {
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 L8 m# K0 I  r: f! Y9 W( n# h% t% w
  442.     strRegsName=szRegister;
    2 p, q; p! I# A
  443.     char szPatchURL[100];* Z4 z( i# s5 M, ^
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- i' W4 A- N* f, P
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);! S- s6 U6 [/ F* Z! n4 V- y
  446.   }
    ) z/ r6 m( i9 [1 o# O% @
  447.   else$ ]9 j# S( U. F6 y  a' ]& `) u
  448.   {% P) w4 b0 o$ O9 S+ |3 ]
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 j: [/ j  a5 \$ ^& m
  450.     strRegsName=DEFAULT_REG_URL;
    # A/ k& d( f# f8 ]0 d: T: J* r
  451.   }: N9 R- Y! Y+ p7 O% b
  452.   if(GetFileAttributes("hosts.ini")!=-1)4 U2 v* H, s  j2 t& b" V: a
  453.   {
    2 }  J# J& Z$ q% L3 a" ^: q- Y6 |0 u
  454.     char szIP[50];# L. x, M0 c+ f5 {4 f2 U
  455.     char szDIR[300];$ z: B8 H& `& g% T* |" l
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% u. I1 R/ j% H
  457.     {5 q" x$ t6 Z. Z8 j6 J9 Z* }7 P* C
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");) m! J5 J! M1 n. q; |  E" ^
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    8 t% t7 t9 Q% A. v0 S# I3 e
  460.       strHostName=szIP;/ A$ O; {* {  w: B" {& Y/ ?
  461.       strHostPath.Format("/%s",szDIR);; q: W! r7 W" Z" f
  462.     }' y& \- w" i4 Z% Y  D
  463.     else
    - E* C9 L, N7 J( F3 D: X; s
  464.     {% p% l. {6 }+ v$ @  R# j" V" c
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( e/ |9 A  n# g( i7 q
  466.       {
    ) Q0 r; B+ ]: c" x
  467.         char szLanguage[50];- N0 G( F  s9 G' L. q. x; P" ]- T, y- S
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- P9 ]8 ]' n3 O$ F/ g
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) R: Y/ `7 U- U2 K2 F/ K1 ~
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " Q1 c, U6 i- T7 d
  471.         else                                   m_iLanguage=ENGLISH;
    , ]' B1 t7 Q+ v' J2 o$ R
  472.         char szRegister[100];! `, c. K, e" f# m# ^
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" x1 U7 S: i- [8 C' q
  474.         strRegsName=szRegister;9 H: w* H" ~: A# v; a
  475.         char szPatchURL[100];
    & y2 {- N& P: ]0 ^/ r
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 u8 W; o8 ]( v8 A9 F! n
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & r: }+ U1 B- x! {1 i. i
  478.       }
    3 c+ j/ E. o1 |& }6 q  g0 Y
  479.       else3 ~) s. A/ Y- Y$ Y
  480.       {
    ) E* ]% \+ W6 V: @, s( H
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 j$ W8 Q2 I7 V" K! x8 [
  482.         strRegsName=DEFAULT_REG_URL;: T! h' N" d2 s
  483.       }
    ) |9 W: L4 d/ g4 w
  484.     }* [- W, Y9 ^/ L! k
  485.   }
    6 S* o7 @, I5 }+ l! `4 j
  486.   return true;
    % Y) {" ^6 }; p* {! X1 @
  487. }
    5 E  L8 k, u, a9 s. P* c4 Z% t+ h9 f

  488. 6 }& Z- f4 i+ t! o3 ]( P: t9 ^
  489. #include ".\ZLib\unzip.h"3 t5 U  K4 I+ v# B, m
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);5 P) I' _8 P! n" b6 }  A8 H
  491. /////////////////////////////////////////////////////////////////////////////" ?% c, z* a5 ~' p# \6 q+ y+ a
  492. // CRevAppApp initialization
    3 W  ^- \) y' O. }; w' a8 y( v

  493. " K4 P  x" Y2 l/ B/ d8 C6 [
  494. BOOL CRevAppApp::InitInstance()0 S! N  z/ z: u
  495. {0 {4 u$ j! r8 X# V- _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    0 _% z* l) z# w% b9 M9 s7 X
  497. 0 w1 X, [: \5 j5 c
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);/ W8 `6 P2 L  k0 \3 M4 g$ w; M
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))& T5 O2 U7 l3 @" O6 H1 m
  500.   {+ }8 R+ C* g- T3 w$ K5 a1 \
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ; U& S  T- b6 I8 Z0 ^9 ~. u$ r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    # O: z" I9 ^4 a# t$ ?
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))). F- H, `6 L. ~1 b
  504.     {& |& q0 Y9 I" ^
  505.       strcpy(szPath,szPathTarget);. |' ?+ j# p+ A" F: {6 E" k+ V
  506.       SetCurrentDirectory(szPath);/ i$ B+ B" H+ b* e$ @+ P: _
  507.     }  C9 P7 X$ n7 B) s+ f$ f  U
  508.   }+ R( S6 ^, R$ V
  509. #ifdef _DEBUG
    5 N% ^7 q. l7 ~0 ]5 j4 O' i
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 {( W2 s+ R) ]8 o1 U3 H
  511. #else( K  ^9 w* m2 p2 o$ s4 r
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! i, Q8 l, X3 x0 I
  513. #endif) a4 `$ Z& E3 v! C% M
  514.   {
    , ?( L8 ?: x' V, w, ^
  515.     char tempFileName[MAX_PATH];4 J, G' {7 k4 \& u
  516.     strcpy(tempFileName,szPathSource);
    " V4 }! Z* Y0 V
  517.     tempFileName[strlen(szPathSource)-12]=0;( T- W2 e, L) Q* T4 q
  518.     strcat(tempFileName,"\\$CSUpdate.exe");# |8 L* w6 |0 c1 }
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 F( `5 t. o' e# p* `
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    4 v6 D) x4 S1 u. I  g3 ~# D5 R
  521.     return TRUE;
    " i& X( ~! |1 \5 X
  522.   }
    . t0 v/ ~2 F- V
  523.   // Nuke 0118: Delete run.exe8 [5 [6 D1 E* U, W$ D7 l
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    , [. f0 O3 I, H, H+ c  X" L+ Z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");& U% K$ z9 x3 c6 m# D6 }# @) Y
  526.   if(!ReadCfgFile("Config.ini"))5 W8 K8 Y0 R0 F' q' S! q
  527.   {
    7 }% ~, ^. N' F4 Y* z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    4 B& Y& p* t' {0 G4 B: z! V
  529.     return TRUE;
    / t# j  M1 D8 [
  530.   }/ P, `8 c/ q- b# x& q" S
  531.   HANDLE mutex;% U" i. V; @) N% Q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))" I+ M" W9 Y6 w
  533.   {/ |1 C8 e& k% t9 X
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    : g2 t+ s& X0 O- F! v/ X
  535.     {. r2 `, y$ t. h1 D
  536.       CloseHandle(mutex);" n* U6 Q3 Z" S9 z+ \0 \
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ! u8 }1 u1 b! o
  538.       return TRUE;. h2 ?) N' @0 r! {$ Z4 }
  539.     }- d# O- M5 [8 A' ]' a" Y: |
  540.   }  2 @. p( x3 w/ D# @3 ?5 m' I
  541.   CloseHandle(mutex);3 M* J2 R: Z) l% t$ C1 V1 E) Z

  542. / X' w0 I! G% i" q* D
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);1 t" b7 \- N$ f1 h7 W; D1 n* E" D0 E
  544. 1 ^, c9 V$ K  B' v$ A7 W
  545.         AfxEnableControlContainer();
    " P( p$ D- u) T0 e/ A: j

  546. & z7 I, u+ h2 z+ c
  547.   bCanUpdate=FALSE;
    7 a# T  j( }/ a+ d$ p
  548.   dwStartUpSteps=1;0 p1 F: u+ e; }! f8 r1 ^
  549.   dwProgramState=AP_NOTHING;
    7 S& q+ K1 I* n

  550. 9 ^+ @+ \# t& N8 V5 A1 v! K" Y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    8 G; G! q$ K+ i; Q

  552. & I$ d2 r7 p7 `1 b6 R
  553.         // Standard initialization+ a0 G1 h+ `& {% a% j7 S
  554.         // If you are not using these features and wish to reduce the size0 N4 L3 U3 d3 x: I; `
  555.         //  of your final executable, you should remove from the following
    % H: c+ F5 j" f) l$ d( N- ^
  556.         //  the specific initialization routines you do not need.. r) z9 }8 M$ ]2 J, F- f
  557. 3 L, i) Y! \0 L
  558. #ifdef _AFXDLL
    1 k8 u2 i3 e/ L
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL' U' A, r" @5 ^, h7 c
  560. #else" X( E5 ]% C* D: ]# \4 u
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically9 w  k9 N9 p! W9 J2 O/ J7 b
  562. #endif/ c' b+ J1 G: k1 z

  563. # c( I1 R( Y! {  t
  564.   dlg=new CRevAppDlg;
    % b7 v' w- H6 f& l# {* l5 t
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    6 O% w* G% A2 ^: t( [, F7 O) m
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    3 @1 \% |2 m. p1 e: v- o
  567.   m_pMainWnd=dlg;! B2 R: i7 E) ]  d1 j
  568. : W/ S3 A' C9 \
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    9 i: S+ `5 g/ G8 k$ S/ i: N
  570. 3 [4 J; u7 G9 b! }1 t6 {
  571. //  GdiplusStartupInput gdiplusStartupInput;
    8 y+ ~0 x. J8 }/ Z
  572. //  ULONG_PTR gdiplusToken;1 k! H$ B% y9 t' m' w# A& d! A
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    8 O0 s9 p7 H! A; ?# U  J2 [& H: D' P
  574. / R+ @: V3 q3 b9 x
  575. //        CRevAppDlg dlg;
    * p+ \& Y& y. }- M$ |
  576. //        int nResponse = dlg.DoModal();
      y+ p) I, Z! t- a8 c. m8 j* d9 R) V
  577. //        if (nResponse == IDOK)
    0 a  n) Y; v8 l4 G
  578. //        {3 Q- x+ X$ @5 p" x
  579. //                // TODO: Place code here to handle when the dialog is- D7 n8 W" Z- a9 s
  580. //                //  dismissed with OK
    ) w. F9 N* p0 V: ?; G
  581. //        }
    ) E0 P# O, d! e, q6 x) w) Y
  582. //        else if (nResponse == IDCANCEL)! `: Q' c: m- {. z4 U
  583. //        {$ m$ m' p) ^+ P; B2 p% n2 U
  584. //                // TODO: Place code here to handle when the dialog is% P' Y0 w! i; W1 G. M% |. N
  585. //                //  dismissed with Cancel2 b6 x, @) E! c
  586. //        }
    # V9 ^  Z  U$ s- {1 i& y( i  S* e* D
  587. - f- f0 E! H$ A" G/ {% T/ Q
  588.         // Since the dialog has been closed, return FALSE so that we exit the, e& A6 }/ p+ x. {# J9 S
  589.         //  application, rather than start the application's message pump.
    9 i7 f  {  q) X1 h! W1 s
  590.         return TRUE;
    0 [8 i4 l) M7 c
  591. }
    % `& \0 ^. e$ d9 I! V% G
  592. . a8 S' ~( {& m5 @1 P' Y9 Z3 P
  593. char *CRevAppApp::strtok3(char *pSource,char *token)5 `. _4 p$ z3 b; q. w; \9 [
  594. {
    1 w8 ?8 G8 W4 v9 {" M8 e$ G# q4 K
  595.   int i;. e, Z4 [0 M5 j( {# d* d
  596.   char *szRet;
    & @" I7 H, o& ]8 e

  597. 2 }7 j5 Z3 `3 ?  h
  598.   if(pSource) { itoken=0; sztoken=pSource; }2 i. @0 l9 Y: f3 Y
  599.   if(sztoken)
    9 n4 ?* Q% W& _- U
  600.   {& e" Z& I6 f2 e* n8 j
  601.     szRet=&sztoken[itoken];$ y( p/ s1 Z, p4 V- C. r! K( T
  602.     while(sztoken[itoken])
    - q2 E! l3 o: j* l" b/ I+ B
  603.     {( B6 ]  J5 M+ Y* _" {! X- g. @  r" }8 c
  604.       for(i=0;i<(int)strlen(token);i++)
    ; p/ B/ F# f/ @( L8 P
  605.       {/ D1 {# s3 S& k9 M6 w+ o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])8 m3 l" s! i5 H+ e
  607.         {( q2 t0 a) p* i7 I2 i+ O9 s
  608.           sztoken[itoken++]=0;
    5 s5 p' k' A% D' l- y
  609.           sztoken[itoken++]=0;  u+ m- B" d# h3 ]5 n9 M
  610.           return szRet;, `. P  y$ v( C, p0 g! X) l
  611.         }5 e; {  F$ G# P
  612.       }6 i# r& l. K" I8 y# ]2 \
  613.       itoken++;! T4 y7 [3 V% p) k# U7 k2 b
  614.     }4 I& g0 q: j: m
  615.   }
    # U2 l  h( X1 R3 V- P
  616.   return NULL;
    8 l. Y, Q1 ?5 l9 `
  617. }( p5 M. w- T9 ?9 W! B  N4 z
  618. * k/ r( k. e8 Y1 b) A& @7 i$ \
  619. void ProcessProc(long Total,long Current)$ L( Y! t) e# j: M. `9 r
  620. {0 v% @5 \; c5 f
  621.         MSG msg;: u( T/ B& T/ v  O# K' R. E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);- l$ {4 m( Y, n0 h
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));/ p: u% ~% Q$ w& p
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ L( c7 W: J0 F4 \5 v6 Y$ {
  625.         {
    ( }8 C, f6 s1 R( K1 ]
  626.                 if(!GetMessage(&msg,NULL,0,0)); E7 E& i0 w; f  ~9 E5 X: }
  627.                 {
    - H, c$ }# Q2 l/ I5 L3 x! r0 ]  _
  628.                         return;
    # N8 L7 G8 q. c5 `) H# y
  629.                 }
    - j, ~" s2 p1 u1 R3 N( i
  630.                 TranslateMessage(&msg);5 I, T/ _( z' a5 |8 d* t  ?
  631.                 DispatchMessage(&msg);
    : f4 |( ?1 m" {% w3 ]
  632.         }       
    6 b( Z6 ^; x8 B
  633. }9 }; W" |) a2 C" M

  634. 2 a; C! I6 v  G5 |: q! q5 U
  635. BOOL bFirstChar=TRUE;
    , ]" ]) ~! k- Q) Z" Z0 ?! Q( |

  636. 0 {. v3 a- p1 g- n1 P
  637. BOOL CRevAppApp::OnIdle(LONG lCount)9 s, S; s" C, }7 f2 V
  638. {( q1 z, ~' x% n9 Z, F
  639.         // TODO: Add your specialized code here and/or call the base class2 ^1 e3 q7 z( t0 z: e' G% o0 X
  640.   switch(dwProgramState)
    ! k( W9 {5 _: n5 S* t0 u# n
  641.   {9 G# {+ ^( Z( L* @# P: b2 C
  642.   case AP_NOTHING:
    4 a! D  w2 Q. y) x: Z
  643.     switch(dwStartUpSteps)
    ) a! d: E9 `+ ~4 @4 {
  644.     {
    : z: V* D) g5 H2 y1 ^$ g
  645.     case 1:
    1 g0 }6 F; J' E+ L3 S' l# F' J) i) N5 T
  646.       {$ T+ E! v7 ]1 \1 U
  647.         int i;8 @; |3 q" w8 d7 v4 D: U- I3 p+ R- p
  648.         CDC *pCDC=dlg->GetDC();
      o) ~3 a/ e: b' S6 O3 y2 k
  649.         HDC hdcwnd=pCDC->m_hDC;
      L7 o  b- F1 a5 F3 r$ h2 C: u1 _
  650. //        Graphics graphics(hdcwnd);
    - m$ a+ L( a  D3 J/ u: P  T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");+ g- }  h2 A/ q
  652. //        INT iWidth=bitmap.GetWidth();
    " y+ W' U( g. K$ Q& [% T5 e
  653. //        INT iHeight=bitmap.GetHeight();
    + {& _5 N! N# m6 |9 P0 ^+ }
  654. //        Color color,colorTemp;4 @1 N# |- G8 ~/ D: b+ n; U% F
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 _+ i( X( ]4 L: t2 A& N& z3 Y  H" y% x
  656. //        {
    4 p. l# }# b0 J5 p/ g
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++); N, a* m2 f6 l7 t. F
  658. //          {
    & T/ ]- |  w4 o: }. S( T7 e; u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: |( {2 E1 p# U
  660. //            colorTemp.SetValue(color.MakeARGB() p3 H+ R+ W$ O$ O( h; E* r
  661. //              (BYTE)(255*iColumn/iWidth),
    8 K5 o7 k; L4 H6 O
  662. //              color.GetRed(),9 ~& U9 Q, I4 G1 A. Q7 o! P
  663. //              color.GetGreen(),9 y$ r0 N$ ^9 h, z+ m! H
  664. //              color.GetBlue()));6 j5 v, Q( e4 X' c8 i. u
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);1 n; h/ E' C8 J: y( J6 f- r7 ^& M
  666. //          }
    0 S, Z2 C5 \' \3 }# T& g) |
  667. //        }
    # ~2 P) i+ R  [! L
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    . [# ]; y" o( v: h! i, [
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : u2 W1 V3 k" x' C0 y" R3 S. ^3 Q  F2 e
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    6 j9 w1 ^* H3 C# O! A2 G
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* ?- h1 B1 ?/ I
  672.         for(i=0;i<240;i+=8)! {  h9 E+ l( C, D: q
  673.         {
    4 z9 r8 f8 `$ k8 k5 n. W' l, ?6 T# z
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; M4 S6 V* m6 N9 G
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! L  {5 |  p/ A7 D
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% G2 N  D4 d( ]1 m$ K. y
  677.           Sleep(33);) U( Q/ e* y% G5 p
  678.         }
    ( c( B  [! B% B8 @: R7 ^3 R
  679.         Sleep(1000);9 h0 q# w4 D0 v; c6 L5 _0 P
  680.         for(i=240;i>0;i-=8)
    / O( G1 y; Q* o9 y
  681.         {
    ' M$ W$ b) f5 i/ b$ R
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; q- I! o9 ^& ]. `. y- ~" k: W$ m
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* }+ }7 _# ^- r+ ]- R
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# a, k. ~! f7 k! W+ A
  685.           Sleep(33);, l7 g. M* Z- \  l
  686.         }
    , |& k, x3 T/ I. |6 r( B
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ; a) y. m* W' s( U9 K$ w9 J
  688.         dlg->ReleaseDC(pCDC);1 v1 F  f4 U8 |* V, p
  689.         DeleteDC(hdctar);
    : z# m. a' Q! S3 u% w
  690.         DeleteDC(hdcsrc);$ x0 z: N' J# p" O5 V" }2 G& L; |
  691.         DeleteDC(hdcorg);0 ~0 i1 ^( L0 Y* b) b% U& x
  692.       }
    % A& _9 ?* v5 C8 p
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ' ]* z' e' H: n2 i* V- W4 Q. W
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");; R+ f- Z% z* ~  m0 i* [# o5 n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");  I% C6 M# H3 \/ G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    $ }8 a5 E6 \7 B+ z; q4 p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 G& G- R; A% L  z  z' l
  698.       if(!Dn.Connected())
    ; j- z5 g4 ]0 S( d9 y3 D) N4 d
  699.       {3 \& r7 G. F. W- @5 q. t) c# u$ V+ f
  700.         dwTotalFiles=1;
    ! n, C4 v. ~6 s, G' F
  701.         dwDownLoaded=0;! \  g1 J( J9 Q! A/ B) D% Z3 z4 f
  702.         bSilentStep=TRUE;- R- G+ F) b; n+ g" e3 ~
  703.         bCompressed=FALSE;
    ) n# ?" t; H2 r$ i2 l
  704.         strExtLocal.Empty();1 u6 q; l' N& u
  705.         strFullName="readme.txt";
    7 l. p7 O6 o9 {
  706.         dwProgramState=AP_CONNECT;
    3 g8 Y3 |* E" T& m8 \
  707.       }: O3 t, q; j5 g  R2 e! q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 m# H, w6 i* ]
  709.       dwStartUpSteps=2;
    + U# l' K2 u7 x0 Z+ @. B
  710.       break;
    . Q; g1 o3 x2 L' S+ s. {, m8 P
  711.     case 2:/ q3 z0 ~4 L' l$ d; S- B
  712.       {' A* ?+ N4 l: P" {1 c% b& m
  713.         int iEOF;% N6 b# D0 m- ~" K
  714.         FILE *fp;: |2 B9 L6 `9 {- D3 n8 f
  715.         char szString[512];% [! f7 O$ W1 }* Q% |1 ?6 W
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");  t$ N; B. g  b: u6 h* @2 w- u
  717.         if(fp)
    " }1 T. {) ~) x  N+ d: M
  718.         {7 h$ Z4 ]( p4 A" B3 o6 L) Q( M4 z% J
  719.           do
    : C+ Z! ^+ [7 L: L3 O* H: g
  720.           {- V( n! b) O7 r
  721.             iEOF=fscanf(fp,"%s",szString);  u: S( v% q8 A* E2 B- \% Z7 |
  722.             if(strlen(szString))
    9 p( m+ y+ h4 L
  723.             {
    ) M- d& }3 r3 R2 R4 f' \
  724.               if(bFirstChar)
    5 b  Y/ A# |6 K& n+ L. e
  725.               {* h) T9 f  }7 X; }5 y8 r' c: e
  726.                 bFirstChar=FALSE;
      C6 C1 e4 ]+ W% m5 x$ u3 K
  727.                 bConnectIsBig5=FALSE;
    5 G3 K$ o9 Y( N
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    3 J/ m8 m4 K# T3 J6 v1 y
  729.               }( l9 T# q$ w. i, O, g
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    2 a+ R0 O9 q# Z# F' y0 q9 r% z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    & N! d& Y7 r% c
  732.               dlg->m_ListText.AddString(szString);1 C$ \- U: R8 e, m6 M+ [8 L( X8 i2 M
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 @4 P! m% _+ k& O8 W
  734.               *szString=0;
    3 Q: e3 J% n$ H* n" u
  735.             }
    # z) c% a% e6 O- X$ N
  736.           } while(iEOF!=EOF);
    9 T# ~2 @2 f: Y5 y9 e8 c  c
  737.           fclose(fp);
    3 P  F9 {! H5 h% y9 c
  738.           unlink(".\\DownLoad\\readme.txt");$ ]! v7 ]2 ~( T
  739.           dwStartUpSteps=3;2 o0 K! h5 X( j7 M& f
  740.         }
    1 `( @# X, ]( p) X  ~
  741.       }  f/ c9 w8 s+ G
  742.       break;
    % f8 _. S% u3 p+ j2 m! N
  743.     case 3:
    4 v. d1 s2 }; Z& _9 ~3 H- F+ S# O2 {
  744.       if(!Dn.Connected())5 d- F3 `( ~$ a5 E/ q+ B
  745.       {
    ( x# p4 m7 T. V, o7 ]
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    2 O9 L( E6 d' ~' a. R% g
  747.         dwTotalFiles=1;
    : j5 s9 n' V7 X2 M
  748.         dwDownLoaded=0;& A0 g" n7 _3 n  n8 h3 [
  749.         bSilentStep=TRUE;
    / q7 e- ?" S. o5 }
  750.         bCompressed=FALSE;
    + e8 q5 A" |( N+ d: l- \$ v7 Q
  751.         strExtLocal.Empty();4 B) o: P6 Q3 b. ]: j
  752.         strFullName="checkversion.txt";3 p# M! _" [8 m& B
  753.         dwProgramState=AP_CONNECT;+ G  i; D7 `* j8 C; h$ B
  754.       }
    7 d5 O. q8 @# Q7 _! L
  755.       dwStartUpSteps=4;6 ^, X3 o3 j5 N$ U
  756.       break;
    & e" }0 x0 p: |' J
  757.     case 4:
    % S: x( _$ W2 `% n5 V- g  L1 W
  758.       {
    8 Z: I5 {1 Q3 {! O( Q9 L
  759.         FILE *fp;' M+ d. l* C3 w1 Q/ T
  760.         char szString1[128];
    ! z% Y5 L  y) h! }
  761.         char szString2[128];
    9 y  ^% |7 F- m& l
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");1 K+ ]" u. z) q" h7 h8 S4 A
  763.         if(fp)
    # M2 u8 [! ^$ Z5 }& e+ |* y+ Q
  764.         {
    ( U# i% k- D# B- D8 e( w
  765.           fscanf(fp,"%s",szString1);
    0 J3 Y! |  v+ f' _$ x
  766.           fclose(fp);
    ! o' ?$ E4 s) c( M# x
  767.           fCheckVersion=atof(szString1);
    " D  R) H! [" R  m) x
  768.           fp=fopen(".\\checkversion.dat","r");
    5 k% m/ J% G1 c
  769.           if(fp)0 I/ k1 d- v: H7 F# n
  770.           {
    & \- @3 `" z% @. }( a8 E
  771.             fscanf(fp,"%s",szString2);+ L* ~8 T' y, K. d% H
  772.             fclose(fp);3 n0 C+ c6 q! U6 d( Y4 D9 \8 o
  773.             if(atof(szString1)!=atof(szString2))
    , K% K$ D6 n5 Y$ f
  774.             {' x8 r+ K3 E5 K, M1 n
  775.               if(!Dn.Connected())- O1 z/ n- n2 Z& v6 e7 W; I
  776.               {8 Z; ^* r% E4 F8 M3 m8 o, ^1 M) c
  777.                 bFirstUpdate=TRUE;
    3 H% j/ d8 z8 Q+ K
  778.                 dwTotalFiles=1;5 @4 @' N+ J, w
  779.                 dwDownLoaded=0;
    * B: [# }" Q  d
  780.                 bSilentStep=FALSE;
    0 l# D& C/ b  A1 L- E9 i
  781.                 bCompressed=TRUE;" o  B% E6 T3 c: ]
  782.                 strExtLocal=".\\DownLoad\";
    6 t% I, a, e# F
  783.                 strFullName="update.txt";
    7 o3 z5 Y  K/ ~, ^
  784.                 dwProgramState=AP_CONNECT;+ g' W$ M4 ~. ?" e0 [9 \) J' b
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 f( y+ x* r6 d& l" Q3 f
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 Q0 u/ g$ N8 Q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- b. H7 ]8 ?. O, V3 C5 m

  788. * p0 @0 V8 ^! {; w7 \2 O
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / s2 `( S% ]$ Q, F
  790.                 unlink(".\\DownLoad\\checkversion.txt");% x) L0 a0 V0 z7 I8 h8 V5 w# S! f
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)4 {, x1 }6 E+ W
  792.                 {: D; g6 e% v* ^& b
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ; h3 t$ |$ I0 w$ O
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");( M" R; a' S  S
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
      _# m' O8 [* x. a4 I0 ?. ^
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 g$ _& C) q4 p6 K! C: {- D
  797. 9 f- z5 x# w& A
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - J) |, z5 v" r/ j) g3 c) C; k
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' m7 W9 a! K3 u. W# v
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");# S$ H, v* c0 `* _6 _5 z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; X3 c3 i9 \) I) G5 \9 D
  802.                 }
      y4 T% Z# X; L1 G1 Q9 e
  803.                 dwStartUpSteps=5;
    : }3 d8 `/ T9 p
  804.               }+ u* `  y( X# e  M! V
  805.             }
    4 O4 R- [. C  q
  806.             else
    & @$ U7 J- a7 e# M& s+ u" H( p$ S
  807.             {! F) C" ~- a) {
  808.               unlink(".\\DownLoad\\checkversion.txt");
    , P: r1 G+ _5 k, [. I* \
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : l) q! I, [- p. s+ l
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + k- S" \* b9 E  S- V2 r2 W
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");9 \  z. O( L, U

  812. - h2 y* z7 ?1 k& v/ M% a
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # n" l- b" K, K, Q/ B( p7 N$ j, y" H
  814.               dwStartUpSteps=99;
    ' P* z/ h2 w8 Q) ~+ R6 i
  815.               bFinishUpdated=TRUE;
    7 M" ^7 u0 l4 H
  816.               bCanUpdate=TRUE;
    ( b- n, B0 n0 L! Y# p& [2 g
  817.             }2 f7 Q! l7 }+ h7 B
  818.           }
    * `, S4 X- q- T
  819.           else
    2 b! G; Z5 n2 u+ Y7 u! f; k7 O$ A
  820.           {
    3 \3 [8 M# L# N/ A* P
  821.             if(!Dn.Connected())9 w. O: {( x! V& q5 \) ^
  822.             {9 y" p0 k  B$ I
  823.               bFirstUpdate=TRUE;
      L: W0 J% N2 [. O( C) T+ k
  824.               dwTotalFiles=1;' K5 F6 Y$ c, S: b
  825.               dwDownLoaded=0;- L+ D$ [3 k0 v; c  F+ t% k8 ^
  826.               bSilentStep=FALSE;
    0 T0 \) [" I) P6 u" A3 b
  827.               bCompressed=TRUE;3 k4 r1 t" N/ r
  828.               strExtLocal=".\\DownLoad\";
    ) R/ a6 v+ J9 N6 i  e  O
  829.               strFullName="update.txt";
    4 q& D! U; V) ?5 w( d" w! j
  830.               dwProgramState=AP_CONNECT;
    ) P8 _- C! R6 s% a4 i
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  T! j" J" l0 n4 E# H, c( u4 Z0 o( J
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( P6 k" G3 g# d! k5 a2 e2 a
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 i! j+ b. ?  s  J, B( B, i$ I
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! U2 Y; s, }0 \% w3 D
  835.               unlink(".\\DownLoad\\checkversion.txt");! e; O& D0 Y) z5 k
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ! D$ L9 Z, o' N
  837.               {
    4 h  B1 o+ _9 A  G
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    4 p! `4 U# y$ K3 ~8 x) ^+ l- a
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");* x2 S0 o9 q3 ~9 O. X- Q6 C
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");; g% ^3 d# B: u$ Z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - q3 r- |: b4 K# n3 u5 S/ P  L
  842.                 ' @% `$ a4 P. t% U3 S1 E
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");) D* K1 \  n+ p# y+ |9 X! ]
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    " ~; A$ Q* o  o
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");9 K( ^$ Q3 d/ t# m9 l% F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 v& e3 }$ O+ V' P
  847.               }
    ' f) z; O6 J/ {" Q8 k( J
  848.               dwStartUpSteps=5;% S, a, p2 ^3 C5 h2 D* a
  849.             }
    / Q7 b) c5 n$ V' v; i$ }
  850.           }% x$ z- `% N8 X. z, \
  851.         }7 h: L! y* f# Z3 {! `# x
  852.         else( a' X, ?/ I5 g8 Y  O" Z6 G
  853.         {4 h# u3 |( x5 a# B; ^: ^2 b% _* L
  854.           dwStartUpSteps=3;
    $ Y8 D# ?7 c3 e! j" |: i  h
  855.         }! p# Z" Z4 ]7 j" T5 _
  856.       }) S! i/ K. u5 f& a
  857.       break;5 f: x1 F* Q0 U
  858.     case 5:; R/ H) _2 b8 ~3 B6 B  ]9 a: W; o% U2 K
  859.       {+ q) I" T! e4 U9 s$ M& p  C
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)' f1 V* D8 ~9 @8 S
  861.         {
    0 W0 n1 f# ~4 ?7 L" L3 l) G. |
  862.           int opt_overwrite=1;
    4 `" D+ m( N5 t' n! S
  863.           int opt_do_extract_withoutpath=0;
    ! g" g& a. F1 d2 ~# ^6 q
  864.           unzFile uf=NULL;; g9 d) Z  o0 o! J% a
  865. 9 n  s# Z: o- C5 p
  866.           uf=unzOpen("Wsa.zip");# B/ R. a' j( X  r3 s. ~- d- R( ?6 c
  867.           if(uf)) }- [2 i6 f; E) p# A: @" ^
  868.           {* ]% m( E$ S4 @. f2 c
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);' k2 d; w3 p9 b. v' U$ p
  870.             unzClose(uf);
    + F3 `* n- f: @2 C* f7 B
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");. p+ T# ]+ L' k7 z" B6 F5 z! H
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    7 f6 ]. K$ I) R
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    4 R: g& g" Z  V+ @' q2 o/ K
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* d3 u7 E3 {7 r/ [+ g: c
  875.           }
    8 \2 A; T4 r- e% S6 V
  876.           DeleteFile("Wsa.zip" );
      z- F3 ]  O6 ~
  877.         }# L1 Z( ~! d4 N  @. m& e3 |
  878. 2 ]! n5 @9 w$ r; g7 y$ Y
  879.         if(CheckLocalVersion())
    ) v* f3 ~  n! m6 b" Q) ^6 I
  880.         {
    . H( i0 I  F9 b
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");$ L8 b$ N5 Y: y# D
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    3 N  n  V; r7 @- C  m8 w0 r1 P
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");& v/ ]; T0 k" ~9 e' X
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , w9 e2 o8 |9 c" _  R7 _4 f
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ( w* j" `; I+ A! \  a
  886.           dwStartUpSteps=99;
    % z" J8 {: k3 B/ _: M5 Q
  887.         }0 [1 b- O  v% ?3 O
  888.         else
    5 _# [, e) C6 y$ X; `4 O* k
  889.         {
    * ^  Q) j# s! p
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");/ Z' }3 z# b4 x* z1 {5 ]0 f
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - I+ ~* E, z/ t
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    / g5 u1 a9 _% V) M% Z

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

, O. m4 @, R, T$ w* z) ?, g$ a
! ?. Q. ~: }* e, L; r7 g1 |

評分

參與人數 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-3-21 20:55

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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