CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
1 f( G% ]* U( b* ]. G1 z6 A
  1. / RevApp.cpp : Defines the class behaviors for the application.
    5 X+ \. |0 \2 _" V* i4 U" j9 O
  2. //
    " H: y4 L) k1 S8 u+ s* g- A* K3 i) O

  3. , ]+ F" O- w6 T* @; n. }3 v
  4. #include "stdafx.h"
    ) j2 Y+ ~- r$ B+ g0 A/ S- h

  5. . S. n& v1 D5 o/ C5 v
  6. //#define UNICODE
    % y4 h# |/ w5 a; \6 m
  7. //#include <gdiplus.h>
    " R, {, K, H3 C' g$ r3 U
  8. //using namespace Gdiplus;
    8 _9 w- m. `$ J# n; W6 j
  9. $ g, A# E3 P" j
  10. #include "RevApp.h"
    : a: T5 z* f0 g' |- F) @* I
  11. #include "RevAppDlg.h"
    # L6 [. F2 J: P. R) ]

  12. ) M6 t" V% v: b9 N" P# l0 X9 L% [
  13. #pragma warning(disable:4786)
      p9 e3 z( F* ^& @! L/ O
  14. #include <map>+ Y- C8 @5 Y7 F+ g" B! c$ r- t3 f
  15. #include <list>
    & Q% Z# d6 c% m" v+ ~1 O
  16. #include <direct.h>
    2 j; x( X& n( G; H$ c! s$ V8 }

  17. 6 ^& s$ [6 L8 V
  18. #ifdef _DEBUG
    - w4 U% J4 K+ L( J* Z8 V
  19. #define new DEBUG_NEW
    / P1 c3 C: z7 T1 d
  20. #undef THIS_FILE" i. {/ O0 k) W+ O( D) m6 P+ i
  21. static char THIS_FILE[] = __FILE__;7 @6 J* p  z+ n& F- W  h7 Z
  22. #endif. o* s/ J' ^0 X- D6 u" V
  23. #include "SkinResDef.h"9 O4 E7 ?6 L% O. t! Y3 v! G
  24. #include "ChangeBG.h"
    : w/ ~+ T1 o% J" u+ C, h' ^
  25. #include "AFXINET.H"8 ~. F+ y' }" W5 P, `
  26. 3 \: S* R: v- m, l/ \; B# I
  27. #define TRADITIONAL_CHINESE 0% Y/ N  D! R2 v# R) v! f
  28. #define SIMPLIFY_CHINESE 1
    3 f" I$ a" _1 H, C4 X
  29. #define ENGLISH 20 W  S; J  \9 E" n- j
  30. int m_iLanguage = ENGLISH;" b4 t$ n: Z7 @* z: |# _
  31. /////////////////////////////////////////////////////////////////////////////6 i# Y, _6 R& c' V5 \% J+ H9 V! o* R
  32. // CRevAppApp4 F/ Q) ]: S* O* c) x. ]9 s

  33. - H3 L* W+ O& o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    # w( ?3 x- \6 z2 B4 }# H
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    % }9 V0 m0 F& c! J
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    9 s  F% |8 k+ {; K: r+ S
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!  W2 m! J- b$ p' b+ d5 V
  38.         //}}AFX_MSG
    " V) N, k  c( m
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 C  E0 I: \4 n/ P9 j$ [
  40. END_MESSAGE_MAP()
    $ x' H8 X/ i- Y
  41. * H1 L, p+ Q) Z
  42. /////////////////////////////////////////////////////////////////////////////
    + F" I$ b- z1 ?. }- i. u" n
  43. // CRevAppApp construction
    ; P% }: f1 S7 j& H

  44. $ D" g1 \3 S; D4 T+ }
  45. CRevAppApp::CRevAppApp()
    & {+ z/ E) x7 `9 p, V+ g. r& L
  46. {  ^5 p4 }& B; J. E' a& l" d
  47.         // TODO: add construction code here,0 i6 x; e0 A1 k
  48.         // Place all significant initialization in InitInstance% O+ w- t1 C0 ^
  49.   bDisplayIsBig5=FALSE;$ D& B$ ~7 v1 q  ~0 a
  50.   bRestartUpdater=FALSE;
    : [" h% }5 H( i
  51.   bFinishUpdated=FALSE;" \6 a/ R  q4 t) \; b
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ; m7 r$ ?) h- C1 g+ }
  53.   InitChangeDataBig52GBKS();7 q% j5 `4 b# a
  54.   InitChangeDataGBKS2Big5();
    6 l+ A, J5 I( |/ W
  55.         //
    7 a' e8 v1 Y* j; S
  56.         bClickRunExe = FALSE;
    - c0 g+ v; {9 ?  M
  57.         //
    0 |, n: E# l* y8 w3 m3 H
  58. }
    & [* o" G3 A6 `3 ]* b! S* [* U

  59. " b$ ?9 M$ k* t6 p4 o
  60. CRevAppApp::~CRevAppApp()
    . D/ y4 A! r5 t" M8 P
  61. {4 J6 a) y- ~: U& Y- r
  62.         // TODO: add construction code here,, I4 ~0 {$ p& r9 p7 c
  63.         // Place all significant initialization in InitInstance
    7 p) H* j6 _: m) E( {& ~
  64.   EndChangeData();5 t$ p4 O4 }; p6 |4 w% M2 @2 N
  65. }
    ( v5 H  l. t8 |& D, o3 l) A

  66. " z7 P7 n% v  z" G' Y6 [& H
  67. /////////////////////////////////////////////////////////////////////////////
    0 `, m- F3 @" k4 d- |
  68. // The one and only CRevAppApp object
    : Z$ C0 }# i. P- i2 G! @- M
  69. 1 e5 l, X2 [/ m3 |: q
  70. CRevAppApp theApp;# Y4 x+ h" b. m0 Z0 I  O

  71. ! P4 X' X+ d3 y) v3 p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ; j- F" z' H4 C2 p6 o+ B) t
  73. {
    " u# u5 f6 W2 [* J' @* P4 g
  74.   int iEOF=0;4 I8 c- w# o  {% _
  75.   char szTempName[MAX_PATH];6 }7 t0 E1 h% Z! s/ Z4 x1 N
  76.   *szFileName=0;" J5 c/ S" G7 W$ v# L$ h
  77.   iEOF=fscanf(fp,"%s",szTempName);) h. r3 V) }: E/ B  A
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('); w( R7 {% N( X+ z' t6 t
  79.   {6 Y# Y$ c7 [3 s/ v
  80.     strcpy(szFileName,&szTempName[1]);
    , o- P8 a% o; E( d* O9 ]
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    7 ?8 t$ x3 u* X' x' \8 ~, k. ]
  82.     {' G7 L2 e' E+ B$ ^1 s2 Y/ b
  83.       iEOF=fscanf(fp,"%s",szTempName);
    6 h( ~& u) B3 T& W- a
  84.       strcat(szFileName," ");
    * I+ B. ~5 a$ g! F3 }' }
  85.       strcat(szFileName,szTempName);
    8 D+ T, o9 v+ N  |( e
  86.     }- A3 q9 j3 i8 H" y/ y
  87.     if(strlen(szFileName)>=1)% J" f8 k# h7 f& S* Q# r1 I
  88.     {
    % u5 N; Y0 P# p/ ^
  89.       szFileName[strlen(szFileName)-1]=0;( g* U. N' `& b9 u1 o0 q( n- s
  90.     }
    9 V3 I7 s8 h" j; F7 E% w
  91.   }
    3 s1 @1 V* J4 t3 H9 f; J
  92.   return szFileName;2 A4 @( L. z' b+ H
  93. }
    / T  ]0 W7 v: }, z$ L
  94. ( `! j+ |6 R. T5 i8 X; T! ~
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)4 ~2 f  W" m. b4 b7 V4 s( ?, P
  96. {7 I7 G6 o! i) I# D& |
  97.   FILE *fp;
    ! `. q" m% v/ U- B
  98.   char *key=NULL;
    9 G5 T# G( Y# }& V$ l( b+ o
  99.   char version[MAX_PATH];
    ! `- B& s6 G  ]
  100.   LPUPDATEFILE file,olds;
    % d4 L* K* T! f; p
  101.   std::map<CString,LPUPDATEFILE>::iterator p;5 |! B8 i; B5 ?) H* Z' x

  102. # j9 H& O  W$ Q, J; H3 b
  103.   UpdateList.clear();/ l# I/ Y8 i# c1 z
  104.   UpdateFile.clear();
    * t5 x9 f! ^) p, Z+ R
  105.   if(GetFileAttributes(filename)==-1) return false;
    / T! O+ d- V, x) o% \$ v
  106.   if(!(fp=fopen(filename,"r"))) return false;5 Z* }- \! k: Q  c* t3 }
  107.   fscanf(fp,"%s",version);9 U, j" y$ Q( \( r
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    8 U- X6 D1 h# {9 K" G1 E. |3 _
  109.   while(fscanf(fp,"%s",version)!=EOF)+ w1 @/ o2 O# b; F& P
  110.   {0 j' d% n1 W- ^! w( N1 f* o
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 U( D, f: Q2 M- i' h- p* n/ L9 @
  112.     fscanf(fp,"%s",file->path);6 t9 i* e6 i7 W" c1 `4 l
  113.     ReadFileNames(fp,file->file);& {' K, K0 f6 l1 {8 ]& @
  114.     strcpy(file->full,".");
    ! Y# y* g! f0 R8 A) p& A, I$ i' \
  115.     strcat(file->full,file->path);! Z( S1 t5 {8 @2 j5 |# l' N
  116.     strcat(file->full,file->file);- c, [# n2 U% M# d) S) f* E; K
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    3 A% \, K/ _9 J+ U* D
  118.     {
    / e1 M0 i* t, @
  119.       file->vers=(float)atof(version);9 t' N* Q) G9 v# ?) N% L
  120.       UpdateList.push_back(file->full);
    ' e/ v5 Z- M% }
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , K) i" K0 B( s1 c( ]( ~: u
  122.     }2 G( \/ Z& t9 z% `! F
  123.     else
    0 x- v; a# |$ F# A& u  D, Z, U
  124.     {
    ( [! g3 Q; A5 z: D- n+ L
  125.       olds=(*p).second;
    ' d& p& g' J5 E2 Z$ Y
  126.       if(olds->vers<(float)atof(version))
      n3 W" g; r* c3 ]; e
  127.       {
    , ]: A5 T6 z. x# }+ H' P$ v
  128.         olds->vers=(float)atof(version);
    5 ~5 O8 N+ u% h1 W( }# r
  129.       }* `! z0 ?5 b3 Y$ O8 c7 u' G
  130.       free(file);5 d, k- M4 U3 D0 C
  131.     }: ^, G# E( K, ~% \( S9 _
  132.   }
    ( D6 W3 o& K8 L5 d' C! {9 a
  133.   fclose(fp);$ [, \$ R: k& k
  134.   return true;
    ; x  T9 D: S" j5 z/ Q
  135. }
    ) `; p# M/ Q7 b! ?2 V; e& u

  136. ) o2 f8 e4 P  B3 T1 E
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    # u  P5 E1 ~+ B% q# H  ~
  138. {
    $ T" _0 [6 x: p3 n
  139.   TCHAR  szFull[MAX_PATH];3 L4 s9 T9 [& l8 z' o
  140.   TCHAR *token,*inter;
    5 h+ Z2 A9 |+ M8 d5 u. [$ b
  141.   *szPath=0;5 R6 F1 m7 @% Z
  142.   strcpy(szFull,szFullPath);
    : C( ]' e: t# `8 ?4 ?
  143.   token=strtok(szFull,"\\/");0 o) _! I: \6 S0 r4 Y
  144.   inter=token;! G$ |! u) u9 G' F" v% \
  145.   while(token=strtok(NULL,"\\/"))7 p2 @3 Z5 V' I  Z# Q
  146.   {
    6 D% c1 W4 O( w$ y" F8 D. D4 q
  147.     strcat(szPath,inter);2 A! _6 T3 v7 \3 k, u0 r
  148.     strcat(szPath,"\");
    : N, O( X2 P( g& N& ]
  149.     inter=token;0 v/ M' |4 C+ a# k
  150.   }5 \+ p+ B7 M6 @) S) R* f; R  p; I
  151.   return strlen(szPath);2 S( G# H8 g& b' I" G
  152. }  _7 t( N. x- G' S% ~. \" S' f

  153. & L* h, E4 p1 S
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)6 U; b' T' ^3 O) ^  e( E! f9 C' `
  155. {
    8 _. }7 L( ~: G+ S/ m9 q# B
  156.   DWORD attrib=GetFileAttributes(Target);7 H6 `( ^# m9 j7 I: P  R
  157.   if(attrib!=-1)
    . C, m% s$ r# D" Z; @
  158.   {+ i, d3 ^; @/ s
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ q5 f5 j0 ]1 H8 `  P
  160.     {. t2 r( B  O5 H. w5 Z  P
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);$ m* I* w/ ]: ^* A  ?' ]& N7 `
  162.       SetFileAttributes(Target,attrib);/ V) k! {* a7 Z# k: d* P0 w
  163.     }# C# H! ]6 J# X# B7 N/ l
  164.   }  Z  z1 Y& p$ ~3 s( g/ H$ _
  165.   CopyFile(Source,Target,Erase);
    $ T$ x5 H) \; P7 i
  166. }
    6 \+ J% J# A4 R4 M

  167. " F1 N4 M! q3 [( ^
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)' Q0 {, G7 t& q0 A! v9 e
  169. {
    # a) _# ?- @+ l
  170.      FILE *fp;
    + d$ Y4 N) t6 e- L9 b6 b0 f! L
  171.      char  szBuffer[8192];6 A, v; ]- N% I/ a3 ]2 Z. q. N
  172.   va_list  argptr;
    1 q9 b% T  K9 \* |4 y8 h3 }

  173. ! K. k9 \. p; \: n. R7 s0 Q
  174.         va_start(argptr,message);' ~( X0 O! j/ _5 U; u) \# l( J0 e) S
  175.         vsprintf(szBuffer,message,argptr);: _# {2 k+ T, ~
  176.         va_end(argptr);
    9 {  l* A2 B& B( `* L
  177.   fp=fopen(FileName,"a");
    & O5 d& f& `+ D2 p$ n8 u
  178.   if(fp)) }! V- E; y; J( h% q+ @
  179.   {/ d' ]' _; X. m3 Q
  180.     fprintf(fp,szBuffer);- B  k1 p6 ~/ E+ }0 a
  181.     fclose(fp);: J- G" o& }" Q! ~5 T8 [! d
  182.           _flushall();4 f1 |0 M7 @& A; F" W
  183.   }4 N# Z9 B) ?2 k# o3 i& x
  184. }
    7 P4 ^2 N  A) B. G

  185. " W* e# Z+ t& D
  186. BOOL CRevAppApp::Fclearf(char *FileName)( Q4 X9 H9 K) W; z6 g
  187. {# Q( \, o  R4 b
  188.      FILE *fp;
    + Z% Y( {/ Q9 N& w" M' {7 }% G7 T
  189.     DWORD  attrib;. q+ m4 d* x. V1 C4 C9 W
  190.   attrib=GetFileAttributes(FileName);
    ' `7 N2 j0 W8 n/ y
  191.   if(attrib!=-1)2 Y4 l$ G; j7 [" M: R9 b. F
  192.   {5 e( Z: M1 m0 x- I
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 Z% ], u8 W) ~  _' k+ d7 n
  194.     if(!SetFileAttributes(FileName,attrib))$ M& s. Q( W0 {- F/ F* X: T
  195.     {
    - r1 S) m/ s. s# @0 L7 n
  196.       return FALSE;
    7 ]# ]6 V% ?2 P4 i
  197.     }" ]* T  x8 Q6 q: U
  198.   }7 L  i9 K# Q4 P8 n8 d
  199.   fp=fopen(FileName,"wb");5 R* ]% v& E0 Q, u& y7 ^
  200.   if(fp)' c3 ~! u$ _) u+ g+ c
  201.   {
      n$ u4 U7 R) O; J9 W
  202.     fclose(fp);
    : T. A# X" i$ _2 w8 X5 i
  203.   }* X# k: R; ^7 R5 [7 O. k
  204.   return TRUE;
    0 {2 S1 \5 u1 M3 I+ e9 d0 \: g! x& J
  205. }  b2 ^6 q& l& a7 M$ l. F
  206. 4 V& D2 t  r* k+ l) S- {7 B
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      I7 M* M+ H8 M; }0 |; H
  208. {- w" F" T: K& M8 {) v$ e/ k0 d7 ?. p
  209.   char filename[MAX_PATH];
    2 a9 E) M0 S% x) S" W# L$ T6 `
  210.   LPUPDATEFILE file,olds;
    ' @) n7 d/ j" E
  211.   std::map<int,CString>::iterator i;
    # j9 h) y7 Z8 t9 C" [2 f8 I
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) V, S8 }3 p1 B0 a4 k
  213.   std::list<CString>::iterator l;
    - }6 A* K4 t/ ^; R- |

  214.   o4 d6 z- |2 O$ b$ w7 J
  215.   if(bFirstUpdate)
    $ v+ u! j1 ?, H4 B$ W1 \( D
  216.   {/ P  ?& f, l7 e* V8 |
  217.     dwCurrFile=0;5 G' H$ S# i/ p# [- ~
  218.     bFirstUpdate=FALSE;6 g5 E, S; b0 ^  o- D) W' w- k+ L7 O
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 y% ]  |  ?: z# u% S% x! {
  220.     {
    + s- e' g! W( O" w" ]5 e
  221.       dwTotalFiles=UpdateLocal.size();; K  ~6 @% H$ N7 x9 u; r* W
  222.       dwDownLoaded=0;
      D3 `; X/ D$ T0 L, h' v1 S% P0 r
  223.       bSilentStep=FALSE;+ N7 Q+ Y, d5 g6 N7 k- T
  224.       bCompressed=TRUE;
    ( {* s1 T( T4 n; K; m4 n$ M9 D3 K
  225.       strExtLocal.Empty();
    4 a& _  {: Z1 [/ D5 \
  226.       strFullName=(*i).second;7 v( y: V6 f- D. o2 r6 o6 v8 O% n
  227.       dwProgramState=AP_CONNECT;% U9 g7 ]; g2 m5 ~3 z
  228.       return TRUE;/ l- p7 ?5 G+ c  e3 [1 e* N- e
  229.     }
    # i3 [) @2 ~( c6 `. w+ `2 o
  230.   }6 E- {7 g/ h' W8 H+ u& t
  231.   else if(bRestartUpdater==FALSE)
    & i) o1 i; e- [. l9 A8 D6 `% S5 w1 ^# ~
  232.   {+ C9 i3 s' O8 N4 f
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())2 U; u/ o2 B3 O% @3 O( F
  234.     {
    0 l+ T1 m1 d) Q- z( V
  235.       file=(*p).second;
    ! [! |! e% b# Q/ ^- @) F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())2 \; r1 J% x, Q4 J% D
  237.       {
    # c- _! ]/ Y# B4 j' o/ o
  238.         olds=(*p).second;' I( v: L4 b  w7 W
  239.         olds->vers=file->vers;
    & X& c: [2 ~; u  j  U" X
  240.       }
    7 q8 O) U2 Y" a0 }3 {
  241.       else  X: u# O. d, e9 Q  c; L+ u1 s$ D
  242.       {
    : o6 E( p$ n7 q$ x* c
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 {8 t* L8 I, `, D2 f& ?
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ; U* ]4 X- n! d3 N" \. Y# R5 i
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));  V3 ]3 J6 y/ p$ |
  246.       }2 u- M! h$ s+ E
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");3 A& _- X! |. l- A; k( L; @7 T3 H
  248.       sprintf(filename,"(%s)",file->file);
    0 D+ `& `) H* s: p, H
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 X: l& L: b+ B# ^
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    4 w" i5 p# z& f- G, E2 e2 O
  251.     }
    ' x! Q( Z! F$ e
  252.     dwCurrFile++;+ \% _6 ?$ Z2 ]4 Z! H
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ! [7 _+ ^( c1 ^# [2 r/ L; f/ u, z1 @; B
  254.     {
    ; @) u9 E4 T# w& |. y' k
  255.       bSilentStep=FALSE;
    % o, u+ Y' k* n3 P6 {5 g1 p; Q
  256.       bCompressed=TRUE;) I$ x9 {( |+ K! }, F
  257.       strExtLocal.Empty();
    # g5 \; S4 N$ o, L4 i
  258.       strFullName=(*i).second;/ ?/ W1 r4 X/ }
  259.       dwProgramState=AP_CONNECT;
    ; z- Q( p6 C3 O. ^9 M
  260.       return TRUE;/ N& ?; |: U3 D( ]
  261.     }
    " ]% l) X4 h% k; H+ e% [  w  ]* ~
  262.     if(!bRestartUpdater)
    - m2 M4 R; Z' D8 _" P: f
  263.     {
    0 {: Z1 h+ P. D3 w" M2 P
  264.       int iCurrSize,iFileSize;
    4 H9 d$ z* q6 t/ i
  265.       iCurrSize=0;" A/ X2 A& z% d* _7 Q
  266.       iFileSize=UpdateList2.size();
    $ l" A1 t) T! m6 x
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    + j& P# Q/ y* `% L7 W6 ~
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    % Q0 [% w7 Q; B# D$ _+ x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' c# K+ A/ {: \2 Q* f
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ I1 c$ ?- K5 H$ N
  271.       Fclearf(".\\update.dat");9 I& O; F/ R' W! l/ a# r
  272.       Fprintf(".\\update.dat","Bloodyf\n");# }4 v% p" S) R/ X  h" C+ r
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)( x/ R( e3 D6 O5 M. B2 X: ^
  274.       {
    . W7 b  Y; V% O7 L3 y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 ]0 z6 [: E! c8 V2 A8 f8 C+ L7 }
  276.         {
    , I0 g* v) c: D+ R* c- P5 K" @
  277.           file=(*p).second;
    4 e- g) i* m- k. r
  278.           sprintf(filename,"(%s)",file->file);
    ( a9 W4 g, b, H9 [
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 W( n) u8 _* R. L4 ?
  280.           iCurrSize++;
    8 t/ i# X  ]- U* f
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) V5 ]9 P# q4 }2 ]" m- U
  282.         }
    / D$ ?5 F7 }# e6 C# w
  283.       }  ?$ T$ `& Y. h8 Q( r0 ]
  284.       unlink(".\\update.txt");  W0 s2 b: q) p+ |3 x( {9 }
  285.       unlink(".\\update.tmp");/ i0 D' ~$ D0 D
  286.       Fclearf(".\\checkversion.dat");
    # G& E  z5 `- E* x/ ]
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    4 D2 g* `1 I% P3 z3 X  M  U! S7 `
  288.       if(UpdateLocal.size())
    1 c' H2 _9 T  ]( N. l
  289.       {7 X" ^* _  t* u* P
  290.         UpdateLocal.clear();
    % F8 Q- [% m$ T: ?$ {* H
  291.       }0 k9 U1 n2 D* {8 B
  292.       if(UpdateFile3.size())
    ( B0 R4 J  |2 g  p
  293.       {- S" f- _8 Q( b
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 v  b  q* q& n; S3 O- f- L" G
  295.         {
    9 j; h0 Q; L8 w+ A  ~* f
  296.           file=(*p).second;
    : }9 n; T, Y9 ^( b1 F, |
  297.           free(file);
    7 v  p9 U1 E5 n2 C, M
  298.         }) z2 _  Q# Z4 @2 P5 h0 J
  299.         UpdateFile3.clear();9 g- L1 d8 g9 p5 l4 j6 ]# p
  300.         UpdateList3.clear();
    ; g: j+ d9 p8 J: ?+ `3 H
  301.       }
    : Z! c9 b( D* P: n3 U- O, i6 A; g, d
  302.       if(UpdateFile2.size())
    & l0 x, h+ m5 A4 Q  J0 Y/ N
  303.       {: n4 g8 O+ @/ K4 Y& T; p  Y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 F# C' P/ |$ f: S6 x; }3 ]6 O
  305.         {$ @3 H5 f* W% y5 a& c9 b1 p5 Z4 V
  306.           file=(*p).second;
    $ S" i' U7 R" w0 X
  307.           free(file);
    ( i% R% _" {& D' I7 S
  308.         }5 C4 _0 M7 v) l5 ^
  309.         UpdateFile2.clear();/ q* C1 {, y8 M8 D4 Z6 B0 Y2 q
  310.         UpdateList2.clear();
    7 O+ N) @! g: Z2 [6 o2 U, e* ?
  311.       }; P: u, X5 D; d
  312.       if(UpdateFile1.size())& p. I7 P* g3 p4 y
  313.       {
    : ?7 E" Q5 v9 ~2 R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 Q. l; X. H7 M1 i
  315.         {
    0 k9 x. ~. a- B- d7 Q4 F
  316.           file=(*p).second;4 e* ?. r1 H7 R
  317.           free(file);% t. d4 K  o" K$ x# \- F
  318.         }
    - ~& K, U. J. n( U! J, p2 y
  319.         UpdateFile1.clear();8 D8 F/ w3 W) i) b# W+ i
  320.         UpdateList1.clear();/ I6 i7 N& V" i6 D
  321.       }. Z; G2 ]5 U3 X! O; d9 x3 N
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));% h1 e5 o- q/ _: y1 G0 k
  323.     }6 S. B) S& F$ ?+ u3 X; b
  324.   }
    7 y. R; a4 b& I
  325.   return FALSE;
    2 {  w8 k, D* @1 S6 W- W- Q: E
  326. }: Q3 K+ @* g/ X5 T8 ?

  327. 3 }* n+ b7 x; I
  328. void CRevAppApp::ClearAll(void)( N4 u$ V7 P( ~+ X8 e% O" M$ o
  329. {
    0 q% x1 e' ], W4 ]4 y  a
  330.   LPUPDATEFILE file;3 d5 C7 O- T: ^2 w: N9 `
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; n" K: z# D$ ]' O2 V; X

  332. ; q; s0 A  V# M5 z# t9 A* O
  333.   if(UpdateLocal.size())
    6 k$ h! ?: O, ~* Z' B3 }
  334.   {7 P' F* B( k( Q) V& w
  335.     UpdateLocal.clear();0 k% \0 [$ u8 u' L  h
  336.   }- A( }: u" A. }0 @, V3 k# s1 n# p
  337.   if(UpdateFile3.size())9 g4 _5 l& I6 g: [  z( n
  338.   {9 B" I0 q1 @9 M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 C* f& h# N4 d1 O0 d' p/ G
  340.     {" ^6 o: \. @  @, t4 o1 E& y* |) d0 e
  341.       file=(*p).second;" b8 A% w3 \& q0 M
  342.       free(file);, S3 d$ Y1 w4 e& F; u. o4 K0 q
  343.     }
    ! Z/ f3 O; B0 W. L$ b
  344.     UpdateFile3.clear();
    ' D2 I0 P- n# s0 f( H
  345.     UpdateList3.clear();
    " i$ Z# l7 w5 @) e
  346.   }# H# P! J/ y4 y' G8 ~
  347.   if(UpdateFile2.size())  @4 d- O; Y$ G( U2 S( I
  348.   {
    1 Z0 |3 C! N$ U4 G% k, y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # p4 D0 X% V) r2 b5 ~# Z
  350.     {. r9 t$ d0 s2 [0 [
  351.       file=(*p).second;4 H3 u. R! F. [
  352.       free(file);- f) ]8 b4 g! P/ w0 D) H
  353.     }
    4 p/ L! F# }' X& k, L5 j) _
  354.     UpdateFile2.clear();
    6 a7 Y/ J- c% m# x' h
  355.     UpdateList2.clear();
    4 r2 _/ O6 p7 X$ b1 Z9 ]
  356.   }
    : T. }9 Y! `1 B  W' e
  357.   if(UpdateFile1.size())
    1 Q& S3 W8 X3 w9 ?: A; K4 W  N
  358.   {
    + ^! }# A" a( Y8 e( Z. W( g
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  |0 I' d$ E: `
  360.     {% V5 R1 a5 \+ |
  361.       file=(*p).second;  i4 H  ?! n' b. H5 e9 M5 h
  362.       free(file);! a! K1 w- O! u
  363.     }$ N: {" o, ~8 J* a
  364.     UpdateFile1.clear();
    3 b5 ~6 ~/ C: C4 E9 ^. E
  365.     UpdateList1.clear();
    ) w$ h/ o# _) G
  366.   }1 e3 I8 Z9 O/ u' r: R3 S
  367. }  
    ! K$ @' W$ ?! h4 x) N5 I
  368.   $ L& B" Z1 i) a1 q% i; o
  369. BOOL CRevAppApp::CheckLocalVersion(void)! f6 B# T. r) c$ b
  370. {
    & y$ m: b# ]' F# T* f3 s1 ^
  371.   int c;$ X) ^3 C  [: `5 G
  372.   LPUPDATEFILE file1,file2;
    ; t+ m0 U) H% {$ S8 _
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + r6 h8 B& s' ]$ y6 `* O4 p
  374.   std::list<CString>::iterator l;5 X( K1 C" S- M3 Z5 C. t
  375. ! ]8 f( C# m! [+ n
  376.   UpdateLocal.clear();4 l, L/ Y+ M3 m1 [6 U% M9 f
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);9 n7 ?6 {2 O* e6 @, i
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ( z' S# }. F7 f- G! B
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) X/ D! I) O+ \
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' H! m  H* K2 m+ z' Y
  381.   if(UpdateFile3.size()), L+ `8 \% T, |* T0 u
  382.   {
    ' T$ _. b$ Y. T# l, u& X- Y4 s
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    7 L. T$ W1 y4 O+ v$ E+ F
  384.     {
    ( {; V3 D; `+ D/ c! _9 F; n
  385.       file2=(LPUPDATEFILE)(*i).second;9 s  B8 X% g, L& [' t( m6 X4 V
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 b' R/ N0 V8 _) x4 |
  387.       {
    6 J. K* B0 D7 D1 [4 P
  388.         file1=(LPUPDATEFILE)(*p).second;! V" o3 t7 l4 E7 S/ ]; v% H
  389.         file1->vers=file2->vers;/ l) p: f/ q; u: ]8 b
  390.       }
    1 r0 y6 C8 D2 `$ Y
  391.       else+ [+ d; o* ?5 k( A3 [( K( G  C
  392.       {9 x: p8 F4 E, k; j7 B) K
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" T4 Y) `4 z) U$ Q% v
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' m6 y- t, A; P1 Z. h3 y9 W. G
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));# y) a. T% M2 a
  396.       }
    ! v5 }7 v/ [1 o: x. z# }: |
  397.     }
    / E. z8 u) K- b- [8 Q
  398.   }
    " M* o! q2 z- {0 b, g& c" x
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 m* @* ?' ~! c4 ?7 P
  400.   {
    * H: g5 y2 P+ x- X
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()). y6 j+ \3 t0 T, S/ _
  402.     {9 R+ o* V6 L4 _8 E
  403.       file2=(LPUPDATEFILE)(*i).second;  S* o% M. l- }
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())- S9 `6 C. r* X' V
  405.       {, e& V' `* e$ m5 M" S
  406.         file1=(LPUPDATEFILE)(*p).second;, u% G9 `( ?: |! s/ J2 ^
  407.         if(file1->vers!=file2->vers)1 X  g; h. j3 M* c. e0 N" O% ?2 d
  408.         {
    & I# y# D! b3 F1 t* l6 B
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) x8 d& Y$ f/ z5 \. q
  410.           c++;
    3 Y2 s, W' ~; M, e- Q3 e% J  J* t
  411.         }3 [4 q2 {3 [6 y5 x) r
  412.       }
    * u! A( b9 C4 V
  413.       else
    . C( u1 e3 q- [+ q% k: r1 ~* S% t
  414.       {
    " H. L6 S3 Z& v7 V
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * y) G. I- M# g, ?5 w9 E
  416.         c++;
    . ^1 c( Y, U! h0 h2 @: Q9 ~
  417.       }
    ' f* P; X  g& K, O; l; v1 y. O6 ^
  418.     }
    & t* A# q/ u# q$ S
  419.   }* H) b6 a) L  p4 U* G4 k
  420.   unlink(".\\DownLoad\\update.txt");
    ! Q+ [- `- Q' p  r
  421.   if(UpdateLocal.size()) return TRUE;
    2 n' [9 A; F1 }) }
  422.   else                   return FALSE;" ?$ f5 S6 q8 t/ [
  423. }1 B2 ^% F2 i2 j

  424.   T4 M) C3 S! q! R8 t0 e: D
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    % @0 O, B/ {5 G
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn". a( y5 X+ y: l# n' m4 u

  427. $ X% d  Z* c1 r# K7 K# ^

  428. 2 ~" _1 T" k! N6 A# `+ z
  429. ; U9 S% W! p2 J- A9 R
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    1 y3 [$ w9 y, ]! a$ h
  431. {
    . w" S* \# x, i
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;; Y& I. w5 f! J" x/ B' q8 @
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): S" t9 Z& B+ _
  434.   {
    - D2 w4 t3 W) H- v" ~* ]
  435.     char szLanguage[50];
    4 u/ V" L) K3 ^; j& W
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ a; ~# y# W/ w; N5 m
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 l3 g6 K0 C8 B: T
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    : r2 ~& O, a" g' S! O' X; e
  439.     else                                   m_iLanguage=ENGLISH;
    / _2 L+ G- j; h7 ?' O
  440.     char szRegister[100];
    1 l9 a" K1 Y! i
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ q& f# P8 _, Y) O  \" w
  442.     strRegsName=szRegister;! ]9 \, W* l+ e4 j2 j
  443.     char szPatchURL[100];
    # @$ Z' p% Y/ m4 p
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + Q1 M1 L* m- j" n
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & }5 O( S- g7 C& f
  446.   }
    1 K" v+ |) P& B3 n; w; g& E% y  g$ h
  447.   else
    3 v6 C8 ~; J1 U+ Y
  448.   {% c* V( P1 {7 @: Z
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & i" m4 P2 M5 c' I
  450.     strRegsName=DEFAULT_REG_URL;
    : j* f3 D7 ?! S* O( \9 C
  451.   }; V- t$ p; w( I8 L
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    - n- q; J! i2 Z& g, l
  453.   {- M) Y5 \3 ^# q7 V* n1 y( @3 a. Z  V
  454.     char szIP[50];5 W. L6 J( Z5 m  h% D
  455.     char szDIR[300];4 i% F" J0 s0 d% i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % ?4 Q. [; F4 o! c. k6 g0 ^
  457.     {5 q" T: I. V7 U: H
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");1 b' ]+ ^' r) O9 s
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");2 ?1 x& r  }6 N. _
  460.       strHostName=szIP;( p( W: F- ^# V0 L
  461.       strHostPath.Format("/%s",szDIR);' p$ A7 [! N! N& `# ]
  462.     }+ N' p5 W  E. m8 v% [
  463.     else
    # \2 ?, r' f* B" l/ x
  464.     {6 v; X& Q3 h1 q+ e+ U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) L1 l9 ^* K1 a0 {2 Z/ G0 W
  466.       {9 f% y5 ^! \4 u( T2 Z
  467.         char szLanguage[50];
    0 c, ?& v2 ~' {1 ]! i
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 a" p3 r( E* [/ I0 X0 a- K3 H
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 v  @( [- r+ U6 b+ y+ V' e1 W
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* r: N0 `+ |8 n/ e* J) B
  471.         else                                   m_iLanguage=ENGLISH;
    3 b$ z0 H8 M9 e) V8 \% A, j
  472.         char szRegister[100];
    $ M1 ^/ Z, i' a/ h
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 H6 x: F, m9 @3 E
  474.         strRegsName=szRegister;6 p# |2 ~* m* }: f9 D4 N7 l
  475.         char szPatchURL[100];
    / ?% x6 }4 C" U8 D
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 Q2 r- G4 E. ~2 s- y
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  w5 ]% W' z7 f3 x8 }" T
  478.       }" @" k9 p9 ^8 v, c- v; @. \
  479.       else6 Z( K" B7 }& L, S
  480.       {
    & Q; W) w2 [4 b4 _$ I1 l9 r
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 {. A- j3 q6 v0 Z! v6 z3 [4 h% _
  482.         strRegsName=DEFAULT_REG_URL;
    # p9 z! ?3 {+ d4 G+ y1 }
  483.       }& Y* B7 Q1 G, n. G* h) R
  484.     }
    5 M9 z  u5 G2 b3 w7 n: q( ]! L
  485.   }" T$ l# s2 }8 ~) E
  486.   return true;% J; {/ y+ C1 ^+ P2 O! U
  487. }
    ; g6 d" G1 E# K- Q" h: X

  488. 8 }/ E2 h+ r4 @3 n  S: O
  489. #include ".\ZLib\unzip.h"
    / w" Q* ?' X$ q
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    # ~$ H3 P" q7 p% G! t1 w8 m# |0 j
  491. /////////////////////////////////////////////////////////////////////////////
    3 u+ ]& S  X, y7 b( f/ X
  492. // CRevAppApp initialization
    7 r8 p9 X( h0 V% @& y: ^& b4 K
  493. 2 C, k! X7 E$ v$ E' z  V. ^
  494. BOOL CRevAppApp::InitInstance()5 I2 d- d8 |/ j' P/ J4 q/ M
  495. {; [" G% q4 c3 }5 {1 L+ Y+ `+ m# E
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    7 C/ G& U& N- {: N, k& i
  497. 4 J4 K2 t# t' Y$ E; v
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / w1 V2 [+ }+ i* U" [% {$ H3 J
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))/ H( _5 n3 E7 e
  500.   {
    / F: W4 u, {3 r
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    $ f! H* \9 Y* R! u9 w# l
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& R, {0 R+ {6 q; n0 t" c  E
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    1 s: B* {+ D2 W1 j: d$ |
  504.     {
    * x* h5 \7 s3 g3 C
  505.       strcpy(szPath,szPathTarget);
    ; e# i; P! G6 W
  506.       SetCurrentDirectory(szPath);5 U3 Z( v* J( H: O: w; z
  507.     }
    ; w, d; a% ?) M4 Q" A" ?
  508.   }! s5 J# v/ B9 C9 W3 g4 A
  509. #ifdef _DEBUG
    $ `" M; |8 ]6 p( I8 p4 ?( y3 u
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % C/ j) R. z5 s, b
  511. #else
    ' T0 P* T" H, p# M
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + Q: A8 ?5 C8 I: B) T9 @- z
  513. #endif& R0 `8 H! ^9 K) D3 N/ W3 E3 X
  514.   {
      X6 x% T) o( \
  515.     char tempFileName[MAX_PATH];$ I& L' c% s( x" M. p
  516.     strcpy(tempFileName,szPathSource);
    2 G" J1 P5 s4 H% n
  517.     tempFileName[strlen(szPathSource)-12]=0;
    # p9 s9 }2 ^0 k/ S
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    6 b6 I- ~3 i* ^5 u( ?- w
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    7 x2 ]8 a4 @# s% M6 U% ~
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    % q3 ]/ e) U- H2 K# ]  _$ U0 F
  521.     return TRUE;
    " j; Y; G3 R: r; Y
  522.   }  g" P9 |) s' Q5 n
  523.   // Nuke 0118: Delete run.exe
    & N6 H( u, u4 C9 L+ _
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    $ {: K3 B# J. Z  W) f0 ^0 A5 ^. o
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    1 S3 Q' ]) q1 ^9 y
  526.   if(!ReadCfgFile("Config.ini")); v2 d' @6 D  A( X& b, p; y# w7 I
  527.   {% k' I* b3 _3 O$ o
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    , F( T6 o$ u* Y. j5 ^2 l: k
  529.     return TRUE;: `7 q7 ?# ]0 M3 [
  530.   }( a7 W$ S  C. q' h
  531.   HANDLE mutex;
    # V. Y4 g- G% s; Q" |+ ^% q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    8 s* [5 s7 E! Y" |( z1 a5 c7 \9 Y
  533.   {
    ; M& h7 E3 d: Z" E5 v/ x8 [8 u
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)9 u  g; ]! C- `, ~8 J6 l/ x
  535.     {7 N7 _5 h# r6 u$ Q) X
  536.       CloseHandle(mutex);8 N- [4 T+ ~0 Q5 t- A
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    2 \& I: n2 A1 p* F7 {, R
  538.       return TRUE;' _5 M' |/ M5 b- k$ L5 N. _; ]
  539.     }: y) `5 Q& J; P* f4 a; C' `
  540.   }  
    $ _6 g! v6 Q$ O9 d9 v  N1 F$ c
  541.   CloseHandle(mutex);! Q) E( [/ S+ k# Y

  542. % m- {4 F5 P/ _1 U* C, y0 Z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ) U9 S9 p  r9 Q# Y
  544. ! S+ o! i0 J: Q7 G9 y4 B+ z
  545.         AfxEnableControlContainer();
    ( ~( ?: N" R4 r. z8 M

  546. % M4 b* L* ]+ N1 Z% r7 U
  547.   bCanUpdate=FALSE;! i1 e* W2 M' D
  548.   dwStartUpSteps=1;( Y1 w  ]4 g' \6 L- D& z
  549.   dwProgramState=AP_NOTHING;; w0 K5 n* `3 X0 D# I
  550. 0 ^5 |8 Z) \; ?) H
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    . D$ \; Z: q% \3 k
  552. ! Z0 U1 `4 [8 R5 k% ^
  553.         // Standard initialization* G6 Q8 b8 |& t3 I
  554.         // If you are not using these features and wish to reduce the size3 ?4 j4 c$ i/ h# P
  555.         //  of your final executable, you should remove from the following
    & X/ X& Q4 i, \  M' z% h- V
  556.         //  the specific initialization routines you do not need.
    # x1 @8 X: v. @# A. J. r

  557. ; T+ o0 K/ P' I& x& n$ [2 J5 C
  558. #ifdef _AFXDLL) v! g6 E, J, {
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    # e5 z7 x, N1 x
  560. #else
    # V# R7 v/ Q' w# d
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically5 F" P6 ?4 Q; _4 S7 Y+ P* V1 @
  562. #endif
    6 `" _) F7 h7 j. \

  563. % U5 T. W" v, q9 T5 E
  564.   dlg=new CRevAppDlg;
    & r3 x0 T* Z9 E+ |8 T, L
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 w- e+ J- i! n3 p( O: ^9 s! R* m" G: m
  566.   dlg->ShowWindow(SW_SHOWNORMAL);7 G8 a+ }8 X9 J, }) z5 j4 j
  567.   m_pMainWnd=dlg;
    ' e2 n+ p' d+ L  Q, Y
  568. 5 _- v, ^! K/ J8 G' _
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);$ s+ K! _6 g4 _. {
  570. ( V* e; Q: _4 q; T5 d3 R
  571. //  GdiplusStartupInput gdiplusStartupInput;
    0 j4 q' ^, Z% q7 S) m) u
  572. //  ULONG_PTR gdiplusToken;2 Y3 {: L% b. T8 P! ~) B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);* P# f; |# U" h: z

  574. ' j% O9 T5 `' [( h' f4 u, @0 d/ x
  575. //        CRevAppDlg dlg;
    % M2 L* G0 n7 `* c0 h& w+ i$ Y
  576. //        int nResponse = dlg.DoModal();
    3 ~5 c8 E9 j+ f2 L
  577. //        if (nResponse == IDOK)" i! p# J. O! B9 L% p6 v) i
  578. //        {
    9 L' ~* H2 p1 k: M# k/ M! z
  579. //                // TODO: Place code here to handle when the dialog is1 `2 n5 x& |1 d& z) u
  580. //                //  dismissed with OK3 _6 D+ A' ^8 Y& {5 ~$ A% C
  581. //        }! L  k- m5 S- E
  582. //        else if (nResponse == IDCANCEL)
    % B  |9 ?: {2 _& o1 f' J
  583. //        {" @: b! H8 V+ U% x) O5 f
  584. //                // TODO: Place code here to handle when the dialog is/ b# A, e+ N3 U
  585. //                //  dismissed with Cancel5 T8 o4 T: R; P; L  x% {3 R( ]
  586. //        }% F; p: g7 @2 i  F
  587. $ u9 y9 |9 x, G; R& i) e
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    7 b$ h- h: ]! U! K- K+ S5 j& j
  589.         //  application, rather than start the application's message pump.
    4 s9 O$ M+ ~1 z! f) [) j
  590.         return TRUE;
    + A/ g; P5 E: N1 C4 y8 P
  591. }
    3 h8 d* m4 U5 A3 \. p  i0 y2 O
  592. 2 R9 x$ ^: I: [0 w$ p/ r
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    4 T* |0 _$ n8 n" T: O: C3 f8 ^- s
  594. {
    7 |, F- z9 \% [' I$ J2 F2 u$ \
  595.   int i;
    " S" O4 f0 R2 v& f* U! \
  596.   char *szRet;( e7 V! y% z! P' |' a' L
  597. - r$ r: |  y& m- Q( ?
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ; O9 r- u( L1 o, |% |
  599.   if(sztoken)! `6 X2 e8 F, G, T- d1 _4 Y
  600.   {* B) Q' c4 u3 }
  601.     szRet=&sztoken[itoken];& u/ K- h  Y4 ]. ~4 F0 B- H4 }
  602.     while(sztoken[itoken])
    - J  B( L+ o  W* [  v
  603.     {
    2 e) H8 ]. d5 g
  604.       for(i=0;i<(int)strlen(token);i++)$ V0 A+ E$ n. w) m8 M
  605.       {
    * U2 O5 e( P! w4 a7 l
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    * b! J' T/ l( m
  607.         {' f0 A( F/ f8 B1 Z1 u! V/ ^
  608.           sztoken[itoken++]=0;
    8 A9 T( ^( d$ m! a
  609.           sztoken[itoken++]=0;1 C& }& _5 m6 \8 r' I, D* V
  610.           return szRet;
    6 g$ `9 M$ T0 B/ G/ S- p' s
  611.         }2 p& @- Q0 I8 e0 D8 {8 r# T
  612.       }' ?8 k, H7 e* N
  613.       itoken++;
    9 i; _9 X) R: U
  614.     }* U( z6 D; W4 b
  615.   }
    ; o1 M7 P; b& j* t, N  r
  616.   return NULL;8 z0 x5 ?, R/ q  ?/ |0 j1 a; X
  617. }: r# Y. R: d6 W/ l
  618. 6 x9 t' {" D! e% A
  619. void ProcessProc(long Total,long Current)0 U  h+ w6 E& s, n6 Y
  620. {
    * S- a4 W. i" [1 r+ N" u9 N, [. {
  621.         MSG msg;" k+ H5 M) ]) {2 q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    6 ~( c5 f- @0 O, [, U
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));, p0 Z: S" _7 q7 U/ t% @# Z* a/ x
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ' q' p  f4 U; j2 ^; _# ~/ T
  625.         {
      L7 ~1 I) [# q/ f  k+ l3 p- t
  626.                 if(!GetMessage(&msg,NULL,0,0))
    8 N  D; z% ^- M( u
  627.                 {
    ( m( V2 [: x% a0 D
  628.                         return;
      B# T5 F% W4 S% z) ?& K
  629.                 }
    2 Z; h! S4 o* M/ D
  630.                 TranslateMessage(&msg);+ p8 Q  o4 z4 d7 m
  631.                 DispatchMessage(&msg);
    1 }( ?5 P( D7 V% Z
  632.         }       
    0 ~! a3 I) K! E( a% _7 }
  633. }3 O' i, c+ @6 q9 P1 V! b' C
  634. 3 R( P: f9 @( M- q- F
  635. BOOL bFirstChar=TRUE;
    ! E& |2 `! E& p. n: k( O: z
  636. % R7 @: |' |, X. P8 V: S* S1 C& G
  637. BOOL CRevAppApp::OnIdle(LONG lCount)1 W3 t$ O5 B. p) V3 L, Z9 e
  638. {. y% m  [; }. f: A
  639.         // TODO: Add your specialized code here and/or call the base class( b( a3 R$ i3 O2 D
  640.   switch(dwProgramState)
    . d& W, V6 I3 `8 b) G
  641.   {6 J* D, f$ {2 D/ A3 _  \" A9 e
  642.   case AP_NOTHING:, f! i. W7 y1 \
  643.     switch(dwStartUpSteps)- V1 o1 y# ~$ ^( o+ G  L2 M& T
  644.     {. l! ?3 ^' L4 E8 g
  645.     case 1:
    ( P+ |% f5 N8 W/ U8 i5 U
  646.       {
    3 p' _; c) P$ l; L- f- b
  647.         int i;
    4 L& j$ \" r( y( q/ F
  648.         CDC *pCDC=dlg->GetDC();. q# Z+ e( a% d5 `* H( j
  649.         HDC hdcwnd=pCDC->m_hDC;/ B1 m+ `) N0 a! n5 n; Z( S1 M9 S
  650. //        Graphics graphics(hdcwnd);* n: ?; k$ u6 z+ S) W; v4 _4 j. u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");0 _" m/ v# E. n2 e  h8 [
  652. //        INT iWidth=bitmap.GetWidth();
    9 q4 Z2 V; @) d0 R3 f
  653. //        INT iHeight=bitmap.GetHeight();
    ! V3 F$ t: d9 B9 m
  654. //        Color color,colorTemp;
    ; V+ H5 k/ `" z; }2 D
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& f/ H3 B2 C# S# G" k0 z, h0 E
  656. //        {
    3 B. I2 C' w8 q! V: o, G
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)9 S' r, A  I/ ?& v% F1 K- A$ A4 W
  658. //          {
    / k2 Z: {! [! C
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 x' K. q0 w# E/ G8 ]4 N: o, S, b
  660. //            colorTemp.SetValue(color.MakeARGB(. J& O. i- G2 r8 ]6 u. W' Z3 j7 A: `
  661. //              (BYTE)(255*iColumn/iWidth),- m  _( \- f" ^6 G6 G
  662. //              color.GetRed(),& x( h- @* D: r- b) n7 j# `
  663. //              color.GetGreen(),: [' U. V7 @8 m; q9 h' i
  664. //              color.GetBlue()));9 N4 o$ S) l* S7 w3 `+ N" G+ F& k" K
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    " @! c# g2 T: T- c: ]! I# Y
  666. //          }  {& Y/ f0 R1 s6 U. a
  667. //        }
      \$ _. d; j2 y7 ^7 T8 X
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ( f* @# S' H3 a+ P9 B
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 T5 e$ `$ b: G: {! J* B3 K
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ) K, f: q5 n% c
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 j* x: F( @& |1 }9 ]
  672.         for(i=0;i<240;i+=8)% A$ Z* `2 y" Q- ?# U: |
  673.         {
    ( [8 Q; X- a% L1 B! F
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & N1 o5 ~$ M$ I6 }7 d$ e
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 O) ?2 p8 I5 M# D; k' ]
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& W- d: d9 Z8 W. e& S9 D4 A
  677.           Sleep(33);. O# l/ ^( [; N2 d4 ~. W
  678.         }
    & Z" l# i9 x: f+ _( {$ {5 Y
  679.         Sleep(1000);
    . m1 n( _5 Z; Q9 X
  680.         for(i=240;i>0;i-=8)7 C( U2 z9 p8 \  ]5 E" r0 r6 ?
  681.         {
    % Z3 e  A/ Y: E! d- X
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ( T. U4 y- _( A/ y
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 L# u/ z1 Y. Q, P0 S! v5 T$ C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) y# Q- o- D! h7 T' l  b0 W
  685.           Sleep(33);
    : v# G5 n# k- E
  686.         }$ r0 t4 p% Z: m' H5 K
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);1 d1 w$ E. }0 s- ~$ w- Y
  688.         dlg->ReleaseDC(pCDC);
    * x) F( ~/ T  i3 F0 w
  689.         DeleteDC(hdctar);) S. I" P/ n1 W  H
  690.         DeleteDC(hdcsrc);+ ^% y( m7 M+ g
  691.         DeleteDC(hdcorg);
    ' y. e6 x; j2 @5 c
  692.       }4 b. B4 I: V' l- i
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);9 {6 f( c% g( [6 a3 h3 I
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    4 m; w4 D2 F4 m$ x  t0 @+ u9 Z# v
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    0 r$ o& ]' s; r  C+ W: \
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    3 ^3 [7 c# |. `6 p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* N' q$ Z0 b0 l/ ]. k
  698.       if(!Dn.Connected())
    - T# l+ u8 E/ h0 i) y4 t0 ^
  699.       {
    & n$ C8 @& s, @5 p1 I7 J% ?- y
  700.         dwTotalFiles=1;# _0 a+ k" s) ~. I5 _1 x
  701.         dwDownLoaded=0;
    2 w/ i  N' u+ l4 s- h
  702.         bSilentStep=TRUE;4 S" Z6 ^; s! s
  703.         bCompressed=FALSE;5 X2 q* w$ S( {4 _7 }. J
  704.         strExtLocal.Empty();0 G9 A1 S, [* \8 z" L
  705.         strFullName="readme.txt";" \% s" W# Y3 b, ~
  706.         dwProgramState=AP_CONNECT;
    1 }" @- d* C8 w3 J+ n1 v) |% |
  707.       }% M, t. `8 i6 b- j
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();. R! s0 ~0 b7 d, X, [8 B2 ]: |2 [1 g
  709.       dwStartUpSteps=2;+ E, i2 {9 u$ E4 i
  710.       break;
    / q* x$ t$ ?2 z8 l7 K5 i; y: F: A
  711.     case 2:7 H. Q. @& u! B/ e1 m
  712.       {
    8 k! {5 }% ?: R: p
  713.         int iEOF;
    9 |7 l" w- @$ }* A) `2 V( w
  714.         FILE *fp;" R" j5 B9 w+ V1 C( _5 }
  715.         char szString[512];; R1 g) J* F' I/ t1 ]
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    0 J. |" b( ]8 n8 z1 P
  717.         if(fp). n* Q& a  e* Q
  718.         {7 ^: F) R$ Q* _' W: J* R' w
  719.           do
    5 d0 {/ J4 g  d! u
  720.           {+ Y$ E4 S3 h5 ]7 Q& U, ^$ y
  721.             iEOF=fscanf(fp,"%s",szString);' S( F; c; j9 P1 u( ?: n6 [
  722.             if(strlen(szString))) o" b" `5 ]' J( u7 o( \/ i" C6 |' c
  723.             {* N8 h# h5 ]" A; j
  724.               if(bFirstChar)
    3 Q* s7 q' z+ c5 |: c0 |
  725.               {
    % y8 Z* f0 y# i% F  v0 f  R
  726.                 bFirstChar=FALSE;: l5 n/ W; {0 y8 ?
  727.                 bConnectIsBig5=FALSE;
    : @4 F& ]7 f/ Q! k( k; F
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;6 T! r# z' I7 |8 k$ [$ c
  729.               }! b6 t/ i9 u( F2 m' Y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));+ W' C2 t( o3 t1 ~4 S* j
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    2 |% v' ]  @3 |2 K
  732.               dlg->m_ListText.AddString(szString);/ v8 S! J5 B& c  v6 s
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' y0 U5 t% r7 {1 L
  734.               *szString=0;
    ( A; q" f# _$ ]0 h
  735.             }
    - j) G, G$ ?$ V# ^+ `! a# x
  736.           } while(iEOF!=EOF);( u9 Q0 M: `3 e; d: @
  737.           fclose(fp);) n  G5 m; t+ c3 x1 M; Z4 ]
  738.           unlink(".\\DownLoad\\readme.txt");! L( a& M% A# [2 }; _. T
  739.           dwStartUpSteps=3;4 h0 z, `) ~1 e: _! k/ v$ X
  740.         }$ }5 r& ^. f! m6 e# \1 \
  741.       }
    / V  V  X3 j- k: u/ w  M  a  J
  742.       break;! D6 |$ r4 i7 s2 w$ U6 D! Y
  743.     case 3:
    " ]: B% z3 Z: S% o6 R
  744.       if(!Dn.Connected())
    * x$ `8 M7 ^4 w" [8 v% o$ y
  745.       {
    3 L5 z9 s7 P( I+ Z4 `
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);. r' E8 t5 c; I$ z8 {0 r
  747.         dwTotalFiles=1;
    - P! G% ^4 S0 M# T! a, f3 O! p
  748.         dwDownLoaded=0;: E" H# q% @  J* d. ^! z# A
  749.         bSilentStep=TRUE;5 X# b/ M) h* @# {7 U! z# |
  750.         bCompressed=FALSE;
    5 v" V9 |: ?& ]5 \. d7 C1 a# Q
  751.         strExtLocal.Empty();: g$ l' q6 e6 h& B! l; k" X% x
  752.         strFullName="checkversion.txt";; D* H% m% |7 B; z
  753.         dwProgramState=AP_CONNECT;
    / r$ x$ q+ h1 I0 T3 ?5 k
  754.       }
    ) @" G$ {$ D4 B" Q6 ~# O3 ~
  755.       dwStartUpSteps=4;
    $ f8 j" s) M, [( i8 l; Q& d
  756.       break;9 F5 t9 y; c9 d+ h
  757.     case 4:% I) x* \2 K' r& L
  758.       {
    3 s0 |7 P& C; t: o2 {( `( x
  759.         FILE *fp;
    / P' e1 P' S8 H; V& e: y
  760.         char szString1[128];  |( {4 l# [/ @5 v
  761.         char szString2[128];
    6 Y( G% f5 Q9 ]9 Y5 E7 _6 U
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , R5 C' _! c( D+ b, C$ ?! _/ D( Z
  763.         if(fp)
    9 V& C# r& Z6 F5 V* N3 e
  764.         {
    6 H" d) H; B  W; x  m8 u
  765.           fscanf(fp,"%s",szString1);
    : V- E( p1 T5 [5 l. j; v6 ^* w& T3 j
  766.           fclose(fp);1 w' q7 w5 m7 @+ O3 h
  767.           fCheckVersion=atof(szString1);
    ; P% N' b# s  p0 ?/ h
  768.           fp=fopen(".\\checkversion.dat","r");% n  l, q9 c( m5 y7 g+ @( g8 k9 r
  769.           if(fp)/ x. g8 K: a# i6 B9 e' @
  770.           {% Z' ^; v* A9 R* T2 r. j
  771.             fscanf(fp,"%s",szString2);
    & f; I  A6 F+ H( D& v/ |
  772.             fclose(fp);) ~' D. K" h% r$ `1 H- K
  773.             if(atof(szString1)!=atof(szString2))% X* |8 b: J' i: B. Z  B! X
  774.             {. S- g7 g- M) |: }" `; ]
  775.               if(!Dn.Connected())
    * i+ n  A$ H* M" B3 j
  776.               {
    6 ~9 c: e$ ?# ?0 Y  |* G* f+ r& \
  777.                 bFirstUpdate=TRUE;( @: j( j8 t3 q+ L0 K- w( q$ g
  778.                 dwTotalFiles=1;5 ^8 h+ I* C# h5 E+ m7 |( G
  779.                 dwDownLoaded=0;, e6 X5 q4 c' F5 w  O
  780.                 bSilentStep=FALSE;+ T/ _" a* }/ v/ j: C  X) @
  781.                 bCompressed=TRUE;8 f9 R& y/ K& n4 ^- x9 f- g* y2 E
  782.                 strExtLocal=".\\DownLoad\";
    3 J1 e  R8 z. Y: s) D  s% I
  783.                 strFullName="update.txt";
    5 ^" E8 j1 M) n+ H5 U
  784.                 dwProgramState=AP_CONNECT;& ?5 E: H3 W8 K* ?/ D& B% z% ]
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 e! E" Z; ]9 D! Q' A! Z; r
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% q3 R$ G2 Z* ~( F8 v
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! h& B1 @, z+ }8 \7 k+ U

  788. 4 ]) ]8 U4 y( w
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ K4 {9 `" H8 J1 L: i; I7 Q) W
  790.                 unlink(".\\DownLoad\\checkversion.txt");9 V2 \5 w# V. ~( O
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)3 P+ N( V- X# h- E( t6 R5 \
  792.                 {  V% Y& V& O! M" S1 h6 B4 s) \5 b
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");1 f2 c7 x% e3 {
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");  ~! R" J; o+ _: m
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    5 {2 I4 f9 H  E+ F( ~) v5 ^
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) t& W! w# @+ t8 |3 g7 e; u
  797. $ w2 ?* W. D0 `$ p
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% H$ D4 V+ B+ k, e5 `5 X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- W& r: {! a4 ~; ?
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    1 I' G2 y/ W- L; `
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% v* d/ S; I+ Z- B) h0 Z! ^8 K
  802.                 }
    - |  \! E- W5 k5 P/ O
  803.                 dwStartUpSteps=5;
    ) I5 z( T8 o! \2 D' p% Z: \
  804.               }. T1 k, P2 }: W! I
  805.             }
    & r5 T8 A$ A  o6 e3 d. X. a0 ]
  806.             else3 j# f8 T. L8 ^( ?% ?
  807.             {3 \2 e, p. y# Q* r; e8 C
  808.               unlink(".\\DownLoad\\checkversion.txt");
    " `" a& o4 }* x. g
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 L8 H7 u$ G; ~. f" V
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ( z3 C; b, ~/ f) `/ C# B5 K
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");% i. G7 b( f8 D) j) N' S! ~
  812. * I+ Q& m! v) x9 T+ q8 ]
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * p0 q3 E8 I' T/ m' n
  814.               dwStartUpSteps=99;' H! v: n. W% c' l) q4 Q; m6 ^
  815.               bFinishUpdated=TRUE;
    ) o, L, X5 X2 K$ c  f9 C( @1 a
  816.               bCanUpdate=TRUE;6 O; S5 N1 `9 Q
  817.             }% A6 q7 f" X9 v* q* ~
  818.           }
    5 a5 g5 m: L1 \/ @& r
  819.           else' U! ~$ s  J* e* D* u" q
  820.           {" N5 B; v. H' C5 o; p
  821.             if(!Dn.Connected())
    8 C4 y8 k+ ^( g
  822.             {
    , l/ h% f$ {9 f5 m! I
  823.               bFirstUpdate=TRUE;! N3 }5 X, h3 c# R  _9 b
  824.               dwTotalFiles=1;: g' `4 E2 b$ e; |- j2 H0 f
  825.               dwDownLoaded=0;7 ]+ t% |; I- D6 l# P# Y
  826.               bSilentStep=FALSE;- d" u$ l2 W0 }# h
  827.               bCompressed=TRUE;
    0 H$ M) ]5 X, V5 p- _2 \: e2 q
  828.               strExtLocal=".\\DownLoad\";3 g- Y! @  A0 u8 K7 a
  829.               strFullName="update.txt";
    ! G# `; P0 D* l1 Z0 \1 D% n# @
  830.               dwProgramState=AP_CONNECT;  l3 V" V2 c; o$ x: k- m/ Y# p8 A/ f
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % q! t, z2 ?# g
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; v: F. W7 x! h. S  L
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");* C! G& v8 B9 k- W
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 ^2 y& L" G* H, o$ Y
  835.               unlink(".\\DownLoad\\checkversion.txt");# U* m2 \! g; k# c
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- @+ T5 Q8 i0 b2 Z* |  ]. Q
  837.               {
    : j7 X* U8 c/ s+ L8 n% ]% w7 e" N0 q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");$ v2 ?$ }0 v; n/ ^' t
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");/ \& K  ?6 n- ]' y: n7 Q7 Z! n
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    $ @, J2 l. L9 E8 o# Q$ k
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 z6 \! b1 Y/ I4 z6 ]4 B4 ?- |0 }
  842.                
    ! A3 p/ E' E! }- V6 }& K3 Z, u& x8 z5 L8 _
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");0 a, M; C, t# {  b) }8 Y3 h6 X) c* c
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 _( m1 X3 [! r% s, x& f! v! G
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 l: x/ w5 K! u; X: p7 }
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' c" J+ a. X1 m- f3 F
  847.               }
    . v7 A8 Z+ b1 w  z
  848.               dwStartUpSteps=5;6 @( u/ E8 u! S& h. p) X# `- ~! _# @
  849.             }
    # z% f: `! x3 c2 |5 i- M7 E
  850.           }  b+ d) L9 b& `' o
  851.         }" o9 p) K. b- v% ^3 @! w
  852.         else
    ( r% B& ?8 ~3 _4 O! ]
  853.         {- ]% ?1 \6 \# c5 c" L# T
  854.           dwStartUpSteps=3;1 u0 }: {) _$ ]! v* T
  855.         }
    3 s; `9 Y% ?8 ^+ F
  856.       }
    5 p3 w6 M+ E6 w1 V. r# M1 {
  857.       break;
    7 }) q  T2 E) ]6 O  t) N2 h
  858.     case 5:
    3 x% J6 m/ R" a. Y
  859.       {) V$ ^7 _7 V- m/ t/ N# G8 k. [% {
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)8 ]6 K2 D: M4 k! D
  861.         {% ~0 |% [$ Q* x
  862.           int opt_overwrite=1;. J" R- i( Y( R- Z+ t. R' J5 O
  863.           int opt_do_extract_withoutpath=0;
    " I, y: P- K  t% D9 p+ Q
  864.           unzFile uf=NULL;3 @: ~3 {( t# {0 F2 f& [

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

6 G$ L& U& G% _: Z2 Z& f' Q

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_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
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部