CSUpdate.exe源代码

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

. P! Y6 \) k" Z) J" v2 ?
  1. / RevApp.cpp : Defines the class behaviors for the application.
    2 m" o4 W* x4 c0 u; b
  2. //- s4 [) X* M* [; c

  3. 0 R% p! T) [- j, K" D. w
  4. #include "stdafx.h"3 _1 J" H) h: [: B
  5. $ l: @  J6 x# W+ m
  6. //#define UNICODE0 U! E; J% U4 U* o9 u. e  H
  7. //#include <gdiplus.h>
    ! x5 h, }3 e) a0 H- l; J
  8. //using namespace Gdiplus;" L8 q  _2 E' M; u  [+ ^8 o4 W+ F

  9. ' _+ x8 N6 {* c: p/ ]
  10. #include "RevApp.h"
    * @$ Y1 _1 U- i3 h' P
  11. #include "RevAppDlg.h"/ _. J* i6 v8 Y$ s
  12. ! R" `0 {9 w$ _6 O# a; e0 I  i, v
  13. #pragma warning(disable:4786)
    - Q0 j: }7 R- q5 \' f5 r6 a+ I
  14. #include <map>' R3 t. T, {  T! L3 Y! Z
  15. #include <list>2 ]. u+ c- E4 ?4 L
  16. #include <direct.h>
    5 E3 N) b( R2 B  p2 ]& x* ?! G
  17. : O" C3 h/ M5 i6 i, g1 |- D
  18. #ifdef _DEBUG8 u( T! J$ ?7 e
  19. #define new DEBUG_NEW
      s( b1 B9 v; `; R  [
  20. #undef THIS_FILE9 b( \; S8 q7 G2 u
  21. static char THIS_FILE[] = __FILE__;
    ; S; w, N1 J$ @5 \
  22. #endif* T2 S; `, Y- J% ^
  23. #include "SkinResDef.h"
    8 y9 o$ D1 D  |
  24. #include "ChangeBG.h"0 w7 a8 G( l! w8 {
  25. #include "AFXINET.H"' t' m" K; b/ y! r% l( R

  26. 9 Y7 g$ z9 W* k  ~
  27. #define TRADITIONAL_CHINESE 0
    * i. _1 B" e1 o$ a. o
  28. #define SIMPLIFY_CHINESE 1
    & y: c6 a' ^! K/ m
  29. #define ENGLISH 2  B0 Y. S* l$ Q0 V) L+ J9 J0 i
  30. int m_iLanguage = ENGLISH;
    ( A. r5 _- Q8 I- x
  31. /////////////////////////////////////////////////////////////////////////////
    9 P3 b0 n7 A" M' ~4 Z2 U8 R
  32. // CRevAppApp) B1 t7 O  l. Q8 j2 b( T) `  t$ J" c
  33. * _3 M! c3 t3 ~# H9 ?
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)1 }4 h# i) `9 s/ n% u2 V" W* g4 N  ^; n
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    5 z2 e8 Q. A; L( \
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.0 C! S( M: A7 i; k
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!/ S1 ]9 b6 p6 }2 b3 S4 a' n- J& A
  38.         //}}AFX_MSG
    ' @+ F5 b  d% k& U. H! |8 D
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    5 B7 C' Z3 a( Z! X2 }
  40. END_MESSAGE_MAP()
    1 ^' j+ u( Y4 \; d9 T

  41. 1 f( ^. T! T$ V. y  L; t9 Q
  42. /////////////////////////////////////////////////////////////////////////////5 O4 p( M* b6 a5 \
  43. // CRevAppApp construction
    # q0 @4 S! b+ B( i5 z
  44. + |  I2 D0 d2 H" y+ g4 {
  45. CRevAppApp::CRevAppApp()
    & A9 H* }" t4 A. w( l
  46. {8 h5 x2 V5 o& T: Q
  47.         // TODO: add construction code here,
    7 x$ _: r; b, d" }$ V2 F3 _
  48.         // Place all significant initialization in InitInstance
    5 J6 {6 U7 T: C% z5 b) S
  49.   bDisplayIsBig5=FALSE;
    . n/ o2 d2 _1 B" {0 d) K% Z7 F
  50.   bRestartUpdater=FALSE;# U+ z) o1 ^1 _" s( C2 ]
  51.   bFinishUpdated=FALSE;, K8 p5 o* F6 v8 j8 s
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    3 g; ?" E' K$ Y! R  t
  53.   InitChangeDataBig52GBKS();
    3 Y+ h" z& Z* _
  54.   InitChangeDataGBKS2Big5();
    ( j$ _$ L% i8 E/ p; n2 }
  55.         //
    , ~6 P" C3 k' K0 d
  56.         bClickRunExe = FALSE;
    4 [6 h5 f+ a- `+ a
  57.         //
    - |6 e) L1 N, O/ D" S! C$ K
  58. }7 }5 A8 Q' N* e7 A7 i
  59. 9 O& w  v5 v2 L# U
  60. CRevAppApp::~CRevAppApp()
    % ^+ D$ x6 }% s  L6 \
  61. {+ y6 D, R. O+ H# z7 V/ g4 @2 R: S
  62.         // TODO: add construction code here,1 k" f* d- |" i; o8 }4 m0 _6 _/ u5 J
  63.         // Place all significant initialization in InitInstance, C8 O% Y& X! x9 @# b; n
  64.   EndChangeData();
    # A! |5 }8 z* L# s
  65. }
    8 x( p* I+ D. [! F

  66. 3 M& ~$ O& Y/ ?) X. }( V
  67. /////////////////////////////////////////////////////////////////////////////
    3 U3 r: G$ j# o7 y$ d
  68. // The one and only CRevAppApp object
    : n0 g. ^! e9 d4 m2 R7 f
  69. 4 ]) {5 }9 a) w' b0 }
  70. CRevAppApp theApp;8 v6 B) L& M+ @! s* e, V- [2 H
  71. ( `2 _& M( f  [7 R
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    . }, m! j. T( G2 {) @( P
  73. {
    , q3 D9 ^" s6 f2 Q! e' C3 `
  74.   int iEOF=0;
    ) r+ i$ c  S6 ]. p. h3 ^6 G9 g
  75.   char szTempName[MAX_PATH];& G" E" u- [7 T) B* G7 V& C
  76.   *szFileName=0;# y" D( Z: a+ i: x! l1 A# H7 z
  77.   iEOF=fscanf(fp,"%s",szTempName);. I4 m0 o2 B7 l4 B' y3 Y/ z4 R2 L0 W
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& ?( _( H/ Y; O6 ]; D1 O8 w( J+ d
  79.   {
    , w" j5 ?! N: d  h4 Z6 v/ n0 f
  80.     strcpy(szFileName,&szTempName[1]);# v' s' J* |8 A5 X  I; F
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)' v" i8 O- ?# R
  82.     {
    0 R! {" v8 m- y5 n
  83.       iEOF=fscanf(fp,"%s",szTempName);
    * ~: Y! x# C; [# `- C3 m: {$ B( v
  84.       strcat(szFileName," ");
    : e4 A& p: P2 r% D. F
  85.       strcat(szFileName,szTempName);
    ' R, Y6 q+ I6 Y  I# |8 g9 B( F
  86.     }) o, K0 P+ q" {- ^
  87.     if(strlen(szFileName)>=1)
    ; K9 k5 m! ~! I0 y; h1 ?
  88.     {' U& \; Q8 [3 k% g
  89.       szFileName[strlen(szFileName)-1]=0;( C) F( z( z2 {" R
  90.     }
    , P1 a. k2 i( F4 [0 k) x, l
  91.   }- P9 j: t0 V& s7 x7 Q0 Y8 C( w
  92.   return szFileName;1 u2 o% o% q8 w# d
  93. }2 q' T: M  _( M4 C+ c5 U. V" j; x
  94. - ?3 M  a# S* i" p( k- C4 U! K
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    2 }5 U& J& {& d3 P" i0 t
  96. {
    - q" {' j) R3 h
  97.   FILE *fp;
    1 o* t+ w6 K# [. e2 m7 `7 s
  98.   char *key=NULL;- k3 f- X3 o9 ]9 X% a, v5 {: _. |$ O4 ]
  99.   char version[MAX_PATH];  \4 d: z, Y& K$ n8 z- A
  100.   LPUPDATEFILE file,olds;
    # e$ P# R7 m; P
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' z) `. a/ m( L- g1 n) ]

  102. 1 h  S8 M' X8 m# Q
  103.   UpdateList.clear();1 h/ b$ ?" D9 L+ Z; r* ~6 y
  104.   UpdateFile.clear();, ^: O% D' x$ C5 s; a& D  o. S1 T/ r
  105.   if(GetFileAttributes(filename)==-1) return false;8 B6 u/ _: Q3 E; N$ K4 N, a/ E
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( d& W& s9 O0 {" I, B
  107.   fscanf(fp,"%s",version);- o# o9 S7 U! E) Y1 B* b
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 E6 S* U7 J# y" d
  109.   while(fscanf(fp,"%s",version)!=EOF)
    / q2 P9 q! e8 e  H) N. }
  110.   {. i; p1 O  P8 p* A; {+ ~' d5 Q
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% L5 n% z5 i8 O8 q8 w" d
  112.     fscanf(fp,"%s",file->path);2 B1 Z5 r! M! m& n
  113.     ReadFileNames(fp,file->file);$ s% U6 [; P0 v$ F/ P
  114.     strcpy(file->full,".");
    ) o  w% a' r4 [0 N0 k+ {: J4 O
  115.     strcat(file->full,file->path);- i3 J. g+ s& @- i5 S8 v
  116.     strcat(file->full,file->file);
    ; d! n6 b2 S; s% Y2 N8 X
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    - {9 ?) G# Y* u+ H
  118.     {( A+ V8 ~4 U3 g4 w9 a) O# c8 S
  119.       file->vers=(float)atof(version);4 _( U/ ]% P( b3 z0 y
  120.       UpdateList.push_back(file->full);
    2 q4 n5 c9 T  I# L+ u
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    / q( \7 q7 H- q4 a- V
  122.     }
    2 `  x1 H0 }5 F& C
  123.     else
    # a' N5 d# C) o# m
  124.     {
    : l/ |& N3 |# F7 w' _
  125.       olds=(*p).second;
    " v; c& v5 v0 d
  126.       if(olds->vers<(float)atof(version))( w3 g$ A3 E  m7 W) p
  127.       {: w# ^$ x, T& r+ K; g4 ^" D
  128.         olds->vers=(float)atof(version);
    : g  a" d2 m/ P$ a4 B/ o
  129.       }
    ' ^0 Y  N( K( \* {
  130.       free(file);% N# b2 S6 ~6 J
  131.     }! D; w9 Z+ w% ]
  132.   }
    4 d6 h2 T6 H# \8 S/ A7 L2 j, f
  133.   fclose(fp);( f% w( z$ C' m3 D# ]( Y  I) h
  134.   return true;  M+ |4 q) z  s& A$ Y
  135. }  G5 z, F, [! N& m0 M
  136. 4 E3 h# I; S" ^/ m
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)) @4 L! V( S3 v
  138. {) F% W! I$ g  ~4 a, b3 x4 A1 c
  139.   TCHAR  szFull[MAX_PATH];
    ' A$ V# T* `  r+ c1 n
  140.   TCHAR *token,*inter;
    ' P: w3 y1 B7 t) a! ^4 ^( b
  141.   *szPath=0;1 a; t: K8 f. Z6 q# N" J
  142.   strcpy(szFull,szFullPath);4 b; e0 M' z9 w. ~. L" B
  143.   token=strtok(szFull,"\\/");
    2 Q5 ~6 x0 D9 G2 e$ A
  144.   inter=token;
    0 p8 R4 l4 m' W' n5 I' S$ Z
  145.   while(token=strtok(NULL,"\\/"))9 o9 I% k+ m3 f
  146.   {$ k1 [, h, Q6 I# m$ q* A
  147.     strcat(szPath,inter);
    8 w) f7 B. m, C, I" \
  148.     strcat(szPath,"\");, a' s- \8 Z' T: s0 ?& v- b% t
  149.     inter=token;
    ) d& S8 R) W8 [4 \- i* n6 T
  150.   }, F3 q5 w3 E  O4 L4 G
  151.   return strlen(szPath);' B) J$ F/ w1 C/ P, b
  152. }
    + D7 P7 X9 I, V: Q3 d  t" {
  153. $ c( Z+ m* w& B, x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)2 n. ^0 f/ ~5 Z2 D. L7 E; N: \. F
  155. {
    " B6 a0 ~8 k) W" t3 `* N
  156.   DWORD attrib=GetFileAttributes(Target);; S8 f9 W2 k, q# o# O# }
  157.   if(attrib!=-1)
    / v8 B3 I2 N% U$ T
  158.   {
    $ Z5 V/ }3 ?' h' g& G1 S
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    4 \9 _" Q. o5 G
  160.     {0 [' r5 C) w- l. M7 ]$ L1 P, Z7 E
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);( ^  J: B6 n$ Y- E7 v
  162.       SetFileAttributes(Target,attrib);
    - g( _/ X$ `/ @6 G) U4 O( j* z
  163.     }6 ]% S- I9 c# R1 R: G& ?& [
  164.   }& v9 ], K; ^3 K
  165.   CopyFile(Source,Target,Erase);
    & f2 r. H! b3 [! X
  166. }
    ! w# t0 g( y" D
  167. 1 {, y, M; j( G2 O0 L5 ?
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)- ]0 ^! p. x/ H) j2 I! ^5 w' P
  169. {
    7 X2 L$ T, a9 L" }. R' N0 M
  170.      FILE *fp;/ R0 p1 l% O% k8 I( [% S
  171.      char  szBuffer[8192];* u' K7 t0 C( c& i
  172.   va_list  argptr;/ p( m$ Z! @+ @0 Y$ e- e' s

  173. 4 V! f$ T2 d$ T& d( `
  174.         va_start(argptr,message);
    ; _( Z6 T4 f# ?. }! |$ ?
  175.         vsprintf(szBuffer,message,argptr);
    ' M' F) |0 h6 ~2 Q' E" v" G
  176.         va_end(argptr);3 ^" e: h5 e6 ^. M1 {
  177.   fp=fopen(FileName,"a");/ g. Y8 N+ R2 X5 {2 T1 r# y% \
  178.   if(fp)
    8 [# U! W# J) s# T# C$ r+ P
  179.   {
    2 @4 `) x! w  c
  180.     fprintf(fp,szBuffer);. k3 G% ~  E& m& L5 a; ~# [& u/ [
  181.     fclose(fp);
    # j' ~8 h: ?& V- u6 Z5 P! C
  182.           _flushall();
    " a' x' z7 H& c$ P
  183.   }
    9 M2 |6 V" U3 e# M* g7 [7 f
  184. }
    $ M) e$ b3 w$ J6 y% e# M' A
  185. 5 k, o6 a3 B& a5 f$ R# y* d. |
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    & q# M, f+ L' j9 C4 B
  187. {7 J( M, E1 u8 p8 Y
  188.      FILE *fp;" \: H' b; t" F8 ?$ L3 h
  189.     DWORD  attrib;
    6 L  B; A  P" \8 L
  190.   attrib=GetFileAttributes(FileName);2 h- B* k  b2 X
  191.   if(attrib!=-1)9 K3 T& H4 V/ s. p" I- j& G8 _
  192.   {
    % V3 I8 C6 w' f& _( ?
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);  p* ]/ ~2 w: P$ u
  194.     if(!SetFileAttributes(FileName,attrib))
    ( }$ {, O* \/ e! q# V  O' E4 U
  195.     {
    / O& X: c4 x( D
  196.       return FALSE;4 t2 v: F9 Z  T* L# r
  197.     }+ j4 ]4 b; U( _( o* V# {4 u5 u
  198.   }
    $ o: x8 ~- F" n* F+ T8 |% ^
  199.   fp=fopen(FileName,"wb");& o. q! Q  a7 I9 Z7 J  |# C( w' W' V2 m1 k
  200.   if(fp)
    $ `! v- \, j9 h
  201.   {3 d- `: d" F: ^+ f1 L
  202.     fclose(fp);
    * J' q9 [3 t3 S0 O' Y
  203.   }& d1 I& z  A+ D! U$ b; Z
  204.   return TRUE;
    * r0 ?7 ~- H$ N7 x1 E: o6 P
  205. }6 g: A$ i  m2 t' g, T
  206. . m" h0 y+ e: _7 T8 R! x; o$ r% z  b
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    0 J1 a1 i/ z/ ?8 s
  208. {
    / k0 R, B# b0 b" x+ F: m( ]
  209.   char filename[MAX_PATH];. D$ l2 D! z  J% ~
  210.   LPUPDATEFILE file,olds;2 {) W' Y6 _: E  m% k
  211.   std::map<int,CString>::iterator i;
    : V/ o. K, H) |8 i
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! j3 E! g6 }5 s0 ^4 E
  213.   std::list<CString>::iterator l;
    , e  p2 a4 l, q3 j
  214. ! z0 |6 i" V( C, [7 F
  215.   if(bFirstUpdate)" [! a5 s& h; \8 m8 ^5 X0 x
  216.   {* `+ P4 b1 \9 k) N$ F  q% O$ m
  217.     dwCurrFile=0;
    ( }5 ^4 m' D5 F! t% n( o4 n* h$ d
  218.     bFirstUpdate=FALSE;
    , B6 J/ u1 E; h% ?# {
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) H* k* g; b$ x: h$ ^7 Y% M
  220.     {
    - b4 x0 A! `2 W. _1 D: x  L$ T
  221.       dwTotalFiles=UpdateLocal.size();
    / ^8 A2 u* P8 U+ w8 M
  222.       dwDownLoaded=0;5 W, e( \+ Q$ A9 J1 e7 r' f
  223.       bSilentStep=FALSE;
    ' R" I. _' z' k* j; r
  224.       bCompressed=TRUE;& [3 I3 u: F- e+ J6 y
  225.       strExtLocal.Empty();
      z" @, w' ^( f
  226.       strFullName=(*i).second;2 W; Z( a! t- S9 T8 s: t! S- w
  227.       dwProgramState=AP_CONNECT;
    7 F* X" c: U( T$ Z* O
  228.       return TRUE;% e  K+ O' \8 ?1 l- x1 u$ ^8 s
  229.     }
    , ]; X9 ~, u8 g( J& O6 G4 l2 J
  230.   }
    4 `$ f' H+ u% s! k2 [* ^
  231.   else if(bRestartUpdater==FALSE)
    5 B. S, g/ f3 _0 u% E3 b; b
  232.   {3 G- ^0 S' _& V; d& {- A* O" M
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    4 F' @" j+ |+ S8 @/ t
  234.     {0 X/ q  b% D6 @
  235.       file=(*p).second;
    7 A$ y5 d1 f, D& u4 B( D, }
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ( m3 @1 E. [" q8 [: T5 k
  237.       {
    8 K% t  c) v0 y" |
  238.         olds=(*p).second;
    $ J) E. w$ L1 X+ @
  239.         olds->vers=file->vers;3 y3 l( V: ?* d5 c6 L: @
  240.       }+ V) i( W" j! m8 P* G5 S) W
  241.       else; l3 z9 L# r/ F: w$ c  g
  242.       {
    ) y# k/ N$ @% P* u# _: c& |+ r
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ D2 y8 B: X) z' {/ E- d0 I
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    7 N  ~( E  j5 I; V( Y3 k  P* V' a
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));' y% J, P) l+ A
  246.       }" q- c) ~+ Y2 j6 w
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");3 v' i# m7 b$ B* f+ X' k
  248.       sprintf(filename,"(%s)",file->file);( c/ f& N$ k) x8 A0 E( L6 F. g6 [
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 a3 v% D3 U+ b1 W9 }& l# B$ V9 _
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    1 p" J4 H- \/ g; v
  251.     }' E# m1 q# j4 w, o
  252.     dwCurrFile++;1 O0 L! v+ c% Y1 X( c
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 o" m* s3 j; [4 N+ D0 E
  254.     {
    $ q, k" }+ y* l5 T) t8 o
  255.       bSilentStep=FALSE;
    % X, k+ ^( d% E5 d) Z3 f
  256.       bCompressed=TRUE;  n3 I: |0 c& _7 k& `" `( M
  257.       strExtLocal.Empty();3 P3 f! Y6 k; g
  258.       strFullName=(*i).second;( J* ~% t1 l) ~$ ^' G
  259.       dwProgramState=AP_CONNECT;/ Q6 ^( V+ ]% c8 ~2 u
  260.       return TRUE;7 U# a* z7 }' K6 D
  261.     }
    # G: m" x2 F3 A6 w$ k
  262.     if(!bRestartUpdater)9 o( z1 A& s/ d& H3 f
  263.     {
    $ P$ W# t7 B' J  w' _7 ~4 B
  264.       int iCurrSize,iFileSize;
    - k) ?) v2 f  Y6 L: W
  265.       iCurrSize=0;* C. U) W* Q8 ?+ {- T$ ?
  266.       iFileSize=UpdateList2.size();8 f  g! X. m* N/ K# v
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");& I0 C4 O  ]5 G
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");+ K. H# {$ I3 E9 j7 c
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");3 j9 u6 Y$ e  h
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 l' x; `: s# H" I
  271.       Fclearf(".\\update.dat");+ o' _. r8 X* J6 T! H
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 X' x3 y# m8 T, q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) D+ z# K9 @9 M- Y/ o8 b% K. s
  274.       {2 [6 s+ R3 s/ ?
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ' h) N6 l1 I5 M2 H, d; C' L- v: I& Q1 E
  276.         {' S/ C2 s$ M8 y+ ~4 v' Y
  277.           file=(*p).second;1 f; Y7 W' U5 m
  278.           sprintf(filename,"(%s)",file->file);' n  `+ D  A# W; X
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + j6 x) v' v3 s2 p
  280.           iCurrSize++;
    % q5 i0 B8 p4 A, N
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));# ^- _2 h, f- C
  282.         }* L% N! S3 b" @# w
  283.       }
    6 m. B1 F  N; j
  284.       unlink(".\\update.txt");
    & @3 f% O+ I# Z7 T3 e0 m  e% h
  285.       unlink(".\\update.tmp");3 O3 o5 Q# W% S  `8 [: `9 V
  286.       Fclearf(".\\checkversion.dat");3 P( z4 @) |# d
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    - _; M( `3 t- ~, e* {( T( H% k
  288.       if(UpdateLocal.size())
    5 D3 P* ?& Y: s; M
  289.       {. G, a% B' P  }, N7 G! y
  290.         UpdateLocal.clear();* t0 d% c& Q% N7 P  s& m: R1 k
  291.       }
    ; a0 l' C  O, Z5 j4 r
  292.       if(UpdateFile3.size())( z+ w) P; F! |$ S: M
  293.       {
    % M1 C9 m, Z4 ^- y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' M8 M! ^. B% u+ [
  295.         {0 t( G5 M" ^5 j, [
  296.           file=(*p).second;
    0 v- D3 V- E) G& x; [- G7 F
  297.           free(file);
    " b. e- b4 i8 Q4 x1 K
  298.         }
    4 Q0 H3 t7 j2 {# L& l; S
  299.         UpdateFile3.clear();
    % P0 C5 L# M! T9 r7 L3 U& \' M
  300.         UpdateList3.clear();# }1 q* K# ?- n  q2 e4 ?
  301.       }
    . y% h# a* j6 O: }2 }% Z
  302.       if(UpdateFile2.size())
    ( m6 b  |5 f$ Y. [  Q; [! A
  303.       {" G( c) y, M+ J; F0 ~
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . L5 ]! Q) Z+ [1 u' s
  305.         {
    , s; E0 x7 i7 p( |
  306.           file=(*p).second;
    - e9 H9 D5 E8 x5 g' H" s
  307.           free(file);
    " s1 n! W( y  K6 k5 M" F6 J
  308.         }
    ' ?; |, C6 Y6 @* O
  309.         UpdateFile2.clear();+ e0 T2 Y) {' U; g6 C+ Y2 h" D
  310.         UpdateList2.clear();
    ; a+ r2 a9 D3 s" j. N% x
  311.       }' @# r! e9 |& R' s0 M/ p+ h
  312.       if(UpdateFile1.size())
    & s+ \* U& W# \
  313.       {) X" L) s% f6 d0 ]3 Q3 S
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  C: u% r' F/ O& l
  315.         {/ T+ P1 c2 Z8 q% ~% J- t$ n, S
  316.           file=(*p).second;
    + Q5 @1 [- _0 z9 f. ^! h
  317.           free(file);
    6 {. c' a4 N2 C
  318.         }
    6 P: F( q) E+ f; P6 x3 Z
  319.         UpdateFile1.clear();% V& t1 @; H1 n2 u) }
  320.         UpdateList1.clear();* m* z2 V  L  i- k. P- j7 q3 e/ J
  321.       }  a; z4 P; d/ X+ P
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));- S) t  k' Y8 J  m9 k
  323.     }; c' E4 }6 `/ \) t) O# [5 H
  324.   }( U0 z  W& ~* \. Y
  325.   return FALSE;. J) z2 q5 O8 _/ ?' P2 q2 L
  326. }+ x$ w# x; N. L3 p  [

  327. 4 {9 s3 o! q* ]* A5 w8 r
  328. void CRevAppApp::ClearAll(void)+ @' q( B" e& p, u& {8 _- E- L; k
  329. {( ~5 b. h* T/ s, s- _% I, u
  330.   LPUPDATEFILE file;: l2 h0 |- x1 R6 x/ k: R) E' h6 p- b: P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;3 j& O9 H5 p& w3 ]0 [- Y, N
  332. / g8 ?; j" R; q: U4 K
  333.   if(UpdateLocal.size()). [* b" K& ^2 A$ S8 s) B8 \
  334.   {- S6 r( o! n. m: r3 i4 j
  335.     UpdateLocal.clear();
    : Q# {* a& S! y# x* |' F
  336.   }) m9 D9 E/ u  [% d& T4 M& D
  337.   if(UpdateFile3.size())5 w% g* D) k9 r; Z, t1 i% `
  338.   {
    7 ?( Q5 @: _. }' x9 r, R% }0 H
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - @6 T8 u+ m2 I+ }" }. r
  340.     {! T, J4 x. t, Z+ H
  341.       file=(*p).second;- ~. _' ?/ w5 U2 E- H1 S
  342.       free(file);+ f- j4 _5 k- i  f/ }* t
  343.     }
    ! C8 L: F' t* Z5 ~
  344.     UpdateFile3.clear();
    : F1 B  L! @! _. C) L
  345.     UpdateList3.clear();. L9 S- f0 D" b% |  I( J
  346.   }& p1 [' W9 {+ [! w  E0 u
  347.   if(UpdateFile2.size())
    7 A" J) a) {4 v) B* D
  348.   {$ K! D  h+ ~* v) v1 k- t
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . f8 x2 J8 _# M! h: W- f
  350.     {4 A0 h+ S* G/ k  e! S- v
  351.       file=(*p).second;
    ( x" F8 t. y& o& Z
  352.       free(file);
    3 F0 |/ U1 q% o* |3 N4 A% b! d
  353.     }
    % B0 x. ?, z( F, q  t% N. ~; d
  354.     UpdateFile2.clear();7 g$ V; G( D0 e$ E. E; W
  355.     UpdateList2.clear();; n6 X- T. }2 }9 o0 C& @  l4 ^
  356.   }
    5 {, }- P( Q9 E+ S2 X( j- ~9 _" f
  357.   if(UpdateFile1.size())
    , G& X% c& Q5 B& V: C: g
  358.   {
    - \7 L/ i' ]* W& \# A; k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 |. q- f( V; V4 i
  360.     {
    1 H, Q' ?6 x* s6 P+ [+ G
  361.       file=(*p).second;
    " r; Q' D; ?# u9 n
  362.       free(file);
    : l* w. Y3 J. P( E  f( k+ i
  363.     }
    . D  a# i: b7 U
  364.     UpdateFile1.clear();  r) O+ `+ k2 ^* f. i
  365.     UpdateList1.clear();
    + n5 F7 C+ M6 q% K4 Y% K
  366.   }
    2 b' l; V  [5 J
  367. }  
    ' x8 h: c. [# E. k  M2 e
  368.   
    - q2 H7 Y0 m. e% E: Y% w' b* {* d
  369. BOOL CRevAppApp::CheckLocalVersion(void)' g: y* ^- w# v5 V3 n+ X% x) X
  370. {$ k% K/ k# C  k4 i
  371.   int c;
    / \8 R) ~- S* H1 v; b7 S
  372.   LPUPDATEFILE file1,file2;& U0 |, x% D$ A+ ~1 S
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;3 W/ E# ?5 L% W8 ^1 X5 A( r) p" W3 J
  374.   std::list<CString>::iterator l;. u$ X! D+ \& I
  375. * k; W5 Q! q* _2 W1 i4 v8 ^
  376.   UpdateLocal.clear();
    ! x4 F3 t! h; p: V  A# Y4 p
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);5 [. B7 O* i$ u4 P. S; ?+ k% o) M
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);5 T# T2 U* l3 b* ?4 s
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);8 T9 I8 y& S+ B& L# ^. V" u4 I
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);8 M' _9 a& Y' {- S6 x! O' C
  381.   if(UpdateFile3.size())  g: ~& ^  ^% |4 T
  382.   {# S, d( t8 j; {/ R  D
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)8 ~) r3 y% [; V: b2 ~
  384.     {4 i" j$ X8 z- B& v
  385.       file2=(LPUPDATEFILE)(*i).second;
    . E% P0 B, B. x8 ?
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 f( E9 g$ ?) X
  387.       {- H9 ~+ o: o, z" N" m  i
  388.         file1=(LPUPDATEFILE)(*p).second;
    - x8 B* A4 b7 @  K
  389.         file1->vers=file2->vers;
    . c, E3 L( Y4 e- p- t+ `0 n& E* F
  390.       }" W" m* O1 B1 w* B
  391.       else6 m% p- i  X/ @* s% G0 ^
  392.       {# v7 h( c6 `. Y3 G# x# o! F
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 F, e4 T6 K% E# B+ J
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    * V( S; G7 L/ }) y
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ' o* n) w/ c+ B% a
  396.       }  |4 @$ V. T5 C, _$ u0 Q/ D
  397.     }
    & N$ ^% _1 p- E% R/ @6 u/ w, ]
  398.   }0 H% V$ K2 z( `
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)0 M# U- I6 W* Y2 `# c% r
  400.   {3 Q2 j" g) r1 S! A$ o1 l
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()); l- u$ p- c. _. W: a) a  R
  402.     {" {8 @. k7 I' F) x9 S
  403.       file2=(LPUPDATEFILE)(*i).second;$ Y3 W$ x, U- @- j% Z' }5 K) B
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" F: j: F( a/ O# }6 _; l1 q
  405.       {* C# l3 c% q. q8 [% N* g
  406.         file1=(LPUPDATEFILE)(*p).second;7 N3 I) Y" z. c2 t1 ^
  407.         if(file1->vers!=file2->vers)
    $ ~' v8 ]$ Y5 K) N" M4 o3 f
  408.         {2 X- y/ ~7 v3 ^$ m
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" R2 i# v% n9 M
  410.           c++;
    , L! f' W5 P& ^9 y' h
  411.         }
    0 }5 i1 p* G% n9 e# H' z' R
  412.       }
    & I- X: R! a$ q
  413.       else: T! ~8 k; l3 U7 G' M" @9 r
  414.       {
      A+ V" p. E! B7 G( N2 }
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" y- _- M) \7 ?7 V8 H" ]
  416.         c++;
    ( D0 b% F1 R6 B" r2 d: f
  417.       }! f, U! G! J6 E% S7 t9 o9 {5 ]$ x
  418.     }
    $ o- s' _! y# I0 J( ^% l
  419.   }
    6 R: ~8 |8 ?1 f- ?/ _2 g; V
  420.   unlink(".\\DownLoad\\update.txt");
    ! P: T2 F/ e* ?' @
  421.   if(UpdateLocal.size()) return TRUE;# O$ b" }  F5 |* z
  422.   else                   return FALSE;
    4 K4 W! f( O$ U0 Q0 K( Z. }( H
  423. }8 A' H7 p8 P4 q4 D+ q5 N

  424.   r5 U2 m: _8 G& p% t
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    " E9 }0 q/ a) l, H- ]/ B; j* G
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
      u+ A$ v# w2 L. \

  427. % [4 _$ W( i. Y; r/ w" A
  428. ! o# i1 P0 d. K. T
  429. , y3 m6 K7 e4 t/ T* X
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)* Q' Y- f- J  e" H$ I' T
  431. {
    3 z5 @& q# F, o1 @, `: P5 v
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    7 p7 ?0 m! `5 s
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( f- `1 b% ~  S% S, n' u
  434.   {
    : W3 w' o9 q% ]" P' L0 J0 Y% C
  435.     char szLanguage[50];$ B  P( B, p3 P8 c
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ i% b  R1 M6 i* s
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 j1 s- o' b) T, f
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / m) X9 z# M% O9 |
  439.     else                                   m_iLanguage=ENGLISH;
    . A0 d1 A+ P- W' X2 b" g) ~
  440.     char szRegister[100];
    5 ^  j. F8 B$ V
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");, p/ c% @; @# H
  442.     strRegsName=szRegister;. c1 l* T6 g# s3 y
  443.     char szPatchURL[100];: o  \# S! V, w" T% X
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 c; D' z7 }/ d+ z# y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , U+ @0 x, |, c1 _, q. X
  446.   }! k6 T0 K/ @  L5 c( t+ l1 A
  447.   else; }/ i/ w. H( B+ f
  448.   {
    0 P9 q; T( R  ~* `- Y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) I; ]# G7 v7 G5 z8 F- Q7 a
  450.     strRegsName=DEFAULT_REG_URL;
    / U; R7 v9 m3 x
  451.   }
    . k& ]3 N+ G/ d4 e9 q7 G9 h8 R
  452.   if(GetFileAttributes("hosts.ini")!=-1)
      H# S( J. {* C7 Y+ k
  453.   {
    7 }; H, P3 n' {# S- ~
  454.     char szIP[50];8 q8 y* B% ^  E, }0 x9 Y2 z' N4 t
  455.     char szDIR[300];
    1 r+ U% N+ v8 ^4 C9 m, y# F
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))* B# g/ ^/ I% D7 M8 I
  457.     {% i+ P/ S3 _1 {& s$ Z, j; U! M2 \" b
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    0 Q( F& y6 R' {
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");6 F& T- O, ?4 V. s! k: q' l
  460.       strHostName=szIP;7 O* ]! Y  [' P1 |, I+ e" k$ `# I
  461.       strHostPath.Format("/%s",szDIR);3 ]- Z9 }( R" e2 g8 ]4 o" p% e
  462.     }" O, A* s, T/ ^1 Y- P3 F; U  \
  463.     else
    0 W/ y8 r# E% H. i
  464.     {$ V4 m# Y0 w$ O3 G8 z: a
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1). \% C& p1 a# x  D5 }5 T/ l
  466.       {
    7 R1 H% J& D0 {4 T" f1 X2 I
  467.         char szLanguage[50];8 K. b1 O* N; n" U) k  s
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; f% N# K) h  a
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 A* ~1 ?( ]# P. ?0 O5 ^0 L
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) e. a0 ~8 b; R/ o
  471.         else                                   m_iLanguage=ENGLISH;+ X+ `& @) Z1 v! \8 p
  472.         char szRegister[100];2 n1 H7 M/ l& t+ _1 a
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");* Y) E9 V7 {, b0 _  z
  474.         strRegsName=szRegister;$ A# I- O; W9 M$ q( W- V$ O" \
  475.         char szPatchURL[100];
    ! a0 S% i! v' C9 R- v1 f) g
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. F( z) W/ R, x  F1 Y5 c0 K
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: \( u! ~8 O. `2 b- _
  478.       }) K; B# W( v, p% p5 q% u; T
  479.       else! @2 w5 X' q# s$ I( f5 O# V' G
  480.       {/ R, l. B  e+ @0 X8 v( U
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + b" X. Z, y" T) s% w) i6 j. m
  482.         strRegsName=DEFAULT_REG_URL;2 B. A; G* d' E. _  _) A7 j% U  n7 t
  483.       }
    $ Y2 X6 l' ]. W, o* {0 w- F3 C
  484.     }5 x) l8 r6 b6 U- P5 {+ S- d& e
  485.   }' V' {+ {, v# \4 O3 r# I5 A
  486.   return true;
    3 Z8 t2 y  b, w1 ^" S; v, {
  487. }' _' g7 @+ ?) I8 ~3 i
  488. 9 G  p2 p/ p  _
  489. #include ".\ZLib\unzip.h"8 y  y0 h% v% L5 T, C5 W1 f% }8 e1 c
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    3 c. G# C5 ?! @- U2 M
  491. /////////////////////////////////////////////////////////////////////////////
    ( h9 l% M9 u  m
  492. // CRevAppApp initialization
      k7 p1 L4 d" w+ J1 C
  493. 7 v! C# o2 L$ `, W0 @" ]/ {8 j
  494. BOOL CRevAppApp::InitInstance()
    5 `4 i: @' X5 |2 c6 h
  495. {
    7 i. |8 z  N( w4 G% W. n2 S2 R
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];" G: I- J) A6 L5 p! l+ g
  497. ) K+ D! X/ I- m! r7 J2 O
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);+ y+ B; j/ T5 Z. a/ m/ m
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    0 J' r6 s8 z! n
  500.   {$ i. {% u9 }0 M" M
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");& y; T/ v$ i. X1 N+ x9 o% O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& w1 i; U# w# F+ f" {0 @- h4 U1 o
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))4 ~$ @9 D3 E; e+ S
  504.     {, {" [8 G) R* O& t6 Y- i; k$ h& r
  505.       strcpy(szPath,szPathTarget);4 H7 h3 N1 u9 O
  506.       SetCurrentDirectory(szPath);0 h) J0 W3 y$ r1 y  ^( g
  507.     }
    : _0 O# L- n6 D' A" B# P5 @
  508.   }
    + Z1 j! c6 |+ q, z
  509. #ifdef _DEBUG  G) A1 n' x- a6 l
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 u8 A5 Q5 x3 v6 ]  ~
  511. #else5 N  x  W' I8 V/ |6 A
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + T6 K, f! b4 ?! }" t
  513. #endif3 v2 J7 x2 N; k. W
  514.   {1 U' T9 q$ J; e6 Y% S
  515.     char tempFileName[MAX_PATH];7 N8 m9 k* \6 c
  516.     strcpy(tempFileName,szPathSource);; W/ N$ Z' `% o! R5 ]  ?
  517.     tempFileName[strlen(szPathSource)-12]=0;
    6 D/ G. @0 n* a' g2 K0 ]7 P5 h' P
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( g/ m3 e- {+ I
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    . `& F. X9 H6 D  D( L4 `. F+ ?
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);6 s2 A6 m5 M. u
  521.     return TRUE;
    ) R9 ?# {( O+ C( \9 K# M8 e
  522.   }: v. R/ l; o1 e; z3 c" [
  523.   // Nuke 0118: Delete run.exe4 n4 s$ h( @9 Y# o  X
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );" c3 U2 ~1 [; d1 t
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");+ ~7 w$ |! }$ ?. a& x
  526.   if(!ReadCfgFile("Config.ini"))/ y& Y  V- B# U" i, L7 v- L
  527.   {- q2 _6 ^- c* U5 T; Z+ n+ ~5 F
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    9 ?& F! a$ c& a5 N% f
  529.     return TRUE;4 A& T) q' T( R  r! ]! D5 B! A
  530.   }" e+ ~5 }  I3 o7 P* `: w; [
  531.   HANDLE mutex;
    / I* x3 g! X5 X# h' M
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))6 g- |( \% b* a% y
  533.   {- f9 w% b" r, }+ n6 A. j" j- ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    9 A& p5 N0 g1 m/ L) a
  535.     {# z* g9 a& a  n' q5 ]
  536.       CloseHandle(mutex);
    7 W0 f7 s3 [( S) y& e
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ( E- ]6 C7 J" k  b
  538.       return TRUE;1 O% I" t' @) ~/ p1 C0 E* q
  539.     }5 S* g, L- \9 \3 Y
  540.   }  2 k/ q, c# L) R5 G) [' M
  541.   CloseHandle(mutex);( k* Y1 @  r  x) _0 q6 W" x
  542. ! D6 A& d2 U3 p3 g& J
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 V4 I* j1 r7 ?& v7 v
  544. 1 h5 h. D5 t0 w" A
  545.         AfxEnableControlContainer();
    + w; y- K& ^7 L' z8 }. x: S9 G

  546. $ r  k! ]) q7 |9 I1 l* `
  547.   bCanUpdate=FALSE;( R+ M# {$ i5 i  U0 ]+ S! _
  548.   dwStartUpSteps=1;& O+ C; b5 Y3 W# q" t# b* |1 B! o  t
  549.   dwProgramState=AP_NOTHING;: ]! w" [: Z: M% d/ j  z5 n

  550. / V9 I* R9 y  U# b$ l3 B6 a
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    2 g) n" Z! Q2 e2 S' C* f

  552. % G5 C  X9 \; N2 C. P  H
  553.         // Standard initialization. t$ T2 f6 Z. W1 `0 a, x
  554.         // If you are not using these features and wish to reduce the size3 D( B- V2 g; n2 _/ z1 ]" I8 \8 n7 W
  555.         //  of your final executable, you should remove from the following2 L% L6 C  Y* r8 i1 p" l
  556.         //  the specific initialization routines you do not need.
    * N8 R# a3 P9 y- T: L& ~

  557. : }, u. z* _( J
  558. #ifdef _AFXDLL
    ' \( j$ i: {3 G1 v: ~
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    4 H5 u) S! r6 x* ]3 P3 ~
  560. #else5 F5 U  b2 n. u. F! n
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    4 U; {/ J% f( O* p% t
  562. #endif( D" T& m/ q0 P& ?9 Y! c4 N
  563. ' h6 l8 R0 f; ^
  564.   dlg=new CRevAppDlg;/ c" i6 P. q; l) G
  565.   dlg->Create(IDD_REVAPP_DIALOG);  d) f, w6 o- X0 y! u
  566.   dlg->ShowWindow(SW_SHOWNORMAL);- s. d: y. W- Q% t/ v7 D3 c
  567.   m_pMainWnd=dlg;" w7 J. c" @+ y. `4 ?4 }( O
  568. 2 ?0 t# S7 t  b$ g2 l' W" R6 j
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, b, I2 ]) r( V$ n' R

  570. * Y* f! M$ J5 Y% p* B
  571. //  GdiplusStartupInput gdiplusStartupInput;
    5 T* I7 S+ d% U. x' E
  572. //  ULONG_PTR gdiplusToken;9 s7 d* O* K4 p- C  C8 C
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    4 K# [' b7 }3 T( o8 Q  m

  574. 8 n- D7 Y' y8 @" M$ b0 c& u7 q2 q+ x
  575. //        CRevAppDlg dlg;
    # E. B0 r5 G* @! Z; t( n
  576. //        int nResponse = dlg.DoModal();
    8 X# u' R7 Z1 ?
  577. //        if (nResponse == IDOK)
    * \' i+ F$ a0 y3 {" {4 P+ Z
  578. //        {2 t: J; c1 g# E. L5 w& T5 U
  579. //                // TODO: Place code here to handle when the dialog is& Y/ ^# @, f9 z: Y4 {3 g' t2 R
  580. //                //  dismissed with OK
    & c; G3 r) _3 \" `5 u7 E
  581. //        }$ l8 G4 d0 P! s
  582. //        else if (nResponse == IDCANCEL)
    7 S) Q) ]5 _. M! k8 m( F& v& O
  583. //        {4 p3 H5 L0 Y7 V- C  j) F( i0 s
  584. //                // TODO: Place code here to handle when the dialog is
    3 d4 G6 ]/ J" P8 c( o
  585. //                //  dismissed with Cancel
      o4 b$ {) @9 o
  586. //        }, e# z+ ?, H, C2 \8 F

  587. / D3 m5 q/ J. E$ I! K9 F7 G1 y
  588.         // Since the dialog has been closed, return FALSE so that we exit the' t% P2 u7 g! e7 M
  589.         //  application, rather than start the application's message pump.& [# z# \- U! \4 ^- e. ~2 k6 }& E* s
  590.         return TRUE;7 |" ]2 A1 N/ U  x
  591. }4 w9 d) ]/ ^$ {7 |1 u' f

  592. # O+ K0 L$ t1 n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    # T6 m* X6 p: b$ {. z' F1 F, }1 I5 p
  594. {% ^& N7 D4 j# i' K
  595.   int i;5 B( w9 t3 h6 g. M3 @  _
  596.   char *szRet;
    % |* ^7 t0 N) d4 A3 D/ b0 r
  597. 3 Z9 z: S& X% C  i* R
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    , I& v5 I; M( K- `
  599.   if(sztoken)2 G2 y! l# _+ X9 p* d7 U1 }# B' f
  600.   {
    ' {3 {& N2 ~+ x+ V2 R: S/ @
  601.     szRet=&sztoken[itoken];3 j$ i0 j  }9 d( v+ f" b3 y* D6 N
  602.     while(sztoken[itoken])6 g& J  ~5 F. S
  603.     {4 r+ s& C5 c  N. y% w9 T4 ?  }
  604.       for(i=0;i<(int)strlen(token);i++)
    ( E: r6 z' _3 I
  605.       {
    ; r1 z8 A: ]! r3 L  q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])+ _% X# l4 N, B
  607.         {1 }& r; E+ W1 {, ?) E
  608.           sztoken[itoken++]=0;
    & v6 v5 y- K5 \1 |
  609.           sztoken[itoken++]=0;
    & I1 q2 K( G2 b( b# n0 q
  610.           return szRet;1 U+ b9 y7 d4 Z! h& ^. M) ~3 Q* ~% m
  611.         }0 c* v& p$ T* U5 a
  612.       }. P( e, k: L# F  Z
  613.       itoken++;- Q8 i" z6 B& f5 }( X0 I/ n1 w
  614.     }+ h; Y- h9 |8 s& P
  615.   }  I: R6 d, {9 P9 D6 j" w/ z
  616.   return NULL;
    5 J. A% ~4 x- }! N0 g7 w
  617. }) A# _1 V$ ~( F6 S  g0 a

  618. 2 ^0 a/ S  g" [( c; K0 l' a! M
  619. void ProcessProc(long Total,long Current)
    % e, o6 L) Y* Y  {# T+ u
  620. {
    0 z6 m* b  `" j- a7 l
  621.         MSG msg;
    + S" n3 u+ e! k5 C! [
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    0 S; o$ }5 t  g, ]$ n& \
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    % R/ ^8 ~' X! }4 Y* c% X
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))" k; j5 c5 J7 ]- O. T: J
  625.         {2 x$ g: M+ \+ p' ^
  626.                 if(!GetMessage(&msg,NULL,0,0))) Z# T# o; `( n
  627.                 {# f6 J2 H+ {0 g2 g
  628.                         return;
      B4 j9 ^4 j1 d& @( B. g
  629.                 }' R2 @7 O0 v% ~; x6 E: W4 r
  630.                 TranslateMessage(&msg);
    ( f+ v3 z: M- X  P- _2 M. `
  631.                 DispatchMessage(&msg);5 _3 g: C9 d0 W3 M1 f
  632.         }        0 C+ H% s, h+ B9 m
  633. }6 j& Z  U+ z' b. B" J; E) Y6 s
  634. 6 w# T& |6 k- y- G& _
  635. BOOL bFirstChar=TRUE;
      @5 ~* f0 F3 Y' A* I! ]

  636. % o7 R% G& L: S( B5 y8 r
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ! @/ b5 m# V# a. H5 C7 s
  638. {
    ! k) N1 t' B" t# u# ^" i; |
  639.         // TODO: Add your specialized code here and/or call the base class* r3 S# V# d0 J( g. i) d# R1 Z
  640.   switch(dwProgramState), ]! x0 L! T' t! Q5 n- H+ k
  641.   {+ j0 F0 d5 f4 F- |5 s
  642.   case AP_NOTHING:
    9 e9 `% p# u: a& D( z% }. _
  643.     switch(dwStartUpSteps)( N% o. Y; [; K, a  s" L
  644.     {" p5 c0 C( M2 w
  645.     case 1:& N1 u" h( ^, y
  646.       {
    1 p& w! _# k0 w+ {) O0 ]) Y
  647.         int i;: Q% E. P* v6 m, j# |
  648.         CDC *pCDC=dlg->GetDC();
    9 F+ d& u' H/ o9 f
  649.         HDC hdcwnd=pCDC->m_hDC;$ I* y! D* ~2 t8 C9 g  Y+ c
  650. //        Graphics graphics(hdcwnd);3 X9 }9 O  a+ W5 s) }% R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");! T% y4 D  V* J' V9 J% d
  652. //        INT iWidth=bitmap.GetWidth();  r1 F( S( v1 P  I0 b
  653. //        INT iHeight=bitmap.GetHeight();
    " \! B0 n3 w7 k6 o! X
  654. //        Color color,colorTemp;4 a- V, a( S9 X; h. J
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% w4 {+ i) z- _- F0 ~9 O# u: m
  656. //        {
    4 u( p( Y$ m: y4 N
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)+ S6 K1 L7 n# p# v
  658. //          {
    0 d* R* y7 [  w3 t4 H
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    * `; P% r1 T3 K+ Q" B
  660. //            colorTemp.SetValue(color.MakeARGB(; W# c0 M) h  k; H
  661. //              (BYTE)(255*iColumn/iWidth),9 p6 e: [% p" d
  662. //              color.GetRed(),$ W. S' J) L8 k, U% d
  663. //              color.GetGreen(),$ f4 P$ U+ c) f$ E8 }8 f: b
  664. //              color.GetBlue()));
    # T+ w! U3 k# x, B1 ?' h
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    , X4 Y: T  _8 F
  666. //          }
      z/ H9 j, `" ?  g: S% u8 l2 G: }% @
  667. //        }* m) ]$ @# p  _& W7 A, x2 J
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ( K  I. v2 F0 L! A5 L
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % M0 z! I6 X0 ^; R: [( r1 M3 y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    % o" E9 H5 L5 W: x+ o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; _  `: r9 z" }6 ?
  672.         for(i=0;i<240;i+=8)# X4 H/ e% g. \8 d2 e& [
  673.         {
    & O1 Y4 }$ r4 G* a: }
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' |+ m! _7 a) S5 C% r. C
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! x" e& k, a' K4 y! k: k
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 A0 J; k2 m7 K6 e# E
  677.           Sleep(33);
    . \0 I: r8 l7 t" v
  678.         }# F4 F! G$ y2 r
  679.         Sleep(1000);
    # J* K* `8 o/ g0 \& [5 Z. G
  680.         for(i=240;i>0;i-=8)
    ' D% Y$ _' b9 t" Q+ a+ r: n
  681.         {" I* i6 t3 w0 o- e8 c- L
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / q* t6 x+ C) Y4 y1 h7 n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & Y: T" Z9 |0 B8 X2 L! }
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - y, q/ x* ?# ^$ \6 E6 {! |/ M9 z
  685.           Sleep(33);
    ! K  }1 M$ G7 x* z1 o+ ~
  686.         }
    $ z) n. e4 ~! A, I
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    * V/ F: o: D5 j
  688.         dlg->ReleaseDC(pCDC);
      W' w1 b$ a$ E2 g) g
  689.         DeleteDC(hdctar);
    : w8 d, n* j* ?. t" q. b
  690.         DeleteDC(hdcsrc);6 C+ w8 o, Z9 o, }5 @4 i/ m
  691.         DeleteDC(hdcorg);2 @0 t4 R6 w) H% O" m+ d
  692.       }1 l8 j/ N9 A( Z: k7 P, Z$ s! Z5 X
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);9 X1 I" Y0 _0 z/ v
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    + W- r+ I+ c* ]7 f5 ^2 r
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, v1 ~  U. @0 ~% F
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");: ^2 t5 ?! L, L3 e& L# w/ ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / y! `) T2 Y% ]" ^) x. l0 h. [8 K
  698.       if(!Dn.Connected())
    : F& P. p4 `' {0 u" U1 z
  699.       {7 t- q& g1 C* G! u
  700.         dwTotalFiles=1;
    & d, X, S$ \# C9 \; p
  701.         dwDownLoaded=0;
    ) [8 Y/ X) e8 l9 l
  702.         bSilentStep=TRUE;$ w! {. G+ I1 y
  703.         bCompressed=FALSE;
    ( T1 s" o. E/ w, x, R7 T
  704.         strExtLocal.Empty();
    4 y$ q) _: M& R5 _/ ?! a1 z
  705.         strFullName="readme.txt";: g' X9 |& q  N  Z1 Z$ L
  706.         dwProgramState=AP_CONNECT;
    & I: o; c, D# o5 {& d
  707.       }
    # p& F& t# W2 u  N4 [$ P  j4 V1 b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    / T: a. n: L5 P, q/ |9 f  F" B
  709.       dwStartUpSteps=2;
    - n; O  @3 v$ E. q6 M7 ~) T. i
  710.       break;
    * P+ k6 C4 o/ h2 f% i$ ?- _9 D
  711.     case 2:) |4 W& y/ ?" f4 v% b6 S0 U7 }7 H4 d
  712.       {
    ' j6 h: g. v% ~8 C& K0 c
  713.         int iEOF;
    $ `0 }' S/ X) M8 O/ S& u8 I4 U) K
  714.         FILE *fp;! a; s4 z( f, P/ M6 E" w
  715.         char szString[512];
    . q1 X. U" y; z) [1 q& D: a
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    5 p& b! u# b7 {! C6 t
  717.         if(fp)
      g3 ?' `8 z' X7 J+ l" W0 E  u
  718.         {4 d1 `) a& R+ b
  719.           do
    6 u- C% Z. ?; ?" H3 J1 ]5 u
  720.           {
    % B3 K" y) R+ u4 R2 q, B
  721.             iEOF=fscanf(fp,"%s",szString);
    - J' {, B+ m6 h( F& E  E) \
  722.             if(strlen(szString))
    ( V8 E. I! v! c: F" K) i- x
  723.             {$ P' R4 K$ Y9 V3 U+ P! V% P. ~
  724.               if(bFirstChar)$ M- y3 O$ j$ ?* A) b: V
  725.               {* M0 Y) c; C/ `6 t7 I4 f( |+ t
  726.                 bFirstChar=FALSE;
    * l) ^  Q% V) |- G8 J2 ?/ c# h
  727.                 bConnectIsBig5=FALSE;
    + w9 [# b( a1 K' H! |
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    7 {1 S# d% }$ P; V! ~0 `
  729.               }
    ! A, R/ ?6 ^5 H  u% P0 `
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));( t# g0 u5 N& Y% I! C5 P4 E0 q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));5 M0 E+ ^* a% ?) s- \8 s
  732.               dlg->m_ListText.AddString(szString);
    9 Y& c0 y. U9 `5 j2 r% A" @& r- r% J% f
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. b) t. P9 S# p% G9 V5 D3 e
  734.               *szString=0;
    + N8 h* D: W0 L  ~6 q! b; m" Y0 w
  735.             }" d5 j7 T: k8 m* [: `% N
  736.           } while(iEOF!=EOF);
    $ w. Q( c2 C) ~/ J# v+ h4 L% {
  737.           fclose(fp);8 G( O5 b, L7 a6 R) }# T! c
  738.           unlink(".\\DownLoad\\readme.txt");" S6 W- n- b  C1 _9 D9 n
  739.           dwStartUpSteps=3;" S) @" X$ p3 `6 m
  740.         }
      J% P3 K. r/ ]3 p- h
  741.       }$ ^& o1 B  t8 O( S8 k
  742.       break;+ n) B. {6 p8 ^: x2 x3 f. R5 t
  743.     case 3:6 U. v  I. f8 K8 y# Y7 R0 i
  744.       if(!Dn.Connected())9 o! m$ F. a1 F
  745.       {
    5 y7 b, J: o3 [  [$ s
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    + n& M1 R( _( x8 @# d. [
  747.         dwTotalFiles=1;
    1 s. Q1 `8 K5 K6 q) v  \
  748.         dwDownLoaded=0;
    2 Y3 N: U1 s. ?) N2 \- o# H
  749.         bSilentStep=TRUE;) l3 F* i! g4 z1 C
  750.         bCompressed=FALSE;
    ' ]9 g5 Y9 I9 I4 _) q! y
  751.         strExtLocal.Empty();
    8 ?4 w8 f5 R5 t% F
  752.         strFullName="checkversion.txt";
    $ n, L7 W- y- \8 y- O' _
  753.         dwProgramState=AP_CONNECT;
    4 c- X$ R9 a- O$ X- Y
  754.       }$ C7 S1 |+ t8 t7 D! i
  755.       dwStartUpSteps=4;& e" G  z8 [$ [6 ^$ b9 z
  756.       break;/ @8 f  f! [* p" J9 E& A
  757.     case 4:
    9 D" R4 i/ Y8 ~
  758.       {! R! _( M. M: x+ u& p& Z
  759.         FILE *fp;
    * _1 d  `. [7 F2 B% L, c
  760.         char szString1[128];# N5 v6 Q1 l1 B% I& ^) e, `
  761.         char szString2[128];
    ( b$ U/ \' D/ ^; _# ]
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");3 ^1 O" z" ?6 A/ j) ]
  763.         if(fp)# a0 T+ F$ G* X& O8 M9 O
  764.         {; {& r- w9 ?! a3 r
  765.           fscanf(fp,"%s",szString1);) Q' |9 |6 C8 v. x6 q4 n% S
  766.           fclose(fp);
    ( E" Z  e$ |* @
  767.           fCheckVersion=atof(szString1);! v5 P2 l) ]7 \" ~+ R
  768.           fp=fopen(".\\checkversion.dat","r");
    8 }/ X# m: \8 ]3 l  ~
  769.           if(fp)
    ) o+ t( Q) C6 ?: U  f6 J1 M1 ?
  770.           {
    $ o4 b8 Z5 \' F/ O  Q6 W( X
  771.             fscanf(fp,"%s",szString2);9 q/ ^- G  ]4 t( ^. N
  772.             fclose(fp);
    1 x: t( H( f- @( s2 y
  773.             if(atof(szString1)!=atof(szString2))
    9 o1 f5 h1 V* Y4 C
  774.             {
    ! O5 o6 E! l" T/ q
  775.               if(!Dn.Connected())
      W& N/ v: Q" w2 Q7 |
  776.               {
    ) Y+ R. i3 A9 }7 {+ H, t1 R
  777.                 bFirstUpdate=TRUE;, ?  b, C' O8 A! _7 u6 P1 B8 ^
  778.                 dwTotalFiles=1;
    / ^8 b) C/ l, g; c% v' x; ?. \+ {: q
  779.                 dwDownLoaded=0;
    ' f$ a' g) D2 K2 k
  780.                 bSilentStep=FALSE;
    5 s( X/ c& O$ s
  781.                 bCompressed=TRUE;
      R- j6 }! }) B6 S  `7 Q  b, W! s
  782.                 strExtLocal=".\\DownLoad\";" _/ `% s7 y( V; P  l6 L3 J, o- y* D
  783.                 strFullName="update.txt";
    4 F0 B; G2 X( J/ _; R" y1 W
  784.                 dwProgramState=AP_CONNECT;
    " y) @! Q/ K: {) u- j' `
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 I8 U9 q& c, A
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 S" O7 u, n7 O. T8 W7 b$ g
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");, ^3 j0 H6 ~& {7 s! @, o( a
  788. 4 o4 D( T; Q) j$ D& }8 f2 C% ^3 s
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : _9 Y# b7 ?8 k
  790.                 unlink(".\\DownLoad\\checkversion.txt");0 F, U" m9 Z9 n" h
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1); t4 e3 R8 u& O7 O( M" ~2 ~$ [  j
  792.                 {
    / L5 V% w) L/ l# |, }3 ~* c" ?
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    * z. }) i6 P3 g9 O) g
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    , t* ^' G9 d7 _+ B# L" c8 D
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");4 c; ?3 I3 A) l& F
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; F7 c9 f2 I: k' f  l7 C( L

  797. & r1 P- L! L+ a9 C) u
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");* v8 I5 j  K! e9 A
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ( c0 @! P9 L7 Z4 f6 |
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    " M9 H, O6 O! Z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 Y9 u) N  `1 {7 }1 v
  802.                 }& t' L- x9 }  N. v7 A- F6 z! s
  803.                 dwStartUpSteps=5;  H5 I; l" n% J- z7 X3 Y9 @' J; u
  804.               }
    + V9 c& |( X4 B
  805.             }3 U, F6 D0 k; N' [' ?' Q
  806.             else9 Z+ g- Q1 V# x( J% r$ P6 l
  807.             {
    2 A4 o: ^( t& B+ O+ y# w
  808.               unlink(".\\DownLoad\\checkversion.txt");% G1 Q, K  J5 E4 u( u! \7 ?# L
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , a# _8 L9 h% J
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
      E, [9 @8 c% w6 b  j
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' _) w) a8 _, O
  812. 7 d- m; k- W1 G6 B
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. Y/ g) Q$ O# a9 ?( |8 x
  814.               dwStartUpSteps=99;7 {+ J' T  Z: ?; ~* ^& g# A
  815.               bFinishUpdated=TRUE;
    % _1 z9 R" G5 A$ L5 S! {  I0 B6 D' N1 W
  816.               bCanUpdate=TRUE;& F1 i2 V! ~& o5 f
  817.             }% u+ J# u# y( J* F0 {
  818.           }
    " l3 ^* L  D. n" U- ]; n5 j
  819.           else$ e' p/ ~, z& m+ C7 q
  820.           {
    3 y4 q* c- Y. {" k- j- J7 p
  821.             if(!Dn.Connected()); v7 l5 ~/ x# U  ]
  822.             {. e+ _  u* x3 |" H5 G
  823.               bFirstUpdate=TRUE;& }9 Y' u3 ~9 t  o
  824.               dwTotalFiles=1;
    , k- B' [) }0 i+ `2 V
  825.               dwDownLoaded=0;
    ; W: U+ k9 h, N6 ?
  826.               bSilentStep=FALSE;
    % g. ?. }5 ?& i* e) [2 t" R
  827.               bCompressed=TRUE;6 j% y4 T. A- {2 [
  828.               strExtLocal=".\\DownLoad\";
    2 n0 j4 l1 J- c; t
  829.               strFullName="update.txt";
    4 @1 k. b; C5 o& q+ Z$ N
  830.               dwProgramState=AP_CONNECT;" R. F: m* ^9 O' A0 M! V
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  `: `* v/ M6 G8 r; I1 L% h0 J
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    % A* ~! @9 A* b1 Q
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");2 V/ E1 F: m3 t8 M
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 I# Y6 P  v5 |$ E) O% F  r
  835.               unlink(".\\DownLoad\\checkversion.txt");
    / I" k0 X' B, |
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)& l: ^$ R$ ^* B4 O5 }9 G" g/ T( H
  837.               {8 Z  @  L) q, c) Q3 V9 {
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    / i3 U5 t$ [. ^! v; [, B# J5 z( Z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");- O8 K) s2 q" [3 j. l8 ^
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");( f5 c3 {. k+ w  @
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      D7 S5 t5 s1 w- m
  842.                 ( }3 v$ F! x, e: n9 Y: ~1 t
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");& ?; o6 L+ `( G3 Q. T
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # O0 |8 c* E5 T5 Y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");3 z: w: X. I2 F. R( p' l7 h
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # T* m: T3 y4 |% `# W- Z
  847.               }
    * x. u0 c: b/ H* R$ f+ z
  848.               dwStartUpSteps=5;5 E0 y! a' e+ k! h2 y' u9 p
  849.             }
    - K$ V9 e' `) x; J% n! _
  850.           }
    6 @' B9 o- j' f! _9 n7 |0 a% ^
  851.         }; \, [: d6 c2 n
  852.         else
    0 N( C) P: b7 c7 V6 D
  853.         {7 F$ {0 n3 _5 [- g5 h3 e  H0 l- y; W
  854.           dwStartUpSteps=3;
    3 V0 w' ~- H0 J; C3 ^* d, r
  855.         }
    1 A6 n4 r# L4 @( L, y6 }* [
  856.       }
    * A+ ?  ?8 \9 |* m
  857.       break;
      [+ T& ^, {4 h( e& y9 F
  858.     case 5:; b8 k" Z0 g( ~4 q2 v3 V5 q% p
  859.       {
    2 i4 o, i" a; l9 \* i" |
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    5 ?7 D( X. ~( R, P! r. v# U8 J) g
  861.         {% ]8 {4 x8 U% a0 p
  862.           int opt_overwrite=1;- ~1 q; G+ F/ q$ D8 B* k
  863.           int opt_do_extract_withoutpath=0;- v& {; M9 h5 H/ w" F2 ^
  864.           unzFile uf=NULL;- J1 y" L: G2 z# ?" M
  865. 2 B% I% V0 X! m* d) Q
  866.           uf=unzOpen("Wsa.zip");
    " x; s# J  L/ M/ X1 v. B: f
  867.           if(uf)
    * @: z; `; o2 W# b
  868.           {
    ' o9 W7 M8 [0 o5 U) Q  T
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    6 d0 z  f7 J% U) `+ d! I) Z$ _
  870.             unzClose(uf);
    " d  p' }* O5 h3 B( a0 n
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    % F- P$ S8 d" y/ ]
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    2 p0 v4 C8 R9 {, I( v/ v
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ) ]7 z! r4 x2 R+ I6 f6 u) ^
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 t2 j5 {9 p& c! t3 P" ?
  875.           }7 c& |# b5 Z: T; B$ G' p3 e) O
  876.           DeleteFile("Wsa.zip" );
    ' R  u9 v5 a0 U9 y
  877.         }
    ! g6 [; d* J1 ~' s% E. V
  878. 9 ~" t& n$ m% p# V1 j! A" q
  879.         if(CheckLocalVersion())
    ! e# }/ s% i+ o
  880.         {
    , O) R& X3 K" e: R
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    & }& c# o* h6 Y0 b1 B: j
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    5 H& J4 t6 i+ S5 V! i2 @" ]2 c0 A
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ) I- h( s7 a4 p0 H- K
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / h4 f9 G! Y' f# n9 e
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    : b2 f" G% j" e( r4 V0 `  K
  886.           dwStartUpSteps=99;
    0 M: X4 N  @% N9 z' \. {2 k, T9 e
  887.         }
    5 P8 l4 L  s/ v; ~- g& U
  888.         else4 J& X( |. M9 c' O2 Z( Z, `
  889.         {
    5 x1 c( Z% @* W0 {
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");$ L. _) R! w6 o* Z/ T6 ?
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 ?# b2 k* |. ]; D0 N; E! t0 k$ f
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");6 f7 b, A. K! |) q

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

+ O4 `; O+ L; f3 @: r8 s
. g+ U; P# i  a" J6 X3 N. T9 m

評分

參與人數 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客服返回頂部