找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
0 t" j/ o) a0 _7 A/ ~) L& P5 j0 z
  1. / RevApp.cpp : Defines the class behaviors for the application.2 }: p) D9 Z+ _  p$ \5 E" d
  2. //0 b$ c% ]& H2 |) S# M4 S% Q

  3. 1 a) R2 b3 e0 u+ E: D9 x  G
  4. #include "stdafx.h"
    5 _# J" p" ~8 v" t( T! N

  5. : E  ?" y. h4 M( @. F& Y( K* S
  6. //#define UNICODE
    ( ]: S. v; L- W2 I+ }
  7. //#include <gdiplus.h>9 E  W6 v( K0 l( x0 Z& ~) d
  8. //using namespace Gdiplus;
    8 }$ e1 y1 x: j

  9. 9 Z6 {! Q1 p# [) R( y; m1 l
  10. #include "RevApp.h"" o2 }& ]& X1 [: _3 Q4 B, s+ X8 U3 U- S: x
  11. #include "RevAppDlg.h"/ q5 U7 E: M$ c+ w: ?
  12. * F8 d) y8 Z2 O/ S' z# G( k9 m  o; @
  13. #pragma warning(disable:4786)0 b( @# o) a% n+ Y1 e
  14. #include <map>
    6 s6 g+ k  D4 b* ^( I& I( Z
  15. #include <list>
    ! P2 \0 t! C9 z# X* J( @
  16. #include <direct.h>
    3 y6 m9 H: m' a1 x  |
  17. 2 `, S% k' n( F  F* N
  18. #ifdef _DEBUG
    ' Z4 F/ b) l# [7 H% ^% _
  19. #define new DEBUG_NEW" N! o' Z$ z; }* L
  20. #undef THIS_FILE
    1 Q+ ^+ `. |& Q( ^' A
  21. static char THIS_FILE[] = __FILE__;
    9 u: }; d7 h, x- F, _
  22. #endif8 Q8 B' v* b+ B3 ^) m; p. m
  23. #include "SkinResDef.h"
    * ^0 a4 i; f- d: k# O# X$ Y
  24. #include "ChangeBG.h"
    # _  x0 b. a9 l) A
  25. #include "AFXINET.H"7 `5 C6 c' |" N& E
  26. 8 h8 Z& b6 G, a7 Q3 O& k2 H. C
  27. #define TRADITIONAL_CHINESE 0
    ! S# ~; N0 Y% F" S6 j
  28. #define SIMPLIFY_CHINESE 1
    ; Y2 k' V0 e3 K
  29. #define ENGLISH 2
    + u) a  Q5 A( o+ ~
  30. int m_iLanguage = ENGLISH;& c" C2 h7 x4 E4 |
  31. /////////////////////////////////////////////////////////////////////////////# X9 c' x% P# @2 s" j3 x
  32. // CRevAppApp
    & O3 r' [5 p6 }# N

  33. 8 F3 C! z2 n# T2 U' G0 X
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)$ P. h$ V( X8 z
  35.         //{{AFX_MSG_MAP(CRevAppApp)% H# k/ B* f5 s( o- ^! z$ d5 ~
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.$ z4 W/ v5 Y& d- C# o
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!' h3 k, n+ J- {  B+ m3 R
  38.         //}}AFX_MSG
    . i+ Z1 s; R7 u0 \% e9 g8 \. b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    6 j( M3 L6 u* H/ I, p* ^
  40. END_MESSAGE_MAP()4 Z: t4 J3 \  s5 H" G6 l

  41. 8 j7 ^+ S, \0 M+ w" h
  42. /////////////////////////////////////////////////////////////////////////////
    ; T  B( [6 A" \0 }
  43. // CRevAppApp construction
    . D  x$ F5 A( N; u9 Y
  44. " _6 R$ _2 y8 \8 I) c5 Y" ~
  45. CRevAppApp::CRevAppApp()( y: _: }2 |" b, W
  46. {
    2 |* c$ M( L4 g& T/ y
  47.         // TODO: add construction code here,. R4 m6 Y5 J% b
  48.         // Place all significant initialization in InitInstance* }8 b, p! a  Y0 I+ b3 ~
  49.   bDisplayIsBig5=FALSE;
    ' m8 T2 z1 u, p% k' I
  50.   bRestartUpdater=FALSE;- D: ~2 t/ X" ?0 g9 L) U7 u$ ^' I3 f1 G
  51.   bFinishUpdated=FALSE;
    1 K' x- ^5 q+ B/ X- B" i
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    $ O. @9 p$ T& v
  53.   InitChangeDataBig52GBKS();' ^7 v+ f3 _1 Q+ d+ E: c
  54.   InitChangeDataGBKS2Big5();1 G! @9 v0 _  Y7 c  w; x4 K& l' W5 h
  55.         //
    0 O/ Q( n! A; }
  56.         bClickRunExe = FALSE;
    ! Z  p6 W* O1 @& a
  57.         //8 u2 G. S5 c7 Z2 r1 x, v% n
  58. }
    - W, U# Q9 n0 ]. |' @

  59. $ `: f. ?$ v' `: _& y
  60. CRevAppApp::~CRevAppApp()
    ! c) h# c% {( V5 E4 N" @& ]
  61. {
    : b0 V. l- T7 j; [- }1 _
  62.         // TODO: add construction code here,
    4 x6 Z- A9 P. o: j
  63.         // Place all significant initialization in InitInstance' _6 {, s6 M$ z# G. J
  64.   EndChangeData();
    " j* r5 I  q$ Z6 y( g7 X" P
  65. }
    / u& O6 l7 P& y- d8 M$ Y7 ?' u

  66. 7 a. p* w$ {. v( M* Q  Q5 W1 J
  67. /////////////////////////////////////////////////////////////////////////////. m0 o) a8 W2 n
  68. // The one and only CRevAppApp object. z5 C  V* p' |# j& u( E
  69. . e+ i* z2 F+ k$ u8 C
  70. CRevAppApp theApp;
    8 x& T. ]# h- L5 j5 K9 a

  71. 4 T7 F: H' G& h; F5 M! h, B- b
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 B6 ]/ i6 B* l6 C  [
  73. {7 v! ^+ q4 U8 G! ~0 O
  74.   int iEOF=0;. w- D7 O- q" T- w: P
  75.   char szTempName[MAX_PATH];
    $ w/ B/ @: R# \5 v$ U3 q
  76.   *szFileName=0;+ O" r1 y& [; {! v+ V- _
  77.   iEOF=fscanf(fp,"%s",szTempName);6 b' K8 g: ]3 ^
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')! d( L* o" M$ y: A0 P. O# d- x* M5 j
  79.   {5 e! N, K" E# A: H
  80.     strcpy(szFileName,&szTempName[1]);
    9 w4 Q( n1 Z0 _# h, l
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    5 W  a# x8 {% r4 [
  82.     {. A; W7 R; |+ n% F6 j4 F
  83.       iEOF=fscanf(fp,"%s",szTempName);: b) a. r4 g: @4 Q3 M, J  X
  84.       strcat(szFileName," ");
    5 l9 y9 h# `* L4 B
  85.       strcat(szFileName,szTempName);
    7 \' r: I* i9 }$ ]
  86.     }' m6 E4 h1 O' x, {! k3 b" C
  87.     if(strlen(szFileName)>=1)
    ' c9 |8 b) {, [) M, w; }
  88.     {$ \1 y7 Y  L; N5 |& ]+ d
  89.       szFileName[strlen(szFileName)-1]=0;. ]7 a9 _: x% [. J, Z% N# {
  90.     }4 {. V. a7 y! o; d; m) z- N
  91.   }% r6 L) A% Z2 @- ~
  92.   return szFileName;
    $ y2 Z+ c$ O; j7 b: U% c7 Y3 Y  ]
  93. }
    0 K3 ]( P! |9 ^$ x) N; P

  94. 1 S' ^+ V, {  t2 G2 j6 Z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    3 M7 o2 |5 _+ j5 S
  96. {* T: I. Q/ s7 W/ D5 G+ ^
  97.   FILE *fp;
      L- R" N3 p" \1 K
  98.   char *key=NULL;
    / _3 E7 @9 v" ]  X) d
  99.   char version[MAX_PATH];2 W9 }% s) [% ~3 j
  100.   LPUPDATEFILE file,olds;$ \& c- ]- B" N* B2 ^
  101.   std::map<CString,LPUPDATEFILE>::iterator p;: u* ?" |! P, ?) z/ Z) y- h" x1 X

  102. 1 {: z* s. n2 e& K2 e- y+ \$ v
  103.   UpdateList.clear();4 ~+ w* h. Y- R& }" u+ \6 d" I
  104.   UpdateFile.clear();9 v$ E6 m2 K% K) i0 y9 G) r7 H
  105.   if(GetFileAttributes(filename)==-1) return false;1 k/ Q6 k6 w$ `  w) z; ?
  106.   if(!(fp=fopen(filename,"r"))) return false;6 ]7 f6 S5 R; a1 A3 \6 R6 B
  107.   fscanf(fp,"%s",version);1 M3 w- i2 L; d) k" S
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . y6 R9 G' E# f. s
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 e3 n' \( E; @8 `# c, P8 ~. [, E
  110.   {$ o( f5 K+ a- l1 f; c# ]# r
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ @  s. n2 Q9 S+ v. T' M2 Y
  112.     fscanf(fp,"%s",file->path);
    5 L0 R$ i/ @, q0 {8 ?
  113.     ReadFileNames(fp,file->file);
    2 n6 s9 N1 l# {9 {  P. E
  114.     strcpy(file->full,".");) \5 s$ N) ?* l7 l2 n5 p
  115.     strcat(file->full,file->path);
    ! @, I+ a, a; p! S- Y
  116.     strcat(file->full,file->file);# a$ l; G* E  s. s
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())9 t4 h0 X, p* a4 U
  118.     {) F  d  N8 y: B8 X
  119.       file->vers=(float)atof(version);
    1 s6 |2 h; m9 m& B. n1 V9 k
  120.       UpdateList.push_back(file->full);
    3 ]+ `4 D2 _4 p4 c
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));  _+ F) S, s  j1 C
  122.     }
    # Q0 H8 w  s* w) Z$ r: m
  123.     else
    6 `  T. G* c. E+ ~  }8 m
  124.     {, ?# u/ x- q7 m* b4 `6 n" B4 e9 v
  125.       olds=(*p).second;
    4 @) P/ k, Q6 K# e
  126.       if(olds->vers<(float)atof(version))
    ) R4 w' ~. X6 Z( k$ V# w
  127.       {
    3 M& v. h+ x" u. g/ H  A! X
  128.         olds->vers=(float)atof(version);
    & R% g/ e+ x# _# V
  129.       }
    3 r- [5 B# M& y
  130.       free(file);# a: q6 i9 }8 P% b2 d. J
  131.     }) _: @: p  |' h2 T, l
  132.   }
    / Y7 x) z+ Q' ]
  133.   fclose(fp);
    # z8 J4 _, r, P' j9 F* e% c3 T
  134.   return true;
    * l# Y9 O9 R3 M2 k2 b
  135. }$ z8 `2 s% L- \% ?1 ~" N
  136. ( c) @# k6 h$ L9 _! J! \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! V4 I4 I3 d5 z* w; ?- B! X$ J, K
  138. {
    8 V, d2 ~! z8 v( K
  139.   TCHAR  szFull[MAX_PATH];- a/ B6 c5 B3 y* w! d5 x
  140.   TCHAR *token,*inter;  A& Y: N  @' O0 b) g
  141.   *szPath=0;
    7 ]1 L: ^5 @1 G% \# J& u: n/ W
  142.   strcpy(szFull,szFullPath);: U9 O8 |  L' j1 p. S2 Z
  143.   token=strtok(szFull,"\\/");! Z; j; k5 s4 s+ T4 r" b2 m* E
  144.   inter=token;( o4 I  ]: t7 c
  145.   while(token=strtok(NULL,"\\/"))' O( n; q0 `4 ?! n
  146.   {
    9 W0 e: h( e! T& E
  147.     strcat(szPath,inter);, C$ d7 k  x; l# v  |1 Q
  148.     strcat(szPath,"\");
    1 A# @4 h+ G# [$ o
  149.     inter=token;0 @! \. \! L# W0 y; k0 j& @
  150.   }
    3 G9 I6 r. D5 k* u
  151.   return strlen(szPath);6 ^3 A$ U; ^5 u7 ~5 K
  152. }  o3 B* L6 ^8 `3 v+ q  [/ \. X- g
  153. + R; V, Y; `+ T3 s: d; I
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)7 e' z4 T1 `: w( B9 K3 W& N9 C+ G/ W
  155. {! O1 k# Q0 o4 Y! l/ O; S
  156.   DWORD attrib=GetFileAttributes(Target);" q+ b& c+ X2 @" l9 z9 E
  157.   if(attrib!=-1)
      D$ e6 \7 ~6 `% i( K5 Y  e
  158.   {
    4 m/ q6 D* F6 [% P+ j
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))" T& N+ m/ T9 s6 U  |* g& A
  160.     {
    % w3 Q8 K; F" ?" `2 [3 f4 ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    + c/ S# V/ `+ z
  162.       SetFileAttributes(Target,attrib);
    ' c7 b+ E; g. T$ t7 B
  163.     }4 e) S# g  m9 V) ]  I
  164.   }9 ^' K' }  T% ^; G: w: B5 J+ F0 e
  165.   CopyFile(Source,Target,Erase);# n7 r8 E" t8 v) Q4 b5 L" \
  166. }/ g$ m; b( W9 J* \/ k$ T. c
  167. : }/ D6 c' X- _7 X- s) M
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    - K- M3 i- m$ x* n( [' v
  169. {% x. a# Y( y2 K# Q7 \+ w
  170.      FILE *fp;  f$ o$ Z+ O. m9 j
  171.      char  szBuffer[8192];
    4 B$ J& i+ R9 ^6 M
  172.   va_list  argptr;) n5 G" _( k8 n6 Q/ G; o. ]

  173. ) x; x4 I3 Y0 b- f% J: R4 `9 Y% ~5 z
  174.         va_start(argptr,message);; x3 R- L* \( `. r9 }4 C8 p5 @
  175.         vsprintf(szBuffer,message,argptr);# U; X, a4 |3 X3 }# x( r/ ]
  176.         va_end(argptr);
    7 |4 B: D3 r9 J. |# d! J) |1 {
  177.   fp=fopen(FileName,"a");, m3 G" b3 e# u: P
  178.   if(fp)
    " l. n7 q3 ~0 p, Z
  179.   {
    6 h& _4 g0 X; ~7 N, u
  180.     fprintf(fp,szBuffer);
    # r; o5 M5 @0 T: |4 ^+ {; W0 M6 x
  181.     fclose(fp);8 `2 @9 v" s. S# G7 f
  182.           _flushall();6 ?9 G& l( }$ @* B* z
  183.   }
    % D0 P' k; }' j
  184. }
    , N7 B* ~+ D  Y. ]1 A. ~0 f
  185. 5 v8 p# z5 f8 B
  186. BOOL CRevAppApp::Fclearf(char *FileName)! ]" V2 x% [/ ?, G' @, |+ I, |0 I! Z
  187. {2 c0 b: o# F0 ?: @2 Q
  188.      FILE *fp;
    4 x& x1 u: d8 z7 T: L
  189.     DWORD  attrib;
    ! l) x7 y* D7 c% y, J
  190.   attrib=GetFileAttributes(FileName);
    - h8 D" b* ^. p9 X) r" ~
  191.   if(attrib!=-1)1 c% E  c+ R, f$ Z4 H
  192.   {
    . `9 a  }: x2 O2 ~' O% \3 L
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);' x* |: B1 @& Q9 N1 F# U
  194.     if(!SetFileAttributes(FileName,attrib))
    8 e- t  C! o4 o
  195.     {
    6 S$ G  r. k5 x$ H
  196.       return FALSE;3 G4 u5 C% K8 |4 p9 h  @
  197.     }( N3 O7 a$ l2 n$ k
  198.   }8 p& L/ W" R9 T/ M# a" y% P
  199.   fp=fopen(FileName,"wb");
    % n1 q3 y4 {. d# l
  200.   if(fp)+ L. |, z4 ]' p
  201.   {
    " Q# [- B5 B, _1 T# K" t
  202.     fclose(fp);; W7 S% p9 |% n; M4 V6 N( V
  203.   }7 k$ q3 |/ H1 S
  204.   return TRUE;
    1 S$ Y/ h4 r$ ?) n5 `) I$ T
  205. }
    , C1 y3 o3 ^- n
  206. + f! H% u- `9 i# J# W8 ^
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    2 r" D2 j# S' G. {. ^# x
  208. {
    ) U& E3 e% p( h' A) S+ a: x5 N
  209.   char filename[MAX_PATH];
    0 F' j- n' u+ Y. K( d) j
  210.   LPUPDATEFILE file,olds;$ v; Z8 F1 L' L( y
  211.   std::map<int,CString>::iterator i;0 n, d' w4 S2 G) n1 `
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    / y- w* d& L. l# D2 _
  213.   std::list<CString>::iterator l;
    $ E8 P( Z3 y# e' n. d7 Q5 p

  214. ! r* L; j0 D2 S  c& H; |& q8 |
  215.   if(bFirstUpdate)+ x: C$ p9 r/ L# K1 z* Z( Z
  216.   {
    9 |7 w7 z% n  `
  217.     dwCurrFile=0;8 Y6 G( U: ^' }4 ^
  218.     bFirstUpdate=FALSE;
    ( W# s; i! C0 x3 V
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  s( }) y& K) V; S
  220.     {
    $ C. R( M; O8 M) ]: ?1 t& {
  221.       dwTotalFiles=UpdateLocal.size();
    ; q( e9 N$ V& P8 ^' W5 Z
  222.       dwDownLoaded=0;- a! `' _5 z8 |  b1 z
  223.       bSilentStep=FALSE;
    3 Z" }5 ^5 D) t4 E: m2 e
  224.       bCompressed=TRUE;0 e) a  I$ }/ K& H
  225.       strExtLocal.Empty();
    ! S) a$ }; W8 {6 s7 |& ?: J
  226.       strFullName=(*i).second;
    7 Z( _: \/ l9 i% C) z
  227.       dwProgramState=AP_CONNECT;; T4 j  z" f6 m: o
  228.       return TRUE;
    7 b2 q4 p- o2 V" D
  229.     }; p  v4 Q4 `8 {
  230.   }
    1 N) i, E2 e1 G& Y1 B& a
  231.   else if(bRestartUpdater==FALSE)" ^- F7 k; |9 K* m4 u: D+ h
  232.   {
    7 P+ U! E3 I1 d* T
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()). ]7 j' ?" C+ l" D  r1 f
  234.     {+ l7 l8 ]4 q2 [, M. \; Y$ w+ }
  235.       file=(*p).second;3 f7 t' j6 V1 o9 \! ?6 X7 a/ _! h! E5 D
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    8 b8 g: \0 _3 B) Z) Y9 ]9 x
  237.       {
    # f% W0 I5 y& Y  `2 f0 s$ Z
  238.         olds=(*p).second;
    ( s: }) q3 C- |. k) N7 ~% Z
  239.         olds->vers=file->vers;  z+ R4 |# B6 R1 O# J, s) [
  240.       }% z; @2 f0 G: Z& w% l
  241.       else
    ! C& |$ I1 K  f2 m- W9 b
  242.       {* _3 \, T/ T3 Y: T) d! @3 t
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( M: H/ S* I7 e
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    - t+ i( H: P) `5 ]9 E# y& j6 }
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) B# [- d& y) ?$ }
  246.       }
    ; |( ^% e! \* A, X+ j( O1 B# P3 q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ( q  V1 ?% X8 M9 V7 K
  248.       sprintf(filename,"(%s)",file->file);. a& }3 E& f6 y! y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 }7 T2 N" U; ^( t5 ^
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    . b/ _) |4 }0 i
  251.     }' q! a% p5 }& p+ h$ F
  252.     dwCurrFile++;/ l0 X6 ~9 r( [4 ~8 ^; p
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) d2 d. N' F$ \, Y8 X
  254.     {
    4 @/ B! e4 z+ C1 l
  255.       bSilentStep=FALSE;: t: @* |9 @2 L$ x, E
  256.       bCompressed=TRUE;
    . J: j9 C1 ]# p5 k; u9 C5 U) K
  257.       strExtLocal.Empty();" l: [3 m% V1 _- h# d
  258.       strFullName=(*i).second;4 ?1 [8 h* k! ~1 G
  259.       dwProgramState=AP_CONNECT;
    2 i- \9 R3 A; {; h0 b8 j: d! Z
  260.       return TRUE;
    # h5 ]) l& I! h* ^+ U. X
  261.     }3 z9 D' E# U: j9 @. j/ r
  262.     if(!bRestartUpdater)
    + U9 A4 L9 a4 T4 ~/ b
  263.     {  B* M) e" p. c" A% D( H
  264.       int iCurrSize,iFileSize;) a. G" f3 z' J* A, H& E) a+ W" f
  265.       iCurrSize=0;
    ' G  ]9 P" E7 L9 M% O9 z8 d
  266.       iFileSize=UpdateList2.size();
    7 J8 s2 T3 M% D9 Y: m% N9 E
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");, p/ O6 v/ v9 t7 e' y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    * g: L& X) q) o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");+ z6 y# o# b% V" c1 _
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 g1 Z) r; ^7 X( o/ Q+ _' j
  271.       Fclearf(".\\update.dat");
    3 m% k5 f# z2 z2 d8 s4 `6 s. n
  272.       Fprintf(".\\update.dat","Bloodyf\n");& s( o9 h2 Y6 t* W  n
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 r0 q3 A8 a: g5 l
  274.       {. [6 r5 \+ K5 A0 y& H" p4 {
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    - k/ I/ N  a/ {
  276.         {
    3 R' ^) q& o( a0 m3 i+ M. R
  277.           file=(*p).second;9 s2 I. s) l/ [3 f
  278.           sprintf(filename,"(%s)",file->file);$ r$ E/ a( ]1 j  O4 x
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 ]" K- m6 B! R
  280.           iCurrSize++;
    ; |$ _  u" k% L  N0 e
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ v2 r7 O: B2 N- n( }+ l. [
  282.         }- H7 _* w: `9 C; N! }
  283.       }
    2 ^; b$ w6 H9 v( t$ Z
  284.       unlink(".\\update.txt");
    3 K1 |3 z/ P- a7 Y5 I
  285.       unlink(".\\update.tmp");
    ; P  o7 y: w) c& o1 f; ~$ h/ u* |
  286.       Fclearf(".\\checkversion.dat");
    8 i5 P6 w$ H# _  e+ C! Z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    5 |0 a+ F$ S) o. o
  288.       if(UpdateLocal.size())& [% G1 N" p+ s$ W; x( I# w
  289.       {: ]' w) i7 _- D9 v7 v
  290.         UpdateLocal.clear();8 ]/ W2 t2 b6 A" ?; a- |
  291.       }# r  l: i: s) T. h
  292.       if(UpdateFile3.size())
    , j% N$ ?) @/ ?, h' C; r
  293.       {
    . R( ^" B4 }& z$ _' Z- U: ^
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- Z: v; z. d4 t% x
  295.         {; K' r$ {2 t6 ^4 g" w
  296.           file=(*p).second;
    . N8 Q8 b) b  R5 t+ R, U
  297.           free(file);" @: ^: V9 j6 q: t
  298.         }
    , M: R9 z8 y' [, U: e% [
  299.         UpdateFile3.clear();
      ~4 k- ?  h. c. b  C" o
  300.         UpdateList3.clear();
    ! o5 f' ~" D' ^7 g4 b, h
  301.       }
    ; q- E0 n+ J3 n  i; i! P% e6 n
  302.       if(UpdateFile2.size())
    , K3 `7 `, p6 ?# c% h
  303.       {8 K! {8 P' u9 X" Q5 z
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)6 K* _3 z: H6 O' [) t3 ^( M
  305.         {
    7 J# L/ x. R- }
  306.           file=(*p).second;
    ! Z8 ]4 P! C0 S+ N9 |
  307.           free(file);& @1 b. d" p$ a
  308.         }  M- X; K% \, Z: P( w  l3 w
  309.         UpdateFile2.clear();
    . l' s' f2 z* [6 K) u3 K/ n/ h9 h
  310.         UpdateList2.clear();
    ( U/ |9 [; \4 t4 G
  311.       }
    7 b% j, Y) U9 C
  312.       if(UpdateFile1.size())
    % j( k  w( B8 m: w, r
  313.       {
    9 H9 U( d. N, {  p" o' i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% S1 e! D' l# e' o
  315.         {  N% f' N, _4 E
  316.           file=(*p).second;
    6 k+ e/ E, `" `; L7 H1 G+ d* n. H
  317.           free(file);7 K( K/ n1 f9 d$ j3 r
  318.         }
    . ]$ {- k# E9 w8 L1 a9 U
  319.         UpdateFile1.clear();
    $ x' p7 s( x  f! _5 z, ?; Y
  320.         UpdateList1.clear();4 A# d7 Y) h; q. s2 R* m
  321.       }
    2 W0 ^  T. T0 l# A7 r! n
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));, c: Z& M$ x: g; T
  323.     }
    % y# J; S% ^( U2 R9 Y/ M
  324.   }# A2 J- T  S9 n1 c2 v' ]( B
  325.   return FALSE;
    0 P6 z4 J% H$ p+ \$ V
  326. }
    9 X2 }5 `9 P9 N- b

  327. 8 J; U6 @+ c* V( E/ c
  328. void CRevAppApp::ClearAll(void)+ k! j  T% f- G2 \" L/ |
  329. {6 N8 J6 e, m! v/ |3 b. }$ [
  330.   LPUPDATEFILE file;7 G- \$ T: p" E/ Y  t
  331.   std::map<CString,LPUPDATEFILE>::iterator p;8 L- q! p* A( K% A0 G5 b% U" D
  332. 8 N9 Q' i* J0 `! n$ T0 q2 v0 f2 k
  333.   if(UpdateLocal.size())
    7 C3 m! S- R; A* \9 {4 A1 j# U
  334.   {5 I$ l, [7 V% ?. P' R2 F
  335.     UpdateLocal.clear();) G: H5 V1 }* C9 p/ J
  336.   }$ F, D6 V# M8 \
  337.   if(UpdateFile3.size())
    ) Z, l/ b7 y% N8 o& T9 P, E6 [
  338.   {3 s5 i& F! y/ N- b# r
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - w4 ^! m0 Y: f" ]6 L
  340.     {% j" j3 ?' K2 I+ D/ d9 v! v: [
  341.       file=(*p).second;
    : g/ u$ Z2 a! o5 j) K9 y: ^$ Q
  342.       free(file);
    , v! P: c" _9 M0 s8 X
  343.     }* Y- L, |5 o6 [' `! ]! c/ q* l6 o
  344.     UpdateFile3.clear();
    2 _4 V0 h  |, Z5 x  c" r
  345.     UpdateList3.clear();- y8 G" K- Y- W7 f7 Y$ |9 A, F
  346.   }
    : z1 L/ D! r$ ^" e9 A
  347.   if(UpdateFile2.size()). P- |. N. p" ^! u9 a
  348.   {
    6 U. e- Y3 a+ l$ a4 S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ L2 P4 B* _% H/ {7 H# f
  350.     {
    0 r$ v. z9 S' H; d
  351.       file=(*p).second;
    / \2 m$ T$ R% r$ j  w
  352.       free(file);) d; G. C+ t2 u% P8 Y
  353.     }
    $ U6 @$ k& n) u. J" S) B
  354.     UpdateFile2.clear();
    ) R8 ^7 i3 s* n
  355.     UpdateList2.clear();
    - P/ J1 Y5 g; Z  c' W/ \
  356.   }
    ( s# I) J0 X; @( k8 x& {
  357.   if(UpdateFile1.size())$ x. I( n5 D( U: \8 @5 u
  358.   {, S3 j# j4 l5 G( e  P
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 [1 q2 t2 g, |; U6 _  j3 f
  360.     {
    + b3 N7 ~+ }: L  i1 l$ J
  361.       file=(*p).second;
    * ?; Q+ Z  a. X
  362.       free(file);
    " N" H. i4 R4 U) y. M
  363.     }6 s( f- {; x3 K; l$ e* i) @
  364.     UpdateFile1.clear();
    " V# {2 y( t) B8 \  Q( q9 P& B( x. `
  365.     UpdateList1.clear();, w7 Q5 [% y  |7 d6 Y5 b) _0 R; n
  366.   }8 s7 T, E  C$ `+ z/ m$ `
  367. }  
    / a* t: [* S: P% i; g6 F, W
  368.   3 v3 ^& O( I5 `8 ]9 b: V: D
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ' d* p  |1 |- c6 i/ _7 D1 a  a
  370. {
    0 j7 u) D# ]' n; T
  371.   int c;% r3 M6 o1 r8 W: l
  372.   LPUPDATEFILE file1,file2;9 [; y/ T1 h. P( Q& y' }& N& `( S
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    : a* S' G" |: }& I  K
  374.   std::list<CString>::iterator l;
    / K5 K, Q# v( O$ C
  375. # {2 W  R* M1 G; S+ X: I
  376.   UpdateLocal.clear();4 g' [. k$ F: X  t. S; v
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ' C# C: ]# N  {
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    & Y- c8 E* P* v
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);  _+ x$ A5 @1 `! o0 g
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);) N9 s8 q& L# n# G( [7 `6 T$ }
  381.   if(UpdateFile3.size())1 p. i+ ~0 Y1 y- \3 f' T: S
  382.   {/ h- v8 Z; r! M/ C. i+ _7 I
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    8 [: x% s) L$ }: Z% z: d
  384.     {
    7 S9 R7 e! ~0 A4 P1 n! `
  385.       file2=(LPUPDATEFILE)(*i).second;) L, o. Z: _! |
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())7 A8 s; ?3 e/ E& Q4 G# O, |3 o: T/ ]' {
  387.       {
    0 `: S: }& d3 i) V% [0 ]& A
  388.         file1=(LPUPDATEFILE)(*p).second;  R5 j' S9 T' Q! {
  389.         file1->vers=file2->vers;" L1 R) _9 u4 W. |& X' D( R9 Q
  390.       }- v$ Z+ a1 g+ T+ S2 f! v
  391.       else
    ( ~" w+ ~9 q; O' g( H5 `
  392.       {) ?. i6 T1 I) F  T& h
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 F% r! s! G0 o$ m7 l
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    4 A0 u7 a) S/ p  R
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ E# j' _9 W5 m4 a8 @! z# E2 Q
  396.       }; M- Z/ j! S& J2 N' I) f
  397.     }! `- D  e; p3 F9 W4 R' A2 j( Q
  398.   }
    - K5 T0 ~1 v* }. o! }
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% S+ ~+ R, y) |" Q; X9 j
  400.   {8 l* r& k( m' P  L
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ; m5 X8 P1 e6 ^8 o
  402.     {
    # b& J2 ~$ H+ c3 R6 Y
  403.       file2=(LPUPDATEFILE)(*i).second;
    * z5 B, P; C1 N/ f. t& H. p- a9 w4 m
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! A7 m( i5 s5 t+ |+ q' q$ v9 \
  405.       {
    : |/ C& O3 C, ^
  406.         file1=(LPUPDATEFILE)(*p).second;
    * U; O2 P* Q' w( g% t* k& {
  407.         if(file1->vers!=file2->vers)
    9 X6 l$ L% E3 s( T) K
  408.         {7 O4 z6 O4 K+ ~( B3 A" ]. X+ L
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! U+ Z% T& ^6 r3 Z9 j, f% ]/ O
  410.           c++;
    5 r" i6 E* Q" U; r
  411.         }
    % n$ T0 c1 Q3 a6 g7 R. L
  412.       }
    % F% H: l6 o' e& d1 d' B
  413.       else
    ) j1 @: h" K5 x# W0 T
  414.       {
    + E' \# Q2 Q+ Y! S7 o8 u
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ r3 r9 r/ f% Q7 G6 A4 f: k
  416.         c++;+ m1 ]6 E  @9 u- I
  417.       }
    % I5 {- i. ~! U) I) e9 [) i  {9 I( j" `
  418.     }+ B! C( s) c$ g- H  O* O
  419.   }% G% m  w; E  h
  420.   unlink(".\\DownLoad\\update.txt");6 E& {# a8 t2 p! z/ p$ P+ W
  421.   if(UpdateLocal.size()) return TRUE;) t, n0 X  O4 M' y9 {1 s4 L: `; E4 _
  422.   else                   return FALSE;6 P' Z$ o! _! j
  423. }
    . O5 F1 _4 c, C- z

  424. , x2 G* `' U7 Y$ i$ c
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ; j4 o: h! a8 ]- T
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  V1 a8 \# C  U5 y3 ~, Z) z
  427. # m2 Q1 u( w7 L

  428. 5 y+ h" x5 [7 N. O. K: s, C( y
  429. 1 ^# S, f& I. |  k6 E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    8 M" W, t4 o1 P% J( S3 d8 Q
  431. {. O8 r( q7 B: C; `- F. U
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    : @0 E: D2 f% j  R
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 Q0 e/ g- {  o3 K& k" [" R0 X
  434.   {6 Y: |. M) w( P. N: x' l
  435.     char szLanguage[50];: }" D- O' d* X: `' U
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; S. f- P$ u1 e) I4 S" L
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # R$ O$ e  T3 w6 `1 M3 O  k
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    , n* c0 z5 h/ G1 t
  439.     else                                   m_iLanguage=ENGLISH;- D/ M4 e' h- q3 t: r5 g
  440.     char szRegister[100];
    ' w* x& m: }- `9 c
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! P+ M8 J) m8 K( g- ]& O$ }
  442.     strRegsName=szRegister;
    ; T) X) k) A' ^
  443.     char szPatchURL[100];. ^5 w- T7 K" i" k' m0 V6 ]; u$ r
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : O+ o" k; g& D- p5 H
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" f, u$ B. A3 w, R. k6 `
  446.   }
    9 ^. L/ C! f8 L9 N& B% V" @5 j5 O' v
  447.   else9 l6 l) N5 ?1 b. r% d9 @
  448.   {
    6 ]$ W' R' B( A) L: q( v
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 n$ M4 x5 T- Z3 }% {- r5 U
  450.     strRegsName=DEFAULT_REG_URL;
    ' Y$ @& n1 H! [5 L; h4 Q
  451.   }
    3 R7 b. Q1 F- b  O
  452.   if(GetFileAttributes("hosts.ini")!=-1)- @2 @3 V, F* e
  453.   {8 D4 E5 r2 {# g7 ?1 Z
  454.     char szIP[50];
    0 T$ z: o, Y2 `* a
  455.     char szDIR[300];0 J; C" w  T6 O9 N; {
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))4 s0 J/ b5 }0 |6 C, O" ^5 n
  457.     {/ Q5 T/ Q. N* U& n0 `( g
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    8 {5 A% V6 k. B& Q* [: K& Z6 f
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");* C) _2 D0 i1 l& H2 x
  460.       strHostName=szIP;! i% _2 @* m/ r9 q" p0 b7 I
  461.       strHostPath.Format("/%s",szDIR);) T+ K% j- M: B7 v1 f! f1 E/ S  p
  462.     }
    6 x$ q+ [( h6 e( M, @  U+ Y! i3 E
  463.     else
    + @" Q$ [$ a3 {% |6 l; j) X
  464.     {
      y. A, e3 E8 _1 \  V
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ! u2 n/ R' J0 W; N, U; c7 y4 {
  466.       {
    6 o5 K- o8 j: ]* _" B  P; t
  467.         char szLanguage[50];
    - \/ @" n" E1 T$ i$ C
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  a+ G; \# f+ ?
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- p1 v  v7 Z, B& D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & C* u4 u& A% N& c4 a
  471.         else                                   m_iLanguage=ENGLISH;
    / i/ B# M8 g3 C% T7 o& V
  472.         char szRegister[100];( W( X( @* f) ^) U( p+ o" \
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    * {8 b4 M/ m- ~6 }
  474.         strRegsName=szRegister;
    ' g& c) U$ M* _/ X' e
  475.         char szPatchURL[100];
    1 Q, H% H3 B* {8 L6 A% D! N$ h
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 ~# l: z4 U' K3 K: o
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + V- s+ S  U) ~  U5 N
  478.       }
    ' E) d, C. \+ h" N# k7 s1 ]
  479.       else  f2 Q* i- `4 o+ }4 z9 `8 C6 |! X
  480.       {; ]2 W; g- U2 }) z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & k$ G3 U1 Y, v0 T+ b" N4 X" n
  482.         strRegsName=DEFAULT_REG_URL;! X! m" n" m  f9 I
  483.       }7 r! ?; S. N& a7 O
  484.     }
    7 t5 U# ]8 z0 i6 _4 S
  485.   }
    . u% ~: Q. n+ X8 ]) _7 l
  486.   return true;2 d+ Q9 Y6 Q, t! t2 c
  487. }
    5 L7 M! R& ?4 N8 A# _6 A
  488. ) U! `# m- P/ I+ t
  489. #include ".\ZLib\unzip.h"+ ]/ c0 }+ y+ X
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ( c$ k& N' G- }
  491. /////////////////////////////////////////////////////////////////////////////
    9 e" [( L5 f. `9 _" d, D
  492. // CRevAppApp initialization. `  f* _9 u1 {

  493. 3 b8 n$ d9 `* l) d! w7 q8 H
  494. BOOL CRevAppApp::InitInstance()" t; K2 n" r: a2 S' ]
  495. {
    0 r: e5 n9 Q# A2 }  O
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    / f- Z% H1 v) m4 B$ @1 t

  497. 2 s0 d, `( B& V  K5 F; U' o
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);) V) g5 u7 H1 |0 {
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))) C( U9 G9 F6 y
  500.   {
    8 ~2 M. v2 x+ w) B4 v; R* k
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");+ f# Y5 M+ N1 v0 q# ^" m8 y2 \
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; v% v4 e) k/ P. q/ N- d2 m9 l
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( {1 L. C$ A3 {# G  n
  504.     {
    % Q/ q, Y+ K) G" V: J5 O
  505.       strcpy(szPath,szPathTarget);
    : \4 V' R/ y3 e6 t' ^
  506.       SetCurrentDirectory(szPath);
    7 w" B, `1 Y9 t8 c5 ]; Q( }
  507.     }
    4 r7 a# u6 M0 r. \0 J' N
  508.   }/ _4 B" c+ A0 N2 x; R
  509. #ifdef _DEBUG6 B+ P4 N8 f' ^) k# B/ T
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' H0 ~# W/ C# f5 n' G7 c) Z9 `
  511. #else
    5 M2 X5 d) P! s9 u' t" ~& W5 s
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), w6 I- m3 M. V6 `: W' |
  513. #endif
    0 s: D7 p6 {4 b( c# q" j7 m9 m
  514.   {
    " v3 e0 C3 b. o5 g
  515.     char tempFileName[MAX_PATH];
    - f* g* q. n( @/ p/ q( c! Z, T
  516.     strcpy(tempFileName,szPathSource);
      F3 J, }' B) T- X. Z
  517.     tempFileName[strlen(szPathSource)-12]=0;2 `4 Q! s$ b; |; G( ~" {" W
  518.     strcat(tempFileName,"\\$CSUpdate.exe");/ d2 _/ o* E6 c. W; |" G6 G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);7 ?' e8 J7 q& D6 y# L. [$ Z# D
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);! Q" W3 e" R8 C
  521.     return TRUE;. \; {/ C) ]9 E7 D7 u  J
  522.   }
    2 L# {( t% i5 w- I- i. W& Y1 s- `8 S
  523.   // Nuke 0118: Delete run.exe0 M. n+ x4 H5 Z' M& P% n
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ( x$ d, P! y2 G8 x4 N
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    7 M! h6 o$ Y/ c
  526.   if(!ReadCfgFile("Config.ini"))7 _. p$ @6 T! n# H
  527.   {
    / A' `! c) g; c. Z( T
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);1 o. ~; g& q0 M. R
  529.     return TRUE;7 h9 a& M1 y6 @% [
  530.   }! ]3 u) ~6 S) R7 g1 D. O1 O5 T" v1 m, ?
  531.   HANDLE mutex;4 ~0 E3 H; k- Q' O' o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))) K0 ~8 h; V% J- P
  533.   {2 L" ]; {) R" }- i3 N: i
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)! N3 {) C5 q/ F6 S# U4 _; f3 P
  535.     {
    6 S0 k2 D3 M+ G' F2 ]2 C! p
  536.       CloseHandle(mutex);
    $ t" F$ Q6 Q2 ^: p2 R& g# C* T, p
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);/ V% n. k5 w! K
  538.       return TRUE;
    5 v2 [. h8 o& G
  539.     }
    + \& V" C1 \$ H1 M. g) T
  540.   }  " `+ k7 f! ~+ h; v6 X
  541.   CloseHandle(mutex);' I' \: h& k2 Z$ O+ Q% w% N

  542. & {" M% ?: W; _; z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    6 g: c/ c9 Y* l# ^

  544. ) c. K) V, h+ X! F3 a; t5 a: A' K
  545.         AfxEnableControlContainer();
    5 j8 [( H4 e) ^+ T; `

  546. 3 g, Y) b4 g9 K  f
  547.   bCanUpdate=FALSE;
    & K5 B4 R0 b' f9 }* ^; e
  548.   dwStartUpSteps=1;/ o% R9 y0 A1 E5 `
  549.   dwProgramState=AP_NOTHING;0 m! V& q2 f9 {; f* K/ X9 ?. p" Z

  550. 1 ~) |) m1 x  X  ~% d0 k$ \1 O
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);0 K3 J8 s1 Z& T- r7 x  J5 V

  552. / t/ J! m' G6 R$ L4 o1 r
  553.         // Standard initialization- h9 \5 z5 J& U+ a0 `
  554.         // If you are not using these features and wish to reduce the size
    6 ~4 K/ l& ^& I& b; I
  555.         //  of your final executable, you should remove from the following9 v. e9 l1 G; T8 }6 P  z5 j
  556.         //  the specific initialization routines you do not need.
    4 Z4 r% I0 g& I% T9 r
  557. * ~1 F  g+ D) R7 k
  558. #ifdef _AFXDLL
    6 `" B4 N2 Y+ G
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    1 E. Y# C& ]' h, P0 {' s
  560. #else. o- Q5 Y" T" m, }5 e. E
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically5 t8 [6 C8 ?  h
  562. #endif
    / q& C3 o. [' B- l: q

  563. ; W- N7 T" w" {4 `# K1 j9 \4 q2 l
  564.   dlg=new CRevAppDlg;
    9 N. O9 g! k6 w' }, m+ P
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    * Q/ \9 K) |  E: L8 M3 I4 j
  566.   dlg->ShowWindow(SW_SHOWNORMAL);  U/ X- K! W: Y. k. C' @8 L6 X# r/ ~
  567.   m_pMainWnd=dlg;
      w! t5 I  j% ~( [+ H# S
  568. " r' n& O4 Z9 Z3 p" f, |% l( G6 Q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);+ Q  D# N/ r5 ?1 X1 r; K
  570. ; R9 M8 D9 f( s  ^) ]
  571. //  GdiplusStartupInput gdiplusStartupInput;- Y( o; v! h3 T2 z* z3 ^0 e/ n. i7 X
  572. //  ULONG_PTR gdiplusToken;6 R8 }$ U- `, a
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    . j# j. s; R+ x0 [0 Y

  574. 2 }7 B$ v, E5 q  Z- F* I0 W
  575. //        CRevAppDlg dlg;
    * k; |- G# J( x
  576. //        int nResponse = dlg.DoModal();1 m' G9 Q, M9 k  ?" w2 N8 j
  577. //        if (nResponse == IDOK)' M& o1 Y8 {& K3 w
  578. //        {, Y$ [" |9 c/ N. f! y. H: Y
  579. //                // TODO: Place code here to handle when the dialog is
    / [4 q& p) w3 S: ]
  580. //                //  dismissed with OK/ `! ^1 O4 W6 Q/ g9 W
  581. //        }' q: d; O& @' Z# E1 h# R3 P$ k$ O
  582. //        else if (nResponse == IDCANCEL)
    . w% k* ~% k) w! v  ^4 W
  583. //        {1 V( N) K! u8 K
  584. //                // TODO: Place code here to handle when the dialog is9 i" e6 K3 c' i0 B* N0 R* V5 B
  585. //                //  dismissed with Cancel
    1 f2 n/ V% V. \* ~2 x2 _
  586. //        }
    ; K) V7 W2 z2 f# c4 R
  587. + @% Y* V5 I! i, M
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    $ H( e  {1 l9 C) Q, @
  589.         //  application, rather than start the application's message pump.
    2 W1 _8 v' |( A
  590.         return TRUE;: E; Z) @0 ~. Y8 g* W4 Q
  591. }( [* X* ~9 o# P; P7 r- r( N/ V
  592. " d$ M% i, V3 a0 n( P/ j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)" e1 F: ]3 A6 n; N! a" F4 f  {
  594. {; [+ m* f  N5 u2 g0 g$ H: c
  595.   int i;" U4 A5 j! J/ v3 W" z# `! G3 X
  596.   char *szRet;
    ' l( N. L- ?$ q7 A3 Z

  597. 6 o# B" Z0 r& w0 [0 N7 X
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    & y2 Z1 A! u" N, r7 Y( c
  599.   if(sztoken)  d0 l8 v$ ?, s  L0 W: L" U
  600.   {$ O# p( k! `, `8 q2 p
  601.     szRet=&sztoken[itoken];; y. j, F  w  L& j( `; D1 l
  602.     while(sztoken[itoken])
    5 ]* S  h, v: l. M) D+ j
  603.     {
      q0 ]3 X6 O' \6 P7 F: Y/ ~& h
  604.       for(i=0;i<(int)strlen(token);i++)
    : q" h* j( S& J2 }
  605.       {
    8 i/ R$ Z. J% L. C0 `# N. F
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])0 X  G. ?( W% y. W; R, O' r
  607.         {
    * M7 ^( F. B1 ]! H# b/ f0 H% S
  608.           sztoken[itoken++]=0;
    4 X+ x# L# ?) L' b% r+ N
  609.           sztoken[itoken++]=0;
    . X1 m4 J, S& N9 @9 U9 l1 V- j
  610.           return szRet;
    / }4 B' V' C+ x5 ~
  611.         }; T3 ^  i" A! y9 R2 v7 c
  612.       }
    * C- z/ B! V% L# T
  613.       itoken++;
    ( ^4 O+ g- f/ y, L2 x) k
  614.     }
    ' [1 x* Q4 s2 P& r
  615.   }, {' `' c8 f4 W- Y- |& b& L
  616.   return NULL;
    6 D' ^3 L. U* c6 d- T
  617. }
    4 L5 S" R/ Q' ]- K' f# ]
  618. + L# u! t! F( f; n, Y
  619. void ProcessProc(long Total,long Current)$ k8 L3 `8 M: m! F$ V1 e3 [  \
  620. {
    - v# s' C. a4 v$ G+ J
  621.         MSG msg;
    9 K; V2 c1 _& v. f2 o, z
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    4 T0 f8 v" y8 Z# s0 u+ i; |( o
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));( e5 B9 L* \6 ^$ Z+ b/ Z, Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    * r2 S& G' m5 I) n% q9 [
  625.         {' e4 q8 ?& H1 ^0 r; [' Z
  626.                 if(!GetMessage(&msg,NULL,0,0))
      |+ x/ }5 ]$ O1 R
  627.                 {
    ! x& |# k$ x1 v3 ?% g
  628.                         return;
    " T8 R3 ]! v. y: z8 D
  629.                 }
    8 N$ d+ D2 t! G/ q) q* x8 C$ p
  630.                 TranslateMessage(&msg);, k- V8 V$ V3 l/ m- |2 V* E
  631.                 DispatchMessage(&msg);9 A; K! a. B; Z, T/ D
  632.         }        * S2 M, }1 Y1 b
  633. }9 W% {9 T' X: [9 P3 p' P
  634. 2 C/ a7 ?' O( ?, J
  635. BOOL bFirstChar=TRUE;
    - j0 Z4 e/ ^% Y! g/ y( |

  636. + d4 U- x* E, v6 L' K- o' c: p
  637. BOOL CRevAppApp::OnIdle(LONG lCount)5 ~' _( r$ @! w+ u" ~  L
  638. {
    6 f2 d7 G$ ]7 t  D5 f. E
  639.         // TODO: Add your specialized code here and/or call the base class
    4 S' U4 s, ]2 |# e- {; D2 a. z+ u2 K
  640.   switch(dwProgramState). ]) S4 L, }  ~; H
  641.   {4 r7 a: t* [0 r( g
  642.   case AP_NOTHING:
    ) C+ B3 b* N" o/ g" P6 G  [
  643.     switch(dwStartUpSteps)& }; ^# c$ W- z5 W
  644.     {2 i: G3 H3 N- W4 W- f( X( B
  645.     case 1:  U5 d5 _+ ~; q; C
  646.       {
    & x4 Q1 H2 p2 P" N5 T% G
  647.         int i;
    3 Y  i6 X- `6 z# p# b  A& T
  648.         CDC *pCDC=dlg->GetDC();
    / m2 i7 K4 e# G0 ~
  649.         HDC hdcwnd=pCDC->m_hDC;" G1 [/ v- b" \$ u* R( [
  650. //        Graphics graphics(hdcwnd);
    - K8 ?5 ?' b; }- Z/ ~1 G0 S' F0 @
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");% `2 i6 t4 z6 o7 E  {8 z+ C2 S% h
  652. //        INT iWidth=bitmap.GetWidth();* D& o& o* j3 Q. K  f& Z+ W
  653. //        INT iHeight=bitmap.GetHeight();" `% _0 v. M+ @" A4 i- d
  654. //        Color color,colorTemp;6 c+ u; d' B' m: E* ^
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    # A* T8 w, O- F( P; g
  656. //        {5 `6 o- }0 O( o; m1 }9 G
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    8 U" ?0 I( f; ?6 \  ?' h4 U
  658. //          {  y7 R& A/ w! H8 c4 w
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ; M- l7 x! f& A4 k" Z
  660. //            colorTemp.SetValue(color.MakeARGB(
    ' \' _' c8 c) }4 n4 S
  661. //              (BYTE)(255*iColumn/iWidth),; T8 B1 o! p, l' _! W$ r
  662. //              color.GetRed(),; B0 i3 g: M1 o8 J$ N; r: u! S
  663. //              color.GetGreen(),5 ^5 f# L. f/ ^# z* m0 a. L/ E
  664. //              color.GetBlue()));
    , J  ?0 }5 r9 P0 P; d8 }- L5 F
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ; p; q1 A4 o$ r$ l9 Q: v. f
  666. //          }
    " `1 j9 `/ E; g! t; X# z: |1 L% Z
  667. //        }
    0 i( @7 K/ W" P7 g( ~: o
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    8 \$ J/ U5 b0 w" }; V# [
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ L7 O; Q- `1 H7 ?* L  ~( [; n
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    5 D! z4 k% I1 |7 q7 e
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % [+ q" D3 h4 V3 g0 {% Z
  672.         for(i=0;i<240;i+=8)
    ! o" T" `& Q" @7 p3 U. \2 h! E
  673.         {
    * O. q; w1 l8 m/ d7 W: b$ I
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  D& i* T. g$ h
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + |3 i5 n/ \8 i- ^/ L3 R2 ]$ v
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . F. b( y2 m& J1 n5 O8 ?
  677.           Sleep(33);
    7 S/ t/ Y" O" }. G2 T8 r, {, C, n
  678.         }0 ~: }9 `) J3 [" q
  679.         Sleep(1000);. M5 |- e( H2 U! `* y& U9 b
  680.         for(i=240;i>0;i-=8): y# ?0 t" t  v. v
  681.         {+ U4 a4 _& a9 a  Z8 w, o4 W
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - N2 d, U; y) [4 t
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * Z1 |' u3 l! x3 J- }! r7 G  r
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% w+ Z) i( ]& L
  685.           Sleep(33);  x+ o+ H$ Z& X3 f
  686.         }
    8 ~) [) j3 r1 C( S' D
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);  B# x4 y, @0 t
  688.         dlg->ReleaseDC(pCDC);* W6 b: Y2 o/ T
  689.         DeleteDC(hdctar);1 W! f' `- \, h+ b, l
  690.         DeleteDC(hdcsrc);2 \* K' z6 _7 N9 T8 n# U. e
  691.         DeleteDC(hdcorg);
    9 Y- v4 l3 }& ?3 A% @
  692.       }
    * o4 l5 _2 A& x) Y0 ?- O
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);$ i2 q' [1 A; S
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ! b% N8 t- g  y3 m8 i
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");8 k  X1 n5 |. U. r* O9 T4 D7 d
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( O* }2 z5 t! ~0 I% p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & G  P) B/ L8 L+ w( T
  698.       if(!Dn.Connected())% p* e! ]' J1 R+ q3 A1 E5 V
  699.       {, |! Y8 r6 q1 j' v- z5 U
  700.         dwTotalFiles=1;
    9 Q" k  g' {4 |! C' r8 c
  701.         dwDownLoaded=0;" @. r. O, J, e2 }5 Z  p2 |. \
  702.         bSilentStep=TRUE;/ L% N  G2 m1 v9 O+ B3 S
  703.         bCompressed=FALSE;
    4 ~( P5 ~- D7 L6 ~- m
  704.         strExtLocal.Empty();
    ; F; s5 F3 }  q4 W6 s- B, ?
  705.         strFullName="readme.txt";4 Z( g( y% l8 N0 `9 ^, h' o& A
  706.         dwProgramState=AP_CONNECT;+ r; ~$ A; W! u) Y& n# R. L
  707.       }
    5 X1 l9 t0 {, a  F4 m
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();0 @- y2 f9 Y! j
  709.       dwStartUpSteps=2;
    2 X' }' |& `! w7 k
  710.       break;& B# j3 T; j7 a5 m7 I! I
  711.     case 2:. j7 P4 P& K( M$ X6 p
  712.       {
    5 j+ @$ r, K& U3 M9 E, t% F; F3 i
  713.         int iEOF;
    # T+ y' x7 n4 R
  714.         FILE *fp;5 Q7 F  Z# \3 V6 K3 o% i8 c
  715.         char szString[512];" c7 w: _2 G! T$ @
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    , ~( E- i" R% i- X. O  K$ A
  717.         if(fp)2 O- I. W+ Z) m8 J7 L; E/ g
  718.         {
    ! G4 r  S8 S- k
  719.           do
    8 e- q8 v! Y+ f3 w. F8 C
  720.           {
    5 B2 x% f8 K/ C' J, G: y1 e
  721.             iEOF=fscanf(fp,"%s",szString);
    ! T, B0 n6 F* t
  722.             if(strlen(szString))" L8 I# ]0 `; L* K' T+ z5 z
  723.             {$ _( `7 }5 f$ Z! I
  724.               if(bFirstChar)
    1 r5 n6 ?4 g- d/ J- V# q" ?0 ?
  725.               {, K1 L1 n& x$ C, t4 L$ ^
  726.                 bFirstChar=FALSE;
    4 m2 R( b& z: \& b! Y
  727.                 bConnectIsBig5=FALSE;
    ( v1 _0 N( z5 j
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;# C3 ?8 o5 v8 O, l0 @
  729.               }5 h  U$ Z: \, B+ {; T
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    8 v. a# n2 V5 t% y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));0 f8 _( j+ h) F
  732.               dlg->m_ListText.AddString(szString);
    0 Z& ?/ A: Y* x
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% e+ }7 L5 T% i* A8 P
  734.               *szString=0;- a% ]2 ?, A' ^4 A; O# B
  735.             }
    1 [4 w7 E7 T; n8 b! F
  736.           } while(iEOF!=EOF);
    . g! c  X' j! _
  737.           fclose(fp);
    5 l  `5 v2 M6 x3 N' W& X  {
  738.           unlink(".\\DownLoad\\readme.txt");$ T, _6 C% p! }* q4 B8 ^9 ^- O
  739.           dwStartUpSteps=3;
    + A' E  M" F1 ^
  740.         }
    4 ]" g3 V# d1 F) b( L
  741.       }8 \! K5 v8 ?4 P* `( O4 z/ K% h
  742.       break;
    0 k9 w" P; x5 v% A) h1 z. [& W) U
  743.     case 3:
    # D6 [6 G) ?8 ^/ j4 d
  744.       if(!Dn.Connected())9 \9 |( ~3 k8 j# {; i
  745.       {% l. G/ g3 A- Y1 M
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    8 }' m9 g( Q2 `
  747.         dwTotalFiles=1;* q3 o  B: X+ i% ]" Y0 q
  748.         dwDownLoaded=0;
      s0 j. Z3 T: Q6 L, P
  749.         bSilentStep=TRUE;
    7 ~7 l5 ^: V' u& j& [
  750.         bCompressed=FALSE;# t5 Y  o0 l" b+ j3 r9 f, Z
  751.         strExtLocal.Empty();7 v" A( g$ J1 V! z! S5 t
  752.         strFullName="checkversion.txt";7 g% B% q& f; j3 J8 b# a9 Z
  753.         dwProgramState=AP_CONNECT;
    " r4 d9 @! a7 U8 w+ \
  754.       }8 r  b" ^8 R& e( M
  755.       dwStartUpSteps=4;
    ! N+ \, }1 ~3 |, S
  756.       break;7 E/ w" l. t5 T" {# `) Q0 Z% m
  757.     case 4:
    % \1 ], g' C" L3 R
  758.       {1 e  b/ J* g2 O, p
  759.         FILE *fp;+ z0 ?- ?! O, @- x8 K* V5 ?3 p
  760.         char szString1[128];/ V& b# ~9 }/ C0 D
  761.         char szString2[128];
      G" U2 C% _+ `" S: Z3 n/ u
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");& K+ |8 y! l2 u. K
  763.         if(fp)1 L2 [+ c2 X$ \2 ^5 x% N& t
  764.         {3 V7 ~9 ?7 q# i7 }! p. l4 w
  765.           fscanf(fp,"%s",szString1);
    9 q$ @- N9 k5 f0 z* G! [
  766.           fclose(fp);
    0 b4 K( a% R1 T
  767.           fCheckVersion=atof(szString1);) F& R7 Q& @, r/ Y: S
  768.           fp=fopen(".\\checkversion.dat","r");
    & D& J+ v. D9 f- s) h. ^  j
  769.           if(fp)+ p; S% @+ a; o2 K, i1 N) o" G. W
  770.           {8 X$ L( Z5 v' B- _3 ~
  771.             fscanf(fp,"%s",szString2);/ [5 |' [# M5 w2 _. l7 ]) X% ~
  772.             fclose(fp);
    " m) {4 D: v. d
  773.             if(atof(szString1)!=atof(szString2))
    8 e' e3 _& D. r0 y
  774.             {
    - u" P6 k- f7 b3 B5 K8 q
  775.               if(!Dn.Connected())* F' m& _' ^  a; X
  776.               {
    6 X* q4 O7 F( X9 S/ {! o1 E
  777.                 bFirstUpdate=TRUE;
    & `1 Y7 Q# _" F( o
  778.                 dwTotalFiles=1;& ~5 v1 D1 L  d) L
  779.                 dwDownLoaded=0;
    0 i$ Z  p& u9 q
  780.                 bSilentStep=FALSE;
    / c4 B* ~9 s" @/ v9 T; ?5 H% g5 R
  781.                 bCompressed=TRUE;
    , G4 S1 [/ g2 Y( L0 {5 W9 E
  782.                 strExtLocal=".\\DownLoad\";" C# `$ }3 S+ r- g3 _
  783.                 strFullName="update.txt";) ^/ S7 X3 E/ S1 J# G# W
  784.                 dwProgramState=AP_CONNECT;# {8 b) S2 n) j4 O7 j, @4 c
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ l3 a' f& J4 v8 b" r" f
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " H+ A2 W' Z; E. B3 l6 w
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");! R, a- o+ Y: [8 e$ h

  788. , a( I1 @6 {" _
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 _% A" p; V- Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    : m3 @% @& U& H3 v- \  a
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)" _, L5 c& ^; V, W
  792.                 {
    4 }+ W& t9 o0 J+ Z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");  C% P$ Y: k0 ]3 E6 ~5 ]
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");% v: c- u  v/ U% g
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");. R7 z" R2 m  _& w# \7 g
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 k" Z  H( a, R9 S
  797. 0 v4 u/ k2 P- r6 F
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- S0 X  r# f  Y/ {# q; L4 T
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 j( V: d& n% L( X# Q7 ?
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 M+ b# U1 R4 v: L  k
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 C, e+ m; `7 L, M# M  r3 B+ Z
  802.                 }$ a2 r: d! X: S$ ~0 \
  803.                 dwStartUpSteps=5;& G! [) d) T3 V) T
  804.               }" V% i0 N" M* e( B4 T+ U
  805.             }+ ?* j- b5 l# \3 _& e9 I. K
  806.             else
    8 _) ?; V# y# g2 j4 D) i: M0 |
  807.             {
    & s' \) k) A1 J
  808.               unlink(".\\DownLoad\\checkversion.txt");
    7 ?/ M7 k4 c& y1 g8 R. ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");, T8 d8 `9 \7 A( _% R6 R
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    0 f  h" \1 R$ e) J; I/ z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");: W- T4 b# D- ^3 w
  812. & n9 E) H$ l2 L+ T: S# q  G9 `
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, ]' s& s! h! T* |* Z
  814.               dwStartUpSteps=99;( q) H/ n  I* \, G
  815.               bFinishUpdated=TRUE;+ c4 J5 C+ h0 }$ o0 _, D
  816.               bCanUpdate=TRUE;) g. V1 J. b2 u* E6 g
  817.             }
    8 H7 p6 E1 K6 {* T
  818.           }& k& q1 S3 S! @0 F4 [
  819.           else- F3 ~* C2 `0 C( E
  820.           {
    - H$ e) @# Q% P( O7 J7 S& L
  821.             if(!Dn.Connected())$ R) u# J0 K" F; B7 Y
  822.             {! u3 M5 h. k( b! R9 [8 t+ {; P
  823.               bFirstUpdate=TRUE;
    * n- }7 e7 Q% q# _6 L
  824.               dwTotalFiles=1;/ r2 Y6 ^* ]6 N
  825.               dwDownLoaded=0;
    : a! C2 J: p6 R9 \3 A
  826.               bSilentStep=FALSE;
    1 A9 Q9 a) p! G& X
  827.               bCompressed=TRUE;! i  S# F4 }7 E" d. b& X- d
  828.               strExtLocal=".\\DownLoad\";
    8 I2 L/ }# e" \6 n& c$ l6 ?
  829.               strFullName="update.txt";
    3 T3 a% R0 z; R8 x% G. e
  830.               dwProgramState=AP_CONNECT;
    ; B: W! {4 d& `; H. c# T
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 h: c* j% a5 g
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");! _( ?5 W3 v6 {5 w$ Q! i% b
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");; j; O# }9 a. S: c
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ P& j5 r' o# P7 j
  835.               unlink(".\\DownLoad\\checkversion.txt");
    $ v9 C- ?' f/ o/ Z7 [
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    $ h9 E/ D6 z, W  ?; g4 Y
  837.               {* G: w  D$ o, q  f
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");1 [7 T5 {; `5 X7 }8 ?; X
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");9 b" V/ I$ h1 ]2 v% D
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    8 a. U' M" v( C/ n( j
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 T* k2 f* v& x: F2 h- ~  X) y( m
  842.                
    9 E6 E: K" O( R/ o* [$ \7 c
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# P2 q" x: t. _) r1 V
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) C! W* Z: M6 Q1 O4 w
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 z% c5 z0 E1 w' t1 n% F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 N) @  e: H! V; ]% n* p1 Z
  847.               }2 [& p& ^5 w. W" I3 C
  848.               dwStartUpSteps=5;& e/ K. {5 N# W' H, Z3 P
  849.             }# L: V4 i1 d0 c. b; b7 r" T6 a
  850.           }. i# c% b3 s: P/ t. P. \: E
  851.         }  z4 m+ `2 @7 c; R5 r& J: C) q
  852.         else  X* i/ S+ l8 g1 j
  853.         {" H, E7 N3 E. i2 P- O" w
  854.           dwStartUpSteps=3;- D! ]6 e% V. D" n6 s1 S. p
  855.         }
    6 t  ?, T4 l* C9 I+ k
  856.       }! X  x; w- B7 n- R4 D/ h: F
  857.       break;5 \3 m" g3 ~+ L$ J
  858.     case 5:4 R) d- H7 c. |7 A7 d( h
  859.       {6 o; u+ M; r& [" @5 K9 [9 [
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)/ W3 M: b* ]2 C, y3 L5 M& [- }  V
  861.         {1 o! [2 I; h1 @+ ~+ d( g
  862.           int opt_overwrite=1;
    ! F. e, s: t: F5 M  a% S
  863.           int opt_do_extract_withoutpath=0;
    2 F9 T3 B) v- J7 ]* g8 x! W1 v& _" u
  864.           unzFile uf=NULL;* \& l+ C% ~5 |/ w8 u

  865. 5 c# M  ^* J# o3 l* U
  866.           uf=unzOpen("Wsa.zip");# o( f& E' w& |
  867.           if(uf)
    # Q) p, y. o) h
  868.           {
    9 u& [8 s+ {* c) V( M6 I& f9 a
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);) N  H+ s) A) r8 m+ Y9 ]: c
  870.             unzClose(uf);
    5 v( g4 Q' }. {( v' \' Y' w
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 f* m6 U5 P0 x1 L& r3 Y: q! @
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    , ~+ a- b! A% S$ t' ?. p6 D
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    * T% |8 L( S. q0 r# M0 d  y: H- {8 r3 [; v
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 y7 ]4 {2 h  }+ b2 ?5 n9 T
  875.           }, a2 g6 k; x) D
  876.           DeleteFile("Wsa.zip" );6 L3 Q" f; u' _# i/ Y
  877.         }- T" X: V% t6 A4 d8 F4 F5 r; @

  878. . }4 q2 x  U$ O; t- _$ ]" {
  879.         if(CheckLocalVersion())
    " L& U2 n) J% y6 C( ~1 W
  880.         {
    - U- [4 N* T: ]" m
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");4 e- p3 k5 Z7 q$ T
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    7 E0 y: W6 j0 ~$ r0 W# }: D; h: r
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");5 K6 R8 n  r( o3 b
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 i/ r' m) e- [8 `" f0 M
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ) ], ]( ~9 z# Y* I5 V, Z' B1 J
  886.           dwStartUpSteps=99;, S8 H$ R3 [# X  h0 q
  887.         }
      S" r' O/ c& I6 F8 s2 ]
  888.         else
    $ x7 `" l; h7 j
  889.         {% o8 Y# f& E" T3 M  S* s1 d
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& K9 P- U6 @7 f" j" Y( Q6 d
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 F8 C" O7 V" x9 u5 h/ K0 X
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 b5 r, Q3 q6 N) C3 l9 O. \

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

. w& h2 r  {9 u  \7 e7 b
3 s7 F' e/ y: S" k9 d

評分

參與人數 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, 2025-12-5 14:52

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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