找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
) h& N: A4 Q5 G5 Y( r
  1. / RevApp.cpp : Defines the class behaviors for the application.( Z$ v( I6 e9 C6 w- b, o- ~
  2. //
    , u, p# V- o6 o. O5 J
  3. 1 U* S/ Y5 ]+ |( M5 o9 I  p4 [
  4. #include "stdafx.h"6 }5 Q) l8 l/ w* j/ p
  5. ' ?$ ~9 v" u) Y
  6. //#define UNICODE
      F- \; D% h: d4 T
  7. //#include <gdiplus.h>
    ; |) g5 [! l( Y! d# Z  t
  8. //using namespace Gdiplus;( Z4 w+ X4 n5 N
  9. 3 {. ~+ Y; Q1 G: \5 G# i, K- y
  10. #include "RevApp.h"
    . B0 ]+ j6 i  e/ E- q6 [, b) X8 C* W
  11. #include "RevAppDlg.h"2 x5 R* X$ t% F/ [0 h; w4 E

  12. 1 h8 V, a( G# t1 y: v" S
  13. #pragma warning(disable:4786)
    3 F- V7 ?6 u7 }
  14. #include <map>0 J6 T8 v2 ~; I! X. p- j, o! `2 a# {0 N
  15. #include <list>
    & B: O9 V2 A, v/ d8 E  `4 g
  16. #include <direct.h>; ?# [5 ?. {+ u3 T9 A9 [$ k
  17. 3 K) Z+ P6 s; u& V% X& E) n' b; a- F
  18. #ifdef _DEBUG8 S5 b" b$ l, `- {8 j- [8 X5 L
  19. #define new DEBUG_NEW
    4 o0 v$ I0 n: a: _' V$ t( a  _1 \
  20. #undef THIS_FILE
    # U! b* ]* n7 o8 ^8 a) O
  21. static char THIS_FILE[] = __FILE__;
    ( ?2 ^& A1 c! Y7 x
  22. #endif( L2 a4 `" s" Z; O5 T
  23. #include "SkinResDef.h"1 R5 D  c3 X0 h6 a' e, @
  24. #include "ChangeBG.h"2 j) i( l( V8 n  C) ], ^; ?
  25. #include "AFXINET.H"
    : t; L; d( ?# s) ~
  26. 1 ]* R# Q1 P0 w! F) E
  27. #define TRADITIONAL_CHINESE 0" w  L: O- }0 D0 T) y* ^
  28. #define SIMPLIFY_CHINESE 17 A/ z) ?# x& V+ s
  29. #define ENGLISH 2+ s, E) W7 R6 k9 B. w- O& ~
  30. int m_iLanguage = ENGLISH;
    ' V/ b+ W, T5 k/ N
  31. /////////////////////////////////////////////////////////////////////////////$ i, T7 Q$ [6 d0 B! J9 l5 P
  32. // CRevAppApp  \1 i0 c9 l- b7 c' D

  33. , B( p; P! W% _2 Y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! R8 S4 Z* u8 }
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    - }, S' I, Q# Z  r$ g+ X& V) n
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.' k. R' t7 y( C1 |) F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!! p! ~+ p4 r  [. O& j
  38.         //}}AFX_MSG1 w( |/ A/ _* Q1 d  ?# L7 B' f
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)$ P  c& p7 L+ C& V, B; _6 m5 p- u
  40. END_MESSAGE_MAP()
    7 }  w6 b% ~! M- z& k. B; h

  41. 0 f- o$ |' F7 ]* S' z2 {; u
  42. /////////////////////////////////////////////////////////////////////////////
    $ K4 t4 w0 \5 E- T! Y9 p. g
  43. // CRevAppApp construction
    : q( M2 Z* a2 L- v6 O; j8 N+ v

  44. 3 w  n: n6 @/ X  n0 e6 [5 ?8 ^  _
  45. CRevAppApp::CRevAppApp()
    2 {, G  z9 N2 W6 w
  46. {
    7 e+ N- R- @2 e3 x0 k
  47.         // TODO: add construction code here,& L$ K9 f' I; @: V" u: e! k/ W2 e
  48.         // Place all significant initialization in InitInstance9 p8 C/ }6 G2 s4 f
  49.   bDisplayIsBig5=FALSE;
    5 Q) Z# p# Z6 Y
  50.   bRestartUpdater=FALSE;. \+ d% y' r" ~2 p
  51.   bFinishUpdated=FALSE;9 T  N6 B% B6 p/ d" ^+ V+ e
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    2 k* ^8 N# A4 ^
  53.   InitChangeDataBig52GBKS();( G2 ~) \) m: \) o) I5 u
  54.   InitChangeDataGBKS2Big5();
    , s5 d) g4 R6 O1 i* t- o8 F
  55.         //" O% ~, N/ g+ v) j' G
  56.         bClickRunExe = FALSE;
    - }6 y8 q$ b6 ]9 G
  57.         //
    6 p1 C" [. _) t# |" ~
  58. }
    ! J' o% ^" o- I9 S8 I
  59. 7 d, D0 O2 b* S6 _
  60. CRevAppApp::~CRevAppApp()$ z3 A* A7 J: }& X6 [
  61. {
    " k' h" u8 z3 h2 E
  62.         // TODO: add construction code here,2 _2 t6 w$ A7 o
  63.         // Place all significant initialization in InitInstance
    , c9 z0 j/ T1 ]' W8 A  [
  64.   EndChangeData();
    . W5 c7 r1 ^% U7 t* ]" F3 P, |: X
  65. }
    3 k9 Z  P9 Z$ g7 M, E  i; y1 ]% e

  66. , @3 m: Z2 X, K$ Q) X  [1 M
  67. /////////////////////////////////////////////////////////////////////////////
    , E; \0 J% @0 t% T' t0 Y
  68. // The one and only CRevAppApp object
    0 T+ ~5 a% [' j5 F% D

  69. ; ^5 |% T# k* z5 [1 W' z2 r# p
  70. CRevAppApp theApp;. h0 L) k* `* O2 H. M1 Y5 T  p) z
  71. 3 y0 N1 R  U% u" X( g6 M
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)8 k' \  f  r- l) }' J9 _
  73. {3 R  _8 \: n5 Q5 K: R! g  p
  74.   int iEOF=0;
    - |5 h: ?& \% Q6 a2 A& l1 P
  75.   char szTempName[MAX_PATH];
    ( p; @: `1 N* B! N
  76.   *szFileName=0;
      }* E5 K9 L5 M# b
  77.   iEOF=fscanf(fp,"%s",szTempName);7 S* A' e* ]; w
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')6 R' u) ]. k# M; W+ `2 }
  79.   {7 Z8 e/ ?# E' O5 W+ O
  80.     strcpy(szFileName,&szTempName[1]);; G2 V/ X8 ?) t. i! p
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): [/ q3 i% ^6 l* I
  82.     {! q: U) u3 v6 b% W# c/ D6 |  |
  83.       iEOF=fscanf(fp,"%s",szTempName);
    7 I) C$ ~' M) U' \) X: J, k
  84.       strcat(szFileName," ");
    # w8 L2 F. @" i9 R
  85.       strcat(szFileName,szTempName);$ r) i7 P* H! k3 }" [
  86.     }5 u2 s& g1 n4 I6 N. o  a
  87.     if(strlen(szFileName)>=1)
    % r; n  s' Y" h4 }/ U+ D7 F
  88.     {
    ; W! G: Z' U1 ]( D! H3 E" y2 @
  89.       szFileName[strlen(szFileName)-1]=0;
    4 b& K! d2 K, a* J$ A- v) B6 [. p
  90.     }& `# W% M  Z3 c: |* A
  91.   }% M- L: a& c4 a
  92.   return szFileName;% S' O  N. ]' R' I$ W3 _1 x
  93. }  ]0 x: _/ q  V7 s+ c; p# b
  94. # A; q. b6 f  o% y7 x  Y( d9 o0 x
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)3 C; {: B4 s6 X4 O1 C" x: O& O
  96. {0 S: G( J$ _9 m/ h7 u' ^* Z/ r
  97.   FILE *fp;& G6 k) \5 J! }, `  A
  98.   char *key=NULL;5 h3 u. E5 C. P# z: P
  99.   char version[MAX_PATH];
    ' R, J2 h& E9 f, g# o' E
  100.   LPUPDATEFILE file,olds;/ X& B! A2 ]. d0 e2 T: }  B
  101.   std::map<CString,LPUPDATEFILE>::iterator p;6 u- n+ q: D3 h2 L  r: X
  102. , ^7 H4 h. O5 [2 t5 L
  103.   UpdateList.clear();6 a3 c; c' ?) c  N7 u" u7 B% k* @
  104.   UpdateFile.clear();/ Q% u, K/ g( c
  105.   if(GetFileAttributes(filename)==-1) return false;2 E, L3 O4 A9 _; ~8 R
  106.   if(!(fp=fopen(filename,"r"))) return false;4 O4 o) s9 O& p" L4 P% j
  107.   fscanf(fp,"%s",version);
    $ z- c- @) e7 g- ?
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }, [6 c0 z1 v) n7 P. T
  109.   while(fscanf(fp,"%s",version)!=EOF)
    6 l- F7 [# P* P2 _% Q! k
  110.   {' @4 K. G6 N1 f4 }0 k+ I; D
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 v# ~& w/ Q5 L
  112.     fscanf(fp,"%s",file->path);
    + ~+ T4 w) v* i; e; M9 t/ I& M
  113.     ReadFileNames(fp,file->file);, ^: s& l7 U5 @! M4 x
  114.     strcpy(file->full,".");6 d; V# q" U5 h" D  Y8 i
  115.     strcat(file->full,file->path);; S  X+ J7 W4 @2 k
  116.     strcat(file->full,file->file);  Q; h3 ^4 T2 i% |3 g* O/ F. ^9 I
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ( O, r: g+ S# Z" R; _' e
  118.     {
    ! g+ \  i/ y1 X" h
  119.       file->vers=(float)atof(version);
    6 m; r' C  o  U6 d  R
  120.       UpdateList.push_back(file->full);" g( q' A7 I% g$ T8 [/ p. e
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    $ X" }* I6 o) I0 a
  122.     }
      O. b4 E$ B/ N  I! k! p
  123.     else% G  z- a6 x, ^# N1 F, t
  124.     {$ ?8 d, _- y& @( k  j4 s
  125.       olds=(*p).second;/ H) O' p3 _' N" j; e7 I* J
  126.       if(olds->vers<(float)atof(version))
    # A1 w  I6 {$ a+ P* w/ E; H. i! o
  127.       {
    3 o$ F* g0 e% \. e2 r
  128.         olds->vers=(float)atof(version);( L0 P3 n2 ^' k) @
  129.       }
    ( A. B/ g1 ]& X+ {4 F: X, ?
  130.       free(file);6 j: y, A6 T8 A' W
  131.     }5 q& t6 q7 @; h& i$ V1 F
  132.   }
    " f5 ~% t) T  J. c
  133.   fclose(fp);% a  E* u6 ^0 g; @5 X9 B5 w# a
  134.   return true;
    $ C, c( p9 W, d; t5 D# P; e
  135. }3 {4 W0 r% z. K" V. |
  136. 9 }8 g+ g2 h; G5 s3 L8 b
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)) Q) S4 b- E, V5 o8 V  y( i
  138. {
    / V' h8 F5 N3 W7 X( G
  139.   TCHAR  szFull[MAX_PATH];
    ) L0 ?' F  X" E; m7 i" j
  140.   TCHAR *token,*inter;
    , U# O  R1 g$ Z5 y) T+ S
  141.   *szPath=0;
    . r- |# {- ?' g
  142.   strcpy(szFull,szFullPath);
    % r9 E8 y: o: o# U
  143.   token=strtok(szFull,"\\/");
    ' W( }2 G5 y( K; f9 \
  144.   inter=token;
    , C9 a% z! |1 I; i8 X
  145.   while(token=strtok(NULL,"\\/"))
    + l; ^* b! C# T9 _0 b4 r
  146.   {
      j; l2 l2 H8 q9 {+ y3 j2 i7 y
  147.     strcat(szPath,inter);* W- E+ @* H7 X9 V! [
  148.     strcat(szPath,"\");2 Q( K3 U& C( l. W
  149.     inter=token;
    9 s4 N3 ]2 G* C5 q; H) V
  150.   }2 r+ g0 c% R6 h- P7 ^; M/ c
  151.   return strlen(szPath);! R' R* i) e* R, u4 m* y1 {
  152. }% t* z9 H! M5 P# S$ ], k( t; x

  153.   A  }; `, u: ]) D- h2 Z& P4 V/ @) y8 H* c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ ], S8 w9 O$ g, J$ q0 @  b
  155. {3 m  d; {" b+ [% G( V% H& H$ ]
  156.   DWORD attrib=GetFileAttributes(Target);
    $ y3 {! m" ~, y1 M
  157.   if(attrib!=-1)  S* {( B# H7 A/ V
  158.   {
    1 m! [9 @7 E. L9 S5 S9 v
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' r& q5 _% G8 }
  160.     {9 x# r1 d3 H" B8 s, l8 C
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    , N4 |0 b& \4 v  V% t; T  e
  162.       SetFileAttributes(Target,attrib);
    1 v- v1 w5 t" ^0 m9 s
  163.     }
    " C5 Q3 D! K. G  p/ g3 T& q2 N
  164.   }
    9 a0 q6 {7 `$ W2 x. i7 r4 C4 ]& N2 k
  165.   CopyFile(Source,Target,Erase);" I9 A& K0 ?4 f1 {3 H
  166. }
    # t8 L# T+ g! j7 ?5 D- z
  167. 7 L3 q# F, l5 Q  O4 i' \) d7 {) Y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    2 [8 ]$ x* j; p) F: R0 c/ d% |
  169. {
    8 B' u% f. j7 i- P. a% N
  170.      FILE *fp;
    1 F8 r& k- \2 D3 F7 n
  171.      char  szBuffer[8192];" Z! e3 M/ b1 I; R0 Y3 s% Q
  172.   va_list  argptr;
    ) U4 T8 k( ~$ {9 y( g
  173. % }; L6 \  ^' f! H
  174.         va_start(argptr,message);
    ! a# q& u9 t. U" @5 u6 f
  175.         vsprintf(szBuffer,message,argptr);/ L, m/ c6 L2 I7 q' ^* a! E9 E! `
  176.         va_end(argptr);
    " U" [$ A( b3 L  ]5 l" B
  177.   fp=fopen(FileName,"a");# Z( c! X+ C, u
  178.   if(fp)0 y8 t0 s5 L4 @
  179.   {  |8 V& |) v- y( _* M- x
  180.     fprintf(fp,szBuffer);2 P& Q; b8 H) K$ b3 m( m
  181.     fclose(fp);
    - `6 j! G; P- \; W( g% _- ^; `7 J0 ]
  182.           _flushall();+ m" r, z) J2 R, a
  183.   }4 F8 t3 e  I4 i7 I
  184. }
    ( j1 J9 `2 j7 b) x

  185.   X7 ~3 }5 Z% C
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ( A" x3 y* j7 ?" S0 ^9 b0 \
  187. {' f" p2 k) M5 [0 c8 }
  188.      FILE *fp;! R; c. g  w4 S$ \4 d  h0 g
  189.     DWORD  attrib;" m2 d9 R$ }' ]' ?0 V
  190.   attrib=GetFileAttributes(FileName);- C! b% \4 n5 @4 N: |: V
  191.   if(attrib!=-1): w; k- q! _, o
  192.   {0 ~% @: T+ I. s
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    9 _; _. Y' a, _, m: d
  194.     if(!SetFileAttributes(FileName,attrib))
    4 j  S4 d  K$ p& s! e  t4 A% G
  195.     {) G" P  G6 S0 i9 v7 }; j
  196.       return FALSE;
    0 s9 V. r( n/ s+ R
  197.     }) t: _2 z0 y% |- ~& ?% @7 J1 \
  198.   }
    , {5 ^3 Q/ |4 [, {, [
  199.   fp=fopen(FileName,"wb");
    : X  y9 i: \' m. I/ p& o$ Z
  200.   if(fp)
    1 p. ^# c) V! l6 T+ |+ y1 q
  201.   {
    % U2 M2 g8 z3 u5 a" @" U: p1 K! e
  202.     fclose(fp);8 h( C0 w. t1 c: ?$ t+ m
  203.   }' u* ^) k: L8 f( |
  204.   return TRUE;
    ! E+ D  ~$ ?7 t
  205. }, q3 d9 x' v: J  |% y6 g$ c4 J7 `
  206. 7 \0 X7 b8 n* }. o- Q) \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)% @; I+ ~* W4 }" r
  208. {' t0 p8 s5 q; {/ g: y% ^
  209.   char filename[MAX_PATH];# n& H; G$ Z4 C: J& S4 S. N* O
  210.   LPUPDATEFILE file,olds;
    ! F3 y, d1 _, ~7 h
  211.   std::map<int,CString>::iterator i;1 Q8 n2 J4 @9 y2 |# M
  212.   std::map<CString,LPUPDATEFILE>::iterator p;+ ]/ s/ R( C' ~9 z
  213.   std::list<CString>::iterator l;
    ) m, y( v0 M% s8 ]/ a+ q/ c
  214. 5 f/ e6 ^+ J0 {+ {" V/ f
  215.   if(bFirstUpdate)) S: |8 q- \4 R* d  X/ f4 M
  216.   {- f5 _" l  }5 w0 D) p: T5 V, A, v
  217.     dwCurrFile=0;
    ! c$ j' P; S- m7 K0 }: V+ i
  218.     bFirstUpdate=FALSE;
    # q; K( U1 H* E) D4 ]9 B: Q7 w
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + h# m+ E& Y' B) E
  220.     {) q3 e5 f+ ~; n/ a6 N* q, [& u+ g8 v
  221.       dwTotalFiles=UpdateLocal.size();! z9 W0 U/ k" _: {4 k! ?
  222.       dwDownLoaded=0;
    . w% S) e0 V; J% D: p$ C, n& {2 `1 e5 s
  223.       bSilentStep=FALSE;7 W& A0 d; T# B7 k, z/ x
  224.       bCompressed=TRUE;
    # y" M# r- Q) t& p
  225.       strExtLocal.Empty();
    ! n% u) ]2 N7 T. Z
  226.       strFullName=(*i).second;- H- K( i( V- T
  227.       dwProgramState=AP_CONNECT;. h1 l, z; |- d4 |. l
  228.       return TRUE;
    & v/ f# z1 `' S# x
  229.     }: m8 F0 s# v: K  I) `
  230.   }8 G6 H' c0 `. \2 ]9 @! _/ \" E
  231.   else if(bRestartUpdater==FALSE)- a) }/ X$ `5 _
  232.   {% E, |( X  X. u+ ]+ P4 P, Z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ' I% F3 a6 i; O1 U6 ?* n2 [& |" S
  234.     {& q) {9 E' P# K' G& e' z8 k" g
  235.       file=(*p).second;4 M, K/ N" Q3 g$ q, ^
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - q  v! t9 n. M2 F, H
  237.       {. \; U6 ?, d6 u6 ?' T6 |5 O
  238.         olds=(*p).second;
      _$ b" {3 w5 b" }, f
  239.         olds->vers=file->vers;
    & s7 C6 @7 ]+ t- e; \
  240.       }
    2 g2 q3 ~# u8 w& A- X5 i
  241.       else
    ; O% @8 r6 k/ E% `9 B5 D
  242.       {
    3 C" L7 e% `4 h4 Z! B0 o/ O4 ]
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 Y( N6 z4 ^! g* X
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    6 U  q2 v7 m( ?
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    / D' T1 w* r; N, t1 x% z
  246.       }
    2 W' e( P. Q* ?/ i+ |3 A( K! d/ C
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( W6 V& T+ U$ w+ C: ]" r6 j: O
  248.       sprintf(filename,"(%s)",file->file);  x3 ~# k* l; E( ]% F) C
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % X6 X1 ~; z- Y) Q2 D3 `& o
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }4 o/ i! N, S* z
  251.     }0 U' C+ X3 ?% S# Y7 V0 n9 U1 c5 t
  252.     dwCurrFile++;
    & X: W  c5 y% q9 f+ ?
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 l7 Z2 Z0 p0 L7 X0 G- Y
  254.     {6 G6 t% y0 ?/ k  G1 c8 q, A
  255.       bSilentStep=FALSE;
    9 D  _$ ^( r0 c
  256.       bCompressed=TRUE;
    4 g* A% r' K, N" n6 N' O0 ?
  257.       strExtLocal.Empty();6 Z$ r# L1 u  i, M9 H  _
  258.       strFullName=(*i).second;8 g/ N) ]4 g6 o7 S4 r* t/ u" {- g
  259.       dwProgramState=AP_CONNECT;
    + ^  r& H; F8 @+ L/ U  x: ~  R
  260.       return TRUE;
    9 ?5 D- U6 w! n2 R. Q
  261.     }
    " z; p( s* [/ O" y$ A9 A
  262.     if(!bRestartUpdater)
    / R- Y( n/ n9 y8 T' r
  263.     {
    6 d: o- j, O+ X" [
  264.       int iCurrSize,iFileSize;
    3 G* l/ K8 V8 w3 e  L
  265.       iCurrSize=0;
    * B6 a0 t% h6 S- U/ P2 x6 ~. ^; Y
  266.       iFileSize=UpdateList2.size();
    : t4 t9 s/ I  ]) Z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % ]! ]- e, }6 {: H! V
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");+ k! J7 s2 K3 F! v! x9 C' y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    8 g6 t; v+ W0 t0 v: S) p. e6 |
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 M: C" P( t4 F& u7 S% J# _3 _  T
  271.       Fclearf(".\\update.dat");
    ) z  _# D: e% z9 R# D8 U
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    1 i3 |" B" I, a; q0 h( {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)6 O0 @+ Y' z; \- P, R. @8 c
  274.       {* U4 h% ^4 n# S/ D+ T
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    5 I+ Q6 o* x* U
  276.         {
    1 S0 _5 ?8 {1 U3 u" w1 M1 u5 o
  277.           file=(*p).second;9 f1 _( n5 T( {9 s. c4 _" @8 \5 v" z
  278.           sprintf(filename,"(%s)",file->file);
    5 U$ D9 b( g6 `' k- p
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # z" e- X; g4 p4 [* w7 O$ R
  280.           iCurrSize++;
      i' h& U. f' R! H8 a
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    8 W) s9 @# q7 H9 s* J; i, {6 z, T
  282.         }" Z8 b# S2 I2 X2 b9 p% j% k
  283.       }
    & J# _1 h" s+ ?; _- ^$ |
  284.       unlink(".\\update.txt");
    , b) Z. M- X5 L5 N1 ?
  285.       unlink(".\\update.tmp");6 J, s6 X) }5 A5 G5 K. N
  286.       Fclearf(".\\checkversion.dat");
      _+ C6 K* N4 D0 W  L+ r( d  V4 X* x: |
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);  d3 X6 p2 c  d: q9 y" r/ J
  288.       if(UpdateLocal.size()); S  j! h& ?8 d
  289.       {
    0 u! h" y6 m. I) `& B5 u
  290.         UpdateLocal.clear();: ?* i( w2 Q3 W/ Z
  291.       }1 U8 ~: \! X: [4 b& F
  292.       if(UpdateFile3.size())
      I* c; p; c' y0 y$ h% q. g
  293.       {! @0 ^- m2 }6 P2 k2 |/ a' s
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * M+ ]7 I8 n! E! `+ _; U
  295.         {
    2 n! ?* d" U* T& W8 A
  296.           file=(*p).second;) l8 ^; ]/ r) L/ s/ Q. S
  297.           free(file);  R) a( s8 g5 f% X. ~7 v  g
  298.         }( t2 O! I8 P' S- `3 @3 O
  299.         UpdateFile3.clear();
    . F  K1 }& e7 {' N
  300.         UpdateList3.clear();
    ) N9 f7 P$ ?6 z8 t4 z% G4 U
  301.       }! d' A0 M$ D" g9 t
  302.       if(UpdateFile2.size())
    8 g  p9 x& K* v( z% ?/ J# G
  303.       {
    . Z# \  W) @' J  l
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # E' b1 Y2 u; O% d
  305.         {0 q' g& ]. z. n; N) Y6 f- N' V
  306.           file=(*p).second;3 W1 }) b  c+ t. v; j
  307.           free(file);
    , f0 L" w( u; m0 M3 E& i- {
  308.         }. v7 F" a' |. j. O9 O5 }% |, f
  309.         UpdateFile2.clear();
    0 b% U4 u3 T  l5 h
  310.         UpdateList2.clear();
    $ ]6 V( r4 K; r8 w& x7 c9 c
  311.       }
    ) u+ N+ ~1 x) P, l: c
  312.       if(UpdateFile1.size())$ t0 |$ y) e$ k+ Q2 t) R3 M
  313.       {
    , F1 e* R! V6 I- r8 K
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # k8 p2 C$ }5 }9 e; d7 A0 _
  315.         {7 Z) K& O* E; a3 K
  316.           file=(*p).second;
    8 a7 c; R2 I, d
  317.           free(file);
    3 R$ v2 K& ]* k- \
  318.         }5 Q) s: a# ]) ]$ O& l7 D( r3 u) J
  319.         UpdateFile1.clear();1 ?2 g6 s+ w& O/ @0 K7 W
  320.         UpdateList1.clear();2 v: K: d: F! Q* }& X8 t! |
  321.       }
    ( |7 E6 ]/ i5 l
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));4 Q6 I- Y. E' p+ I; |, g. D
  323.     }! R  B, t' c! U7 Q. Z2 H
  324.   }
    5 Y" [5 V& C6 p* B4 M
  325.   return FALSE;
    ' e; ?3 m, E1 z  R2 r1 O
  326. }
    2 ?) w/ h0 }8 z3 P* V, s1 O+ T

  327. ; \2 o/ f* z! r' Z0 P) S  t& [
  328. void CRevAppApp::ClearAll(void)( i: s/ H8 u3 Y7 f. Y* `: D+ L0 [; U3 q4 t
  329. {
    . S* g2 [1 ^: N. V5 ?
  330.   LPUPDATEFILE file;
    1 _3 Z: m7 G4 Z$ E& C( M7 K, r
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * I3 X  l  y( f- z
  332. . v, M# @, e1 ]4 K( L, Z
  333.   if(UpdateLocal.size()), B* L; {4 z( d
  334.   {1 ~5 k5 w) L/ u+ c1 E
  335.     UpdateLocal.clear();: p- f( }+ t3 A8 R. m) Q" l- l
  336.   }, T5 m- r  _% q; i: B
  337.   if(UpdateFile3.size())
    % F! u6 y/ h& k! g  x2 }5 E
  338.   {6 b; Z9 Q% d0 R8 Y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ G0 |1 |+ R7 r4 u3 U/ O4 K* Q8 A
  340.     {
    7 y; N1 t- U  u0 q/ \! ^
  341.       file=(*p).second;( X3 {% i2 k7 r' X0 `$ a( T5 A
  342.       free(file);6 q) A7 J. i. s% `& D
  343.     }+ Z6 F% J# H  Z1 z- r1 C4 K) S. J
  344.     UpdateFile3.clear();
    & R! c0 \) [; m, k0 u( w
  345.     UpdateList3.clear();4 j  K4 P# r2 Q, |
  346.   }
    5 K! {% _0 \. d' D. u
  347.   if(UpdateFile2.size())' `3 Q2 n! w7 C) G: R: m# x
  348.   {
    ) Z( Q% e* e0 X; w+ l- h. @
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* N- G3 v" S; P
  350.     {8 h- b* V' e! X+ \0 _
  351.       file=(*p).second;
    : t1 j" w- f( k
  352.       free(file);* h$ Z! [- v! m% i3 D; x% R
  353.     }+ v# T# v# i' H6 W' J- |0 q% t9 O( E
  354.     UpdateFile2.clear();
    " ?( X: |1 E# t( j4 e
  355.     UpdateList2.clear();
    ! B( E4 p* H$ x5 _5 T8 \
  356.   }3 L2 @9 N5 o. Z. U( ~% Z4 a
  357.   if(UpdateFile1.size()): {6 t( W8 O1 N( N; j
  358.   {
    " u- C- Q8 e7 ~) ]/ ?
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& W  p6 P( N3 M' Q  C$ _
  360.     {
    % c9 I5 L2 f, u, O; l5 P3 f7 ?
  361.       file=(*p).second;# `6 M: J6 t( l
  362.       free(file);$ u7 _: t! p. N9 G
  363.     }! Z3 s% j  c) P& o
  364.     UpdateFile1.clear();* u: O! ^5 P# _9 c
  365.     UpdateList1.clear();
    7 w0 ]  o, }' e, _  @+ C4 f3 e
  366.   }
    6 L, j: K3 r! v+ ^5 S- C
  367. }  9 _: n* ^  U: C' F( L
  368.   
    , ]. P4 A; `5 J# g% V2 `
  369. BOOL CRevAppApp::CheckLocalVersion(void)3 W' t4 h# C1 i6 i4 r! K
  370. {/ P8 \6 J0 J% o- A. ^) e
  371.   int c;
      f& f9 I  g+ b# n% Z
  372.   LPUPDATEFILE file1,file2;
    9 v% b- \/ |9 x" R9 Q; w( O
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;; s0 A8 l& J- S2 g4 m& o1 D
  374.   std::list<CString>::iterator l;
    9 m5 f5 U" `" F/ ~8 e4 P

  375. 4 r  `$ M9 e+ v5 v  D. R; R
  376.   UpdateLocal.clear();2 E% i4 Q+ I' L$ F$ R' l
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    4 L3 I/ a5 k' o8 j9 j% t0 t
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ' ]. s0 v. I# t8 X9 A2 L; K
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);1 A) F% \1 q% i2 T+ Q, o" S! Z! l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    % O  \$ c: m  j
  381.   if(UpdateFile3.size())+ ^" |: o. F2 w. M6 D
  382.   {
      H6 O4 B9 ?( `5 x+ D6 E1 R$ d
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    * q+ \* m" L" Z1 d7 c( ^
  384.     {$ o" t& `6 ~: O. a7 \1 B
  385.       file2=(LPUPDATEFILE)(*i).second;
    . \0 n9 V, T, k- k& Y' H0 D
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 C0 F) h' N/ {; S. t' d7 {- ~
  387.       {
    . W/ R- p$ d5 e2 |/ u# H+ G4 O
  388.         file1=(LPUPDATEFILE)(*p).second;
      ~( F5 f, f3 F
  389.         file1->vers=file2->vers;
    0 N; q* h( Q4 E
  390.       }( {6 m( e6 V1 ]  \
  391.       else
    3 K8 W( _4 U3 f" S+ h. E
  392.       {
    ( c* k8 j  J) r$ |3 }9 Z) Y
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: s$ M+ Z0 ^3 b2 q2 |, {. o' [
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 s- Q: Y% C! k  O
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    4 m/ _3 k0 w6 ]0 `. `
  396.       }
    9 e* s$ t( k( g2 w/ X7 t
  397.     }
    ) m# p2 U, V% n# n& S
  398.   }
    $ X: V8 s4 @0 j7 n* j, @7 C
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 `( V$ e1 r. `! {( i/ F
  400.   {3 ?% C$ z. p, k- C, j8 ~
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 ~9 C' z2 w" `5 P3 U! W7 [5 R; P
  402.     {
    % B% @) t* X  g/ ~+ s* z% R8 V  |5 g0 M
  403.       file2=(LPUPDATEFILE)(*i).second;, y4 F4 W0 A7 R6 o* E  N, X: L/ A
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ P5 h  v- |& k! V- h7 l
  405.       {" @+ S0 X1 C' z: q' P8 K3 g) a
  406.         file1=(LPUPDATEFILE)(*p).second;
    % {: E9 N# P) u4 C4 ~0 C9 w
  407.         if(file1->vers!=file2->vers)3 w! e( {" ^  b& p( D* [$ ~! j
  408.         {
    7 w- n( ^& d0 b7 b: H
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' |! K% f$ ]6 Q
  410.           c++;
    7 [1 c6 ?% X9 ~+ b9 ]
  411.         }
    3 A* C* ~( g( I8 j( W  E
  412.       }
    + W2 z8 ?; Z/ V! s
  413.       else  w  u5 p6 c+ J% l& s# t
  414.       {. E6 }" K  Q4 G9 X
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( i. N' _2 G. A; A  f2 s
  416.         c++;( z" I  ^7 S$ N( u9 g6 E
  417.       }3 R/ W9 g! d# _5 ~0 q, `! k
  418.     }
      L3 E* o" k2 @" J6 h9 W
  419.   }
    ) V: @6 M4 M- Z7 B: s5 T$ z1 p
  420.   unlink(".\\DownLoad\\update.txt");
    6 m6 A2 `- b0 \
  421.   if(UpdateLocal.size()) return TRUE;
    5 r% T7 P# ^& c' `1 `: k, l( p
  422.   else                   return FALSE;
    9 Q6 x( P7 ^2 ]
  423. }+ \3 ?5 m+ e) n( i
  424. 3 @# u9 F; [4 d; y! D' K# o
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"3 g2 K6 z. z/ m6 ^+ Y8 p
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") g! o; \" f8 \+ N9 ]( \0 \
  427. , |' V& r/ O- y0 y
  428. ) F8 u/ y( X. Y7 h( [7 \

  429. / o" K6 W# ?% u1 I$ A$ W5 Q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
      f6 C5 Q0 G8 u8 ?  S* ]- I* T. h
  431. {9 ~4 r' v4 u& W) Q1 d( q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;9 q, i( |1 K. P
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* z5 i! L" }- b( H% H4 c
  434.   {0 w* p' ^: e% F2 U& u
  435.     char szLanguage[50];; w. M* }9 C9 [6 Q0 a
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & ~1 P+ P. c; U& F1 }7 o
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , j8 ]6 D: K+ s* r1 P0 W2 I/ @5 O
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " q2 Z* p8 ^+ c
  439.     else                                   m_iLanguage=ENGLISH;
    + A; h/ Q: Z+ x/ f
  440.     char szRegister[100];
    6 o( ]  e( Q) k. n& t, g7 Y
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");( T" Y. ^: h3 c& Y5 p- P
  442.     strRegsName=szRegister;- ?4 F/ _) S8 |" y7 [
  443.     char szPatchURL[100];
    9 S7 o/ Z+ h. u  n
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ D# D) S4 W, d, a$ y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 m3 a! a1 p( |  \6 W
  446.   }5 X3 ^! |" l1 `, U, M
  447.   else6 T- A6 r1 `! A* g3 h6 M
  448.   {( c. ^/ T# K5 w* h. {
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* a  F4 b5 Q  d7 X9 ]
  450.     strRegsName=DEFAULT_REG_URL;) Q  R* ^5 }& e$ Q% H5 L2 ^
  451.   }
    , C7 y* E6 S, P( u8 F$ B
  452.   if(GetFileAttributes("hosts.ini")!=-1)7 M  \& G0 o/ S8 b; M/ w2 y
  453.   {
    ! B1 a6 Z% L/ z
  454.     char szIP[50];
    9 s* e7 G* Y; P6 b  `% ?# l$ C) E
  455.     char szDIR[300];" Z! [1 Z- i& R4 A+ d0 F& [
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    $ R. m( _. ]/ c! f/ W  V
  457.     {
    ' o0 S; z( ~4 d. t0 `& k* C" }+ _
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");( ?% D$ |1 j# B+ R4 {
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    0 h% f( }& L; D7 V9 e$ C6 i& f1 U. `
  460.       strHostName=szIP;* g9 }7 ^4 f1 I
  461.       strHostPath.Format("/%s",szDIR);- ^( @/ T: M" g4 @
  462.     }
    - N. @) f! M# W9 i
  463.     else; y, x# w$ Y* i! n1 @
  464.     {# ]3 |, ~$ e+ [! h( Z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # ]* B9 O  z! x7 Z
  466.       {. L7 B% f' q0 Q' O- m" x7 x
  467.         char szLanguage[50];
    & J7 o8 n( u7 k$ f$ n: o$ o
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( }- ^4 I& ~* }) d" S6 ~
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 f+ ~  y4 i6 V# L, U5 r/ d/ w) h
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 j& w# M9 q7 \0 D' S
  471.         else                                   m_iLanguage=ENGLISH;
      A2 m2 d9 U& u# J$ K
  472.         char szRegister[100];
    / S2 `2 C1 m1 x; {9 C/ W
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % v0 a% P$ K. y/ {% ?  k
  474.         strRegsName=szRegister;& b; u; Z7 X! U
  475.         char szPatchURL[100];8 P+ G: A. U8 F% z
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * J, s. M! B7 ^! t' h$ P
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; g' X2 D9 [8 v6 _" ~
  478.       }! H# I* {1 {9 w7 [; q; ]
  479.       else. S, }3 I+ ]6 k7 D2 G
  480.       {
    8 P4 ^4 n: _  t$ e% ^1 f. b: x  L
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  U1 H' P1 d& C  w% L
  482.         strRegsName=DEFAULT_REG_URL;
    ; z& j. W. I$ w' d
  483.       }5 @8 R) X# D- b+ v2 L+ V( x# S" \
  484.     }1 a; _0 C$ v2 d* V' d; a. u& d
  485.   }
    / k& _" @7 T$ b- f- E/ V$ a6 G; O
  486.   return true;
    $ o/ M) [! [- a
  487. }: l! {! H9 e5 ?+ D( [9 k  R! p
  488. 0 F* m6 p! a9 ]) c* b$ V
  489. #include ".\ZLib\unzip.h"; o" r6 z4 {* y( C
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    : l: [/ z, n5 x5 [! v+ q  v
  491. /////////////////////////////////////////////////////////////////////////////
    ( j6 v" M, _$ g# F+ w  Y9 v
  492. // CRevAppApp initialization' ?/ d# l' C" i; A2 j

  493. 2 T: L4 J& A6 T
  494. BOOL CRevAppApp::InitInstance()
    + y) x" C& ]% {, F2 ]4 I3 H0 c- G
  495. {
    ! m7 c$ y: }. p7 b. x& B7 U
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    2 k# ^* L4 j. D- @- G- W
  497. 6 B, S: a8 |7 p2 |: F* g
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);4 u" I$ h% b$ r5 q' t( y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))1 H* j. s3 m2 |( j
  500.   {
    6 g) e6 g, \3 r5 u9 J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");8 k, @" f1 _; _+ I: h/ `$ S
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: ]( ~7 O# q5 J) p/ y) o7 K' D
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ( a( |0 _1 s( i5 Z8 q
  504.     {
    5 f% j9 p4 D7 R( X/ \$ i& K
  505.       strcpy(szPath,szPathTarget);( j" C1 p# @, o
  506.       SetCurrentDirectory(szPath);$ _. o$ e  N1 b. y0 Q
  507.     }  s$ c& F0 V3 {- R/ y" \( y  p
  508.   }" \3 O2 s  P4 R/ p* d  ?7 X: r
  509. #ifdef _DEBUG
    ; y  B" m, w4 F0 B
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 n7 @2 j( F' I: u" w- X- M
  511. #else: H5 k3 r+ ?& o, D, g' J* _5 q4 b* _1 W
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ \  r$ D+ j1 Z
  513. #endif2 o# l3 E* o. W* |3 q
  514.   {; Q( ]4 h( W5 `
  515.     char tempFileName[MAX_PATH];
    / s) ?8 q: x6 A  L. _
  516.     strcpy(tempFileName,szPathSource);; s# e1 g0 d( F9 x) S! C, }
  517.     tempFileName[strlen(szPathSource)-12]=0;
    $ _, k9 u6 [* ^! P
  518.     strcat(tempFileName,"\\$CSUpdate.exe");4 |$ S% u+ `. S+ }' B5 L2 {- E$ L" O
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);9 F; [  N$ m; }+ E7 e
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ) k. H9 A* K, _3 b- c
  521.     return TRUE;- Y" B' |5 K; C# Y- L
  522.   }) ]% `: M. E1 N9 b7 U  O/ o0 D
  523.   // Nuke 0118: Delete run.exe
    ( ]+ G# G% R* e, }" D
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );6 M3 |' Q+ c" S: ?7 V
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");7 K8 z: Q/ @  _/ R" y4 p1 ^( I
  526.   if(!ReadCfgFile("Config.ini"))8 p+ V4 C7 K2 b
  527.   {" P' v% G  d+ k" S
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);5 x1 `4 S! |4 D. m) P
  529.     return TRUE;6 h, V  z' o& j
  530.   }
    $ k) k$ l7 t8 x' W' o* a( @' L
  531.   HANDLE mutex;
    3 c- {/ z2 b: _0 }- w
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 S9 x, T- o+ k$ R
  533.   {
    - Y4 e# w2 p2 _5 ]; {, v
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)* q* [' g8 S- ]1 z- @
  535.     {0 h" @8 l( I5 d9 G6 Q3 M, ~! g
  536.       CloseHandle(mutex);
    ( [# d4 E5 b* w; l  V
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ; t9 P' _' b4 _# r+ T2 ~
  538.       return TRUE;
    , _7 @9 A% m  t3 e& W7 V9 J
  539.     }! b' M& e) C7 T+ I
  540.   }  2 X& O/ F$ o- S# C
  541.   CloseHandle(mutex);
    1 Z" ^2 K) b' r- p: o) X$ |0 ]
  542. 3 y  K# b  U9 P, b
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);/ f. K# G  L4 c: g3 s4 A. r
  544. , C. w3 G3 [& S) ^
  545.         AfxEnableControlContainer();
    8 U/ R  n) {' E( H3 r0 g

  546. 8 V. z& e0 @  y4 s* B+ v
  547.   bCanUpdate=FALSE;4 k: Q0 K  d; v+ L/ T
  548.   dwStartUpSteps=1;1 N$ g, r9 }' ^/ f# z/ P
  549.   dwProgramState=AP_NOTHING;
    # r& t$ y$ Z+ R$ j9 ?2 a' D
  550. 9 |; I7 t5 i! \7 S2 M1 _: t
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);: z$ W5 g+ ~$ g" S( Y: \

  552. . t' }9 v6 }6 o; Q; @$ R* M
  553.         // Standard initialization+ I! w' Q- W* ^
  554.         // If you are not using these features and wish to reduce the size
    9 T# ~3 h& ]! @0 b
  555.         //  of your final executable, you should remove from the following
    $ y( Y, U( G$ d! e3 n" l
  556.         //  the specific initialization routines you do not need.' g1 N4 [3 j3 I' C! g

  557. . W9 B4 Z( d! f/ n" l* Y
  558. #ifdef _AFXDLL
    9 b6 D0 Q: ]2 X' p7 E% i2 J2 Q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ) c' ~5 z9 P: d# D
  560. #else) P% I0 G8 L, h5 g# f
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    / s! e5 z' n6 B) i- A+ V
  562. #endif' m4 D0 Z/ H; o  R
  563. ; O0 x: E+ j7 k4 r) ?+ o$ L
  564.   dlg=new CRevAppDlg;1 V8 {$ s6 c' |7 x7 L* i+ f' U
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    % K5 a8 R' G, W3 O
  566.   dlg->ShowWindow(SW_SHOWNORMAL);6 J4 Q- X4 S1 a: o) H
  567.   m_pMainWnd=dlg;2 ]% w! g4 s: v5 c8 Y: k( f
  568. % M) j$ I7 w! q6 W, Q& }
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 ?; Q8 |  e. m8 S( b4 ~4 R0 b7 y

  570. 5 y3 x6 W: \$ P: `
  571. //  GdiplusStartupInput gdiplusStartupInput;$ a5 y1 S9 {6 \8 E; l# T
  572. //  ULONG_PTR gdiplusToken;
    - A0 M8 L9 O! H; x, s8 }+ b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    8 A- I( N# N+ Z3 G; p

  574. - l& s# c. t2 E, M# e
  575. //        CRevAppDlg dlg;
    ! U) R0 d) S, ~* q8 {& a" d! ~
  576. //        int nResponse = dlg.DoModal();
    4 E# s& {0 \" i- h
  577. //        if (nResponse == IDOK)
    # V' E% [7 z1 r- Y$ N' \
  578. //        {
    5 E* r. x  f& ~' V, Y# G$ ~+ c, T
  579. //                // TODO: Place code here to handle when the dialog is  I6 ]( S6 B. D* h. m9 f6 f6 s
  580. //                //  dismissed with OK
    ' ~6 f8 `+ y; K$ L, d" a
  581. //        }
    % T! j5 v& A' F; G4 n9 q
  582. //        else if (nResponse == IDCANCEL)2 [( X, r' X2 S/ t' E8 a/ ^
  583. //        {4 `6 b" A0 G6 K5 Y% Z6 Y) r- Z
  584. //                // TODO: Place code here to handle when the dialog is  X4 H: @& k8 L" L4 Y
  585. //                //  dismissed with Cancel
    ( O9 B  h9 ^3 ?- B- K7 y) j! m
  586. //        }9 J& ~/ s; U9 o; @1 `1 W7 i5 o- o1 \

  587. / _5 {! M8 ]7 X! C0 p, ~- L8 r
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    0 y' Q$ V, `9 |6 S- l# a. v8 W
  589.         //  application, rather than start the application's message pump.
    8 t3 ^) v; u# B- R. M8 Q
  590.         return TRUE;$ ~  F, `  j& v  G# k6 H
  591. }
    0 y: B. \& ^1 d2 Q9 d- M
  592. 9 k* _& S: P9 {$ d
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 S1 \7 c- P, a) B1 j( B- l# D* f
  594. {8 l* L4 ^$ p" t' }
  595.   int i;
    ) \+ h$ p+ M; M+ }1 D
  596.   char *szRet;# V( r6 ^3 S# Q# W) |0 x; i
  597. 0 e4 H! E  A- ~: T' H
  598.   if(pSource) { itoken=0; sztoken=pSource; }6 x8 h6 w  P0 W' R9 _4 x
  599.   if(sztoken)& k6 v7 M0 P" L' @5 b2 f: v
  600.   {
    8 H1 ~3 p4 r5 s6 C% V( x
  601.     szRet=&sztoken[itoken];0 h/ F. e. y% l6 X% ~
  602.     while(sztoken[itoken])7 Z0 \( q" Q0 {( l) E4 G5 ^  m
  603.     {+ a; l  `: n; w0 J5 n% L. S
  604.       for(i=0;i<(int)strlen(token);i++)+ e% T2 z7 U+ c  Z
  605.       {9 u' E" L6 Y8 o2 K9 a5 u" l/ {
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])7 h" J; H" _0 n1 |( v
  607.         {. Y4 o& A) ~0 \8 m1 z
  608.           sztoken[itoken++]=0;3 C2 n2 f0 ?' D! x9 V" N
  609.           sztoken[itoken++]=0;5 q" ?, y) M1 l
  610.           return szRet;
    & H# ]% Z3 t) R2 o* S  V5 l0 H
  611.         }. t- p8 J( r: s( _# u0 {# g! E
  612.       }
    + C& Q/ C, N' G2 a& b7 J
  613.       itoken++;7 @1 v5 Q+ ~4 l' x6 b) l
  614.     }
    7 [7 Q+ P4 x4 L; `5 j
  615.   }& m6 [5 X! }4 r4 q9 s6 f
  616.   return NULL;. u: K) w/ p: N2 z0 @* ]6 ^' R
  617. }
    * g0 o4 r+ ]* D0 ~) J$ T/ V
  618. : a' B2 T% T7 C& B8 I9 @& }
  619. void ProcessProc(long Total,long Current)- B3 c9 H% p! V
  620. {# @2 d- ~/ Y% n( Q( u: k
  621.         MSG msg;) n" s6 w- c4 d; y& W9 v
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);! \8 N: B+ K  a- Z5 z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    . a/ M- p" t+ X: R3 O. q  P% o
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    $ Z% Y1 o7 e% x/ z5 ~/ }& k
  625.         {
    - I& A* o4 l) E! N
  626.                 if(!GetMessage(&msg,NULL,0,0))
    5 K3 \( S& p5 k( T; [$ k/ ^
  627.                 {% I! a8 v- g# k- {: g( B; v2 P6 V
  628.                         return;
    : ]. `" G! ^; E& Y6 {7 D
  629.                 }3 g$ W* z3 Q5 Q& H
  630.                 TranslateMessage(&msg);
    - A5 y0 w$ _$ u" l4 z6 _1 G- K+ e1 \
  631.                 DispatchMessage(&msg);
    8 ^" c. D$ k# j$ e& X
  632.         }       
    & c3 U/ f- R& ~7 H
  633. }. d& }. h. b5 A: V: L0 m3 _
  634. % s) U0 `2 K. H7 x* ?3 c: @
  635. BOOL bFirstChar=TRUE;
    8 o8 u/ p9 b( |" H/ g: i1 L" ~- \
  636. + L6 K  f! i' ~3 C! v* C8 p0 Q
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ' j7 U9 a  n! Z
  638. {
    ( e2 l+ y2 I" j5 o; f) L0 D2 q
  639.         // TODO: Add your specialized code here and/or call the base class9 Y6 n0 L/ d! t8 E3 l) j
  640.   switch(dwProgramState)
    / j- T: r" X& ?3 |& x# l( I
  641.   {6 Q4 ]* [+ V% \
  642.   case AP_NOTHING:
      P, w  l! Q, S: [: ]! ^
  643.     switch(dwStartUpSteps)& U' o6 H& {* h3 z; M
  644.     {
    ) T$ h5 F# n9 J
  645.     case 1:
    . F2 q7 D3 e6 ?# Y. Q7 r! F7 U- s
  646.       {
    8 t, I! c" H0 I
  647.         int i;6 }6 q/ U! x# ~8 ]. P+ n
  648.         CDC *pCDC=dlg->GetDC();
    0 B! L" _3 C9 x0 b& u; f) @0 R
  649.         HDC hdcwnd=pCDC->m_hDC;2 d/ O/ j. W( A" R# ^2 ^. \0 `, ?, j
  650. //        Graphics graphics(hdcwnd);7 {' u! F( d  Q8 D
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 j& h; F: ~4 |% Q) }6 b2 m
  652. //        INT iWidth=bitmap.GetWidth();( q$ U6 T4 r4 M' l& _8 v; x
  653. //        INT iHeight=bitmap.GetHeight();- }! p+ F1 t. F. C  H' p
  654. //        Color color,colorTemp;$ i2 x5 x: c: @, ~# i4 u5 f
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    5 p' e9 v3 M9 o) {
  656. //        {( T& C9 P6 P( A
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    3 b9 F2 |+ h# V9 Q* x" i
  658. //          {! n, _  j/ ~/ x7 N1 ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);( r9 P! h0 p) x. `, ]! D$ K. [
  660. //            colorTemp.SetValue(color.MakeARGB() u7 F! b4 y9 h' w" J, z
  661. //              (BYTE)(255*iColumn/iWidth),: d/ |$ {4 H$ \6 F- r2 b3 P
  662. //              color.GetRed(),
    # |4 p4 Y7 A- q% B# K" O
  663. //              color.GetGreen(),4 G  u- Q7 R3 |% d. y
  664. //              color.GetBlue()));* p  R6 J$ v5 p2 ^6 l, ]6 H
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);. I/ E$ `  f! \$ l
  666. //          }4 t+ L3 z4 p0 \8 O1 C& b
  667. //        }
    " i* m0 _3 e; ?5 f$ S9 x9 k3 C
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    8 V# ?% ]2 U" F; T6 r, @2 i* z  ~. w8 k
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% j1 I: M: S1 L
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");# r* |' A% v8 [/ H" L  @1 x
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ u. N% I# }7 U4 z9 K' U# Z9 K8 G3 B
  672.         for(i=0;i<240;i+=8), s& L: b* u" S5 U* j7 c* M
  673.         {* \' X1 M* Y  M! P
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 c$ Q- L0 K- B. ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : A# R* h* N6 C+ V! g9 Y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) n8 X. p* j8 M0 |. h
  677.           Sleep(33);
    / q& L9 m* A' ]
  678.         }6 M" d& u: X/ J
  679.         Sleep(1000);: O6 q. c& x$ f; S2 }
  680.         for(i=240;i>0;i-=8)3 n9 r; W: A  V* B
  681.         {
    5 W. F" a7 }8 b8 V. x. A
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - k; A" p+ F/ @5 o9 F. V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ e! J* i# H( E. s* i. C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: V, r% v. O& {* c+ O
  685.           Sleep(33);
    1 E7 }6 m' q/ F, ^0 n/ S/ h
  686.         }3 D3 e. d1 o+ ]$ x6 R3 G* f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    8 L' p1 a/ {1 `! ~- M
  688.         dlg->ReleaseDC(pCDC);
    & g& M* R( P" {9 K
  689.         DeleteDC(hdctar);
    5 y( M* G0 j% V
  690.         DeleteDC(hdcsrc);
    & }( |. k( a( J; {$ q
  691.         DeleteDC(hdcorg);
    % t4 M# u9 G# f
  692.       }& V" @$ V7 h2 ^8 _2 u
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);1 M  ~& U/ a* z% u3 [
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    , k& O' e% f4 M: }6 a4 r2 Q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    & e0 Y; Z# x2 D% J8 f
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");3 Y' d4 E( m$ ^: ~4 A; c6 [
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. i5 x# E: L* A% _
  698.       if(!Dn.Connected())
    - o8 a" c" G. j. V  _
  699.       {
    ( v* \. d/ C. x
  700.         dwTotalFiles=1;
    - h1 k' J$ X/ c. Z* b, x& |
  701.         dwDownLoaded=0;
    ) g& T1 B" o$ g7 Q  J- g
  702.         bSilentStep=TRUE;
    % u: I5 ^& q% M4 r  e
  703.         bCompressed=FALSE;
    / Z0 k; P, d& _5 ^
  704.         strExtLocal.Empty();
    . |4 x( Z% ^% u! o% @' h9 F' _
  705.         strFullName="readme.txt";: d- ~" T0 Q+ t
  706.         dwProgramState=AP_CONNECT;
    % P, B; f( T! X  U% @
  707.       }5 W) L3 T) I" x' i  F- R
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    9 K2 D! `( U1 [+ W& q
  709.       dwStartUpSteps=2;
    2 x; v5 N) [" r' v! b5 }
  710.       break;' R" p3 k9 p- M+ O- Y# A
  711.     case 2:( X. d0 }4 \2 z0 C( V
  712.       {
    0 o/ K. N% w0 q; ]
  713.         int iEOF;; r  ^" Y+ w7 S8 M
  714.         FILE *fp;& {. n% H, \, W  J/ n! }
  715.         char szString[512];$ X. I+ N# L# p; c2 p
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");! J+ `8 d. z6 \. {1 v
  717.         if(fp)% X/ l5 P- y6 n& I% O, }: _0 a4 J
  718.         {
    * t$ K/ n  @9 }
  719.           do7 Y5 K7 n- K6 u/ ~
  720.           {4 U0 y1 @9 t' x  a
  721.             iEOF=fscanf(fp,"%s",szString);
    9 q8 X4 F" Y6 x3 B
  722.             if(strlen(szString))
      F  o/ p# d, `  O
  723.             {7 |8 s$ D: I4 f, E7 e
  724.               if(bFirstChar)1 A- z% M, \7 v9 l, r5 s
  725.               {
    9 D( N( b) T6 ]0 e1 G  C2 y5 W
  726.                 bFirstChar=FALSE;
      p" Z1 }. t. E9 o( H$ A
  727.                 bConnectIsBig5=FALSE;- r% Y1 d0 O# P0 R
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    9 K3 T- Q9 a3 ]; @$ @$ S
  729.               }
    ' ?+ D3 O4 E% p, D
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    6 V1 a# v- A  N2 F. `+ q" f5 ~. G
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));: K8 i: y7 p2 B1 C! w
  732.               dlg->m_ListText.AddString(szString);
    $ M8 }! I( J! z* v. I
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) N* F: f& S, @' P+ `6 u
  734.               *szString=0;. Z" n( b0 ^% @5 T
  735.             }
    - Y/ b7 {! u) i1 @4 L- x9 ~
  736.           } while(iEOF!=EOF);
    5 \+ y6 T3 n: L( S& W2 [) Y5 I$ S) {2 n
  737.           fclose(fp);1 T. r+ Z6 N- @6 ?  l# i' J
  738.           unlink(".\\DownLoad\\readme.txt");
    & v2 d0 E. |' A, l2 P
  739.           dwStartUpSteps=3;
    . t7 N. G2 ^8 {1 F7 f% u! ]
  740.         }; Z- Z: n" e3 U! i. B6 T* ?
  741.       }
    / |4 a0 e5 [% \$ y7 [0 `; i  d
  742.       break;' ^4 M/ ?; c$ T1 T0 R1 h# m4 d$ A- J
  743.     case 3:
    2 N- H) H3 [: Z# [. d' K( _! ^
  744.       if(!Dn.Connected())4 e0 f# M5 G% x. o- B& f
  745.       {; `4 @% ^7 _0 k$ D" b# a2 ^
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);/ e9 H9 i6 [& U5 R/ R0 q5 l
  747.         dwTotalFiles=1;
    , ^4 c4 y' q6 H# W7 M
  748.         dwDownLoaded=0;. _$ T' M/ P2 _8 A, k% G
  749.         bSilentStep=TRUE;
      t$ _3 t9 p6 u8 R# m
  750.         bCompressed=FALSE;3 |! v9 ?2 Q$ J6 O
  751.         strExtLocal.Empty();
    3 B6 x/ N* n$ O1 l" o, J. \9 H. J
  752.         strFullName="checkversion.txt";9 s! B2 C$ w- p
  753.         dwProgramState=AP_CONNECT;/ K5 _+ r2 W9 A& x( G2 l1 W. d6 i6 {
  754.       }
    9 s7 \2 _0 }7 n4 |* d0 W& r
  755.       dwStartUpSteps=4;3 ~. E  n3 D* X/ D3 O# V0 w+ e3 k
  756.       break;+ Q0 E# E% K& S% c$ G+ r' j
  757.     case 4:( G6 @0 k1 }& I% S. s6 a
  758.       {
    $ z  Y3 d7 O; r! W8 W7 N5 \
  759.         FILE *fp;
    6 V( h$ ]/ k; i5 i# s- {8 Q
  760.         char szString1[128];
    ' [$ R1 y! z" d
  761.         char szString2[128];
    % l3 O" G7 z. J+ T, b# L
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");1 M  s! L# F' c8 B
  763.         if(fp)
    ( S5 r( w- E+ ?1 b5 M: h3 ]
  764.         {
    * M! {" @. k. S
  765.           fscanf(fp,"%s",szString1);
    ! P. C9 w1 N3 u, H. Y% [/ a
  766.           fclose(fp);
    9 n! k: s0 F: z1 r6 w& I( q
  767.           fCheckVersion=atof(szString1);. e  p1 R! P& F2 [1 m3 r' u' N
  768.           fp=fopen(".\\checkversion.dat","r");/ D. r  y3 t' `( q" i4 ~2 E( L5 o! c
  769.           if(fp)
    4 G" J5 `- W1 k3 o5 w8 S
  770.           {
    " [3 d. t4 ?  Q% t0 g2 ?
  771.             fscanf(fp,"%s",szString2);
    ; p# y/ ~6 Q! c
  772.             fclose(fp);
    ' y7 _, Y, U. l
  773.             if(atof(szString1)!=atof(szString2)), Q1 h1 E3 g# |0 `( q
  774.             {
    ' T5 }* G4 }7 W. |; w
  775.               if(!Dn.Connected())4 F- C6 X, {" o) A, P; F  `8 d0 X
  776.               {/ V( l6 A: @# n5 W
  777.                 bFirstUpdate=TRUE;
    1 r2 R0 u% x2 g/ i- _" M, S; ]. M
  778.                 dwTotalFiles=1;
    0 W. m! G' `' ?$ E/ z
  779.                 dwDownLoaded=0;  E2 U3 u8 K* {5 ~( J
  780.                 bSilentStep=FALSE;, i2 Y7 c4 C( v- Y/ ]0 W
  781.                 bCompressed=TRUE;" R! @/ A3 p2 d* g3 t' o/ |2 i4 i$ ]
  782.                 strExtLocal=".\\DownLoad\";7 i# g" ^9 @4 d
  783.                 strFullName="update.txt";+ x% K' h: e  ]
  784.                 dwProgramState=AP_CONNECT;3 ]9 r* M; I+ P. c
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 V+ g$ B9 q2 d8 c
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 R) u8 P% q1 e/ z8 a
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 D- o: q" S- u' W$ `( X3 U

  788. " V5 x/ }9 X5 f  l( J9 F- l
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. N7 m0 f: w3 }$ ]# J
  790.                 unlink(".\\DownLoad\\checkversion.txt");, q. h/ h% z( \1 |9 Q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)9 g+ h6 `. C8 U9 _# ~. D6 @- p
  792.                 {
    ) I) H/ L! \, m) \( ~
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");, Z2 K+ ]- C  ^5 q1 Z, O
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");4 J: W) g: I4 W% n/ o% N6 a' g9 H3 y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 w6 ]& e6 q# v4 x7 k" ^
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! u) Z3 S6 J7 a
  797. / n$ E/ {% W  O8 m8 i! w
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% ^' }- S5 h, B# S
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 S7 N/ X0 V. v# p) s- a* g7 G
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");% E/ |& _1 E* r, t5 I% @. f
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 d. F7 I' a) R+ t; h( t4 k- |
  802.                 }! G. w( `& Y8 c. c
  803.                 dwStartUpSteps=5;) t3 M) r4 ~0 S
  804.               }
    6 e$ c$ |( P3 z0 {
  805.             }
    * [% t1 ?" ~) r
  806.             else$ i7 z% g* x6 O1 u
  807.             {
    1 V; J+ P" n! H# A  b; X
  808.               unlink(".\\DownLoad\\checkversion.txt");
    4 t9 n4 p1 ]; f% q+ K
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    % Y; c0 x6 Y6 _+ P
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 H+ q+ Z8 H1 I; p( e8 q
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");4 J, l" ^, `& q6 g! t3 ?, P. B" `  \

  812. / p# T6 |0 m7 Q$ ^0 }
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ P  B6 s4 X: I7 C% L. ~
  814.               dwStartUpSteps=99;
    3 m# C7 A* o, l8 p, P+ D# o7 r
  815.               bFinishUpdated=TRUE;7 M% l5 S, F* M# e& r) @
  816.               bCanUpdate=TRUE;
    * R0 k' q9 ]4 |( n: W2 w% ^
  817.             }* V3 B1 m* p' N! M$ K, T+ r
  818.           }/ K- K$ k/ d+ Q# |5 J! ?
  819.           else8 R4 w6 l; }% {& P
  820.           {
    5 o5 a$ k+ \  L7 t
  821.             if(!Dn.Connected())# B: D* a) R" R7 V
  822.             {" P* y6 S5 s- |& U* i7 r
  823.               bFirstUpdate=TRUE;/ O+ |0 \( j- t0 i* I7 v
  824.               dwTotalFiles=1;
    " B1 n( |! y2 M& Z: U2 L6 O) l7 X% D
  825.               dwDownLoaded=0;
    ( \* Q9 @6 N* g: G6 y
  826.               bSilentStep=FALSE;, F5 \1 J$ e  ^1 G2 n6 q
  827.               bCompressed=TRUE;
    ! N3 x8 t" p' j8 `% {& ^
  828.               strExtLocal=".\\DownLoad\";- Z$ X3 q; }. ^1 g6 C
  829.               strFullName="update.txt";0 K/ {% X4 v: Y& D. Q9 R
  830.               dwProgramState=AP_CONNECT;+ h% R: D$ ^" @2 u# [' D
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");& C7 e# X2 ?: v6 f; t
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 S2 B" T) A9 y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : i% G! h$ s% v% [6 J
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 g0 K: P3 E5 t
  835.               unlink(".\\DownLoad\\checkversion.txt");
    4 m8 n+ b. M7 L. G. V7 k* i
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    5 F- I  a0 V: U; E" L
  837.               {
    # a$ c# L% ~) n5 o$ ^5 n
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");- ]0 n* S1 O  m! E
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");7 b) a3 h6 c& \2 H9 R  |
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    . Z( x  ~3 W: f) w# c  K  R
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 u  r, d" y/ }4 Z6 r# O* d) v
  842.                
    9 e9 v2 C% F. c4 e2 |1 f
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 g, C' A; B- T% V; f
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - m$ }4 ^7 [8 y- g
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 E; l1 z' g: R/ ?2 ]0 U# ~- q
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  c6 `9 y$ g7 B5 i$ Y1 T
  847.               }4 M, m, l9 h9 Q8 a
  848.               dwStartUpSteps=5;
    . E3 c1 D/ k( m) \+ u2 ]0 d
  849.             }( V/ z: U' R) I3 I* ?& h( b
  850.           }7 d" H7 R7 z- Z; x. {
  851.         }1 Z3 o; U0 @8 G$ y. s
  852.         else
    $ q$ \  y* Q( w' U( i; i' o
  853.         {
    ) ~" }* R% ?$ _6 I; P
  854.           dwStartUpSteps=3;* B0 |( O1 j- N  R4 o
  855.         }
      `: C+ G1 ]3 [3 G
  856.       }
    * {. Y) b1 _' e% x. D$ s3 C8 d. D
  857.       break;1 u2 i- j' I& w; t7 W9 T$ ~
  858.     case 5:% Y5 W& @; ]2 n* u$ k
  859.       {
    0 I0 v, x5 `( H: @; W
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    " R" S; G. e9 q# G8 f3 o" J9 d9 a
  861.         {5 m# o$ w7 R/ L( D
  862.           int opt_overwrite=1;
    . E; x2 z% {" Q+ _7 l5 _& o
  863.           int opt_do_extract_withoutpath=0;0 p8 i8 y  _* m% D+ B
  864.           unzFile uf=NULL;
      b) Z& v& M  @) a- ?+ Z

  865. 9 ]9 |5 p! ^2 k8 z# r
  866.           uf=unzOpen("Wsa.zip");
    * T# k: p7 m! Z/ u  i* [
  867.           if(uf)
    $ D! Z! U, T8 a
  868.           {! [% K; N' ]) g
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);9 L( |: c4 N( e; L; [
  870.             unzClose(uf);
    ( c9 r$ o  Z$ A. M8 ]
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    3 [- p) w  c/ O8 O% b/ D! [
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");1 d( f; S( m' i5 u8 ]
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    # D7 C! i- F3 I* i& Y) Q
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : Z! n; W* ^. O( n  ~8 f
  875.           }
      g7 b# U% p3 R& ~  f% W
  876.           DeleteFile("Wsa.zip" );) R' n- U. ~. L- j# T1 q
  877.         }
    2 m/ f+ b8 I$ r' D! H
  878. + f5 }( _+ l1 x" d/ z# ^
  879.         if(CheckLocalVersion())1 B- h1 K# Z: C' j8 M4 |. b3 N& Q6 j
  880.         {7 h$ V: X5 @; P$ e; a% ?/ G, b
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");1 K: x. E5 C! `
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    6 M1 s1 t: k; n( \
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ) ~- ?/ T. M9 K. t( {7 Y# d8 g
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; I+ P% j2 x5 l/ d* t, E+ w- \6 Q) \
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);$ j& p! N9 K& u; f- I: {3 X
  886.           dwStartUpSteps=99;$ A0 X2 }1 A  J' J. g
  887.         }' B2 ?' s6 t, [! V2 _
  888.         else* B7 Z5 B8 D  C
  889.         {1 @1 z) a- R3 J3 K2 {* g, D
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    * w( \& u) ^7 ^: ^7 q7 r+ Y) Q" j
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' v6 k/ q% I( R# a( d( ?) M9 m" b6 ]
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' ~! C1 i$ W( Q8 u2 S

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

% y  u3 q4 r" b- p; u3 v& s' d2 \8 n  I0 ?6 f8 X6 Z+ 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-10-16 08:03

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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