找回密碼
 立即注册

CSUpdate.exe源代码

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

3 k* n' m: D5 X8 z9 w# L) ~) }
  1. / RevApp.cpp : Defines the class behaviors for the application.. k% Y. v0 C! P3 z2 c$ p
  2. //4 C" J: l- G+ g: J! J! @; A' j1 [

  3. $ n! w/ s/ F( Q5 C$ K1 c7 x- D& v* _
  4. #include "stdafx.h"
    7 A3 _8 G% K( l3 I1 a
  5. 3 B" a3 ~; e( B5 O7 k# R% G
  6. //#define UNICODE
    . Q( `7 O1 t8 v, D+ _" G' J4 _# f0 X
  7. //#include <gdiplus.h>
    + v7 ?5 b2 T% r8 J, ?( H
  8. //using namespace Gdiplus;
    " R2 P+ g2 u/ U, S0 O

  9. , k. Y. ]% c) E0 O6 Z
  10. #include "RevApp.h"; ^8 z4 G4 k  |$ D
  11. #include "RevAppDlg.h"  V" c: u, A1 r* C3 m/ P- B: I9 Z6 i  L

  12. # y: M( Q4 N/ g9 f4 j2 L
  13. #pragma warning(disable:4786). `) V+ H6 a3 S) z2 T9 g
  14. #include <map>7 R( k% D- z4 A2 v1 ^4 j6 f8 N
  15. #include <list>
    ' G% a" Q1 [: O0 R0 l
  16. #include <direct.h>
    0 G  f$ T) v; F; R, A
  17. 5 @) z- o$ e8 @" u* R' D6 @
  18. #ifdef _DEBUG! e. w- K& ?1 w! o" U* x# ?
  19. #define new DEBUG_NEW* g! F/ I4 T5 b; S! H
  20. #undef THIS_FILE  p6 ~  C5 u" R: X0 {' \: @) y5 X
  21. static char THIS_FILE[] = __FILE__;
    ( L& t- n5 V- U+ L( d/ G
  22. #endif
    : @! {# {+ _' d, H9 \' ?: K+ d9 ?
  23. #include "SkinResDef.h"
    4 y2 T; d9 i0 N
  24. #include "ChangeBG.h"
    9 i1 U: S$ s# x6 \8 }5 e
  25. #include "AFXINET.H"! ?4 Y# l8 i5 {2 y9 z4 d- a  E
  26. , N3 k! \7 B) m+ D" z
  27. #define TRADITIONAL_CHINESE 0
    6 x" J# @8 j. j7 W- G5 ~8 _) n; |
  28. #define SIMPLIFY_CHINESE 1  U8 \5 M/ N- y& V/ }
  29. #define ENGLISH 2
    : Y: P# N' z0 F5 _5 R
  30. int m_iLanguage = ENGLISH;
    & K$ T2 c2 U+ q4 T% O  ]# T
  31. /////////////////////////////////////////////////////////////////////////////1 m& Q: F% A  T! t, m" D6 `
  32. // CRevAppApp; a: |3 `2 l/ W6 }

  33. ( n& ?* C7 j0 s  w
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! q+ E( q5 u" H7 m1 s+ w+ p
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / G5 o- Q- z* N6 S1 G
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here., ~3 r7 G7 `" S5 ?
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    8 z6 e: y% h# T0 G
  38.         //}}AFX_MSG" }( g1 M) _5 \4 I5 e$ \
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    & r+ {) P3 x: L! d4 k$ C$ o- y& u& Y
  40. END_MESSAGE_MAP()5 F# W4 m  I5 A2 F* ^
  41. ! J' S- s1 B* [  B; Z; \
  42. /////////////////////////////////////////////////////////////////////////////
    ! w% ^; Q) q# d& A( o4 g5 h
  43. // CRevAppApp construction
    2 t' f  t" b; `( H

  44. 6 b; K- ~! R2 S
  45. CRevAppApp::CRevAppApp()
    1 r2 u& S+ p& A
  46. {
    ( S* s. ?$ a6 U# g
  47.         // TODO: add construction code here,
    ' T* a. e- n* K( A" R* |$ ]
  48.         // Place all significant initialization in InitInstance, @' P. t2 F4 _5 E! e7 F
  49.   bDisplayIsBig5=FALSE;" ~0 o- _* _9 i" n4 \
  50.   bRestartUpdater=FALSE;: a8 U6 G, ]0 X1 x( y
  51.   bFinishUpdated=FALSE;# M0 S2 A) m9 T. G
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    3 {" ?4 }  |$ |4 J- T* F
  53.   InitChangeDataBig52GBKS();
    ; Y7 V- T& d$ W" c6 `0 V( ]
  54.   InitChangeDataGBKS2Big5();; u# w4 B5 A# G6 E, i0 T
  55.         //
    ! L* I  h( F; z1 |* l
  56.         bClickRunExe = FALSE;
    * k6 u8 @6 ?) Q, r( Q9 X
  57.         //
    . S9 C+ T; g5 m* T
  58. }& ?( a) Z$ w9 t) s, B2 G9 ^
  59. " z9 e5 k; f( X9 U; S/ d0 M
  60. CRevAppApp::~CRevAppApp(): Y9 }( {# V! h& c5 L& R9 w
  61. {! R$ F7 g* A. P& W4 n1 a, G* t1 y
  62.         // TODO: add construction code here,' C2 O% |. N# Y! Y. K
  63.         // Place all significant initialization in InitInstance, i5 f3 K& Y+ t+ u8 j; Q8 @) O
  64.   EndChangeData();
    . p" }$ }- l9 D  ?) h& K
  65. }% `5 x! V  A; a" Z1 x# \" c
  66. 2 S: U0 ]9 p4 W3 j. I1 T
  67. /////////////////////////////////////////////////////////////////////////////* X6 J5 u4 V# [. B6 U) V
  68. // The one and only CRevAppApp object( T7 M; A/ U* p; G' [3 c& K* F2 w
  69. $ h; M2 M9 [. N& |$ Z( R; o
  70. CRevAppApp theApp;
    , z& X0 e$ Q; Z' Q

  71. " _9 c" M! J" ?* E9 O' p3 g- w
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    * s; y  C1 q: Q7 V" }0 O; G
  73. {" ^( ]" W2 }6 [3 F
  74.   int iEOF=0;8 G' ^7 @" J0 I- Z! K# G
  75.   char szTempName[MAX_PATH];
    1 j5 m' p, w# R3 q2 ^. x
  76.   *szFileName=0;: J1 m# U" Y/ A) o. _# i4 u
  77.   iEOF=fscanf(fp,"%s",szTempName);( [  V" u9 q, z" O0 D2 e9 y) i% t
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    . c/ ^1 S5 P. i& c2 r' \
  79.   {# e6 q: _- f% d# ]' E
  80.     strcpy(szFileName,&szTempName[1]);# F" V* J* h6 g) f+ I) |! t& M
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ( O6 @1 s- Z: K
  82.     {. O) {; ~9 J9 @$ j; l$ E% q
  83.       iEOF=fscanf(fp,"%s",szTempName);  g" M9 w4 Y; ?4 v
  84.       strcat(szFileName," ");
    # Q4 R8 n- p( v
  85.       strcat(szFileName,szTempName);
    . M: S$ k( F# |
  86.     }
    + ^+ X. O. `- F
  87.     if(strlen(szFileName)>=1)
    4 t, ?7 Z: q2 H3 B. w: ]2 o# r' y3 W9 y
  88.     {
    " K% k. f! f+ t( B( n4 p( g
  89.       szFileName[strlen(szFileName)-1]=0;$ d" j4 Q) h+ F" \8 F2 ?# X
  90.     }# j: Z2 i+ z. \! q
  91.   }
    " i, _2 Q" V1 a! D' a! }
  92.   return szFileName;
    ; Y# H$ B$ i* G3 Q, H! @
  93. }
    4 E! O" O5 Q, F( T& l
  94. / r' O6 G6 g* ?& s
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ' e" B2 G$ B* u
  96. {
      r7 P& C" T; |( }3 a2 M
  97.   FILE *fp;/ o7 A! Z1 d6 H( l7 \, y% \+ Y+ j$ [
  98.   char *key=NULL;6 S' m, \8 ~8 S& \' _
  99.   char version[MAX_PATH];& S% i4 U7 M  x8 j+ k$ V3 p
  100.   LPUPDATEFILE file,olds;; k) t, M, V6 q0 v4 Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;6 _  |  r& i2 B9 @9 I: }
  102. : x" s( |+ L- l% w
  103.   UpdateList.clear();
    / Z$ z% p( j) ~0 ?* ~
  104.   UpdateFile.clear();
    1 Y8 D( x0 ^+ U  {% @$ E! d' S
  105.   if(GetFileAttributes(filename)==-1) return false;
    ) N0 f; Y) h( I- y% V
  106.   if(!(fp=fopen(filename,"r"))) return false;
    6 G! N1 h9 V# H* i& B9 e
  107.   fscanf(fp,"%s",version);
    5 F8 j; n9 U+ Y1 a7 c7 u
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    4 s) l6 Y) B. t) r1 I& U
  109.   while(fscanf(fp,"%s",version)!=EOF)$ S1 q# O! p) y1 H4 S) K9 ]
  110.   {' B& @! A% a4 N
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : h; P, u$ B, E( d
  112.     fscanf(fp,"%s",file->path);5 x- J+ D2 \4 F1 g" g1 Q
  113.     ReadFileNames(fp,file->file);
    , ^4 Y/ q- Y/ Y- `5 j
  114.     strcpy(file->full,".");
    / R: e/ t$ y; W) F" O0 {6 e5 y
  115.     strcat(file->full,file->path);% o5 k2 m0 x, }7 o% R4 Q
  116.     strcat(file->full,file->file);
    / v/ ?& w( W( v( b) n  Z3 y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    2 v; Q8 a3 Y$ P9 s
  118.     {, U* [& \+ m2 a) ]  \/ f' W
  119.       file->vers=(float)atof(version);
    - ^2 b# e# i$ x+ n1 b5 U
  120.       UpdateList.push_back(file->full);$ E0 ^( z, a( b) s$ I/ C4 c
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));8 }; I' E4 e6 m7 X* Z
  122.     }
    . m- F7 o0 L+ G8 e
  123.     else. f" v" F' j! i$ i0 Y3 O
  124.     {* a2 M3 _* D! {% @. v6 s  C
  125.       olds=(*p).second;; `0 L+ F# Y! J: q6 @$ `" z6 u
  126.       if(olds->vers<(float)atof(version))
    7 ~5 g1 ^4 I" h. f$ s: F
  127.       {! c8 T$ m1 d  {4 N
  128.         olds->vers=(float)atof(version);
    ! j! v5 M. K9 L
  129.       }
    ; h/ `" }) f/ E% W. M* p8 S
  130.       free(file);
    " s+ {  J0 S, C* n6 m9 s7 h9 U% I
  131.     }' X& v8 S1 ?" a$ v0 R2 e% U% g
  132.   }
    4 U8 |' ?* D9 B- q! o1 j
  133.   fclose(fp);
    % R- d4 Z# u% h
  134.   return true;; |" u! m$ ^5 g: y
  135. }" _+ Y; j1 g5 b( X
  136. , u' @7 a6 c" {5 k3 v; U1 q  ?
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  V2 X2 c$ u: t" L
  138. {
    1 R. L3 E5 J( B& Z. o
  139.   TCHAR  szFull[MAX_PATH];
    0 T0 ^; e+ J* f+ m0 `. j
  140.   TCHAR *token,*inter;- l; n6 q" }9 m9 J* r" O
  141.   *szPath=0;
    # V  z, _  C- c5 s& Z7 E7 l$ F- [
  142.   strcpy(szFull,szFullPath);8 V: j/ K# Z% l5 N. x. E
  143.   token=strtok(szFull,"\\/");' }  x! W5 E8 V5 H8 q9 D% A  b) I
  144.   inter=token;
    1 M, R6 Q6 s$ S, p- Y/ U- q
  145.   while(token=strtok(NULL,"\\/")), \9 D3 w- W. y* ~9 `. r6 k
  146.   {
    * R; g. x" K9 B9 @; |: J; l
  147.     strcat(szPath,inter);  ~+ x( h5 \; ]
  148.     strcat(szPath,"\");
    & q0 k! x- _" b& ^2 b! A
  149.     inter=token;
    & ^! U9 c9 X. o; R% Y
  150.   }2 J2 u. _- G* ^' S4 G9 Z2 `
  151.   return strlen(szPath);# ]& Z2 ?7 t: r& _) h8 e4 s
  152. }8 A6 x! d! R* M% d: F" f2 q  A1 w

  153. * D8 V. G, N& ]
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    3 V$ O7 g9 ~% n4 s
  155. {3 d% |) G- X% e* j
  156.   DWORD attrib=GetFileAttributes(Target);7 @; Y0 J/ r2 W$ H" I6 q5 g, i
  157.   if(attrib!=-1)
    . V8 e' I. e2 t  N. d9 b! k
  158.   {
    1 w% p7 R5 X  z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))4 t1 O# R# S; |6 I. _1 I
  160.     {
    " ^/ N! K. T) Q9 @
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    0 C/ r) j/ s# ?5 B, y
  162.       SetFileAttributes(Target,attrib);1 d( y" D% P( e3 N) [8 C
  163.     }
    $ {# z4 E" s( B7 ^8 |0 S) s, _
  164.   }
    0 r8 Z. K7 x8 L  w1 X/ W" G  `
  165.   CopyFile(Source,Target,Erase);- U0 g! @+ b' y: Q3 x
  166. }2 Z8 p+ q+ f5 n! N9 T0 U1 K% E9 Y8 ~

  167. 9 E  ^4 h" _3 r) h
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    , L: A: _) d& ]: _
  169. {
    * k/ U, `: [7 |
  170.      FILE *fp;& E' {- d* D  \( t  f
  171.      char  szBuffer[8192];
    : M7 L2 ^! T0 U( F) S/ f0 l
  172.   va_list  argptr;  b) R: Y  |  ?2 S3 T- L

  173. + d  R' Y, P/ s' B* E; e0 I5 @: d) P
  174.         va_start(argptr,message);
      R5 ^/ s: k: ]5 p$ f
  175.         vsprintf(szBuffer,message,argptr);
    & ^  t& Y6 q0 b6 c8 L: y  V
  176.         va_end(argptr);, n  F: E- `) Y* G& g! `' F1 n$ q
  177.   fp=fopen(FileName,"a");
    $ }) e2 v5 O* d6 R
  178.   if(fp)% r+ L6 Q: t: o. K: {7 r7 L
  179.   {5 C& n% W" {: y& Z2 e" E
  180.     fprintf(fp,szBuffer);
    ; k6 f! k( r* q
  181.     fclose(fp);, g  }$ Z" z1 e) |
  182.           _flushall();, W* _' }6 j  v
  183.   }
    9 G: [( L9 O- A6 c7 V( x3 a$ N
  184. }
    ! r. G8 w+ L4 a/ x. N) w

  185. : J, z: c, r' o2 e3 m* ^# _' M
  186. BOOL CRevAppApp::Fclearf(char *FileName)) ]6 J! K: j  {0 Q
  187. {
    ' Q0 w& {/ ^8 V6 G" L
  188.      FILE *fp;9 R5 x7 g8 O( D& }
  189.     DWORD  attrib;
    9 {& ^) I' N; s
  190.   attrib=GetFileAttributes(FileName);8 N* J/ J6 r$ }# w* X4 Y& d0 g7 N
  191.   if(attrib!=-1)
    * T# a3 B8 X9 b
  192.   {
    ' X% |; y$ c. h
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 L% R5 |7 P& s: T8 x# Z
  194.     if(!SetFileAttributes(FileName,attrib))
    $ _, o% [* P8 r9 f7 p% i8 R
  195.     {+ t8 W/ N% K8 N
  196.       return FALSE;
    * N' w% @2 @" b& d* @3 [" z& Q
  197.     }8 ~5 x4 ?5 {+ q$ @9 w; B
  198.   }0 b$ F" x6 x# A* R6 d
  199.   fp=fopen(FileName,"wb");
    9 K3 S9 V# ~/ U# @1 J$ d; s
  200.   if(fp)
    . O) P  c0 r- ]5 ~" }: y, {
  201.   {  u9 e0 `1 b$ v- [
  202.     fclose(fp);
    : q; Y' y* r7 }& H) T: Y4 q, ]0 d
  203.   }% f* U  M  T; Z: I3 [
  204.   return TRUE;
    # M0 e7 P5 |2 C  V: i/ i5 h
  205. }9 c5 F6 Y2 z2 h! W" n& T5 S5 G

  206. & y' _0 B4 L* k$ n/ D6 a- p3 Z) [
  207. BOOL CRevAppApp::UpdateLocalVersion(void)  H1 l& W9 o4 \5 B, K1 z0 f7 w
  208. {( p, K; v: ^; }, {( O6 ]* K. I
  209.   char filename[MAX_PATH];  p. [! n- _5 I: n9 a: d
  210.   LPUPDATEFILE file,olds;
    " P9 k: L$ ]" _. ?$ i, C2 U
  211.   std::map<int,CString>::iterator i;; E! I' [% ?2 A, D- Y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;  ]# v/ A' a  ?" x4 |( \" d
  213.   std::list<CString>::iterator l;
    1 j2 o: l; u% y$ E4 J; t9 E, Y3 Q

  214. 8 A& L' h8 I5 d; T5 @% q4 {3 ]- W
  215.   if(bFirstUpdate)* g! V8 I! ^/ I9 j; N; M
  216.   {% @+ Z+ x  x+ m1 @0 n4 Z& ^: r; x
  217.     dwCurrFile=0;
    ; r% A/ ~2 N% {( r1 P
  218.     bFirstUpdate=FALSE;. X1 q! m$ z8 Z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 @6 e0 U0 E3 d- |/ r
  220.     {
    3 {, P! u( S2 B1 k
  221.       dwTotalFiles=UpdateLocal.size();
    ; y& ]$ B& m# e0 ?  N# b
  222.       dwDownLoaded=0;$ z/ K1 y# l4 s/ z& T  U  [0 S
  223.       bSilentStep=FALSE;
    $ w2 e0 @# b8 N8 A- W/ D' p
  224.       bCompressed=TRUE;$ p+ `" U/ Q) I" B, E2 N/ ]
  225.       strExtLocal.Empty();
    4 |0 Q( d- [1 y9 K
  226.       strFullName=(*i).second;4 _8 i5 v5 G5 b# C1 B, {6 ]" D
  227.       dwProgramState=AP_CONNECT;
    4 u$ k( J1 M, |
  228.       return TRUE;
    0 V0 D5 F3 x/ ]$ n) w* h: C5 g
  229.     }$ ?& \5 F! V$ n. L8 ^0 X
  230.   }7 z+ H8 s# D$ t/ B# P
  231.   else if(bRestartUpdater==FALSE)9 Q( T& Y& l& c) |6 T6 J1 T! Z
  232.   {  f/ [# a7 }5 E! g( G! [2 a$ a; B- _+ v, |
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    - A4 H. ]$ V2 ~7 @+ i
  234.     {
    6 \& X5 i2 Q8 p. ?' B
  235.       file=(*p).second;' M  s3 l  j9 D  R/ p4 h. O
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    6 V) B6 U4 Y' k6 j/ i& i5 C4 @$ n, V; r
  237.       {
    4 Y9 {  [0 w, c* _! A% |% f1 K
  238.         olds=(*p).second;
    : T' z3 I6 f- O9 \" L4 Q
  239.         olds->vers=file->vers;
    & |: u# L0 b1 q) C$ K
  240.       }
    3 p) R+ Z( ~$ ~5 f- V5 c; ?& `
  241.       else
    2 O1 j/ t# n# M9 ~: V- k
  242.       {
    ) _; R( _# `) H6 M
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- e0 H1 r: Y: ~6 S/ h
  244.         memcpy(olds,file,sizeof(UPDATEFILE));1 t% a$ e1 j2 Q& o+ C& X* N$ M
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));# _" E6 {' o, H6 G
  246.       }
    ( X; `0 G! t% t
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    . `' k! H+ E0 X7 U* W" p: s
  248.       sprintf(filename,"(%s)",file->file);6 f  t5 E4 `, Z, V! b) u2 G* z7 J
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ }3 A6 P' _. V+ h; {. \" d7 Y! q# K: s7 D
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ) b; u: ^8 n' r6 J' o! v4 [/ I+ _
  251.     }, E% Y/ v4 Q# S4 ~3 F; v
  252.     dwCurrFile++;
    " l3 i% R% o, G! }/ N8 W
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / U, M& r" w8 o% e9 {
  254.     {
    9 B9 R0 g3 R9 g/ R
  255.       bSilentStep=FALSE;
    3 A1 _9 u9 a. T2 k3 V
  256.       bCompressed=TRUE;
    ; U2 Y' ~9 X" @/ }; G
  257.       strExtLocal.Empty();% N) }) _  S5 G8 Q9 W0 B
  258.       strFullName=(*i).second;2 w% W) X6 p+ L& U9 Y5 O; a
  259.       dwProgramState=AP_CONNECT;6 h7 b7 U2 L6 s7 `
  260.       return TRUE;
    ( {; h/ \/ Z( t$ ^
  261.     }% m2 I% g/ H1 M+ P, w
  262.     if(!bRestartUpdater). j9 m/ s1 k$ m: T: Z  c1 J0 `
  263.     {
    . D, \5 t& D- M/ U9 x4 J
  264.       int iCurrSize,iFileSize;' |# H& M% p8 @) N9 \
  265.       iCurrSize=0;
    ' p9 m- E& t5 J
  266.       iFileSize=UpdateList2.size();
    ' S( y) w+ y  `# V
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");& X+ ]2 E( q$ f3 F
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");5 e+ H/ }, n8 \: \  `
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    % M, p7 k  `4 _7 {. `- `
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( }+ w9 a6 q5 X' o, q6 p. r5 O( V
  271.       Fclearf(".\\update.dat");
    ( ^4 u4 x2 |5 G" C9 c7 w: i: J3 ^
  272.       Fprintf(".\\update.dat","Bloodyf\n");7 V( s4 u- h* ?. t! s7 ]4 \
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 Z! U3 n3 _: _9 S
  274.       {+ U' E/ e9 }; P
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()), Q2 z5 }0 O3 T2 }
  276.         {8 }6 \3 y/ p) s+ D
  277.           file=(*p).second;
    $ J' v8 g' P$ ^  k7 L
  278.           sprintf(filename,"(%s)",file->file);
    0 u7 X$ H% E# j1 _  `8 J6 Q6 x
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 P; Z3 |5 X4 S5 j! N7 |& U( s, S% Q
  280.           iCurrSize++;! N( [- {: @' n" l+ \  w
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    4 D; p6 V1 P5 A. n* a+ x
  282.         }$ `) s: g- L" a. a! i9 n: Z+ ]
  283.       }
    . U; J$ w* _8 a6 [
  284.       unlink(".\\update.txt");
    0 |4 P$ a2 b' A4 \" ^  h+ a
  285.       unlink(".\\update.tmp");
    * h" R6 |; K; d) D4 |
  286.       Fclearf(".\\checkversion.dat");, M- Z0 f: }8 A0 _
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);" i  f) @. N8 K' |& U. @
  288.       if(UpdateLocal.size())5 ^) F3 s' r$ {
  289.       {
    9 W2 @. S& ~( Y4 p4 M9 Z
  290.         UpdateLocal.clear();
    * S. C( ?4 X9 v2 ]9 n
  291.       }
    2 ^3 P" N7 K& m* J% g: x, g4 b5 x
  292.       if(UpdateFile3.size())( p8 g! `& y& C; [0 E, T. v. S
  293.       {
    & ]$ Z2 G* g- [" B# i
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & [& R/ Z: k: D1 A0 j
  295.         {
    ; r6 N6 W. A: i! n# s
  296.           file=(*p).second;
    - b( d, C% U, C. N
  297.           free(file);
    + k" Z2 C& ?- b5 t
  298.         }
    / c9 {6 M# J' A' k+ |) a  c
  299.         UpdateFile3.clear();
    % Y5 f& L# [0 C& E
  300.         UpdateList3.clear();; }# h6 w! J1 o9 R6 w
  301.       }
    ( e8 x' J8 v: r
  302.       if(UpdateFile2.size()): B# A4 N' [; u5 y. L1 l1 v
  303.       {
      h* Z, I) @1 z: U9 Q7 C
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' |. h0 v! V* j+ h8 e. M  i
  305.         {
    " A& [# ^8 n$ q3 A
  306.           file=(*p).second;2 J3 |) B0 R) p, c" c$ l
  307.           free(file);( N1 _, ~& P& O- X$ p$ ~
  308.         }. F2 A# {5 Q( u' F* L- S) h; R8 n
  309.         UpdateFile2.clear();
    ( [- Z9 L- J( }5 X# I: g. \, z
  310.         UpdateList2.clear();" B# \; f" h$ L4 C1 u" g! ?
  311.       }7 E  }  ]5 }- p* o+ I2 S
  312.       if(UpdateFile1.size())* O- V" `9 H* n6 t5 f1 H% o! n2 j
  313.       {
    4 R4 D& B0 V" `! d
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& d5 Y. x7 I4 \6 J! ^9 Z! e
  315.         {
    2 E$ r, N% M+ v/ c: d
  316.           file=(*p).second;" k- r3 H$ ?4 P5 w- a- u4 X* ^2 m
  317.           free(file);4 S9 M$ ~1 W; T, X
  318.         }  D3 V5 d7 s9 R6 w9 i) v8 w; R
  319.         UpdateFile1.clear();) I" n6 Q0 I( _5 V. N$ e, ?
  320.         UpdateList1.clear();
    . @+ z  k* g) `! S9 ^
  321.       }8 G4 |# J& L2 d9 V
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    - E& M' ?8 k% X4 N0 V0 ^, j( N
  323.     }- W* n5 e3 j0 c9 k, s
  324.   }/ k5 Y) _0 J; e, }3 A8 }
  325.   return FALSE;
    3 y& K7 `# F2 S2 _: F1 H; Y
  326. }4 O( J* z5 r5 J: e8 w+ {( A
  327. . Q6 {! B: Y. ^+ o  Y
  328. void CRevAppApp::ClearAll(void)2 l$ x* f3 O& B! p9 s' k1 m( u; z% z
  329. {& `' s$ u- A( W# I+ R( R/ k
  330.   LPUPDATEFILE file;
    / k2 O6 O7 V' ?/ P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    % }8 d) w; u4 Z6 O% a  C

  332. ' ~/ ~$ i2 s, H8 Z
  333.   if(UpdateLocal.size())2 ^' j; ^& ?/ `3 |1 q0 \6 s
  334.   {
    6 c' v0 f; N4 Y7 _0 T
  335.     UpdateLocal.clear();
    ! M, k/ h: \4 J# b. M- r
  336.   }# S) z9 X: a. H! @0 K
  337.   if(UpdateFile3.size())( N; o" h, O9 x" O; y
  338.   {# r& M" k9 d7 t, x; d  D
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    $ h2 ^$ F7 G/ z% O
  340.     {
    " {7 ~7 V6 e; {: Y
  341.       file=(*p).second;; n% H1 P; R9 ^! Q
  342.       free(file);
    # e6 ?- v) E* o  I$ K" a
  343.     }
    4 B. M7 _7 q$ y+ T6 k
  344.     UpdateFile3.clear();# O3 Y: S* `2 e) N% l( \
  345.     UpdateList3.clear();
    % D- f) f* l# p" U
  346.   }' F5 \" H! b% a: _6 `7 o
  347.   if(UpdateFile2.size())
    9 A* K  a! f4 {/ {. G& W
  348.   {
    7 m5 z$ R. e: Y" O. N
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" r$ J! z3 w/ @+ _; Q6 z
  350.     {/ R5 ^4 b8 \+ q# i7 P: {- I& \
  351.       file=(*p).second;3 y$ N0 g3 d: T$ Z
  352.       free(file);
    8 U& t$ J- S' Y
  353.     }
    $ G' r% l. e" r" k( K5 q8 n* j
  354.     UpdateFile2.clear();
    ' n( \, B  Y& }! q  o
  355.     UpdateList2.clear();! c2 f( K# p. l& j$ d* r. t6 K( z
  356.   }- g0 ]2 l7 @7 G4 n' R9 _% C
  357.   if(UpdateFile1.size())
    + M% h$ a; a$ f  \( W; t7 e) q
  358.   {6 S: n) C" j; a; \+ A
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), o" E8 D/ a0 Q  c; r
  360.     {- Y2 W7 p% }0 b9 o
  361.       file=(*p).second;. Z! o" N/ T9 N" `- o7 b
  362.       free(file);
    , f) |. W& N3 H1 h: `; i
  363.     }
    5 u" H' y9 z  z' k
  364.     UpdateFile1.clear();
      ?: H7 Z1 X# x+ q9 ?! H
  365.     UpdateList1.clear();& C% N; O; ~- T% u+ f7 W2 l
  366.   }
    * K5 b& e; W' R3 C8 K$ \& K
  367. }  
    4 k! O7 y9 J0 [( W
  368.   % c% @) f& j2 l4 s
  369. BOOL CRevAppApp::CheckLocalVersion(void)# D9 \  U: x7 |- h7 J1 y  }4 r
  370. {- h" D' }0 S+ H/ ~
  371.   int c;
    ; P# ^. A0 @' \+ F6 b! W; Z
  372.   LPUPDATEFILE file1,file2;, `' A, I+ N8 ]; n
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ N, C* ~: P4 `) \
  374.   std::list<CString>::iterator l;
    ( J& X* k+ a% n* y( L
  375. 6 L9 E# P7 l, f. V
  376.   UpdateLocal.clear();: C; Q- b& L) I( @5 g# `+ V
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    # [8 e. m5 H2 y) \& y" B% B
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    1 N; F! f1 \3 }7 ?6 C
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    9 \' D  ~+ Q+ U3 r& `3 f; E
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 t! F8 T4 h8 G! y7 N
  381.   if(UpdateFile3.size())7 ^4 H2 z; D* {( C0 b
  382.   {
    ! j7 h7 Q" ^  I5 e
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    7 S0 c0 U5 t5 l2 p' I
  384.     {9 m" J4 N4 G2 }( _; k. t$ B7 `! l
  385.       file2=(LPUPDATEFILE)(*i).second;
    $ ]5 r$ m9 y  t. h5 @, H- ~
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + Y( ~: r9 r( v! J
  387.       {
    * E- i% V6 C( d
  388.         file1=(LPUPDATEFILE)(*p).second;: M  J" |' V) g/ t8 n, h
  389.         file1->vers=file2->vers;
    - w0 A0 h. V3 T9 m8 c+ n
  390.       }
    : T- ^3 b* i( V* f$ u" m
  391.       else& X! z) ]" b0 P, D
  392.       {
    9 q9 U* l5 M6 }! R  l( V/ l: V
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ W* ?6 }- L2 c8 b" y# P6 L& {5 V
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    , [; b' s& B. E7 k$ t0 E
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
      J% J' a, [- ]$ k  v& j2 I! a
  396.       }! n- q+ W  o8 d2 Z2 R( f; n9 A4 i
  397.     }- j% X  z# ^6 c6 N; `1 ?# d" |
  398.   }
    4 {/ }; Q- o& o- K& E5 X
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 S+ l+ z' M9 N
  400.   {
    , T% R: K5 C/ }/ Q& }) D% ~7 e
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())* O% {7 v- F; Z9 l. I2 f' ^
  402.     {) \7 D0 y5 p# I  b- X4 V' k
  403.       file2=(LPUPDATEFILE)(*i).second;
    : }& U+ h9 E5 B+ [
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# V. u' q% b5 g5 [1 F" e. Y0 e
  405.       {! h0 t  O: S0 R2 U5 i
  406.         file1=(LPUPDATEFILE)(*p).second;
    8 l, n  J5 p& T( ]6 M! k' t' D
  407.         if(file1->vers!=file2->vers)4 `4 B2 ?$ v( b- k# T
  408.         {! X& P4 L) r2 F1 W0 }
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) Y1 }" U: F9 L6 I
  410.           c++;
    4 B: H& m' r/ q$ f# Y9 l
  411.         }7 i+ S8 X, _2 Y) M
  412.       }6 ]5 b* N; c. e3 m
  413.       else
    , P8 U. h8 e' \
  414.       {1 I1 F. p4 d* q" M& r; n; a. j3 s: a
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ j' s+ V' g2 Q
  416.         c++;
    $ S$ K( f# z1 \+ S
  417.       }
    " _& e6 A6 {% u: \( e, N
  418.     }
    $ u- ]; A/ A$ U* @5 |
  419.   }7 t* }0 F3 B& ]& N2 T6 j6 [  G' h
  420.   unlink(".\\DownLoad\\update.txt");- ?) x' ]/ `/ y- D3 b! j/ W
  421.   if(UpdateLocal.size()) return TRUE;2 Z$ [) s  {# t" C& O* P4 x
  422.   else                   return FALSE;# N2 g8 N/ q+ I0 {
  423. }3 m8 R0 l) ~7 g' c" C% y- H4 w. g5 ?

  424. / L) ^: l. W3 _9 U" I5 G
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    : H9 M0 W. g2 u1 Z: F% [$ b
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") f( d/ s4 I8 B% P, R2 c
  427. * S7 b% u9 Y* w2 v

  428. 0 E8 Y6 _; m. t& d) X2 o( i' `! W

  429. ' t, V- n6 P% s, F% i; y6 m
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    5 o% w2 @1 I3 n* x8 o
  431. {( K' |$ M  `& D5 ~2 y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    1 A. J% b) f& s" o- X
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & t  K" |' ~4 f+ E
  434.   {. m/ U, ?4 h' {2 b8 y; x4 |- Y
  435.     char szLanguage[50];( U# G% `5 P# K2 Z; T% p
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");# a5 C2 G- H" }$ t/ c% d" w' ?- ?5 `
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      _% p+ a8 A! |/ W2 e) Z- V
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) D% T* V2 w+ f, R8 ?0 a4 C
  439.     else                                   m_iLanguage=ENGLISH;
    3 _3 E- p: x5 y" C( X4 p7 y
  440.     char szRegister[100];2 i. J0 i2 B$ h+ U; z0 e
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 Q/ M; `0 F/ n4 z5 H2 i
  442.     strRegsName=szRegister;
    ' ]0 s0 ]/ v2 _1 C
  443.     char szPatchURL[100];" E1 v/ I' e( h! ^# w: l2 U" P
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / _9 x1 R" m' n. w  j4 c
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# A) b- y9 x8 q/ M0 o+ y
  446.   }
    8 `7 l# L: c+ Y# A( |, Q
  447.   else
    ! X4 M# s4 p8 ~9 e; x* S4 n
  448.   {
    0 ~4 b8 U8 p- t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & \# h) K- _. W( c9 C
  450.     strRegsName=DEFAULT_REG_URL;& e3 Q0 L3 K4 p7 z" h. m
  451.   }' k5 d. E) n; J. M9 `
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    , C) b6 W# a( w( e' P
  453.   {
    & r( {- O9 ?$ E0 c
  454.     char szIP[50];; I4 d- K. w6 }5 Z7 H
  455.     char szDIR[300];
    3 O( _$ }9 H/ Q. S4 M1 o
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ) y9 h0 I9 l$ f% e8 e! \
  457.     {
    : z# t1 ~8 v- L2 X7 Y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & K/ A( L4 I$ K4 z& I3 o  U4 }
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 x1 {0 [9 ?7 ]4 W
  460.       strHostName=szIP;/ j! A* W  M4 j4 p' p4 A( U8 B
  461.       strHostPath.Format("/%s",szDIR);5 J) G; D6 \4 G
  462.     }. N% O8 h& `$ N$ B  S
  463.     else
    # A& ]2 n; q+ m2 t/ o
  464.     {
    # L# b6 i% L$ ^1 G
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 O  l' }% P( P# H- ]' R6 P8 C
  466.       {8 {+ @$ _  _3 H1 y& K  H
  467.         char szLanguage[50];) w  A- U! Q2 [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 t- w+ \8 F0 e3 P
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;$ p. A  q& `: d; N# {1 q& M
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) X3 Z6 X9 G7 l/ J
  471.         else                                   m_iLanguage=ENGLISH;
    0 K9 e2 f  ?; v. y( `: j' k! v& A
  472.         char szRegister[100];/ ^# Y' [* w- X8 u( U, c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 N+ Q, L3 b8 r. \, t) W# t# v+ o
  474.         strRegsName=szRegister;$ ~; c" X& E) S6 G3 x
  475.         char szPatchURL[100];
    2 k7 @5 f( ~  T4 A" E) m
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , r$ j7 N- P) A/ O
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' q0 ^* u' i1 F% ]
  478.       }! V2 ?" {7 r+ {. X- H
  479.       else
    6 ^5 p, d# {6 e2 t0 `$ {$ m# g
  480.       {
    + |% b# L  q; `/ y% M: ]
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 B% x- }$ ^4 b
  482.         strRegsName=DEFAULT_REG_URL;6 Z9 c( @" r  k4 p6 }
  483.       }1 a. v. N% i3 s3 P! A% p/ a
  484.     }# P/ [, V, t5 P& _" \! n( z
  485.   }/ r/ x0 l6 n& S* w2 A( Q. b
  486.   return true;. O" q1 s. p- x) |/ ~$ {
  487. }1 i& T; X" W8 n" d9 r, M0 W$ m
  488. 1 ~: K* R  ~4 _$ s) }  t. R' r) e
  489. #include ".\ZLib\unzip.h"
    & w7 e% `" ^% J+ P# t6 m
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);3 R; |+ K/ N1 X, p8 c0 S. j, x9 `
  491. /////////////////////////////////////////////////////////////////////////////
    # M. l+ V  U5 ]+ A, N
  492. // CRevAppApp initialization1 W. Y' Y1 R6 a7 R3 ?" v6 g8 _
  493. , P% q, T0 c1 I8 O& b2 J, `9 p
  494. BOOL CRevAppApp::InitInstance()/ |: J+ u4 Q4 g# `
  495. {
    * p$ l% k. k( ?
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];; P( a! C' c8 j1 u  C/ b
  497. & f2 X+ K$ K8 _8 b7 y" X; G+ c
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);% q( V: ?, ?0 }5 L! ]/ |) ~9 v7 T
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    2 C  Y& ?$ t7 G$ K  X
  500.   {
    7 I0 L9 i5 C1 B0 A( D/ z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    2 Z' c4 L- |/ G# [+ ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    3 z# L; r0 X- F0 D9 ?
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    - v0 G# A) W$ x" i# m- I
  504.     {
    4 ^$ ~; y+ \8 E
  505.       strcpy(szPath,szPathTarget);/ u/ x; K# n: }  K) ]2 s( Z7 _
  506.       SetCurrentDirectory(szPath);- i* K7 }* ?4 Y4 F5 o# ^" {
  507.     }* V6 h* j! M3 M7 V6 V
  508.   }
    1 m" }; v, q5 m4 u. P7 {; `
  509. #ifdef _DEBUG
    + o+ E+ @; O0 \' R9 n) [
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& G$ V3 N; F9 L* F9 s
  511. #else( q- c( `1 P, U; p
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ ^0 g! N+ E0 R: o- b* R# H3 E7 _& l
  513. #endif- q+ O/ n* ?# D# r4 V. g4 n" b2 K+ O+ x
  514.   {
    9 u6 E- p' w" L. p
  515.     char tempFileName[MAX_PATH];. ~% _! g0 c8 K) z/ L- c5 A
  516.     strcpy(tempFileName,szPathSource);1 v- {# \  g% X! E: [- V$ G
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ! N1 o3 C; K# n- ?# _: Z2 I6 n
  518.     strcat(tempFileName,"\\$CSUpdate.exe");+ N" A3 ?5 N# x. |( D" i
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);0 E" e: U! \& }, y# g, w
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);/ x  U  ?  H- Z- y& n8 {
  521.     return TRUE;
      }  L+ F' g- {# n' J( A
  522.   }1 k& t9 R3 U, C: l5 K" u
  523.   // Nuke 0118: Delete run.exe
      C& t2 j% u5 k3 [( g1 }
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );0 m: m. _8 t; P- j8 f- u
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");4 \8 X9 O1 z! D" C" e4 D
  526.   if(!ReadCfgFile("Config.ini"))
    0 @# v$ n2 T: \6 j2 ~2 j
  527.   {+ ~1 V' }7 O( r# e8 b1 _5 p; c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    2 P5 Z+ b' |6 ?2 R6 a% [0 o
  529.     return TRUE;
    " F3 r! F  D" j; c2 S
  530.   }
    3 Y3 O  Y, j2 }( m3 H" M. W4 D
  531.   HANDLE mutex;4 d0 B9 Z; s/ h) }) g+ p' z4 O
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    - p: V0 q: o9 E4 ~' v: W6 U) S+ {# [
  533.   {- F0 p4 }5 x; J
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    8 p) d1 r2 g# \8 U9 h/ O, @2 ^
  535.     {. E2 F* A4 L% A3 [4 e' A; [$ d: t
  536.       CloseHandle(mutex);
    8 C5 [2 i% e/ P& u' h
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);# S5 g8 V( I+ |/ w7 I& M
  538.       return TRUE;
    ' `1 Y% l0 U9 r) K
  539.     }# w: u* I. @/ I8 ^$ I3 n
  540.   }  % p7 p; t- V: n1 y/ t0 m
  541.   CloseHandle(mutex);; P+ R7 F% K2 q2 P2 X+ v# q- G  H

  542. + p6 i" A% n1 [# ~! A& R9 W, [5 C
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    6 t0 @" P0 b5 ]& |* L) r& L

  544. 3 V3 {- E, o+ d0 H8 l- O* k5 p8 r
  545.         AfxEnableControlContainer();
    % f4 ?4 I  Q6 u- O) W# _/ |
  546. 5 a6 v9 d# u/ k% m
  547.   bCanUpdate=FALSE;
    ' X- D: t( e9 \0 W5 g0 N& }
  548.   dwStartUpSteps=1;- B) E) b# Q# ?: B$ u' U. N
  549.   dwProgramState=AP_NOTHING;
    $ `, Z4 I" t2 j3 t8 Y2 U
  550. 8 B6 G/ A4 I/ @4 h$ N& r
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);( t' j% E, q( |3 @. f" C

  552. 9 l* ~8 x2 d: i. X& P* J
  553.         // Standard initialization' N, ~# ~2 N% n: n# u/ c/ z
  554.         // If you are not using these features and wish to reduce the size
    " \$ k- }- O: F9 g
  555.         //  of your final executable, you should remove from the following7 Y. O5 t3 m' n$ ?) j* m
  556.         //  the specific initialization routines you do not need.
    7 Q3 ^+ z1 J8 P5 }- k
  557. 7 q# P& {$ z1 z5 D& I6 Q
  558. #ifdef _AFXDLL
    0 P" p2 ~) }% ^4 W
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL" Y% V6 K  J6 k
  560. #else
    ( u* r/ {( |/ N  ?, I* N! Y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    & f/ t# N; Q4 I
  562. #endif3 [; N$ ]7 S+ i$ Q/ s

  563. ( u0 {/ Y- p$ f9 z$ Q
  564.   dlg=new CRevAppDlg;
    : y' @4 r$ n$ ~, n9 x" t* `
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    * H. R% J+ O3 \" z6 ?' I' b
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ; J% G" W& @+ I/ C8 Z
  567.   m_pMainWnd=dlg;7 G& y, n5 f5 D# I* _# A
  568. 0 F! a7 U, |$ G0 q+ H7 o
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);( Z5 W1 h& k# s( U  k

  570. 8 m) C3 b$ b2 i7 H$ ?' T$ f
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + B* t" }# @$ \0 k
  572. //  ULONG_PTR gdiplusToken;$ L0 V/ \% g% @: \8 m" @. \
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    * S. Z. f. k3 E* M% W& i) D1 T+ v

  574. ' O6 J3 s6 P4 o4 V
  575. //        CRevAppDlg dlg;
    7 B2 q% [# S* E
  576. //        int nResponse = dlg.DoModal();+ z1 N4 r7 }! o" U% i
  577. //        if (nResponse == IDOK)' u5 ^4 F4 ^9 ~9 Z7 U/ c8 o: e
  578. //        {" L  J8 R! w7 r" B9 g5 ]/ ]! @9 W
  579. //                // TODO: Place code here to handle when the dialog is
    1 ]5 W: f; d6 f4 {" M0 h: ]
  580. //                //  dismissed with OK6 f2 J- T) ?( Y5 B9 X) v
  581. //        }
    ; ]4 Q+ N; q% B" O" [7 j
  582. //        else if (nResponse == IDCANCEL)8 i+ R& S9 r8 P! [( `
  583. //        {
    . j% k: ^8 [& K+ ?3 W7 A' Z4 Y
  584. //                // TODO: Place code here to handle when the dialog is7 G$ p7 G1 J) R% K% P
  585. //                //  dismissed with Cancel$ P0 r% A; e4 ^+ ^
  586. //        }
    7 e# p4 j1 o6 S7 X/ c. H
  587. , B2 q' H+ L& ?8 B
  588.         // Since the dialog has been closed, return FALSE so that we exit the" v* u, q2 G  p$ O9 V. ~7 v
  589.         //  application, rather than start the application's message pump.& l1 R* R" n  K, ^5 O" }0 T8 m- m
  590.         return TRUE;
    % P3 I3 M$ B0 [( d$ Q5 e: Q
  591. }8 p$ G/ Z$ k( e- }- h- N- j

  592. & s* @: a/ ^/ k$ Z
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * a9 V8 U: ]. v: p: t
  594. {9 @1 L9 ]( e& N  u1 b' h+ @0 E' D
  595.   int i;
    2 t# C8 y7 S0 z0 i  T7 @
  596.   char *szRet;" I# A' n0 e8 j. J8 L9 R
  597. # D2 [2 ~1 k. K$ F7 P
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    + B3 N" d! u0 Y- o
  599.   if(sztoken)
    + C; g7 ]# Z9 E" B$ x4 h
  600.   {
    7 c# @  f7 |8 e8 u/ j9 w2 I" F
  601.     szRet=&sztoken[itoken];
    2 s7 L' o: i$ ~. Z5 e
  602.     while(sztoken[itoken])
    - P+ L3 i+ l( I9 a$ K# G" X
  603.     {
    . Q/ S, V# e" S
  604.       for(i=0;i<(int)strlen(token);i++)
    # n0 O) `2 _8 D: w$ {- B0 Y6 |' s
  605.       {6 v$ x# U) T+ R% X) c" n: g2 o% @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    5 t( x- B  R. K8 z4 L. B
  607.         {) x( A- `/ k9 j( a: S0 e0 a
  608.           sztoken[itoken++]=0;
    " G7 ]/ s% Z1 F. Y
  609.           sztoken[itoken++]=0;! m, c& z* m# n( Q4 J
  610.           return szRet;* B* j7 K) L* i, @% S  @2 D! w& ?
  611.         }
    ' l1 c0 _4 n; ~( q( |
  612.       }0 [1 F5 B0 l4 f
  613.       itoken++;
    : I9 m" G% u9 @
  614.     }. R0 R6 W; ~( T5 W$ `2 S9 T) E* d
  615.   }
    1 J8 b6 z: s+ E) a
  616.   return NULL;0 [6 n, ?2 _+ M4 C" e- F$ c
  617. }! b8 M0 Q8 L% z! X0 y

  618. 9 |% Y7 @& s! U. Z; R/ E& y
  619. void ProcessProc(long Total,long Current)
    , n9 r2 O& {# L% `
  620. {
    : W  E$ @: k0 _
  621.         MSG msg;
    / w2 h2 B! m) s
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ( ]  N0 A* [* f! ]! }! O$ x( L
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));( [4 F1 [6 Q7 Q+ x3 {% m! p
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))* o+ P2 m2 [1 }
  625.         {1 a! e, A3 k* m: v
  626.                 if(!GetMessage(&msg,NULL,0,0)): Q+ J; D7 C& W# d
  627.                 {5 f. Q, B* z/ X, j$ ?
  628.                         return;
    , M- S& n( O5 O9 O
  629.                 }; n# H! x1 o5 c+ ~
  630.                 TranslateMessage(&msg);
    8 f1 a+ }% B4 O8 d1 z
  631.                 DispatchMessage(&msg);3 n( e0 `+ S1 o
  632.         }       
    ; |2 }0 a5 |* F$ U
  633. }. u; y9 z2 c9 }3 f' v0 g! l& ?+ \9 s* I
  634. $ ?2 \3 M, T% T/ J& p
  635. BOOL bFirstChar=TRUE;, v3 m" x7 m7 h, W2 v

  636. 0 C  m) \$ l( f# S  O) w2 k+ O8 I
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    4 ]! t3 M3 t+ c' D  W
  638. {
    ) u: c7 t/ @3 E
  639.         // TODO: Add your specialized code here and/or call the base class+ N! `) u3 P! z
  640.   switch(dwProgramState)
    # p+ p4 g" J9 T! q- l
  641.   {; x) \9 r8 h5 _3 o% h
  642.   case AP_NOTHING:4 k* T6 ]" f4 L5 e' G
  643.     switch(dwStartUpSteps)) h" Q1 U1 ]( O
  644.     {
    ' D2 Q& B6 N; f6 j" [+ E+ p2 ]
  645.     case 1:
    0 V1 T6 z. |; B8 w% Z7 N6 c, j7 z6 p
  646.       {
    + A5 g3 y; M) \$ p  [8 Y2 y
  647.         int i;
    3 I' n4 ~6 {: w$ j. \+ _
  648.         CDC *pCDC=dlg->GetDC();2 Y$ q" ]: Y6 i* [* R  P
  649.         HDC hdcwnd=pCDC->m_hDC;
    : l* n6 O# |# o8 v* ?) a) d* K
  650. //        Graphics graphics(hdcwnd);: k: S8 A0 K  k0 N
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    1 C5 X. @" i" @1 @8 p
  652. //        INT iWidth=bitmap.GetWidth();9 P; H! P. l0 e$ l) \$ H; i
  653. //        INT iHeight=bitmap.GetHeight();- W- ^3 o3 v5 m
  654. //        Color color,colorTemp;7 \+ z( Q) t. k
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    8 j! o4 x1 L: r( g. C; ~
  656. //        {
    & h  E; I! r5 a- c: p+ }
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)- J8 }& w$ s4 r, j
  658. //          {
    " z! [. Q! |: _; o6 P4 a; Z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    " N7 ^1 T- m2 @3 L/ [- b. Z
  660. //            colorTemp.SetValue(color.MakeARGB(
    : U$ G+ K0 x) I7 i+ U. N+ F5 ^; D
  661. //              (BYTE)(255*iColumn/iWidth),
    % M/ {3 a2 e: L/ R: c- c
  662. //              color.GetRed(),+ M+ x, v5 p: z2 h  B' W
  663. //              color.GetGreen(),
    * b0 [# s0 E) \! h6 N
  664. //              color.GetBlue()));: j8 |2 A/ _3 m' D7 M
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    0 |/ P! P0 y# a0 W$ I
  666. //          }
    0 t& Y: W+ @" i- ?
  667. //        }
    4 }. ^; n( F8 [+ B8 e8 {
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);. I) _0 Z7 n- J: e5 G. O5 D
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( b: @, f0 g* G, `
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
      ~4 V  S$ ]# O; p! S$ l" p
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: i+ w# [) B8 d% h
  672.         for(i=0;i<240;i+=8)/ G% w( W3 D& d5 v- o; ~
  673.         {
    " [9 l# z& f9 ?$ A
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 `1 i8 J2 J+ i: n1 q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);$ ^$ S# w1 Z5 P' D. M+ v9 l
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + W5 c6 B! x2 `0 ?! G
  677.           Sleep(33);9 y- k' K; ~6 t0 P
  678.         }( i' v/ x; T3 G- B- }8 h
  679.         Sleep(1000);
      w& G) R6 {0 l: C" c! Q3 [& m8 x& W: C
  680.         for(i=240;i>0;i-=8). Y% s6 t3 M3 Z/ [$ m4 K
  681.         {
    5 b) ]6 `: z+ s2 A2 ]
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 ]% s: h- p0 v4 a
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; F2 \! q+ a% _1 B* M# i# a
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; ^' Q5 I7 X4 l
  685.           Sleep(33);
    ; w6 f$ g- \9 \& k; h, @0 `
  686.         }& ]2 E5 h. t( |6 c3 g+ f/ t
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);3 X3 [& w0 O9 z/ u
  688.         dlg->ReleaseDC(pCDC);
    0 q$ |0 j' c) h& e
  689.         DeleteDC(hdctar);* g$ v2 h+ o* I
  690.         DeleteDC(hdcsrc);9 H2 R4 o9 N) Z, p9 L% _
  691.         DeleteDC(hdcorg);
    7 F8 W$ C/ y0 B: a
  692.       }
    , @7 h3 w* W3 [* k2 A( H5 q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    % {1 x5 u! K( g+ @" B. T! y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");, R- {' \  ]4 R3 J. x, N
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");* d' N, x9 G/ h
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
      Y7 X9 E6 i$ S9 z5 Y, b  `
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 r/ g( R9 O$ Q3 r3 E
  698.       if(!Dn.Connected()): s; s  c* L; Q' Y3 n# J( d8 W
  699.       {
    # U1 |/ H$ D% q+ I
  700.         dwTotalFiles=1;
    , ]7 v0 ]* B3 O9 u
  701.         dwDownLoaded=0;
    ) ]+ ?- x9 Z$ v7 [
  702.         bSilentStep=TRUE;
    6 S$ g5 W3 w) `8 K6 ^* @
  703.         bCompressed=FALSE;
    $ ?) |6 f( K9 L- H, V8 V' g- m2 p
  704.         strExtLocal.Empty();7 F, h) V9 N2 S) }
  705.         strFullName="readme.txt";
    9 Z5 A9 o" D3 k6 n! I# s
  706.         dwProgramState=AP_CONNECT;& Q! b9 I0 ]8 [( F: M% B' c3 h
  707.       }
    * u# h: Q% s4 o
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 h1 ]5 r! H* g; H6 t  w$ S
  709.       dwStartUpSteps=2;
    9 t! f* Z& K' m3 I+ e& N2 u
  710.       break;* n. }! o( ?9 Z. @% G- X8 [
  711.     case 2:
    2 f2 b$ \: J& X, |9 X. g5 e
  712.       {
    9 W& }% f! \" g' J3 G4 _5 K
  713.         int iEOF;
    ; z  S6 L* E" H6 a
  714.         FILE *fp;6 R: ^0 ~& D- T- i: v: }: c: g. j
  715.         char szString[512];. o1 E6 A, l! h, Y9 ]
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");( W0 e8 f5 d# V
  717.         if(fp)
    # A# \+ s2 i; w" I" l5 \2 H
  718.         {
    6 G* d, G' m  X: }! |7 t8 E8 [
  719.           do! G1 Y) A. o- J) M5 W
  720.           {
    9 s( a! o6 _$ m% w- p% ^
  721.             iEOF=fscanf(fp,"%s",szString);4 ?1 `5 h4 X4 i% f7 ~( B$ Q* H/ {
  722.             if(strlen(szString))
    * i8 o+ s; l4 ^# W
  723.             {
    & M" w! W* B7 |1 u, E4 h; D
  724.               if(bFirstChar)+ H' L; ~7 _  [$ i- K) H
  725.               {& h# E; s" S5 n; U) ^5 m  R
  726.                 bFirstChar=FALSE;
    2 \8 j; ~& B9 q8 A$ t
  727.                 bConnectIsBig5=FALSE;
    8 ^6 K8 S8 n$ r$ i$ f, L
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;" R6 O1 m+ T  u- S( R
  729.               }# `( E$ K" V" t" c) A- R
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    0 Y0 y8 `3 ]+ O2 V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));0 U0 v8 S6 p; ?9 g# F" x" i( c. q
  732.               dlg->m_ListText.AddString(szString);
    ; g4 G9 X, ^" d0 l. \
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 r. b! Q: Y6 _' f: R% A# D
  734.               *szString=0;- T* N  }6 S, w2 m
  735.             }6 O; p% M( {% z" Y* U; Z* I4 c* Z
  736.           } while(iEOF!=EOF);
    8 H2 Z7 l. T4 ?, i" Q9 u
  737.           fclose(fp);3 W. z9 A; p+ I
  738.           unlink(".\\DownLoad\\readme.txt");
    & M: [. f% N" N6 M
  739.           dwStartUpSteps=3;' y" _! @* ^* |  ^' y, A  O
  740.         }
    0 _4 j' h( J/ O! v
  741.       }9 M; `" N1 B% ]* g  \& x1 ]$ _
  742.       break;3 ~3 `: w- C5 I$ h2 r5 u/ L
  743.     case 3:3 r: P" r  T1 s9 h& y3 N
  744.       if(!Dn.Connected())4 c( ~& o) D: L4 _. A, A( H
  745.       {. P# h' W/ |# M- i0 ~
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ( f# h- E- G! C, X3 f; `9 i! s
  747.         dwTotalFiles=1;- ~4 C/ U2 e2 B2 w% ]* ~
  748.         dwDownLoaded=0;$ o% b- S4 M& {7 L+ G5 b/ A
  749.         bSilentStep=TRUE;' L6 C- w. x% V  U5 B  ?& e; B2 I8 v
  750.         bCompressed=FALSE;4 p5 Q  J. o# b* c
  751.         strExtLocal.Empty();
    ; F( i$ G0 ~: C
  752.         strFullName="checkversion.txt";5 T% h" Y0 r4 c( \
  753.         dwProgramState=AP_CONNECT;) G. V3 p, L' \: r0 {
  754.       }
    , ?4 n, z# C+ p0 s" V
  755.       dwStartUpSteps=4;
    0 j; E) A7 G$ U2 K0 o+ E
  756.       break;
    " D' W) r0 {9 G1 E# K2 h
  757.     case 4:
    7 m" ~+ X! }. ]! [( m
  758.       {2 G3 ~- N" ^! `5 k  N
  759.         FILE *fp;7 U) ~' H: o$ l4 A2 }0 b
  760.         char szString1[128];* X! P% v& ]9 j9 Z
  761.         char szString2[128];' l) k/ i0 G9 W7 V2 q$ z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    5 P4 a8 A4 b  j6 q- y2 _
  763.         if(fp)
    5 ?* e) g5 q5 t* w# g0 U
  764.         {3 f- Z  Y! ?  i. E
  765.           fscanf(fp,"%s",szString1);
    % e3 K4 o0 ^6 ~! \: X1 Y! c
  766.           fclose(fp);
    1 c( E9 u# S0 x7 E, F* F/ n
  767.           fCheckVersion=atof(szString1);
    ' s8 a! ^+ N/ R& P+ K, f# x
  768.           fp=fopen(".\\checkversion.dat","r");- W5 f. w9 B6 H! x) Q0 Z
  769.           if(fp)$ A" h7 f5 U) e' @' x4 L
  770.           {
    , |* l+ s+ E; j$ {; f
  771.             fscanf(fp,"%s",szString2);+ I* P; M% T; M3 |
  772.             fclose(fp);8 K! b8 E8 t. z( v, K
  773.             if(atof(szString1)!=atof(szString2))
    6 }9 U6 G  [% |- y/ A8 I( E
  774.             {
    " @; X# q, m0 o0 C3 R/ t1 A# D
  775.               if(!Dn.Connected())
    - v  s0 r9 X3 c" s9 @
  776.               {/ ^, [  W8 y2 h" A
  777.                 bFirstUpdate=TRUE;
    - q5 e! {$ a# o3 K
  778.                 dwTotalFiles=1;
    ; F1 ~' x6 _5 A6 \! k
  779.                 dwDownLoaded=0;$ |0 c. M: U* Q3 C! f# S* k
  780.                 bSilentStep=FALSE;
    ! A: x9 n# Y& A. y3 z$ A( Y
  781.                 bCompressed=TRUE;" U4 q" c* \0 X; E) C
  782.                 strExtLocal=".\\DownLoad\";
    & o: a$ {/ u9 h# h- ?# H
  783.                 strFullName="update.txt";* N+ n  [8 P& V3 J
  784.                 dwProgramState=AP_CONNECT;
    ; t. z( R) _/ N& V
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 B: W" c  G; p- x: S: t8 p) ~3 L
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 |/ g. _( X% ]) H- {2 g
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % g9 q3 h( p' o$ M/ [, Z

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

5 O" `7 M2 D" f% e  f2 F" i$ F# G/ z7 x  [" V9 |; y( Y

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回復

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回復

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回復

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回復

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-2-16 11:45

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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