CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
8 r) t2 }1 a9 {
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ; ?9 O& D4 q: |+ x0 V' g! T
  2. //
    ' b" D8 @+ W9 P+ ]+ v" u

  3. $ R1 M& R3 a. \' \/ l
  4. #include "stdafx.h") ?6 e, P1 D- ^3 c: b$ d
  5. , ?  M3 T- a# j1 H
  6. //#define UNICODE
    , v2 |- a, h4 f; {$ @  q
  7. //#include <gdiplus.h>2 k" D/ n$ G! c( p. b) f0 @; f
  8. //using namespace Gdiplus;
    + W3 w6 ]/ S7 ]6 q
  9. $ L5 S+ j* L* @( ]# A5 T% F
  10. #include "RevApp.h": y. ~) N1 z( F- Y
  11. #include "RevAppDlg.h"6 }. Z, C1 A( F' {
  12.   H- R% K" r" n! L) m& r" R
  13. #pragma warning(disable:4786)
    * f8 E; R5 C  a# j, s- q4 x& q
  14. #include <map>5 k4 b% t/ R1 `1 ?  h
  15. #include <list>
    ! S( p% N( l% C8 n7 n5 G# _9 ]
  16. #include <direct.h>4 \/ O, n/ v9 F% U2 u

  17. 6 }! d& G4 L6 j! z$ H8 A
  18. #ifdef _DEBUG0 ?9 ^% r8 F! }; W. f" b. G6 b
  19. #define new DEBUG_NEW
    " B# d/ t1 E9 P1 M5 y) ?4 w
  20. #undef THIS_FILE5 H. ]8 S0 X& Q" v; I0 ?
  21. static char THIS_FILE[] = __FILE__;
    % Q" l" C( _& M& \9 v' l3 c9 o/ Q$ j4 b
  22. #endif
    % ]" y% E& R" ^  Y0 `3 ?6 q
  23. #include "SkinResDef.h"
    " a: R0 Z: p& k% |! c2 {1 ~
  24. #include "ChangeBG.h"
    6 k3 E2 H; B- T! G
  25. #include "AFXINET.H"
    ( a8 f$ @2 o3 b7 w% w* ?
  26. ' U4 y2 K/ J) O9 @  f
  27. #define TRADITIONAL_CHINESE 0
    / I) g. U; ]  ^+ `9 `9 A5 H2 d
  28. #define SIMPLIFY_CHINESE 1/ e, [  W6 ?/ i  O
  29. #define ENGLISH 2
    7 c( r# @5 f' Q# K8 H6 f* u9 ?
  30. int m_iLanguage = ENGLISH;1 k- `' p& ^4 j5 E8 G5 G
  31. /////////////////////////////////////////////////////////////////////////////! ~$ ?9 O; k/ Z/ b$ j
  32. // CRevAppApp
    $ V$ `  P8 u* U& x9 i* E
  33. 7 |0 _& c5 s$ R0 @
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)7 h2 R# G3 A2 t- d
  35.         //{{AFX_MSG_MAP(CRevAppApp)$ M; \. u: Q; S
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    . r3 t# ~1 M6 v# S  y. Y, I/ X
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!7 M) ^3 l# q' g8 m6 x3 {4 Z
  38.         //}}AFX_MSG1 {3 u6 i% k/ B8 ]8 g6 b2 _# A$ z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    : o- T/ |; V2 M. F
  40. END_MESSAGE_MAP()* E3 P& K! K7 ?7 N: t6 P

  41. ! k- k4 ]" G8 |& X/ p% {
  42. /////////////////////////////////////////////////////////////////////////////, a6 s/ K7 h% B( P! I
  43. // CRevAppApp construction
    # @5 O- |# a: n: M5 b$ v6 k. {

  44. 8 _" w3 F- B! d! ~- d6 U: I
  45. CRevAppApp::CRevAppApp()
    + v: p( R- G& p0 m) ?. G
  46. {
    ) F; C( i6 M. a/ ^4 Q3 b  E3 @2 x
  47.         // TODO: add construction code here,
    $ i- o" W/ ?: S5 Q
  48.         // Place all significant initialization in InitInstance% b' i; }5 H- x3 n/ h1 ?3 r# k
  49.   bDisplayIsBig5=FALSE;
    9 \% `& Z6 n$ V) Q5 l
  50.   bRestartUpdater=FALSE;
    9 b4 E! h) ~- w4 ]6 t6 }8 ?: G
  51.   bFinishUpdated=FALSE;% b7 U" h2 Q4 ?: g2 a
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    + y% j3 K7 J5 p: E5 y6 i
  53.   InitChangeDataBig52GBKS();
    3 b6 R' Q, p/ Y) W, l- Y5 j6 n2 g
  54.   InitChangeDataGBKS2Big5();  A6 l# Q) y9 Y, z/ G% |
  55.         //' o% ?& B1 y; ~
  56.         bClickRunExe = FALSE;  m+ f. P' G' Y/ q7 x# [
  57.         //! B( L( [$ _+ t( o7 i' p) x
  58. }
    8 W0 U/ @; h2 I( I- C- w5 J2 j

  59. ' m& k; K3 K& I* i% v! _, W- G' S
  60. CRevAppApp::~CRevAppApp()) L* [& q: G% V3 U, o6 h" N
  61. {
    * n+ Q" a5 n4 p1 a
  62.         // TODO: add construction code here,+ I) X+ i! `! y
  63.         // Place all significant initialization in InitInstance
    / x9 E2 S: ^9 T: _, C
  64.   EndChangeData();3 C/ V( ?8 A/ B7 }! p8 T
  65. }$ ~7 H% B# ^: ^4 T7 N5 L+ W6 B
  66. # K1 Q; s8 j* d! J
  67. /////////////////////////////////////////////////////////////////////////////* [0 e' S! v! [' y* _; o, N
  68. // The one and only CRevAppApp object
    ) I! `) N% A1 I7 G8 ]
  69. 8 y! `. m5 {& z8 O' z. ?1 k- A
  70. CRevAppApp theApp;. ?+ a4 |3 O% p+ Z: s' }
  71. # D3 K& |4 v- c4 {" S; C) _( a
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    & a5 k1 @  E6 {# Y% i8 g
  73. {
    ' \% e) G2 \0 Z
  74.   int iEOF=0;
    / r* {5 Z2 J" ^# U/ ^7 j- S
  75.   char szTempName[MAX_PATH];
    * }/ T2 _/ a: J
  76.   *szFileName=0;. i& K) e2 l$ h) I3 {8 a, R: t* r
  77.   iEOF=fscanf(fp,"%s",szTempName);0 q6 H* ^0 d; `1 z% E: X
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')  E' `- Y$ o2 V# h% b5 }
  79.   {
    " N7 v+ V, D5 _% n: ~
  80.     strcpy(szFileName,&szTempName[1]);: W% n0 |& A5 I& t- @) ^% x- x
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 w! D9 {/ n  k
  82.     {
    + O% r$ j2 g3 l  M, c  ^9 F# [
  83.       iEOF=fscanf(fp,"%s",szTempName);3 g! H6 M& M9 j+ V/ O  J1 k) O
  84.       strcat(szFileName," ");; P  p& p! f8 N4 }4 r
  85.       strcat(szFileName,szTempName);
    1 W$ w% M% F" |. c
  86.     }
    6 Y3 z) s/ ?" f- W/ a2 x4 t1 p
  87.     if(strlen(szFileName)>=1); w  a+ R% }7 a' T2 X+ M: [
  88.     {; Y$ V" |# i+ `0 N9 W
  89.       szFileName[strlen(szFileName)-1]=0;# n8 X( t# [& Z6 e! y6 X
  90.     }
    $ [* ]: f+ z2 b! l2 G* Z
  91.   }$ C! n; X9 T0 v: y8 c' o: h
  92.   return szFileName;6 S- K* m4 e5 P5 |
  93. }
    2 d- n! ]! E: V

  94. 5 Z) L. X* h8 @5 _9 ?
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    - ^' ]% Q4 x! k; P- R
  96. {( b. Y6 U% W- m: k% A" L$ d2 C0 }5 T
  97.   FILE *fp;! j* V: {6 ?. w3 m% N
  98.   char *key=NULL;7 Y, ^) w6 R9 n1 s
  99.   char version[MAX_PATH];/ ~. z# M3 Q7 x7 F
  100.   LPUPDATEFILE file,olds;9 T. |( ~; t& q  l6 j2 |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;0 u- w7 W1 _! C; m8 U' r7 r/ Q

  102. : L. [1 c9 C( L9 \
  103.   UpdateList.clear();& ^7 ^+ l5 Y, t4 }7 y8 K; }
  104.   UpdateFile.clear();0 J$ X1 G5 w7 K1 K! [
  105.   if(GetFileAttributes(filename)==-1) return false;( l8 P7 x* M: U5 F/ [) V
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ' S/ c% N, _2 E' `) H9 b1 P2 J
  107.   fscanf(fp,"%s",version);; n: G5 ]" B- d1 z1 U* U
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ( o6 H1 v- l, k& q4 f+ i* R' z+ @
  109.   while(fscanf(fp,"%s",version)!=EOF)
    - `! I* ]$ @* y" k  A! K8 x& O
  110.   {* P' w( h& h) R4 T' p1 K' A
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 J. t' Z! u) V& J# e/ N
  112.     fscanf(fp,"%s",file->path);* d9 n2 o, a( d  m/ a4 [& f- p
  113.     ReadFileNames(fp,file->file);9 D5 m0 m& d: O2 ]
  114.     strcpy(file->full,".");. b" H6 Q) l' f; S
  115.     strcat(file->full,file->path);
    ; A: |2 O3 W( q/ w$ m. M
  116.     strcat(file->full,file->file);
    2 c8 S# f# Q, ]* t; c* D9 a
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    - n7 A9 _  A' N( L; F$ M& q$ j
  118.     {8 f# g0 c1 T" O6 n
  119.       file->vers=(float)atof(version);
    ( c' Z, |3 {# Y/ w0 q, u
  120.       UpdateList.push_back(file->full);
    ( _& j3 z7 @  t0 x( d" z) T
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));, N1 Z8 K! \, d8 O$ F& l
  122.     }
    : g7 Z8 o1 X/ B# X$ t
  123.     else2 g) }# j7 |6 ^3 a# n4 L  e8 B) |
  124.     {. x/ O$ u0 e2 V' j% F2 n% |' o
  125.       olds=(*p).second;! O4 y  s+ l# @- R! ~0 A7 e7 p
  126.       if(olds->vers<(float)atof(version)): d6 W! c- H/ W1 \8 Z
  127.       {
    4 `9 c% f, y6 V$ Y0 U' g/ w3 k+ |
  128.         olds->vers=(float)atof(version);
    , P0 v! G9 S: c( j8 x# n$ q& K& S
  129.       }
    % [' @& i5 ]2 I" D$ p, }; E, T
  130.       free(file);; C& q: c" g2 m& n! c
  131.     }
    0 C: Z5 G- }; G$ k* j! @: B
  132.   }9 |3 H3 }* b# R
  133.   fclose(fp);) K$ W9 D/ f/ f' I, `
  134.   return true;
    * G. x0 _, |4 ^
  135. }. r3 P1 Y. [/ S0 Z( w8 j

  136. 9 B( g" c3 F, f: V( H; B+ B; |4 _
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)* d2 y7 Q7 D. V
  138. {3 b3 ]. z3 B6 |3 F% K
  139.   TCHAR  szFull[MAX_PATH];, {4 s# Q' [2 J1 T5 a: b* Z, ~
  140.   TCHAR *token,*inter;4 k4 M( e% z$ y  b- d* ]
  141.   *szPath=0;1 J: v0 _/ {& C+ p% A
  142.   strcpy(szFull,szFullPath);
    9 S. i2 ~& a% ^- {( L
  143.   token=strtok(szFull,"\\/");
    2 b0 f2 N1 T( ?: z
  144.   inter=token;
    0 K: P9 M# n. J5 Q% u
  145.   while(token=strtok(NULL,"\\/"))
    4 Q7 N* c( g+ [
  146.   {" F6 ]" e6 W% _0 @8 `
  147.     strcat(szPath,inter);
    8 c; Y0 b! W8 I# p6 I! R
  148.     strcat(szPath,"\");
    1 |+ \. j7 v7 g( z6 t! F
  149.     inter=token;# _2 `- \' _: I, h9 M
  150.   }
    6 @0 k  m1 ]; K' W
  151.   return strlen(szPath);
    2 j6 b! l" R; j, |+ ]
  152. }
    & i6 J5 o, @  R& T. o/ K2 q' C

  153. 7 `1 I0 u0 r+ k3 j5 h1 M
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase): h' B% k5 i" R5 b
  155. {
    ! X& a4 A" I9 w
  156.   DWORD attrib=GetFileAttributes(Target);9 Y8 q) T( W; L9 e5 q; o3 i& m
  157.   if(attrib!=-1)! w! }" O" F) `  F8 W
  158.   {6 V& S+ i1 R9 ~! c
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    0 i" ^7 e# s: ]
  160.     {
    * G+ ?8 I, R! T! M" ^
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    % [* T: }; {' V: k3 s
  162.       SetFileAttributes(Target,attrib);$ u& Q: Z6 u, g; U' T1 D
  163.     }
    3 |1 D" q% ^9 `
  164.   }
    ; J. X/ Q0 d0 t: g1 o6 J
  165.   CopyFile(Source,Target,Erase);
    4 a7 {0 o" ?" _& k  Y. h
  166. }6 Y( z! g% R/ v4 x2 B$ y& w( q8 c7 p
  167. ' t$ N. a5 a' b
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)  C* y0 o2 l! V5 b: p: p4 w
  169. {
    - G' U: J$ [5 U2 [' _; Z+ {
  170.      FILE *fp;
    " v" {) |1 h: R+ l6 d, ?! ?
  171.      char  szBuffer[8192];
    * v- }3 S$ H) m( L
  172.   va_list  argptr;
    . \5 H  Z" C  g+ y
  173. ( \) W+ |$ e1 [, N! g( T
  174.         va_start(argptr,message);9 U& S5 s2 Z) `) h. ?$ E
  175.         vsprintf(szBuffer,message,argptr);: m  X9 u! @; A) ?7 G, Q
  176.         va_end(argptr);) z' k6 p- @6 M; H; \9 ^8 B
  177.   fp=fopen(FileName,"a");
    - V, G1 h! g( v+ L1 g. i8 W
  178.   if(fp)# F* P: f# x* ~) ~: E! S# t
  179.   {8 D+ d" p3 q4 Q' F* V) c
  180.     fprintf(fp,szBuffer);
    7 e) v4 M/ _$ Z3 X1 e9 t1 z! S
  181.     fclose(fp);5 h! I6 c3 S/ B1 Y, v
  182.           _flushall();
    1 g" w) [, l0 b. V& r
  183.   }
    5 `; d0 m* z/ {2 q, P
  184. }0 t: b& X% O2 r/ M' L
  185.   ?* L, o( t3 m$ e. z' @7 o
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    7 z8 `2 x2 H+ ]7 \+ _
  187. {
    * a* j& O) F7 |: M# c: Y
  188.      FILE *fp;$ W* G& ]& H. b7 H
  189.     DWORD  attrib;
    ; t7 l  j/ l9 B* y0 Q: a
  190.   attrib=GetFileAttributes(FileName);  I# S; q8 l( h
  191.   if(attrib!=-1)0 T1 h8 P8 V; P1 s
  192.   {
    ( K0 n$ l" ~3 U- C% M
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);( `. H( a4 E1 |" }. Q+ J
  194.     if(!SetFileAttributes(FileName,attrib))$ x6 _5 C0 i* r. u, t
  195.     {
    % O& Z; v- E% V1 g
  196.       return FALSE;* n: L, W. N+ N( }; z/ X: A
  197.     }
    & c2 F6 [; A" U, Y1 z- r3 n* k7 y
  198.   }
    0 t2 c. j( z- X6 f; P
  199.   fp=fopen(FileName,"wb");
    ; d! N8 M2 z1 C* u7 [9 ^8 }
  200.   if(fp)8 W& z  @$ v& ]+ X* ^
  201.   {
    1 ?% U0 ~! Z% M; Y, l  o
  202.     fclose(fp);
    + N% `7 n. h1 G, y
  203.   }; _0 F- A3 x1 f2 i
  204.   return TRUE;
    1 g6 B( C. v: A) T3 C8 S& K
  205. }
    0 h: u! T) S  P4 y

  206. & R. r7 B) M; e3 G
  207. BOOL CRevAppApp::UpdateLocalVersion(void)" J7 l0 N" d' ?/ G* ?3 M1 S5 r2 w
  208. {
    & ?. m/ Z1 M7 Q, m
  209.   char filename[MAX_PATH];
    + y# P& V3 M& M  o, v# I2 O5 s. c
  210.   LPUPDATEFILE file,olds;% ]3 ~. g2 f: ^# U# M; B- J
  211.   std::map<int,CString>::iterator i;
    , O) J3 `5 {1 m
  212.   std::map<CString,LPUPDATEFILE>::iterator p;7 D, g# ?3 _3 ]1 Z- K" w3 D$ }  X$ p
  213.   std::list<CString>::iterator l;
    0 y" [' M- Q5 T% _  F" b6 v

  214. 9 K7 k1 K9 X' v1 Q. |: S
  215.   if(bFirstUpdate)
    1 v/ K, s. E; T/ ^
  216.   {
    3 @2 I5 D% g" O2 Y* M8 l: K5 Z
  217.     dwCurrFile=0;/ X9 ^. }1 O( X) Y* U0 t0 ]+ p! B+ {9 ?/ D
  218.     bFirstUpdate=FALSE;
    6 g* ^/ ]: }# c
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 C9 i% k' D' m- f' h
  220.     {0 P8 d9 |0 Z2 d& W: S; ]
  221.       dwTotalFiles=UpdateLocal.size();3 Y% Q$ A! c; L4 Z/ ~8 l  [
  222.       dwDownLoaded=0;+ o9 c1 s' O3 a' c" D
  223.       bSilentStep=FALSE;
    $ w% R) e6 [$ K/ b- N/ i2 d" B
  224.       bCompressed=TRUE;1 j. T- H: D7 f+ U
  225.       strExtLocal.Empty();
    4 W) }, i+ L3 A7 c! h
  226.       strFullName=(*i).second;: h0 J. }' g% |
  227.       dwProgramState=AP_CONNECT;; i1 Q8 e7 G- L% H  ?; P) j
  228.       return TRUE;
    4 M9 ~1 Y6 p2 U: e
  229.     }
    ; S9 G, Q/ M, h: W! P+ w  i8 O
  230.   }
    , H) J2 G8 ]  E
  231.   else if(bRestartUpdater==FALSE)
    1 R% T! l$ q- `9 N' `
  232.   {
    - m) n) C+ t- z1 N; t7 ^
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    # t1 k) Y4 G1 Q) ~% b& P$ n9 w2 V
  234.     {) P, y+ |7 A3 W- d- X
  235.       file=(*p).second;
    2 w# s+ F6 t$ k1 `" E% C
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())! T. z+ W; R- e1 z+ Q7 q7 D
  237.       {0 F5 e( M$ }4 H$ B
  238.         olds=(*p).second;
    ' c: J7 I; a) Q8 l4 Z: h: B' P
  239.         olds->vers=file->vers;1 ^$ M$ t8 s& p" Z( V& K% @$ p
  240.       }
    : S. e  n9 o5 M1 a7 I: d9 R
  241.       else, f: ?9 ]0 }  J, c0 S) S
  242.       {
    1 T* w7 Y8 h. U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) U! _$ f6 \' k* c* F
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    9 w; X& P2 L. A$ e9 P
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));  l( W8 z* C1 D& h4 ]! Q
  246.       }
    5 b& F! F8 R- M/ S/ u
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    2 ?  P$ B2 j; p+ R. u; U/ W
  248.       sprintf(filename,"(%s)",file->file);
    5 }* G: a. F- Y8 b5 \. |( g+ k: v
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 Z8 l3 q& D% O8 d. Q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }" s5 m1 l* |7 F( _. i# ~; W6 d
  251.     }% ]2 _- |  o/ O' ~. u! s/ }
  252.     dwCurrFile++;
    ( s" c& d4 K5 P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  F& K# i) k( [: W- X
  254.     {' a& V7 q; R9 x6 ]& @
  255.       bSilentStep=FALSE;* x+ f& i5 n% ^
  256.       bCompressed=TRUE;
    8 \0 |, O; E6 Z+ m' F
  257.       strExtLocal.Empty();
    0 u( N* U: b# ?8 a
  258.       strFullName=(*i).second;' W! _  W* M+ u/ l
  259.       dwProgramState=AP_CONNECT;
    3 j5 h7 ]/ f  ~/ x2 E- J( ]4 e( H
  260.       return TRUE;
    . B$ ?/ X+ l) l% e9 p- l4 L
  261.     }
    8 ?. g- f) g9 ?: w5 K  |
  262.     if(!bRestartUpdater)0 O8 ?1 ~  `& k
  263.     {* [6 p' r4 i" S% y4 }0 o4 t% Y4 R  h
  264.       int iCurrSize,iFileSize;
    6 P( B% q! ?% U8 s, T, p" N8 N
  265.       iCurrSize=0;. b) [) @2 n* Q7 a" R3 `, x
  266.       iFileSize=UpdateList2.size();
    5 K) ]! r( Y; B1 p
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    2 l+ Z% E. B) U+ R  o) ]5 m3 [
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    / p% W" l2 `. U- j$ S
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    # I, Y' T9 I, t! f$ W
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . g, m4 {- r% `4 a) h4 ]% E6 O
  271.       Fclearf(".\\update.dat");
    ! m: c! \4 i. @) A6 w8 Z
  272.       Fprintf(".\\update.dat","Bloodyf\n");* \3 ^: Q, ]7 W
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # B% E8 t$ W; [; P
  274.       {
    $ p! J( U+ X+ m+ |% G( Y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())* g2 G( w/ o  b6 B6 r/ e
  276.         {
    3 r8 v8 Q% L: }! [
  277.           file=(*p).second;" ?- r0 s1 n" H, k2 h9 C" Q! U
  278.           sprintf(filename,"(%s)",file->file);. S; N  z+ B0 Z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% K" l8 v6 C& F% o) X
  280.           iCurrSize++;
    ! t7 S# F8 k3 |7 L
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ! t" l/ }" W9 g% R9 C
  282.         }
      M* V6 j; ?& P) i" {
  283.       }1 _9 E7 B& g1 I: u- b7 \
  284.       unlink(".\\update.txt");$ @3 @3 B: q: ?- o; L
  285.       unlink(".\\update.tmp");2 ?9 e& T8 `# l9 p5 I
  286.       Fclearf(".\\checkversion.dat");0 F, D' |  u1 _4 t  U+ S  J
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    + Q7 f8 g* M  v; }
  288.       if(UpdateLocal.size())9 B6 N, H! A% A4 `4 X1 G
  289.       {: d1 v1 K; s, l" M8 K
  290.         UpdateLocal.clear();! N8 x+ ?$ Q7 {7 B. n
  291.       }
    0 ^; X: ~! a; M
  292.       if(UpdateFile3.size())
    . z3 y; t7 p8 e: J5 T# s4 b* b
  293.       {/ f# l! x% y& E& c: J5 @3 e) D# B  H* F
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . r2 W" z+ e# t$ ?: o; s
  295.         {1 |2 F, }, q& A
  296.           file=(*p).second;5 O0 G4 M1 @$ i0 [
  297.           free(file);/ |: \3 T6 F7 S. ^6 I: U: X
  298.         }
    & Q1 l9 ~0 B9 G* _; S
  299.         UpdateFile3.clear();
    5 L5 A$ p  }, h( j! k- ^- z
  300.         UpdateList3.clear();3 r3 ~( w0 Y4 \" A
  301.       }
    9 o/ r/ F' S0 U  G# g7 }6 f- G
  302.       if(UpdateFile2.size())7 G5 S/ U7 j' `! M& H: R+ _
  303.       {
    9 A- F$ a* G$ r3 z5 E/ A
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 R6 R/ T& O6 B0 x  e
  305.         {
    % \& K6 F8 H; `4 q& x: q1 n
  306.           file=(*p).second;4 a+ d( A, Z3 N  h0 s
  307.           free(file);
    2 t0 p$ I+ O2 Q! }, I( I
  308.         }
    2 Q' R# G, z, W  H! l
  309.         UpdateFile2.clear();
    . N0 h; b' L4 }" [( G$ T' \& w' N- X+ U! r
  310.         UpdateList2.clear();
    7 N) P+ [$ `  M, W+ k
  311.       }
    . n! G4 Z$ L) d! o- A8 l5 Z) b
  312.       if(UpdateFile1.size())
    # i& Z8 N- ?3 C' D
  313.       {
    * V% u( e, S: P0 t3 y% B
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 P- D0 k& {0 o# B% y! d3 S: U
  315.         {
    ; ]9 w" b/ L- i# X, |3 m& X1 A+ {
  316.           file=(*p).second;
    ) _6 E* F1 Q1 i5 Q- J8 S) v' i
  317.           free(file);
    % K9 V4 A" q  k8 \
  318.         }/ f: {& T( A" f+ `7 w& }; k' N* ]
  319.         UpdateFile1.clear();6 Y! O# B( l3 y6 a' h- n
  320.         UpdateList1.clear();4 c- P5 a. m5 q0 W% i
  321.       }! ^5 B8 {7 l; \6 s  k
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    2 I+ k* ^  k( ^
  323.     }
    0 R0 `# S; E4 W) [4 Q
  324.   }1 n% R2 c; ]7 h& }
  325.   return FALSE;) U$ Q; L( ]! H+ b7 h+ K
  326. }
    $ ^4 i! p9 L3 e8 n. T4 |/ z
  327. 6 G! R6 ]9 D5 Q
  328. void CRevAppApp::ClearAll(void)/ k6 `6 o' d; k5 H3 O$ J/ u
  329. {
    & _" E/ L( b' p9 U) Z
  330.   LPUPDATEFILE file;
    . s: s% f5 l* _& l
  331.   std::map<CString,LPUPDATEFILE>::iterator p;0 ?4 |1 x9 |' t" M  i' x6 x* ]
  332. * }4 P8 Q0 J& R$ l6 n9 |* V; j5 z
  333.   if(UpdateLocal.size())
    # z) r- M% `8 {. ?+ |
  334.   {" X: ?& @4 {  a3 M
  335.     UpdateLocal.clear();
    ( L; i3 E# m- U9 E+ V. ?6 t8 y
  336.   }/ Y  h4 g1 K* V4 i, r) W0 R  c
  337.   if(UpdateFile3.size())& [4 L1 V7 Q6 E0 M2 w
  338.   {
    1 n) |1 k, Q4 {2 b5 ?2 v
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) f9 l0 F! {/ p9 R* [- ]7 d1 J
  340.     {
    * ]2 n3 r* ^# |
  341.       file=(*p).second;
    * ~. F5 ~, X  p( k( s) X& {& i& f
  342.       free(file);
    $ [$ {3 o& Q$ o- ~7 h
  343.     }7 D1 K+ z2 R) o; l# \& x
  344.     UpdateFile3.clear();
    " C4 w; d7 |; k. t
  345.     UpdateList3.clear();6 `4 f" {' E8 a! p7 r0 N
  346.   }
    9 E4 K2 r6 G8 A( D
  347.   if(UpdateFile2.size())
    : R' }+ X* X: i: E- H
  348.   {1 r! h: {: T6 \4 i+ C/ V- Z3 T
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# A9 U  c6 U2 j) |$ c
  350.     {
    * u; Z$ f* \5 B# e9 W
  351.       file=(*p).second;
    9 U  v8 _6 o; d6 _1 {6 F, A' K
  352.       free(file);; k* _2 d9 H; q
  353.     }) s% Y1 C$ N2 u& k' \4 Y
  354.     UpdateFile2.clear();0 ^. Y) `! h& u9 m$ e: h, N* |
  355.     UpdateList2.clear();
    ) P. I3 ^) X8 b6 E
  356.   }
    7 K5 _$ f* \' y" f/ a
  357.   if(UpdateFile1.size())5 C  x0 d4 x% A  ]3 L
  358.   {
    ( p( S8 [5 M6 c: r# B5 C
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 S; L) c- U6 F' f& ^( Q
  360.     {
    : {# S; _7 s6 y$ J- |* H
  361.       file=(*p).second;& B' l8 U$ E6 i
  362.       free(file);
    ) j3 E( S4 Z% q
  363.     }* D  N! h8 @' n: e; n2 \# t
  364.     UpdateFile1.clear();* s& Z8 R* [; W/ T
  365.     UpdateList1.clear();& V' |$ y" U: o. ~( H& G# l
  366.   }$ N& K8 n# A" ^: h: Q& d0 L! t1 X
  367. }  
    ) S1 S. L+ v" B
  368.   
    % H# H" B5 |; X- Q! m# z: O5 @
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ; ]; H+ s# g  n( U; ^" r6 i
  370. {
    ( p5 N$ z3 o1 {+ W: l* b( B  h
  371.   int c;9 G7 N' S4 m2 A1 b
  372.   LPUPDATEFILE file1,file2;
    % f: |6 f4 l% P! M$ h
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;, [/ R: u: m. L0 h3 _
  374.   std::list<CString>::iterator l;
    0 [, o  H: Z' ?) I5 W! Z9 @( ~' W
  375. 5 `- j4 r( g  _
  376.   UpdateLocal.clear();! e0 t/ N( U) v
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    7 z2 b" P: s0 z  ~
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + @9 ?5 s' A& Y9 s6 ~1 i+ J( {1 P
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    # B) ^7 P3 P1 \8 s
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);4 L+ f5 H+ s$ A
  381.   if(UpdateFile3.size())
    , c" ?6 `1 N' J8 x8 I  Y$ n
  382.   {
    9 P6 k2 {4 W7 ]
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ( j; P, p" ^- U( N  H4 D3 L& I
  384.     {( v  G9 ?3 E" l( f! _1 b5 h
  385.       file2=(LPUPDATEFILE)(*i).second;
    $ q9 O( l3 q3 L7 v7 ]4 c7 @, _
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())2 v8 W7 k% P! G% C: Z$ k
  387.       {! N" G2 t3 w$ Z
  388.         file1=(LPUPDATEFILE)(*p).second;6 G4 I1 O) }$ q: B) R3 Y- G
  389.         file1->vers=file2->vers;
    & V1 U: m  w8 a
  390.       }7 F# z* p' W; u# R9 [/ Q
  391.       else( C; R# a& l& S# g  }6 I4 o
  392.       {* r1 y  W7 ~+ c$ Y, K* \; [& g
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, v. v3 T6 l# {+ @" _
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));- A8 ?) o' m" r% w+ h! I
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    / _" W# f* h0 s1 `
  396.       }6 n+ q. O0 p' Y, P( b& q- n( J
  397.     }
    7 C7 Z/ a; [2 |. d) Y- I/ u( v5 U! K
  398.   }2 Y- A' c& d: @0 |# X
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 N) k: Z9 o7 y+ c) x
  400.   {
    ' g9 _$ H3 L9 N8 B
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    : S6 v+ |4 o& g) c6 h0 S9 @. p
  402.     {' z" W2 b- N. Z7 o+ g& z/ j- X
  403.       file2=(LPUPDATEFILE)(*i).second;3 R% G$ W) p1 Y
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())7 c$ |& h3 \! `8 K
  405.       {
    - ~9 u9 ~7 x* [, \; B
  406.         file1=(LPUPDATEFILE)(*p).second;
    . D( N1 |7 T5 C' V" E. i: ?7 C& Z4 X
  407.         if(file1->vers!=file2->vers)
    ) M$ E6 R$ y  t# m* w
  408.         {: i4 m( k% _3 {! a, b7 C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 J# H8 ?) d( K6 e* g4 y
  410.           c++;
    % }2 a4 j. G% v
  411.         }
    ! @  l; _" r3 ]& K
  412.       }
    - m) ]1 ~- r. a! K8 a
  413.       else# y% W: x/ ~+ J7 ~* h6 O
  414.       {) B) ^5 {$ u! Z0 [% ]
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ U9 T: w$ {2 h: X: a8 S! r2 g
  416.         c++;8 H3 J5 k( X; q/ O% s
  417.       }# }$ f' H, Y0 \7 Y
  418.     }9 {; U, y( i" f- G
  419.   }
    2 m/ V* P4 V2 l0 H) ^
  420.   unlink(".\\DownLoad\\update.txt");2 A) O/ b7 |+ S$ e
  421.   if(UpdateLocal.size()) return TRUE;7 b9 d% s! V: x" f  |
  422.   else                   return FALSE;
    7 ^0 G  u% n8 [( k" [# S5 _) g9 h) E5 O7 z
  423. }
    ' ?; R% \  g3 i% i8 |, S
  424. ; H& D0 F1 D) K" @. b# L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 u, |; [! [9 B" w6 B& d
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    3 h8 h* ?/ t) p
  427. ' x( |6 \4 O- P1 U5 z
  428. 4 P* I0 }0 w; e9 B

  429. / t0 A% z; A( l% Q  z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    " Z# E! \$ d( @& J# ?
  431. {
    . q4 w1 U6 x, G+ F
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;" Q* K$ ^9 d' M. O7 _# b
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' W7 }$ n* Q5 {! u2 k# h
  434.   {5 O0 S3 R, v" S' @
  435.     char szLanguage[50];
    ! S6 E' q4 s/ U) k$ ~8 {
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 H  {( D9 K: W& D. c6 k' _
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % W8 F1 F8 z& k, \/ ~
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # G/ M3 p+ B8 U9 R0 Y% u
  439.     else                                   m_iLanguage=ENGLISH;
    ( y9 s& r$ H2 H  S
  440.     char szRegister[100];
    7 T1 h0 S2 K% O* K  t
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 {, t! M% O9 E
  442.     strRegsName=szRegister;
    , D0 E7 @3 s. X* B
  443.     char szPatchURL[100];
    6 \* W# Y) f+ X3 e1 j9 i
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' B& D8 `. M4 e/ J. a' I8 z6 s
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' Q9 X1 Y7 ?- v+ ]6 l) w3 {; M& q
  446.   }& G  |* z; Q- q; f( y8 B
  447.   else& [; C/ B' Y" o6 r
  448.   {) J7 |1 W' p6 Q) u9 b. ?
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * n+ L: h' }$ M5 O! {0 K
  450.     strRegsName=DEFAULT_REG_URL;
    " {' K! `4 _( ~& A8 |
  451.   }
    , b9 U7 o7 ^" ]' N$ B' l4 y
  452.   if(GetFileAttributes("hosts.ini")!=-1)6 @% |" I' _9 A' c5 ]- U
  453.   {4 G+ L& v$ s% |, n, p) l
  454.     char szIP[50];- m7 d3 Q; W9 ^3 k
  455.     char szDIR[300];4 Q" ~! J3 V( D  n4 ]! X- m2 I
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ( ^4 V# r9 r8 ~
  457.     {
    8 m0 V5 g% t2 H2 ~
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    * ~3 @2 d; n' Z$ s7 a
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 g9 C2 L" u3 c
  460.       strHostName=szIP;" X( X' Y! W9 f
  461.       strHostPath.Format("/%s",szDIR);
    * k8 h+ M; A! h, Z! _9 W
  462.     }/ e% b$ l5 e+ \- }" p, s7 t
  463.     else+ D+ W2 W6 ]/ d$ r6 n  k
  464.     {
    0 B0 B. @% h" a3 {. z& {
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 s4 L& k4 d" g! k4 Y
  466.       {
    1 j" m: c. T) R3 b$ w
  467.         char szLanguage[50];
    ' e# r; a2 i$ ^; v
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");# d' X2 v; F# S* k4 D  s
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: k) C: r+ N9 _8 }
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 Q) c% N; L1 e$ d
  471.         else                                   m_iLanguage=ENGLISH;- d3 V2 A" P3 M2 }0 W
  472.         char szRegister[100];. Q# e. w) ^2 I6 A, o" ~
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' d7 R6 x& g/ |5 ^( X
  474.         strRegsName=szRegister;
    # d- p' H, E- z/ I2 |/ `
  475.         char szPatchURL[100];
    6 _) j* A* c" `6 }  b6 S
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& J. N, T9 Y! B* }! B) f! O
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 `% B" {. y* s- |: {! Y
  478.       }
    ) X( j# N" v+ R0 {& a/ Z2 S7 `+ [7 t
  479.       else' s" s- ]5 s4 J$ G& C
  480.       {6 v: R  a7 }0 r
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 F- X& f0 g+ D( v/ M5 g/ [" P
  482.         strRegsName=DEFAULT_REG_URL;
    ' c2 L" T/ V" d- P/ @$ V
  483.       }
    + [' F4 ]/ W* h$ s
  484.     }
    1 m- p  w6 m1 J8 U' ?) J
  485.   }2 v9 n* H+ F  E) M, |6 {
  486.   return true;6 ?2 ?* P5 _9 U: j2 |2 t
  487. }% y; s. S3 R+ |: m! _3 @1 J$ P
  488. % J7 A# |3 W- J2 `% G. h
  489. #include ".\ZLib\unzip.h"* G9 X% k, c+ ~8 e2 a: G9 b; j
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);: O2 K( Z% Z) {! x( D1 C
  491. /////////////////////////////////////////////////////////////////////////////6 @  u6 G' K9 ]- o+ Y  \6 ?
  492. // CRevAppApp initialization
    - }. u; l  ^) H
  493. . a% X5 I2 J5 i  N3 f% _9 ^
  494. BOOL CRevAppApp::InitInstance()
    ' r7 r7 R+ X% ?! R# E. z5 Q) h
  495. {
    1 _* D2 Q* Z: `7 \# A
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];6 Z/ I4 m2 A' W2 S& Y! q
  497. 6 T, A# m, k9 Z* k9 G* ?
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    0 G( M. x2 F: `3 X3 f2 P
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))* j8 W' j, d; G& k5 Z
  500.   {+ ^6 r) W: i6 O, ^4 B7 ^+ X
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    % N& f, a/ r7 |! ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! t$ ^8 y2 e" K' i3 r4 j  M
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    7 C1 B& }( f+ Z. _1 H6 F
  504.     {) l' i. U6 ^0 f. Q+ r7 c# D
  505.       strcpy(szPath,szPathTarget);, C8 O+ }' U6 q& K
  506.       SetCurrentDirectory(szPath);
    + a. o% J, q4 R4 _0 ^5 t, d3 W# t
  507.     }( A$ @6 T: L4 W0 [1 D" T: n
  508.   }
    2 R" D' q- W7 {+ [! D) e/ m* \
  509. #ifdef _DEBUG1 V  C: c/ o: Y' m9 J: W
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 _3 H! [4 M. q" A: i
  511. #else% J  H  V+ a* m( g' J1 H( S. {
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . m3 k" D8 I2 K0 j
  513. #endif6 I2 @" k' A. Z8 y
  514.   {  Y: p( i- O- A" J# T7 Z5 s
  515.     char tempFileName[MAX_PATH];2 G1 u% B0 x8 Q# Z2 I" _7 l
  516.     strcpy(tempFileName,szPathSource);
    - N! P- p2 Q+ q2 B5 A$ `3 m; |
  517.     tempFileName[strlen(szPathSource)-12]=0;7 v' H: u* l) n5 k% l" D! J& ]) v
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    7 G% m5 t( g7 L/ v" l4 }$ v
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);( G: k; X- m0 `8 @4 E
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    : e" g4 _/ e! N; [
  521.     return TRUE;: C! ^2 j2 I1 l6 m$ H) R! w6 C
  522.   }% M4 T: E# d, w
  523.   // Nuke 0118: Delete run.exe
    ! i( u+ [) _% O  ^, ?" v
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    " K* V# Z4 N' X; M+ m5 S  w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    # L( Y. k# r2 B0 C
  526.   if(!ReadCfgFile("Config.ini"))2 Y) U# t9 V4 N1 I3 }1 @, Z
  527.   {) ?$ u1 E) f$ W4 {
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : o/ h" f- r: J
  529.     return TRUE;0 h1 `8 r4 S, D: B
  530.   }9 s- h: O& ^, A7 R( u) _+ ~
  531.   HANDLE mutex;- s/ U1 u+ `) J& Z4 f$ n8 K, T
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    0 u0 B5 M8 N! R4 m9 [' R  m
  533.   {! h; p! J  ~! j9 I" C4 B; Q6 G
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    : T1 @, Y3 a7 q/ K
  535.     {
    * s5 H, _* ?' x9 n+ Z+ }
  536.       CloseHandle(mutex);8 \" ?4 r- \- Z# @- |' |/ w- J+ w
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    6 G/ t( x1 a" |3 Z6 f
  538.       return TRUE;
    ! k1 F% y8 A. K" P+ m* Q, r9 a
  539.     }
    - u! W1 S5 t. `0 M5 }. T+ g% e
  540.   }  
    ! ~- e) |8 K2 k  @3 W9 l' H$ k
  541.   CloseHandle(mutex);
    7 E! Q8 T! A* U9 |: z
  542. 3 s% h. [/ J6 @. _0 c
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);! f+ `  X( m+ ^$ G' L" ~

  544. . R9 r" K- @) p9 A0 b. f2 l8 _8 ?
  545.         AfxEnableControlContainer();3 [0 U: D, ?! |2 c6 H

  546. : s" r, ?! B* `
  547.   bCanUpdate=FALSE;
    $ y1 I2 W" `$ b3 R8 Y8 ?9 X
  548.   dwStartUpSteps=1;
    # _/ Z/ A! j+ z5 J# B
  549.   dwProgramState=AP_NOTHING;
    : {7 G  U, {) F1 R, }

  550. ; a( I8 O0 F; I4 _: k
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    7 D4 L2 D1 n9 E/ P; B

  552. 9 X, y2 Z  }* x
  553.         // Standard initialization
    1 V0 J* ?3 ]% o3 m
  554.         // If you are not using these features and wish to reduce the size
    4 ?: a% V9 Z! M4 _. l& I; D5 ?
  555.         //  of your final executable, you should remove from the following
    , \& P) g8 Y& B* {/ s0 N
  556.         //  the specific initialization routines you do not need.* F) h8 {& l. v9 z0 \/ e2 i/ I$ D

  557. ( Q( Y, g& P' j' Y5 z- T5 S- f
  558. #ifdef _AFXDLL
    / z, {/ S0 W" r$ T  c1 X, x
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL) ~7 Q8 H* y' g6 Y4 R
  560. #else
    7 f2 O) A1 y* S7 d' G3 Z$ e- k6 C& F
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically6 r) H' l1 q+ Z) O5 f" N
  562. #endif; Q! ~+ O" Z- P2 f8 a; ]

  563. 2 ?0 X* d! R6 I) ]4 q
  564.   dlg=new CRevAppDlg;
    2 F" S+ P6 B0 f& M/ M0 ~0 W
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 v2 P) S* g: ]; c0 t
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ) P1 \  C! V6 |: I0 L
  567.   m_pMainWnd=dlg;4 U2 C- {7 ~( w$ ?8 j8 m$ z+ t
  568. , W2 D  m5 k7 u
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * V9 K$ f8 D9 I9 t5 P8 w5 \$ h- V
  570. ; N8 e0 |; _" l
  571. //  GdiplusStartupInput gdiplusStartupInput;/ ]2 M* a' V# y9 [' m+ X) P% f: b& f
  572. //  ULONG_PTR gdiplusToken;
    # ^, u: T. q) K; G# R" I) h( J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    % v4 h7 A6 R+ X% w; _2 Z# X
  574. # V/ b5 B' K" |, A1 v2 G/ k
  575. //        CRevAppDlg dlg;
    * P) e. n3 t" _
  576. //        int nResponse = dlg.DoModal();7 a! c" l0 J8 `3 R5 c' h  T% ]
  577. //        if (nResponse == IDOK)# B, L0 b( U+ @! ?7 U4 ?$ P
  578. //        {
    3 U4 b1 u  W: i9 K( U( i2 n5 Y" ^
  579. //                // TODO: Place code here to handle when the dialog is
    9 {# r2 t( r2 s6 ~* D/ w- O4 z$ b
  580. //                //  dismissed with OK. M9 `3 K# T" C5 E! Q* G
  581. //        }# q; T$ `" M0 Q. U
  582. //        else if (nResponse == IDCANCEL)
    ( E6 ]3 [. }0 O5 U
  583. //        {
    9 q0 I+ N& j" u3 w# ?
  584. //                // TODO: Place code here to handle when the dialog is
    ! I& J1 ^9 j% ]
  585. //                //  dismissed with Cancel; u! \% S( z9 ]
  586. //        }
    + S4 {) b4 s1 S; s) K
  587. 7 e3 r  q% o, E; r7 j0 P
  588.         // Since the dialog has been closed, return FALSE so that we exit the+ q  J6 D5 |- w
  589.         //  application, rather than start the application's message pump.0 b+ Z& o* ?/ E0 e5 J
  590.         return TRUE;
    9 H9 X; A. }, \4 U: L& X# g) B; e
  591. }9 Q$ g; r) v! H) ?

  592. , e4 H8 \5 }# G& }. F" d! s  A
  593. char *CRevAppApp::strtok3(char *pSource,char *token): O8 }* c( |0 q
  594. {
    + C4 W$ q" i" ?. I9 c
  595.   int i;2 e0 K' k7 Y& g2 d6 u* W! \( \: B% ]
  596.   char *szRet;/ ^* F/ p* Z4 R
  597. ( \& B7 [. a1 `" E6 X" F
  598.   if(pSource) { itoken=0; sztoken=pSource; }1 q! M  R: @( ]
  599.   if(sztoken)7 G7 q3 y+ y' _7 b; q7 R
  600.   {
    1 P( [" g' w/ a' g
  601.     szRet=&sztoken[itoken];
    + B7 [4 L- \: b! Z- q6 N8 g
  602.     while(sztoken[itoken])% f' v9 r  ]" s  a- ?
  603.     {9 S- r! n* C% W2 ?8 @
  604.       for(i=0;i<(int)strlen(token);i++)) _( Z" P5 K  W* H! P
  605.       {4 u, A+ P) ?$ _$ g6 x) S$ O' S
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' E  J& M5 v( p6 I
  607.         {
    + i) L. `  A7 n; f" N
  608.           sztoken[itoken++]=0;
    % B& \- m( v& K5 ~. M
  609.           sztoken[itoken++]=0;
    4 |3 v: t& P  l& C
  610.           return szRet;
    . V" q$ B2 q% J3 Y# D8 R
  611.         }
    7 q" Z$ N0 T0 Z% |. ?
  612.       }' B- `7 J0 z1 {0 ]( T
  613.       itoken++;2 ^+ Q! }6 ?1 C3 Q' ]
  614.     }
    + Q2 k* W5 V" ~( W  I9 u
  615.   }( r+ e3 l+ Y8 v( w2 W1 x
  616.   return NULL;4 B& n. c1 y" y
  617. }
    5 L, T+ L# [0 B* ]
  618. 2 L) z' ]: K; v9 e
  619. void ProcessProc(long Total,long Current)
    : @( ]' Q; S+ \5 x$ ~+ \5 n
  620. {
    3 H! O) K, a- j# V4 T+ O
  621.         MSG msg;
    7 J1 y* d# o/ [% E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);) p5 K/ U" L( x7 U( ?
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " O4 M; }8 J6 j/ ^4 {3 l
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))5 d: g, F4 I* B8 I, `8 R
  625.         {
    0 _: t9 B, Z( V* n/ e
  626.                 if(!GetMessage(&msg,NULL,0,0))7 L/ ?" z$ O) f
  627.                 {
    ! f; l) D0 I! [1 r1 X7 T% `
  628.                         return;  Z- p) Q5 @; ~
  629.                 }: j- N; _% U& l. j5 ?* q" K& x
  630.                 TranslateMessage(&msg);
    " W9 m6 b; Y& X6 \
  631.                 DispatchMessage(&msg);( P5 P9 e: ^; e' c
  632.         }       
    ! p. b0 h  S- `/ H! l9 N9 q; |
  633. }  q2 J' ^$ A- Q0 S. G
  634. 4 n# v5 X1 d3 m8 B$ w* Y
  635. BOOL bFirstChar=TRUE;
    - @. c7 m1 `3 |
  636. 5 K: u) q' ?$ v9 }. B4 M3 K* o: `$ g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)0 ?8 S' Y1 R; v
  638. {/ _  u) V" |7 J$ y# M$ q
  639.         // TODO: Add your specialized code here and/or call the base class
    ' @5 C3 \/ Q. W% v
  640.   switch(dwProgramState)6 ?3 D, h& T+ D, c2 D3 ]
  641.   {9 }  ?7 o: I8 a4 G* `
  642.   case AP_NOTHING:
    & U' `  {: c1 c2 \
  643.     switch(dwStartUpSteps)4 R0 d7 r, b! J( ~! M6 e3 r  b
  644.     {
    , A& h" Q0 }; }4 p9 G
  645.     case 1:# M' F% j  F. o: Y' ?1 h
  646.       {# n6 p* y2 N* o& m7 k7 S
  647.         int i;
    : b, H) \& l+ M7 y3 m
  648.         CDC *pCDC=dlg->GetDC();3 g& h, V" s. u. [" c+ V
  649.         HDC hdcwnd=pCDC->m_hDC;# j  I8 ]. M+ r7 i( U
  650. //        Graphics graphics(hdcwnd);% M: Z8 `. j- d6 b2 g
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");' J1 _3 ?5 x# X/ I( g( L& l
  652. //        INT iWidth=bitmap.GetWidth();+ W+ K& y9 N) A0 K& [/ i) M
  653. //        INT iHeight=bitmap.GetHeight();
    0 N5 m! k0 H$ f8 A
  654. //        Color color,colorTemp;
    , \8 t* \6 D( x1 c, |% K1 C8 X
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)5 y6 j5 b' m. H  Z+ e
  656. //        {- C3 D: j' X# T- A
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    6 N5 }) d! X0 S' O2 i4 y% ^
  658. //          {' J/ b' i! }! f
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ! J! @2 S3 i& E2 `/ i* }9 B! j
  660. //            colorTemp.SetValue(color.MakeARGB(
    " L: h- u4 Q  Y/ I. \
  661. //              (BYTE)(255*iColumn/iWidth),2 c1 p# E! @9 I
  662. //              color.GetRed(),
    + A5 z1 W2 T; [
  663. //              color.GetGreen(),
    ( w9 K% x- h. z
  664. //              color.GetBlue()));! `' n, b$ C0 ~( Y: e
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);+ K0 F' b, z3 i5 V2 }! G
  666. //          }! x% a& k4 N" B0 G% K
  667. //        }: M9 ~$ ?. Z; Q4 y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    1 Y- s; a4 H1 c; s& j& I* C( U
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 r4 `/ y3 B& ]9 y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");; n% @; @$ g+ f5 M
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 s; u- X: E9 `. v' ^+ R
  672.         for(i=0;i<240;i+=8)7 \; w# e' n3 u/ u
  673.         {
    * n" U: ^" Q5 b" _% I6 u$ ^
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 p! w/ m. z4 ^) z7 T4 `7 ^" _% I
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 a9 m' ?1 L; j% m8 }2 g! |
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ Y$ m% E5 l  f; D3 ]: |0 Y& f
  677.           Sleep(33);
    1 Z" i" I$ t/ L$ y6 H5 p
  678.         }7 l/ N) K7 m0 v. k! W$ {
  679.         Sleep(1000);
    & I/ b" L$ T; W& b: m
  680.         for(i=240;i>0;i-=8)
    + b2 j; @0 m: E
  681.         {2 q( }$ Z1 F/ E
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      u& w+ P1 a, j, k
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 ?. Y5 x, Y  Q* e
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ i. l8 z5 p4 _
  685.           Sleep(33);8 T2 K& s5 c# \) o% {
  686.         }) E( M. T; W+ H# M/ ^! B) x/ l
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    0 z2 ~: }9 F) d
  688.         dlg->ReleaseDC(pCDC);. P* Y0 }# W! T2 B+ h( `
  689.         DeleteDC(hdctar);
    ; q: x( W5 y! f8 v
  690.         DeleteDC(hdcsrc);
      h- m- k( B$ ^" m$ O5 r  K
  691.         DeleteDC(hdcorg);
    . Y4 `* v0 F2 L, I+ w2 J, D: t
  692.       }
    . _+ I" J7 N$ u" `0 B" J
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    & E1 a6 d: D* {6 h
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  ?2 X+ n& N, {# J' v) Z7 m7 r
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    : m" g' Q3 ], R/ h# y! q" s1 \! C
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    + Z. i  q8 L. c& ?0 D
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 ~! K! |! w" x$ C0 ]9 r
  698.       if(!Dn.Connected())0 {4 `, F; I% I6 Y' [  y7 X$ N# v
  699.       {
      J( y+ _, a- z# f. `
  700.         dwTotalFiles=1;& k, P! i( \! `/ F' x8 M- a
  701.         dwDownLoaded=0;& O) i, r. f) S
  702.         bSilentStep=TRUE;. S2 `; t' _3 y' n6 f" o9 T! j
  703.         bCompressed=FALSE;
    + v4 o# N- r7 @3 O
  704.         strExtLocal.Empty();9 {$ d# ]7 F* Q3 X
  705.         strFullName="readme.txt";. p! O/ a5 D% ^+ t
  706.         dwProgramState=AP_CONNECT;
    8 P. s# i! f# C6 I
  707.       }
    1 u: A2 p) M: i
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 B8 o# Y* x* {  c3 F$ p
  709.       dwStartUpSteps=2;+ Y" t! |* H$ m, g+ t0 Y3 F
  710.       break;. z2 G* }3 G( Y) N1 h& r6 J
  711.     case 2:
    : |7 e7 \' n! o' J. F
  712.       {
    2 b: F+ o5 k$ J1 m2 d
  713.         int iEOF;
    2 c7 t/ Y3 \' o1 K9 i
  714.         FILE *fp;
      ~) T$ E9 r2 m( d+ W: h8 e% E
  715.         char szString[512];8 R: x0 l: ^) n: c/ y7 ]" D
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");; [+ ?* m6 D. r. }
  717.         if(fp)& E3 W" i; ~% t) p2 i
  718.         {1 }; x& f4 K/ ~! y; M, S
  719.           do$ v; Z7 e' A' L8 B
  720.           {$ v  b1 G5 v" D  l+ l
  721.             iEOF=fscanf(fp,"%s",szString);
      _% f5 W* [6 n* L3 z
  722.             if(strlen(szString))
    ( H/ y& r3 T" V$ n% Q& B: h& M
  723.             {
    3 |( t6 B/ @" h  w
  724.               if(bFirstChar); k2 h$ x" p! l4 p
  725.               {$ B5 @9 D" O; l2 {- B# b' L
  726.                 bFirstChar=FALSE;  \. K; z, N! F' ?8 p
  727.                 bConnectIsBig5=FALSE;7 d- A( V) z; t) f( D. {
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;8 b  @+ b, Y3 R' {/ S/ E
  729.               }
    & \$ L5 [+ T* r: A! C  n4 y3 \0 e# {
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));6 |: C3 J" N  l) ^  f
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));4 @/ _! f; `1 `0 x" k
  732.               dlg->m_ListText.AddString(szString);3 w% n4 y$ [4 d( e8 }
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( ?9 F! @4 m  h$ L1 _
  734.               *szString=0;/ x7 W! {, O# G' m% s5 M9 q
  735.             }! m, b4 J7 M2 d* H, L& ]
  736.           } while(iEOF!=EOF);# S# ~9 u: p. ?. a0 q$ S9 h
  737.           fclose(fp);; Y, ^+ q$ b; k# M$ E2 E& j" C
  738.           unlink(".\\DownLoad\\readme.txt");
    * g- s) I" D8 H4 e1 G) h& w( S
  739.           dwStartUpSteps=3;- p& B& ~5 o: d7 s9 g4 x$ E6 J
  740.         }
    ; b/ y" p0 l8 T7 q$ n
  741.       }8 e" `" z3 G- ~) o" k4 f; `
  742.       break;
    # {2 X1 ?' `0 s
  743.     case 3:1 x( ^; t0 k# L0 m
  744.       if(!Dn.Connected())
    ) p. v! |" q( }& q1 x: K
  745.       {( U+ p1 b  D: h5 M
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);4 c# _, F5 m; |6 g1 C$ H
  747.         dwTotalFiles=1;0 z/ }* j. g* r
  748.         dwDownLoaded=0;7 r9 y$ K! U2 b  w/ n
  749.         bSilentStep=TRUE;2 O. U7 L( }! l# f1 Z* u
  750.         bCompressed=FALSE;
    9 R' y; c' h) u" S* m* n' b* w: z
  751.         strExtLocal.Empty();1 }5 [! b2 [6 e- k# e$ K
  752.         strFullName="checkversion.txt";5 ~% `5 Z: Z2 t+ ~4 D# x
  753.         dwProgramState=AP_CONNECT;
    & Q% E* l5 p; h8 M
  754.       }
    5 H( }6 r  x' Z  k; F
  755.       dwStartUpSteps=4;
    ' x1 L7 u; ^! O8 G; y" {: s
  756.       break;
    / r( e& ~2 ?3 X
  757.     case 4:( T) u' @" W9 F7 f
  758.       {! T- N1 {$ n$ }# F3 u! N
  759.         FILE *fp;  z* I& q& A3 D1 z; L% k; S
  760.         char szString1[128];
    2 m3 D; v; V3 R3 a4 ]
  761.         char szString2[128];
    6 O& C4 }  C- G$ g; F* R. o' K1 y
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( p% V5 p# [& G/ Y& Z
  763.         if(fp)& d0 ^( ]0 p: `9 j7 h
  764.         {# M0 |/ S; O, V- i8 i5 e  N' }( T
  765.           fscanf(fp,"%s",szString1);
    4 W3 ]  R' u  v0 m+ k9 N: l
  766.           fclose(fp);
    1 u! N1 y0 @( w# r& ^$ ^6 ?- i# g
  767.           fCheckVersion=atof(szString1);9 ^2 M5 K9 ~/ }! Z. ?3 E! b( M  D
  768.           fp=fopen(".\\checkversion.dat","r");
    2 a8 u: Q  C# s. z
  769.           if(fp)2 a; V' J$ P0 s5 N% K0 H
  770.           {* ^6 c/ A+ V4 x" I* m% V3 ]9 x: p
  771.             fscanf(fp,"%s",szString2);5 ~! u* [" \. R. u. z
  772.             fclose(fp);& O0 P$ I1 q* h) E  A
  773.             if(atof(szString1)!=atof(szString2))7 c5 g. m6 x; M* Y+ \6 ]
  774.             {6 y, U6 ~0 v  H1 r; B- {
  775.               if(!Dn.Connected())4 j0 S# k) B) H' j6 ~  G
  776.               {
    9 u$ d# O0 t1 Y5 {5 D
  777.                 bFirstUpdate=TRUE;
    - V( x5 _5 e9 g
  778.                 dwTotalFiles=1;- B+ ~9 b' w) t# X  A" k7 y- M
  779.                 dwDownLoaded=0;7 U4 b, _" d/ r" K5 `' T/ u
  780.                 bSilentStep=FALSE;$ V- U: b4 J. u2 T7 W" m; {' W- v
  781.                 bCompressed=TRUE;
    5 w& o& M) u$ {4 e# S
  782.                 strExtLocal=".\\DownLoad\";- I- ^! K2 Z. I+ B
  783.                 strFullName="update.txt";' M8 H: x3 S$ W5 n" d
  784.                 dwProgramState=AP_CONNECT;8 k/ l: G5 U) y5 [+ n" X* T# S) N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 T4 S( d; [! _, y) d
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ' z  u4 w0 o# Z' K$ v/ H( t/ \) z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- d1 V" d& `, _0 j' ^  D% e
  788. ! \1 A' V9 |& T) P; H1 G% k- ^( P
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 u4 |( W, {% u4 ~, t: A! Y4 T
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    3 n3 n2 j8 t$ s7 D; n" v1 [6 x. s
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)( E$ t- G* F% N' M" m
  792.                 {$ r% j5 X# X# W3 C% |! s
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
      M, Y0 \! D8 S
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");# ~$ M5 U$ _1 U
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");7 S& Y5 o8 E1 y8 [8 Z, c
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . L  r2 B2 f+ L: |
  797. . _4 D% N- U$ W- ]
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ {  Z5 I" I5 k( A1 O+ T3 N3 r
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 N# ~* n5 y4 L* z! X; X
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 t6 S: M0 s: ]  U# e- h+ W; [+ l
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) U  C+ R& a) E: O, E! ^( p6 a0 z
  802.                 }- i5 U! C. ?& m" t# l' E9 S3 A
  803.                 dwStartUpSteps=5;7 p" T/ D9 c: M; V2 U
  804.               }
    : m' F/ _! U, S* R" G) J+ F
  805.             }1 \0 W7 c" ~7 i! `) o$ }3 W
  806.             else8 a$ F: a- _" X2 }0 t. K% V5 \; b
  807.             {/ Q8 @( p6 V; Z$ T2 U8 \' V
  808.               unlink(".\\DownLoad\\checkversion.txt");' r9 H. Q' b  q! E
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    # H0 u# l/ g1 ^- _
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 j) i5 A# E9 ]. e2 L2 p0 @
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 _; {5 W# y) i) W

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

2 Y; I! {8 t! J" \

評分

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