CSUpdate.exe源代码

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

9 y+ c; R5 E* m9 I* e1 f& e4 ^2 }
  1. / RevApp.cpp : Defines the class behaviors for the application.' z$ M6 D: i" w( A) N+ n
  2. //
    . m* L* x  q) }9 W8 g0 a) R$ }
  3. " M& E' S( Y0 m0 [* A
  4. #include "stdafx.h"
    8 v, V% b) }! |4 ^, C

  5. + s8 ]% i4 k" _& p" b) _* P
  6. //#define UNICODE
    % ~+ H9 T- W  n
  7. //#include <gdiplus.h>4 o1 X/ t) _5 t0 K, i8 a" c  v
  8. //using namespace Gdiplus;& j+ T. @2 Y. p9 Y1 O- P, p

  9. 7 P4 o& F3 O9 y4 K0 N8 D
  10. #include "RevApp.h"
    ! P2 z2 L* G( h+ T
  11. #include "RevAppDlg.h"2 v2 J3 \/ B7 o9 Y
  12. 3 \2 S+ O# s, }" ]$ j4 L
  13. #pragma warning(disable:4786)
    % i" {& d& s, T0 ~& A
  14. #include <map>
    8 T" `# A. ?  w  R+ i
  15. #include <list>/ y- |0 J& y/ O5 q) C, m5 A
  16. #include <direct.h>, q" A$ `# a. s/ d8 e, ], j
  17. : s! [: b/ }, _1 c* M' i( O
  18. #ifdef _DEBUG
    - a' l+ ~0 Z' c/ d0 T/ m3 \5 e. {* ^
  19. #define new DEBUG_NEW
    ( C( F3 ~6 k  d& ]9 i0 i
  20. #undef THIS_FILE
    7 v  p, F8 }% H' m5 t3 g
  21. static char THIS_FILE[] = __FILE__;
    & |2 ]7 i: n7 r0 t9 T! k( {
  22. #endif
    , R; t# @" Q3 @- k
  23. #include "SkinResDef.h"
    " y7 a; i  w$ Q
  24. #include "ChangeBG.h"1 D3 Z1 H; O- `  J4 ]
  25. #include "AFXINET.H"
    ( I3 W+ `$ P; g' i
  26. & {1 J1 z' G. f5 D) _6 M
  27. #define TRADITIONAL_CHINESE 0% ~+ V& y$ N) ~8 b
  28. #define SIMPLIFY_CHINESE 1# U5 P4 l' u' R7 _6 V% v& K
  29. #define ENGLISH 2
    0 c$ [! F5 z$ q8 w) c) N
  30. int m_iLanguage = ENGLISH;
    - L% k' L4 A& U: |
  31. /////////////////////////////////////////////////////////////////////////////  `) C* Q, z7 G2 Y
  32. // CRevAppApp
    7 K2 |6 S8 |, C0 }  k

  33. . O% H+ x; G- o6 n" Z: d
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    $ k1 x' E8 u$ j6 M% Y# j
  35.         //{{AFX_MSG_MAP(CRevAppApp)) q& e7 o: n6 n0 N! \0 \7 e
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    - F5 |; [" ^: o* ^
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    8 _( B% G( Z1 b% h
  38.         //}}AFX_MSG
    7 c# A, w; J9 R# v  O# ~5 P  w. r
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 w  |' N' ^5 g7 }
  40. END_MESSAGE_MAP()" {/ }6 B$ z( u

  41. * Q0 y* s) l: c/ g4 b
  42. /////////////////////////////////////////////////////////////////////////////
    3 Z1 ?% J7 ?0 G  D/ b7 _0 U3 J
  43. // CRevAppApp construction# v' Y. m/ M9 ~7 g

  44. 5 [9 p* K4 D9 r7 n
  45. CRevAppApp::CRevAppApp()' C( D+ x5 \! \$ s% S) `  y4 P: E
  46. {
    5 n" V7 Z2 @5 q3 S# {) G6 ~2 m' r
  47.         // TODO: add construction code here,. k  @" ~5 N* e: ~$ r7 }/ l
  48.         // Place all significant initialization in InitInstance
    / t% w; T! h% \7 r3 {7 l
  49.   bDisplayIsBig5=FALSE;
    3 J  b+ m3 A1 |; t3 }
  50.   bRestartUpdater=FALSE;
    ) b* j9 J1 {; H2 E# K
  51.   bFinishUpdated=FALSE;/ p: B" K- u( w7 s
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    , @! |5 G1 C9 x: u8 H9 ]6 a: O; X
  53.   InitChangeDataBig52GBKS();
    5 m, ?8 U: ~1 K0 d7 d/ M
  54.   InitChangeDataGBKS2Big5();
    ; ]3 X, s! q" l8 {. X
  55.         //
    * X. \- `7 g3 F! W* Z0 M4 \
  56.         bClickRunExe = FALSE;
    % ]0 `" n$ b* x' l5 @; e
  57.         //, U+ Q2 @2 }" ^/ `
  58. }
    : k+ g0 I/ h! g
  59. 1 J! ^; X- c, g0 `" ]  C9 L
  60. CRevAppApp::~CRevAppApp()
    ; X6 K6 [8 D# H) w2 T) l( p
  61. {
    2 i) y8 z! G9 q/ ?4 M* r3 v# ~
  62.         // TODO: add construction code here,. ?$ ?0 Z1 V( q- y# P" e" Z
  63.         // Place all significant initialization in InitInstance+ o; A2 E8 L7 z* O0 x0 f
  64.   EndChangeData();# q7 C( A4 s3 w# {
  65. }
    / i3 F. B/ T; R
  66. , a3 q4 }! d+ R6 O9 j4 a
  67. /////////////////////////////////////////////////////////////////////////////4 y. Q7 w  x2 V+ l+ m6 U; S; T  _4 A0 U
  68. // The one and only CRevAppApp object
    : ~/ Q  J& F: T) p3 d
  69. 3 A) X3 N8 p: H/ Y3 W; L( ^1 s  z
  70. CRevAppApp theApp;
    1 b2 n6 S$ \- j# R7 s9 J

  71. - B5 b6 _: q9 w2 f- c& h$ R3 Q
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    9 d2 r1 L; b+ D& S/ s* Q" p$ K5 P
  73. {
    7 E; u& N6 R0 ]3 ~- n) @' c- T
  74.   int iEOF=0;
    ( n  i' |. y! A
  75.   char szTempName[MAX_PATH];9 M- J; {6 U7 a7 s) m2 }
  76.   *szFileName=0;: H5 Z: w; j8 E& |* g, R. B' X
  77.   iEOF=fscanf(fp,"%s",szTempName);
    3 z3 ]; i- ]3 O3 |2 U* p+ o
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& n" k, E1 ?& m
  79.   {
    - o0 k& i  t0 i. U# k4 y
  80.     strcpy(szFileName,&szTempName[1]);
    + C/ @, n2 t* q" s
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    , M8 G$ R% H$ ?+ ]2 a1 h  m' y
  82.     {' Q, o. a7 S$ H
  83.       iEOF=fscanf(fp,"%s",szTempName);& t( n0 D. e7 v* b- R& I
  84.       strcat(szFileName," ");
    7 I# U1 [- f7 d8 W; o! ]" M) N
  85.       strcat(szFileName,szTempName);
    0 E5 J7 w6 x# z1 D( L* c2 \0 _. a5 G
  86.     }
    # ]; n3 a4 g+ z) a) I
  87.     if(strlen(szFileName)>=1)  n8 x+ J+ [& G" l" t. K& f
  88.     {
    8 A" m" D+ p4 C" g# l. A
  89.       szFileName[strlen(szFileName)-1]=0;
    . M1 J% Q9 K2 J5 m8 Y
  90.     }
    6 P$ b. x3 C" f0 t# Y
  91.   }# E6 Q6 B" o0 I+ V7 L3 c& b
  92.   return szFileName;
    # I* D0 y$ H+ J3 [0 v5 }
  93. }' Y8 g) L" z* _0 c/ c

  94. & z+ C+ _+ q8 V& m
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)4 g, r- c% R2 V) i
  96. {4 M' g5 \/ o) Y8 l1 K/ Y' h) _9 e
  97.   FILE *fp;6 R5 a- X. ?) ?" x
  98.   char *key=NULL;* R: p: I4 v, c0 b
  99.   char version[MAX_PATH];' k7 R# T: X! T1 d2 e3 e5 @- E
  100.   LPUPDATEFILE file,olds;
    0 d( V  w9 q# P/ U2 r) N
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' W6 P, m3 y" A. X! O

  102. 5 N, Y1 s! P$ t* B; |2 f2 V! H) H
  103.   UpdateList.clear();
    ! m3 S) I5 f4 W( L
  104.   UpdateFile.clear();
    3 ~, O7 \/ k5 d1 ^' G/ N9 H
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; |- D* _9 v; Z, G# S9 w
  106.   if(!(fp=fopen(filename,"r"))) return false;  `- Q0 a% G. v! ~$ K" u* V
  107.   fscanf(fp,"%s",version);
    ' [+ R2 @( P) m7 ~
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    6 B, ?; f3 M, {  J! X3 E
  109.   while(fscanf(fp,"%s",version)!=EOF)
      @+ c5 e7 J/ [* V. d- ]% Y
  110.   {
    2 W8 c# H" x5 O
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 [( V; r" {( c, F' ]
  112.     fscanf(fp,"%s",file->path);9 V2 W8 Q# s+ L
  113.     ReadFileNames(fp,file->file);5 A' @2 b# V/ {7 g
  114.     strcpy(file->full,".");
    " L# m, S3 u1 y( y  F3 D3 O; }
  115.     strcat(file->full,file->path);. j9 z% d+ T9 \
  116.     strcat(file->full,file->file);. [6 r4 y. y# _& Y+ A) m$ b
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())# s9 J* @5 T4 F; A! t
  118.     {! M9 X  c$ T8 L0 m- F
  119.       file->vers=(float)atof(version);# Z% k0 F9 Z( u- c$ T
  120.       UpdateList.push_back(file->full);3 f6 q% W1 Y$ S: X% c3 e
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));% |, k& V, w: \+ q: K7 w
  122.     }
    ) S2 b0 r: k/ @
  123.     else# q4 M- V4 J% `+ r( w. ]$ e: C" Z- I
  124.     {7 V9 x' U& V7 _/ U$ F2 N5 i! D
  125.       olds=(*p).second;0 r) f9 x: P( O& B3 V% i
  126.       if(olds->vers<(float)atof(version))2 v; _9 v. W. L3 M
  127.       {
    6 R! z. `3 y. j5 L( q" P) s& R
  128.         olds->vers=(float)atof(version);
    : C. n6 ~1 P: j7 x
  129.       }
    + F# b. U1 e! Q3 J# i" O
  130.       free(file);
    ; Y3 X2 F; q' V  `2 t5 V
  131.     }9 H$ Z2 P7 P. J$ R
  132.   }' \6 J7 p: i/ P3 e
  133.   fclose(fp);) M5 c( o3 a) J) o3 D5 H, n
  134.   return true;
    - P0 P; T+ \5 v" L! ^
  135. }: X  R6 Z4 L4 [. [! Q" j
  136. - w6 M3 t4 i+ M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)1 n' u$ y9 I2 y1 T' J
  138. {% l5 z0 {3 U$ T4 E: f5 G$ k7 s
  139.   TCHAR  szFull[MAX_PATH];+ D6 f# Z) ]7 S/ X
  140.   TCHAR *token,*inter;
    # H; j) q/ x! ]8 E9 T
  141.   *szPath=0;
    , j  s. B/ o, a$ r9 w( e+ ^
  142.   strcpy(szFull,szFullPath);
    3 G( x6 K! t( [
  143.   token=strtok(szFull,"\\/");1 k0 |3 ]4 A8 R: K
  144.   inter=token;& [& N+ Y7 }+ h# t
  145.   while(token=strtok(NULL,"\\/"))
    7 e, P, @& q4 V+ Q; L
  146.   {
    4 z* ^3 n2 X( y. Q8 O7 n3 ^( X
  147.     strcat(szPath,inter);
    0 C, K3 \0 [- |& P
  148.     strcat(szPath,"\");- }7 ~. a; J5 N5 g* w( E; A7 U
  149.     inter=token;& k5 Y8 t* ]3 g& E# Z4 R* U8 P5 s
  150.   }# X7 q! v2 d! i3 }6 O
  151.   return strlen(szPath);
    6 u! \5 P2 m4 h% l0 J
  152. }- J& U! Z9 F) w

  153. ( Q# d3 d- q% P7 A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); q; A* M# |1 \1 v; K2 A5 h
  155. {; D5 ]* f+ m( `/ }0 o
  156.   DWORD attrib=GetFileAttributes(Target);4 l' l1 ?1 u! j1 N' W1 w$ U2 `1 B, J
  157.   if(attrib!=-1)- H/ \7 U( ^# n. J$ v7 `9 s* [
  158.   {7 h% h7 p' G; p# M# q  J2 O0 v
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))1 K3 Y  X" E( Y) v, U* ~
  160.     {# b2 C  z1 J1 D/ [' c1 ~
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);8 P) u5 R5 n1 m2 V# {( d, j! |, K
  162.       SetFileAttributes(Target,attrib);
    : }, j* a6 A7 u9 R# O+ a
  163.     }% p) ~  v8 {" ^! x, g
  164.   }9 [6 @. D9 E) Z$ V* f) |2 A" [- d
  165.   CopyFile(Source,Target,Erase);) s" \7 ]$ K" Y" ~* k
  166. }7 e1 V/ Q: `! _, P& ]" V

  167. * l  a; l) {  N/ k) h
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...), ~/ g+ v+ }: ^8 V# C4 T
  169. {
    0 i/ Y; q6 |" U) C
  170.      FILE *fp;# B2 Q; \7 I/ I! r1 _& m& v
  171.      char  szBuffer[8192];
    5 e$ ^( W! p3 H2 q5 ?. w3 Z/ R
  172.   va_list  argptr;# O. c7 \$ R5 v! J: O/ e0 s

  173. 4 w/ }' n6 M; o
  174.         va_start(argptr,message);8 Z. b6 P8 l  K, E7 F. N
  175.         vsprintf(szBuffer,message,argptr);
    4 _; U! [3 T% w# U5 y1 f
  176.         va_end(argptr);
    8 y+ |1 _- k0 v% g# G" g  a: b
  177.   fp=fopen(FileName,"a");( S4 c- z7 K/ B8 u2 \
  178.   if(fp)% N2 O# {3 N7 T' R; m  D
  179.   {1 m; c1 k: T6 a
  180.     fprintf(fp,szBuffer);, d+ j6 [; G- t4 D- K
  181.     fclose(fp);
    0 |( P, c: S/ D. d& `- S, B
  182.           _flushall();
    7 x! E' J- {9 L+ W* |1 V3 V1 A
  183.   }
    ( B4 I0 b' U( a; D" U
  184. }& J) ?0 T7 V$ [2 T

  185. 5 n+ o! [' H- G. t3 k) j' U' X
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / {9 [5 i7 d8 g
  187. {
    8 S6 f! q5 H+ j) q
  188.      FILE *fp;- K. S9 o/ D3 |# a6 w5 ?8 r8 \7 q
  189.     DWORD  attrib;
    2 M% H; `0 m$ o+ J1 P' ?
  190.   attrib=GetFileAttributes(FileName);. X- |+ Z1 @- G( n( b4 x6 j
  191.   if(attrib!=-1)( x, |$ G( v/ H
  192.   {9 k+ d- C/ ]" W. z/ X9 t( K4 Z( p( l
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    / `1 g, N; M1 \. a+ ~) E
  194.     if(!SetFileAttributes(FileName,attrib))) y, Q+ R. Y/ d$ K7 Z. V
  195.     {. r, j# p3 e5 v. g# g/ j8 ?
  196.       return FALSE;
    # }: X( F- c! |
  197.     }5 Q# m) I& A+ C
  198.   }- ^* m, F  l, t" V
  199.   fp=fopen(FileName,"wb");
    . s; {* H! D. c0 l7 P6 Z7 u1 m0 s
  200.   if(fp)4 K! L) q! y, ?. C8 _
  201.   {
    ; S) j; b( F0 [9 `3 L0 u* S
  202.     fclose(fp);/ Y# ^% }! J+ q2 ^; k; M  o
  203.   }; A. v1 g  `! N. z8 \& V, w8 y0 n
  204.   return TRUE;
    # `; r$ }% X  ~' y
  205. }
    - @- ?! w" {& `- S
  206. & @: t- |* G! ]
  207. BOOL CRevAppApp::UpdateLocalVersion(void)# d3 y+ n: \" _& C% r* J" |
  208. {
    & Q  U4 F# n$ W1 d: A7 D" J0 n' ?  J' C
  209.   char filename[MAX_PATH];
    / O4 a8 k! E* I. Q/ |6 B
  210.   LPUPDATEFILE file,olds;( G; a3 o/ D7 V0 {' y, \; t
  211.   std::map<int,CString>::iterator i;! {4 ?$ Q# M1 i6 `6 Z
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! R* I8 b$ Q( l! ^5 b
  213.   std::list<CString>::iterator l;1 p: b) t2 M( w4 t9 t

  214. 9 Z. c. P6 {, T4 o! B
  215.   if(bFirstUpdate)
    0 [, ]& n+ U" G& S! p+ A
  216.   {
    # l7 O- d% v) {, ~) d
  217.     dwCurrFile=0;% T' Y  Z0 D. A. {. f
  218.     bFirstUpdate=FALSE;7 ^) `& G8 X: Y5 m# ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & ]+ f! L( _5 K- ~
  220.     {0 m5 Y' V  E$ B; i
  221.       dwTotalFiles=UpdateLocal.size();
    1 ^- i% |- j. Z/ C3 \
  222.       dwDownLoaded=0;7 M8 i% R  S% u3 T3 _: a
  223.       bSilentStep=FALSE;
    8 w4 I0 t0 U/ w! ]  ^* h
  224.       bCompressed=TRUE;
    2 Y0 G" t3 ~5 J$ [$ @3 H8 r# T. H$ b
  225.       strExtLocal.Empty();! i3 @% S2 P2 I5 ]) `
  226.       strFullName=(*i).second;) |1 }# K1 Y! G
  227.       dwProgramState=AP_CONNECT;
    ' f/ q3 F7 s9 b' P
  228.       return TRUE;
    * V* K: _2 {- `; R# J' O9 j% k2 @
  229.     }
    " d) Q( `: c1 k5 x- h
  230.   }9 h) ]& h- Q) T
  231.   else if(bRestartUpdater==FALSE)
      c' v% Y8 ^1 Q+ q! f8 d; l
  232.   {
    - a" x7 E" q/ u1 z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())# C) r5 n- s* M( ]/ N4 t
  234.     {
    ; s8 T* A+ g6 H
  235.       file=(*p).second;1 u6 e9 N$ L* o
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())+ i) a" d2 a) i; L% h
  237.       {
    7 w7 R2 n+ y) U, ?, g* R
  238.         olds=(*p).second;( D4 A& e  k& h- b
  239.         olds->vers=file->vers;# B& W7 J0 B5 Q6 m
  240.       }
    " _( w8 X5 F, x2 N1 r  y
  241.       else8 |/ F" P3 `9 {/ n0 O
  242.       {* s9 j$ h( W# u" ]1 v
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( ^3 f' @9 w3 V& J$ F
  244.         memcpy(olds,file,sizeof(UPDATEFILE));4 W) G; s! M, o2 M4 B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ) m5 }8 y- y, i. I  [3 a
  246.       }
    : s8 S  n4 j: h; V8 A
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ) C- N  _; m" T$ d! P
  248.       sprintf(filename,"(%s)",file->file);
    4 A1 R7 M1 D: {! Y7 u5 v
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);$ Y" B) E( p: z3 i7 f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }% i& ?4 W4 [) Q1 h, X
  251.     }
    * X; `9 X7 P  m5 A1 W- ^
  252.     dwCurrFile++;9 I7 D! u$ Q: J3 h& r. Y$ X: k
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())2 D) r" |  M2 h4 S) c
  254.     {- _1 ~7 U) l! f1 D) C" |
  255.       bSilentStep=FALSE;; A: `" c$ A/ q5 D, v* O
  256.       bCompressed=TRUE;3 N. ^# y0 O) y% [- r
  257.       strExtLocal.Empty();
    : ~4 j3 ]. R$ ?  S
  258.       strFullName=(*i).second;
    - u) c( F) P7 T+ |7 w! ~% ~
  259.       dwProgramState=AP_CONNECT;
    & j, \$ C% r2 q) g
  260.       return TRUE;2 w) Y8 s9 J* E4 z% q
  261.     }
    ) I5 f& _# j" A) r
  262.     if(!bRestartUpdater)9 B1 M5 q3 s$ E( G
  263.     {6 P7 c& v1 h- B9 J; @' x/ w
  264.       int iCurrSize,iFileSize;' e0 I0 N: o( [- w, ~7 Y
  265.       iCurrSize=0;7 M8 E" ~8 R0 n  D6 N
  266.       iFileSize=UpdateList2.size();  Q# p9 T: L; F, b! F9 Z& X
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ' a0 s4 p6 V1 b% p: e
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");: X; c1 X/ V" t+ @* e7 I
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");2 h2 v2 d7 t3 i- Z! Y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % I! x& r8 B& B( H
  271.       Fclearf(".\\update.dat");9 P0 a, J; r# ]+ B- [! ^% R5 j
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    # c+ b( }  N9 x' g
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 t" \! I( m7 E( O
  274.       {8 U6 i; H& \! R9 k! _$ y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())% g2 R! G3 ^+ V; A, v
  276.         {, R; n$ t; s! r' u
  277.           file=(*p).second;# ^7 l7 f5 q& ~
  278.           sprintf(filename,"(%s)",file->file);
    2 S5 m. _+ {5 v6 K; s% _- ~3 x
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 N1 _' z) p' V% W; N
  280.           iCurrSize++;6 D! L0 q* y1 U6 O/ h6 _2 U
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % a5 ]" Q; g' X* y. ]1 \
  282.         }
    . y0 [- E& H9 A, h
  283.       }
    ( y) m' e' B4 Y! w8 h& [
  284.       unlink(".\\update.txt");
    9 D/ @1 [: L8 v3 w% T. L; F& k, \1 c
  285.       unlink(".\\update.tmp");" K: n3 U8 G6 x5 y
  286.       Fclearf(".\\checkversion.dat");
    8 z; y. Z0 F' u7 E3 i
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ' C0 a4 \5 _- _' ?/ U6 ^% A& }
  288.       if(UpdateLocal.size())# v! L7 |- J: W
  289.       {) ?( F: l% d1 C8 @8 |
  290.         UpdateLocal.clear();" u9 `4 X( f; R) d
  291.       }; A/ j8 r6 |) h' \) r" _' o
  292.       if(UpdateFile3.size())
    $ u3 T1 C6 c# ?, {3 X7 M! C: N' w
  293.       {6 T9 ]+ z' Z2 B! X3 V1 n
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 R: s$ ]: ]: E1 {
  295.         {! _9 S! {: U* J! q: v; U
  296.           file=(*p).second;
    , |4 B/ s8 Z: T0 z) y
  297.           free(file);( |& C: K" A# |: `% ?
  298.         }/ M7 n& e. g# f, U
  299.         UpdateFile3.clear();  _9 T7 T& V' T1 X
  300.         UpdateList3.clear();8 X, p7 \& }/ G! |' R5 O
  301.       }- z- B: C' j0 q8 L' t
  302.       if(UpdateFile2.size())
    6 M- L% v! s+ L" r- F2 ]
  303.       {  k) l0 h6 W& ]4 O* L# e
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . E' w0 |9 A1 R
  305.         {
    ( X* v, ^7 h  _. b
  306.           file=(*p).second;: K4 Y# L) g  E- L, |6 ?& Y3 [9 n1 c
  307.           free(file);
    & ?7 t) D$ F. q0 [% K7 t, S
  308.         }
    & S4 @: }, F8 p# i: E$ n
  309.         UpdateFile2.clear();! u8 |. W# r. @1 _2 [9 ?
  310.         UpdateList2.clear();: P) ^9 V! a. y5 z
  311.       }7 C2 j8 a, U/ E3 ?  e4 D
  312.       if(UpdateFile1.size())  T! c+ f5 s2 f, D) I
  313.       {
    4 _- E9 p2 _$ s" W  _+ O5 ^
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# M, C1 Y5 I% F0 k% e1 M7 I
  315.         {, _1 M; \$ m# [9 ^
  316.           file=(*p).second;
    : ~1 _4 N7 N# x
  317.           free(file);
    6 j( |1 m- b1 Q/ z# H8 Y6 V
  318.         }8 k1 l. B$ \4 w- g; k: h: N
  319.         UpdateFile1.clear();
    ) L3 x# M9 L* F
  320.         UpdateList1.clear();
    ) q5 Y" x! Q( Q
  321.       }# Z/ s) |  n, _7 G
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    8 d' [. f' P& d! A
  323.     }8 A# N8 }' n5 Y3 i2 O" ~2 m$ [  |# G
  324.   }) p8 M, z; ^+ b
  325.   return FALSE;5 ?* k, }7 h( n6 Q5 h! [$ E
  326. }' x* h; G5 i& g5 m
  327. # o, F* l' l; V' B! ~
  328. void CRevAppApp::ClearAll(void)
    # ]1 j0 `2 \3 X( D* j7 T) v- D) L5 p
  329. {
      b2 g- y7 T2 l2 D0 Q5 `
  330.   LPUPDATEFILE file;
    9 G$ i* n( D2 c& P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;$ \3 N" L* Y3 _8 q

  332. . m# O0 @! a- F: m6 I# B
  333.   if(UpdateLocal.size())
    - Q" h$ J! f# D0 ]8 a) M1 a7 O
  334.   {
    3 h: k, ~. u  Z% J* K- J
  335.     UpdateLocal.clear();
    # N6 A9 G/ ?/ h0 c2 i/ @
  336.   }
    1 O+ u9 k  r9 L& ]9 j# J$ v
  337.   if(UpdateFile3.size())" p9 o1 N% n% W2 |
  338.   {+ [8 C6 |, z. j, T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      [9 W+ ^3 C+ R# Z' z  B
  340.     {
    / [, _3 V" z% {: G1 E
  341.       file=(*p).second;: f/ o- v3 s: b( O
  342.       free(file);( k- P: i$ W, f3 s6 M% s- I
  343.     }
    9 W7 ^( f' H3 _5 ~! t
  344.     UpdateFile3.clear();, S! Y; D' |: ]
  345.     UpdateList3.clear();
    ( h' ]' G, ]" i0 f2 L
  346.   }
    - q. S5 L' S8 s9 v4 h3 P+ H$ l" W
  347.   if(UpdateFile2.size())6 d) v" h& e8 m; _- d, f
  348.   {
    : m7 s1 x" g  l3 H  V
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , k- @! R5 Y) `$ z/ k+ I
  350.     {
    % u$ m& O, @- B+ Q7 }
  351.       file=(*p).second;
    ' U3 y7 ~- u& g# d' L) _  N' r
  352.       free(file);
    ! o9 A" z7 [' U$ b9 H4 B0 X
  353.     }& \6 r' _$ B; u  x" l; |) V
  354.     UpdateFile2.clear();
    , u! S: i5 w. P$ G( ^% _, p& g% z
  355.     UpdateList2.clear();0 j& f+ F8 S8 j% _
  356.   }
    ( _& B" ]* s3 R& V% i& F+ N
  357.   if(UpdateFile1.size())
    0 m% j5 B9 |; `! A: c; |8 s0 q
  358.   {3 }3 [% n) l* O! T- F# p
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; ^5 x1 h. i: m* r- C4 y6 z0 q
  360.     {* c3 [' I# Y+ x5 G& w
  361.       file=(*p).second;5 s7 E. r% d3 U1 R2 u) C
  362.       free(file);
    9 [7 p% E& Y4 B) }. ]1 V' I4 I. Z
  363.     }
    ! ^' d" M6 q! X
  364.     UpdateFile1.clear();
    . \2 c  h& |- \8 M# H
  365.     UpdateList1.clear();
    + H# g" l8 f9 c  L
  366.   }
    3 ~3 O8 f+ J, t6 a+ Q
  367. }  ( v' K. D- M5 s3 Q! H# K' a
  368.   
    ) m- f% o& U/ p
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ( `3 l/ J: f0 I( q6 D. G3 _! O
  370. {/ ~% l3 C6 m% Q7 F
  371.   int c;* ~6 H- C# a# x2 t1 ]
  372.   LPUPDATEFILE file1,file2;* I, i- f: R4 @% }9 A
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , y' q3 J! j; z- A/ V
  374.   std::list<CString>::iterator l;, X4 D& p, m& T' C
  375. ' H( j( u- c# N6 U& j# R9 o& L
  376.   UpdateLocal.clear();' P0 @4 ?& S8 X) e5 C/ d
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    * }) y2 ?, d" e% n4 L6 p! C
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);( K% S; {( n' B" e1 \. ^9 |* X
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);$ ?. z; n' f! x4 C4 _+ O1 G: |7 l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' c( k; R' A* j$ b
  381.   if(UpdateFile3.size())7 r2 h- u8 f; ]+ j; _/ Y' G4 M. {
  382.   {( n; `, Q6 L4 F" [+ m3 ^+ D* H
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)9 U; c" K, D0 V$ A8 J
  384.     {
    , B( H' |' E( |! v
  385.       file2=(LPUPDATEFILE)(*i).second;
    : o. H7 d' L! [0 {$ n  o1 b$ {8 D6 X
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    , a- Q) T* T  b% B/ x0 n+ d
  387.       {$ Q. s' H( Z' M! ~- M: V
  388.         file1=(LPUPDATEFILE)(*p).second;
    8 ^8 `7 C/ ^' X4 l$ n
  389.         file1->vers=file2->vers;
    ; H4 {5 \, ^" @9 n; f9 k
  390.       }
    2 d# i! I# ^5 A4 o$ m4 w; V% n' e
  391.       else
    ' k4 E+ @* L1 \2 \/ k( m: R
  392.       {
    7 q+ R7 h: y; N- T; ~0 l
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 |! _" g5 y  \" n0 w
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ! ]  E  ^, y7 N( s( E& w/ x+ D
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));' Y6 `6 ?9 r! }/ j3 j  c2 z
  396.       }
    ' k) ~2 ?5 n* p+ y6 n5 @5 x; F
  397.     }" B5 H* i, Z( G6 i
  398.   }
    ; o0 Y. |7 z( j; y% J
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)6 R' r: r+ u" v+ }9 }
  400.   {
    ; w' K; c5 w' Z8 y  |- P1 i' q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    - K5 M  z0 k$ i6 M/ G4 T
  402.     {4 Z5 C7 v% C+ b; w5 o
  403.       file2=(LPUPDATEFILE)(*i).second;
    7 ~0 o  x; Q- s7 o9 }) G# G
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' d" G0 m8 l$ w: k
  405.       {
    0 B6 @, R& w+ D, A1 E5 d( l3 f
  406.         file1=(LPUPDATEFILE)(*p).second;
    ( r( C$ G" J% G! i
  407.         if(file1->vers!=file2->vers)
    ' }9 S$ F) c, W+ C2 z* y. O: s
  408.         {) q- W( g8 t' w. o
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 ?! ~: l0 a1 Z5 r8 ]- i
  410.           c++;. q2 P: P; ~. j$ v
  411.         }6 D  {! u) v* Q* q1 V
  412.       }
    , n& k7 R* W8 M8 i/ F- r
  413.       else4 B3 O  x4 [# R. }: z
  414.       {6 k" q% ^( o8 O( y: Y/ ~
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 l6 }* b9 T+ ^7 v3 k
  416.         c++;+ s0 W: Z( Q& \* G; t
  417.       }
    ) i: p% e/ B6 q3 J% u# S
  418.     }( Q' F$ ^$ j# i7 M3 F8 H  Q
  419.   }
    8 ]% N2 T. i& ~0 ^+ V" s
  420.   unlink(".\\DownLoad\\update.txt");
    # Q; S) e* X2 P: ~% D5 e
  421.   if(UpdateLocal.size()) return TRUE;! q4 k- \" D2 b  x* \" Y/ W
  422.   else                   return FALSE;" s1 a: _- v/ Q4 [1 K% j' C1 t
  423. }
    ; V( ]. }( L) c; F& B% G9 Y9 E
  424. * [. `7 A6 ~- G. s9 L9 U
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    9 o4 I; {% d* I, o  t( Y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"% X5 L, g) P) l1 y
  427. 7 e* x* I& u; O

  428. & N; w8 o9 {* \( p9 _3 i

  429. # a2 Q1 a' K' [7 f
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    + ~& q, P; p( d. X6 r8 O$ Y5 o+ m
  431. {5 ?  t& M, S; {4 v" I2 o* O
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;% f+ {# D7 ]5 {$ z& E+ X
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 f0 k+ z- J% A( F
  434.   {
    ! y& @7 X. s% a  v3 Q
  435.     char szLanguage[50];
    8 |1 [  k+ V* y! @
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& Q  _$ u; ]8 ?, J5 s
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    / z0 F% E) q3 z2 w8 ]3 A& i4 Q' S
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    : a/ m: l& b4 I  Q, b/ b
  439.     else                                   m_iLanguage=ENGLISH;
    8 D2 c8 Q. d9 W  P7 E+ X$ u  t
  440.     char szRegister[100];8 D0 E4 Q' D& i% T; j  H; d+ T/ Y
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 k$ L/ i: z. J4 w3 M
  442.     strRegsName=szRegister;
    * s% ]- ]9 j# {6 ^
  443.     char szPatchURL[100];
    0 w+ |9 }6 Y7 F  e5 }  X
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % Y9 o5 b! ~1 p$ d' H1 C
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 g1 E! c/ \' q: K2 a( `7 o
  446.   }1 I2 W. l4 D2 ]
  447.   else' @; y& h  H1 n4 D/ j& a% ~4 M
  448.   {
    $ n7 m' ]8 w$ Z) G1 ^# q
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ Y6 @& q5 o' n$ }
  450.     strRegsName=DEFAULT_REG_URL;
    ' V$ ?4 I, h- g! D% n' g4 b  {5 s
  451.   }  [8 X* w2 z  y* t& [
  452.   if(GetFileAttributes("hosts.ini")!=-1)- U  d5 Q1 O: e: X0 H: T" O. A9 n# p
  453.   {: s/ O6 C. k. c# t( N; @, i& J
  454.     char szIP[50];
    ! A. u# }: K, ^9 y- s
  455.     char szDIR[300];7 ^% {! H3 O- o% W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    + j  @' q$ l/ d, {# T: r, G
  457.     {% O+ L4 i0 R+ K7 O8 E5 @
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");4 m1 `8 w$ [/ |
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 f5 }2 }8 C! i' H+ ?9 L2 f+ T1 }" Z
  460.       strHostName=szIP;
    - N* l4 c/ T4 f# j+ ?+ X+ X
  461.       strHostPath.Format("/%s",szDIR);
    2 a+ G# Q, w( j8 c( N) B
  462.     }  p, N! \0 @  c. ?2 N6 q
  463.     else
    2 H4 y% V+ @$ y
  464.     {
    4 \! z* J8 U, L  p
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , o5 j8 W# X7 P! |  ^, e7 E1 n) m# J
  466.       {
    ! N8 S1 O8 g- d8 Z
  467.         char szLanguage[50];6 ^1 z' T- v( Y* x" s* l
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' b' n2 j% I, I9 h0 p
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 Q3 g7 D, i- {1 u
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" b, M8 \& ^  o7 q  B
  471.         else                                   m_iLanguage=ENGLISH;0 R" g; m* L" ]7 q
  472.         char szRegister[100];
    8 j1 R7 V: m1 M( R
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ i. @- D, P9 {3 s* i
  474.         strRegsName=szRegister;
    2 s( ?0 Y: F9 X
  475.         char szPatchURL[100];4 `# p  x- S* E1 B
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      l9 g+ Y) s: f/ Z& g
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) x: U5 _  u7 S& Z
  478.       }; B' T* P' c% n: k
  479.       else
    8 w8 Y1 V2 R; O/ k' `6 l' }
  480.       {
    % G4 ]; H. K) Q0 g2 x! \1 G  e
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 P, y6 S" e5 l( ?+ A$ i" b, o
  482.         strRegsName=DEFAULT_REG_URL;) x7 O5 v4 K+ x% E0 u. P
  483.       }
    % F# ~5 ^# r, I1 ^2 s
  484.     }  t! l; E8 ]" s1 F: y
  485.   }  K9 X' o3 l6 a* W$ ]
  486.   return true;! G+ O- B# E0 V) E. G
  487. }2 k+ c6 [+ @" \  M# f; B) K. I

  488. 2 G' b8 X' }, z, E& n2 P) P& E
  489. #include ".\ZLib\unzip.h"
    4 W- R; f6 U9 n" ]. h& l( y
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    . ^0 T2 Z5 i- `" O; A
  491. /////////////////////////////////////////////////////////////////////////////
    0 K+ l) g. w9 ~4 B/ k4 M  t
  492. // CRevAppApp initialization/ ?* t: S" h1 ]7 G# {  Y( Y
  493. # J$ U( ]# M, C" n) Z
  494. BOOL CRevAppApp::InitInstance()
    : `* L( s! ?: }7 D& M
  495. {; H* U/ F. g+ H) g" t' q% |
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];) d5 [2 `6 t# o5 K9 m

  497. - F5 s  w% i, I+ l5 L$ I3 }% L
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / }0 N; d8 s0 U$ b5 q% ~
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    0 \. m2 |+ V2 F& U8 A) Z
  500.   {
    ; E7 w  t: W0 g, @) e: v
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");# m& Z! ]; {  P4 H# W' }  O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);- J) a% L9 W; R- G; x' c& d
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 P/ \: {1 z* D; _
  504.     {
    6 ?  X. ?4 {! G; F1 Q
  505.       strcpy(szPath,szPathTarget);
    2 }! f4 e( I8 {" r9 z1 A8 }
  506.       SetCurrentDirectory(szPath);
    6 H, N6 d6 {5 u) y
  507.     }1 E2 Y6 _1 \# X/ V6 g. n
  508.   }$ N# `5 g2 b8 b( s' x$ b
  509. #ifdef _DEBUG
    $ W  D1 J/ y, T' [+ D  k; X
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 \" N: A4 z( A% R& e6 l$ ~/ A
  511. #else- g! F1 ^  P$ ^5 n0 R" s8 {& G2 z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 l% C  Y7 S7 B2 b  R* E3 O5 M
  513. #endif8 ~. |- C$ _1 Q+ u8 k, c1 G! w) r( h
  514.   {( X5 H) j$ T& O/ {$ ]  r  @
  515.     char tempFileName[MAX_PATH];) N. P  Z: R& ], M; L3 c- R
  516.     strcpy(tempFileName,szPathSource);
    6 Z( B9 ^, B% l+ c( [% m) [
  517.     tempFileName[strlen(szPathSource)-12]=0;. j' t/ [/ s, C! H" n
  518.     strcat(tempFileName,"\\$CSUpdate.exe");: L+ ^/ Z- s* }! H: y. P3 S; U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    . P- I7 g& H& G1 s' F* [" a5 X
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);7 N6 k8 v  @+ X" V* T
  521.     return TRUE;" D; Z9 C+ m) k4 ^' t- O
  522.   }
    ! i+ q% i. H. e7 ], q
  523.   // Nuke 0118: Delete run.exe
    8 l* O8 r& R' M* k3 }; x
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ) O) ~* ?! r% z4 |0 O0 _. S
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");& Z8 b& T/ g6 ?- _) q
  526.   if(!ReadCfgFile("Config.ini"))
    3 v. @! H4 J9 k* O9 |1 u
  527.   {
    % K5 h  O" O1 _* E
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);( {' ~8 e5 |0 o! }
  529.     return TRUE;0 [+ N# i$ A6 `( a. z4 M7 W
  530.   }
    9 e5 R0 _, k! ^. o, U! a
  531.   HANDLE mutex;  z+ O3 i6 Q1 v. `; J
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    7 A  B- o2 j# e8 |8 N. C
  533.   {2 e: y9 a4 l9 I+ g$ `
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ! n9 i% f' W) L$ h5 w
  535.     {1 g9 y; X: o! M. b& A
  536.       CloseHandle(mutex);
    0 P+ v6 Z2 r5 V  h: @& d3 j
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);, S8 M! ]! W8 w
  538.       return TRUE;; l$ C4 o. Q0 i
  539.     }* s; ?) p/ C! U4 y7 F: e
  540.   }  
    % N/ }5 L! v; ?- p
  541.   CloseHandle(mutex);
    & q& J4 U' y* d9 h# A, N3 G0 z" ]& M2 q) y

  542. 5 O- d. ]+ _5 \9 n( c) k' ]7 U( j
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);+ `" r+ e" M/ `* B+ u/ ]
  544. / }! A" I- h1 y
  545.         AfxEnableControlContainer();
    ' O( L5 M' Q  S* }
  546. 2 Z9 K# {1 I' [  t+ ~( Y
  547.   bCanUpdate=FALSE;
    8 ?8 a% S3 @4 J4 w
  548.   dwStartUpSteps=1;
    4 f8 q, B2 j; n; Z" w
  549.   dwProgramState=AP_NOTHING;* ]6 y8 T4 J" Z! B  Z$ Y0 U

  550. ; T: B9 _4 K# S  K
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" A. \/ s9 ^& J4 W/ @! _
  552. 8 K7 y% o2 l+ N+ a- ?, T0 }
  553.         // Standard initialization. q; [) L6 s; l+ l  P
  554.         // If you are not using these features and wish to reduce the size# e* `5 k( }2 r8 u  c8 a
  555.         //  of your final executable, you should remove from the following% [; ^* Y' J8 {8 n6 ^) Q% f
  556.         //  the specific initialization routines you do not need.
    3 x# r) z: E7 r

  557. , S/ Z" [0 H1 J; x- x
  558. #ifdef _AFXDLL1 L% c" M" `$ B$ w- I
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 m( J4 C9 ?/ [' r% @8 l3 }
  560. #else) a# _. v& O9 }
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically( {) b0 P6 s9 W) Y5 t% k, \  ~
  562. #endif
    ) M* H  p7 q8 N4 d3 |, N9 u9 Z' Q

  563. . v% f, i0 L: E5 q
  564.   dlg=new CRevAppDlg;
    % b* |( x6 _4 m0 g5 S. b; l
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    - f& u+ p5 i" c
  566.   dlg->ShowWindow(SW_SHOWNORMAL);& y  w% s$ x( x; T) ?
  567.   m_pMainWnd=dlg;
    6 g/ [8 A" m% V, @! _

  568. : ?" b& P/ L! h
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);; \, o1 Q. N  o. L+ b

  570. 5 _9 Q( L8 Y" O% t- S/ T
  571. //  GdiplusStartupInput gdiplusStartupInput;
    , X7 B; e6 f9 |1 X  F, K: k
  572. //  ULONG_PTR gdiplusToken;
    8 E" [# J3 j$ G& i
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ) J# Y# T% E7 X! J3 b- R( A7 @" W4 F
  574. 2 g3 g) S4 N2 D- f, m: r
  575. //        CRevAppDlg dlg;; [% f, _  w: [# e
  576. //        int nResponse = dlg.DoModal();
    2 v8 n/ v6 n! k. m5 ]* y! G
  577. //        if (nResponse == IDOK): j, a, f6 a8 r8 s5 M8 r1 Z6 S( r
  578. //        {# o$ O7 z$ a3 o4 Q; l& P
  579. //                // TODO: Place code here to handle when the dialog is2 L! l3 e+ w- l4 O. w
  580. //                //  dismissed with OK
    8 W/ A4 t# y9 Z$ z2 U* P
  581. //        }
    3 p2 j6 \5 q5 W) w8 r8 \5 {- |
  582. //        else if (nResponse == IDCANCEL): T0 ?- A7 _* o& T
  583. //        {+ C5 v0 y! l1 _9 _
  584. //                // TODO: Place code here to handle when the dialog is
    ) M/ a1 b, T6 o5 Z4 t7 K
  585. //                //  dismissed with Cancel$ C% p$ L% t' T$ i' _3 z
  586. //        }
    ! c6 @" j7 C, s( F

  587. : a& R& x$ Y- Z! z; N6 j
  588.         // Since the dialog has been closed, return FALSE so that we exit the! E  H$ L* j" m: y* A- w
  589.         //  application, rather than start the application's message pump.3 G/ u. N! b$ w! t
  590.         return TRUE;
    9 b% v; Z$ K- S. p. n( r7 Q( w  ^
  591. }
    - W. ?8 h. `( q9 {; X
  592. ) w) G+ U: m/ R8 }2 E; q% n
  593. char *CRevAppApp::strtok3(char *pSource,char *token), z! m; F9 u: u+ v
  594. {/ C% h( [2 Z$ K( t+ ]" Q
  595.   int i;
    & Z8 {( K& Y4 N& V/ H, u
  596.   char *szRet;
    * j- P- C6 V! G, H
  597. : q" d, o& ^. _) G- @' N8 B
  598.   if(pSource) { itoken=0; sztoken=pSource; }+ d2 j+ r. A+ P. p  u
  599.   if(sztoken)
    , p. P, ^! j" B
  600.   {! G6 h  l/ W9 Q0 X/ V2 {2 R
  601.     szRet=&sztoken[itoken];- n  R: s% a  T' i4 Q
  602.     while(sztoken[itoken])+ z% x" u0 U! E6 g- U
  603.     {! r; H  @; J: L  l, e, n& u! |1 K
  604.       for(i=0;i<(int)strlen(token);i++)
    # }% g% G9 J8 _6 H' @
  605.       {
    3 N9 g; d* d3 f& i
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 z6 D6 [) W8 `. H0 `' E( n
  607.         {
    7 c4 ]( I1 T4 _' }; g
  608.           sztoken[itoken++]=0;4 o3 ~. ?* t$ k: ^' @
  609.           sztoken[itoken++]=0;8 D6 o- ^. j2 U3 C& @! p' P* _, c7 y# M
  610.           return szRet;* E6 U3 M, b2 `; |6 N& n! z& _; j4 q$ y% P
  611.         }5 e/ l! z; d! T! \; Y$ h6 n  U/ ]! ^
  612.       }
    ' u: `6 L$ k9 K1 @% j' P
  613.       itoken++;
    ) m$ y4 Y( A1 ]7 q3 M9 N
  614.     }
    . J+ W# X, p2 h4 `1 k% c
  615.   }) n1 n; W2 K! O# l1 r
  616.   return NULL;
    ) z7 A% H2 L2 E7 K! m5 i
  617. }) x  y. Y! |7 c& P7 i
  618. 7 S# t: S8 x5 Z( @3 N* k
  619. void ProcessProc(long Total,long Current)
    - B5 e' d% n5 S8 R
  620. {6 w0 X! F' A3 b: l4 K+ m! Z4 Q
  621.         MSG msg;5 s1 ]% F3 Q$ ^6 t! X5 B+ v
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    % C9 [* F; l4 u# ^# m4 Q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));& p8 O& g* n- I( D7 E8 y& ^
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ; D5 T% K0 ], K
  625.         {7 L% A/ k3 P- K, b9 M; C4 O7 I9 s% ]
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ) b) ?1 b: v# ?" {5 B& t
  627.                 {
    % l" ]$ n# X- h& R' c/ I- c
  628.                         return;; H4 v3 k" p/ q1 k( l/ E% L4 g
  629.                 }
    : y, x6 P3 S! l+ H: m
  630.                 TranslateMessage(&msg);( Z$ f( q  Y. x$ V" t7 K
  631.                 DispatchMessage(&msg);
    ' C  L6 ], r2 e0 r2 y8 r2 {, w
  632.         }       
    # X" W" n% r1 |) x2 z9 a
  633. }
    7 o" v2 O! X5 M4 `0 R+ K

  634. - ^% B" h" y0 ^
  635. BOOL bFirstChar=TRUE;
    ; k: n7 s/ H0 v2 |5 A! ]# u
  636. 7 M8 \8 ^* B3 J! c/ ], z2 D; c) S
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    2 J0 Q& x, P8 R( {2 E5 C6 ?
  638. {5 c3 Y7 K4 a) W  ?  g/ @
  639.         // TODO: Add your specialized code here and/or call the base class5 V/ W9 z+ |! u  M$ m; t; \% h$ h
  640.   switch(dwProgramState)
    7 `6 C  V9 @/ j0 ]% n
  641.   {( j* s  S8 j$ p9 ~- e
  642.   case AP_NOTHING:
    2 O' M3 S+ O) k1 ~0 N
  643.     switch(dwStartUpSteps)
    8 ?# C) C% b6 n9 v" y: {- }
  644.     {0 W/ P+ W5 `+ V8 e
  645.     case 1:' N1 Y5 h& f* h3 K, H# t0 `/ w% O
  646.       {
    , \; ~" ]% [! D) }. i" v$ X
  647.         int i;* a% M( A4 a5 `3 W0 ?
  648.         CDC *pCDC=dlg->GetDC();
    " j3 b, N. m1 s
  649.         HDC hdcwnd=pCDC->m_hDC;
    4 N+ E7 m3 Y' S
  650. //        Graphics graphics(hdcwnd);' t9 B! s  |: y' K
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");- N  w  ?' K9 h: Y& R# I0 t$ P% i: m
  652. //        INT iWidth=bitmap.GetWidth();6 j+ D5 c9 v0 }! f4 p
  653. //        INT iHeight=bitmap.GetHeight();
    8 }, f# p& E7 P5 G# a0 c
  654. //        Color color,colorTemp;0 D. ^; F9 r8 b1 \+ q$ z7 ]
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    8 s2 w1 Q' k% V1 I
  656. //        {
    7 J# A, g/ K' B5 M5 ^, D
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)1 \6 n' N  a4 V% B% C2 U0 T
  658. //          {
    6 Q$ B) U" {( j/ |% E+ }4 l
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 [, z1 T3 ?) o/ H+ `  ^: Y( R
  660. //            colorTemp.SetValue(color.MakeARGB(
    ) M. V! ]7 H! W4 N
  661. //              (BYTE)(255*iColumn/iWidth),' f1 J* n# \) |$ c$ r/ {* w
  662. //              color.GetRed(),
    . W6 Y' E7 ^" W$ k$ v1 ^
  663. //              color.GetGreen(),
    8 V5 @9 Y$ X. S& e# ?1 f
  664. //              color.GetBlue()));
    " A1 W3 E4 {2 g
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    , \7 ^( r2 x, ?4 D- d4 t3 \( B
  666. //          }
    5 s0 `; @% s& x9 h+ K
  667. //        }/ t- z' k( L& M8 q& M% Z. \
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);( d1 z5 A5 ~0 G( n3 W( ^+ I
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - r8 p6 C3 h. k; i! J/ t9 D
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");, z3 ?# {+ |( k6 F8 o" \8 T
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& Y, P. B. N* P7 O8 Y8 j
  672.         for(i=0;i<240;i+=8)
      P% Z, U& A, z) }+ f/ D
  673.         {9 N% l/ p) [! ^( l5 x$ T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! C3 S, a- O) r% m3 L0 u
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! v7 h% h% Q. z& O: i  r
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ E# ^# A' _3 u4 e
  677.           Sleep(33);
    4 w) ^: K4 E0 K7 X9 L. F# _
  678.         }
    - h6 r' W2 J( @0 r% p4 E
  679.         Sleep(1000);
    8 G2 n. p: O1 _
  680.         for(i=240;i>0;i-=8); |% u  v/ j  Y0 b- V) b
  681.         {
    7 H3 ]& O: c, V: p5 _. Z- f
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 e- Y5 M+ g3 `) L  {# w, s
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 G- i* \# d$ B3 [
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ d* a! ~3 y6 m4 Y' R
  685.           Sleep(33);$ T( r- k' J8 p- p' @: m8 _
  686.         }0 p6 P2 O) t+ s
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);9 ^1 C1 O. y& v6 E+ B0 V6 z
  688.         dlg->ReleaseDC(pCDC);. [9 a2 f( C/ T1 S, t7 O/ V
  689.         DeleteDC(hdctar);
    " [" g( w0 i  e0 ^1 _
  690.         DeleteDC(hdcsrc);
    % d% r* S# S* u8 m  e4 |" k4 Z+ z
  691.         DeleteDC(hdcorg);
    & }+ l' k, X/ ]* f. C7 Y+ Q1 g
  692.       }( X  Q) `- R1 U* i. B$ |' u; s9 T  F1 H
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);+ l" @: P5 J& G% W/ N4 A2 x- L2 N* g
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");; r6 r1 T+ r" H% c# |( ]
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");7 P: E; R! C' x
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
      A; L7 k8 T1 M1 M8 |; I
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 b$ W+ x4 E9 m6 N
  698.       if(!Dn.Connected())# z' P3 G6 [6 L! F; m! ?
  699.       {
    / m, I8 p$ n* E  D+ v/ }4 T
  700.         dwTotalFiles=1;
    5 y+ p1 i" y9 n2 B+ c+ _
  701.         dwDownLoaded=0;
    0 y9 ^. G5 b: C* }7 l4 ~, O
  702.         bSilentStep=TRUE;! Z7 D( e8 Z" ~1 u% P: h) f
  703.         bCompressed=FALSE;
    8 R* T; x8 j* u9 P6 _3 D6 Z
  704.         strExtLocal.Empty();! j7 H2 @5 y( K2 y) x
  705.         strFullName="readme.txt";
    9 G* V) T% z" T
  706.         dwProgramState=AP_CONNECT;
      ?! v2 }% q- |, c# E" D4 J1 x
  707.       }
    / ?; z% p3 e/ ~, R( P- t
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ' @" k( N, l! r5 Y5 [+ }
  709.       dwStartUpSteps=2;
    5 z+ t' F% j6 u4 D  D8 Z$ a
  710.       break;
    $ ^1 p6 l+ p; w3 f$ |( m3 C3 ^' w
  711.     case 2:/ C) l5 u. _3 m6 w) E/ \" S2 n, @7 q
  712.       {
    2 P: ~% X" T( W  {$ o2 x
  713.         int iEOF;) u+ K  H" Y/ Z/ v
  714.         FILE *fp;
    ) o! E2 X. v8 |. `* U2 L, |
  715.         char szString[512];$ b( r8 {) F2 A
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    7 l, L/ [1 ?+ Q. n. C
  717.         if(fp)7 M& m, O& u: Q7 R" p+ _' Z& ^9 A4 W# t) b
  718.         {; b4 A. N$ Q3 U% A# i( c% s9 ~7 o
  719.           do
    0 D) H: R; V8 I
  720.           {
    $ |3 |6 F3 y" r- y0 i
  721.             iEOF=fscanf(fp,"%s",szString);& N  E8 S5 |7 p/ j% O
  722.             if(strlen(szString))
    . ^% g6 f: [) p7 r, _+ N0 p: r
  723.             {
    2 H% [/ V' q" b) W+ o
  724.               if(bFirstChar)
    ) `* |2 R& e* _- U! s
  725.               {' T2 J- l. A4 m* i6 K
  726.                 bFirstChar=FALSE;, B3 I. M6 r  n7 t3 n
  727.                 bConnectIsBig5=FALSE;; c, |7 E. @6 v* p+ \8 u4 \$ H
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    - Q1 F  g$ ?' p: X% v* m% B
  729.               }9 I" v5 E. @- P- D  j& _; E" d: e% x1 K
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 i( d: S0 X: l- T3 y- K
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));; y* b4 u# h# ~
  732.               dlg->m_ListText.AddString(szString);
    1 y% v3 z# y0 i
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 g- G& E$ r6 [) U1 k4 h. m" \( G/ ?
  734.               *szString=0;
    ' C6 ^; ]4 P  m! }  {7 t  [# j
  735.             }
    / d( Q' F5 K. r
  736.           } while(iEOF!=EOF);7 o0 j  T8 _5 Y: H% Q1 s
  737.           fclose(fp);) h9 M# \, W  t4 W
  738.           unlink(".\\DownLoad\\readme.txt");
    8 u8 Q$ P, @% o4 o, c. f4 {
  739.           dwStartUpSteps=3;  T3 I) Y8 S" \. P5 K: Z& ^! B
  740.         }
    7 ~* a2 X  w$ U2 C1 q/ d3 f/ ^; R
  741.       }
    - n$ n+ Y0 M! ^& q+ X/ f* j4 C# a
  742.       break;0 w+ a/ p% ]2 e) L( a9 j
  743.     case 3:
    8 {4 p3 s2 I$ m" w: N
  744.       if(!Dn.Connected())
    7 l: C# D- U/ U" D" }6 x
  745.       {
      e: B' L2 n9 }& ?% O
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);1 e, a' i* `; P" K4 J$ x+ q
  747.         dwTotalFiles=1;+ l- t9 D8 e/ n. H- A* ~: T
  748.         dwDownLoaded=0;
    ' i! u4 d" A8 G' d1 j
  749.         bSilentStep=TRUE;
    ; t2 b3 d, }# N3 ?. G; e- E
  750.         bCompressed=FALSE;- O9 c( A' C3 `6 ^4 i  g
  751.         strExtLocal.Empty();
    - V  D$ j% q3 @& V3 E$ f
  752.         strFullName="checkversion.txt";
    % }! n! O/ ?! x1 u: Y
  753.         dwProgramState=AP_CONNECT;0 N* Z1 @$ I+ s( m" @- x7 n# `
  754.       }! z; Y3 ~! ^8 r) S3 K! u
  755.       dwStartUpSteps=4;
    - b0 U' f4 o  T
  756.       break;
    3 W/ G4 m3 J7 m' G* s% b7 _
  757.     case 4:
    8 U9 R  [" I( z$ Y1 D9 s
  758.       {. I( W# Z# O* c4 ]
  759.         FILE *fp;. M( D! G/ u, q! I* j+ X. x, y
  760.         char szString1[128];
    8 l% g1 N% j* h/ |8 j
  761.         char szString2[128];8 O$ P7 N( j. `
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");* q; L1 t9 g. n5 O
  763.         if(fp)3 I( C3 j4 ^# Q, ^
  764.         {
    ! c4 w2 ]) ?: U
  765.           fscanf(fp,"%s",szString1);
    0 H4 q' J5 {: L% C
  766.           fclose(fp);# _, K. X! `0 Q9 `' |5 ~5 O
  767.           fCheckVersion=atof(szString1);6 G- s& w7 h& N/ L: O, Q# r! j
  768.           fp=fopen(".\\checkversion.dat","r");! h( ~# G! |6 U' D: `
  769.           if(fp)
    " `, ^4 e( `7 T8 ?6 H
  770.           {
    3 f3 G" Q; ^- @1 z" ~
  771.             fscanf(fp,"%s",szString2);
    % B8 ?+ A, Q3 l1 \+ O. [
  772.             fclose(fp);( B9 _& Z8 }0 T, o% {1 @
  773.             if(atof(szString1)!=atof(szString2))
    $ @# k$ s- i1 m
  774.             {
    4 g0 d( B- O1 a' Z, ^
  775.               if(!Dn.Connected())3 C4 ~2 l& D! a5 Z2 [3 o7 T
  776.               {: i: }5 \# [( H* `/ i
  777.                 bFirstUpdate=TRUE;" [, e' `' h2 Z9 W/ N
  778.                 dwTotalFiles=1;0 z" I; \4 ]" }$ n6 V
  779.                 dwDownLoaded=0;$ s; ~& O- |0 w  m& w& |5 c! L% _
  780.                 bSilentStep=FALSE;, [( x- n  R5 V# q6 {
  781.                 bCompressed=TRUE;8 [2 a# G' Z$ D, U7 x. e
  782.                 strExtLocal=".\\DownLoad\";
    6 v( c8 A! r2 M5 H  Y: h; V
  783.                 strFullName="update.txt";
    $ O! V* K) f& U6 c* j0 d1 W
  784.                 dwProgramState=AP_CONNECT;1 ^' D* S0 C. }4 N. p* R
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  g" K* n# N" q/ v: H
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( R7 {9 N) h8 V9 Y" F6 H6 W
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 ]. V$ S; [8 u" }

  788. ! N5 B3 K4 S, r/ T+ l9 `; P& @
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" {: U# T, z$ _& r: d
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    8 W0 m4 ~7 V# v) N9 c' c- p
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    : M. Z, c6 k& D! c4 W; ?. h: w% X
  792.                 {
    8 ~' O" c0 J* q/ V) Y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    * w  s) g. x& a0 D3 {) y+ C
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" E  i3 o, ?- g
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");. Z$ Q) U; J* |  c4 _; t
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , j& |8 y, Y4 ^; w) Q+ A' ^

  797. + B3 D1 x7 E; c9 i
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 k  x7 ~7 C+ R, h0 y( m/ N. U) M' X; W
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 r& f7 l6 v4 |" B6 e9 ?- H
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");( i; w  X6 A- r4 D7 A
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! k8 {+ K+ r+ n, l
  802.                 }
    , h: |9 n* V/ c
  803.                 dwStartUpSteps=5;2 W0 [2 V! s1 k
  804.               }1 F# a9 U; K0 C3 K3 y2 ^
  805.             }
    / d9 ?: }4 t/ K* N# _5 s, _% A
  806.             else
    3 ~5 G7 S) @& w3 q+ H
  807.             {/ k. y* [: g$ I( A5 }
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ; e" A3 T* h$ E  w5 c. c9 c
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / [) x" K! H: g) D6 v
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ! a% u! T- U2 [- M
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ v3 {* N# D  t& {% |
  812. 1 s+ x0 b( u0 v. J
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 o6 d7 |6 f; x( L' w
  814.               dwStartUpSteps=99;2 A9 N4 ]  q0 \2 w) m6 Y
  815.               bFinishUpdated=TRUE;
    . ^( @1 u2 H1 M9 b
  816.               bCanUpdate=TRUE;
    7 `9 {6 {1 X# U5 r7 b
  817.             }+ r8 M: y6 Y6 B
  818.           }% i) S0 {0 C2 F) ^! L
  819.           else
    % t! r! E2 K( A2 Y' @) `
  820.           {2 p  A! O, a! d6 b" D  Q' {
  821.             if(!Dn.Connected())2 ^. D$ H9 R" z7 N4 X* G2 s
  822.             {
    . o' G+ v' M6 \/ W0 q/ H
  823.               bFirstUpdate=TRUE;  O% E3 g7 D) r* o, H9 N
  824.               dwTotalFiles=1;
    " }( O: @/ A8 N2 u
  825.               dwDownLoaded=0;
    5 }5 J: V1 j/ t0 N2 U: P7 s
  826.               bSilentStep=FALSE;2 ?! n7 R1 w4 }" U
  827.               bCompressed=TRUE;
    ! {/ t# K' G0 [; b. H
  828.               strExtLocal=".\\DownLoad\";
    ) _9 s9 e( g" G; v. A$ s) w4 l; p  F
  829.               strFullName="update.txt";
    # g3 G+ ?( T1 n  ^! c% a
  830.               dwProgramState=AP_CONNECT;: F% ^) x9 ^% @9 B
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ L4 T) i& m9 q$ W2 {
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 ?8 u/ ?0 }; d' s" `5 ^
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ( U1 T8 E5 f. [/ K
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; `8 a/ g. r* v
  835.               unlink(".\\DownLoad\\checkversion.txt");
    . ?0 {% q- L# `; x
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    4 k- f( A. Q, P; [# N
  837.               {
    ; Z/ w1 K2 ~7 l* \+ H
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 m3 u5 K9 V" u5 A8 i$ Z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");0 x% W+ ~3 F" \$ L; c, U* I/ c
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");# h# I- \; j  j! Y! P8 q4 G  S9 P4 q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" w3 G$ H& D- c, E$ S, s& g( Y
  842.                 , k2 c/ j3 x9 W: h9 L
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : @5 k- P0 @! U) P
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : R# F' r8 [/ w  U8 D, |
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 O, F8 w9 X; v- x% H( Z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 [  e3 `, U6 x( {
  847.               }
    $ ]- n0 q- H: G4 ^
  848.               dwStartUpSteps=5;
    ; _6 q& Z- K. W0 Q' e; V$ r
  849.             }4 d0 B* w9 [! G  ]" G, k$ K; J3 D: u
  850.           }
    ) d/ l+ h) p. U& u7 X
  851.         }
    $ U7 ]' M( j0 i
  852.         else! D/ Y% _* ]) i# R5 d
  853.         {# I; P) z. Q7 D) D; \1 o
  854.           dwStartUpSteps=3;
    $ q( d, o3 e6 K) T; t: ^: L, W3 u" A
  855.         }
    * t/ q3 S6 |$ K, @: M: {1 n
  856.       }9 X' G+ M, K0 y3 P
  857.       break;' ]1 }, g' Y1 I4 L
  858.     case 5:  s4 p# N9 v- k) \3 n
  859.       {
    $ ~; x3 k% }/ U; Z
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    . }5 Z" P9 U; g' t& ~
  861.         {( C" r  S6 ~7 m1 K
  862.           int opt_overwrite=1;3 q3 T5 Z- w* O+ X+ I
  863.           int opt_do_extract_withoutpath=0;
    & p$ z+ @  F) E: x% X
  864.           unzFile uf=NULL;1 e$ c9 x" @1 T6 ~8 s

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

評分

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