CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
6 `$ I6 w0 d. h4 G$ ]$ r
  1. / RevApp.cpp : Defines the class behaviors for the application.
    & ]0 O8 ^7 [1 Y9 j6 P9 X4 Q
  2. //4 w$ y) B; J' c' [3 e" E

  3. ' e/ A3 Y8 ~3 e) o# x$ X& L
  4. #include "stdafx.h": C$ A. P8 Y( h; O7 `

  5. / s; p; Y/ L; [7 \
  6. //#define UNICODE9 Z8 f2 M; B/ {
  7. //#include <gdiplus.h>
    $ U" j+ G) ?! K7 s! J9 W  I
  8. //using namespace Gdiplus;" v* h: K' J( H
  9. 5 {! h/ t8 i; j! }3 z- g, Q
  10. #include "RevApp.h"
    8 t2 J; I& o5 `2 ~, _
  11. #include "RevAppDlg.h"# I  u" l0 k* b* k4 v4 `4 b
  12.   ^0 w* A- s& D' ~9 c
  13. #pragma warning(disable:4786)  v; i" B  w5 C; H4 M- _5 d
  14. #include <map>
      W6 Z% t$ V" u8 ?1 b
  15. #include <list>. u  P$ W% e5 O. A0 E% x& C$ ~
  16. #include <direct.h>( y7 Z8 \  |! r' W1 ]1 Q

  17. % C9 H9 S; z9 f6 K
  18. #ifdef _DEBUG
    4 h  S+ P4 u4 L; v
  19. #define new DEBUG_NEW
      O! C' z0 j; Z' S3 H
  20. #undef THIS_FILE* s$ \0 W( X" n# E( b4 }
  21. static char THIS_FILE[] = __FILE__;
    + k0 @- ]+ u( I; n2 G
  22. #endif
    , g: E4 Y& |& `
  23. #include "SkinResDef.h"
    7 o8 d5 R8 ^) l+ H0 _, P: t/ j
  24. #include "ChangeBG.h"0 a6 M6 `: Z- x8 ^3 V& b" a
  25. #include "AFXINET.H"$ V8 q; Y7 ~% v: d3 Y; Q% v& y
  26. % q, }. h' l+ ]6 ~( {, U
  27. #define TRADITIONAL_CHINESE 0/ m0 k$ @2 N. C: N6 X
  28. #define SIMPLIFY_CHINESE 1
    . T4 y+ [- X' `- K
  29. #define ENGLISH 2
    & B8 {1 |7 R' z6 \/ k
  30. int m_iLanguage = ENGLISH;
    5 `8 b, U, E1 Z# B5 n' O( F
  31. /////////////////////////////////////////////////////////////////////////////
    - s8 p9 a- ^$ ?6 ^  \% ?) o2 X
  32. // CRevAppApp" D" ?" `6 ~2 s- h  F

  33. ! k( O9 a. c8 _6 Y+ t: v! Z+ I
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    * o9 c, d& b1 G; r7 K2 a1 ?
  35.         //{{AFX_MSG_MAP(CRevAppApp)& c) F- H+ n- ?1 ^
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    & V+ x( W! k* S+ L. y( ]3 r5 m
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    3 T# t9 V2 x% l/ O" E8 [- a
  38.         //}}AFX_MSG
    3 h+ k2 _9 S* c5 X* `
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp), O% _0 v, G% S4 R( G6 B
  40. END_MESSAGE_MAP()$ V& m1 \3 N1 N6 V

  41. - D& T6 q; g$ ^) O# J
  42. /////////////////////////////////////////////////////////////////////////////
    ; z( h7 h; q6 G; _1 c; @6 x
  43. // CRevAppApp construction
    4 Y% O: f% L% g1 p" O( @7 |  H
  44. 6 j4 X6 h1 ^" f
  45. CRevAppApp::CRevAppApp()
    ' u# P$ c$ }+ ?0 g; N9 M
  46. {
    4 C1 x; p& B6 P; a1 `
  47.         // TODO: add construction code here,5 L6 ~2 ?% A% W# I: W
  48.         // Place all significant initialization in InitInstance" b9 _, L2 r( G7 _* ?+ g
  49.   bDisplayIsBig5=FALSE;. e) t5 @( W$ W, w
  50.   bRestartUpdater=FALSE;1 m5 x& Q: z& n- Q
  51.   bFinishUpdated=FALSE;5 H, U% T  a( H$ h' L# [6 E: W
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    " t. z7 x4 t0 B5 H
  53.   InitChangeDataBig52GBKS();
    # p8 M' S% t& R
  54.   InitChangeDataGBKS2Big5();
    1 I9 {/ V# z# t; M# J, E: }
  55.         //
    ) I6 v7 Q5 t8 c& L: Y
  56.         bClickRunExe = FALSE;
    ) {+ T  p: x& g! w% E1 g
  57.         //4 m# w7 c7 O" n4 W( R7 V5 E( s, h
  58. }/ c& P$ B$ c1 w7 n/ M: U2 M
  59. ; k7 t$ H* Q: ^  E# r' f
  60. CRevAppApp::~CRevAppApp()5 M/ g  o9 M: n. }
  61. {
    1 S- C: u! F- z2 V9 s
  62.         // TODO: add construction code here,
    $ s1 H2 k9 V1 m
  63.         // Place all significant initialization in InitInstance
    8 {5 P" W& Z) W- A' b4 L
  64.   EndChangeData();/ ^! ^# R/ h; U
  65. }3 ^# G4 t; j5 X# ?

  66. # z( K( B' ^: P# C6 S6 [+ Q! w/ i
  67. /////////////////////////////////////////////////////////////////////////////
    % n* t* e# n9 X$ T2 j3 j- M1 L$ F7 T7 O
  68. // The one and only CRevAppApp object
    # B+ W- M& b9 R

  69. ; I8 K5 ]- c; j9 |  H3 m
  70. CRevAppApp theApp;+ s% S( f7 v% r( I. w
  71. ) f9 [& a# \& c
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)( c) m; S# a. f, [% w5 b/ T  v
  73. {& l4 T% \/ ?. O/ x' w0 j
  74.   int iEOF=0;
    , K4 h$ m8 z8 a2 }$ @4 I: d7 U& n
  75.   char szTempName[MAX_PATH];
    . ^# m/ m: q) e
  76.   *szFileName=0;- s) Z% t" W9 s& X5 U) H2 b, }
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & j. l  D: [. Z# f: V# U6 T
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('). {' w/ ]' ?& p8 @$ S" z7 x8 z
  79.   {
    5 Z8 d4 G8 o6 e. l
  80.     strcpy(szFileName,&szTempName[1]);. j9 ^) d% _) t* A6 T+ t
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF). B; L" Y2 r& O+ d% e
  82.     {0 }, c3 ^* t5 ]* q9 {  s
  83.       iEOF=fscanf(fp,"%s",szTempName);
    - V3 N+ x: T. \
  84.       strcat(szFileName," ");7 g. N: M' a: t) |
  85.       strcat(szFileName,szTempName);
    5 }9 F* Z  ?8 I' Z, C6 y5 l: L: [
  86.     }2 K- Z, l5 w% e. R( D, U
  87.     if(strlen(szFileName)>=1)
    5 P7 i; j: T' J
  88.     {/ l5 a. K; E7 `: F& `1 `
  89.       szFileName[strlen(szFileName)-1]=0;: S4 o4 Z0 E; I% ?0 K5 i
  90.     }
    # B; h7 |: S# A5 K5 O
  91.   }% i" {6 E3 L; m
  92.   return szFileName;
    " F) F% z) m# j' F
  93. }! I, l1 H; b; q: J0 e
  94. 2 T, i8 W0 y, _0 t' d% w
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    3 [4 ^5 F5 I8 L
  96. {
    / c$ j* [1 Q7 J4 v
  97.   FILE *fp;% {" j( X# J# Y" u( [4 [
  98.   char *key=NULL;
    0 a' B6 h0 q( u
  99.   char version[MAX_PATH];: Z: ^, I2 N: E' H& Q9 `* w  ^
  100.   LPUPDATEFILE file,olds;
    - U3 v7 ~4 a$ G4 H5 U/ m/ S! g. s
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 {4 X7 L. [5 b8 F. X

  102. ' w3 {6 p6 V9 y! \
  103.   UpdateList.clear();7 B! E+ u; ]% `* Z
  104.   UpdateFile.clear();; H# q* u5 E3 s: x8 O) Q" j$ D
  105.   if(GetFileAttributes(filename)==-1) return false;
    ( P! z8 \: K  n1 t) w" ^
  106.   if(!(fp=fopen(filename,"r"))) return false;& ^  a1 ~, W0 g+ X
  107.   fscanf(fp,"%s",version);  ?( y9 x2 `: p8 ^
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    6 j$ D4 G& O4 @6 E6 x
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ! z3 H3 s" g9 K; k6 P
  110.   {# j3 J2 k( d  y; [7 Y! t
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- S+ p6 I  ~8 Z+ O" {& P
  112.     fscanf(fp,"%s",file->path);
    " F8 H, W+ b2 m5 i4 F! |/ y2 o
  113.     ReadFileNames(fp,file->file);! g) @* J) K" p% d6 A( |( `
  114.     strcpy(file->full,".");
    : f2 B7 c1 q3 \8 ^: ?, e4 Z, j
  115.     strcat(file->full,file->path);- V3 E3 y5 C: G* P/ e/ j
  116.     strcat(file->full,file->file);' Y5 ?) p9 v# b9 y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())5 b! A: b  v$ @  H* n6 z0 |
  118.     {. ~1 e1 L0 h1 b4 y! I2 u
  119.       file->vers=(float)atof(version);. t7 Z# L6 c  s* s4 }- l7 |
  120.       UpdateList.push_back(file->full);  c5 ^0 V; x) k
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , N! @5 R# Y8 w
  122.     }
    " n0 p6 T! ^  M, G
  123.     else. f3 o- R7 [. h! Z+ W
  124.     {
    $ S/ S6 L, W9 u4 o6 X8 X% y9 S
  125.       olds=(*p).second;
    . n& g+ ?1 w. Q& Q' w, U- q) f( ~
  126.       if(olds->vers<(float)atof(version)). }( e, m, _/ D" y' k4 D
  127.       {+ D& L% B7 P1 n& l% a
  128.         olds->vers=(float)atof(version);8 D9 |: r. g4 a" r) M
  129.       }; z* O5 r3 m  |( M2 g$ W4 F* j
  130.       free(file);; ~& o% f  x( y$ b9 D
  131.     }, y  G6 l/ r# I: L- Y- ~" `
  132.   }: o1 a5 }) V' {& b' A
  133.   fclose(fp);
    ' U; Y4 }8 R  F1 u! N$ ~6 h
  134.   return true;
    . Z) }( k  p' D- ?. T* s3 O/ w
  135. }
    $ @+ @! p3 K5 s; l0 T' Z4 M7 i

  136. . E& o& c; ?. m8 v# M3 r% y( @) f8 y+ R
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    3 Y7 L& `/ A9 R$ v# j2 V* g
  138. {3 a1 _& q0 d  g5 Q5 u4 N
  139.   TCHAR  szFull[MAX_PATH];
    9 g/ B0 G0 R" g$ Y2 @6 y# S
  140.   TCHAR *token,*inter;4 h6 r8 v  h* M' e
  141.   *szPath=0;
    : d7 a4 a; D2 f' b( `: ?1 s2 X; D
  142.   strcpy(szFull,szFullPath);
    " V2 y: p, X4 ~. e- Y
  143.   token=strtok(szFull,"\\/");
    ) D% }  G# R  O% w% ?( E$ ^  x1 l
  144.   inter=token;
    ; A) }2 X/ b5 W2 W  ^/ v9 Y
  145.   while(token=strtok(NULL,"\\/"))$ W1 S. E9 D1 V9 q2 r* |- h" @
  146.   {" j% J- l( d- ~9 G. I7 U3 @
  147.     strcat(szPath,inter);
    . F; t6 b1 e9 S
  148.     strcat(szPath,"\");
    8 a4 g/ ^9 ?! j- v
  149.     inter=token;  Y% i  T9 ~2 Q! F  ?6 b$ A& P9 c
  150.   }
    ) s$ K$ p4 N  Q2 l4 Y
  151.   return strlen(szPath);
    , x4 \* f8 l1 p8 A- M, f8 n
  152. }
    0 s, C1 G1 M3 f  S
  153. & l: m/ R6 D. [9 f$ S* W
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
      h; k- h4 ?, g$ T; p
  155. {
    9 @5 o- f2 V6 d% e" s; q0 f
  156.   DWORD attrib=GetFileAttributes(Target);
    * d: I* [# ?6 j! R
  157.   if(attrib!=-1)+ K* W0 ~; e* l! X5 Q5 X
  158.   {* a$ n7 j8 ?) `; t
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    5 ~( s* Z; |+ \( V( M) G( o) P
  160.     {# G! m: |7 I3 c5 ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    * k! N  d, _0 W' i, l; J7 S* m
  162.       SetFileAttributes(Target,attrib);$ |! @% q6 c# x" `7 Q7 I/ Y7 N
  163.     }
    ' y0 e5 `0 b$ S5 ^$ k3 ?+ F
  164.   }5 r  y4 b" k* }! {# ^2 Q1 D5 A
  165.   CopyFile(Source,Target,Erase);8 j' S7 g0 Y3 i: ^# E) S3 O; Y
  166. }2 _# \9 q' y) w# q& B' v
  167. 3 W+ w2 L, l' A; U
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    $ S7 f. t6 _, _
  169. {
    6 Z% T6 v, U8 m. I+ ^( ^$ s* \
  170.      FILE *fp;
    " G0 `) N! l* A
  171.      char  szBuffer[8192];/ [# D; z( c" V9 C& P7 k! U( ]
  172.   va_list  argptr;
    , X* ^& Q: ~( w8 [2 O" w
  173. " F# Q# G- G  M+ z/ _: q2 N
  174.         va_start(argptr,message);
    , L5 o: o& g4 Z& u* H
  175.         vsprintf(szBuffer,message,argptr);
      Q8 ~2 n8 i  @5 Q# ?% [2 G
  176.         va_end(argptr);
    6 o0 n) g+ W  r. x& H. `5 B! C, Q
  177.   fp=fopen(FileName,"a");
    1 M; F  `4 k& }- }* R6 [
  178.   if(fp)
    ; A7 ?- I5 ~4 F1 J
  179.   {
    9 Q' F- d9 H& e. k
  180.     fprintf(fp,szBuffer);8 m% y6 n" F/ @1 l( h
  181.     fclose(fp);
    3 v- n( X) q) F8 y! _. `- ^: V0 L
  182.           _flushall();  i% [( z  @: N! m: i+ p
  183.   }
    # k) `! h9 Y* z5 r
  184. }
    : I6 M. c# K- l8 B6 _! c6 U4 ~- I

  185. + y8 p7 F2 x* n9 X
  186. BOOL CRevAppApp::Fclearf(char *FileName)) o- d+ B1 _# v3 J
  187. {) j! l( A9 G7 U6 p" `
  188.      FILE *fp;0 i# e# X6 R& c( Q% ?
  189.     DWORD  attrib;* q9 D5 T$ t& P  J7 Q
  190.   attrib=GetFileAttributes(FileName);
    ! x5 g: D( E) m# d' s6 N) ^. C
  191.   if(attrib!=-1), P6 n6 b1 U4 ~5 L& J/ k
  192.   {
    $ o: ~' f- s6 U# G
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: W. w2 k5 v- U7 U
  194.     if(!SetFileAttributes(FileName,attrib))
    3 W9 V: Q3 `) P  d+ B
  195.     {" N: Q9 O0 ]; }3 ^6 i; a$ ?; @
  196.       return FALSE;. ^8 Q5 r4 I4 s% s/ M3 }
  197.     }
    # z3 H& E( [" u- n
  198.   }4 k! V3 k5 k/ g( J* ^2 I$ z/ L
  199.   fp=fopen(FileName,"wb");
    3 I/ q7 {8 {  {5 A
  200.   if(fp)! j6 a  b$ i! E/ s
  201.   {) z- Y' o  w2 B
  202.     fclose(fp);
    9 p6 g* K) f+ i, [" [0 q
  203.   }# S  X  i6 M2 A1 ]! I
  204.   return TRUE;
    + c# X' X* b4 D* C
  205. }
    : j" S; g& W% d) C2 H: A

  206. $ [7 e2 h1 H1 p( V+ V7 {. q
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    " D, v1 v- k2 j( I# C/ N
  208. {, v# O# t( |3 k- C" f
  209.   char filename[MAX_PATH];
    ' J6 S/ C7 G4 b* l4 A
  210.   LPUPDATEFILE file,olds;1 }  {) _8 P! l4 ]1 ]# H5 y3 d
  211.   std::map<int,CString>::iterator i;( C% ^$ y( H/ m2 i, B7 R$ w: u$ k
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! c7 r# a) b* J
  213.   std::list<CString>::iterator l;& G/ N9 P  B$ K: r, G+ Z% c

  214. " `% g6 U5 p" x9 J! H
  215.   if(bFirstUpdate)0 q4 @7 l" s: S
  216.   {
    & G9 ~: x1 {7 h- O9 Q
  217.     dwCurrFile=0;3 P& d! ]1 r' F/ q( V
  218.     bFirstUpdate=FALSE;0 j" p3 |# Z5 ~  X! n* r
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) X9 Q; {2 N6 e# ~9 j+ a* g
  220.     {" ^9 f- ~' P" R" y! C) Z5 O
  221.       dwTotalFiles=UpdateLocal.size();- k* A% [, V+ r4 `$ P+ I
  222.       dwDownLoaded=0;+ d7 i6 K+ n% W! A) D
  223.       bSilentStep=FALSE;
    . _: e8 I8 d0 Q
  224.       bCompressed=TRUE;0 ]$ r: ]1 Q7 _! v! R5 N# e
  225.       strExtLocal.Empty();) O3 c. R# D& f% ~- \/ _
  226.       strFullName=(*i).second;5 v1 v$ V( j! Z" R) }- k6 N. j6 t
  227.       dwProgramState=AP_CONNECT;
    * x/ q/ v( _3 B' T8 X) {" X
  228.       return TRUE;5 J$ Z6 V7 L* a( s8 ^7 X
  229.     }
    - p; Z- I! ]9 O# x; e8 y
  230.   }
    7 N! v! y7 y+ K! h5 q3 k4 `7 l
  231.   else if(bRestartUpdater==FALSE)" f& R- r9 v/ z" F3 j. `8 j
  232.   {
    ' }8 l# k8 Q! f2 A( P6 j' g. e% i
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    $ y6 Z' B- z2 @9 @9 C# O; r
  234.     {0 ~& T; o1 m% S+ _) ~+ k. C/ `* l
  235.       file=(*p).second;- K5 N6 ?! ?" z3 |+ P$ P
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()); O" \+ q8 g) i
  237.       {
    9 R4 p  M/ S+ J: k/ h
  238.         olds=(*p).second;
    , \. X9 w* T( L+ n' _
  239.         olds->vers=file->vers;- Q! ^$ h1 |( p
  240.       }
    & l' |$ m- z8 m; R% O
  241.       else
    ; E7 v. a# e! E% p' o
  242.       {" q% S* V7 K3 L
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # s7 O% c# x" x) N- @# m7 a$ N" t
  244.         memcpy(olds,file,sizeof(UPDATEFILE));9 M2 q8 Q+ p+ T% c, F# ^$ o4 O7 ?
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    / d# x  m) h5 S  B8 g
  246.       }
    8 G; p4 W4 i9 S( Y% b( w
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % B% o! C* V, ~3 d
  248.       sprintf(filename,"(%s)",file->file);$ u& T; z- y3 c" D
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ( D, P% H$ b; T* G/ S5 X) g
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ) r9 }8 W. i5 ?8 |
  251.     }4 c+ e8 g2 d0 A& `: D- H
  252.     dwCurrFile++;
    8 z. M: C" M8 B" r- P) v4 a9 n9 O
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / o# e2 ^  V, p; G
  254.     {) w% {% K: `8 {, r
  255.       bSilentStep=FALSE;
    ; x9 `! V: p- T9 b0 Q  d% A6 t
  256.       bCompressed=TRUE;) v0 u; H3 e& \
  257.       strExtLocal.Empty();
    " j' f0 X' ?9 l  _+ r: b5 s
  258.       strFullName=(*i).second;6 M" m/ k4 \) n) M* X. v
  259.       dwProgramState=AP_CONNECT;0 O0 T* U" V- {! s7 A. ]% _( h
  260.       return TRUE;3 e& M2 o" d* n4 Z, r* p
  261.     }. r2 {/ l, W7 p
  262.     if(!bRestartUpdater)6 O  x% l" n: y( L2 {: F
  263.     {$ V0 l; V* m9 j) [6 I/ E
  264.       int iCurrSize,iFileSize;
    ( L+ t5 r  _2 t; Z, G3 Y* u4 a
  265.       iCurrSize=0;
    0 V9 ?# N4 o% ]$ F" Q% }% `
  266.       iFileSize=UpdateList2.size();: m* Y0 r/ X- \- R' E+ i
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    , S3 n+ D9 s$ f
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");: q: }3 l1 t- K+ ^4 n7 ?3 C2 Y. q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    , v+ i% t- i' c4 K
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : M0 @; q2 w! A' h
  271.       Fclearf(".\\update.dat");$ l' ~( l0 k6 e- D! C
  272.       Fprintf(".\\update.dat","Bloodyf\n");% k# }* i6 R5 @, q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)- l2 ^3 \8 o' u
  274.       {
    ; n8 ?. i- r2 m7 z( G* A6 ~
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    1 K) \' }2 `  Z" y% \) `
  276.         {: y7 |! I3 `7 U
  277.           file=(*p).second;
    ( G  c  D" W/ t/ S+ P. K
  278.           sprintf(filename,"(%s)",file->file);
    4 P2 J0 ~+ s+ A5 L; R) L# o
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ F) H5 W1 n& z6 w! d5 b
  280.           iCurrSize++;8 d6 a' Z" e4 r; y+ L& e- Y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));* `4 g$ l# x" p5 y1 Z" s/ `) `
  282.         }
    % L$ F; t7 d4 K0 ]% r) o0 a4 ?
  283.       }
    ; W: ~  r3 d0 e9 J" a
  284.       unlink(".\\update.txt");% {  {0 y6 n5 z
  285.       unlink(".\\update.tmp");
    3 i. O! G* V( [+ J4 [0 z
  286.       Fclearf(".\\checkversion.dat");/ }% L" d( j# Y+ y0 k
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);+ A  e2 p* x4 n1 `5 O
  288.       if(UpdateLocal.size())' b' ~2 D9 [# e8 V% T6 ^% `. k7 F/ i
  289.       {  [  x& {/ |9 f+ j
  290.         UpdateLocal.clear();
    8 E* G$ L, J3 b& Q# w
  291.       }  E# E* A6 y* k8 C
  292.       if(UpdateFile3.size())
    0 }# l; ^0 ^( D4 O2 S
  293.       {
    . y1 l0 N2 N2 J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), D/ A2 x* ~9 ^8 B1 z# O% E& X
  295.         {
    - S1 \& z; s+ a4 _
  296.           file=(*p).second;
    # ~2 Q  u5 P0 ^
  297.           free(file);
    # u# N& }4 q" J% t7 M& b
  298.         }& o. u; |5 K% f" o
  299.         UpdateFile3.clear();
    ; t4 Q/ i! [2 K3 D/ v
  300.         UpdateList3.clear();
    & z: h8 y8 V' X( k$ o1 [$ H
  301.       }
    . U: t6 A( i, ]- d/ V4 j8 `
  302.       if(UpdateFile2.size())7 m' l. R1 `* s0 v! T2 u  P5 q
  303.       {
    . k$ k. Y* z8 @/ E
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) H) M  m* \0 B/ a! U9 F# R3 O
  305.         {) }# [9 u; e2 ]: T, K& F% v
  306.           file=(*p).second;
    9 F: x: }8 w( F" \9 h! @9 R. b
  307.           free(file);
    ) M$ N0 w8 l) }9 S/ R" B9 i
  308.         }
    : y& M3 D% \  N6 n% e* z+ g
  309.         UpdateFile2.clear();
    ) S% \+ C! K9 X1 K3 P4 f# i
  310.         UpdateList2.clear();3 A* M, Q( u; ?$ t* u1 J) c
  311.       }' l" O$ R% L% }7 ?9 ]
  312.       if(UpdateFile1.size())
    7 O8 W- r4 J% x8 l: j+ `8 N5 A
  313.       {
    ' d* `; h- a9 D& }; ?/ k
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 V0 ]* N/ i$ t( r- s3 n1 b; w( J
  315.         {6 K: S2 L) D6 e: k7 [
  316.           file=(*p).second;
    " Z5 B/ n9 Q* G. ?0 [2 r1 s" f
  317.           free(file);
    % Q5 `2 t3 [  S$ i, J, n! B2 _" q
  318.         }
    ; a# H4 x9 H7 F
  319.         UpdateFile1.clear();5 t" Z9 k: i6 ]1 Q, Y9 B, ~& }
  320.         UpdateList1.clear();
    & n0 t  w" S$ P, G
  321.       }
    0 g/ n  b6 F: f; D0 V! A" H6 P
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & \2 ~: V( Y, D8 F# G
  323.     }
    $ s( W8 O0 j7 {' g+ J: }  Q
  324.   }
    ( O' G8 w) x6 |( e
  325.   return FALSE;
    # V. D5 H, @5 V3 j1 n
  326. }# c8 S% K0 L& s

  327. , g- C0 N0 W; y
  328. void CRevAppApp::ClearAll(void): |  \7 I2 @& k" E  H
  329. {- K0 y  J; j7 q8 N8 ?5 i
  330.   LPUPDATEFILE file;
    ; c+ }: ~# }/ I. ?6 @
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) X) m) b! g8 C9 x

  332. - A& ~. Z! R, M
  333.   if(UpdateLocal.size())) ]5 I2 W! D. X- U! z$ f
  334.   {8 i; `" b$ M9 b9 ^& F+ L
  335.     UpdateLocal.clear();% t4 G! r1 m+ g* T
  336.   }! m5 E- X2 X# ~2 K0 O- P- V1 U
  337.   if(UpdateFile3.size())
    8 O& ]* `+ c; X. f
  338.   {: @- I! Y; A6 r  I
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' }! l# {4 O+ S" [
  340.     {
      K) R2 p3 K. @
  341.       file=(*p).second;; A- ~7 S' r! N7 b
  342.       free(file);/ W5 j3 O7 |6 G! F5 v. C9 f) u
  343.     }
    + D1 Q* G( I, o- Q& \
  344.     UpdateFile3.clear();9 K# u7 o: X; B
  345.     UpdateList3.clear();
    6 P# @" X! v; _9 N, S3 `
  346.   }2 g4 ^0 H5 R* U2 q; G! {
  347.   if(UpdateFile2.size()); Y8 X6 n9 H+ _- {- Y2 G* m- \9 S4 U
  348.   {
    ' O" b( G8 g1 Z# N% l6 x5 u
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : }0 k7 b0 p7 ^' z5 }* X
  350.     {! v, o3 E& W; s
  351.       file=(*p).second;
    $ ]9 j6 `  }" o7 W
  352.       free(file);7 K# h- Z( d1 l$ r) r0 Z" G
  353.     }/ l/ U1 J& S; F/ a# J# [3 |% K. O
  354.     UpdateFile2.clear();
    ) M  p& W# `6 U
  355.     UpdateList2.clear();
    0 C: t2 C3 A- Z) u
  356.   }
    , W6 W4 E/ d& ?/ [2 i/ c
  357.   if(UpdateFile1.size())7 c  Y% h. i( D* \# U
  358.   {
    - \5 ~3 }/ a% M3 e9 y  r1 |" ~
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : d, Y- L( ^/ [! c: \
  360.     {: w* X  b) @7 r
  361.       file=(*p).second;
    . K% A3 n! J( z2 {* ?
  362.       free(file);8 N, Q# P- n5 t+ ]- F
  363.     }
    4 m5 E1 N$ l7 c! n2 s) a: b9 b) E6 K/ m
  364.     UpdateFile1.clear();
    6 T. `6 g+ H! m
  365.     UpdateList1.clear();, \6 w# I0 C0 s) V% G- q, p
  366.   }
    " O& m# r$ ~0 ^3 a. N9 T
  367. }  
    ) G. D. f9 w, ~/ e( p( n8 v
  368.   
    3 v$ H9 r1 c) u! s
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    $ ~/ o6 H+ M: G( p4 h3 m
  370. {3 _; z; ^& X4 {# I/ K
  371.   int c;" f$ K7 [8 _0 ]( ~8 g/ B
  372.   LPUPDATEFILE file1,file2;! e- g, w' ~# ]- `0 M; d) O( a
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
      F. d8 A; p& r: L2 G: C2 v6 a
  374.   std::list<CString>::iterator l;) u* M8 m/ x4 E$ |/ \( [9 F

  375. ( C* J2 a7 O) a$ p
  376.   UpdateLocal.clear();- k6 l  v5 q& T  w7 c1 T
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    1 M* l1 y. O4 J8 x
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ ?0 j& R5 ?& H& h  v% i9 H
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);9 F  A1 I/ L+ X& B+ \
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 ^3 z( t9 e% R% J7 N; {' ?
  381.   if(UpdateFile3.size())0 X7 V5 Q5 t& q& r
  382.   {5 J, I$ K) [! L* P9 F+ V& L3 b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)9 @+ m1 m) Y, B* s8 K
  384.     {
    , X7 n, ^4 Y% P8 M
  385.       file2=(LPUPDATEFILE)(*i).second;
    7 M6 \) D0 k- L0 y# W/ R
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); @4 g" Q; w7 v/ P7 `5 g0 i
  387.       {+ l' A: m. v( ]
  388.         file1=(LPUPDATEFILE)(*p).second;* @. B+ ], {5 j0 ]5 s" P. l5 A( L
  389.         file1->vers=file2->vers;8 k3 \8 w! L' p4 U. Z8 r
  390.       }
    " t" ~& d: m+ X
  391.       else
    * p/ R9 Z7 t2 ?+ d. P; s
  392.       {
    , m/ F7 a% ], R) G* H
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, P9 {9 [0 O5 w* c5 M1 H( E
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));  G; B6 ]- x+ K! r7 q, p
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));4 e2 U7 n; A: `* t$ N
  396.       }
    6 o. j& q: W: W  t0 W- S
  397.     }
    * I& g4 t- w. ]5 `0 ^" @
  398.   }
    2 f8 k  E) V, S4 w2 }0 N' P
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    : W: y+ C7 q+ W* B3 i6 A6 Z5 q$ h4 j
  400.   {% ^' _1 Y  v! Q4 j6 w" W
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    7 F: ?- g3 D1 S
  402.     {4 {7 x, [& s7 l! n% Y% D: u- i
  403.       file2=(LPUPDATEFILE)(*i).second;
    ( G% G$ t2 q- P- `" t0 t) k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! d! a2 a) x2 v# {/ m+ f) F
  405.       {* j7 j4 ^  Y8 V4 C" e) w3 Q+ h
  406.         file1=(LPUPDATEFILE)(*p).second;* C8 |' e% t$ c7 Z
  407.         if(file1->vers!=file2->vers)
    3 H0 g6 L+ [: C3 r
  408.         {
    % p3 \5 N$ A% e  `: \3 y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) ?4 j3 H8 k9 ^7 S1 a8 |. p8 ?
  410.           c++;4 S/ k+ k+ d; b% U1 e
  411.         }0 {% h' Z7 _# p% C0 D7 Q
  412.       }
    ) d) @5 z, a4 f9 ~1 o/ Q0 C  c% g
  413.       else
    + k+ J0 L/ E! f" _
  414.       {5 |1 _8 E6 E; ]! `7 k- E' c
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 n5 T& O- @/ p0 y& L% H( B
  416.         c++;* f8 M1 X; c: i+ J
  417.       }; I4 W0 b7 S' k5 m
  418.     }
    ) _% i* o. P- B0 f) e
  419.   }
    / d9 o# O3 I5 N( P  D% u. ^& R
  420.   unlink(".\\DownLoad\\update.txt");( D$ h7 ?) O3 O/ n4 J+ R
  421.   if(UpdateLocal.size()) return TRUE;) f% ?( J0 `& O7 X6 P. @7 Y: e/ A
  422.   else                   return FALSE;* X! p% R2 r) s. i
  423. }7 y- o! T) G9 T- X  O; t# t8 Z

  424. ; B) ?8 g0 d. v! s- h& Y) ]
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    * d! S9 }0 l$ f* W
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"& a. ?* C8 u. \  ?$ a
  427. 1 N% @# m% c8 B4 s

  428. 3 o) r2 d5 S7 y- q8 L

  429. ; E: ~4 w# J$ n! |+ R/ q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" D" O* C: a7 ?5 X9 ]) E
  431. {
    5 {- m! C! h  Z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;6 z2 k+ |" d' v5 k' B
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 H' C5 [) u& U
  434.   {! E. y2 _5 y- \5 P
  435.     char szLanguage[50];7 I: H8 y  a7 I+ h) R, g
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + `+ i- x8 @+ H# I
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: l5 H8 F6 }5 D' q% R: U6 ~: k, F
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 |7 m! j7 X; f% O
  439.     else                                   m_iLanguage=ENGLISH;, R- N/ O8 ~3 s  v8 e& h4 _/ I
  440.     char szRegister[100];* T2 v0 R, z, j7 E: b: A" f0 Q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");3 v- I# f% I+ ]' S* ~
  442.     strRegsName=szRegister;
    2 ?( y# i9 u! q. V' q
  443.     char szPatchURL[100];
    - `2 N1 s) c' g+ k, F
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 u, ?) W6 R  `0 n: c9 D6 R# i; B
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 K7 m$ F  r' Q; k9 ?! w# B
  446.   }
    ' g5 ]: ]; _7 H  c& E
  447.   else
    1 r. [7 x2 U5 }9 x# g$ A" E
  448.   {5 F& }5 t+ c- F
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 f% N  D0 S; c
  450.     strRegsName=DEFAULT_REG_URL;2 V0 v  A6 r3 @5 M
  451.   }; U- d" h( ~( P) C7 N6 P' h
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    7 @, I7 m# X5 \
  453.   {% l. }% l6 E5 u- n) I
  454.     char szIP[50];( }: H8 T, Q6 C9 _/ s$ U) }
  455.     char szDIR[300];8 n! B- r7 K, p) O
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 T6 U. t- \, B) S
  457.     {" u9 w0 m/ V' }1 Y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    , C; p3 z! [: l; o; I! @
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");3 a( t; N: d8 {; q! x. F6 p5 l' |
  460.       strHostName=szIP;: Y  F/ R! N$ {0 G. f
  461.       strHostPath.Format("/%s",szDIR);
    0 d: U6 x% E3 y/ h" T/ R3 M# O
  462.     }- ]: M! Q( t( Y/ z7 C
  463.     else' C, @0 N% R' Q
  464.     {+ L2 l2 j+ r# \8 ]6 a) J5 {# g$ v1 a
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( j/ z# ]% U7 ^! v8 l. P7 }0 m2 J
  466.       {  y2 ~9 v& F7 `, |$ o& P% X
  467.         char szLanguage[50];$ k3 K& y7 d6 w# M1 c
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 g; h2 Q1 l3 x0 s9 H
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 v& m7 S. N( n" N5 ?( E
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# I: w, z  x+ u" r% H7 c
  471.         else                                   m_iLanguage=ENGLISH;/ D7 D* g  p+ q3 ^
  472.         char szRegister[100];
    " p# z2 E$ I$ r9 E& C& ~6 X$ f1 Y
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# N) Z$ E, C, [4 R7 P) {
  474.         strRegsName=szRegister;7 v8 _% d2 f2 x% @/ v
  475.         char szPatchURL[100];
    4 F9 n9 c/ M9 F! U3 x6 y  g
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 k+ q$ q& @/ N+ w. U- i  v
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 z8 T! R% `# M2 P% g3 g5 d6 i" Y
  478.       }5 U. ^7 g7 U; H* H- g7 ?; u
  479.       else
    # o0 f4 R( T& R2 B6 w* A/ @( R# m
  480.       {
    % K$ r7 Q% ]( s3 T6 U9 s  r$ W
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 N( V1 Z: n4 J* s. I
  482.         strRegsName=DEFAULT_REG_URL;
    ( X- R4 m, v, }$ v: h9 m) ~
  483.       }
    , O% g) j$ `9 R# T9 \1 @( D. j
  484.     }
    & ^, }" C+ E% z; y3 f7 d( n
  485.   }
    6 s1 I1 j8 ]# _7 o
  486.   return true;1 v: `+ n8 Q- x3 Q
  487. }
    0 ]' w" m- z6 u8 u  A
  488. 1 P/ R1 y! H5 N1 x9 i5 f- a  c. y
  489. #include ".\ZLib\unzip.h"
    ' p+ z: L/ y0 S; P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 B; H) L- U% B; F; Q/ i5 R
  491. /////////////////////////////////////////////////////////////////////////////
    / a9 Z& o* @* B3 `8 K0 S! R
  492. // CRevAppApp initialization8 i" q/ K2 y& }) M% }- E. D, ]
  493. ' v7 V2 _* f* X- Y) I3 n) M# X
  494. BOOL CRevAppApp::InitInstance()# L( L( y1 F. D
  495. {! B: F8 j, V7 a! }2 L) X( N9 x4 j3 K
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ( B. V7 T. Y( k; b1 m# O
  497. $ y+ O% D/ ^4 [- O8 Y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
      d  v( l" @( s+ |9 t
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)). a$ W: z  z* S& K' f8 H  Y/ Z
  500.   {1 Y$ R$ W+ Z0 b( ?0 V/ h
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");) d5 b5 @" i0 ]' `8 y: e
  502.     GetPathFromFullPath(szPathTarget,szPathSource);  m0 J, |- ?6 A  G/ [
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))); a; i1 o6 k  b2 k* C( `2 @- F" M
  504.     {$ k. p' Q' k5 }) [
  505.       strcpy(szPath,szPathTarget);* n, A; \4 e& E$ k4 ^. o
  506.       SetCurrentDirectory(szPath);
    0 e, y  N  M& B8 }
  507.     }
    $ a4 z) ?; E( s, D* G1 L
  508.   }
    1 e$ @; r+ `  z+ g9 L: a
  509. #ifdef _DEBUG, f0 t% _4 P: C+ I
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 O" l1 Y: Q1 o$ t0 Y/ \
  511. #else2 r* x2 P6 I: S. h" i5 k
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))7 L. O! a* s' {) [+ P
  513. #endif9 y8 `& [% q1 i" M
  514.   {
    ) e6 j% \3 X) f" F! ^
  515.     char tempFileName[MAX_PATH];
    ; b2 r" B$ h$ R! A% J
  516.     strcpy(tempFileName,szPathSource);% j( _+ @; s9 o6 Q1 a
  517.     tempFileName[strlen(szPathSource)-12]=0;
    0 A' p; N, L+ @6 |9 e1 v0 p4 L& ?# F9 f
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ' ^8 r% ]8 l0 R2 O6 F# [7 T1 Q% M* D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ; {1 B2 `, r8 j2 t4 N. \" Y* a2 j% F
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);$ B5 B8 S& m4 K; b9 p6 p2 s: t  D
  521.     return TRUE;7 a# [8 K, B) D5 b' C
  522.   }
    ; o& z% s( H  F9 n( x& V9 s
  523.   // Nuke 0118: Delete run.exe
    5 Y" p; |$ \- Q7 M  k' Q& a( _
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );; o" ]4 y) s4 R; y  \, H  [8 D
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");  v  }& X) W. X: U, I! ^2 z7 g& H
  526.   if(!ReadCfgFile("Config.ini"))
    ' s7 Y1 l& J/ [+ F% w  F1 X1 I# _
  527.   {0 X5 l! U( }/ z0 o. W
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ' T6 h% W/ S5 i" U5 q$ }. j7 J& E
  529.     return TRUE;
    # r6 P% I$ f/ q& {  Q
  530.   }
    5 `' @4 o  X% A4 k
  531.   HANDLE mutex;: q. N& X& e! `' K
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")). @; |4 f3 W0 O- x- F4 c
  533.   {) ^' X3 a' C' S& ?  j) x
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 O& J9 t' }7 x4 z
  535.     {* i5 \$ ?  m5 W# D' S  t
  536.       CloseHandle(mutex);
    ' ^. q( P/ B4 N! V: U! x1 k6 c" ^
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ; u6 F% J8 [" @
  538.       return TRUE;- Q' O; J& Z! G7 O. r9 y5 R4 i9 \
  539.     }
    , V. Y$ s/ s! j! I4 s2 m
  540.   }  ! v" a( |! h+ s: k/ g2 M
  541.   CloseHandle(mutex);
    ( h( M+ L! c, h" |- e; Q" o
  542. / b4 J* \6 R7 ?$ e- _
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);9 u+ L5 ]9 w7 \& ^( a

  544. 3 Q  n$ W: e3 K' e# X4 N
  545.         AfxEnableControlContainer();
    # Q- ^( A$ Y) \( j9 N2 J$ o3 t+ W, D
  546. / h1 y7 m6 d% |8 u) {
  547.   bCanUpdate=FALSE;6 d: f/ u9 l+ o- R
  548.   dwStartUpSteps=1;
    : p) J9 R6 s: {# e' d2 x) \
  549.   dwProgramState=AP_NOTHING;+ o. R! V$ ?0 T+ R7 I' \+ F
  550. 7 ~* G9 L# U5 X+ B; d5 o
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) O) z( G9 k( }- _9 P0 _- _$ h7 t: d
  552. + L4 F$ R- L/ B! A! S2 a
  553.         // Standard initialization
    6 O& y& ]" ~% d7 P7 H
  554.         // If you are not using these features and wish to reduce the size+ q) ~. }! {" R# k
  555.         //  of your final executable, you should remove from the following
    : y1 A5 \* Q3 ?: x3 q/ j
  556.         //  the specific initialization routines you do not need.
    & X3 |: ?) ~6 d+ W

  557. 0 N9 D  j1 Z0 v# ~3 P2 |0 u
  558. #ifdef _AFXDLL6 c3 D# q. {' H* M0 U, ]
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL; m: g9 {5 C9 `/ k; j
  560. #else
      i5 {6 L2 L- {/ @# H0 e1 ~
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 Z$ ~1 m9 L/ F4 q, [% h" Y' t6 r
  562. #endif
    * o* ~+ F, Y: o. T" a

  563. ) b9 x0 m  S: m5 D* K* O
  564.   dlg=new CRevAppDlg;
    , U; f7 w" l% j( i( n, u! ^) L5 _
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    7 H( l4 M8 `" y! w1 C( r7 k8 y
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ( l3 x" n: j3 X' I$ X9 L
  567.   m_pMainWnd=dlg;
    ! C/ `& B3 x& v+ W* y

  568. ; N9 C4 t' F1 P6 g* E; a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * \0 T2 T, o8 G" R

  570. ' n& ~- f4 f) J5 v
  571. //  GdiplusStartupInput gdiplusStartupInput;  o1 v) W4 i4 ~
  572. //  ULONG_PTR gdiplusToken;9 K; L( a/ l, C
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    % E5 x0 ]! D; v8 |" R, ^

  574. . [5 C& W' \5 O: F, O- @7 }  S
  575. //        CRevAppDlg dlg;
    6 X7 q* {. H8 Z! |* r/ l
  576. //        int nResponse = dlg.DoModal();) N- e! {+ |+ Q
  577. //        if (nResponse == IDOK). s2 Z. _3 f4 U& t5 t/ ]5 a
  578. //        {
    & }; O6 }# L, e# x8 p, b: R* H
  579. //                // TODO: Place code here to handle when the dialog is
    ! E0 H+ [/ }$ e- ]% p% G
  580. //                //  dismissed with OK/ O4 y3 |8 O+ F" F+ Q
  581. //        }
    7 ]& j+ ^* P5 ]1 P7 M  ?  O" ?. c
  582. //        else if (nResponse == IDCANCEL)1 d2 f* H# n- s9 O; E! A3 F. }
  583. //        {' K. R7 T6 J! Z5 \. Z7 c
  584. //                // TODO: Place code here to handle when the dialog is
    2 W7 g* n- t9 x- f
  585. //                //  dismissed with Cancel9 u  N; R( r  f2 f5 ~
  586. //        }
    # d8 x' w' c. Y6 o$ \( ?

  587. ! s% c+ W+ l$ E% @( P9 i
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ' O" x- S) y. s
  589.         //  application, rather than start the application's message pump.& a( F" e$ v: N# ]7 N+ [2 r( |# C- P
  590.         return TRUE;4 E0 ^, @& {9 m% D7 x. C5 q
  591. }* W$ a  g+ A6 D/ N! u
  592. - N. |5 i) L4 @( Y% U4 e2 _
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 Z! D5 ^; a0 _
  594. {
    ) h4 v/ W7 c% i% N! l# q
  595.   int i;
      t3 r% z! a% b/ a% h) S3 u+ d
  596.   char *szRet;
    # L, w+ {# m1 l: ^) F8 l
  597. " n8 H9 @" x* G: p  T. f/ O
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    2 T6 x, p8 j/ t0 s1 b% r
  599.   if(sztoken)
      `" q/ A2 x; x- d8 J
  600.   {- \" c+ @( u4 O
  601.     szRet=&sztoken[itoken];
    # S, `0 f8 J, F
  602.     while(sztoken[itoken])
    : N0 `9 ]; I7 M; h6 I5 S% S0 v: H" V
  603.     {& v4 r2 W/ ^5 ?0 h
  604.       for(i=0;i<(int)strlen(token);i++)# H, o  x# {! s
  605.       {
    ( a- ]- B8 k) a' e3 E: ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]); x4 W8 l. _" Y- E& U" s( a
  607.         {
    0 g9 O/ y' F) H, N' K( c
  608.           sztoken[itoken++]=0;
    ; {( r& s# G3 i
  609.           sztoken[itoken++]=0;
    ) ^' q7 B, ], ]0 o9 I; b
  610.           return szRet;
    ; {; B& }) p1 C4 L% r2 m" h- q  K
  611.         }
    - d7 [# Y9 v7 b4 c" n+ W, M& E
  612.       }5 \3 M/ W2 ^  l' Y2 R% B9 Y
  613.       itoken++;
    : v  \0 K5 }( z$ r! X
  614.     }4 F! F9 m0 ?* N5 w4 K- h
  615.   }  @3 y3 ~  E5 W/ w4 k; h9 O
  616.   return NULL;
    4 n  {$ h( m% U% j, E! I4 @
  617. }# _8 k( e7 {" d7 B

  618. 6 W: |2 b1 a) B. {' T+ [
  619. void ProcessProc(long Total,long Current)
    ( t7 _: J0 f) M4 S
  620. {# ]( c5 o! r% r7 S4 n
  621.         MSG msg;
    ' V( M; B/ k8 }* k) ?
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    4 c2 x/ O) v4 v+ v
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));: }! d9 H& ]- U
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + U: [$ F) x. h- E1 @
  625.         {
    2 b( Z5 j! a5 X- w! D+ W
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ( }/ M6 P0 m1 G$ d( ?1 o
  627.                 {
    ( f# ]& `4 m2 r- Y) L
  628.                         return;9 X. c4 P4 b. [( |8 ]( Z
  629.                 }
    * c; y; k, M/ X3 j; R
  630.                 TranslateMessage(&msg);- P8 ?+ z4 M, K( t( e* a/ B
  631.                 DispatchMessage(&msg);( W, s# u) M6 M5 W1 F: D7 K3 n, W
  632.         }          M2 C6 G( z  v: R" `! t
  633. }
    : x. j+ R9 R3 o$ ^

  634. ( U; v* j' G' l( h; o( b4 ?8 R" [6 p
  635. BOOL bFirstChar=TRUE;
    # e8 P" z( c* b7 U4 P" X6 ~7 J2 ]

  636. 1 p3 M/ H0 i2 T# T$ u9 g+ H
  637. BOOL CRevAppApp::OnIdle(LONG lCount)! J7 T( a- |4 ]7 {! u7 \' D
  638. {
    + F. t5 p- g$ m# G' n; B' _
  639.         // TODO: Add your specialized code here and/or call the base class$ F+ H; A" u9 V0 M  j+ v( D
  640.   switch(dwProgramState)
    / o2 m  |9 _- f: t8 \* C
  641.   {
    " r2 Y3 i  \3 V& r& T' ?
  642.   case AP_NOTHING:
    % t+ D2 y- h: \) M# X1 ~$ X
  643.     switch(dwStartUpSteps)% o$ n: o. z- s
  644.     {
    2 N1 T& J0 r) S4 _( m# G
  645.     case 1:
    - H0 F1 P" W7 u% y
  646.       {  f$ D3 r" y  h% b2 ~! X9 o* J
  647.         int i;
    1 m8 D$ X* Q1 @
  648.         CDC *pCDC=dlg->GetDC();
    ( E% S1 v" H" i% p- Q8 n
  649.         HDC hdcwnd=pCDC->m_hDC;/ Q& f2 l% X4 t/ n# v
  650. //        Graphics graphics(hdcwnd);
    ( _' ~6 N; T( F# e& H0 e
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & p  a, U2 c. W( X
  652. //        INT iWidth=bitmap.GetWidth();0 D6 o1 j+ U2 s* c5 l  e% Z, a
  653. //        INT iHeight=bitmap.GetHeight();
      r9 ~: s) _9 l0 R) q9 I
  654. //        Color color,colorTemp;
    - ?. q! S/ v6 D7 _
  655. //        for(INT iRow=0;iRow<iHeight;iRow++), Y. T" m/ {  i, [
  656. //        {- C& ]" \- z6 C' n; }' \
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++): x8 c% r) c0 o9 v6 {
  658. //          {6 _6 g6 |& P5 k+ t% ]( T- Y4 G( \
  659. //            bitmap.GetPixel(iColumn,iRow,&color);+ u6 i. e( P6 @* Q( U1 {
  660. //            colorTemp.SetValue(color.MakeARGB(% h: W4 K5 [. x9 h' l
  661. //              (BYTE)(255*iColumn/iWidth),; u: M; |; w, w4 {
  662. //              color.GetRed(),
    6 }! m$ a0 E6 `3 U8 F
  663. //              color.GetGreen(),+ }2 G1 w. m5 @
  664. //              color.GetBlue()));" U! m4 k: |3 g5 B, J$ Y& i1 B
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);3 M1 D! [3 [& [7 o3 G9 A  U
  666. //          }
    1 ?5 U! N2 M- g2 G- N/ ]7 r; ~9 ~' l
  667. //        }8 ]( d% z8 {0 ?. x3 x. |. x
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);- _, ?) P/ }) s8 w+ o
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % s3 o) A$ {$ A  f' N2 Y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");' U2 U2 l" x- Y# O
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. ]0 u9 o6 y  ]% \) t0 o
  672.         for(i=0;i<240;i+=8)
    / N. {# C  L( o4 m$ \8 T
  673.         {) Q$ r1 ]8 m7 r& T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! F3 E$ Q. E* B
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 F- l9 u1 v  }+ o
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # d9 K9 k0 E( y! y
  677.           Sleep(33);: `# C* _- a5 U9 H8 d) c
  678.         }
    + d( A/ s2 w. U( M, P- r' P8 Y
  679.         Sleep(1000);/ I2 h& E) Q7 f$ H' y
  680.         for(i=240;i>0;i-=8)3 W7 o/ \: C& f
  681.         {# U& w( c' v9 ~+ K: N% Z" @9 k) t: {
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 s! g( J7 ~% K' y4 D
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 P& T0 c* ~9 y7 ?' n3 Z4 C( w7 I
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ |1 z1 c: \: g4 A5 T& X* x# g
  685.           Sleep(33);# B2 _: D6 O/ s" r- ]. x. U
  686.         }
    % H/ e! I/ e9 R6 j- L0 L# b1 o
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    8 U. k# E1 v. I" n% I
  688.         dlg->ReleaseDC(pCDC);
    ! Y6 r4 Y* Z- N5 g& o; s) B
  689.         DeleteDC(hdctar);
    ; f. F7 W; }; L2 P- f2 _+ z
  690.         DeleteDC(hdcsrc);& T5 N3 ]- B; t& J# b
  691.         DeleteDC(hdcorg);
    7 ]. I9 x, L5 ^4 T( o% L
  692.       }
    : v5 D4 k' E' H: g3 s3 h
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ( w4 d. j0 g" Y/ w0 \
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");2 q& c% e* v: p; K% s# C
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    + V; [: `3 J5 M4 i2 z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    - e/ O' F: F5 s/ i# T- o5 J+ f1 ~# P8 z; Q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: t. l% X/ [2 [
  698.       if(!Dn.Connected())
      ?! S( e( R; L: ?$ w3 [1 T2 @
  699.       {
    7 X! m. |  `7 A5 E' {
  700.         dwTotalFiles=1;" x/ H8 w0 ?6 p. P+ |8 u" U- c: X
  701.         dwDownLoaded=0;
    / s$ _8 x2 `+ f1 A+ J
  702.         bSilentStep=TRUE;2 O. k. @$ v% d# K; F
  703.         bCompressed=FALSE;
    $ d6 p$ k7 ?$ A# p, l9 J$ |
  704.         strExtLocal.Empty();
    : J4 q: I4 H1 ~: n- E' N- R# j! G
  705.         strFullName="readme.txt";
    ( z" D+ h2 o" m4 t
  706.         dwProgramState=AP_CONNECT;
    8 S8 S$ u- ^2 }& c8 G2 d% k
  707.       }
    $ n( e2 j6 V+ e9 e5 m6 ^- ^
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();/ f# L% r$ y; k& C/ {! z6 s
  709.       dwStartUpSteps=2;' u8 C1 s8 _  ?. d6 V
  710.       break;
    $ n6 Y2 J& Z; o: P/ o, |  Q, D
  711.     case 2:6 E1 l* t, j, K
  712.       {
    + I4 X# L; A5 T/ U# c
  713.         int iEOF;
    0 ^7 N+ R) j1 `1 ^1 ?+ c: L% V
  714.         FILE *fp;
    $ f, z1 ]" H- G) i1 `, l
  715.         char szString[512];
    ( z+ m  r7 X2 _
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    8 M' E6 @" P4 `5 H" V# L' R- H# ]
  717.         if(fp)' ~: D! f, c. Y. K2 e% R
  718.         {- J- _( i" R# ^/ Z
  719.           do4 z' ^8 T$ ~. y4 n0 U: m
  720.           {  q# }" E( R! n. D
  721.             iEOF=fscanf(fp,"%s",szString);" L  W& j8 O$ H8 y
  722.             if(strlen(szString))
    " G# x3 m) I- a8 B
  723.             {
    0 J" Y# M/ A6 s  D! G1 \3 o/ v0 t
  724.               if(bFirstChar)" ?, ?, s* L0 f7 ^% t  e+ N
  725.               {8 w3 q6 b$ N  [1 z" e
  726.                 bFirstChar=FALSE;
    7 g3 d3 S, n0 w' ^: b: c1 O+ D5 ]2 u
  727.                 bConnectIsBig5=FALSE;  W$ @! @/ O1 ^
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    8 D$ |9 l. S0 Y* e
  729.               }! ^0 E: z- b2 g2 Q; T1 J3 f
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
      R; B7 P7 W: v. x1 v
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));  }' [, Z2 ?8 h" H6 {
  732.               dlg->m_ListText.AddString(szString);
    6 |# A, N7 ?0 a6 o5 ^1 g% M' W* i
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 ?$ D+ U( c  w( M
  734.               *szString=0;% _3 w0 I5 q' Q- H* E. Q8 @& I: f
  735.             }
    ) l3 U1 Z# K  @5 W5 k7 B5 I; {! J
  736.           } while(iEOF!=EOF);4 y5 S$ G* u; x
  737.           fclose(fp);, K% m( ~" P' G) j& x$ m- B
  738.           unlink(".\\DownLoad\\readme.txt");
    " Z1 [# b: ^2 i, w8 A
  739.           dwStartUpSteps=3;
    ; K$ E6 E- j# R3 v6 u& B
  740.         }5 W$ P& L. ~. |
  741.       }0 [, ?( N, ?; g/ T: {4 c+ c
  742.       break;
    4 o# r' v9 Z) S$ m0 L& N% Q, D$ N
  743.     case 3:
    6 K4 y5 H' l2 s1 S" J
  744.       if(!Dn.Connected())$ y7 g& E, P" O: d8 F
  745.       {8 g  z7 J3 h4 S, j
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);: Z  L' @2 i  W% T+ J# n
  747.         dwTotalFiles=1;
    4 f( a$ \* x1 \
  748.         dwDownLoaded=0;2 p# J! b8 T+ R: a- {4 E
  749.         bSilentStep=TRUE;8 i9 j9 V* A$ D; y# Q
  750.         bCompressed=FALSE;
    1 S" J6 t* z7 |) N% @: H4 d
  751.         strExtLocal.Empty();
    2 U3 P: h- U8 ^6 h& _
  752.         strFullName="checkversion.txt";! O1 o3 C, u" W/ a' Q
  753.         dwProgramState=AP_CONNECT;
    $ @6 w' Z( t0 N* `
  754.       }
    + T$ t1 B! U  B& M5 Y7 D& Q# v9 ~
  755.       dwStartUpSteps=4;
    ( h5 t2 u3 c  Z0 t
  756.       break;  Q( o5 P# |* A3 E' Q
  757.     case 4:5 {9 a( E( _$ w- A4 Y
  758.       {
    . G: `, L; E$ c4 L$ K% Z
  759.         FILE *fp;
      l! ~" ?. y4 `
  760.         char szString1[128];# X( t; ?" B) k/ Z
  761.         char szString2[128];
    : j. W- R1 x& w
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # r/ ?1 h' M! z' M3 o3 @6 I  B: s
  763.         if(fp)* b3 |1 d, F( X& F) j. j
  764.         {  f' N5 i+ Y( n) n
  765.           fscanf(fp,"%s",szString1);
    6 |4 I, j) ?4 k) D
  766.           fclose(fp);3 n, G- s! V. G! I
  767.           fCheckVersion=atof(szString1);+ ~: z' {2 J( @8 b. F  Z8 l) \
  768.           fp=fopen(".\\checkversion.dat","r");: p! e) U' f5 V: u( r: ~
  769.           if(fp)
    6 n: g$ K. I4 q# y
  770.           {
    " D* L8 U0 h3 R1 O
  771.             fscanf(fp,"%s",szString2);
    ) B' S: q4 |6 u2 i$ E: g! P: ~
  772.             fclose(fp);. `% Q) c) V* g; x' Y
  773.             if(atof(szString1)!=atof(szString2))& h- s: ^% ]* D: z8 N
  774.             {
    9 t: R' }2 L' P$ T  z
  775.               if(!Dn.Connected())! z$ M: W/ Q; `7 h* J8 [1 N
  776.               {! J, ?, Y' |$ C$ w; ?, H! G1 z
  777.                 bFirstUpdate=TRUE;4 O8 `2 R8 T! [" U, \" |) d: y4 `8 R/ A
  778.                 dwTotalFiles=1;
      K; v$ ^4 _% K# F1 N: {
  779.                 dwDownLoaded=0;4 b7 F! c8 R# X2 s( l: T+ m
  780.                 bSilentStep=FALSE;
    7 {6 |- S* `$ E* X: u% R( A7 K4 T
  781.                 bCompressed=TRUE;- Y5 Y- W& K0 Z8 U2 I
  782.                 strExtLocal=".\\DownLoad\";, D: l, B' I" E, ^$ u( H! o9 [
  783.                 strFullName="update.txt";9 W9 D; A# Q* R
  784.                 dwProgramState=AP_CONNECT;4 j4 N, _" K* S$ N0 H( H
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    0 c; q7 f8 e* F2 {# Q$ o
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 A. P) q+ E3 p. {% ~! ]; ]% M
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");5 a9 M5 T1 Y/ H) k! x! J

  788. 0 b3 D; p( o4 d# L+ C8 f3 W
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 _) c, \+ `; [$ H
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ! ?  Y# \8 z& V; k; ^' n
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    % L7 s' o3 O4 C4 B! b2 C9 p
  792.                 {- v" g4 t) [7 Z: H5 x$ I
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    * v6 v' m/ f0 j" X, z/ D
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( O: Q$ a+ q0 I. f+ ]
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    8 U5 R, ?) N9 H, P
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# l# n' s. }+ k: g. g8 a  Q) U! t
  797. 7 z. s' z3 S  Q
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");6 T( f' u2 M: \# ~0 y+ X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" ~& t) ~( s  V4 h  z2 D
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");7 y0 r+ [3 X# w! p7 ]5 R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: s+ Z! ~  o, p4 v; Y/ z
  802.                 }& F+ K5 ~+ [$ B
  803.                 dwStartUpSteps=5;& g0 v/ @) T  _5 [
  804.               }$ v- w+ ?) t& T/ G$ `( O
  805.             }
    1 J$ r! Y* }! E9 @) ?
  806.             else5 E* N4 e1 X9 B1 `/ ^& C
  807.             {
    6 k6 g) d$ {0 X- e
  808.               unlink(".\\DownLoad\\checkversion.txt");4 F0 x# x+ o" @2 e3 F2 a/ N
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    5 ~* o, y, V. [! I
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + [2 ^6 V. O4 {* q
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 ~' f; ]- s3 z; U. ^' N, Y/ [$ g$ j/ x

  812. " Y* {1 z% v0 |' A  r
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 u+ z: F( d# O1 B% Q
  814.               dwStartUpSteps=99;
      E" r6 y5 {- J1 z0 `
  815.               bFinishUpdated=TRUE;) E- G3 q$ [+ E3 D6 e# n
  816.               bCanUpdate=TRUE;
    - C) `1 o# A# x6 `" @, [
  817.             }
    4 d# J. L9 [1 g1 H
  818.           }
    # @7 L$ O6 v# b. }( r- N3 I# i
  819.           else9 ?% j( t4 c8 x( T0 E0 |5 t
  820.           {
    $ g+ \$ C1 @! B( ]; Z, g5 h
  821.             if(!Dn.Connected())
    6 W* I5 ]% C% J  ?0 a  B
  822.             {: K5 h. q" J/ C8 p% V" M" j
  823.               bFirstUpdate=TRUE;
    * y# l6 A% K- ~" b
  824.               dwTotalFiles=1;
    ) o6 m0 b* t  l& \  B
  825.               dwDownLoaded=0;$ J, x+ B0 S! }# k0 u' |
  826.               bSilentStep=FALSE;
    ' m. i* g/ X1 t: I
  827.               bCompressed=TRUE;
    ; p1 l2 I6 I5 y! u: k
  828.               strExtLocal=".\\DownLoad\";4 S6 V' @, p+ _+ H/ |8 Z
  829.               strFullName="update.txt";
    / F, n% y" F, A, Y" A7 @
  830.               dwProgramState=AP_CONNECT;' M% \* T" M' u/ P
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% X6 Q: D: H' d* `# e9 m
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 `; [: y8 c6 U- n5 ^  {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 ~: f4 |- W8 F& R
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! ^- L% a0 P2 G6 W) j' F4 ?/ _. y* z
  835.               unlink(".\\DownLoad\\checkversion.txt");
    # _) d0 r9 O3 C
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)" B5 f  e, l# T* G1 W& P
  837.               {5 p* S. j* b- @' K% d
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");% K- D+ l$ y- |8 x8 z+ v# ]6 \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");- r& c+ I: B( p: N% t
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");: {" a0 W! S1 O
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * Z* w( n9 [$ d3 u
  842.                 - b8 Z3 N6 A0 v
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' x/ Y1 G- \! W! S7 I/ l
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");8 ^4 l1 h/ @% O. Q6 f
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");& j! I8 ]6 b/ c4 w+ O2 ?% t
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" ~* u5 S7 n& W7 B5 U) `% F
  847.               }
    " a9 U. H; k' O7 v6 U
  848.               dwStartUpSteps=5;
    1 V9 Y+ C& m* k% F0 y6 L- \4 \
  849.             }6 i% s3 @8 G* C! I/ r
  850.           }5 E- F; U  U9 v1 l; `* O) v  O" P4 K
  851.         }/ e8 A8 j3 _) S3 _8 K  ^, i" ^
  852.         else
    0 k  |3 s7 S9 \$ O6 U
  853.         {
    3 Q% z* t% }# Q: y- I8 ^1 x
  854.           dwStartUpSteps=3;
    . P* V# V+ o( f: |1 b( U, E
  855.         }  ]% `) u5 D8 \! p8 J
  856.       }
    " A) k# C; q8 Z3 |! j9 D0 b9 B! x
  857.       break;
    & W9 }- H. b& H) L+ W& f; x
  858.     case 5:
    2 T9 U7 d- J+ r; r9 \
  859.       {
    # H% M- i$ v7 d( J1 g* K- E4 p
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    - ?0 F; a; S& t
  861.         {% B( h8 R6 S# ~3 M" [" a) `
  862.           int opt_overwrite=1;
    . W* K; h( u! |: U
  863.           int opt_do_extract_withoutpath=0;
    ! x% L% d+ g% K6 q) ]
  864.           unzFile uf=NULL;
    / g0 z6 r% k4 }8 d( V1 H+ G5 R

  865. ( \9 t  o6 n" r% ]' M
  866.           uf=unzOpen("Wsa.zip");
      t) b9 F: M" t1 x' c
  867.           if(uf)
    ( K; u( \. L3 Z4 J) L* A
  868.           {. f# F: L- ^8 I! |. w
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);  Z: h6 }2 G/ E$ B
  870.             unzClose(uf);+ g& O7 K7 m' m7 i+ u
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# }' b: t' G9 j: s" G0 S6 z
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    1 i6 {4 c+ r; x8 m0 m
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");1 C& R# V8 u6 X# q
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 w8 u5 m6 p- l1 U& G, u
  875.           }
      a2 R' ]$ }/ c7 W7 o1 a
  876.           DeleteFile("Wsa.zip" );" P7 L7 W" k6 i" b
  877.         }8 G' \5 I% A' h8 b- a5 w
  878. 2 O1 O0 T! V% J- e, Q! X' C
  879.         if(CheckLocalVersion())0 @1 U$ c* J5 R% K7 L. t- P
  880.         {4 ~2 @+ o9 S  |# N' O
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");' v4 _4 u3 L, k0 a- K
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ' S, k5 b9 V4 u
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");4 K3 a3 \1 C1 K" d
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& t4 M7 w5 c# K
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);( ], G" \8 V, m0 [" O
  886.           dwStartUpSteps=99;
    2 ~0 V+ x/ y2 }4 x6 a
  887.         }6 x7 v1 V$ ]3 k& J5 W" m/ h' N
  888.         else# K4 P: F) [$ c8 O1 m! e4 x9 j
  889.         {' R# E7 U2 r; I) ]0 O) E
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    % a+ ]- m8 S3 [- c4 h+ j9 J
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    , `8 K( q4 E3 W4 [3 x
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");  k+ p7 }# |% k! F

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

# D# r. A/ K  G: H6 A) i
! T: Z  f4 m' Z

評分

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