找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
$ S- G( c& ^' c2 w8 f8 s$ q8 \
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ! S8 C- V* u4 [, C, g7 }
  2. //
    3 U# d$ Q8 K, U1 ^1 o

  3.   Y* C4 A6 E, I6 U8 O  G- L
  4. #include "stdafx.h"" ?- w/ H& J% A) Y$ x7 V! @
  5. 4 p7 Z; n* ?8 O" p! [% w9 Z% r
  6. //#define UNICODE
    ! m- t1 v5 L! r! g0 s* Q
  7. //#include <gdiplus.h>8 ^* X) I: G/ M
  8. //using namespace Gdiplus;0 n, l- U  P* d4 B: r. j5 `% Q
  9. 4 _/ B/ F3 v1 |. c  U) N
  10. #include "RevApp.h"
    $ \6 F- @" `! q
  11. #include "RevAppDlg.h"
    % C3 n4 r# i8 J+ Z/ i% t
  12.   H8 ~# ^! @( A! E" a3 h! O* a
  13. #pragma warning(disable:4786)
      ], H9 e# q! C$ j$ e7 }
  14. #include <map>
    " m& Y4 ?0 H3 y: C' M+ a
  15. #include <list>
    2 k2 Y! K' ~7 N# p
  16. #include <direct.h>
    9 t! i5 a5 C: a
  17. * \7 v: E4 i6 S: p' l
  18. #ifdef _DEBUG& P8 S4 a7 v$ H
  19. #define new DEBUG_NEW( V  v$ X4 T; x( Q2 n
  20. #undef THIS_FILE" @$ i1 k: H* c; h  |6 G
  21. static char THIS_FILE[] = __FILE__;" e3 w  c: h5 X
  22. #endif& u% f! R7 m* a; Y. i9 ~/ D. y  g
  23. #include "SkinResDef.h"
    ) k; [& }9 N0 D8 a# S( b
  24. #include "ChangeBG.h"
    % N/ V. K4 `7 P0 Q" p
  25. #include "AFXINET.H"
    8 r" d1 M  ?  X, \7 Z
  26. 7 f& h: N; c, R' E
  27. #define TRADITIONAL_CHINESE 02 H8 z, Z/ T& @( T0 K$ c
  28. #define SIMPLIFY_CHINESE 1/ B$ h# u- j# j  [$ S% v: W* }' ?* e
  29. #define ENGLISH 2! ?* @6 M1 v3 L$ `0 [  m
  30. int m_iLanguage = ENGLISH;
    & Q1 l7 o. U  e! _4 B% R' K. O% M, k# o% C3 Y
  31. /////////////////////////////////////////////////////////////////////////////
    9 V) f7 z3 h1 k- e% l
  32. // CRevAppApp+ d; @9 O- [! h, i7 M0 \

  33. . t6 ^2 P5 F, _/ r
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)# H7 d9 A4 K* ~. z! z
  35.         //{{AFX_MSG_MAP(CRevAppApp)* i+ w* X5 [: S2 {( o; F% z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    $ ?* f5 M- m- y  J5 Q4 E' W5 l
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    1 q; N: ]% D+ \; k4 l& c
  38.         //}}AFX_MSG
    + m: ~7 U; o( ]1 M& N3 d
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp), h3 r9 L& d6 X( H$ V9 W+ o
  40. END_MESSAGE_MAP()# d. b2 {: W/ o8 D& n
  41. 4 L+ S6 F" P2 m0 F
  42. /////////////////////////////////////////////////////////////////////////////4 _, `  H4 G$ a* J2 Z" ^6 d; H
  43. // CRevAppApp construction5 h) K1 p2 a# ~% K+ U, N; P5 Y. _
  44. # _/ n' _+ I; _# H7 r
  45. CRevAppApp::CRevAppApp()
    1 t4 S  {8 r! E4 E8 `( p- |
  46. {% W( j7 J9 B7 T' m- p9 U: T
  47.         // TODO: add construction code here,
    : _! r9 w1 E0 h$ H; S
  48.         // Place all significant initialization in InitInstance
    " g3 D) ^- J" l0 R* F/ o
  49.   bDisplayIsBig5=FALSE;
    * r( t" D4 n0 w* S2 @5 u
  50.   bRestartUpdater=FALSE;0 Q/ \! j1 a9 U" y% H; V
  51.   bFinishUpdated=FALSE;- c, }, a0 p0 \) |
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ' t6 z3 I6 w( l  t, n- c& C5 K
  53.   InitChangeDataBig52GBKS();+ ^  j. C: R1 A# L2 \$ b
  54.   InitChangeDataGBKS2Big5();
    - w; C3 }+ S% p. W
  55.         //
    # Z4 q" D1 ~* a" Z+ |
  56.         bClickRunExe = FALSE;
    ! p8 Q5 U. l! U( [
  57.         //& x" x% |0 Q  J( F% m7 M+ G. g
  58. }/ N* n, J# `- N& I
  59. 7 a* Y! c! l. `: Z) G' ^" ]# E
  60. CRevAppApp::~CRevAppApp()# i$ j) G8 n5 s4 h+ c9 x
  61. {
    6 P# W& [5 L0 C; P6 l
  62.         // TODO: add construction code here,
    4 k& V6 c' w0 E9 W5 C
  63.         // Place all significant initialization in InitInstance
    3 l% W# o7 c+ q- r
  64.   EndChangeData();' c0 B; k# t, _, q- n) T
  65. }) S# i- X: H6 W  Y- n, ^3 X
  66. . M# T+ A* h8 R8 p" n9 C
  67. /////////////////////////////////////////////////////////////////////////////. \, W/ G' t$ W- u$ @
  68. // The one and only CRevAppApp object
    - K  S4 z* ?- F9 d

  69. - `9 w$ U! w$ `. _. ]# o  @' P3 I0 }
  70. CRevAppApp theApp;, M4 I! V+ ]+ M  r
  71. 9 b/ h  N- \4 ~2 g3 `( g2 C
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)$ S8 T% k) b/ j5 y/ l: r( F8 z3 I8 ~1 Z
  73. {
    / E4 D  N, g$ i0 D# d5 h
  74.   int iEOF=0;: A+ Y0 X7 x+ F/ ^9 v; t
  75.   char szTempName[MAX_PATH];. j. M/ Y" q9 A3 ]! @
  76.   *szFileName=0;
    3 Q% O# g4 L+ I( k8 c6 M: N8 v
  77.   iEOF=fscanf(fp,"%s",szTempName);' O7 T3 G$ u* p, S% n
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    2 V6 ]8 f" _2 {, t4 d" ?
  79.   {2 K0 [2 E4 G7 p2 k, G. d
  80.     strcpy(szFileName,&szTempName[1]);
    . Z6 q! W( b! t% ?  ]5 F0 n
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    8 U1 e# v) a" E1 i
  82.     {2 H1 j5 t! g+ \5 w
  83.       iEOF=fscanf(fp,"%s",szTempName);$ Z% W/ X) @# r$ ~# i
  84.       strcat(szFileName," ");1 ]7 i/ e/ W7 U: t) n
  85.       strcat(szFileName,szTempName);
    " F4 i! e3 ?, f0 z6 O0 Y# a
  86.     }
    ; v3 s3 T" a5 D  t4 x8 r8 M3 Q1 _
  87.     if(strlen(szFileName)>=1)
    9 Q$ G9 E* n' i, B
  88.     {1 C8 m5 N3 e8 p4 W, z
  89.       szFileName[strlen(szFileName)-1]=0;
    ' A$ k7 ~; o7 B5 g
  90.     }
    . T1 R9 x3 Z4 ^; E4 V2 B
  91.   }
    0 l$ D. P6 W2 C1 b8 Z* F
  92.   return szFileName;6 C  m$ z; j8 W4 l
  93. }6 n1 T1 o+ I2 {4 M; ~! L

  94. + o: G( m' `  w: z6 T( t: e
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile): ?  K7 T6 M$ b* r% m. m" T1 s
  96. {
    % \6 Z: o# g; i1 s0 b
  97.   FILE *fp;
    : n$ T* @5 n) X$ J5 c* h
  98.   char *key=NULL;
    ( N8 D% {# H7 ]$ F
  99.   char version[MAX_PATH];( \& n% F/ s! E, y
  100.   LPUPDATEFILE file,olds;! N; V" U, R7 U3 f& x1 T" x
  101.   std::map<CString,LPUPDATEFILE>::iterator p;* r4 d: s9 ^' g) U( N
  102. - T# R4 u  v% o3 ?3 Y" u0 |
  103.   UpdateList.clear();! Z' G/ A9 J9 i8 ^/ s/ r0 ^, V! V) r
  104.   UpdateFile.clear();
    ) }" h& Z, K" U+ q
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; m7 p5 O# X% @1 B6 r
  106.   if(!(fp=fopen(filename,"r"))) return false;9 o" U+ L# R! Q
  107.   fscanf(fp,"%s",version);, q3 a4 D% f% O# v) w
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }, i% T  h" ~7 L; t/ Z( r
  109.   while(fscanf(fp,"%s",version)!=EOF)7 x+ y, Q- c4 e, L& I* P& ^' o0 S4 F
  110.   {
    + Y2 J; u, Y, j2 e  s* _: p: s: I
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# J& E$ J5 A  H- a
  112.     fscanf(fp,"%s",file->path);0 F0 v) \7 a2 a, Q
  113.     ReadFileNames(fp,file->file);2 z; Q1 n6 K& D  k
  114.     strcpy(file->full,".");, C0 f: ~# J" T: P' r* p
  115.     strcat(file->full,file->path);
    1 \( Z' J8 h9 V" n6 r3 u& Q6 R, u8 x
  116.     strcat(file->full,file->file);! A' b$ {+ K- `5 v
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ( D6 }/ i/ T+ k$ J8 B9 t3 J
  118.     {% q, j, ]' d$ c- i( e
  119.       file->vers=(float)atof(version);* h; [% W! d* \5 s
  120.       UpdateList.push_back(file->full);
    ; |7 R& u8 x: P6 t9 b$ y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    . m5 m/ D* b& T! R' u( {6 J" y' v
  122.     }1 P4 F. K) i" D, u; Y
  123.     else7 @5 _0 _* \: E) R
  124.     {- a8 P5 ?' |$ s* E9 I  F/ q
  125.       olds=(*p).second;: U# r+ Z8 ~" ]% [
  126.       if(olds->vers<(float)atof(version))
    6 _3 A0 Y2 s" e. V6 H6 L* z
  127.       {. J  J7 U5 ~) s9 g; S
  128.         olds->vers=(float)atof(version);
    + I( g, i2 _9 k! R1 X' \' r; S  A
  129.       }
    / B3 C' r2 q# V7 J- C
  130.       free(file);1 l0 Q8 r$ K* `) V4 h
  131.     }7 D) u- E1 s! S& c. S
  132.   }: Q+ S" X1 C2 w$ f3 p1 x6 y, D
  133.   fclose(fp);
    * s* E/ u! w1 H4 P' Z' A
  134.   return true;
    8 j% i  I( Z* f- `
  135. }
    + z! `, |, [% h, C, y8 t4 O

  136. * @- i0 X9 c' x7 R$ O0 w
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ' D1 w* S9 H, r& F5 Q. R
  138. {
    " g( m! _, n: p' @1 A
  139.   TCHAR  szFull[MAX_PATH];6 f0 i- v5 I9 z- \$ T+ C* U. J. Z
  140.   TCHAR *token,*inter;, g, }+ R# G9 \9 }0 c+ w+ U
  141.   *szPath=0;
    / B- Q7 W4 l; H: D: T8 W9 }
  142.   strcpy(szFull,szFullPath);) x) h4 K4 \; S9 B2 Z( ~, Y- S2 R2 \4 k5 q
  143.   token=strtok(szFull,"\\/");
    2 ]" g! u: b, |( z& @& k$ c
  144.   inter=token;5 u1 g0 p6 ^  h. r! C; T
  145.   while(token=strtok(NULL,"\\/"))1 |& ?7 N- f6 \! X
  146.   {
    ) a8 a# d) N6 H9 O8 y5 i
  147.     strcat(szPath,inter);
      r/ J4 ]  H9 j" C
  148.     strcat(szPath,"\");! @( O3 p9 X0 G+ v, f) a& i0 `
  149.     inter=token;5 X" n* \& f9 W
  150.   }; l# ]4 N  V9 N# a( c
  151.   return strlen(szPath);
    $ N* o0 D2 d0 _* f  T
  152. }# j( z! A9 N" J

  153. / L0 n1 W" G  U5 Z4 h
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    8 U1 G$ x) y: s" H5 ?
  155. {
    9 v7 g2 K/ W3 Z6 H9 a
  156.   DWORD attrib=GetFileAttributes(Target);
    ( I: y1 {( w" g
  157.   if(attrib!=-1)
    5 f  v4 b9 q; m& G1 B
  158.   {- r! l; l. k: E& D; i* F
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    5 ]. t" {: t3 V( S+ G
  160.     {
    2 D- n2 O' k" V' A) E' |  }
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);6 O5 r: @, h! M5 m% i) k6 s
  162.       SetFileAttributes(Target,attrib);
    $ j6 _! a  e! x) ]) b3 O
  163.     }* F6 P9 z/ D" ^( y! m2 {
  164.   }
    2 s% A5 z0 z6 e3 _, _
  165.   CopyFile(Source,Target,Erase);' I' t+ U2 A; E) p' ^/ L% Z2 Z8 F
  166. }
    5 O: w) U* G% y7 e
  167. ; F6 n6 v5 M& }0 F; O" a. Q+ n. Z
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)- l+ K% l" d7 B( \
  169. {9 V( o- D% O5 Q- F+ _
  170.      FILE *fp;
    & A7 R1 z  Q8 I( p8 U7 }
  171.      char  szBuffer[8192];
    & F% [% k# b/ f! y$ k; o3 J
  172.   va_list  argptr;
    2 X- j* i; |6 D# @0 L( E
  173.   `+ |; ?5 h% e* |' ?  }
  174.         va_start(argptr,message);
    8 N7 K1 K( A. v2 j# ~6 m
  175.         vsprintf(szBuffer,message,argptr);! S" _) I8 B+ {3 C2 H2 |
  176.         va_end(argptr);4 C2 i1 F2 Q. M! J& Z# h
  177.   fp=fopen(FileName,"a");
    8 n6 V& B9 R( L5 ]0 \. J/ G
  178.   if(fp)+ s6 R* V' {2 D- v6 M. H
  179.   {
    3 o% k' z# L& W% C4 v7 [
  180.     fprintf(fp,szBuffer);- D! e' R! Z5 m7 r. [" s- b
  181.     fclose(fp);
    / M+ b: d$ N+ r: v% T1 x* Q) k
  182.           _flushall();+ s7 A% V& f0 ^' s" u% {4 C
  183.   }
    ' s0 b, s5 J8 \# j. }5 ]4 v
  184. }6 Y' e+ j+ H; V2 p% m

  185.   Y* O) g0 Z5 z; U* O- C
  186. BOOL CRevAppApp::Fclearf(char *FileName)0 e3 p* Z% p/ T
  187. {
      p. q3 Y9 X5 H) A8 \, A! g2 L
  188.      FILE *fp;
    : ^2 R+ B/ p- A4 @# z
  189.     DWORD  attrib;
    . ]: u7 _& G& b% b3 m
  190.   attrib=GetFileAttributes(FileName);
      `) ~5 A# G/ \- n$ u& K# D& _- [) K( Z: A
  191.   if(attrib!=-1)2 e3 Q$ E. q+ a  s& w) U
  192.   {# m( S: _, W! s; ], Z: ]- d. m
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);. q) v' \$ Y. g+ L" u+ P
  194.     if(!SetFileAttributes(FileName,attrib))  Y, U0 L# u; u" W6 }; J% h  N6 U
  195.     {' y2 k& D" d) O6 H
  196.       return FALSE;6 f2 ?5 `  L$ \4 m( N: n' e
  197.     }' S  _0 b$ w" e+ u
  198.   }0 `5 W- O% M$ ?; [3 D- k
  199.   fp=fopen(FileName,"wb");
    0 K+ m" b( V/ u  K0 W3 c
  200.   if(fp)
    : D, `" m3 I4 Z: h
  201.   {0 t0 q& O1 z5 ~6 x3 q# u9 E2 ]
  202.     fclose(fp);
    2 _! b9 F9 g( f- R$ `9 z, s* s
  203.   }
    * H& U# x8 z8 {& V9 Z  e; Z
  204.   return TRUE;
    1 Q5 E. M- W. u; k2 Z# u5 |
  205. }- d$ K2 n3 ?: G$ A2 |4 D

  206. * {/ l- L; `+ F
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + K: p( g' v) v2 K
  208. {" ?  Y8 b) E9 x5 h  t# Q
  209.   char filename[MAX_PATH];2 ~2 s6 `  |0 w2 k7 K) i' n
  210.   LPUPDATEFILE file,olds;
    ! ~2 X! X. R1 x! V1 r" H
  211.   std::map<int,CString>::iterator i;
    + i5 I$ V* \0 `4 X6 Q. h# i
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 u; L, e6 U% D% ]4 z
  213.   std::list<CString>::iterator l;
    3 o$ I% q$ S5 l

  214. ! A5 t+ G  Q, Q5 r  }& w1 T
  215.   if(bFirstUpdate)
    ! R+ }2 g1 s# B; U% T# U/ N
  216.   {1 D. T# I! q, c, _
  217.     dwCurrFile=0;9 j9 W% q$ ?/ p9 o
  218.     bFirstUpdate=FALSE;1 A% X0 T: F% z& g* `* B& _2 F8 p9 F1 }* P
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) {2 Z% E' Y5 G+ M* ]
  220.     {, t; [8 K5 z  q. I/ {
  221.       dwTotalFiles=UpdateLocal.size();: x9 c0 p; \  o7 M2 H
  222.       dwDownLoaded=0;% J; T; u6 x# [# X. L0 z0 O! \4 E
  223.       bSilentStep=FALSE;5 a# L# I8 }2 |
  224.       bCompressed=TRUE;3 F7 J9 u, x$ }' ^( b1 q
  225.       strExtLocal.Empty();" R7 Z% \+ F, x
  226.       strFullName=(*i).second;
    # R$ d" v  S6 A8 Y/ l7 C! E, G
  227.       dwProgramState=AP_CONNECT;9 ^, j8 w+ j% x) G$ E: K. x( a
  228.       return TRUE;
    ' F+ Y9 n$ Y9 d- k. p2 \+ }
  229.     }2 Z$ i9 \8 W  K% E( |: {
  230.   }% l) C! K- r% U2 l
  231.   else if(bRestartUpdater==FALSE)
    . T; _# L: U+ H5 ~, f
  232.   {
    0 d, C3 N& T( ]; S! S5 ]6 L8 @
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ) i/ R, }9 T( ~
  234.     {
    : s' i, F* ~; e- R
  235.       file=(*p).second;
    % q+ g$ k8 S0 B) g9 i2 [
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())1 t: y3 H; a% l- P. M1 b' K. o
  237.       {2 q1 F! f; X# M: n
  238.         olds=(*p).second;
    : m4 x( W) |' L: \. w+ t% Q
  239.         olds->vers=file->vers;2 n* }  ^$ G) J( R
  240.       }2 F  a) A; c# r0 Z" n1 ]4 J
  241.       else4 G# m5 N$ A  y
  242.       {
    % S4 H0 K  z2 T
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 N8 ?$ @6 E" n/ [3 F
  244.         memcpy(olds,file,sizeof(UPDATEFILE));' w: k6 [' P  x8 ?. |
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    6 e/ G! ^8 T  f( V
  246.       }) ~8 m6 l2 v3 u
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");! v: H) S5 H% {- L' d
  248.       sprintf(filename,"(%s)",file->file);+ b5 e$ f) ~2 E8 G* g
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : G9 i. w  |. D" N7 W
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    2 e& t9 [( S& H
  251.     }  c# F" L) _4 u; s' x# m6 |3 ^
  252.     dwCurrFile++;7 f- w9 [. s7 o$ w2 [
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 L2 T8 ~+ r  w' G
  254.     {
    ! `' f  o' j) D" t! `0 {( V$ a6 `
  255.       bSilentStep=FALSE;
      z" k  D2 h" H! b% H
  256.       bCompressed=TRUE;4 Q/ w% e% Z$ b5 L' q
  257.       strExtLocal.Empty();1 T. i9 J% H/ k" _
  258.       strFullName=(*i).second;( J% l& f0 w& a5 b  A
  259.       dwProgramState=AP_CONNECT;
    , H+ O1 o( }. ?' l
  260.       return TRUE;
    $ e/ W0 {* ^' [/ [
  261.     }
    ; n! g8 k; w8 g- N7 \
  262.     if(!bRestartUpdater)+ D0 q) f. c7 J/ A
  263.     {
    2 Y$ x9 P3 N3 h: {. d) F: f; e
  264.       int iCurrSize,iFileSize;
    7 ]+ H6 B5 H( M* }- U9 G
  265.       iCurrSize=0;0 E; n5 l7 X" Z1 G. p# R3 ~) P
  266.       iFileSize=UpdateList2.size();
    1 y2 w2 [% C: I- M
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    7 }" d* j: G3 S2 ^3 j
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");5 O8 w6 _6 o: U% Y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    * ^: O" k! k- n& ]& ^# a- C) h( @
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ P/ k; f8 r: i' o* i
  271.       Fclearf(".\\update.dat");" Q- \$ _! Z9 C0 M; v  X
  272.       Fprintf(".\\update.dat","Bloodyf\n");" f) N( H, x) F$ A4 A
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
      p! C0 f, l& A  _8 q2 {* j0 Q" E
  274.       {
    8 q: K2 @. l# r
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())- E- N3 \- _/ Y, v
  276.         {% l# A0 x) y8 z" g& |
  277.           file=(*p).second;
    / a' D5 j$ e# w, \7 {3 T) `
  278.           sprintf(filename,"(%s)",file->file);# O: w( y9 n. |
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% q8 l+ H; `- r) c/ x( Y
  280.           iCurrSize++;
    9 `" D! C" q# A3 k7 F) F
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    $ k6 c# O9 e2 y8 ?/ P
  282.         }
    2 E# p/ T: ?' X- [1 u/ V8 Q" o( V8 k
  283.       }1 V9 V' p4 P8 Y& s5 `9 j8 I
  284.       unlink(".\\update.txt");( z7 x" E+ v1 l1 h: }
  285.       unlink(".\\update.tmp");
    / l( T/ s: c. B: g# [# ]
  286.       Fclearf(".\\checkversion.dat");5 B( Y) @/ g+ t8 O
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ' V) |) q, z3 b3 ?0 w4 k
  288.       if(UpdateLocal.size())
    0 \; b+ l8 M' l
  289.       {" e1 G' o4 f; w; @9 p
  290.         UpdateLocal.clear();3 O% h% d8 W# s' }
  291.       }
    9 F2 [. l  g3 }/ y; {
  292.       if(UpdateFile3.size())
      O, M1 v! Z& t1 d
  293.       {
    9 K/ @* K) s' {7 ~& b
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 V: F6 }0 V$ S. h6 `/ M
  295.         {5 `5 T" V  c5 i( D) l
  296.           file=(*p).second;/ l, _* }8 }" M1 H1 s# z
  297.           free(file);
      x+ ]0 P+ ^6 e  \# w
  298.         }
    5 k: v, w' e' x
  299.         UpdateFile3.clear();
    3 D7 M3 ]9 J2 L
  300.         UpdateList3.clear();
    " ]" v1 q. `$ s3 \' U2 I% ]9 S
  301.       }
    3 C& }. G7 I; X$ e% h- a
  302.       if(UpdateFile2.size())
    9 ^: y6 b8 \8 `4 |( z
  303.       {
    0 r& w) @- l. L: W  b- V
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  H0 q6 J; N# K* m, P9 _) F8 Q
  305.         {; q. B3 V4 Y- H$ m( [( i
  306.           file=(*p).second;
    . I+ I' f) [1 `9 ?# p
  307.           free(file);
    $ L- @; b5 a) f+ q+ e- V% d
  308.         }
    ! _, ?6 A. {% C$ m5 O1 F
  309.         UpdateFile2.clear();
    + u% ]' q3 |' n: |9 U: c, n
  310.         UpdateList2.clear();* e' z  `# v: {$ N' }' S& o
  311.       }
    , a0 q: K/ R  Z  e! t' T: ~7 }+ K
  312.       if(UpdateFile1.size())9 f* B" P3 U' J& `. i' x$ X
  313.       {! P5 }4 F7 R' _! N
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 m# E8 Y" @# `/ ~
  315.         {
      f+ c8 N' T7 x" s' z- Y
  316.           file=(*p).second;7 E! B- y5 w" ]( n0 A
  317.           free(file);8 A: d* E( b! E8 ?& z7 n
  318.         }. G# z4 n6 K- z* M
  319.         UpdateFile1.clear();% x( X1 F3 D  u4 Q/ W- T0 {7 m$ _
  320.         UpdateList1.clear();
      ?% ]6 }% M+ d) T2 z7 O2 V! i
  321.       }
    4 S1 V" N0 ~' s& {* m
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' k7 `% l6 P1 Z# T# D
  323.     }
    % `4 L) h$ t" A1 b' b
  324.   }1 \8 T+ u, \+ c: ?
  325.   return FALSE;
    1 o- V' S/ `( p- ~6 Z2 @2 M
  326. }- D6 b- {$ i& M" M; i7 t

  327. # w; |5 a3 S& B% W6 {3 |
  328. void CRevAppApp::ClearAll(void)
    ' q+ K, }8 G/ ^3 t! l+ R  w
  329. {. x1 w. @* K* J* j1 \  i9 U
  330.   LPUPDATEFILE file;' O5 V3 W7 r" H/ K' t2 ]
  331.   std::map<CString,LPUPDATEFILE>::iterator p;8 \/ L2 ]8 r) N6 m, E3 Q& o' v

  332. 9 Q8 l( [1 ?' f! J; z
  333.   if(UpdateLocal.size())5 J7 v/ U- V& u
  334.   {4 p+ I7 N( a5 Y* I% ^% v+ \: p3 Z
  335.     UpdateLocal.clear();- B  X& e9 G7 h0 h5 {( W8 ^
  336.   }" B# v" B4 w( E4 Z5 E0 b
  337.   if(UpdateFile3.size())# s  L7 p! `: F* F: L
  338.   {' h6 ]' r2 _+ m5 F: h
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 Z( t+ @2 l# u* C- t. y  D% J
  340.     {
    ; d5 h1 v9 ]# F/ `) }6 R8 y, @$ z1 ]
  341.       file=(*p).second;+ n2 S4 N% D: e
  342.       free(file);+ j8 ]+ d6 I1 @
  343.     }* ]2 L& `( R; x% c' f; j
  344.     UpdateFile3.clear();
    8 C2 _, ~) d$ G4 ~
  345.     UpdateList3.clear();
      S9 C9 D" [7 t+ X7 W! |
  346.   }
    1 _% ~- Y. Q) S+ V
  347.   if(UpdateFile2.size())
    8 E! w* O% c- |  F' A) a
  348.   {
    1 }. Q& D6 R. G5 a7 f
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# E2 q1 j. I5 V! i: g
  350.     {2 p/ O  A% i" @) @% q) r* I* E( [
  351.       file=(*p).second;0 G% c( I( o3 _% ^7 H/ E: V
  352.       free(file);8 u! ]9 q" l2 I" u
  353.     }. s% p3 K' S0 {/ `
  354.     UpdateFile2.clear();
    1 [! C6 |  W3 R9 F$ y
  355.     UpdateList2.clear();
    : B" v! z( ~! h3 l' h
  356.   }8 W" R- U2 V$ K, Y5 Q( v
  357.   if(UpdateFile1.size())
    ) K: t. U! m: Q: I
  358.   {3 K( q" C3 e: E8 l* B* p% b: C
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)8 B, x7 {- U( h
  360.     {0 D1 }' @4 c2 P& U+ F; r* `
  361.       file=(*p).second;
    + K0 ?. f, S, \
  362.       free(file);$ b$ `' [0 l3 G# s
  363.     }1 L2 ]* O& N9 I; t
  364.     UpdateFile1.clear();
    & Q+ e$ A* N6 g! l: p! k6 S' }
  365.     UpdateList1.clear();
    ; c  ?6 Y& [3 i* H+ Q, E4 _# {
  366.   }$ Q+ s. F( U/ W  ]  {. W% @0 O+ O
  367. }  * i- x+ e8 i% g
  368.   
    $ v3 f) n3 c0 V6 G6 L6 T6 r
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    0 {3 \. \3 T  B( N
  370. {; u2 e3 o+ i4 C! o1 A, v& t
  371.   int c;
    , V- Q3 L0 `0 n- J. [
  372.   LPUPDATEFILE file1,file2;) A9 m; T9 u' X2 v: l
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;0 g: y/ U. ]+ {% B/ v
  374.   std::list<CString>::iterator l;
    " h& W& u- K2 k# \+ f9 q* z
  375. * q, A# P5 b8 i" B
  376.   UpdateLocal.clear();  K9 Q* q+ A3 e/ s6 @1 F' W
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);. x, R. o6 Q8 f( D
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);' s0 U/ k/ v& Z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);9 k( ~; J# L9 M! `# j
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 q1 u2 h  B: S$ C2 U
  381.   if(UpdateFile3.size())
    ( h9 k+ b. ~3 }9 g0 T! v
  382.   {( T/ I1 d4 {& @& ?
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)( g# Y- n" V! j/ A+ c( n
  384.     {: B# T2 b6 j- t
  385.       file2=(LPUPDATEFILE)(*i).second;
    * R0 c6 Y( f3 z8 R: |
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; {$ j- n, C8 A, t9 y; ~, z
  387.       {
    9 C4 D0 c6 a$ w$ [
  388.         file1=(LPUPDATEFILE)(*p).second;
    : O! x: k; G+ I# N! T  b7 I
  389.         file1->vers=file2->vers;# D2 e/ h5 K* b/ ]5 v
  390.       }  w$ S7 d/ \; }3 |1 z6 ~
  391.       else: q% c$ K% K8 J0 a$ N* l
  392.       {
    / F$ L+ j1 ]3 {+ _0 q0 ]- Q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # E, W) f0 z+ ^! s$ }+ h. U' \! A
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    6 B. X% Y! [0 a( `6 u
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    + Y$ y5 ^. n7 Q( y0 u+ D
  396.       }
    1 y- Z  a2 F% D( H+ Q$ S% P1 o
  397.     }# a- ]3 x# B/ T
  398.   }" d. t8 b' s. l( F2 o! W3 i% l2 ]
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)8 R# X+ t5 Y3 G4 y6 G. g3 |( f
  400.   {! J9 ?  X+ H6 S7 i, {$ n# I0 q/ E
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- a# B$ K& A( V: u: H- G
  402.     {
    ! k. `4 F9 K/ {! ^2 F, I
  403.       file2=(LPUPDATEFILE)(*i).second;
    8 H' r" K. u* S+ B1 x$ k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ i5 j, Z$ u2 D6 s4 c9 a+ x( Z
  405.       {, D; R0 T; |' @/ k2 u% c
  406.         file1=(LPUPDATEFILE)(*p).second;/ v+ q  \& _! |. `# @1 n
  407.         if(file1->vers!=file2->vers)
    " r1 l& J1 F3 A& ^
  408.         {- U: U0 J1 o) o! X
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 U2 L9 r1 h% b0 @5 S
  410.           c++;
    ) {9 g/ r9 }/ H5 R' Y& |: T  w
  411.         }
    % ?5 L0 w1 n% Z2 K5 @
  412.       }
    : m# T% k1 [' b) y0 v& d/ F
  413.       else( f/ V/ F' j$ t6 T, d+ a
  414.       {
    . k, Y( _" f* ^! _
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 f! _7 B) W) |
  416.         c++;
    # q1 ^" i" m- g+ M& ^% N8 Z  Z- X
  417.       }
    ( [/ `% J3 \' L7 n9 p
  418.     }
    3 i1 J$ ^) T& j8 Q
  419.   }
    9 i2 Z5 o- H7 p( V/ W7 r2 h4 ]
  420.   unlink(".\\DownLoad\\update.txt");
    # a6 W6 i5 H) \0 D5 B- V
  421.   if(UpdateLocal.size()) return TRUE;
    ! \! T' ~% B0 @7 Q, U# V. _9 n: h
  422.   else                   return FALSE;
    : b, @, U, L( p2 x; F9 e
  423. }& r) j" q. @4 a7 ~2 Y
  424. 1 _" \2 y" n6 A  q- S
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"* B& J* P* ?9 b( a  u( G7 l
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"4 L! C) x. I- l; W2 E* i3 H- `
  427. 7 h' p1 D" y2 y3 R( f' S
  428. # }) p& |% u! W1 z) n$ d

  429. % U' l$ x" w) n! P
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)& U" ]! p; Q  C4 g. ?/ x1 D
  431. {
    ' y+ n* f" L: K1 t* ^- Y. @! @
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    7 Z* C) o+ u, [. K( F7 f% T/ q: k
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 F) o+ [: n- [
  434.   {
    # Q' ?+ w; z& T) f  ~
  435.     char szLanguage[50];1 ^6 ^1 P. S0 F; S3 l, G3 K% E
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 v! v. w# v; \; ]2 I5 K
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 U# h* G- N* V7 l/ R
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 \. R* E7 _- h
  439.     else                                   m_iLanguage=ENGLISH;5 K" L2 f/ u( h3 E# v- b, S) n% e5 J
  440.     char szRegister[100];
    * ?2 V0 \: J% q! ~
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ( G$ J7 O9 R$ K1 i6 e
  442.     strRegsName=szRegister;3 _% R8 F" z6 L6 b/ C# f
  443.     char szPatchURL[100];
    7 E6 }, l; n& K' e, y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + m8 M# E# N! l+ ?+ M
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 X) a; k1 Q/ t0 A) i: Y% O7 l
  446.   }1 f( u  _! o+ E# l
  447.   else2 L$ t( m. C3 ~+ \6 O
  448.   {  S6 N4 O# ^, `/ z& m/ _2 L1 D
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 P: U- x8 h$ s  L+ a
  450.     strRegsName=DEFAULT_REG_URL;
    . b" J! \- I) A! o! J+ d5 Y
  451.   }
    / o' p' d2 Z0 g! j% i
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 y, b" p1 U6 f- y
  453.   {
    4 M8 F' o& V/ I
  454.     char szIP[50];: Q/ M9 M% t, \4 I2 _8 G
  455.     char szDIR[300];3 z; Z- l# P0 H4 c6 Q
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; l3 `. g) K, c1 a2 a4 A
  457.     {2 s) u4 X7 R& p5 r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    , E7 }4 F8 h& d4 C1 p, G. T9 i
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");% h( }4 \7 {# R
  460.       strHostName=szIP;& g# a+ d# g+ {7 t) e, |
  461.       strHostPath.Format("/%s",szDIR);, y' o: X* f: y) N* L+ v) Q- q# ]! O
  462.     }( t" a; R* M3 M/ z3 j+ y
  463.     else
    4 c; E& I/ S9 h5 P8 {
  464.     {
    7 u, |) K6 M# M. b8 g
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * P7 {9 E% v+ }% p! n
  466.       {1 t! [3 W& f+ f' l; l0 y1 d8 }, d
  467.         char szLanguage[50];
    4 \! K* w. c& n* \
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 S, U) @3 G+ t; Z
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: Q! V8 Y( t6 B$ I8 u9 ^. v1 z
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# ]6 V- N+ g/ @' M( @" X; b- Y
  471.         else                                   m_iLanguage=ENGLISH;2 K% t+ `5 s4 e3 }
  472.         char szRegister[100];
    9 X* c0 B- _: L" {' n0 U% \7 d
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 w6 ~" T& J9 F8 p2 s- [
  474.         strRegsName=szRegister;
    6 m9 }. A9 h/ P( ]8 E" y. S0 |3 V, b
  475.         char szPatchURL[100];% X1 E7 _6 R7 H: T4 v9 f
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 ^/ {8 g6 n( C, t2 F! A6 F; Z) c
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 F- r* g/ K/ R7 y4 Y- z  B1 p7 a
  478.       }
    2 z8 }0 {7 O# p9 `) {, n- z
  479.       else
    6 K0 d7 b# j3 o3 S0 O5 f
  480.       {
    7 `7 B, h, N! W; w1 ]
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) _: F+ T: V% x/ J7 m* o
  482.         strRegsName=DEFAULT_REG_URL;( B, ~/ r0 ~% c$ R3 M8 v. w& o1 D
  483.       }
    ( R" q0 {1 A9 c
  484.     }" I. |, H* r+ @0 M; M
  485.   }
    ! ~9 q: G) Q* l; I5 j5 X- J
  486.   return true;
    7 p* Z) l; ?7 o+ c+ p
  487. }
    . _9 n7 |( z; w/ L, q

  488. , h2 [# P0 z. y! u" W3 _& a0 w3 t
  489. #include ".\ZLib\unzip.h"
    . Q& j/ t% V  r$ |3 L) t4 D8 P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);  I# K  s3 E2 c  c
  491. /////////////////////////////////////////////////////////////////////////////
    ; F1 y! v6 Y- C$ d$ h
  492. // CRevAppApp initialization6 p8 j7 `5 g, B  A9 t
  493. 0 k4 K0 @& Q( b0 W' |) F
  494. BOOL CRevAppApp::InitInstance()
    " f$ q1 ?+ `, N9 H8 [% ]- U7 l
  495. {$ ~; c% T6 S  V
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
      V+ H7 S) a( d& X
  497. : \; a+ A2 S9 Y& w0 f$ {( Z* e. D/ A& R
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    5 N& B; M; m9 X6 r0 `6 W2 z0 f
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))3 ?) s% z, E+ `- b0 }" K$ i
  500.   {
    4 U2 U; O2 t  f' R$ w
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    4 _" D) i- I% G0 b
  502.     GetPathFromFullPath(szPathTarget,szPathSource);( _' R! _0 t/ Q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    : S( x+ b" o: J1 n5 w+ l( x
  504.     {8 P+ i' _0 G; ~  I0 h
  505.       strcpy(szPath,szPathTarget);3 F' ]- w* g: H5 U' c/ @
  506.       SetCurrentDirectory(szPath);
    / X+ e8 `" |4 K  `
  507.     }
    8 w6 b! p- I3 s4 ~" G' F8 }7 P
  508.   }0 k, P1 \, U% o/ R- D+ C; J
  509. #ifdef _DEBUG' t5 w4 S' H# f. M6 R0 @' a+ B# w
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 b/ Y" o1 X9 N* M2 V
  511. #else
    6 h' G* s1 S; T
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 p+ n! u; y  x
  513. #endif
    * A- K! Q" h4 v
  514.   {
    # J- ^7 |7 K3 O: R
  515.     char tempFileName[MAX_PATH];& @! X: V: }- C' n! _
  516.     strcpy(tempFileName,szPathSource);
    ) J& Y' L/ o1 @; p- H, a6 j4 ]
  517.     tempFileName[strlen(szPathSource)-12]=0;
    - F: k/ R  {( \. W; T
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    , J9 k) m- y3 U1 c" S$ D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    $ d5 h1 j! x+ J4 O' f: ^* T  _& d
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);; c  q; W- q/ K5 f# M4 n7 `- I
  521.     return TRUE;6 g! T, n% U& V0 c. s& f3 h1 p
  522.   }6 e  E) C/ F1 O5 O
  523.   // Nuke 0118: Delete run.exe
    ! W0 T  f5 M+ v7 o) h/ C
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    & p7 Y! O+ [0 O) a  `
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");( n+ h, t+ ?) C* \5 W- t
  526.   if(!ReadCfgFile("Config.ini"))
    * L! y$ F. `' r
  527.   {
    , j% f9 l! `) C: H
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ! K, _; M) N8 o9 t
  529.     return TRUE;
    * d# ?5 h3 q; g0 G, ~
  530.   }
    + @8 O+ Z9 y. V* V5 V+ m% A3 |
  531.   HANDLE mutex;  C. H' z& S( v
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; `, b9 s, r( L" z" D9 ~
  533.   {
    7 r' a4 H# H' b4 I
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    / r. c% v7 B4 O9 O$ V( N
  535.     {. b" {! h( R. u0 v2 h8 G+ h
  536.       CloseHandle(mutex);, G* \& Q' _# |
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ; v+ y) r+ _; ^
  538.       return TRUE;
    5 |9 R* r& d: p! K+ P1 \% G# Y" H
  539.     }
    3 c! R, a# L5 V* }2 i! I+ H0 p
  540.   }  
    / l- d4 R4 _+ }6 i7 O$ A
  541.   CloseHandle(mutex);
    8 m. s+ F' Q0 L: h7 `! D/ |
  542. ' H2 U  V8 l7 f
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);" h1 {1 \3 q8 Y8 c1 ^
  544. 1 B1 U) N& Z0 n3 _% W
  545.         AfxEnableControlContainer();
    , R. X, k" u9 R7 j; g

  546. ) O& d* ~* q8 n% o9 o
  547.   bCanUpdate=FALSE;0 b8 o3 g  D( s* r  O! v0 C
  548.   dwStartUpSteps=1;
    9 `# x  N0 f# k4 i1 ~0 Z  g7 [
  549.   dwProgramState=AP_NOTHING;5 f& q$ J  N3 [/ a7 S
  550. 9 M7 X, D0 j! }' H
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ S; [) |: D5 m: Q$ Q5 x6 ]+ d
  552. : E7 }6 L1 ?& Q# N
  553.         // Standard initialization, H3 |- }% C& U0 c
  554.         // If you are not using these features and wish to reduce the size
    * ?) i$ T2 X, ]/ I
  555.         //  of your final executable, you should remove from the following
    0 l) p8 P: c9 |5 W
  556.         //  the specific initialization routines you do not need.
    , W# y9 W" x7 X
  557. $ I* v  }3 v) j/ l
  558. #ifdef _AFXDLL
    ! E  @9 T) g4 r9 P
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL0 c2 ~4 b3 @9 C9 W& B. ~$ w( D
  560. #else
    ' ?; x1 i" w3 |( S3 W
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 k  \8 A& Q$ x! {, D) J
  562. #endif% A0 h* M3 i9 K7 G5 X* r6 }1 T

  563. * C$ r+ L4 g  E) j4 f
  564.   dlg=new CRevAppDlg;% n( g) g" [" X. t8 @
  565.   dlg->Create(IDD_REVAPP_DIALOG);* T4 v/ l6 _+ X# a2 J! l! X
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    9 p! O1 B5 b+ B; x( v0 Z
  567.   m_pMainWnd=dlg;1 R7 r6 v# f- ~: `3 P9 U

  568. ! p% G& ~% |2 \- g4 ?
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);0 G* y) K/ E  [; t' k
  570. ; k  s7 u/ Q$ Q( Z7 l, f
  571. //  GdiplusStartupInput gdiplusStartupInput;
    . i  C7 k& F, ]0 O/ b
  572. //  ULONG_PTR gdiplusToken;
    " }5 g+ P+ l7 U  \  T
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);- \: d6 N" U- \/ F! ~4 s+ e
  574. : s" Q1 d6 k/ a+ o! U
  575. //        CRevAppDlg dlg;
    6 k" }! B8 ~2 q' d) a
  576. //        int nResponse = dlg.DoModal();$ K9 S. {' c, a( @3 s/ z! `
  577. //        if (nResponse == IDOK)
    1 l' p2 E0 F! J
  578. //        {
    5 K) r/ m5 V& I% R! K6 L! f: v
  579. //                // TODO: Place code here to handle when the dialog is
    8 o  b& q3 x" l5 A$ E" y9 x4 Z
  580. //                //  dismissed with OK
    2 r* {; ~9 N5 q3 h: d
  581. //        }6 E5 @- \2 H5 G  j
  582. //        else if (nResponse == IDCANCEL)! H$ [( P0 ?! J
  583. //        {
    - {4 V; B7 F; \' ?
  584. //                // TODO: Place code here to handle when the dialog is6 A) }! k- f3 x/ ]! h5 W
  585. //                //  dismissed with Cancel: e7 d; W5 L# E) J
  586. //        }
    7 e  h( e; Y, s7 g+ ~! Y/ i
  587. ! n9 n8 E+ c$ W5 q
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ! s( `  h5 Y. B; G6 y7 p
  589.         //  application, rather than start the application's message pump.
    ' p! Q3 o0 s1 M0 V# J: e
  590.         return TRUE;
    5 R, l. N: N! h) T: c" p
  591. }: Y7 H) E  `5 [0 a9 b
  592. 7 e# E' ^! N. A$ J6 S* S3 A
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    6 l. J- w. D5 B5 G
  594. {
      X1 Y, e7 ?" |4 E: B( R
  595.   int i;9 }6 H0 j( D$ B
  596.   char *szRet;
    4 a- Q, v9 n9 Q- s2 v

  597. 3 W2 c; Q6 K7 G
  598.   if(pSource) { itoken=0; sztoken=pSource; }5 Q2 B7 s- z6 C# \) e2 j0 m
  599.   if(sztoken)# R  S% P- G6 j. [$ d
  600.   {
    9 L' ?" u3 j; g6 Q8 G! t1 B
  601.     szRet=&sztoken[itoken];' p6 y- [  {6 s7 U; q) o4 y
  602.     while(sztoken[itoken])3 s& T* Y0 M- i( Y1 h
  603.     {
    2 @2 D& @$ h; c* W& a7 R
  604.       for(i=0;i<(int)strlen(token);i++)4 O, U# t6 n2 F: J& c
  605.       {* b1 u+ _5 d; {. ~5 V5 l
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])2 Y& W- R! Y- x7 w* p/ h2 G: h7 H
  607.         {
    7 z1 F& l& N3 v6 k9 r
  608.           sztoken[itoken++]=0;
    , \, Z  e( g) V" O8 N9 Q& r! A* w
  609.           sztoken[itoken++]=0;
    - [8 u  C$ q! m
  610.           return szRet;
    / @4 j, r2 J% s% ~( x5 ~" F2 d5 n
  611.         }
    7 [) b% C  B" v( k5 j+ {7 i9 u
  612.       }. S# P6 W9 i1 z( v% ?
  613.       itoken++;
    5 q, \& o/ X7 S& _- v& v$ F
  614.     }
    ( ?+ D% @: \# k2 i2 T4 B" X
  615.   }
    4 ]" ~3 t: _' l
  616.   return NULL;' I% K# V4 B  ?; m
  617. }: n4 Q- c: ^' O" [

  618. 6 _; ]1 C/ b- o
  619. void ProcessProc(long Total,long Current); q- B- a0 v! D
  620. {
    ' o1 Z; I1 a6 U0 Z6 ~) A2 S; b# c
  621.         MSG msg;4 K+ y8 A: L: n+ t
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);7 J* L' {: r8 `  D; T- O0 E. ?
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));: E+ X% [# C& K- N( G+ l! }: {" e
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))* l$ s& R- J! N; Y& J0 d- ^
  625.         {
    ' L) C0 x! P* Y3 `, m+ l
  626.                 if(!GetMessage(&msg,NULL,0,0))
    9 J9 y! i" l0 Q$ G" I4 ]! w5 J+ ~; E
  627.                 {% H7 s% m+ g( h% k
  628.                         return;0 v2 f4 W# G& M( D
  629.                 }6 _/ A  I, b6 m
  630.                 TranslateMessage(&msg);( h9 v* H2 \  l) _
  631.                 DispatchMessage(&msg);
    9 s: [) S  m. Q9 U+ C
  632.         }        & C6 k, y5 J/ j' C! H+ {$ @# @
  633. }
      r7 n3 V4 Y( F$ ~/ j9 Q: t& `
  634. # F+ e/ Z9 O1 x6 b" D, \) q+ V
  635. BOOL bFirstChar=TRUE;
    ; |2 F2 D5 A! J6 t% G: g7 ^
  636. 9 X& y" }8 j( D
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ( h/ p& Q- V! @) ?5 f
  638. {
    7 v' t# \! Y- n: s! K
  639.         // TODO: Add your specialized code here and/or call the base class
    ! j. ?% P/ y) a& P
  640.   switch(dwProgramState)
    ) r9 V" Q" N1 F% Z/ ]
  641.   {
    5 l. p5 s; Z% }3 p+ U4 _
  642.   case AP_NOTHING:& a! q, a3 ?2 O* Q
  643.     switch(dwStartUpSteps)9 A1 W: `! E$ L* \
  644.     {
    ' C/ ]) d& V( p0 i
  645.     case 1:0 C$ [" P; [( x) j, @5 h1 ?
  646.       {
    * ^4 J  c4 i, e2 J5 |
  647.         int i;
    7 z  W7 [8 s' a: C0 D/ y
  648.         CDC *pCDC=dlg->GetDC();
    ! U4 _& U! H5 ^. G8 _
  649.         HDC hdcwnd=pCDC->m_hDC;
    " K$ B& Z4 E; U* h" n% z- ~
  650. //        Graphics graphics(hdcwnd);5 o# I  ]4 {* v( b/ P
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");' A; ]$ R! K# t% u
  652. //        INT iWidth=bitmap.GetWidth();, c- ^; z5 k( d/ b. H: N0 G
  653. //        INT iHeight=bitmap.GetHeight();
    7 {& @6 G2 @/ ?
  654. //        Color color,colorTemp;
    $ a: M0 e; F1 O1 c
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)0 I9 Z" x3 T2 b
  656. //        {
    1 _3 G" r( j6 D% Z0 F
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)& S; t+ X" i- u+ t9 z
  658. //          {- ]9 X) l! i: ~) o/ o3 Y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);2 k8 `6 L2 x( C! c2 _. ]# k+ L
  660. //            colorTemp.SetValue(color.MakeARGB(; |5 s9 V) ?& S
  661. //              (BYTE)(255*iColumn/iWidth),, C0 u7 i$ x3 L; \2 g1 F8 G% g* p9 n
  662. //              color.GetRed(),
    , x. g# W6 C. k" V) r9 T
  663. //              color.GetGreen(),/ O3 |: Q! f- }, D
  664. //              color.GetBlue()));
    2 }' K1 }' }7 X/ t
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ' k+ i. \4 z9 p0 T# \; M" z
  666. //          }; F' J0 G: d; E% F6 [
  667. //        }
    ; d7 {' M) r* p* I5 n* m
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);/ O& v9 m2 u+ X1 Y% j9 m# ]' G
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 S' u4 \: p2 s3 f2 v
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");# |) E. a; P# a4 r
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 Y! i1 ^4 }2 @" T
  672.         for(i=0;i<240;i+=8)
    % K/ v) k0 X6 i
  673.         {7 b  X# i1 |$ O8 Y8 E* G
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' w1 X: @2 q) j( Z5 f4 V# z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 I& Y+ M2 s; u
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 I/ F( D: h# V! j
  677.           Sleep(33);
    8 j- d# v: Y! }, O
  678.         }
    8 c$ M9 @  E! T, o/ C& f( }
  679.         Sleep(1000);( c1 R% X7 D& k; \
  680.         for(i=240;i>0;i-=8)4 f% I' b! y2 V( S
  681.         {( S( |( F- s5 z5 d- t" ^
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 }7 a, ~: u, C$ h/ _5 x' B
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 f6 r. G- }' w5 _' S- X6 M
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , w+ B$ w! B6 a5 @1 S
  685.           Sleep(33);/ @. U6 y% b( V5 v3 R4 _$ T
  686.         }
    $ y5 P$ i# Z: Y6 y( Y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);% B- Y/ V- r4 k. b6 L7 R0 ]
  688.         dlg->ReleaseDC(pCDC);  j9 l# ^) }# [
  689.         DeleteDC(hdctar);
    ; b, @; W  x' C' O1 t& |9 |) `
  690.         DeleteDC(hdcsrc);
    9 m- k* b9 a3 f! c% m* j# m
  691.         DeleteDC(hdcorg);' d8 P; Q" G* P; Z# W2 U7 _& s
  692.       }1 Y# _/ X( d- t* i. p( F
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);8 h- Z( |9 z# W5 m0 `; O* q, n
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    1 Q  [4 [; E7 N: E
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");7 M/ z( Y3 C: n0 K7 }4 r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    # J' k$ P1 I1 s
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; L: E( A2 I+ T. H  x
  698.       if(!Dn.Connected())
    % @& N8 U$ E/ G' ~
  699.       {  x3 D/ ?- f; V6 p1 _: B* N
  700.         dwTotalFiles=1;: O9 Q4 U! S% c! g0 G& E0 ]
  701.         dwDownLoaded=0;2 X6 [; G" C, l5 G: C# w' m  f
  702.         bSilentStep=TRUE;6 W- s* V' v, ]6 R8 y; G+ ?- F
  703.         bCompressed=FALSE;6 u) q$ y8 g1 ?: y& @: I  l+ p
  704.         strExtLocal.Empty();! ~7 X( G2 _2 w+ O4 B
  705.         strFullName="readme.txt";
    * l" L; Q2 r0 u1 G' e1 B
  706.         dwProgramState=AP_CONNECT;2 m# x; a7 g  ~! S- b+ v
  707.       }" G4 h. Q' B: b- b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();, a/ o/ @) V$ M+ V8 N" J: p+ |2 [
  709.       dwStartUpSteps=2;/ u) S/ A9 N3 u- |$ y  z
  710.       break;9 C, ]$ y2 N" X- `7 t2 U# B/ _1 J( _
  711.     case 2:) i/ K0 \3 M6 D1 |% R& n5 w
  712.       {3 V" X7 p! }& f2 P: W
  713.         int iEOF;
    $ a8 K4 M8 z7 X* |  T
  714.         FILE *fp;" L; Z: A" F' }8 v
  715.         char szString[512];# C* `) S9 e" `7 r
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ( l2 p3 z2 J8 H3 j# l
  717.         if(fp)
      D' ~3 ^: O( E+ e. Z  ?$ p
  718.         {% @1 @" q+ }4 I  D
  719.           do+ s$ t! ^1 b: ?8 `/ @; J
  720.           {5 q+ M' ?& V, T5 _2 T$ O7 Z
  721.             iEOF=fscanf(fp,"%s",szString);* \6 C, _8 q) W' i) N$ Y
  722.             if(strlen(szString))
    $ ^- B1 u) G& H* |3 d$ b. J
  723.             {
    % o0 v& Q0 l/ E3 O# f
  724.               if(bFirstChar)6 I1 F- Q& M3 [9 f
  725.               {% f( B3 o' Y% n- s; Q
  726.                 bFirstChar=FALSE;
    8 y9 O. {. r" n3 S
  727.                 bConnectIsBig5=FALSE;
    8 j3 R# M& |' J
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    * a8 B2 e) D) A) H
  729.               }
      B3 v/ H. u% A
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    0 Y" e$ @$ ^1 ]8 D- I
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));0 f3 |% J# f2 @$ K
  732.               dlg->m_ListText.AddString(szString);8 A4 x1 d+ L5 z) p9 q; }
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& P1 I# h2 v( F" A0 Q
  734.               *szString=0;
    ; U. A% ?: A+ i0 p+ m# w' M/ }8 f
  735.             }
    * b9 u3 m) m5 c% ]
  736.           } while(iEOF!=EOF);
    $ x. a" E6 z7 Y
  737.           fclose(fp);/ [6 k2 N6 {. u, c
  738.           unlink(".\\DownLoad\\readme.txt");
    . _" l. X4 a! ]. R& @1 k4 C0 l
  739.           dwStartUpSteps=3;: v0 t) n* i% |& y+ C  Z
  740.         }' E3 E$ _; I& M4 |
  741.       }% c: n  _: H9 g
  742.       break;
    2 H! N# X8 q) J
  743.     case 3:" A; t: n9 C' X: Q6 c$ ]
  744.       if(!Dn.Connected())
    * L! C' }# q, b- q
  745.       {
    7 B4 J( i$ Z$ v! s
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    % D: a0 s! U2 b: i6 l: z9 t( B
  747.         dwTotalFiles=1;
    . O! {; K8 `: D3 o7 m
  748.         dwDownLoaded=0;
    ) s) n7 q5 [! H1 f2 p% l  w
  749.         bSilentStep=TRUE;
    7 J1 n/ F5 {" @& X& r
  750.         bCompressed=FALSE;
    2 y* t' Q0 a9 D6 w: G6 g% n& D$ a
  751.         strExtLocal.Empty();1 e( D7 d9 i) @1 N
  752.         strFullName="checkversion.txt";! t" j6 o  [: l* K) r! X
  753.         dwProgramState=AP_CONNECT;4 t4 @" ~/ a) E4 a  ^) h% `$ U# v# x
  754.       }7 ]% h& P" S! e6 h- U; ]
  755.       dwStartUpSteps=4;5 x# M. n" H8 j
  756.       break;
    % s) G  \6 B! ^: P& y' ^" c
  757.     case 4:
    / X! k4 G; k+ T1 p- k# _' r
  758.       {) c( y; W  H; V& _: v( K$ w
  759.         FILE *fp;
    % J& d1 Y$ E9 _4 M, W
  760.         char szString1[128];
    8 f& i6 W  m. T0 U/ }) g) z+ v
  761.         char szString2[128];: y1 a4 _/ v' y5 n$ J
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");& I- O: T% T7 r2 x
  763.         if(fp)
    ( D3 f- L- \0 [! e3 |4 {
  764.         {
    2 _' j9 t3 O5 [" T6 V( h
  765.           fscanf(fp,"%s",szString1);
    7 J3 a2 e6 y: H. x
  766.           fclose(fp);
    & A! b. Z$ D9 L9 |0 ~+ `1 Z
  767.           fCheckVersion=atof(szString1);
    & d) \# N3 s/ q( d3 z
  768.           fp=fopen(".\\checkversion.dat","r");8 h& `9 S  K0 f# n
  769.           if(fp)
    9 d/ c& r: O& K' H4 {
  770.           {1 o$ M2 }: O! j$ I: b! C
  771.             fscanf(fp,"%s",szString2);3 ?' v4 A' W" @3 ?3 }8 p' `7 ]# f
  772.             fclose(fp);
      I+ B4 _- k5 K; r3 \- c* A7 B8 {! g8 u
  773.             if(atof(szString1)!=atof(szString2))* q, u8 Z0 ]0 Z0 Q4 W" _- n! J7 T
  774.             {
    * K9 [( ~5 W8 f5 c3 Q6 }
  775.               if(!Dn.Connected())
    - j# h  e& k+ i+ o
  776.               {3 Z2 U0 w" V9 Q
  777.                 bFirstUpdate=TRUE;
    / \5 S& a1 v; i8 `  m8 e
  778.                 dwTotalFiles=1;
    1 l' R! T3 q7 q. Q
  779.                 dwDownLoaded=0;& |4 ]7 L' x, z! [4 l
  780.                 bSilentStep=FALSE;4 |; j9 m& j% ]# \. [; a
  781.                 bCompressed=TRUE;" d) b5 e8 T9 l' D6 l
  782.                 strExtLocal=".\\DownLoad\";
    # y/ L5 K& r$ ?1 y
  783.                 strFullName="update.txt";8 ?0 Z9 k! J! {2 k0 L' c. M: C
  784.                 dwProgramState=AP_CONNECT;
    3 l) A9 V# o2 ~+ D9 f- t
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) F& u2 H& C1 ~
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 m0 k! @) `. {- k
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / H3 j1 z) G# i# g
  788.   v7 n9 W7 c+ F3 N
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# I5 y& d$ n9 L/ D; H4 t
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ) X0 ^/ c: r$ @% F2 X& u2 J9 |2 {/ A
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)4 u1 Q- J! X) B8 ]. i, s
  792.                 {. H' j. C0 G( e
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");' W+ ~( x& G0 {! Q$ V( X  `
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");1 j& L1 w: Y  \- F* v
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    8 u# |  J% |, K+ s& I
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 M  W( q, P) u) _4 R  @# n  P

  797. : R) @* c) n- s: o: u3 x8 o, Y) R
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    6 h3 V( ~9 h; a/ m+ e
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 L( r; K! x/ Z2 x
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");' O$ B7 U# b7 _- ^
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) D* j: w6 N2 x# h
  802.                 }
    7 a7 [5 x2 ^" x1 ?+ [
  803.                 dwStartUpSteps=5;
    7 U% m0 l2 l! s: h
  804.               }
      Q) g5 [, O/ t
  805.             }+ ~* s3 U# F4 s- t! k
  806.             else
      t8 a4 h: V4 N" g" q1 q2 Q5 u: ]$ }
  807.             {. S, P" L% b& T0 c3 u& f
  808.               unlink(".\\DownLoad\\checkversion.txt");
    9 R' j. d: I1 _+ m% m* P
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    # T3 f/ G7 H8 H
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");: t* R/ a6 L0 |0 ?/ v( S
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    % u0 z( W  |( A2 }

  812. . g8 g, `$ e5 t: ~1 F
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " |1 ?: E* U8 D$ c4 p- m' Q
  814.               dwStartUpSteps=99;
    5 a9 T/ r0 U' L
  815.               bFinishUpdated=TRUE;
    , J+ L" G# x5 X. E, [( V
  816.               bCanUpdate=TRUE;
    & J$ \; S) z9 g+ [% x
  817.             }
    $ |/ Q' `- Z, y2 M
  818.           }
    * I+ S% F! {7 K, g) h9 @' F! b
  819.           else
    6 F6 X' q5 `2 w8 D
  820.           {# F, A! q5 ~4 H$ c5 Z
  821.             if(!Dn.Connected())
    7 [' E: I  r, d0 o* T; M
  822.             {
    ( H: N2 P: N1 _
  823.               bFirstUpdate=TRUE;" {; F4 v+ V: |0 o- G+ n- j
  824.               dwTotalFiles=1;1 \' H# \2 b& v1 Z
  825.               dwDownLoaded=0;4 _8 D7 L4 e6 N+ e; N: _: o
  826.               bSilentStep=FALSE;
    5 ]* ~7 e( {! B
  827.               bCompressed=TRUE;( M$ E5 Z& b/ W8 Y
  828.               strExtLocal=".\\DownLoad\";8 w  Q# C; l' D1 ^
  829.               strFullName="update.txt";
    ( g2 |2 V6 C# b, I1 u3 A( ?
  830.               dwProgramState=AP_CONNECT;
    & C/ Q# b# r$ x, M8 \0 R1 z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 M2 o' [' L; G9 a. b6 _* K; N, Q: Q
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( M8 L6 R$ _+ e' S+ [( R2 [, s
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");, @6 s: Y6 ?/ _( e$ d# @
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; x3 ^8 n# f! R' C! V4 K# [
  835.               unlink(".\\DownLoad\\checkversion.txt");9 k/ W. [9 h7 `" E4 O3 s9 a' F( }; h
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    , Q8 p# M+ I" \( Y
  837.               {! O" f7 Y, v, P9 U6 X2 m$ U3 z$ L
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");+ |' S: s/ c  t  K; _
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");& m3 w4 ~2 B$ `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");4 H1 J+ _2 I  p% W
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' i; `/ a0 r  b& I: Q
  842.                 2 B/ {! C" |% ]" v" U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");& O: g( j# \6 B7 j8 D
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");8 w/ H) q: ~/ X( ~2 J& C$ V
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");& f3 K+ n4 x8 F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 `9 a/ x* ^2 h: h5 w5 Z
  847.               }. m. D! A: a6 O
  848.               dwStartUpSteps=5;
    ( M2 ?! w" L5 X* s( s- q# I0 T
  849.             }
    & n6 D. }, N; p4 Q$ V- {4 @* N
  850.           }8 F& T* D1 j- d
  851.         }
    ! J! P& r) X, D: E9 Q
  852.         else
    ! ~2 ?* a+ C/ L, j
  853.         {
    * p) J- F) ~% T+ u
  854.           dwStartUpSteps=3;9 z" g2 A8 A0 W  D- c  L
  855.         }
    % \$ d, A) j! `8 F: G
  856.       }
    / K- q  W( q- S! O8 ^
  857.       break;
    ' E% \5 Y& V5 N  R; E
  858.     case 5:+ h5 b6 G& ~" _$ }6 P; e) H
  859.       {( [: n; N6 |3 h$ b8 g
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    , F2 q# j% h2 F0 b+ @, Z/ O$ L. M
  861.         {( y+ M/ J1 r* h. w7 ?
  862.           int opt_overwrite=1;
    , A" T% V& J2 r" v" `4 Z( ?; A
  863.           int opt_do_extract_withoutpath=0;! `* B: f" ~" V7 T# K% F7 V
  864.           unzFile uf=NULL;% d" c. [& ?$ N- p2 ]! I+ ~
  865. ! L5 D; |! B( Y+ |' M" ~
  866.           uf=unzOpen("Wsa.zip");
    8 d& `7 I8 P' H. p
  867.           if(uf)
    * j  R/ E$ c- g$ g
  868.           {3 H& U  c' ?' w* C3 p. s
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);) j( }6 ^/ V9 G+ J+ r* [
  870.             unzClose(uf);1 f+ N, L+ B, p. q8 W' J' s" k
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");1 h5 E% m; a" m: N, \. L
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");0 D* w! A# g3 s- {, X8 t3 W9 Z
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");: I, W7 u9 m- `
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( s. e% q, v9 t$ k" N
  875.           }
    ; Q- y5 m8 W  \( f' `: }2 }
  876.           DeleteFile("Wsa.zip" );
    9 V# Y- i2 f  L" @: L
  877.         }
    : H# K, ~/ _1 @, W, Y

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

# V  l  U7 x* A+ T
! e" H1 Z) U5 {

評分

參與人數 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-1-19 06:26

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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