CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
( N/ {; s) f1 X) D! l
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ( R% L$ U# l3 y4 B8 H  @9 Y- i
  2. //
    * c" d0 R+ e* U$ v
  3. 4 |9 v' W5 W& T* V6 P+ M7 N
  4. #include "stdafx.h"
    4 o/ M5 f7 }- F; `9 S
  5.   ~2 g: O* R% q; Y
  6. //#define UNICODE
    + W  S; v. y1 A9 I
  7. //#include <gdiplus.h>. d0 w$ K; V/ ^/ D+ E
  8. //using namespace Gdiplus;
    - k2 b; N2 [4 o7 T4 z6 ?

  9. 4 [* w" d( A7 ^( S- i) t# w
  10. #include "RevApp.h"
    / `# J+ z  i$ Q2 i, R. v! y
  11. #include "RevAppDlg.h"
    2 R/ c% h7 ?: \9 R1 k
  12. , S1 E2 J, m1 @0 Y
  13. #pragma warning(disable:4786)
    ! O* k. _. B+ P) d4 o
  14. #include <map>1 ~( q- W; N4 T% t3 w
  15. #include <list>
    9 x( m# _1 h* `% f& H! B$ l
  16. #include <direct.h>. u1 N/ ^/ @5 `# I/ s2 j- @# C

  17. 8 ]" [6 l0 r  a! S' P% H; M' m
  18. #ifdef _DEBUG
    , v8 H: J( K4 z9 A
  19. #define new DEBUG_NEW* D! C. k7 V' b
  20. #undef THIS_FILE
    - `4 O/ ~# c& U4 D
  21. static char THIS_FILE[] = __FILE__;
    # v8 i4 D% M5 J. Q7 y
  22. #endif& [/ k' o1 ~* l' H& `& V
  23. #include "SkinResDef.h"8 K$ x* e) g, k4 I8 f( v
  24. #include "ChangeBG.h"
      J8 N% N2 b0 K, Z
  25. #include "AFXINET.H"" \0 }2 H. I- {% B; _0 a& t

  26. : f# \0 T' `6 B8 _" Q
  27. #define TRADITIONAL_CHINESE 0
    8 y, |  s1 R* N& o  I
  28. #define SIMPLIFY_CHINESE 1
    5 N) B: h8 }# Q7 }" D8 z
  29. #define ENGLISH 22 b) V4 f! ~1 o# e  }
  30. int m_iLanguage = ENGLISH;5 g: G8 {% x$ D- O! ]
  31. /////////////////////////////////////////////////////////////////////////////% ?! [& I: R& X% W( l
  32. // CRevAppApp+ ~( ~. ]+ l# P+ k4 ]$ ?3 A

  33. ; V/ i$ i( a7 R: Y$ H4 S7 z: i
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)/ g* V2 ]' I2 N* w
  35.         //{{AFX_MSG_MAP(CRevAppApp)$ p5 U. w5 F7 m& }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.+ d: ?- w( h+ m6 S  @2 s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    2 v1 Q# V3 k# T; C) t2 Y% P
  38.         //}}AFX_MSG1 {& D+ |2 F4 u: a( Z0 z, G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)+ s; R! o) ^" m1 z" }7 [( l' ?: l
  40. END_MESSAGE_MAP()# F8 R1 r4 _6 i1 j; l5 N+ p
  41. ' c- Q0 M* u8 s& `
  42. /////////////////////////////////////////////////////////////////////////////) V/ B: F! ]5 e
  43. // CRevAppApp construction& |' G$ B6 R, n, U$ ^) C
  44. % [6 \8 N. j! \" L
  45. CRevAppApp::CRevAppApp()# n+ K1 I6 Z& |, q8 p0 a0 @
  46. {
    % Y- d6 }9 o' G/ M0 t5 H6 g" ~0 `! U- w
  47.         // TODO: add construction code here,
    9 Q' q" ^: m5 r2 J/ u
  48.         // Place all significant initialization in InitInstance2 l- Y8 Y1 G3 f1 I7 ?  J" X
  49.   bDisplayIsBig5=FALSE;9 E; L* Q% V1 M
  50.   bRestartUpdater=FALSE;* Z" S" S- I3 {
  51.   bFinishUpdated=FALSE;) ~4 q0 ~3 Y; G6 q) z! P& G
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    - X5 e/ r) {6 v: ^
  53.   InitChangeDataBig52GBKS();$ u" t, {  E# c! r: r( j, K
  54.   InitChangeDataGBKS2Big5();  F) U9 N  H% f
  55.         //
    ! |" V! K! }' C! Q9 Z2 U& z
  56.         bClickRunExe = FALSE;! q( q. A2 L6 U+ h8 m, Y8 i
  57.         //
    2 y& O8 G+ o9 X
  58. }
    ' ]4 r3 w! m- Y  U! a

  59. , ]# l0 H, y* y3 C; I" w
  60. CRevAppApp::~CRevAppApp()
    2 g- s6 v4 s. Z* |$ L
  61. {, f' z- I% Z$ D! T
  62.         // TODO: add construction code here,
    ) f0 x0 b5 B4 r" d6 T% ]' \
  63.         // Place all significant initialization in InitInstance
    : S5 L6 S1 Y* ]
  64.   EndChangeData();6 ^- N, Y1 c9 S! ?" w; f
  65. }# L3 ^- ?( C+ w! R: U' n
  66. 8 w9 v! c8 d. C1 e
  67. /////////////////////////////////////////////////////////////////////////////2 i; j+ N% T3 `
  68. // The one and only CRevAppApp object& z8 `2 s  k- ], W) ~7 ]% c

  69.   ^" t  r3 ?  ^/ w' F: u
  70. CRevAppApp theApp;; h$ F3 O; g+ p1 A2 M
  71. 7 V8 T: @& F/ |5 i, c
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName), E# t+ e) f- {( A1 I6 l
  73. {
    6 E/ k& o3 i/ M1 h5 |6 `
  74.   int iEOF=0;
    . W) w# }, T- V* s; c1 \
  75.   char szTempName[MAX_PATH];
    . i- |3 s: e" Z" l+ Y9 f
  76.   *szFileName=0;
    ( _& J: J5 y- I; x* W) G
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ' q1 l0 D! o; @
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    " V' n0 F0 z0 Q- o
  79.   {
    0 g: ?, a; i9 G9 m# Q
  80.     strcpy(szFileName,&szTempName[1]);
    ( n1 Q" L+ O# k- E
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    # K  ~+ O8 U& m. F% E$ m+ R
  82.     {
    # S" ?( J8 N* M! @$ w4 r
  83.       iEOF=fscanf(fp,"%s",szTempName);- h: x2 ^4 u" A
  84.       strcat(szFileName," ");! u! J$ l% ^. Y5 l$ v' |
  85.       strcat(szFileName,szTempName);
    9 d9 j. e- |7 I) f
  86.     }
    4 u) u2 J, m. G0 W3 ~# I
  87.     if(strlen(szFileName)>=1)
    ) t9 \" b( U1 i; q6 n. t# J; _# M, v
  88.     {3 b. s+ j' ]" g- Y0 D( |9 m
  89.       szFileName[strlen(szFileName)-1]=0;: \( W& u, q& w, D; S0 N
  90.     }
    & H" S& S: `; |" B% r9 O
  91.   }
    : S$ U6 y  e7 R7 D" g; K
  92.   return szFileName;
    1 b7 H" f( J8 l  G- y- |5 Q
  93. }+ W2 ~7 Z4 C2 `# H( z

  94. ) p& Y+ E3 q+ b& Z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ' I( U; V; e$ k
  96. {' d% ?; K+ j6 ^( _
  97.   FILE *fp;
      R( q" u9 N7 I- G3 F; q4 E% ]
  98.   char *key=NULL;: R7 G, Z# f, D. |# m; l
  99.   char version[MAX_PATH];
    4 o" e/ Q. X& A
  100.   LPUPDATEFILE file,olds;
    ! @# l2 V+ E; d1 O1 C
  101.   std::map<CString,LPUPDATEFILE>::iterator p;8 B7 K3 @8 J6 a2 G# F9 ?
  102. " u3 V9 g: Q9 m: A/ L0 f( l
  103.   UpdateList.clear();
    1 f6 ~9 `$ C' @; ^8 v5 t& U0 y" _
  104.   UpdateFile.clear();" P% C$ S+ H: t
  105.   if(GetFileAttributes(filename)==-1) return false;
    4 h1 J' _5 S5 }& J
  106.   if(!(fp=fopen(filename,"r"))) return false;2 V# E, ]$ p5 X
  107.   fscanf(fp,"%s",version);' K  x/ F! Y. i# M
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    + P/ d0 l& M" |& R- c+ N* l! ^
  109.   while(fscanf(fp,"%s",version)!=EOF)+ J1 J+ I. Y8 q
  110.   {' x. t0 _' ?, P9 J$ I; S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 X( x/ ^$ ]9 P% a" |
  112.     fscanf(fp,"%s",file->path);
    1 N4 W; H/ [! u: N5 ]/ D/ E
  113.     ReadFileNames(fp,file->file);$ ?/ L# p* }! ~& {: Z, \! [* o* f
  114.     strcpy(file->full,".");
    3 ]8 x  i- u& ~% ~  w
  115.     strcat(file->full,file->path);
    ; v, P+ V& S' Q& ^
  116.     strcat(file->full,file->file);
    3 _$ i. B! S" V, Q" O2 a
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; z. t% Q/ x  b8 j* \  q0 d
  118.     {
    $ j% _4 w" b* ^" t. L( j$ }9 ~2 h$ C
  119.       file->vers=(float)atof(version);7 e2 Z+ V/ I, Q2 B
  120.       UpdateList.push_back(file->full);
    7 f# S1 T. r  B9 @+ p7 _/ @, S
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    : @6 d& o6 e8 A0 s+ B' U, d& u& E
  122.     }) D& ^( ]6 _9 m7 u
  123.     else1 d- z/ Q- o, c! n" `
  124.     {
    ' l/ E4 v, O+ K. C
  125.       olds=(*p).second;
    3 E0 Z) w, Y3 j' X" U, M+ e
  126.       if(olds->vers<(float)atof(version))" i& P" a# |$ O9 j& V" A2 l
  127.       {
    4 v/ C( z' W6 X& x3 J6 U
  128.         olds->vers=(float)atof(version);+ t: K, I* v% v
  129.       }
    6 \* t" H1 b( b5 \- O
  130.       free(file);' e! f' N# g. x  I$ c3 B* S0 _* u  K
  131.     }. C% a# m# q: M- i; m/ ~7 E' g
  132.   }
    $ I( M+ F" J. O( g& |
  133.   fclose(fp);; L" G* z) X& x: P# q+ p0 N/ D. R
  134.   return true;, M0 i4 l* a6 a: u4 p1 z$ w
  135. }
    6 X: q& [9 G# G8 N& f* d6 G6 _

  136. . `' _/ Q$ u+ h6 Y+ G1 r( S1 @9 u8 H
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    8 W. s4 i& z, l! j8 B
  138. {
    / I/ s: p0 R) m+ U2 t% J. o
  139.   TCHAR  szFull[MAX_PATH];1 ?2 c1 n; Q+ }) G" U& B
  140.   TCHAR *token,*inter;
    " x# d) l8 \" p" b4 f& w
  141.   *szPath=0;+ E, E4 t# U" u- V) P! h
  142.   strcpy(szFull,szFullPath);/ m3 R6 C: \- W" V% T
  143.   token=strtok(szFull,"\\/");6 Z+ z  y8 k$ Y* x! q6 N+ e
  144.   inter=token;& E4 e' z6 S: K3 |, d0 W0 r5 ?
  145.   while(token=strtok(NULL,"\\/"))- E; @7 i/ c- |. U! i
  146.   {* A6 x% t3 Z% ?  Z& R" _' o
  147.     strcat(szPath,inter);8 I- q. J4 s5 E) U# o7 X
  148.     strcat(szPath,"\");
    % y. u& h: N+ `, i
  149.     inter=token;; X& ~! k/ x2 f( k
  150.   }4 o; q! r* j; v) F0 k
  151.   return strlen(szPath);& s+ O$ B" \9 O3 ^. R
  152. }
    8 p* V  o0 K8 S

  153.   }3 w( A* G) r- ~  l0 m! L. q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' @8 ^9 E( ~8 q1 C
  155. {2 m6 N' n7 Z( F
  156.   DWORD attrib=GetFileAttributes(Target);
    7 p& p, `$ v$ ^: w4 M
  157.   if(attrib!=-1)
    + n' w/ f6 c  G! |7 o
  158.   {4 P* E" n- Y  k$ C- e( h9 E1 i
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    5 `. U  u/ ~( Q) Q# \- p& \
  160.     {4 h1 ~& P* {& F  t! D0 h" A
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : Z% n$ }# y6 U9 i6 ?, h7 n
  162.       SetFileAttributes(Target,attrib);4 K; g% {' T$ ~6 G8 H
  163.     }; _: B5 v2 i$ h. R
  164.   }
    & U8 m. d7 A* f/ l6 g" ^1 u
  165.   CopyFile(Source,Target,Erase);
      Y& J& h1 F" N3 S! e& B
  166. }
    / k# _- W* e- j1 z
  167.   }2 }5 w4 T2 X) v* Q, F: O7 q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ' j8 w$ u. v5 v. D8 A
  169. {9 T5 N; J- `0 Z4 ~: X
  170.      FILE *fp;& c! _/ T% ?0 v2 s# ~
  171.      char  szBuffer[8192];' D& j% S7 B& u
  172.   va_list  argptr;
    4 l$ x! l: v% m4 H6 |$ @
  173. : [( o! U/ H, z& V# y1 {: N* K
  174.         va_start(argptr,message);) ^( k& `! P" o; N! h/ `* E
  175.         vsprintf(szBuffer,message,argptr);: x) Y& h: _% |! {. t
  176.         va_end(argptr);  Z5 ]; L0 ]) ~5 g6 O& X, Y  l
  177.   fp=fopen(FileName,"a");  C5 r# R0 k' d( q$ D
  178.   if(fp)
      t7 U" ?3 a; [6 b: t* d9 y
  179.   {
    3 u% G! \  `! Z  o) r+ T
  180.     fprintf(fp,szBuffer);0 f8 |) i# Z" g7 L/ c: t9 D
  181.     fclose(fp);
    / O1 [! F  V$ z; J
  182.           _flushall();& e) @6 b1 w0 F) f, a
  183.   }
    6 `! k$ B: d% F, `3 I
  184. }, `* F3 w6 y  I1 r7 v( x

  185. 6 Y, t! {8 h: \# P" a. Z/ ?
  186. BOOL CRevAppApp::Fclearf(char *FileName), Y6 y9 T/ U. ]  E( S3 N, w
  187. {
    ; S! R2 C0 G7 K7 e! B
  188.      FILE *fp;
    ; Q! m5 X& C* T; L( k$ m
  189.     DWORD  attrib;  z  p" t, V0 q+ u. R& b5 q
  190.   attrib=GetFileAttributes(FileName);
    ) S5 L! R6 C( g" ~$ q1 l
  191.   if(attrib!=-1)+ r3 ~7 R9 S, ?4 \
  192.   {7 o2 @. D2 X& O4 g" J% g
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);2 ]" \- w6 E) M: P
  194.     if(!SetFileAttributes(FileName,attrib))1 j  q0 E+ p6 i
  195.     {
    1 o9 R# f$ v7 ~4 K; p5 M+ F$ @8 Q. r
  196.       return FALSE;
    # n2 ^& y; t, e1 H- X9 m
  197.     }! d3 R# Z: y; ?- P/ ]2 C2 z
  198.   }
    ) Z& q$ m  N% c* u! G2 r
  199.   fp=fopen(FileName,"wb");
    - Q' W/ A( l; m4 l) {: w
  200.   if(fp)( B1 ^* D/ Z& U
  201.   {
    ! y" u2 y$ @- X8 G) E* M/ g
  202.     fclose(fp);
    " T) m( W+ ]- U; s! m, p: D; F
  203.   }
    9 e2 f( D  T& N/ _
  204.   return TRUE;
    % J7 D! W2 Q4 n7 S( u/ p; U
  205. }" M9 b5 J4 {' h: i; ?& Y3 f, k- w

  206. 3 [2 M8 v3 T' \, x
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    4 {6 b7 p1 ^4 c8 F
  208. {, ~4 i* H* q5 p/ }$ ?
  209.   char filename[MAX_PATH];
    % |" |) V5 W: P, @
  210.   LPUPDATEFILE file,olds;
    9 Y4 Z# @4 s+ v
  211.   std::map<int,CString>::iterator i;
    8 H7 k8 J; e( ^3 I, I' k
  212.   std::map<CString,LPUPDATEFILE>::iterator p;: _' u$ y# M# C: J" Y; G5 g! ^
  213.   std::list<CString>::iterator l;) ^4 s; u( V- s4 S

  214. ( A# k  q3 J' K3 v! T" N8 M  j
  215.   if(bFirstUpdate)" {8 X# d, F0 t! e( v
  216.   {$ }6 ^& C1 v, d
  217.     dwCurrFile=0;
    0 O4 I  e% {  i5 [/ W, S5 X% N2 N* m
  218.     bFirstUpdate=FALSE;6 ?  e1 `' w1 I
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # b4 M0 C% M. d( R$ p8 C/ W
  220.     {, F& x+ i: S) {  I/ V
  221.       dwTotalFiles=UpdateLocal.size();
    * X* X/ {2 P) e
  222.       dwDownLoaded=0;
    / O7 u) _/ Y0 d( r, v, e1 V9 G9 x
  223.       bSilentStep=FALSE;
    . y- Q/ t- z6 I8 k) e
  224.       bCompressed=TRUE;4 O( d8 {0 ^6 k% h
  225.       strExtLocal.Empty();
    6 W# E" p  s5 Q
  226.       strFullName=(*i).second;
      L4 C, L" u: H- D% L; D
  227.       dwProgramState=AP_CONNECT;9 A9 D) m- f: b
  228.       return TRUE;3 j, W' {5 B% e' X( n2 n: Z$ [
  229.     }
    ; [6 R- m5 M+ s  R
  230.   }6 k/ B+ P6 U7 T/ s0 Q' _
  231.   else if(bRestartUpdater==FALSE): u2 V; W: b& x4 }/ S2 Z% p
  232.   {
    % o0 ?2 x4 q& t5 @$ j$ _' q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())" q! r$ x6 G7 k9 i! ]" W, P
  234.     {, B4 n1 v+ s& N, A
  235.       file=(*p).second;
    9 e: a$ r4 k2 c
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())6 E$ [/ m: C) A; t" w
  237.       {$ w  ?: e' ~2 H4 U- \# |1 u
  238.         olds=(*p).second;
    * e3 P' N( x4 M0 s/ ]
  239.         olds->vers=file->vers;7 B( O* T& _& e( L- S
  240.       }
    3 d; f2 _; ~1 d
  241.       else  E' ]8 W  U7 ?
  242.       {' A5 ?. t; {# x. S; @9 E+ L
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 l( D: \. X- Y0 {' Y- f
  244.         memcpy(olds,file,sizeof(UPDATEFILE));" F. T' ~& |( O
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));+ F2 x, P0 s# N
  246.       }) q% z& V; P5 d$ Z+ m  _1 s# x
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    / z; ?+ e, E: _: ]2 O
  248.       sprintf(filename,"(%s)",file->file);
    - Y3 b' A: a$ t9 B& b: b) N
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: m& K2 H& W* U, K/ H
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    2 Q8 s! P6 E1 T; C" w8 n
  251.     }
    5 y! _- Z/ v" j
  252.     dwCurrFile++;
    0 v; {& H+ f' M' C/ C
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& @' m  ^' |$ F* ]
  254.     {; b4 j0 ~8 r" `8 }3 H0 P6 `
  255.       bSilentStep=FALSE;" n$ H, [* g7 e! |
  256.       bCompressed=TRUE;+ f( o, a. \% M, V# @3 |1 P* s6 u
  257.       strExtLocal.Empty();
    9 L4 q0 c3 V  h1 x( k: m
  258.       strFullName=(*i).second;# Z3 Z& o1 j2 L8 V2 x( f+ B! K
  259.       dwProgramState=AP_CONNECT;
    2 j! j# |0 c3 M* M
  260.       return TRUE;
    0 i2 [2 p/ S4 _: o, C5 M( l
  261.     }
    & i6 d3 j) ^$ |: N5 V
  262.     if(!bRestartUpdater)
      y3 l" U: p0 F! G. {$ C
  263.     {
    8 X% ^: t- K% C% R2 M- f+ L
  264.       int iCurrSize,iFileSize;
    , q; @, p+ ~7 t4 H% r- w
  265.       iCurrSize=0;' d& G+ `  w& b$ F- C6 m' G
  266.       iFileSize=UpdateList2.size();0 A7 I' W9 }: [( a
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");6 v# l# R( H) ^' R5 L; b
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    " n+ _0 @" [) T0 L. x/ q. s$ O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ) r" R+ f! @# W2 \$ J% @/ H/ N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 d, y0 k( W: Y+ D2 d$ @
  271.       Fclearf(".\\update.dat");
    8 Y) c  D2 u5 X& |
  272.       Fprintf(".\\update.dat","Bloodyf\n");* g+ D5 x5 j0 U+ \4 s& @
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 a# T0 p: H( Q/ p9 z6 \& x
  274.       {! [5 \1 j' B2 p
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())# C2 C$ T8 m  v; n
  276.         {7 _5 `- B8 S- u( e9 q/ _0 K! v
  277.           file=(*p).second;4 U% }' }/ E: M+ z# l7 `
  278.           sprintf(filename,"(%s)",file->file);  @' f$ o& G, U: Y% _$ ]3 @- Q
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; D2 J4 m; ~( e6 ]0 d' k' c
  280.           iCurrSize++;, \' q+ _! M7 d
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: E& B1 i* ~& F. z- f8 T1 u6 R
  282.         }
    " X/ d0 C$ |0 Y& `
  283.       }
    2 g; {& Y/ C5 ~4 n" s1 K0 n/ X
  284.       unlink(".\\update.txt");- a5 |& A7 g' e, G8 ~% C
  285.       unlink(".\\update.tmp");# _0 V9 b2 S$ v5 ^
  286.       Fclearf(".\\checkversion.dat");3 O( U/ l; h/ o7 H( x3 w7 F
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    & m. ^* u' Z4 n2 x1 ^* G
  288.       if(UpdateLocal.size())3 Z, J5 i; s  W, }( m- |; \2 w
  289.       {
    " i0 ^0 R! f) o$ {7 W$ U
  290.         UpdateLocal.clear();
    1 I' c4 y; C( k( S& X
  291.       }
    8 z% e* f: g  D; _' U4 C' S% [4 {
  292.       if(UpdateFile3.size())! |: j  y8 M- |! A7 N' E
  293.       {# P2 o2 w$ _" e8 Y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ S( ^9 l( R+ `: R  @
  295.         {
    2 G+ }+ D, U3 n' {% v6 m3 A8 G
  296.           file=(*p).second;3 @$ I3 l2 }5 `7 h4 B
  297.           free(file);
    4 m! o3 }$ K1 Q
  298.         }$ E4 g! U( @, z' J* R0 K% a
  299.         UpdateFile3.clear();
    - c' u. |* i4 s% @6 U1 Z2 ]
  300.         UpdateList3.clear();$ i5 ?- \5 t/ M, z7 S; X+ p
  301.       }
    * @/ x9 D! W! o% Q2 E' M5 W
  302.       if(UpdateFile2.size())( b# O$ z; w) S- ^! t* z0 H
  303.       {7 Q8 l9 g* q1 T! s/ Q" o
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 z* A& W! A" G9 A+ i) o
  305.         {
    6 g3 ]. \, ?- k$ @6 f
  306.           file=(*p).second;
    $ b: \0 P) v4 `3 L7 Z
  307.           free(file);
    3 O' r8 d+ s, v0 a
  308.         }4 w5 I( c# Y7 k1 h$ o
  309.         UpdateFile2.clear();% c0 @9 X" @. ^$ \. D
  310.         UpdateList2.clear();
    + k8 Z( ^- u' ]% r$ K
  311.       }
    8 x- p1 Z) l! a! W  ^
  312.       if(UpdateFile1.size())1 R/ _0 f% K  Z+ G! s/ j2 P
  313.       {
    , j0 y7 h6 |; J* b; R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / h4 R" b  q) ~
  315.         {
    2 E6 p5 n5 D4 U
  316.           file=(*p).second;( R$ r" j' {. {/ F  k9 I
  317.           free(file);
    . \2 Y; s# \# g, s* O! k% L
  318.         }0 c- n; b, L: A2 |
  319.         UpdateFile1.clear();
    * o; R5 |. O' m# z- u: v& m
  320.         UpdateList1.clear();' C" J) y4 a. {5 B# G6 t( T% t
  321.       }, l+ A4 M+ w5 U" Y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % t% \8 G2 G+ O4 E3 @* u
  323.     }
    ; j3 j( o' b. z0 H. V& I
  324.   }
    4 t1 S7 [8 ^# c( W6 I
  325.   return FALSE;% r- P' m* x# l
  326. }  [( I/ p) W1 x. v3 n! E2 E

  327. 5 M0 f/ x# z! H/ m; F
  328. void CRevAppApp::ClearAll(void)/ R& W' Y/ _5 @3 m% r, d7 ]% T
  329. {
    4 @3 |* J- I  x/ z2 S  j
  330.   LPUPDATEFILE file;5 L& S8 G& Z. B; z/ w/ r
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * t. v. s5 D4 G* I5 n4 d+ L
  332. 4 i0 s" w$ l% W1 I8 n3 `* L% M
  333.   if(UpdateLocal.size()): l3 z/ s' u3 ?' n+ k0 J& ^+ h
  334.   {: O. h& x% V. {, n' b
  335.     UpdateLocal.clear();: ^/ l+ l7 h. X1 i; B3 z
  336.   }4 z, m' p/ x2 B6 x6 c
  337.   if(UpdateFile3.size())5 [3 e' c2 S$ q" Z2 [' E
  338.   {
    + W; @  P% p) ?5 P  o
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- M3 h% B! Z  `) ?
  340.     {
    6 _+ n5 b; A/ s6 G" e$ @' F& C2 M
  341.       file=(*p).second;
    / {' a8 S: h: c$ E3 i0 E4 \& B
  342.       free(file);# r- ]" N$ h% E6 D6 S
  343.     }
    " O  W( V3 v; a& L0 k
  344.     UpdateFile3.clear();
    ' B' x0 d% l- C2 [
  345.     UpdateList3.clear();  T8 I+ s) @( R3 ?3 q, `  q+ E0 q
  346.   }
    ( {5 P4 s5 m/ B& O
  347.   if(UpdateFile2.size())0 [, n! D6 F7 f' {- _
  348.   {; B3 j2 `1 C# `5 J
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)/ O0 o) J4 G7 l6 m
  350.     {
    7 z% H: K9 V6 R) Z, [
  351.       file=(*p).second;! |7 k6 U$ l2 u6 ?; i2 C6 a( K
  352.       free(file);+ Y1 s  W$ b4 F
  353.     }3 W6 [& U  i5 v  J8 K4 o. M$ `
  354.     UpdateFile2.clear();2 d0 y# y, h7 M9 W; X
  355.     UpdateList2.clear();
    ; V* B3 Q- H2 F0 P
  356.   }6 A" Y0 W. P9 J; S8 ]
  357.   if(UpdateFile1.size()): ?* s2 v$ i+ x' \' F
  358.   {
    / F0 v+ z; x6 W# J( h3 z4 ~8 k% Z0 V
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 d/ e8 W- r$ d1 ^
  360.     {
    " b' P, M+ t! `& O
  361.       file=(*p).second;9 H* E) H$ J+ L1 B3 z1 X
  362.       free(file);5 u& x3 w/ K. R  E0 z, V
  363.     }3 U1 D8 T/ H* w$ `  Y, t! p# S
  364.     UpdateFile1.clear();3 c3 F6 H6 y7 q
  365.     UpdateList1.clear();. j. R1 B* d, X4 g  q& w, P
  366.   }
    . S# _' _* w  c. Z6 z
  367. }  3 R# S; Q2 @& g2 r0 S
  368.   
    ( n2 x$ i3 a9 b8 e' H- b
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    4 c- |1 Q" X5 r, x
  370. {
    ) y9 D% n* [$ i# w
  371.   int c;
    % p, z5 O; Z& @2 I/ Y9 p
  372.   LPUPDATEFILE file1,file2;
    ' d5 x/ F; }; O" Q$ ?7 h
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    3 \6 o$ c) ^+ @8 W
  374.   std::list<CString>::iterator l;  u/ C" T6 ~2 m0 `* |
  375. 1 ?% H2 N% s6 j  m- Z
  376.   UpdateLocal.clear();
    # K9 |" C' C! [6 y/ }
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);3 y( R% P/ o4 r  j
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
      E6 g/ ^/ Q. o$ ?  O+ z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    0 G* @& J7 X9 V# F$ C% b1 M) T
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ( k" M: J! j( T: q! I0 J
  381.   if(UpdateFile3.size())+ p. ]( v$ _% d
  382.   {
    0 W; k; K- x, T+ z' `; k, m
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)% r5 X9 n) n' S/ L& M3 e: E, \, c
  384.     {
    ) D' Y( Q5 [, \, r: ^
  385.       file2=(LPUPDATEFILE)(*i).second;
    ' ]+ Z# }& i0 [' l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())/ X' a. j+ X0 Y- ~0 B$ b
  387.       {" z' V# q) _/ [* V4 b! L2 e) d
  388.         file1=(LPUPDATEFILE)(*p).second;
    3 q. y) @- j* s6 H5 o1 [' K0 r
  389.         file1->vers=file2->vers;
    8 u, H8 i/ Z; m( I; s; v
  390.       }
    " D, \0 j% C1 }+ w, \4 i
  391.       else+ y, a- b+ s; ?9 S0 i; W. K
  392.       {
    1 W. y* ]1 D6 ]% \# a5 q, \+ ~
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & z. K5 V( u# R- D
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 E: G8 T7 p# V7 i2 ~. a  P
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));0 W) h9 V4 \9 {+ c1 u/ j8 H
  396.       }5 K5 V9 [0 B- g" {; G5 k  ]  u
  397.     }: o& f8 D( d# n+ p; P
  398.   }* w2 o, Z3 l1 \/ A% R
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 ^4 x0 I4 H0 Q* P4 J
  400.   {' l& b) _- u* z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ) t" G1 S9 d' G* a9 R; {
  402.     {
    7 w" l' F% c' x. K) c" x. C
  403.       file2=(LPUPDATEFILE)(*i).second;, z( {: e) a+ w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) J$ V$ _2 p. }$ b
  405.       {
    ( ]$ H* r0 v, u1 Q% W
  406.         file1=(LPUPDATEFILE)(*p).second;0 b1 ~" L& n; ^4 p2 f
  407.         if(file1->vers!=file2->vers)
    9 W3 \0 ^' |- i. ]. \7 y$ V
  408.         {
    0 `$ `' O! r$ Q/ Q* D
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) L' U' o8 V& y: B$ [1 ^7 v' ]5 x6 d
  410.           c++;  f8 G: P, B6 v
  411.         }
    1 z, n6 h) W8 ^
  412.       }$ U4 @; t# B8 D& Q8 O3 m: C
  413.       else3 _( J3 U& Y2 u, l9 x  Q$ L4 D
  414.       {1 m' \0 Q* h  X
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ h  e1 v& z  c$ P; B
  416.         c++;& E& u( p: l8 {# k; }
  417.       }$ K2 g1 k2 `! F. ]5 Z2 O0 f
  418.     }
    5 F; O  w* w. C( D
  419.   }
    : p) `9 G* k' `& f$ n& f. s
  420.   unlink(".\\DownLoad\\update.txt");
    8 }/ F* d& }7 g& ^
  421.   if(UpdateLocal.size()) return TRUE;+ Y& @* K' g( f/ f4 I- P
  422.   else                   return FALSE;- m  y  a  f' T+ v" V+ ]7 z
  423. }! u! m* p( E, \) h

  424. ) ^8 @, d) X) a+ m/ E9 p
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    8 e' M! R) N1 c* K5 `) I9 T+ X
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"5 s9 \9 c9 e& q, ?+ P& N

  427. ! ^( |; I+ N. C( F+ `; ]
  428. ; [' _( L7 X% ?, z5 r" @/ q7 `
  429. 9 U2 |/ V# H; _# {; q0 Q/ |
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( ]' \9 L% _: @5 U3 b
  431. {
    . d! _; w$ {% X5 k* w/ T" S
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    : V2 W( U8 m# I
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 u9 f. R+ _9 p) m" I5 w# P
  434.   {- W9 T, ~; G4 e
  435.     char szLanguage[50];% W  z# W! t  e3 Q2 H$ K) f
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 A: y0 V/ ?0 H4 `  p
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! B' w& X6 S6 N2 a1 h
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& i; {8 X) `+ c
  439.     else                                   m_iLanguage=ENGLISH;: h4 W. b* P6 {+ h5 Q) \
  440.     char szRegister[100];4 o* x% y: J5 ?/ L4 g0 [
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 x6 r) G) A/ Q0 l8 m  \; e5 N1 O
  442.     strRegsName=szRegister;9 K6 f% {! X! d% \/ C( u" x3 X
  443.     char szPatchURL[100];) s, u& A+ t) S9 E5 x, m. M: F
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 d+ b/ g! M1 W/ j. ?/ ]
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' ?. a2 G. ]) @1 i
  446.   }
    - n; E0 s' G' G0 x7 G
  447.   else  p" Z2 V3 T# O. a
  448.   {
    * O4 L7 z6 \- u/ E( d; v# V
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);' O, X% E8 X4 J: i. J  B. o3 ^2 ~
  450.     strRegsName=DEFAULT_REG_URL;( @- G7 i1 |# Z  O: _( y6 l6 s& }1 e
  451.   }* a2 R  u; i" V' g2 B
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    0 `7 c/ i/ u/ x) s4 b$ @) s7 m
  453.   {5 i4 e) q8 k' A3 t5 d: _
  454.     char szIP[50];
    8 f6 Q* _( G' }7 S% ^0 L( v: Q
  455.     char szDIR[300];
    8 t# |( K2 S! m# e) [, K
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
      h" }' W; X! A3 ^0 J
  457.     {* Q# ]. B" G  e- R
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");& X8 u  a/ g1 J. c2 J: M# M
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");1 B+ h2 m; x& o  x; ^  v# g
  460.       strHostName=szIP;; c2 A- |/ u( S4 T
  461.       strHostPath.Format("/%s",szDIR);: @4 b0 E' X% d# _
  462.     }$ L7 |' c# P- M8 Y
  463.     else6 M, w& G6 Q) x! m6 S8 |4 |, p  T
  464.     {
    7 _4 F$ ]* T8 q' P  z2 F
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 X! ]2 W5 e  t/ Z5 ^% i/ L# s- \
  466.       {! _; x; v; u3 g" P8 y
  467.         char szLanguage[50];
    + ^3 ?: |" U/ ~& r; W, R( Z0 y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 _0 C! D2 ~) G# C( v0 N
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * I4 m+ o) L* |& E
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ n0 q/ S4 z$ z0 ^' b
  471.         else                                   m_iLanguage=ENGLISH;
    / [+ L: }3 F$ P/ d2 I: l6 b
  472.         char szRegister[100];( J; l: e$ u- F/ Z
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' B+ Y5 ~2 ~# G+ ]* t
  474.         strRegsName=szRegister;
    ( a: ]) F7 ]6 l8 ~" T- P7 e
  475.         char szPatchURL[100];
    * `8 k3 \  C! @  G% m0 D# W
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    & y! k# y* x, m2 I3 n. C6 ?
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 I2 E7 o5 _5 ^: c, Y
  478.       }
    0 S% d! J& a% p4 Z! s
  479.       else
    , b9 ^7 }% Q; r1 V6 y9 H/ C
  480.       {
    / E( `- E7 R( ?. ?
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 O3 Z3 N5 f: d3 F& U; t  ?& t
  482.         strRegsName=DEFAULT_REG_URL;
    . H6 x. @4 q! s3 O+ b% p/ ]4 z
  483.       }5 o8 f' q* W: r* }
  484.     }
    ( X* r# U: I& i+ V5 S. J
  485.   }
    ( W5 M1 D3 X( z6 d- H5 Z1 _
  486.   return true;
    & W3 E' B' r! {1 a6 n" j% A* U
  487. }
    9 v  q# M% v$ V9 \& {" s

  488. * k7 S2 f: X. G8 Z
  489. #include ".\ZLib\unzip.h"
    & B, F- H' Q" L# H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    " b- V( k  j) M0 y
  491. /////////////////////////////////////////////////////////////////////////////$ q9 f* d# }: N
  492. // CRevAppApp initialization
    - P5 s9 g9 M" Y9 b; e# y! ^
  493. ) _# B- h# y8 E
  494. BOOL CRevAppApp::InitInstance()1 I9 Q& {$ i: ~2 b; D
  495. {
    % W$ ^) ?$ e$ ~, H/ \4 }
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];# O5 q) \6 s$ m% S, \. t, t1 \; S
  497. ! v9 O( ?7 o: p' v+ z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);( v3 q! q- D  W7 J( s
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" C2 v8 D7 X' x% R; @- Z8 H' Z
  500.   {, W1 T/ _. B, m5 i2 A
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
      r' q0 K9 @) s% I  \/ `
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& R' T7 h7 N+ s9 F
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))): U, B& B5 K1 @* T! J) Y8 N
  504.     {
    * F1 Z8 Z1 s7 B  f* a2 n
  505.       strcpy(szPath,szPathTarget);( H1 _! u+ K) t7 Q& ~
  506.       SetCurrentDirectory(szPath);
    . i. u7 M" x, e
  507.     }6 K( ~* E0 k! ]1 Y( \/ K
  508.   }
    " N3 F+ g% O- A
  509. #ifdef _DEBUG
    / U3 i+ o1 }3 t0 s
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))# ]7 s! o3 X! b( n; q1 S9 k* W5 I7 J
  511. #else
    - w1 o- A) E% J. \- Y% W
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ T  y. L% h0 S1 b
  513. #endif
    , z2 d; f8 v. w, c* E
  514.   {" |1 J' v* e6 v- P
  515.     char tempFileName[MAX_PATH];
      N4 U8 m+ O. p  p- y
  516.     strcpy(tempFileName,szPathSource);
    6 L7 W/ X% B1 f9 _6 \' J! w  ?
  517.     tempFileName[strlen(szPathSource)-12]=0;5 l) V2 u  T; E
  518.     strcat(tempFileName,"\\$CSUpdate.exe");% B5 l( O% R, d! _% T  K
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    # |# [; K- ^* w% R
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);2 n5 y8 Z: q0 R- i
  521.     return TRUE;- A8 N6 j7 q2 [4 m5 G. S" U
  522.   }' s! Q$ O7 g% J2 p
  523.   // Nuke 0118: Delete run.exe
    ( h) j6 `4 f$ j4 {: `
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    6 W" M3 i; P1 [9 {  r
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    7 R2 S7 p* F: S) a8 ]4 [
  526.   if(!ReadCfgFile("Config.ini"))- K- U: w' z; e1 J
  527.   {/ q% o+ x8 g9 [1 K! k( e
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);, f# s( Z' y! k0 Y1 w9 E
  529.     return TRUE;) J) z3 p1 F& `  n- ]2 b7 {
  530.   }6 B. ~# u7 z5 b8 k; j; `
  531.   HANDLE mutex;3 Z/ x& B3 A( q" \8 S1 g1 N3 \$ V
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    , C6 p5 d+ X6 s( Z. Y
  533.   {
    9 ]) A( J- K1 h9 ?3 U3 ?5 Z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)) N3 p6 e5 L! o8 t) ~6 p
  535.     {
    0 R( N! J5 v+ t( u$ \
  536.       CloseHandle(mutex);  r' \8 x+ s5 Y( u$ U1 h
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ( n! Q3 g$ v$ O8 ]+ b
  538.       return TRUE;
    % C" ?) n3 `* p# M" N& I
  539.     }
    / D! _% x; f) Q# k  Z
  540.   }  * e  x/ Z6 A: O7 J
  541.   CloseHandle(mutex);4 b, y2 ~/ \, K9 r  ]$ q9 d
  542. + l. K6 N" x1 K7 n5 U  V
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) c8 X& q% e1 m4 p6 l
  544. 8 J( d8 O+ I5 B% y
  545.         AfxEnableControlContainer();5 ]6 @5 I& H7 j5 q6 z) |
  546. # l% R$ |, q* d# M: p! ^# K
  547.   bCanUpdate=FALSE;7 N( f6 X& f( J* Q3 q9 S
  548.   dwStartUpSteps=1;
    1 K* {  ^- L- ?, e( p( Z
  549.   dwProgramState=AP_NOTHING;
    ' P2 G2 q" W4 u( o
  550. ' E# y) Q* b  D0 L' }1 @
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);% H( n- x  r# u$ k$ b8 s  M

  552. & p' P4 v: `8 s2 W; }8 b
  553.         // Standard initialization
    ' _" z9 Y( k+ p- m
  554.         // If you are not using these features and wish to reduce the size
    / V+ `: Z; `% s8 Q
  555.         //  of your final executable, you should remove from the following* l9 e" u, @5 T: F6 v; S
  556.         //  the specific initialization routines you do not need.$ u* q* S6 X4 G
  557. 0 N3 Q: t6 }5 r9 ^: N0 w8 u' ~1 R6 M
  558. #ifdef _AFXDLL& s8 H( y! [5 k! \- i, }6 z* [
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    % r# z" H! `- w8 B2 R
  560. #else
      N9 h2 I0 B) E% d# B
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    7 M* R( F/ W$ F' I3 j; H) H: @$ G
  562. #endif/ g1 w/ f9 i3 h. l9 x0 l0 e
  563. 4 X- _6 T* D* R' x
  564.   dlg=new CRevAppDlg;' x: `' V/ J- p4 i9 s6 ~0 B! r
  565.   dlg->Create(IDD_REVAPP_DIALOG);$ D0 u, U  t/ ]* \
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    # {4 ?. f: N# m1 {& S5 ^
  567.   m_pMainWnd=dlg;
    6 P5 t$ d4 B7 w, d! R1 D+ P

  568. 8 b3 R+ H& R# E/ K% j/ G5 I6 k# E
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ( M+ H. H& N5 d  H4 G# m

  570. # R) c  H2 \& y' ~, [) s5 {
  571. //  GdiplusStartupInput gdiplusStartupInput;
    " z9 b& M6 ~# u3 z( M
  572. //  ULONG_PTR gdiplusToken;& h: e( N( x  L% S
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    % t# P6 J1 }% _# g/ ?" K

  574. + e- `: |# Q* q) s7 k+ l
  575. //        CRevAppDlg dlg;
    * X2 I0 B3 D+ k
  576. //        int nResponse = dlg.DoModal();
    / C9 s0 E6 v3 [; Z
  577. //        if (nResponse == IDOK)8 l! W9 a+ o7 U: @
  578. //        {' ?7 U4 {4 c5 L1 `) \
  579. //                // TODO: Place code here to handle when the dialog is- T1 Y, m: ]+ @: ]4 X6 R! U
  580. //                //  dismissed with OK
    5 B( a" u' v: d5 L; o1 \! Z* n1 R
  581. //        }
    : k# o: M$ t( H8 r8 X' m0 b
  582. //        else if (nResponse == IDCANCEL); X+ n5 e. z% a# n7 p3 B" k
  583. //        {; T$ L1 y. y2 f$ g6 m
  584. //                // TODO: Place code here to handle when the dialog is. B/ f1 r- O+ P; F$ {
  585. //                //  dismissed with Cancel; l' t# [7 l2 x: m& d3 q. o' ~; m; x' H* r
  586. //        }7 B( }% `0 W) z
  587. 5 V' F% b& K: C; z9 A) M5 z
  588.         // Since the dialog has been closed, return FALSE so that we exit the* p+ r5 q0 G' u* ~7 w5 R6 T, Q% L
  589.         //  application, rather than start the application's message pump.) Y8 v: b* h# h) n" U) D/ Q2 @
  590.         return TRUE;
    + X' e2 F# }7 V* U/ u
  591. }7 v; Q+ Z/ I! a* H( e. X
  592. + `. M/ w3 K+ y6 X5 e; T- C
  593. char *CRevAppApp::strtok3(char *pSource,char *token)' h  [, U7 f  U* f8 T
  594. {, I; W' x" G) `; S$ `
  595.   int i;
    0 ?. Q& W5 z. v  l' ?$ Y9 a
  596.   char *szRet;: F) |$ \+ T1 o- g1 ^; D- S9 h0 ?

  597. ( A( w$ q6 s9 ]+ Q% r
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    8 T# ^; X  p9 t
  599.   if(sztoken). k/ l1 U4 G$ @  t, z$ C
  600.   {: E* F2 g/ Y  `% t/ U
  601.     szRet=&sztoken[itoken];
    , u- b" O1 ?! L# c
  602.     while(sztoken[itoken])) Y+ w8 _2 ?; Z0 ]: s: m
  603.     {
    0 V5 n& g8 N) Y4 u1 X1 R4 o. Y
  604.       for(i=0;i<(int)strlen(token);i++)
    * H2 t7 f, d  q
  605.       {- G) W" ?) D. ~9 u
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    5 q! `5 B& {: [. i% F* D! V9 u
  607.         {7 V6 F+ p2 h8 q. n; g' R
  608.           sztoken[itoken++]=0;; ^; _' z; ^3 h
  609.           sztoken[itoken++]=0;
    ' p9 P# S) n7 T( Q$ t
  610.           return szRet;( V$ X) [: \  `8 r" t, l) Y
  611.         }/ }. f. `6 l4 a+ f
  612.       }
    1 G# u: Z* Z! N! C$ r
  613.       itoken++;8 q; M5 S# U0 h" N
  614.     }+ V; F9 V0 B) D4 Y! b
  615.   }- e  D# d( G6 f% H. S5 @- m& f9 h
  616.   return NULL;/ d( o# C4 m# U
  617. }* n, Z) G9 Z+ q' m
  618. 4 \% E2 G1 v4 A0 |0 J6 M
  619. void ProcessProc(long Total,long Current)0 S- W$ _9 K" z
  620. {  R& F* G* Y) ^
  621.         MSG msg;
    2 n; u; _2 N6 L% I/ m& d6 z3 ~
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);5 S! _; H7 h  [  E. k; P9 ]' E6 R
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ! f+ U( J! H9 }8 K
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ; \/ r# R* J! }2 N! r) |
  625.         {. O5 M) \9 N3 e
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ) n+ x, Y5 q( n; N
  627.                 {( }- R8 P2 T- j' J+ N. r
  628.                         return;6 H( F+ N, O( q/ v2 Q; u0 n
  629.                 }
    ! ^, q6 [. `8 ]/ D. C" W' Q  L# c
  630.                 TranslateMessage(&msg);/ `8 n# ]+ X. a6 B3 O- D
  631.                 DispatchMessage(&msg);
    ; \9 y8 J1 c. ^! z% b7 E2 t, t- k2 ~
  632.         }       
    + O" `) {$ ^' A7 v$ ?
  633. }
    $ X$ |: T% k* M3 N- d6 t# g/ W# `# _& @

  634. ; Y# j$ m4 W9 j+ k' Z
  635. BOOL bFirstChar=TRUE;8 b' L  e' d0 X* l) e- N4 w  U
  636. 8 p2 n5 T$ e8 p5 A/ c! W5 p
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 P! V) f: O' h0 F+ `/ z# d' t
  638. {
    " W# F% H) r. L
  639.         // TODO: Add your specialized code here and/or call the base class5 p3 z' i$ B  T2 h# p! c9 L9 w' V
  640.   switch(dwProgramState); J" P* c$ W) N/ C8 g# U
  641.   {
    / G6 r" v) n# u: j3 i2 q1 U
  642.   case AP_NOTHING:
    - C1 ^. g  ~3 E% o
  643.     switch(dwStartUpSteps)( R" V  P2 @; j* a: E6 o
  644.     {! m& J. R9 s8 }- j. E  A) K
  645.     case 1:0 G( y* A9 o* _' p( Y
  646.       {- o) \$ k, R/ Y  m4 i
  647.         int i;
    6 x3 k/ Y4 B- R( Y4 p4 B
  648.         CDC *pCDC=dlg->GetDC();$ Y& \" T6 L: x, ~+ l; X1 [0 h
  649.         HDC hdcwnd=pCDC->m_hDC;* L% k7 h6 B1 b2 F7 k" A
  650. //        Graphics graphics(hdcwnd);
    + g& b) E9 y7 e9 e: ?
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    8 H! h4 Y7 [: p  P) x" `* ?# G
  652. //        INT iWidth=bitmap.GetWidth();2 y8 i3 M" u# a* n; H  V, O+ T- ~
  653. //        INT iHeight=bitmap.GetHeight();5 ?; `4 _" ~9 n6 D8 ]
  654. //        Color color,colorTemp;
    ) X' g9 w9 s* Y! Y; I1 [" }: @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    % b4 I& L& n5 y6 _3 ?
  656. //        {/ H* O* e" a6 M% _* C6 P( n) M
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++); a9 @8 N- v2 N, ]( r& w8 Z
  658. //          {
    8 ]0 p, H! k! z4 _$ S- B* k
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    6 a/ |) V' M* V! B5 a
  660. //            colorTemp.SetValue(color.MakeARGB(
    + J6 C' [9 O3 t8 J
  661. //              (BYTE)(255*iColumn/iWidth),
    0 _( i% b/ u" f; O8 h1 S
  662. //              color.GetRed(),
    % z5 E' x6 ]' k8 W9 e3 K  D" d
  663. //              color.GetGreen(),2 U0 l: l6 e! B3 a: U5 Z/ ]
  664. //              color.GetBlue()));
    : ~9 k: C5 H2 g8 U5 g* a% I  c- H. S+ W
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);" ^2 [6 p: V- D# G2 l
  666. //          }
    8 Z4 g$ p5 W0 p4 p1 j6 |
  667. //        }: S/ _1 a2 j( P
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);) p9 |4 p$ `: d9 N8 c# t
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . g% R* Z: c; W) t& _5 Z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");! |% X+ P5 j" i& \3 e
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! x9 |! s& i5 V
  672.         for(i=0;i<240;i+=8)
    ' H" T/ T( Y+ u8 r  g
  673.         {1 ]5 a1 f% i7 c) r1 `
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ K( i& h, F  u4 N
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( H5 L+ E' d& }9 M
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- c+ |2 @. B9 q
  677.           Sleep(33);3 C4 c* J" V9 R7 b9 a' ?/ t: o
  678.         }- J% j. @. h: B0 N5 q4 c
  679.         Sleep(1000);. w$ {4 f! k$ ^0 ?( K, o4 p
  680.         for(i=240;i>0;i-=8)* G- n7 y. N1 J' E$ @, e% y
  681.         {7 M8 n2 K+ j/ ~6 |
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . T8 |* i) ~1 b& @! e
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! n8 c5 O0 N4 k. u! l
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ |# I6 c4 X9 x+ w
  685.           Sleep(33);
    ; ^$ z4 C6 c; i9 O" Y+ v4 L
  686.         }
    . a5 [2 b6 ?) `, Y& T" P( p
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 P& F; v; @7 y* s
  688.         dlg->ReleaseDC(pCDC);& T, C% h9 @/ C9 z' s0 Q1 d3 z1 r6 Y
  689.         DeleteDC(hdctar);
    ' m3 {7 D) h' I9 T7 J+ B  B
  690.         DeleteDC(hdcsrc);
    9 }+ ^, B1 F0 j2 k. n$ H+ i+ v
  691.         DeleteDC(hdcorg);4 e  b4 W& w) I
  692.       }
    0 u  S2 u# l' A4 Z- ?
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; i+ a! z) E0 O. b5 ^
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");& G# l+ [( r; k: Z8 M. U; p
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");8 w" m/ E5 j, N% F1 s0 S3 S2 p% B
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    " M% m) A9 d, s5 r- V
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; o8 R. M* _+ [" x/ b+ c
  698.       if(!Dn.Connected())' |/ M5 X- b5 [1 c+ K& k6 A( t' y) J
  699.       {# l; S# i% ^% V2 H$ n
  700.         dwTotalFiles=1;' P8 ^0 W! N* T9 B
  701.         dwDownLoaded=0;
    % c1 u% L/ j& T: C
  702.         bSilentStep=TRUE;
    + P% E! V% @& R) ^8 Y( M
  703.         bCompressed=FALSE;% k- ?" o% e; T& T1 E" Y5 m1 y
  704.         strExtLocal.Empty();2 G* ?& T6 B" S' r" _
  705.         strFullName="readme.txt";' Y- Q. ~$ z8 T, e2 T2 p
  706.         dwProgramState=AP_CONNECT;
    + N/ \7 L, B% r$ F# G; \& O0 s( |
  707.       }1 n& |( c. U: r" w, U
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();* q; t( q/ t( X
  709.       dwStartUpSteps=2;% E. K$ V4 @: k: l" l. @3 H
  710.       break;0 c( j1 a' D& z3 D7 T& q- m
  711.     case 2:! R9 h; B5 w' U7 h
  712.       {
    & C' A( L  B( O/ \! H$ h0 B8 Y
  713.         int iEOF;4 A* H  j/ I. O* R6 ]1 z' x. L- ^: B
  714.         FILE *fp;3 F, A+ Y) H  r
  715.         char szString[512];
    4 r5 X2 g% [' O' e( _6 v$ g
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");! [* T/ A( J8 k4 X& z
  717.         if(fp)
      Q4 |) Q4 q' V
  718.         {
    6 c; ?$ M0 b2 G, l) R% l
  719.           do
    & ^" I  G- l8 j  z4 m9 h/ s+ Z7 I
  720.           {& V* A( o# M$ n$ M1 M
  721.             iEOF=fscanf(fp,"%s",szString);
    0 ^7 P& A; z8 m0 m; w
  722.             if(strlen(szString))* N5 ?) u5 }' n: O
  723.             {9 p, ^1 h" D' }" d$ r3 ~4 n
  724.               if(bFirstChar)
    0 g; I9 c/ }" C
  725.               {2 a2 y$ V1 c$ v. J; }$ ]; Z6 {" A' L) N
  726.                 bFirstChar=FALSE;
    ' m( L& o2 i- |7 V+ k& o# X% ], e
  727.                 bConnectIsBig5=FALSE;5 f" |, u/ a6 q! ]6 _4 E2 B4 a" h+ V) K
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! c, Q7 p2 g0 s. x
  729.               }
    ) ^2 A$ p1 ?4 T2 q" I2 u; i! N& d
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));4 p' n' z2 b& t* c
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    7 M6 s+ Q1 o+ A$ F! S1 e& g$ r
  732.               dlg->m_ListText.AddString(szString);
    * @# J: J9 \: O& w% v! z+ S) W5 u
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & o" k1 p3 A8 I$ d% Q! ^! k
  734.               *szString=0;0 l7 W% o# {9 W" h5 O
  735.             }
    5 ?, p! a6 i9 q7 q/ q
  736.           } while(iEOF!=EOF);2 ]/ L, B) O; U; i
  737.           fclose(fp);5 X% j5 ?* T, N
  738.           unlink(".\\DownLoad\\readme.txt");
    ' A( K* q! P0 S6 w" Z# n5 i
  739.           dwStartUpSteps=3;' K0 p/ O( B3 {" H# g1 o
  740.         }6 D- g  n0 n8 S0 t" x
  741.       }. y) @. Z& _9 }0 S% F  @
  742.       break;- w! k5 w) V8 t6 `5 E* K* ^9 e: @. M
  743.     case 3:8 t+ r8 `/ b0 l8 t
  744.       if(!Dn.Connected())
    4 z! D7 P% G- U+ r: ~% M! E8 ]
  745.       {
    * l7 z* _! e8 a' `, |; \; ~. Z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);4 I! X3 K; a6 M8 V/ i! O; Q; A5 U
  747.         dwTotalFiles=1;5 B0 c& i/ V  d* i0 T
  748.         dwDownLoaded=0;
    1 R; o" z9 K# P3 h) w$ V
  749.         bSilentStep=TRUE;
    - B6 z9 x1 C7 u% O: s6 z' N
  750.         bCompressed=FALSE;4 j( R1 G  \4 j! `. ]
  751.         strExtLocal.Empty();
      K' z: Q+ b. ?! E8 x/ e  K# h
  752.         strFullName="checkversion.txt";
    : j! l3 H7 y3 y1 L! F& A0 L
  753.         dwProgramState=AP_CONNECT;1 I- j# [" d; i
  754.       }
    6 p: S% [" N8 h, h& N9 e
  755.       dwStartUpSteps=4;
    9 ~2 s0 M1 I/ Z0 Y, t9 P1 g' M
  756.       break;) a# P& E( p$ ?& D/ P+ V. P/ s
  757.     case 4:
    ! o- B9 V! \0 z
  758.       {- v2 s/ X6 k! r9 G
  759.         FILE *fp;& v% H" n2 A7 @! z& m
  760.         char szString1[128];
    7 w% L# g$ U3 V& g) V" `% w8 a
  761.         char szString2[128];. `; E" z* g: R: l4 ]- P* G
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");! [% h$ s) D/ j
  763.         if(fp)1 ~/ T; W5 {+ H7 O9 }  P
  764.         {
    + @- z7 R4 N5 r" o3 z+ S  `' L
  765.           fscanf(fp,"%s",szString1);) f% ]2 W0 U( Q8 H: ~$ }5 S
  766.           fclose(fp);
    : |( T% ^! ?3 Q7 Q" K3 L7 |
  767.           fCheckVersion=atof(szString1);" B) q4 C9 I! F
  768.           fp=fopen(".\\checkversion.dat","r");
    : {- b6 k) D0 \3 `" B5 y! j  T, B
  769.           if(fp)" W- l( u  u: s) w! k- R: I* }
  770.           {6 X8 ?, t  k2 s7 |2 O
  771.             fscanf(fp,"%s",szString2);4 E$ F2 b* n+ _! e, R
  772.             fclose(fp);1 z7 m+ ~: J0 s4 @$ t* H
  773.             if(atof(szString1)!=atof(szString2))
    / u/ e; q) v/ q8 w
  774.             {
    2 f. |" m2 I% C+ ~
  775.               if(!Dn.Connected())- q* ?9 K" X# ]  r- J. ?2 {2 q
  776.               {# F5 S/ F" |% K7 w' ^  z+ K  V) Y
  777.                 bFirstUpdate=TRUE;
    * O" d# M* o0 |. ?! P8 G8 }
  778.                 dwTotalFiles=1;
    / d: z& T4 |6 G1 G2 G& \
  779.                 dwDownLoaded=0;
    # r$ x/ _- ^- T7 {
  780.                 bSilentStep=FALSE;# W9 G8 \$ l* W; F* Q
  781.                 bCompressed=TRUE;
    $ N, I& B6 y9 h  r& E4 [
  782.                 strExtLocal=".\\DownLoad\";' ]: K' u9 S. y1 u6 l4 e7 O7 S
  783.                 strFullName="update.txt";( a4 e% V- w% v1 G
  784.                 dwProgramState=AP_CONNECT;
    ( @! R# |# e; T! P% `
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 k' Q3 }2 H% h( c  F5 ~7 F. s
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 }! C4 [% T- W% _$ g& T
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ h& R" `- F! G% x

  788. $ O6 V, U# V' e, Z1 Z. M
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' n9 ?) D- Z  j: [( ^+ M$ x$ b/ B
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    . a0 ?: O+ t  @; d" k1 ^4 s! f, u! a
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)- j; w* z2 d% `  J: `+ t% ~2 R
  792.                 {
    8 _, s, z( z8 U6 j( t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    8 w! t" ]1 b2 p' l0 x0 e& C
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 g1 z% x% m* a9 ?3 W) n+ E
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");! C/ \9 g2 u1 ]& [! g! U6 f  h
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; [5 \# ~0 ]0 n( |/ ~  ?3 C
  797. 8 i, l5 e) p! X; _) H
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' A0 [# h0 H- _
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% M& L6 _; F$ k$ G0 {6 ~) R
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 [. w( _+ V+ z; L4 Q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 K4 I$ z* u4 U8 R  X
  802.                 }, Y3 l" I" H" @% s: \, C
  803.                 dwStartUpSteps=5;
    3 N0 w, X- \9 E8 U9 G
  804.               }8 I% `% S0 @4 {2 n/ y! ^3 E
  805.             }) T4 O) P; }1 W% ~1 I
  806.             else
    5 ?. @) y2 P& N0 G3 s! n
  807.             {
    ( S5 h' t7 S5 E7 a0 ~8 j$ z
  808.               unlink(".\\DownLoad\\checkversion.txt");
    8 Z: Q6 k9 a; y+ z1 P& B; w
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");/ T- e( |. M: f* }- |5 e
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; U' O. q6 |' s; e, J8 A; F
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 y5 ^# {3 h+ C  L

  812.   z' J9 H4 {& s# f, U$ P1 Q9 _
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) R5 h7 w2 \4 n4 l
  814.               dwStartUpSteps=99;0 I( A" C7 V" D$ B
  815.               bFinishUpdated=TRUE;/ C; v: C2 q0 D
  816.               bCanUpdate=TRUE;
      |" q# l! [* c
  817.             }
    + D; c, t: ]5 p* f- [7 Y1 s+ O5 h
  818.           }) `5 L; I* V$ F. \! [4 g: K  k
  819.           else
    6 s/ B0 a$ ~+ f) r$ i( _
  820.           {
    6 T/ s+ |; z" g
  821.             if(!Dn.Connected()): ~' z1 L. k" J4 |1 M' s
  822.             {
    1 I! R3 o) ^+ D2 ~, [& F6 q& Y0 i7 U+ f
  823.               bFirstUpdate=TRUE;
    6 I- w+ q/ Y- f3 _5 [
  824.               dwTotalFiles=1;# q- U) y3 h2 G- V5 ?
  825.               dwDownLoaded=0;, m! w5 `4 J9 B
  826.               bSilentStep=FALSE;# ^9 t# p) `: F6 H% A: z9 a
  827.               bCompressed=TRUE;
    . n7 s4 r1 p) [: ]; X7 }+ a! ]
  828.               strExtLocal=".\\DownLoad\";
      {' ~+ M0 I& ~& J
  829.               strFullName="update.txt";- v9 q0 b* f! ]" v4 ]) I. S
  830.               dwProgramState=AP_CONNECT;
    6 l! C# G% @2 K1 b8 Q8 E
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 m- s$ U: X% V3 @4 @
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - F, N5 |0 [( A) k2 h
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");  }$ ~4 S" m+ ]( e2 F
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ }% v: B& C/ g7 z2 ]# k& W1 U
  835.               unlink(".\\DownLoad\\checkversion.txt");
    : S) R9 g! m8 B+ D4 d2 u
  836.               if(GetFileAttributes("Wsa.zip" )!=-1): j( X" e9 Z) r% s) r8 S: y
  837.               {
    ; \- x# B' b! @$ {8 c2 m4 e* P
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");& M& B* j# O) B+ k5 d7 l
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    0 D! o9 j. d! p+ s# ~& ?5 b
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    . s% y% j2 @' _
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * T+ n4 ?& W: k2 T/ U& N
  842.                
    5 W5 I7 m, z( L( W: D9 \
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % d3 ]0 `' J/ Y% g( k: |+ t
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* r9 p) g  \) Y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; `* }& \0 b5 S% s
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, U+ @: s7 P2 O5 A* j
  847.               }
    0 U" g0 E" p# n9 L+ e6 s0 ]
  848.               dwStartUpSteps=5;  M" e2 e7 C. S; u+ e+ C
  849.             }
    ; U# i$ W+ m$ a8 V/ ]6 s# ^
  850.           }
    * Q$ A: s4 M* K
  851.         }
    + ^0 W6 M- x' F# {. \/ x
  852.         else
    5 K, @+ T( v3 _5 e
  853.         {
    & s1 v; e* R0 J' p3 g4 ^: v% L, |3 G
  854.           dwStartUpSteps=3;
    " h  Q4 G! Q0 T- A; M7 z
  855.         }
    0 t3 u1 t4 h7 K
  856.       }8 Y8 w: ~: Q! [9 r" ~; g+ K
  857.       break;* B  i* Y, {) [
  858.     case 5:* N$ o9 ]# x6 {( k9 s3 ^
  859.       {
    $ i4 \' i3 ~  r
  860.         if(GetFileAttributes("Wsa.zip" )!=-1), Z& m, F5 W. Z% z3 j' k
  861.         {. F7 G& y8 ~3 ^; Z2 E
  862.           int opt_overwrite=1;/ w7 h9 L8 J# i6 ]0 i& P' ]& \
  863.           int opt_do_extract_withoutpath=0;$ u- X2 T9 i$ A8 I: A2 x! m/ R5 p
  864.           unzFile uf=NULL;
    : X  G* f) m8 R! ~# r5 j0 ?- f
  865. % o9 ]4 N5 x/ [3 ?4 i
  866.           uf=unzOpen("Wsa.zip");  U, t' a" [4 u& ?. {1 P# z
  867.           if(uf)
      \# D4 `& G8 R" P/ p1 G
  868.           {
    / i3 y! \2 V- Q- Z% z$ l9 a
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);3 E; O$ G2 o- S
  870.             unzClose(uf);
    0 A  U0 ?; s& m
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");9 W& ^& o4 A% g" t5 |; b
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");% h8 U: [' ?' l4 D3 n
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    . X' v: ~8 q2 F% V! [3 ?$ j) R9 ]9 ~
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . B& O% A+ k0 S4 J1 W; w, X% \. D& U
  875.           }8 s, k% B& t/ M: T, A/ z/ j
  876.           DeleteFile("Wsa.zip" );
    & ~$ F2 b% e0 j  y
  877.         }1 P( u1 }9 D/ y

  878. 5 Y) C" H- r4 t8 h8 L$ c
  879.         if(CheckLocalVersion())
    ' v9 W5 C9 R  M+ ]% n
  880.         {  e; q" N3 z  f, s- G1 @
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");! j8 J- ?% X" D: ^
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    # {* Q/ {7 t4 n+ Z1 y- O0 P
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");5 V9 a5 L7 e2 C3 J) n
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 J. j! j/ }3 N
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);; e* r: y9 M) L; K
  886.           dwStartUpSteps=99;" D# z% t# T  h0 @7 A7 H' C& f
  887.         }$ B; w" m+ c1 O/ G: a$ _% O" C
  888.         else
    . D; Y* r+ ?; |
  889.         {
    & a1 J  M2 ~& }0 Z! _
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    2 D" b+ I; n2 B8 N4 U
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    5 P6 G9 H- T$ I: g3 B' L0 S; b
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");/ s) Z2 u0 k, A. p; o0 g$ E

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

; o& \- n- r* k* ]+ u  L2 U. w! J- U% N6 o0 x: w4 A5 ^

評分

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