找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式

% a! ~3 \. e  a) n$ w1 E$ w0 ]! h
  1. / RevApp.cpp : Defines the class behaviors for the application.5 ^4 ?7 R* s( F: a% Y3 b
  2. //  K+ K$ G9 ^) A# W4 c

  3. 8 w! O/ V% J5 k- ?9 B) I7 z+ q
  4. #include "stdafx.h"
    2 O; Y) l. Q7 i2 N1 ^2 Q0 E

  5. 5 {9 A* D1 V8 Q4 Q9 M. h! C% J! \
  6. //#define UNICODE
    2 u3 Q' K0 ]5 t
  7. //#include <gdiplus.h>" N3 ]! y2 s8 K4 S. {! E$ c
  8. //using namespace Gdiplus;
    ' T- B9 ?" b( I! y1 w' V: [  v
  9. ; b& t% l- e$ \4 ^7 v
  10. #include "RevApp.h". o) g% c& @4 H* N5 p' _9 I9 T' U
  11. #include "RevAppDlg.h"
    + Y2 y$ ~  Z$ t# F

  12. " g# l8 h- k, i" h& I
  13. #pragma warning(disable:4786)
    7 s9 @4 M1 |  Q( h! ~7 O% x: D
  14. #include <map>1 ^4 ]5 I0 d. ^& r; b: K
  15. #include <list>' r# a# f9 G( i8 ?
  16. #include <direct.h>3 e3 J- v/ V, C6 w
  17. % x, Q2 U  a, x2 y4 N$ ]) S1 t
  18. #ifdef _DEBUG8 T4 `. R- W1 s& E( v7 B
  19. #define new DEBUG_NEW, Y# l# I) d4 u, n
  20. #undef THIS_FILE$ ?! d  m2 y% i' x: G6 z0 o
  21. static char THIS_FILE[] = __FILE__;
    - E7 A  }+ p! I1 q$ p' E
  22. #endif% p+ K# R& E, z) g4 h2 \% g
  23. #include "SkinResDef.h"8 }: ?/ w# f& k
  24. #include "ChangeBG.h"
    8 l" K( V( M% Y4 q: I8 [1 x
  25. #include "AFXINET.H"% b* S- t0 N7 d( L

  26. : A2 y9 |# z( ~" A1 a& s
  27. #define TRADITIONAL_CHINESE 0
    5 v* q, t0 k' R2 a) {
  28. #define SIMPLIFY_CHINESE 1
    & u; I  C6 I1 y) q+ G: g
  29. #define ENGLISH 2
    7 ?' x! Y# s5 v' x* ]; S
  30. int m_iLanguage = ENGLISH;; {! h" s5 G1 n3 D' b7 E( L
  31. /////////////////////////////////////////////////////////////////////////////- m, S: I( E( T+ K7 [( b
  32. // CRevAppApp- m# ^; b7 A) ~( d5 P% G% a

  33. 7 n8 x$ Q! c* k0 Q" P0 n
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ) M0 z* w% |$ B. W/ R$ ]/ T$ i7 `
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ! z3 d" K- ]2 {3 O+ x0 Q2 f
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    2 D+ h5 J& u2 F# q, [9 j  p
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    0 T- |( f* u5 M2 i+ u
  38.         //}}AFX_MSG
    4 h5 V9 r, \3 L- b* A9 G- q4 A" a
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp): [+ P, [* c) {( s- v8 f) S
  40. END_MESSAGE_MAP()
    7 }, c4 m2 ~( u
  41. ' f1 Y; O1 `  E, u" V. z1 k* G
  42. /////////////////////////////////////////////////////////////////////////////
    3 [  U. D" t+ c3 i! a
  43. // CRevAppApp construction8 V7 w2 B5 O# Q" d$ A  `
  44. ) }: w+ a* \4 d. ?
  45. CRevAppApp::CRevAppApp()! y6 ?- x: r+ g/ ]3 T
  46. {% {) C$ W9 q' n) h4 E
  47.         // TODO: add construction code here,
    8 I# Z% d" n5 q4 T9 h1 B  f* ?. K7 @8 v
  48.         // Place all significant initialization in InitInstance) O4 t" d/ n% ~3 p! q7 I9 v# @2 M! s
  49.   bDisplayIsBig5=FALSE;. ^: ]. ?, e$ U  f. D" J
  50.   bRestartUpdater=FALSE;
    6 N' Z$ U2 Y; B2 s. k0 a
  51.   bFinishUpdated=FALSE;
    ' C* [' T% N" Z9 @8 L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;' i7 I* q# _, Y9 N: `9 G; L* Y
  53.   InitChangeDataBig52GBKS();
    2 W" [* p& A' D, w/ L1 d
  54.   InitChangeDataGBKS2Big5();
    + i7 J1 Q+ q. Z
  55.         //
      I+ r2 r1 r1 @
  56.         bClickRunExe = FALSE;' o$ m9 n/ E  s! {  ^* A
  57.         //
    + N& l5 l0 F2 _
  58. }
    1 d: [1 W9 `9 h

  59. % u' G6 [* S$ s5 M" L+ I" F
  60. CRevAppApp::~CRevAppApp()
    6 e, y' q2 H8 R+ g% Z7 E& N5 E
  61. {
      M4 r/ D4 `$ T6 d5 m
  62.         // TODO: add construction code here,
    3 E$ ~) ]. E8 h. p1 U
  63.         // Place all significant initialization in InitInstance& N- ]( a1 `, u3 r: Z/ h
  64.   EndChangeData();6 t2 J- p: l" Z( s% u2 E
  65. }4 b+ T. j/ l0 o" t# l3 P
  66.   j! {/ H* {0 p( k& v  A
  67. /////////////////////////////////////////////////////////////////////////////6 c" m; e: S% i+ U
  68. // The one and only CRevAppApp object0 e; {- P; B; P7 K% {0 ?3 `, Z

  69. 0 ?) B/ Y- B. ]0 D0 n
  70. CRevAppApp theApp;
    " S- Y- ]6 Y& q! k; x: z+ l1 w

  71. ; l' R* {# a. o, j, }  p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)6 y+ h9 F" Y$ E7 c; z. w0 Q
  73. {/ o; h$ Z; s8 Z3 Y( D& G" R
  74.   int iEOF=0;% M5 U  V" G6 N& u3 [" ~/ V' f8 B
  75.   char szTempName[MAX_PATH];
    1 f3 Q4 p3 K- V# }
  76.   *szFileName=0;4 I3 \& p  k  Q' O4 ]& V# X( a
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ; _/ W8 r8 ?  |: D
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')4 G: U5 [$ g: [7 R
  79.   {
    " ^$ V; O0 \, O
  80.     strcpy(szFileName,&szTempName[1]);
    ( H% r5 _. N6 W( W, D9 Y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF); n/ x+ j' X5 _- g& B; `# {6 c" o
  82.     {' q* f& U' w& H: Y
  83.       iEOF=fscanf(fp,"%s",szTempName);0 z7 `2 p& g9 y, H+ g5 u
  84.       strcat(szFileName," ");
    4 d; ~0 a$ |- m. P2 Z' D+ h
  85.       strcat(szFileName,szTempName);2 g, a2 T" J/ D
  86.     }; c3 u" ?$ ?1 I6 ~, X0 o0 Q" U2 Y
  87.     if(strlen(szFileName)>=1)+ r0 b  q$ @/ h/ y
  88.     {, t( j8 h2 r  C( E5 s9 S( [/ O! p
  89.       szFileName[strlen(szFileName)-1]=0;2 g9 ~4 H! U! h, s
  90.     }8 [  p' M& K2 L/ I) \* m+ C! e$ |5 m
  91.   }
    * ?3 ?4 w5 F3 M5 G9 o
  92.   return szFileName;
    % [$ D4 H/ w) W$ q: M
  93. }: b9 X; G% k& S0 p

  94.   p/ H3 ~' U) Y9 u, t
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)  P# V/ w+ V3 ]5 X' V9 F- Q
  96. {
    + X; q6 o; l! F* r, |$ Z. H
  97.   FILE *fp;" F( B8 A. M* u9 [+ N& I  K4 S
  98.   char *key=NULL;
    . ?  W* ]8 Q4 I! _- p% W5 H
  99.   char version[MAX_PATH];1 v. Q; Q! N5 F' y4 H8 D
  100.   LPUPDATEFILE file,olds;
    6 S, |, i; T' h
  101.   std::map<CString,LPUPDATEFILE>::iterator p;, C" y/ v7 f0 x  G4 N& \
  102. + _* @4 }: P; ?+ p' N; f! k, s
  103.   UpdateList.clear();+ g! z6 @' `7 C+ _, C4 @" s+ T, V
  104.   UpdateFile.clear();
    : Z/ C4 b  W6 ^9 F
  105.   if(GetFileAttributes(filename)==-1) return false;- |4 d! e8 V) u6 H- \& d
  106.   if(!(fp=fopen(filename,"r"))) return false;
    1 M, o# S+ N- W3 a* }
  107.   fscanf(fp,"%s",version);& U, _$ K+ ]6 T& f) I
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }8 d" d% u2 l& z& b8 U
  109.   while(fscanf(fp,"%s",version)!=EOF)
    5 Y8 n* X% `8 {
  110.   {
    ! E) a4 C5 n) v/ F+ }  A+ q: I
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 Q9 x' X6 u# L
  112.     fscanf(fp,"%s",file->path);
    ( v& @" k! A/ Y' R. f( ~1 ]
  113.     ReadFileNames(fp,file->file);$ T: L6 Z- N; |4 V" q) x( d
  114.     strcpy(file->full,".");
    5 ~1 `  Y+ n% w3 q, O
  115.     strcat(file->full,file->path);* p$ u3 E3 z1 }  ]+ }- I: ^
  116.     strcat(file->full,file->file);
      H! B' R3 M6 k/ u, y  p
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())0 K7 l4 F) k" i" L" t8 l
  118.     {
    3 p$ Z. J  T. o3 E$ k
  119.       file->vers=(float)atof(version);' d5 o. `% c$ U$ H% P. \
  120.       UpdateList.push_back(file->full);
    ; c/ E3 A/ w" f$ b) u
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));( j, M( Z$ `- h" w! m! |$ P% f$ C
  122.     }" {$ h8 O9 c" _1 L& n
  123.     else3 `8 Z& J+ T+ B6 `8 \) W
  124.     {
    4 o/ U. L& h6 {1 D9 A: u
  125.       olds=(*p).second;
    ! _+ d" s+ G! X. R' k$ [
  126.       if(olds->vers<(float)atof(version))6 V( @3 c7 p( D4 {  e) a" a0 w
  127.       {, U9 j4 Y4 H) d. v' }
  128.         olds->vers=(float)atof(version);3 G8 N& m$ A7 `; \4 B
  129.       }
    ' G& O; x- v* I% P% l1 y1 `
  130.       free(file);
    ! T( ^: m) [0 M
  131.     }7 x4 W# a( f! d
  132.   }- j$ c( a7 r% ?. r# a  u6 |
  133.   fclose(fp);( H! Y1 ]- V: ?/ P
  134.   return true;( P+ g5 V4 z$ q5 m5 C6 H
  135. }
    % S4 ^7 k1 e/ Q3 w% }

  136. % e5 E& x2 z& y8 D5 l
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  y0 T6 [' c8 c# U: A
  138. {6 Y! N4 [# P% a
  139.   TCHAR  szFull[MAX_PATH];8 r' t% t9 [  l5 m1 J2 H
  140.   TCHAR *token,*inter;% X' m9 [! w$ C2 \: T
  141.   *szPath=0;
    % U8 w3 h7 l, f+ U6 Q
  142.   strcpy(szFull,szFullPath);
    5 w' D; \, w; {
  143.   token=strtok(szFull,"\\/");( G  I7 U# W/ J
  144.   inter=token;
    / z4 w/ S8 i% V5 W
  145.   while(token=strtok(NULL,"\\/"))
    0 i, C3 o( T( G
  146.   {
    1 D/ H6 ~0 U! w5 ~7 F
  147.     strcat(szPath,inter);
    / @2 @" |9 P. I4 ~  r* ~. b
  148.     strcat(szPath,"\");$ r8 G& l# O  I9 Z% J! E( }, X( O0 U
  149.     inter=token;% U$ {* S) c; E' [
  150.   }
    ( W4 Y. a: t3 ^# V$ ~# K5 w7 F! U! S
  151.   return strlen(szPath);- x0 @3 O, y& s9 `1 p
  152. }
    ; g9 K3 C7 H% p

  153. $ A% A: n( i& K5 q9 Z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    " E3 w2 ]% h! J- U+ _& B
  155. {) l/ {2 l# E* J( ]6 }9 V( ]7 @$ c
  156.   DWORD attrib=GetFileAttributes(Target);
    9 [/ D' Q3 V3 m! @
  157.   if(attrib!=-1)/ m4 @1 ~9 v, _- y3 [6 I
  158.   {
    8 h' @6 \3 F$ Y+ i& d8 s! p
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))! |* M( G; F; B, p
  160.     {
      ]+ ]- b9 K, \6 r# E& x& G
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    + r; u# ^0 e6 d4 o- _( K: C4 m; w
  162.       SetFileAttributes(Target,attrib);
      i3 _. X% q; u  u8 y( ?; n$ y
  163.     }* K, d5 H) {3 `/ W: J# R
  164.   }& n! j- w! m: K, a
  165.   CopyFile(Source,Target,Erase);
    * Y3 b# l: t0 s& f" ]8 R
  166. }+ f# x9 D7 T& S  r  z

  167. $ l* I* g  H; Z  L
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)1 V5 I! ^0 F8 Q" ~' u! @8 \
  169. {
    3 `/ C9 m+ p2 d2 C0 _% L* V
  170.      FILE *fp;6 F$ a) ]: s9 m$ y
  171.      char  szBuffer[8192];0 ^+ M! E% O4 n! @
  172.   va_list  argptr;
    " g. m; n) y- T0 K& e' C

  173. 3 |$ y. |. `" I2 b
  174.         va_start(argptr,message);
    2 E" }+ \5 d+ p
  175.         vsprintf(szBuffer,message,argptr);
    , y% P9 {7 u( E
  176.         va_end(argptr);6 i5 `; f, u5 A$ o# ^) N
  177.   fp=fopen(FileName,"a");
    5 ]$ Y$ q; u3 O% U0 v3 p1 J
  178.   if(fp)
    & G6 G5 A" L& {. B  x
  179.   {
    . C: z7 d3 B5 J, R9 q, x, g: \* `
  180.     fprintf(fp,szBuffer);, w1 a3 ?* \1 d: W5 }
  181.     fclose(fp);4 J3 D+ G" A* a; w4 e' V
  182.           _flushall();: a3 X3 Q1 E' n: Q, C" j  Z9 I
  183.   }# c" W) c* o) X
  184. }
    - [2 g/ i0 Q) _# d' _

  185. : n( f0 B3 `7 L2 X" G) l4 g
  186. BOOL CRevAppApp::Fclearf(char *FileName)4 W5 ]% A2 Y" T+ }7 S5 }
  187. {
    / \4 H- o, V  w
  188.      FILE *fp;
    ! L" Q- X' Z" D4 Q$ L( S. A4 a- {
  189.     DWORD  attrib;' o2 l5 T0 w8 ~$ f2 v
  190.   attrib=GetFileAttributes(FileName);2 B8 O+ V1 }$ E
  191.   if(attrib!=-1)2 \9 I5 C( L* G# X
  192.   {
    ; L* U4 m' b9 m& T3 T( A' t, F  R6 M
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ( J* t% y  f; N
  194.     if(!SetFileAttributes(FileName,attrib))8 g4 e3 K$ F( o! X8 v3 V+ i8 [
  195.     {+ i, [. U9 b8 D! m& T
  196.       return FALSE;* ?; O8 P* D# o/ [" t% E
  197.     }
      P" X, }) `5 o. N: x0 t# M3 u, g
  198.   }
    $ b% y# z: |& q5 K% Q1 }
  199.   fp=fopen(FileName,"wb");
    . {4 D% F0 r3 t* S
  200.   if(fp)3 L7 h& Z' N& e% N, Q) U( Y7 i
  201.   {
    6 o* ?: Z/ G8 t, G* F. m
  202.     fclose(fp);/ o# r+ ?) ?& n8 {9 R1 j9 {0 R, L5 [- z
  203.   }
    3 t. q' [4 _9 I$ ~9 m
  204.   return TRUE;. w0 F/ i5 O6 |4 p
  205. }4 P; x1 V% z+ p" B5 A! w* }
  206. 9 ^# A, M3 j  k$ l# k
  207. BOOL CRevAppApp::UpdateLocalVersion(void)7 [  L" ]0 J+ e& w! }
  208. {
      a  W. N% H+ s& \' d
  209.   char filename[MAX_PATH];
    & t3 B; j/ c! p7 h% A
  210.   LPUPDATEFILE file,olds;$ t2 [* X: S% K2 W* {( p7 \9 _2 f
  211.   std::map<int,CString>::iterator i;
    * @6 t: M/ T! K
  212.   std::map<CString,LPUPDATEFILE>::iterator p;& H. W) k3 X$ p* X: j/ A3 K& H  q
  213.   std::list<CString>::iterator l;
    9 {1 a% j5 A5 z6 M! B/ A

  214. 8 d0 D$ `2 @1 u5 K' u$ J% X
  215.   if(bFirstUpdate)6 p! q) _; [1 e5 t% m
  216.   {3 {" j) \, w1 n! ?( B+ }  @4 f
  217.     dwCurrFile=0;
    $ C+ S% G9 p$ H% X2 |: _" K+ U1 W& G
  218.     bFirstUpdate=FALSE;4 P$ P# G. ~$ V$ r; P
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " }- d8 A  Z  m
  220.     {9 R1 @. v/ e) J4 y. J5 \
  221.       dwTotalFiles=UpdateLocal.size();/ A& u) z' `" |+ Q+ b" I9 {
  222.       dwDownLoaded=0;
    ) k2 r# J/ S3 |; _9 ?+ j
  223.       bSilentStep=FALSE;
    % h. v' w: B1 M0 Z
  224.       bCompressed=TRUE;. a1 \# ]+ U! m. s1 P% U% `
  225.       strExtLocal.Empty();- B( T; p& O" t, z
  226.       strFullName=(*i).second;
    , I/ c1 ?- G% m
  227.       dwProgramState=AP_CONNECT;
    / H1 m- x# ~+ ]% }
  228.       return TRUE;( O: Y+ n2 a5 z7 l
  229.     }
    , P: Y4 f7 y$ Z- X' \9 ^+ d$ l
  230.   }
    / f. H4 f7 D' z# P
  231.   else if(bRestartUpdater==FALSE)
    ; ^6 ?( i0 c% N0 N0 p& S) o
  232.   {
    5 ^' O- ?0 w- L1 ?1 h
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())9 m# k; l- C  [1 Y( V! V
  234.     {1 h2 x  F* f7 H7 e
  235.       file=(*p).second;
    6 O0 _6 t8 _& C8 f/ C
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())4 v2 E5 z* L1 x/ |: q5 z
  237.       {" m3 v0 n  t* I7 ^$ G3 E- \
  238.         olds=(*p).second;
    " I& B; Y4 \) o3 ~$ V2 l; b8 r
  239.         olds->vers=file->vers;
    % l1 r4 u, n* P; U
  240.       }$ x+ q& S% V* f0 n( e6 @" o6 d
  241.       else, Z3 H0 _- [2 A2 z
  242.       {5 i8 ^' e( Q9 H
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( A; l2 J9 o: M1 Y, I* i7 ^5 m
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ' V4 ~" m; t* b2 m$ o% a3 d8 A5 e
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));- H# `; ?+ h/ `( S+ m
  246.       }
    2 o( N' k! }# T9 e4 p
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");5 B* B# G7 l/ r: [; g- |8 \
  248.       sprintf(filename,"(%s)",file->file);% B9 K' m5 `4 t9 d6 n, K5 Q6 t
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 k: `( X( u7 J
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    2 S! |2 U/ R/ Y' v  y
  251.     }
    " P* k+ i" _. f  \9 t7 G% P
  252.     dwCurrFile++;
    . Q- m, v7 z" p3 b& M
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . b8 t$ @; d* q0 D6 z, J
  254.     {( Z# m$ F) _' J; T; G
  255.       bSilentStep=FALSE;6 {. U* I$ T; E! j" B2 m
  256.       bCompressed=TRUE;( }9 X; n2 s, k& V, w
  257.       strExtLocal.Empty();6 |1 n, f- @* I1 I/ ~
  258.       strFullName=(*i).second;) a" \1 H" H* x+ E+ u
  259.       dwProgramState=AP_CONNECT;
    " \8 ~$ e8 p# M% a
  260.       return TRUE;
    , P0 o1 d$ F2 J( v) R( o
  261.     }
    $ |9 s! B: s/ O' C& ]
  262.     if(!bRestartUpdater)
    + @5 h6 z8 a/ u) A) b/ G* R( V9 I
  263.     {
    7 x1 }# e6 J5 o" u, i" G
  264.       int iCurrSize,iFileSize;+ G+ L4 R& R$ ]3 o7 O
  265.       iCurrSize=0;
    ( E: g2 P5 o" B* r, h$ t
  266.       iFileSize=UpdateList2.size();
    # W+ I1 s% h9 y9 b
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");: w3 a1 v; N( }& Y# {6 t" b
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    4 L; m" z3 R# H  Y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");. o, V) [  |4 T. I5 y: r. n
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" F3 h0 _) r1 }/ m" {+ @4 b
  271.       Fclearf(".\\update.dat");
    ) ?, X' b( D5 t6 a- ~, w0 w
  272.       Fprintf(".\\update.dat","Bloodyf\n");1 x8 F% B2 M/ t& S
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " P: p+ q& B- ^2 P# h+ L$ C
  274.       {
    - K3 [  q5 K6 s
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ! U1 O5 U9 Q2 y
  276.         {0 a" V) o- f- u, A$ c% m
  277.           file=(*p).second;0 p" R' T$ D! J- D
  278.           sprintf(filename,"(%s)",file->file);" }4 W& w9 s: q3 h8 H* c! C
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) \7 Z' L3 O# w0 a
  280.           iCurrSize++;
    " o) v- p: l) G5 d  e1 t
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));4 n7 y; y4 }* ^! G+ C
  282.         }
    8 }1 B! G6 j) k
  283.       }
    9 e: m& N8 b5 A5 X& x, Q. O
  284.       unlink(".\\update.txt");
    % ?% k. }& Z& p7 N
  285.       unlink(".\\update.tmp");
    8 m/ J5 z* y( z3 E
  286.       Fclearf(".\\checkversion.dat");
    ' f5 I/ I( k3 W, s; B+ R
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);4 }; K+ b8 \. m
  288.       if(UpdateLocal.size())
    2 a! r+ C' ~/ h' v
  289.       {- X8 i) t+ }0 A8 w8 J# `
  290.         UpdateLocal.clear();8 m3 j% X7 b6 u
  291.       }
    2 D' U" z2 n& x- S, |* V
  292.       if(UpdateFile3.size())
    ) S3 L/ U. g: c, i% _
  293.       {
    . ^8 T6 i3 p- R* K/ c
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)2 S5 P& A2 F% S( }/ _- x
  295.         {7 V. k% k7 P" \0 Q. ]
  296.           file=(*p).second;
    & ^0 p8 Y; x; G. F6 k8 [
  297.           free(file);
    ; [) s8 G4 Y7 v' k3 D4 C, Z! \3 n
  298.         }
    2 x0 X. G, G, X5 M
  299.         UpdateFile3.clear();
    * P$ b" b0 d+ S0 h1 I
  300.         UpdateList3.clear();/ a7 G" t8 E* F' ~" X
  301.       }
    ; \* E3 \* ~3 ]8 g2 P% \& @" W/ B7 @
  302.       if(UpdateFile2.size())
    3 U& k$ h; d, Q0 m. x3 W9 L) s
  303.       {
    0 q5 @1 o& f- t* e2 u' ]0 [
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 p" @$ \/ C/ y7 V/ Y
  305.         {
    , _; a4 C; u3 X2 o
  306.           file=(*p).second;
    * B; Q* E1 |6 R
  307.           free(file);
    7 m( I  E. v6 C. v
  308.         }# {$ W- E: }% l( ^) j
  309.         UpdateFile2.clear();
    9 ?, D1 m/ p2 z. q6 X  G$ c& U
  310.         UpdateList2.clear();- v+ C/ z' c; N) b' P# K9 E' k9 {
  311.       }% Q  h! U  ]9 Z( ]
  312.       if(UpdateFile1.size())
    3 B6 @3 f' X# K' M6 F# I) K4 r8 r
  313.       {
    9 N4 ~' N( L2 w. S
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    5 {# ]. r1 M/ h" \6 D/ l* J1 h
  315.         {. X+ N' v+ x6 a+ U* |9 o1 o8 S! V! [
  316.           file=(*p).second;
    7 {- x7 T9 L  M+ R5 w! U
  317.           free(file);
    % \0 W6 {5 ~9 h7 l
  318.         }: T7 }/ p; s5 T2 v& c) x
  319.         UpdateFile1.clear();7 d: O) j+ N+ z5 j
  320.         UpdateList1.clear();2 Z8 P6 _' H6 Q" _
  321.       }, J7 n, c8 z" T  c# P+ Y$ ~4 G
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    + C! Y  }+ \% u" z3 F
  323.     }: U; [' }, M3 w6 E
  324.   }
    3 q. ?8 `0 @6 w6 J3 C
  325.   return FALSE;
    - [, {9 ^! d& A
  326. }
    ; V, l+ Q0 {6 o4 a& p

  327. . Y; D+ r- A! ?; k) m! o0 u, [
  328. void CRevAppApp::ClearAll(void): Y( k/ b2 ^# y9 Z% x
  329. {# W. Z- Y2 ^6 l" H; p) j6 r  p
  330.   LPUPDATEFILE file;
    0 H/ C4 U  c/ e& d2 \) j
  331.   std::map<CString,LPUPDATEFILE>::iterator p;1 }! ^4 Y4 G8 u3 Z, m% ~% t4 T
  332. 4 t  C" e' M. R& ?; o
  333.   if(UpdateLocal.size())
    : F( h: ^4 E8 C( g3 h# o
  334.   {
    9 d  B4 j0 P# m4 N: X$ }
  335.     UpdateLocal.clear();
    * B  Q  t, y+ T3 x& o) k
  336.   }) o5 d+ c7 ^* X) l! L4 `
  337.   if(UpdateFile3.size())
    3 ?5 r( M4 H* S4 g
  338.   {
    , F- f, }$ }5 F# Z9 \7 D# R, ^9 y5 P
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 r7 ?3 X. F) W+ @6 ?+ ^1 r0 B; z
  340.     {
    - m. T) I8 V7 m: d( o4 b
  341.       file=(*p).second;
    2 ]" g# p$ d7 S4 l- h8 u5 M4 H5 A1 r
  342.       free(file);! b  v* [% r3 B: e( E7 w3 ~
  343.     }
    ' K& j) ?% k9 ]# v1 F
  344.     UpdateFile3.clear();
    3 Q0 n' u9 n& ?4 v" I9 d' u
  345.     UpdateList3.clear();
    * {7 `0 ^3 k2 T5 ]+ N
  346.   }# G4 i' E& R6 M: p& ]; {
  347.   if(UpdateFile2.size())0 R, \. c  U- ?9 D
  348.   {7 C9 m5 H1 l! m' v* t0 w0 R8 K$ ]
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' g& v, _4 O2 l5 G: {2 l
  350.     {
    & b5 Z: g/ M  I8 e. |
  351.       file=(*p).second;
    6 T& C& I' K) d! M6 {! T* S4 x
  352.       free(file);2 Z# r. P5 y5 J* r9 g+ u$ u
  353.     }
    / s# @, I% C! z9 F+ m3 h
  354.     UpdateFile2.clear();
    * O' ~6 p. j( d, W" n  c) m
  355.     UpdateList2.clear();
    2 Z  a) Y* g# K+ s; [/ y+ S4 r
  356.   }5 j4 }8 P! x0 O4 Z; G3 f7 `$ h
  357.   if(UpdateFile1.size())5 ?' Y9 y: {, e. o: d
  358.   {% X9 _5 V& h& t, M  m
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / N" G/ f/ E5 E2 E
  360.     {
    0 ~" p) S& d- g/ T; M
  361.       file=(*p).second;. m* [$ u8 ^: E9 m' z
  362.       free(file);2 V! |" ~) X" W4 H4 p' ^
  363.     }5 @" j" d& C9 C7 X( a
  364.     UpdateFile1.clear();. m' ?% I* }+ F. Z9 L# P
  365.     UpdateList1.clear();( I4 z, O/ R3 \9 Y% ~* w/ W$ K5 g1 o
  366.   }
    0 p! u5 {$ Q) _" Z; T0 ^/ i) y/ }
  367. }  ; h( W9 Q5 A$ Y% A& {
  368.   4 q* Y' P) B  u  K
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ) y" @/ E, ^& n: A% q* f, x* p
  370. {2 {% R" H" R- N
  371.   int c;$ D" m: L! J$ Q% b8 J
  372.   LPUPDATEFILE file1,file2;
    # a$ I9 C* K1 G
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    . R: z; x3 o. m/ b0 z
  374.   std::list<CString>::iterator l;0 J5 `: g+ X! a+ [
  375. ' K8 k! p3 l3 r2 A4 m6 W/ I
  376.   UpdateLocal.clear();- r9 O: \, i5 |: C, y5 z) f4 l7 R
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);3 G4 q$ j4 P/ ~9 m- g
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);! P: J3 D2 O: M# n7 ?
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ x3 x+ p) l% \
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    4 S2 i1 t8 [9 q: Z0 h: ?
  381.   if(UpdateFile3.size())
    5 w4 z% W0 R( ?# u1 N
  382.   {
    , R( }$ L% F) e$ T1 C/ f
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); p3 `. c% T/ N# c
  384.     {
    2 ]8 E+ t3 I2 h. B  V
  385.       file2=(LPUPDATEFILE)(*i).second;: ]. Q3 K: D) ^" Y4 ^
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  f3 x$ U8 e2 b
  387.       {
    ! Q* U1 r: A' D% d6 ~. i) V6 B
  388.         file1=(LPUPDATEFILE)(*p).second;
    + L6 m- ]# B% e2 N2 {. d
  389.         file1->vers=file2->vers;8 r3 R& k( t7 W4 ^
  390.       }% p+ S* {  y! b" q" J* x4 }; t$ Q
  391.       else- u; |. `8 _/ X7 l' t- i
  392.       {+ G5 U0 A* c- D& w& K8 Z3 p
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 S% A% @/ `* E. [
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - A7 h3 [, |" x& L0 Q  k  M
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    # Q" Y5 `: N4 t8 q$ U" f9 I4 f1 D
  396.       }- g" c- `: Y& N/ ~" J. k
  397.     }
    ' r( x- t$ a# [$ s+ o5 h% i8 [
  398.   }* k. M0 s+ m6 c
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 G2 c" a- ]7 k% O2 y
  400.   {
    / E+ A8 z4 s) W: E0 e
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 t* v( m( [1 Z/ y& t$ l6 N. H
  402.     {
    & o" r9 Z0 N- i
  403.       file2=(LPUPDATEFILE)(*i).second;  g$ e% Q) d' {3 l
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! t" T1 B) R5 V2 H
  405.       {
    # @4 F. U+ k7 Z+ @/ J; Z
  406.         file1=(LPUPDATEFILE)(*p).second;$ C+ _5 j9 W9 a6 s5 d/ b
  407.         if(file1->vers!=file2->vers)
    3 S5 n4 A' O. O, {' e9 ~# \
  408.         {
    ) `* S' `# h. \2 w& C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 D2 [' I; r! K& F
  410.           c++;
    8 a1 E$ A9 {$ b4 A, C& n6 H; J
  411.         }1 Z; {. W# n) C! t
  412.       }
    " d$ y' ~7 N0 q% ]
  413.       else5 {7 m6 E! f$ b' H) F# v
  414.       {
    3 H$ s8 o# i4 K, H
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' P/ V; d2 k: E+ s- D
  416.         c++;
    ; M# K6 x/ |$ G# s* R5 G
  417.       }8 A1 O% O7 H2 X- D0 @, N% r3 a7 b
  418.     }! P: u" ?6 F6 ^+ }3 l, q  ~
  419.   }
    & q6 r& \& D0 K8 n3 Z7 A- ]" v+ E
  420.   unlink(".\\DownLoad\\update.txt");1 w, ]& A# V. L. J
  421.   if(UpdateLocal.size()) return TRUE;' K  F0 V, U4 b; b
  422.   else                   return FALSE;
    $ O" y% _1 S( v2 z( g! \
  423. }
    : C" j) C6 O2 e9 ?
  424. / X5 {5 j; s4 J$ j( ~
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      T! x2 W7 a" a1 y% a! _4 G; w
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    , }) }  x8 E& @
  427. : l% F$ E" E# A; o- t$ Z8 \

  428. ' ^, {8 m% Z( t1 F
  429. " J: F, y; b+ u# s) b. C/ ]
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)/ {6 r* g: u& X6 t
  431. {4 ^/ a! T: }6 y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    # y: M# ]( o& m$ w1 O9 y8 _8 M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' [3 J) g  Y) t  g
  434.   {
    ; {9 Y/ b2 i( g: e8 w  \
  435.     char szLanguage[50];8 D5 L6 p/ [6 G2 K
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");. Z3 B- ?$ K$ k
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 o: s  ?4 Y# S. S: U. l' x
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;7 E/ [; y' V8 P! Y
  439.     else                                   m_iLanguage=ENGLISH;: t$ X: L6 G* \* n5 {" D
  440.     char szRegister[100];" E' l: m9 @$ R1 K3 F! R0 f
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " @. }, Q1 N% a1 n
  442.     strRegsName=szRegister;
    % C6 n$ U, ]7 a9 V% U3 p# D) T' j
  443.     char szPatchURL[100];
    & [/ A$ {" ?% ?" @7 S
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 v" k2 @" [: [/ Q( q- |& u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' E4 K3 m+ N& o- N% ^
  446.   }
    # Z8 z/ w5 c  d, b* }1 L! q/ o2 S( D
  447.   else
    + j% i7 s) |2 g& {
  448.   {
    4 G/ s1 l2 d: j$ \
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 |0 Z) q2 D" S7 H* R! U
  450.     strRegsName=DEFAULT_REG_URL;
    : P: v) N0 A* l
  451.   }8 Z) h2 v* K! R% D, F4 ?6 [* A
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    8 ~, X, c8 @0 ~. V0 q
  453.   {- W/ D, i! D# c0 [, u. d0 [7 _
  454.     char szIP[50];9 t8 i! r/ q% \% z( D0 K% w
  455.     char szDIR[300];
    * d' I; @" [( s) [
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))  k- d: y. m" H7 K2 z
  457.     {' R( A" D" |# Y' H
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    6 @6 M/ h+ Q4 P  ^, `2 _- h
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    5 b3 \2 D4 Z, v) Y* i3 [. F# a* V! Y
  460.       strHostName=szIP;
    % }" K5 m  k- k. T
  461.       strHostPath.Format("/%s",szDIR);
    & }; x' s: [9 |4 l! r6 U
  462.     }7 K( O0 K* E" ~: {* y% A
  463.     else
    1 {1 v4 Y- C! f# z
  464.     {' N, Z8 |7 L" i* ?& N3 _
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ D( ?8 U$ p0 a5 p+ Z
  466.       {+ w' L, k2 E$ V9 L: j# A% S
  467.         char szLanguage[50];& p1 |' L, Z1 H8 P: A
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 S  m& ^3 {* P
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 ~9 ~( f$ \4 e+ x' c6 U
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * L5 X; r$ ~4 n/ n* u$ @/ \5 y
  471.         else                                   m_iLanguage=ENGLISH;
    9 }( D1 z( K) `" Z  x& I
  472.         char szRegister[100];
    # F3 z& @! o; Y; R# L
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ s+ `6 _+ t: T4 w
  474.         strRegsName=szRegister;
    8 P* q4 X( H) J1 s6 Q5 r7 [5 P, t
  475.         char szPatchURL[100];
    & I$ S. R6 b9 E! {/ [, l7 _) _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : ^5 o+ W8 ]: t) D7 {: J% @  v
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* g" i) p9 }, X8 ^. J
  478.       }
    & p- K5 C  D3 E  L* `
  479.       else
    8 _7 ?, M' c6 J
  480.       {' j5 k6 ^1 k8 L
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # w+ h) a' d5 R$ x
  482.         strRegsName=DEFAULT_REG_URL;
    " H4 c* o: e1 ~4 @
  483.       }, F) |8 U! \( {: C" f  A$ n! ~
  484.     }
    + N/ Q- I6 y( g! h, l
  485.   }5 I  x" c9 [8 Y2 A% Y
  486.   return true;+ c6 d  m' }+ m5 S/ S- Q: P
  487. }
    2 g% |$ Z0 o9 A1 o' Y# n5 ?

  488. + A4 |& _1 a6 M+ ]: `5 `
  489. #include ".\ZLib\unzip.h") G* {' u  V; u
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);& I' M! @; L' O+ M1 X
  491. /////////////////////////////////////////////////////////////////////////////; W, u9 N, f: I- C8 p3 J6 P
  492. // CRevAppApp initialization5 ~4 O+ b8 a, U/ F# Z* a# F
  493. ! A" ?3 a& |9 A) L; A
  494. BOOL CRevAppApp::InitInstance(). m( J1 Y* V, J# H
  495. {
    . B! W$ H- y$ n. O/ y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];7 u( s6 z! O" {/ l" P
  497. # G+ f& G" T: b2 [0 Y; ]/ A
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    6 R7 W' I1 |( W4 n/ S2 @
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)): T- h4 d) U+ j/ Z0 y
  500.   {
    - a$ a. x% o0 I  H3 [" `* X7 t7 K
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    $ Y  z  G4 I4 t; h9 u- ]
  502.     GetPathFromFullPath(szPathTarget,szPathSource);' p* J7 @( J( r7 I
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))3 T1 u0 e5 K2 K5 _1 v
  504.     {" ], v; K! h. y2 N& \5 V
  505.       strcpy(szPath,szPathTarget);) q1 |, ]4 k) m" I  \$ a5 l" Q3 s
  506.       SetCurrentDirectory(szPath);! G' V& j& u% v5 V
  507.     }
    8 S4 W/ b" b' L, Z; p! n  k
  508.   }
    % F6 s# E" B, i. u0 @1 v' h
  509. #ifdef _DEBUG4 q% N' r1 [9 x! P& y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! \2 S% i3 V5 c1 K
  511. #else2 b1 c  R! Y" H. p: S# X3 _
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      ]8 r& \! \/ D1 e
  513. #endif
    * N/ W& i( ]9 W
  514.   {( I* e9 D, U* N( _9 A! [0 L
  515.     char tempFileName[MAX_PATH];+ U) b$ k$ \6 Y; n5 E) y
  516.     strcpy(tempFileName,szPathSource);  o: v$ e! g* X' f: G
  517.     tempFileName[strlen(szPathSource)-12]=0;
    , J9 S+ A# m, G5 J+ w1 ?
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    5 s6 d7 `5 L: S) V* R! Z8 f
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    # G, W6 I, d! Y* |% O# p/ f/ L) }) o$ s: J
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ; l1 Y/ |! P! D6 ]2 e( V) B
  521.     return TRUE;  C0 O; E' a" j/ J
  522.   }3 y, f/ v# H3 q* J
  523.   // Nuke 0118: Delete run.exe
    - W, E$ P: l+ r" L/ V$ K" I
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    $ n6 M% N$ A% X5 X9 Y5 ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
      `. x6 n1 `7 A+ \& ?: h! C
  526.   if(!ReadCfgFile("Config.ini"))
      q5 v& Y8 M8 B8 o2 M0 @
  527.   {
    3 _; H! h' b; X/ N( e& k# ~
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    , |% d+ a3 N, ^( R( I
  529.     return TRUE;
    & n9 Y' o' X! n. q/ w- a' k
  530.   }
    . J+ U3 R( G1 L" L
  531.   HANDLE mutex;
    5 @! u! ^6 @1 }2 H' H) g
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 c& t6 ?; L& ^3 K
  533.   {
    6 T: k' [6 L% |7 H$ i+ T2 Y/ v. o
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 N9 W  P" u0 r3 w% G; a( c
  535.     {
    / V% o3 M; y8 x$ d
  536.       CloseHandle(mutex);
    5 p- a( t4 @3 p9 `
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    / g" O& ]/ `$ w: A
  538.       return TRUE;( O' Q' k8 h. {0 Y6 X
  539.     }6 X2 v; [. ^+ E) B  ]
  540.   }  6 @2 @4 e4 f; C- f. o" |6 b: V
  541.   CloseHandle(mutex);
    # j5 Y' A: y- s$ x$ g

  542. 7 F% Z% ]0 u, a
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);5 i4 L" i! c) _0 I

  544. 5 R# ]- L7 F  c* I8 J  W4 h2 v& j
  545.         AfxEnableControlContainer();: W3 Q# z) t# |( ~) `0 `* }  |6 p

  546. 6 f, a% J6 v) V& k
  547.   bCanUpdate=FALSE;8 {5 d$ \) d* N0 J7 k
  548.   dwStartUpSteps=1;
    . N6 W% `+ @2 }- d( S
  549.   dwProgramState=AP_NOTHING;4 h6 D, _+ F" i+ [& G

  550. 0 [7 W5 @1 ?" I! H0 [6 t$ n
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);0 ]; O# {) M7 B
  552. , x: H' x8 D5 M2 u# }
  553.         // Standard initialization; V+ O; b/ b& u/ p6 N4 u1 c
  554.         // If you are not using these features and wish to reduce the size" l0 a' e! Q8 R5 G  t  ]9 E
  555.         //  of your final executable, you should remove from the following
    ; ?: |  V! z* Z+ _# y( `. e
  556.         //  the specific initialization routines you do not need.; ~- n0 t! X3 V: g; Z* U, W1 e

  557. + }  y5 r# a+ `/ x& p# `% R
  558. #ifdef _AFXDLL
    & a) n) a$ x( Q$ O
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL; _2 w( z3 v, D
  560. #else$ b! q( w0 y& j5 H7 C( r
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically" L' L: q  e3 J( U; y2 @" U
  562. #endif
    5 z* w) X0 ], n& C3 W) f" A( J

  563. 9 J+ V+ y# B& q
  564.   dlg=new CRevAppDlg;
    : j8 _/ ~. s: O$ M
  565.   dlg->Create(IDD_REVAPP_DIALOG);. e. H& A. q1 l) r9 K
  566.   dlg->ShowWindow(SW_SHOWNORMAL);- c* {; a5 q, P% Y1 m! e
  567.   m_pMainWnd=dlg;
      H1 }& }3 G5 G  E) V, j  l" F4 a

  568. 1 d/ c& J3 S7 u) p2 Y/ E' @
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    " H6 `- ]8 z4 W5 o" }& t8 X

  570. 9 b0 p+ v. p+ q4 ^$ f' G5 T
  571. //  GdiplusStartupInput gdiplusStartupInput;
    3 @' X2 J0 G  q5 _6 ]) }% d, D
  572. //  ULONG_PTR gdiplusToken;% Y) C; c7 v4 ?" a$ q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    4 @4 b0 n0 t0 M0 o7 E( S

  574. : M% ~. O8 n5 ~
  575. //        CRevAppDlg dlg;
    - s/ v$ x* F' P8 R- [& C# a  G
  576. //        int nResponse = dlg.DoModal();
    + h/ Q! F, q+ @/ ?2 n8 i! z  p) }+ k
  577. //        if (nResponse == IDOK)
    : w' C) f: B( D
  578. //        {( ]; v0 r4 W' O4 ^2 I% p
  579. //                // TODO: Place code here to handle when the dialog is
    $ ]" D" m1 d9 p4 b) v/ U7 h6 n# m
  580. //                //  dismissed with OK$ j. H. {* Z7 U* H, n8 P4 [
  581. //        }4 T2 ~$ j8 f/ y" G: k$ [
  582. //        else if (nResponse == IDCANCEL)
    9 i/ o& Z8 z6 Y5 f9 o7 r, o
  583. //        {3 z# t4 q' `+ P# |) w- n
  584. //                // TODO: Place code here to handle when the dialog is
    - N( B$ T3 I9 ~; T8 f# y
  585. //                //  dismissed with Cancel
      l6 m* g* F/ A, M$ }- n3 }4 q  e- ]
  586. //        }* C. G8 p% C/ |" e/ b% q

  587. 4 v* w/ Z& P, s; N$ K, z, ]
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    / v0 @' D4 b# g2 Z3 G3 @. k
  589.         //  application, rather than start the application's message pump.
    - Y% N- ?7 H/ @% m" K
  590.         return TRUE;: ~; x1 l! g+ `" H) ]4 L; ~
  591. }, c' }0 R7 D8 t7 H

  592. , Z/ O" Y3 r  l+ M2 y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    + ^! `$ J3 r7 T+ U4 w6 p
  594. {- X6 X5 {% C1 W
  595.   int i;( A8 t& d/ |! p0 \
  596.   char *szRet;
    4 B: c- D% d! [* v
  597.   I0 @* d* _1 q  \; j
  598.   if(pSource) { itoken=0; sztoken=pSource; }: v3 s! b) n. f. P9 P  C0 K7 L
  599.   if(sztoken)
    - \7 c' o, a6 m2 S' a
  600.   {* [' E2 s+ q- B7 R) ~
  601.     szRet=&sztoken[itoken];+ K. P0 p1 a* Z' y. I" A: G1 u" O) d
  602.     while(sztoken[itoken])5 z3 X) _7 d7 O; P6 s7 ^
  603.     {
    ) P) U% V3 n7 \) w  Z7 O- m( ^
  604.       for(i=0;i<(int)strlen(token);i++)- `0 p0 z/ `% y6 J% m! n
  605.       {
    8 l& r, N* o  a9 F  v
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; v, G2 P& V3 G$ K5 ]5 g* q
  607.         {3 h  ~, Y6 n% {- K; i
  608.           sztoken[itoken++]=0;
    # K" {7 f: h. W; c1 f4 V  o
  609.           sztoken[itoken++]=0;
    # g" D, H6 [. f
  610.           return szRet;
    7 ?1 E! s0 h$ [0 S' ~) A. {
  611.         }: d3 _1 s2 K: ~/ c, o' S) _
  612.       }0 ~- [: ?& \5 \
  613.       itoken++;
    1 h7 P9 B% }1 S# ?* ?1 \1 C4 h
  614.     }
    ; C2 w# J& L& B2 D# }
  615.   }
      p) a" e1 O+ y1 c/ ?- _( c
  616.   return NULL;
    - t) |, ?( ^  C0 S( g% t
  617. }
    / ~" V# l0 X6 D+ r, L  n

  618. 7 E& b4 R/ S9 c
  619. void ProcessProc(long Total,long Current)7 }! I" \% r! F& Y6 ]- H, m
  620. {, P+ n* W0 L) {" x. Y3 E, F
  621.         MSG msg;+ _# L7 t! j' \% s! G3 ~6 J3 Z! S
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    3 c- o! N, h( T! q. ~6 W
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 I& k2 ?0 n4 V8 x7 |! \( g
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ! b, c# U( D9 y; b, P) |' `/ {+ g
  625.         {9 y/ b5 X4 F' N, h. J
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ) ]. P& J; V: |( J' i
  627.                 {- f# h; Y: Y) a
  628.                         return;
    ( C7 ?  m1 V0 u- ?, y2 g" @) r
  629.                 }* |+ c$ s* y* @6 v0 p; G
  630.                 TranslateMessage(&msg);
      j/ C, q+ {( R3 c$ Y' V
  631.                 DispatchMessage(&msg);+ e$ m+ q' @: D1 X
  632.         }        ' L( `7 a& N! D% O$ u
  633. }
    8 ]5 @+ p' z* C  u8 x

  634. - S/ w( Q- W9 I! k/ z; B
  635. BOOL bFirstChar=TRUE;. i9 K! @2 ^5 x! ]: l: j
  636. * J  V+ G  j* `' W( }0 c
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    " s4 W+ l+ S3 h( d( l0 U( G5 g
  638. {  m' C  Q% I: l! M$ s4 ?( r0 ~
  639.         // TODO: Add your specialized code here and/or call the base class
    4 G* D8 y+ x& S) N
  640.   switch(dwProgramState)
    * l3 s* t, y* ]# D! A9 X
  641.   {
    8 Z" V0 R, Z+ i' n' ]1 u  u
  642.   case AP_NOTHING:
    2 w' R7 V& f1 e1 s
  643.     switch(dwStartUpSteps)! U( d" P2 v/ ], }( L8 b: {3 [6 D
  644.     {
    & J$ ?- _/ v- s8 N$ I- [9 {8 m) B8 s
  645.     case 1:
    9 N: t, v* f2 s
  646.       {3 F" k/ F; y7 X: B0 D( O6 w
  647.         int i;
    0 O$ P: |# g& X* i5 Q5 ^: m
  648.         CDC *pCDC=dlg->GetDC();( E) C, ?/ p' ~" d
  649.         HDC hdcwnd=pCDC->m_hDC;
    & w0 [, q: t+ U! f% b( y$ m
  650. //        Graphics graphics(hdcwnd);
    / ~( O8 W+ b: j& N7 a% N6 Y! ?) O
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    # M7 D, E) t; Y+ h- S
  652. //        INT iWidth=bitmap.GetWidth();
    * A" E2 x9 s/ d5 R+ D" e1 A+ o( r* p
  653. //        INT iHeight=bitmap.GetHeight();
    : U5 s+ [, j7 f, t/ K% _
  654. //        Color color,colorTemp;8 W/ K1 @# r2 K! Z! k* B
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% \' r' T" y. i# m3 w( p
  656. //        {, g! g% }% {$ z; l. y
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)3 o  j1 F% v! \$ Z; {$ `* s; K
  658. //          {5 z* |- O0 q# e% V# R* M8 D
  659. //            bitmap.GetPixel(iColumn,iRow,&color);$ E3 R" [1 C" M9 D- O( e
  660. //            colorTemp.SetValue(color.MakeARGB(5 X: U" y* a2 P3 I3 j8 H
  661. //              (BYTE)(255*iColumn/iWidth),0 j- _  f8 [( B- Y* J# I
  662. //              color.GetRed(),% y8 Y" E  H  D/ \- ~
  663. //              color.GetGreen(),
    & o- O6 Y% l  B8 Q1 a: r
  664. //              color.GetBlue()));
    , Y' S8 R8 }, b! O! p3 _
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- B$ X7 O1 D5 z7 J+ T
  666. //          }
    & c* \4 D; }  T/ c* T( R
  667. //        }
      j: a/ m. T- ]3 z
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);, @8 b: e9 h$ C2 ]& |) S; q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ ~8 |# G1 H, f  x+ X
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");. B  s: }3 D; S" z- G7 K3 _0 B
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 H# l: Z; ^1 H( L: @( o/ _
  672.         for(i=0;i<240;i+=8); e' H; S+ d0 ^
  673.         {0 F2 e% s+ J5 m& e, Q' S
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 r/ D; g! C4 a# f3 a3 g! d
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 A( }' G: I. i) m" r5 T2 H
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / p/ n3 V# k. b6 a- P4 \* f5 @
  677.           Sleep(33);
    # r- ^: G3 y: c. M8 h3 s( }4 ^
  678.         }6 |2 k# U. L; A/ ?, E5 K) p, V
  679.         Sleep(1000);
    : [: X8 P6 Y8 v1 B8 M( k7 ^# p
  680.         for(i=240;i>0;i-=8)! o2 W, Q8 k( N
  681.         {
    3 V& e" K1 k. u% x. Z; F2 ]. t
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 _. J, ?7 x, h5 Q& M
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ v$ N% \7 c) C# u
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. W/ D" u  j" y* ?: f* D
  685.           Sleep(33);
    + T3 S% ]" f: e& |9 J0 j
  686.         }% {$ ?+ s( r8 J, o) X/ w$ E
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    0 V: Q9 }3 T+ A( D$ ?
  688.         dlg->ReleaseDC(pCDC);
    & C: m. g0 q+ M+ J$ ~" Z, \$ Y
  689.         DeleteDC(hdctar);
    * {: r& g# V. C9 q2 N6 b6 d( a+ S
  690.         DeleteDC(hdcsrc);
    3 H" i" w! S& e: b9 S' o2 \' O
  691.         DeleteDC(hdcorg);- A) c- L' K: A6 o
  692.       }
    0 z* G& y% `, Q  O/ D, V
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);  q: q) K9 P) o/ q7 U! p# Q
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" V$ W1 n% }$ Z3 C  _( ?0 Z* D
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");% |% P+ Y* ~, J, _
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( H/ a6 m5 p) `) |. [5 C7 T
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + u1 S/ c3 R! o0 c; W* B
  698.       if(!Dn.Connected())
      R) L/ Q# E! M3 L9 j+ D
  699.       {5 D, I1 M) D5 S* J: P3 X' e
  700.         dwTotalFiles=1;
      E0 K( ^# {  E) j
  701.         dwDownLoaded=0;* `9 H- G# x3 M- j
  702.         bSilentStep=TRUE;8 _, W3 K3 E/ v, _' y: A8 F. W5 ~: J( j
  703.         bCompressed=FALSE;) Y0 W2 m' A8 U1 W$ J
  704.         strExtLocal.Empty();  v# ^5 k% [  G$ V7 K
  705.         strFullName="readme.txt";
    , h+ v/ F% Z2 y5 \2 S. U
  706.         dwProgramState=AP_CONNECT;
    ' o1 O+ L; J7 F+ J  e+ h
  707.       }
    7 }. T; z" e# s! f- {  m
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();# ?# L' x# u2 Q
  709.       dwStartUpSteps=2;
    4 x* J4 H2 U, k- ^
  710.       break;
    , T/ g6 V3 N6 F/ @
  711.     case 2:' w/ a9 v3 P9 D8 A$ f, F
  712.       {
    : E7 D: M$ s& q4 a- A2 {7 b
  713.         int iEOF;" p; x! f1 }# N% c, f/ A7 Z; E) M
  714.         FILE *fp;0 @2 j+ ]0 o" ^) F
  715.         char szString[512];
    9 C  E2 S) ?; l9 E: s' B
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    9 k' q' @" H3 M: B, a
  717.         if(fp)/ A1 {% Y6 P' ?* B
  718.         {( c/ x) ^8 F- p  [2 k
  719.           do/ |4 n! S4 q7 q, L' h$ V
  720.           {/ g6 Q  p% @8 ]% V! i7 z
  721.             iEOF=fscanf(fp,"%s",szString);
    % {# E2 H# L( T4 ^
  722.             if(strlen(szString))
    - D3 j) r: T8 L
  723.             {+ I- O, N* J/ N/ @* m1 b3 L7 i
  724.               if(bFirstChar)# F" D% D5 Q9 _
  725.               {
    : ]1 r3 v0 u4 f8 x& V& K
  726.                 bFirstChar=FALSE;: o1 l2 W7 \: B8 b3 T3 Y
  727.                 bConnectIsBig5=FALSE;
    4 c$ N: g5 {0 a  L: e8 f2 r
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;% y* Q& j' @" B$ `. Z
  729.               }
    0 d! [5 E% A' ~4 V6 y8 S7 J  j
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));' [  O7 H; h+ ~1 Q! ?( [
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));6 y6 A% j0 e* {: L9 b0 a, V
  732.               dlg->m_ListText.AddString(szString);8 v4 Q5 d5 |# Y/ g
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 j0 X  k! F/ B* l; A& X9 w, x
  734.               *szString=0;
    & j* u7 ]; c2 E6 k
  735.             }* S1 z6 \- A* Z3 k
  736.           } while(iEOF!=EOF);
    9 o. Z: X; |1 O& F3 x( `; r# b5 N
  737.           fclose(fp);
    ( ~8 Q7 Z, ~8 G! t9 |- t
  738.           unlink(".\\DownLoad\\readme.txt");; o5 z, O' C1 S& d2 I$ |5 [+ W
  739.           dwStartUpSteps=3;9 s. z6 t4 J  O9 @
  740.         }
    ; y  ?1 K3 u1 D/ p. r* E) Y
  741.       }; Q# a( z$ i5 a# F& J( @, R* l
  742.       break;8 R- f) @- P0 B$ x2 C. V* ?
  743.     case 3:
    " l6 u# K# n( R5 ^, ]
  744.       if(!Dn.Connected()); z- Y1 M4 ^* ?- q' i
  745.       {
    4 e: _6 ^5 e9 Q. d
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);5 X2 P& v9 R1 w8 Q1 T
  747.         dwTotalFiles=1;! S5 t' n* E  ~  ~1 L& v# Y
  748.         dwDownLoaded=0;
    $ Y. U, Y4 y; U) l* s, O3 G
  749.         bSilentStep=TRUE;& E8 D0 e8 M* H* {0 J* h
  750.         bCompressed=FALSE;5 O' k0 z1 B) w* x9 @6 w# M* U
  751.         strExtLocal.Empty();1 ?$ F' j% G. P2 T1 k( c+ l
  752.         strFullName="checkversion.txt";
    ! r7 W& d( r! f  u
  753.         dwProgramState=AP_CONNECT;* ?  z, z5 U( b
  754.       }
    2 g0 v& \  q8 y1 H* o. o
  755.       dwStartUpSteps=4;
    ! A( W4 ^, Q# C5 B; [- Y
  756.       break;2 u1 L/ k, R5 v) [; }
  757.     case 4:( P# |+ w; v7 f) x8 [2 V
  758.       {6 g1 Q6 ~' N" l9 L  R: k
  759.         FILE *fp;
    % p1 I9 Q' u2 P" `: w
  760.         char szString1[128];
    - f, p- D: R1 j* J; J6 Z
  761.         char szString2[128];9 q( Q+ @+ Y  Z9 I1 V" R5 m
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    6 M6 }* z$ I* N& l
  763.         if(fp)
    2 ~* {- I, ?7 u; c
  764.         {) G% Q1 L8 T7 Q/ X" B' w
  765.           fscanf(fp,"%s",szString1);- b3 Y7 ?) h0 j- }. Z
  766.           fclose(fp);# P5 K+ k/ I+ i+ N( [! z1 Q
  767.           fCheckVersion=atof(szString1);
    ) p$ y% ~$ {7 `/ a
  768.           fp=fopen(".\\checkversion.dat","r");
    2 w9 a5 z: t. W% d2 o0 G' U" _
  769.           if(fp)% E  X$ L% s. v) b# V
  770.           {" J' H+ d6 G' S6 T; a' f
  771.             fscanf(fp,"%s",szString2);+ d7 T, R; L/ e
  772.             fclose(fp);
    9 f6 `* `0 {- I9 C% C+ d
  773.             if(atof(szString1)!=atof(szString2)): B$ O( b0 t3 W, f! L: [! q/ I
  774.             {6 Y5 {9 W) l& _- `
  775.               if(!Dn.Connected())2 k! z& W  F& p# V% w6 E
  776.               {/ n$ X" Q5 J. W! w) C
  777.                 bFirstUpdate=TRUE;1 C9 ]8 W/ ~, ~! K
  778.                 dwTotalFiles=1;7 Z2 g" F' @' A  `. x( E
  779.                 dwDownLoaded=0;
    % B( ~$ M& z& S2 C, f0 {! [6 o
  780.                 bSilentStep=FALSE;
      X" r/ h) N' z! ?/ w4 c; X
  781.                 bCompressed=TRUE;) V- M' p& s" v2 \' X' V
  782.                 strExtLocal=".\\DownLoad\";
    9 ]+ s6 W9 t0 `6 k- X9 B
  783.                 strFullName="update.txt";/ Q* E) o2 q" k) P  T8 P- L
  784.                 dwProgramState=AP_CONNECT;
    6 z7 L; F) |9 h4 f- |7 l3 ?$ g& s% ^
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 d/ ?/ l1 t$ K# g0 H' a! S
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 Z) {. i& u: v: ~6 ?
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) F8 \& }5 q6 ]8 `# P4 @  a

  788. ! V2 o. |; n1 _
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : |0 t7 t: F7 _/ q- G6 k6 U
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ' G1 g4 D! Z5 f3 [; c
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)$ A* K# W% P* u% ~) r
  792.                 {2 q$ X& Y/ ?0 t: d! \/ H
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 f0 p# \0 t3 N  O! _
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ; b0 Y. c* K) K1 b& z0 \1 M
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    + Y- H! [7 l/ X; B& k$ l' a" ]
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- F. S; e% ?* t' `+ A7 R7 R

  797. * i* {0 ^! j* q. U8 d. J' W8 B
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # V1 r. `5 n* }1 T3 r3 @
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- f! l; D* i$ S- x( a9 ^3 s$ ^
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; D$ H0 F) l( p6 u' \. M& B+ x
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / V  i8 R/ {  u$ c& V, H( B! Y
  802.                 }' T9 f' s" P0 H5 A# y9 Q; R
  803.                 dwStartUpSteps=5;
    7 R/ D+ S& M. I; }! l/ q; G- w
  804.               }/ {3 U& a- H/ E) l, \
  805.             }
    * O; f$ l6 d. w
  806.             else* w' V3 B3 f. f
  807.             {
    * D! J/ q, ?" e( |* t
  808.               unlink(".\\DownLoad\\checkversion.txt");% M2 h# ]% F! N6 D& d7 [$ V
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    8 i/ \  B+ |4 i5 _6 z2 ~' v
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ ?( W) e3 @! F; R) l/ M; A
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");0 S" p% A, X. F3 \( ~4 V

  812.   q# }. ?' p0 P
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : t# I1 l) {' A6 s& d- S+ N
  814.               dwStartUpSteps=99;
    # h# ]& |3 J  \8 Y( r$ L$ x
  815.               bFinishUpdated=TRUE;
      p' E# F( P- f2 [- O
  816.               bCanUpdate=TRUE;/ N% }: F+ C, G) y
  817.             }
    8 R$ Y* x% I2 }1 i
  818.           }3 h. l8 a9 _8 ?" X/ H- q( V
  819.           else4 X* ~' M9 i+ d( E- T, h  d
  820.           {' A& z3 [( T# i% F
  821.             if(!Dn.Connected())4 b8 V3 \. i# d& h- |; D
  822.             {
    3 Q) ~  n4 x4 S! }7 M4 x) x7 z7 L$ q
  823.               bFirstUpdate=TRUE;/ X0 J/ m/ H# [0 O: h
  824.               dwTotalFiles=1;
    . P- I5 `( H) e
  825.               dwDownLoaded=0;4 }: O8 e0 R1 y) {
  826.               bSilentStep=FALSE;
    / l$ Y7 C- U, X
  827.               bCompressed=TRUE;9 `4 O7 X. f% ?7 A7 [  q$ g6 m' s
  828.               strExtLocal=".\\DownLoad\";; D, g8 e; o0 {4 _, [0 a% u
  829.               strFullName="update.txt";
    ( u& w  R. Z7 c: i+ t% i
  830.               dwProgramState=AP_CONNECT;
    & e4 \: o$ y' K7 E& w
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - h" E5 {0 {5 X( A: F
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 s3 A" X$ i( k
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - m0 _! H" j" y+ ^  s4 |
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 N+ P# ]' A# I: j0 f
  835.               unlink(".\\DownLoad\\checkversion.txt");
    & N' S+ _: p- }7 A6 Y4 K
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    9 l- S! R6 U; R" b8 I: {2 y
  837.               {
    & M5 t# U! A7 u, r0 W  I0 w9 I
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");; O; M- `; v* @( _
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    + M" g1 r% c1 t& @$ N' u
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    3 N" Q& {3 U0 z/ {$ x
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - m% z( e% ~; |. Y! x4 L
  842.                
    % x' N. {$ ^: r$ ]
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- q$ ]; u8 f9 Y+ Q' i1 i( M& v! t
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ) x1 s# G# Y5 w* G
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");- W8 h0 r( h; v2 p6 a; v
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / s4 ?$ [- e- [" u; c
  847.               }$ I" O- E, x! I) M; Y- n
  848.               dwStartUpSteps=5;- r+ H. v3 b) U, g+ Y) D
  849.             }: G5 |9 S  G% I8 g
  850.           }/ A* ^) ?4 s+ E
  851.         }- |9 Y. W2 z: R) ~% ~( H* J
  852.         else7 s9 y; x: e7 k' V9 [( |5 f
  853.         {
    0 Q1 y3 \# v3 c, y- x. j+ w
  854.           dwStartUpSteps=3;
    3 l; s# ?: W+ e5 q
  855.         }
    ) o! x# r) G+ ?8 w! q1 X/ t
  856.       }* J. [+ _" H, [$ D- Z7 W
  857.       break;' [) a9 X& ]+ u
  858.     case 5:2 T: K1 U* n5 v3 `; ~. e  L
  859.       {
    , w- y& z8 q8 N# x1 ]! F
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)5 E2 x& e6 F( s6 B% J6 q
  861.         {
    7 @( _$ y1 q: G6 Q& K5 `
  862.           int opt_overwrite=1;
    2 v3 G& [" b. c. `3 }! X
  863.           int opt_do_extract_withoutpath=0;$ e5 N! M" [" S3 M+ c- }: u
  864.           unzFile uf=NULL;
    " I8 y1 \% C% w. t1 v2 f

  865. 3 c* G+ `7 F4 }
  866.           uf=unzOpen("Wsa.zip");
    , @0 M, K3 M' |! z5 n
  867.           if(uf)
      c2 u3 C8 H+ L6 Y4 Q& K
  868.           {9 Z5 I7 L% p8 g8 ]+ s  r
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);- @6 T3 S; F7 Z& l. L- k
  870.             unzClose(uf);
    - U! L2 O5 A& [- |
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");! X& E# z! F7 P. u! O! ]
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    9 b* H; s/ l1 a- V1 J6 D  x' i
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");0 e, \: b9 P6 C) y5 v
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; D( d6 Z" I! j
  875.           }2 W  N/ J# V' K2 u$ W
  876.           DeleteFile("Wsa.zip" );
    6 K5 ]- r5 w2 k# f! @) D
  877.         }
    ' ~: v! {3 b# A! ~% r8 l" \
  878. : D. c& p7 C$ o% d( s9 V
  879.         if(CheckLocalVersion())' {5 D+ I  X. n1 y. F
  880.         {3 M$ n3 M  _" z5 y/ o
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    " P3 G$ r$ S& F- P  M6 p# ]' U
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    * n1 m  O% |( e5 T+ G* L; u9 ~0 f
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");  T+ V7 I4 @4 ?4 ?6 w. K
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 A/ ~& @& |; P9 B% {
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);+ J  G4 S# Q* v" Y0 g1 r5 }
  886.           dwStartUpSteps=99;
    - D! d4 J# L4 |( ?, B
  887.         }
    $ d/ _" s8 X7 \) r
  888.         else/ g! C; Z' a* G" N
  889.         {
    9 @1 n- c9 k5 C2 I6 b
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");6 @* m* H; a7 ~9 b9 A
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 l: m  x$ |- P$ O+ d9 V4 _
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");  _, M# V9 t6 t: `: d

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

4 M- \. z6 g# N/ Y# i3 k

評分

參與人數 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-10 01:19

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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