CSUpdate.exe源代码

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

+ z4 k) `( ]' ]4 L
  1. / RevApp.cpp : Defines the class behaviors for the application.7 i4 I. N5 Y. P2 p4 G- g
  2. //) h2 |% z" K, U: n& e' R. R6 V6 G
  3. 0 y) ?7 @, r7 V: {$ H, O
  4. #include "stdafx.h"
    7 i3 V4 q) ]5 T- \0 d

  5. * P6 F% I" V' u9 w
  6. //#define UNICODE8 z2 w2 r( c; L9 A& P1 ], Y
  7. //#include <gdiplus.h>
    : X( ^! e* B/ K# Q1 G  Y5 g
  8. //using namespace Gdiplus;7 |9 W* Q2 g( g  @7 s$ f. f1 T
  9. # u2 L8 P: u  M6 [
  10. #include "RevApp.h"
    8 W3 D1 ~! X- {) r
  11. #include "RevAppDlg.h"
    - U2 A1 f  X( c% w8 U
  12. ! _" ?" k& i: W7 a3 o  `7 Q. S/ A
  13. #pragma warning(disable:4786)
    9 P4 l. E/ o( p! `
  14. #include <map>
    * J# H" `" R1 f  N
  15. #include <list>
    $ c) ~8 X! g4 T: e! R
  16. #include <direct.h>$ w0 n. }# j! n& l2 d
  17. ) h" ^( g* M0 K
  18. #ifdef _DEBUG+ S% k  u! T/ H
  19. #define new DEBUG_NEW
    - }% u9 a; C3 e3 u! @
  20. #undef THIS_FILE
    $ _) [, o4 y1 b+ }( ~
  21. static char THIS_FILE[] = __FILE__;3 @9 h: I' F: @( A" ]
  22. #endif4 T. v# N2 p9 q2 O/ `8 ^( _' P' W
  23. #include "SkinResDef.h"# o' }* {5 A  b% r- l
  24. #include "ChangeBG.h"
    7 A( m7 Y" i* {- N+ m& f
  25. #include "AFXINET.H"
    - x, [1 s) S, y* r- M; V
  26. 0 c2 t% g! r" n% B
  27. #define TRADITIONAL_CHINESE 0
    ) [0 N5 D) @7 y; ^; L! i* Q" w, R5 N
  28. #define SIMPLIFY_CHINESE 1) D) n& g. P/ o$ m
  29. #define ENGLISH 2& g2 Z& a' {5 a# M$ B1 o/ r
  30. int m_iLanguage = ENGLISH;& F" _" z6 |+ L& ^$ ?7 V. u
  31. /////////////////////////////////////////////////////////////////////////////
    / j6 a3 F& u; ?- t8 I
  32. // CRevAppApp
    9 V9 w1 C/ ]0 e" z* |# C1 q

  33. - @- f9 M/ P+ c4 y6 u$ d; g& J4 {
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    $ o0 v- B  A; Y
  35.         //{{AFX_MSG_MAP(CRevAppApp)6 v6 S6 {' @: V+ z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    , ?3 [6 |- J2 ]
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
      z% |. G; _" [* o9 F
  38.         //}}AFX_MSG
    % a5 Q/ ]% y& h! V  D$ P5 z+ r
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)4 a0 k% P$ K* W3 S6 k- b3 w! |
  40. END_MESSAGE_MAP(); [" G' ^' S5 d
  41. 7 ]; p, r% a0 a6 g- a. m; O
  42. /////////////////////////////////////////////////////////////////////////////; S9 y: V8 {# m; h
  43. // CRevAppApp construction
    7 |! W  n+ D: V$ Z9 A1 g, ]
  44. : z5 C5 v' L! I
  45. CRevAppApp::CRevAppApp()
    3 y# u8 W- i5 D$ O% n5 E( G: A+ R
  46. {6 S5 r3 F% ]4 t7 q4 F
  47.         // TODO: add construction code here,
    . U+ D! {" l: ?" w7 N, v. R# r
  48.         // Place all significant initialization in InitInstance
    ( T$ [- [( D9 q2 o+ t* U( x
  49.   bDisplayIsBig5=FALSE;4 W7 [$ `; _6 S9 N
  50.   bRestartUpdater=FALSE;' F2 u; W9 Q" h0 w
  51.   bFinishUpdated=FALSE;# p7 ?4 P* f% ?  r
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    1 e: Z7 D  Q# c: R2 |5 D
  53.   InitChangeDataBig52GBKS();
    * |6 E" u: f) v$ R6 R" H
  54.   InitChangeDataGBKS2Big5();% F& C) R$ }0 V. O, Y
  55.         //+ n. d, p$ W) X; l
  56.         bClickRunExe = FALSE;
    $ H* d1 r. V( ?' b: H/ \& D
  57.         //9 l7 Y; S) H- ]% h  x
  58. }
    " t3 ?: v, k, o% H0 n9 m9 |

  59. 3 l9 Z  Q0 R) q( D
  60. CRevAppApp::~CRevAppApp()2 r0 \3 U6 e7 h8 e
  61. {
    ) T9 ~, [$ B5 @0 C  P) H  h/ Y2 O
  62.         // TODO: add construction code here," B& n# P% ?) B# D
  63.         // Place all significant initialization in InitInstance
    . s' n( ^+ G& z8 H) B
  64.   EndChangeData();
    5 _! {) U$ k3 D7 q+ G" l6 ?, ^! N
  65. }
    , g4 b% z& g' d; }. D0 q
  66. , B! c$ K' j% z* k4 D: V  ~0 c
  67. /////////////////////////////////////////////////////////////////////////////
    8 ~% J# H1 z+ P: r6 K/ Q
  68. // The one and only CRevAppApp object5 k; U9 o# J- M- K& {7 ^

  69. % t1 h6 H. \1 ]( ?
  70. CRevAppApp theApp;
    3 n% O- d- ?& m- a1 V9 X( d5 S

  71. 8 k( ]8 |: C9 d: Y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    # _7 q% x- ]$ c4 _6 n
  73. {& C) l6 |" z! x2 x2 r( j4 i) }- E
  74.   int iEOF=0;1 `9 j. j3 L( z, @, ]
  75.   char szTempName[MAX_PATH];
    + q1 c; Z- z2 w6 t
  76.   *szFileName=0;. P- Q" Y: Q5 \: c
  77.   iEOF=fscanf(fp,"%s",szTempName);- i% U0 U& `- o
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& ^& d" U6 k: O7 M& X$ p
  79.   {5 v5 ^, p( p: \0 m+ E
  80.     strcpy(szFileName,&szTempName[1]);! t2 a& a  ~1 \( l
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
      c9 X) {2 u& x' k% j
  82.     {
    9 Z8 O) P+ D8 D& n5 Q4 E+ C
  83.       iEOF=fscanf(fp,"%s",szTempName);
    3 C0 u' @* |0 j
  84.       strcat(szFileName," ");
    0 g, R* g, R- K0 b5 X
  85.       strcat(szFileName,szTempName);
    : b8 L0 t0 y6 b3 X# T) k
  86.     }0 ^6 Y" A+ H9 q
  87.     if(strlen(szFileName)>=1)
    + g% `) Y) @* B/ L' P, L
  88.     {7 K' q" Z% K$ a" w' h0 V- m2 r$ E
  89.       szFileName[strlen(szFileName)-1]=0;
    1 R& L! b- C2 @
  90.     }4 K) c2 B: p3 A- x$ Q2 c
  91.   }
    $ e: P8 k' h9 w  D. G0 I- X) D
  92.   return szFileName;% T% M- o# n. [( N3 u4 z
  93. }" l+ h; s" d% M# @3 f  g

  94. 7 W2 ~3 j7 Y9 K. N
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    $ T* \, a4 I, t+ C0 R
  96. {
    7 U, {3 ]2 y  f% s+ ]4 C
  97.   FILE *fp;" i/ o  `- }  @: B0 N$ R6 y
  98.   char *key=NULL;* O/ r  }, B6 X6 b" {
  99.   char version[MAX_PATH];! M  P3 |4 f  r
  100.   LPUPDATEFILE file,olds;
    9 h3 v( ]3 A" M* c1 w  F: f
  101.   std::map<CString,LPUPDATEFILE>::iterator p;7 z+ T+ t9 u, M; {5 P" v

  102. ; m1 Q7 R6 w& N
  103.   UpdateList.clear();( U; q5 ?; D$ I; R
  104.   UpdateFile.clear();2 X; |$ X" F- X/ L+ V; U. }/ }! V
  105.   if(GetFileAttributes(filename)==-1) return false;* t$ d. E1 v3 d
  106.   if(!(fp=fopen(filename,"r"))) return false;
    , x  }% p0 h8 G8 X$ V
  107.   fscanf(fp,"%s",version);
    6 ?$ W% Y9 i; q) }
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }4 R8 x0 N- w3 O4 M( ]" r. [7 W
  109.   while(fscanf(fp,"%s",version)!=EOF)
    $ R, n$ W6 u0 B; `
  110.   {
      {6 y" }  ]/ }- n4 q9 r9 d# z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) Y4 C, h9 Y$ Q0 J4 U8 h
  112.     fscanf(fp,"%s",file->path);
    + C8 Q7 G* F- L8 |- E5 ~) _
  113.     ReadFileNames(fp,file->file);
    0 l0 y9 y2 k. A, A
  114.     strcpy(file->full,".");
    5 O5 A6 ~5 f" l  o: |* G
  115.     strcat(file->full,file->path);0 q& V' d, f4 \' ~
  116.     strcat(file->full,file->file);% P/ `, e  }* Y9 [) }/ a
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())% ]: W5 B9 Q  ?: p; V, \4 ~7 ?
  118.     {
    1 i. x- z  X' v, G6 f0 A
  119.       file->vers=(float)atof(version);
    / j; O! J! I  Y$ W9 U1 @
  120.       UpdateList.push_back(file->full);9 l1 [+ D1 }0 d* D7 z: L
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ) ?. n& K7 }; L  u/ @9 p# H
  122.     }4 s; f+ m! z9 D; z. q
  123.     else# m! _: D- i& V% u0 K
  124.     {' H6 M+ ~0 M* y6 v
  125.       olds=(*p).second;
    & e1 M6 m: s' G* \
  126.       if(olds->vers<(float)atof(version))
    6 t! L6 K2 x' {; o+ H8 z5 }
  127.       {
    ) Z8 v0 M; G* m
  128.         olds->vers=(float)atof(version);% K" S/ [6 p; j# [6 ]
  129.       }
    6 y) u$ A8 C. i, \. m
  130.       free(file);
    : B6 Q& y. H) h
  131.     }7 p  ]" @" h# i1 L: B; y( C+ _
  132.   }4 \* c2 a8 ^+ f
  133.   fclose(fp);
    . L) i0 V6 G5 b$ g
  134.   return true;
    3 C! H+ E7 M; h( V" e: Q
  135. }0 r) D! e5 R* T1 n: Y- x; M

  136. , e7 T1 i' V& Z' H# U0 w$ x
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)( C; z  d9 M, C# D( O6 U
  138. {+ H" p2 |5 z( {/ C; \9 e; }+ v7 v
  139.   TCHAR  szFull[MAX_PATH];
    / }/ b- o/ S' K" i* N
  140.   TCHAR *token,*inter;% z) ?2 ]$ o/ P* E* r/ w
  141.   *szPath=0;4 b7 `% |" s- @6 c( O/ q
  142.   strcpy(szFull,szFullPath);2 u" L8 J7 v8 `! K% O/ B' `
  143.   token=strtok(szFull,"\\/");/ p3 ]+ W1 @  u7 L9 C3 |
  144.   inter=token;
    # x, h2 X* K1 }; @' k9 n
  145.   while(token=strtok(NULL,"\\/"))
    $ }% P4 o8 d( T
  146.   {
    $ G% k4 X; J- B& }  b
  147.     strcat(szPath,inter);
    : j, i) h/ Q7 [) F7 k8 a- p
  148.     strcat(szPath,"\");
    2 d0 s& X3 `4 A& z8 N' r
  149.     inter=token;
    , p. l; P" L' E; ?
  150.   }# V! T9 I( R5 D  @, E
  151.   return strlen(szPath);
    2 E# p0 @/ q# r3 d  B; B
  152. }
    ( B9 {$ q1 e; m* F

  153. ! L# u+ c2 f  o$ p8 v! Y1 Y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)4 h0 b" @+ u1 |( H
  155. {4 F4 k# h7 U) B5 b9 g7 T
  156.   DWORD attrib=GetFileAttributes(Target);
      e1 H2 I& d% W4 n5 Y* q
  157.   if(attrib!=-1)5 G' Q; r& @; H- v; Q2 d3 J- Z
  158.   {
    : K( A4 Q3 Y" ?3 k) ~( s
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    0 a7 y7 c' f5 y
  160.     {
    # s' ]1 [8 @3 n3 ~! ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ; d, `7 `) L& q3 \& b: `5 w
  162.       SetFileAttributes(Target,attrib);
    5 |: M8 K& V) Z+ h  I
  163.     }* O8 M" T2 q  A4 W6 ?
  164.   }3 c- K5 z  h) d+ C7 c% t2 `
  165.   CopyFile(Source,Target,Erase);
      S0 u  u/ M0 y1 U5 ]
  166. }
    4 x* L0 `, ]1 f, ]) ^+ n& d

  167. , K5 I$ ^6 B# R
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ M1 |$ o' [) _9 J6 T
  169. {* l0 q" ~1 _! o" t9 c7 Z
  170.      FILE *fp;8 Y2 i) e, h: q% K3 C" E; Q7 z
  171.      char  szBuffer[8192];; i- i$ R0 e# X( f1 h
  172.   va_list  argptr;
    7 p6 j, I+ t5 b
  173. ) d7 M# e8 C# w- I* m' T. S. J
  174.         va_start(argptr,message);
    ; Y" [% ?. l3 q
  175.         vsprintf(szBuffer,message,argptr);0 J$ A! N% r* u3 o% Y* i/ Y
  176.         va_end(argptr);7 \8 E8 U6 s' Y  W
  177.   fp=fopen(FileName,"a");
    & V3 V! M5 M+ O  d2 B+ s* y4 X
  178.   if(fp)
    * U1 R3 p9 p/ _5 w1 C6 O9 |) l! k
  179.   {; `/ o/ k! ~" M: u6 Z. q, k: Z- I# A
  180.     fprintf(fp,szBuffer);
    3 j% r' h: R! _4 R0 @
  181.     fclose(fp);
    ' c; H  h6 w! m
  182.           _flushall();
    . Q/ J' T! R  n, _8 L7 J$ U
  183.   }3 s4 b+ u; v* n9 l' J3 Y6 s0 U
  184. }
    ' a4 Z- W7 D. ~& q0 G

  185. 3 x. B# r% Y& f
  186. BOOL CRevAppApp::Fclearf(char *FileName)  ?4 C5 ], H" |, C, ~3 C  ]
  187. {/ G2 Y- Y! ^$ @) A. x8 |% S
  188.      FILE *fp;
    ) N  J4 |( z. q, B0 q0 i* x1 ]: ^9 y
  189.     DWORD  attrib;
    8 R5 e# V" I; K
  190.   attrib=GetFileAttributes(FileName);
    * S, E  u8 d' v# a! ^
  191.   if(attrib!=-1): p- a! j5 Z7 f$ E
  192.   {
    : V/ b1 M; Y" o+ Q7 E$ }
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    3 a) |; X. p) y) M" ?6 k
  194.     if(!SetFileAttributes(FileName,attrib))+ F8 @" k% S/ q' l& G
  195.     {7 Z, @- i9 k2 F# O
  196.       return FALSE;
    8 G& c! m5 S# `, I$ r- m7 J+ R
  197.     }
    3 }3 V! J: x, c: o' [9 j
  198.   }5 B; k& W4 `, m
  199.   fp=fopen(FileName,"wb");$ Q, K. x( l# v% k# Q. C1 U& v
  200.   if(fp)0 L, ~5 K7 w* l6 O) b: d# M
  201.   {
    6 {8 s# y" U" x$ \7 C. y/ t; x* S
  202.     fclose(fp);
    - M' Z/ J0 b- B) @" d; B
  203.   }
    / Z# a8 E* V  J' Z
  204.   return TRUE;5 @+ x" K' P- H6 I4 `
  205. }  E. x; m  K4 c1 }8 o3 ]
  206. % L! x, P" P0 [4 E5 J! L
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 h. C% u- [$ E
  208. {
    $ \. l( G8 Q5 T7 c, }
  209.   char filename[MAX_PATH];5 n) S& Z0 P8 ~: U
  210.   LPUPDATEFILE file,olds;" S9 `6 G7 m# q* C+ B$ l
  211.   std::map<int,CString>::iterator i;: o/ P7 e% ?" D+ v& N) F
  212.   std::map<CString,LPUPDATEFILE>::iterator p;$ W. `- f, g' l! q5 _& Q& N6 X  O
  213.   std::list<CString>::iterator l;
    3 @3 @1 L3 k1 q; R) ^) `
  214.   X, t+ N* J0 T8 h& j
  215.   if(bFirstUpdate), e9 N& u+ a* Z7 c( _
  216.   {
    5 d. T5 y/ G) d! [  K# [% g( l
  217.     dwCurrFile=0;5 z' e; K# ]5 C8 l5 ]
  218.     bFirstUpdate=FALSE;6 w* _1 d' b' V" q8 _, b' w. G
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / K) r( r/ y) B! f$ h5 g
  220.     {9 g' Q$ [, Y! G) o# H( Y
  221.       dwTotalFiles=UpdateLocal.size();
    9 `, g# B, U  x. ?) y
  222.       dwDownLoaded=0;. V% p- J; R" |: s; H2 a9 P. M& l
  223.       bSilentStep=FALSE;
    3 b' [$ \0 l, \2 j8 R% E9 t! b
  224.       bCompressed=TRUE;
    : w5 Y* ?7 G& B/ j6 ~6 Z/ N& N
  225.       strExtLocal.Empty();
    * b: i6 o+ B& S  U! h4 t! t2 S( c! |
  226.       strFullName=(*i).second;) f2 j2 s/ h2 M
  227.       dwProgramState=AP_CONNECT;
    6 c/ \& |3 D4 t$ D  @" A2 ?5 E) v
  228.       return TRUE;
    1 }% T; M" m2 j7 t
  229.     }$ k) N4 O" `" M' L1 D
  230.   }5 S& U& P. F* L+ w3 Z6 ]
  231.   else if(bRestartUpdater==FALSE)' z; x( G, d' Q7 V8 A/ E) l; P0 D
  232.   {
    . B& Y0 ]1 a2 L$ d" \/ S2 d& A
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    : [, H# C+ L- J! v* ~5 O
  234.     {
    0 @5 j, S+ p9 `* a( i
  235.       file=(*p).second;
    ' m5 y- S) M7 H! i- G1 Y3 G! S
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())0 B2 g/ f6 w; g( Z. Y. w3 D
  237.       {
    7 K. G( k. w4 [# \# O; z/ e, Z" d
  238.         olds=(*p).second;
    " O5 ?2 P# D+ Y* m1 j" V
  239.         olds->vers=file->vers;3 J, P8 k5 I! L# L" f9 d: B' @
  240.       }
    9 @+ h. d. [3 \! U6 x# O8 p
  241.       else
    % B" Q% }0 t  W3 _! e# x/ @
  242.       {6 b& I: q7 h; ^( j' M
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # @6 C0 f7 I* }2 M
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* F/ v' Q6 ?% z% f) }6 @. r/ k
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 I: k9 t/ C/ S7 D. ^6 S
  246.       }# z9 A5 c% e. l2 \- y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    . O& w: a! t1 ~$ K. i
  248.       sprintf(filename,"(%s)",file->file);" H+ ?) C1 ?/ T
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; G( T$ v+ b+ a2 _* Q: {
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ' L1 q( |! h6 y8 u
  251.     }3 \( P& ]1 K5 Y1 U  X; R
  252.     dwCurrFile++;
    ! `- G6 u9 T5 Z2 w* B- ?
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 _! S: i4 N: V
  254.     {8 ~: C. w* a5 W
  255.       bSilentStep=FALSE;; D# P3 O5 t9 J9 }
  256.       bCompressed=TRUE;
    ; v7 ~  e" l! s& @
  257.       strExtLocal.Empty();
    ! n' ]2 {" J3 i3 x4 ]# U' K+ t
  258.       strFullName=(*i).second;
    : s; ^- v; c' d) @( x- G
  259.       dwProgramState=AP_CONNECT;
    - }4 [( {  J' V/ A$ N) m( _% I  F
  260.       return TRUE;
    : n: ^( o! c0 R- j- w$ J# k& o8 N
  261.     }
    9 T- P0 e: E9 W0 X4 x9 G7 d, f
  262.     if(!bRestartUpdater)
    ! F% n% t) u5 N7 x& B
  263.     {
    + ]- O7 O$ W" `! N! U& t6 m
  264.       int iCurrSize,iFileSize;" o9 U2 Y' E, D; O* i1 |3 y
  265.       iCurrSize=0;
    1 g. A4 f, N& F
  266.       iFileSize=UpdateList2.size();& k! g3 U( L; i" T
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    - L# C+ w* s& |0 u
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");: {& h" G3 e- ^
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    & o+ ~" M/ M9 F. Q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! f  T) q; D2 f5 ]# w' A
  271.       Fclearf(".\\update.dat");
    , X0 ?3 {3 b( m
  272.       Fprintf(".\\update.dat","Bloodyf\n");) [' v2 D( P" `& P2 h9 ]
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + v3 L9 Z# X( F! r, S8 h+ s( B
  274.       {
    % G' }2 a3 f, o% n# I2 }2 [
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    $ k$ F. `2 A- }* [- ~* K. a
  276.         {
    , v' g0 Z: L7 z$ X" W
  277.           file=(*p).second;
    : `: l6 a, O: R/ |* l9 J( G
  278.           sprintf(filename,"(%s)",file->file);# U$ a$ G9 h) U5 }6 J- C
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 e. y2 \  p! B3 O! y9 A' t
  280.           iCurrSize++;( `' r) {7 k* \* r
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    8 W! D; A6 g) `+ ~
  282.         }
    5 R! R6 x; y5 ]9 ~& y
  283.       }( Y+ V" |7 h* a( n1 t. w
  284.       unlink(".\\update.txt");4 j( D# ?0 L' j* F6 I
  285.       unlink(".\\update.tmp");
    4 t4 g' X( @' Y# _9 b/ K0 n& T+ u
  286.       Fclearf(".\\checkversion.dat");& Z+ L7 W3 O4 H- `- t
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);- I( f6 O2 o' d/ Z2 H! s
  288.       if(UpdateLocal.size())
    . A, L' v5 ~. f! g
  289.       {
    6 H- ]/ p/ ]. T+ w
  290.         UpdateLocal.clear();
    9 \2 Z5 K1 h/ y0 H
  291.       }: x5 a% ?' k4 _. i& g7 F
  292.       if(UpdateFile3.size())
    % {, F* t+ s! h. v+ S# R
  293.       {
    ( l0 V0 X" _- n2 N/ a: @. F. e
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 ~$ I4 X" E/ ~4 a
  295.         {8 u3 V2 d4 ~" {3 C* g9 o
  296.           file=(*p).second;9 n! s# |6 y0 E) B7 x0 ?
  297.           free(file);4 w2 U1 K7 e- H& |$ p
  298.         }6 s4 z  W: c7 E" p4 @
  299.         UpdateFile3.clear();
    , b8 {" J1 J: e, Z+ r- P* r
  300.         UpdateList3.clear();
    8 w5 e" R% i6 a  {
  301.       }
    6 `) u& J- M/ l8 f1 I
  302.       if(UpdateFile2.size())7 S) O- N/ M2 [: L$ ~7 |) y" B; a
  303.       {/ U" L8 v( B. ~  U* L- X0 x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # Y+ N5 T1 l% X1 _
  305.         {% S/ \2 |1 J% A
  306.           file=(*p).second;
    1 w# t3 b% K$ g$ Q, f' z. T1 O
  307.           free(file);
    9 j4 G+ H- b& `- ~( D- W
  308.         }
    6 `9 p" Z$ ^# v( o
  309.         UpdateFile2.clear();1 V" Z: {$ E' Y, ?! C
  310.         UpdateList2.clear();
    ) x6 q3 t1 z( h1 x/ s1 B" a2 N1 {
  311.       }" b6 z& Q  C6 N, K( \% O
  312.       if(UpdateFile1.size()): T/ r: W% V5 L7 W7 p' {
  313.       {
    * c' v) A" T! D, @2 T
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): G/ T6 B/ O9 A) {8 @$ w
  315.         {
    * B8 r, D) n$ C7 }6 P4 _9 v7 ]) \
  316.           file=(*p).second;2 A0 N- m$ F: ^1 F4 C5 a
  317.           free(file);
    $ u; {. I! l( Y7 I# r& k% l# p; u3 a
  318.         }/ z% t4 P0 E$ `4 _3 s8 Y* ^
  319.         UpdateFile1.clear();1 W  b" U$ _3 R/ f( H" X
  320.         UpdateList1.clear();% V. D7 F1 H# i# w' g6 Y3 ]
  321.       }
    ( K( `% O( a/ @2 ?% e; ?
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    6 _" p/ l8 X9 T: X
  323.     }* k9 K& S+ y3 a* ]
  324.   }* h: n3 h- n7 k! n
  325.   return FALSE;
    2 X, I  E& c' b6 H5 B
  326. }6 q, f- Y$ x& @* y9 w
  327.   _( W& s, L+ x* C( N
  328. void CRevAppApp::ClearAll(void)8 U9 W3 U1 w( |9 P$ B! q
  329. {
    / f1 m: R6 ^5 ]. a3 q+ h
  330.   LPUPDATEFILE file;( Y* p! q8 S  W
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) k' Y9 n. k% F: U* V
  332. ) H) ]7 S4 ~& J2 g
  333.   if(UpdateLocal.size())
    : g' u0 [: c; R8 _# E
  334.   {& j# }3 U# {8 U2 j) k6 _- U& z
  335.     UpdateLocal.clear();( A/ ^8 e) V  W7 r/ g
  336.   }
    9 c( O, m( Z1 n! X
  337.   if(UpdateFile3.size())
    * [% X. M1 X3 a$ Z& V3 c
  338.   {4 D) A- m5 [4 c4 Q0 U0 b- ?' }7 v7 \
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      I% p/ E1 V' f4 o' N
  340.     {
    1 Z. n2 ~7 s% O8 }% o
  341.       file=(*p).second;
    % V6 [/ t5 O( k% j5 L
  342.       free(file);: t' @7 u* H8 x& J( ~
  343.     }; m- R$ O  \$ @: b& E
  344.     UpdateFile3.clear();8 L- T" y1 y/ y$ t5 K  C( g$ g- y- I
  345.     UpdateList3.clear();
    # J/ c/ N4 `" ]" T! T+ [
  346.   }/ s8 Y- p9 o! B8 J( o
  347.   if(UpdateFile2.size())
    - H: h/ y% E# J# ^
  348.   {
    * ~) O5 n  M# Q0 c! {3 U0 Y0 B1 t
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( e! F9 {  [5 I1 T* V
  350.     {
    , z" ~- H( c- t  @; Q) K
  351.       file=(*p).second;4 U0 \5 D! K! M7 V: w
  352.       free(file);
    + F) ^6 x6 W% n3 ?
  353.     }
    & }7 g9 d- j( E  M6 \9 G5 j3 w( X
  354.     UpdateFile2.clear();
    0 N+ M& |  ]7 M* v8 k0 ~) h
  355.     UpdateList2.clear();
    : Q# H' ]- I. m" T: a2 ~. `3 L
  356.   }7 |4 I9 z, X3 f" r0 ^7 W' [" N1 o: a$ \: j
  357.   if(UpdateFile1.size())8 B3 e4 D4 a; A1 G
  358.   {
    - ?* Q1 X6 J# ?+ C+ c$ q. c
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ {4 q+ q2 |$ x" z! y( x
  360.     {1 H0 p; D8 ?, O! |3 D% b
  361.       file=(*p).second;6 k: k$ o; I/ c0 U& _4 u# H
  362.       free(file);0 G5 ?/ Q0 O3 m' ^: \* T  t
  363.     }* ]) c5 {: J# `: w. i
  364.     UpdateFile1.clear();- J- M- s! U  Y1 v: X7 P; _+ }
  365.     UpdateList1.clear();- ^3 V  i8 ?3 F4 a+ f% g# f9 ]
  366.   }
    , _& L1 J4 K5 ~9 Q' m! ]
  367. }  
    # y( }, a5 t' n9 c5 q3 T3 ?
  368.   
    * E" |2 a4 t1 w, U2 w% M
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    , K9 \* A" L/ N7 T
  370. {2 X2 k$ L3 d5 {; [
  371.   int c;( c  {/ _, ?, S5 A; y, o+ t: v
  372.   LPUPDATEFILE file1,file2;# w& H# `; f) @1 K8 e3 V0 {, Q# G
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;/ G% u3 Z& `# ?+ Q! j9 e( K
  374.   std::list<CString>::iterator l;
    - W% ^) ~3 A9 y$ w6 p

  375. 3 h% u. y7 [4 ?( g8 R+ ]  [3 P
  376.   UpdateLocal.clear();
    ' U. @5 a  a2 q' o/ B5 `8 X8 t- x9 }
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    8 i! ~, a4 ]& y6 O% R5 h
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);, {) I0 m5 u3 E! ^( p8 C1 J
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    # ^  e/ N/ V, E/ N# e9 Q) v
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);8 a% H& ]% o$ H
  381.   if(UpdateFile3.size())
    ( E/ T3 w3 }( Q7 E5 z4 p
  382.   {6 L0 c& |! d  X+ H
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    * P2 {% D+ k: P9 \3 n2 r: v
  384.     {
    ; Q6 P' y+ i- y$ O  [  g
  385.       file2=(LPUPDATEFILE)(*i).second;
    5 V* d% e1 |. s/ b6 Q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" ~9 F9 h6 q+ O- M& D
  387.       {* K! @1 @3 P! d
  388.         file1=(LPUPDATEFILE)(*p).second;. G$ h! k3 S4 v* L4 W* [
  389.         file1->vers=file2->vers;
    ! S* |0 I2 ^4 \7 v) h" d* t* K$ @
  390.       }
    1 ]( z) |. @: T& Y6 Y
  391.       else1 f- J8 V8 k" x% O$ ^
  392.       {5 L, o% z3 k, H4 L
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 B/ n: h8 A! r& h6 H
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    5 k4 ^4 _* W4 g( @7 \
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    6 I* x  [1 u0 Y0 f; [
  396.       }! Z3 j6 o( o2 P/ A4 M; e' t: S
  397.     }! m! m, _  u- ^+ y
  398.   }6 g4 ]4 j( f: G% i& E1 f) L
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)7 N" f0 g& m5 \0 {( D& h4 [
  400.   {6 L) Q0 ], o, g, ~! y! f( `6 W* Y& R
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- o/ ~4 i% n$ ^
  402.     {, r1 V3 R  u2 X" W; i7 s- v
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 X, ]& Z+ p) e; c/ e
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); Q; W7 t. Y$ O: B  s' y+ a3 Q6 X( u
  405.       {$ ~7 t% u$ I3 J. z( I0 V. \: s
  406.         file1=(LPUPDATEFILE)(*p).second;: ?: Y! W# }+ ]% ?
  407.         if(file1->vers!=file2->vers)
    1 T1 m% C3 @  M4 t$ P
  408.         {" b. y0 T$ k# ~2 f3 o) Y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( o# ~" k  I6 k7 h8 M
  410.           c++;
      h: K: B" x: c' g& R7 u% x3 h3 {
  411.         }
    & o7 y5 K7 p  ~" y
  412.       }
    : ]1 o3 L/ v+ ^. k! b
  413.       else- a; v# G: T! k* K1 M2 {/ o
  414.       {; q; I1 v& q4 J: }7 K/ d" I
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - y7 I8 B0 v; [0 h3 c
  416.         c++;
    4 G2 v, O1 u8 j. f, ?5 ?- V
  417.       }; c1 s; w7 `" F) _' s
  418.     }
    + `; G8 Y% n. Q7 b* D& l; o' u
  419.   }
    # n! R( e) G. i8 O0 Z  @% ~) v) T! g* e
  420.   unlink(".\\DownLoad\\update.txt");( _8 S0 E* x/ Q
  421.   if(UpdateLocal.size()) return TRUE;0 |: k0 }  [  t$ J
  422.   else                   return FALSE;
    & s. X1 f9 L# g5 }
  423. }
    ( [$ `1 r6 u$ M) \7 \. C8 V6 E
  424. 4 q( X7 @5 y) b; D
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ! P5 I" H6 P' c, l+ F
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"! v3 F8 R7 g# f( b7 l; ~% W8 i# I

  427. ; w6 ~3 A+ ~' o& `3 J4 `, m
  428. : _) m4 e# D% x% W- ]( s; \/ i6 T
  429. 8 L/ I! t3 M) `# [2 t0 `
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ D2 t4 U/ J3 ?1 E! r8 \6 D( e5 S2 H
  431. {
    ( |$ S7 n( A4 l% t
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    # [: v. D8 @6 v/ D. l
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / }" B- N) _! U" m- f  G
  434.   {
      p( v  l8 ?; ~1 x& C: n
  435.     char szLanguage[50];
    ' N" j6 J1 @: X  Z4 Q# y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    , b2 z- _$ i5 P$ X$ M
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , r% L8 v/ G. a" f$ k! k
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 v# c; ~+ p4 w8 t! w& H, f. ?
  439.     else                                   m_iLanguage=ENGLISH;% \4 k' v9 k4 m0 e& t
  440.     char szRegister[100];
    " z0 R6 g  S2 t9 l
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 A$ `# J5 L2 `* t
  442.     strRegsName=szRegister;
    7 l9 ]/ Q. @5 j6 y
  443.     char szPatchURL[100];
    + b5 y7 j! B5 a# f. P
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / A' S7 w. R. ~
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , I2 J% w( U- Z0 \$ i& D3 {
  446.   }7 n& J' {* D1 @: L! p! Q& X
  447.   else5 n1 i0 \1 n# W* W2 U
  448.   {. ~( k) p2 r' z
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% \2 I% g  D/ w7 x& c. d& a
  450.     strRegsName=DEFAULT_REG_URL;
    # Z6 O0 P$ {1 S5 r+ i: `
  451.   }) j' p9 o+ u; e! y7 V* x" W4 y
  452.   if(GetFileAttributes("hosts.ini")!=-1)) v- J) P0 H! s: `
  453.   {( A7 s3 O: f- n4 a& j! e1 {+ U9 P
  454.     char szIP[50];
    ! e8 B( E3 e( \- Y4 w
  455.     char szDIR[300];# c& R+ z2 \% }
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))$ i( H. w1 f+ W; w- G5 M0 E+ ?
  457.     {
    ) W: c# j& c5 A$ w+ j+ l
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");6 g+ R1 H0 v0 {/ k  h2 p
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");  C9 f! ]1 [: S! |+ V6 A; N
  460.       strHostName=szIP;* |; o# D9 {* i% `& y
  461.       strHostPath.Format("/%s",szDIR);) C4 m; P$ q; R( g' a& V
  462.     }
      v" W4 @& E& g/ K! B
  463.     else
    ' O+ y, g* Q; S  n
  464.     {
    & x9 |  w+ v( e3 C  D* z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' T. ^2 H% i/ V. Z+ u4 P2 _
  466.       {
    ' B7 O! C) A1 m- O: ^
  467.         char szLanguage[50];. b3 m  t. B- s+ C$ \* {
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 S5 U: F9 z- g3 F& f& J( {7 q! k
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 I' y- T  l* H+ y6 V& _
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / f/ l1 R) n6 q0 M+ G
  471.         else                                   m_iLanguage=ENGLISH;3 I2 i' l5 q+ H; j+ c
  472.         char szRegister[100];4 n, f  x  W% \
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! m% H& _+ @) ]( X3 {% l% @5 v
  474.         strRegsName=szRegister;
    & ^3 ~& t5 I' U0 c( @
  475.         char szPatchURL[100];' M/ z8 [) Y% ^* t6 g% H
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % N$ D! W2 Q5 x! E" B  F' E+ T  q& `
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% j! c4 `5 I' Y: T% h
  478.       }! T- e! h: F+ i( g) N4 u6 l
  479.       else
    $ m* ?$ _, r. }4 W& r, r; B
  480.       {
    , q! ?8 f9 K& r/ F. z7 W
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # m) b6 c9 `  ~
  482.         strRegsName=DEFAULT_REG_URL;
    8 Y( D) \+ P  g
  483.       }0 [/ J4 I" R' u9 o3 Y+ j: n& u* t6 g8 p
  484.     }
    * e. B/ k( z0 X* `( |( W
  485.   }
    ( z% Y) V( q: u
  486.   return true;/ ?" G3 H9 `/ h/ Q; R# x
  487. }
    " A* S6 ~5 ^. z4 ~0 y2 p. U
  488. % ^2 p% L* n$ q" {, Z
  489. #include ".\ZLib\unzip.h"$ Z6 }8 E7 g9 ^4 I
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);/ |+ B' ~1 M" F& Q
  491. /////////////////////////////////////////////////////////////////////////////' `- k" Y5 E6 ^& O0 D; h' H6 ~& q
  492. // CRevAppApp initialization8 {8 o+ Q, f" b+ p+ a
  493. / V' U6 ?& n9 f/ V
  494. BOOL CRevAppApp::InitInstance()) h' A/ D; S& x7 f  p" G/ D
  495. {: E$ `1 b7 G# h1 y; E
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    + A3 F' P8 N  J  u

  497. 9 T5 L  [4 a! o* \1 A
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    4 B9 Z+ j6 |; M2 ~# |1 _' Y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    * z8 H4 D6 o& r( l; `# Y
  500.   {0 J& J9 q% v9 C8 y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    2 o8 c- F& s& G* J* C
  502.     GetPathFromFullPath(szPathTarget,szPathSource);  [* J3 E- B8 _4 }
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    * e  v7 m. ^! O5 X; f4 V& `
  504.     {
    - u+ c3 j6 }& J. ]/ ~
  505.       strcpy(szPath,szPathTarget);
      C  m6 S2 f! T1 r/ N
  506.       SetCurrentDirectory(szPath);2 g% i+ U& c! r! [
  507.     }
    & B4 s; S# t( _
  508.   }0 Y: U1 I7 H/ n" Q
  509. #ifdef _DEBUG( @- t' b& o. F5 g* K: E1 `5 T
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) ]/ g1 Z4 _( k- H' k% V6 `
  511. #else
    2 U4 |; M& G! l1 z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    0 h  V$ ?. u' v
  513. #endif
    9 a) }* L6 ]) j7 y( D
  514.   {* F. R. n" F# f/ V. [1 \& U
  515.     char tempFileName[MAX_PATH];
    . K3 @+ C* x& U; o9 z& D/ C* c
  516.     strcpy(tempFileName,szPathSource);" e. }$ m* ^9 Q
  517.     tempFileName[strlen(szPathSource)-12]=0;: B* c' }' Z: t5 m' c) A  M
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    - j( u2 L% K& m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);) b5 z# I% I) x& @% o
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);0 s" m. Z) U' f" o4 v( G, @6 E9 \
  521.     return TRUE;
    8 e$ z2 t* E6 r+ Z
  522.   }8 C. }  c8 K4 ^
  523.   // Nuke 0118: Delete run.exe
      g1 `3 Z2 Z9 X( M
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    - X( Q0 }2 ^+ F4 |3 `1 S% ?
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    , \* p* E* N' L! D& P0 b& J
  526.   if(!ReadCfgFile("Config.ini"))
    8 z7 c3 Q  n* z7 [
  527.   {
    ' M$ y& F+ r2 f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);; h% c& T5 M, d. w9 x; [+ h9 G
  529.     return TRUE;3 l% c( o2 e/ M9 J) u' R/ R( i
  530.   }- ~: k% a, E0 E. [* |; J  Q
  531.   HANDLE mutex;
    6 E. O- j" @, B6 ^
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; L$ w# g6 t1 A3 P1 D. {6 Y, u( |
  533.   {
    : {  f8 }5 k8 H3 }/ q% }
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    % y" Q0 F1 V" V
  535.     {1 f& L7 z3 X8 `1 S$ C% r+ k
  536.       CloseHandle(mutex);, g4 H4 S/ y/ z, a
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    2 e- s6 N& m) f4 S/ Y. M
  538.       return TRUE;+ y2 T& N  u3 @: a" R
  539.     }- }  n: h- A/ R! D
  540.   }  
    % J4 f" }2 g; a% R+ W- _7 e
  541.   CloseHandle(mutex);
    3 W& f$ m, m: {

  542. . V* G2 M9 H) M9 F
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    0 I* l* w$ @: n) d; @. ~6 M
  544. . R' t9 x! M/ A; b6 t; g
  545.         AfxEnableControlContainer();7 J! J9 l2 b' ?/ k" R
  546. 9 z! {* w+ z, V& L& j2 J! G
  547.   bCanUpdate=FALSE;7 [: g1 I" \  Y. w- c
  548.   dwStartUpSteps=1;
    2 @+ A1 z7 h3 d
  549.   dwProgramState=AP_NOTHING;
    ' S3 X4 F6 m  e/ d: S: a9 B
  550. ) T0 ]$ r5 O( R+ P) V# Z2 a
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);3 F) \, u$ k$ H' n! n' d9 S+ s

  552. . ~) p% Z3 F; X2 h# r0 j7 b
  553.         // Standard initialization
    5 g2 A, f" c5 D  ~
  554.         // If you are not using these features and wish to reduce the size
    & n# t. Z8 f: R- x, M
  555.         //  of your final executable, you should remove from the following
    $ X0 I+ y/ I1 r: L. ^& n+ t7 p
  556.         //  the specific initialization routines you do not need.
    ' l: B) e; O, f" o

  557. 2 @0 v7 ~" W6 _: E1 Z
  558. #ifdef _AFXDLL
    $ E- J8 C3 T" G* t4 Z4 k& U
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL( ^0 X4 F* b! b
  560. #else# z# h- N9 a: b4 e- n7 ~8 `
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ P5 _' u9 ]6 A" `1 l% w/ V# k
  562. #endif) H5 D) K( d1 l! U0 i
  563. : y  H4 K: M" A. ]
  564.   dlg=new CRevAppDlg;
    " \' x* }5 @$ q" R
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    / Q' ^0 d: C* W! j6 X4 t8 ^! c2 [
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* B6 }6 s7 H: d/ z+ J, k9 ]
  567.   m_pMainWnd=dlg;4 v& X( f, s! s* _
  568. + r. A% j2 M7 }. p
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, i4 u) O; l) w; k9 f5 J( k
  570. 0 E, l, ^: O' P+ c' T* E
  571. //  GdiplusStartupInput gdiplusStartupInput;$ T( K  z/ a6 e* r: c% M2 e
  572. //  ULONG_PTR gdiplusToken;
    ( ^! K! t2 w$ q$ v
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    - T: E+ n" D) p1 N8 x; x+ z
  574. 0 H. {$ _; I6 O6 E
  575. //        CRevAppDlg dlg;
    ) U& y) k' B; R$ v3 ~# G: B) ?. Q! O
  576. //        int nResponse = dlg.DoModal();+ i! h2 a) k0 o' I; k
  577. //        if (nResponse == IDOK)
    2 u0 ~8 z0 C9 @! e6 |7 V8 O
  578. //        {
    8 S! g: g! E; p/ B) m& K  t
  579. //                // TODO: Place code here to handle when the dialog is
    * g2 {" z0 ~% K9 H# y2 {! g
  580. //                //  dismissed with OK4 T! ^3 I; H+ I0 _  l* h
  581. //        }$ u5 I8 |7 }5 w/ @# U4 a/ ]
  582. //        else if (nResponse == IDCANCEL)
    ! Y' l0 n: M( M" U' ?! q% D! q0 M+ u
  583. //        {
    6 X6 Z0 f( @. x8 H
  584. //                // TODO: Place code here to handle when the dialog is% I7 C3 O' ~( I* F% `( V# l
  585. //                //  dismissed with Cancel
    + D) b1 ?) i4 I) S; M$ K9 A
  586. //        }5 F! Q: V% d) }7 Q+ R! N9 o$ @

  587. 4 b) v" T! p* F! u
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ( O# s8 N) T+ Y' v( Q
  589.         //  application, rather than start the application's message pump.
    ' s) a) J* d1 E5 N" w3 f3 I
  590.         return TRUE;, n* x3 t  L1 M- A6 B7 {: Z
  591. }+ y. I4 O7 e' Q

  592. 8 Y4 Q1 z# r4 K: q, F
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    , t5 b& D+ F; g/ C3 v1 \$ d
  594. {
    $ u5 H* t5 x+ H  K6 w
  595.   int i;
    / _9 G2 B* v/ K' b& t
  596.   char *szRet;
    8 S  ]: ~) Z/ g5 X! A" X
  597. * _- L4 j6 B2 g$ M
  598.   if(pSource) { itoken=0; sztoken=pSource; }2 u$ g% ]" q* _& }" H
  599.   if(sztoken)
    + s! Z! O- V' P
  600.   {$ Q0 F2 m+ _( a
  601.     szRet=&sztoken[itoken];
    7 y+ A; L  |/ q6 I
  602.     while(sztoken[itoken])
    ' V! C5 i) v4 ?( F
  603.     {' {# J7 w4 V, w) L: y
  604.       for(i=0;i<(int)strlen(token);i++)/ V: ]( a  S2 Y* z  {
  605.       {2 f* _: j, z. `, O4 [
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    5 J2 L$ Q1 @+ @! q) k" N1 Z' X
  607.         {! ]' H9 N! q4 o/ y# f$ n) }
  608.           sztoken[itoken++]=0;
    2 z0 _0 i6 h- ?4 U- E
  609.           sztoken[itoken++]=0;% H  h9 d: u% Y! F2 X
  610.           return szRet;
    % t/ L4 d4 L; A5 A, I* l" ~+ T4 }
  611.         }) A# D  c% ]0 u' ~6 p, Q& _% {* C9 P
  612.       }
    - w9 g) e6 P: R0 I: _
  613.       itoken++;
    . b1 v& F# x! g9 |6 T$ ~4 e# j
  614.     }
    * i. \$ z2 }- t6 ~5 ^1 r$ h
  615.   }6 D7 |2 _7 a* U
  616.   return NULL;  }9 V" r: W) B# D0 m( j
  617. }/ ?0 ?' X- W$ j& n$ n" N7 f' b

  618. * V  E' _+ ?+ E8 S( {# L5 v7 L
  619. void ProcessProc(long Total,long Current)
    # C2 v2 l; F( Y) o6 D
  620. {
    ! b5 V9 h; f; u0 F/ ?4 j
  621.         MSG msg;
    % A# B1 ^5 w6 F2 B
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);* c# J6 Y% l7 \* N) X- n
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    . w& C1 ]2 S/ Q$ g3 i
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))( k- Q, v7 }5 r# {* p* o) i
  625.         {( W, O7 w5 \) u' V& m$ f
  626.                 if(!GetMessage(&msg,NULL,0,0))9 @* D1 y5 ~6 F6 c. i
  627.                 {
    " C  q0 x, D0 `
  628.                         return;
    ) {! O1 [- R4 T* N- |/ W+ E0 Z
  629.                 }: f. s  n9 w. Q- f, G
  630.                 TranslateMessage(&msg);( ?1 C( x9 w+ l1 p
  631.                 DispatchMessage(&msg);/ I1 K+ O. I! Z5 W! |' O8 W
  632.         }        4 O2 S4 F( |4 R4 I. n" }/ C8 w
  633. }1 c+ i5 Q6 l# r5 l+ }

  634. 3 K8 P& A0 S+ W$ H4 _/ c- n- V8 q' ~& h
  635. BOOL bFirstChar=TRUE;3 u0 }: e8 x  k) i  c7 ~

  636. . Y3 }- t4 [/ k: p
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    * r; q+ c& s9 F0 ~* }6 c
  638. {
    " k/ B& t: m, ]6 z0 S" Q  Q
  639.         // TODO: Add your specialized code here and/or call the base class! I' x0 r2 E: w9 k  t0 m  f  ?
  640.   switch(dwProgramState)7 y5 w- |+ _) R" O. S1 {8 ?' a0 C
  641.   {
    : \  d: J$ Y& Y/ W
  642.   case AP_NOTHING:
    1 l4 M$ G# I" e2 P* o& K9 N
  643.     switch(dwStartUpSteps)
    . ~" n5 M$ o1 L: u
  644.     {7 Q. y7 q# y9 M8 u; f) V
  645.     case 1:
    . Q3 T, g$ f/ j. g8 V
  646.       {: s4 J/ ]" ?) g; U0 S( @
  647.         int i;- d3 Q+ u0 L" M& X; v6 |  E' K! F  R, f  V
  648.         CDC *pCDC=dlg->GetDC();
    2 M" _& J1 R6 k
  649.         HDC hdcwnd=pCDC->m_hDC;5 y: W! L/ s  d2 Y, G
  650. //        Graphics graphics(hdcwnd);$ C3 {' q$ l0 W, L5 }
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");2 `+ t+ n" z9 M5 a" m! c
  652. //        INT iWidth=bitmap.GetWidth();! N/ i0 _/ n! x: ]8 w' N( F
  653. //        INT iHeight=bitmap.GetHeight();
      l9 M, [6 s' c1 d4 I/ R# @* r
  654. //        Color color,colorTemp;
    1 w  w) u- [7 ^' `* Q2 u. L
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    " @! ]! v5 g  v
  656. //        {
    # W2 @" a. E& J; ~& x
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    $ n) m8 `5 z$ y1 O# W
  658. //          {
    6 O. p: u( }* B* V! g' S
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ; j' a3 T" q( J% e: `) |) @
  660. //            colorTemp.SetValue(color.MakeARGB(
    5 F& k; ]9 w" `  Z- V9 f- N& m
  661. //              (BYTE)(255*iColumn/iWidth),# d- l2 K9 Q# D6 s7 O' |% u
  662. //              color.GetRed(),
    1 v+ v: U( D7 E4 s
  663. //              color.GetGreen(),
    6 h. b5 r( L* {- n1 p: v
  664. //              color.GetBlue()));# K- `  E3 ?  t  ]1 C  a1 w
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- x% {) I7 W/ S- y) ~9 R
  666. //          }9 i/ Z+ V. {; _3 f$ l
  667. //        }
    ) _2 u0 G5 |5 P% h+ o9 E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);6 l, g  f: o- H. u8 X
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 ^$ N& |, }% J# I% O' K
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");& n- K& Z( K0 j0 e9 O+ Z' E" z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / `% d5 _. A! U+ M+ d
  672.         for(i=0;i<240;i+=8)
    $ W! q. z& l! A/ x& L
  673.         {; U7 j5 z9 Q* N/ w, I! k& ~
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% F5 X8 W7 Q# z+ ~3 x
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);' ~  s" c& b  j
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # g" c) I" w  t, r1 T
  677.           Sleep(33);, M  u) G1 d: a1 N3 `
  678.         }
    3 m0 [8 w5 ^. C" C% T
  679.         Sleep(1000);, L2 x& a, k4 C$ p+ B, U
  680.         for(i=240;i>0;i-=8)
    5 W0 d$ o/ [, d
  681.         {
    3 r" X3 Q1 T  G7 l# g
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& V; c6 ^2 l9 W5 ^& T
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; K) b9 f( `% j. [% f; m
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 ~* v1 m0 Q6 d  y. v
  685.           Sleep(33);; F" b5 U- l/ A" T/ f7 a
  686.         }
    0 j; }1 q9 h0 c7 `" F
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    9 ?3 U, o3 G6 S+ K, X7 G
  688.         dlg->ReleaseDC(pCDC);
    . [' ]. F) K$ ~6 j' m. J, U/ j
  689.         DeleteDC(hdctar);' x- y4 p; l. N" o2 Y
  690.         DeleteDC(hdcsrc);$ U. k0 v1 V0 v- E5 i
  691.         DeleteDC(hdcorg);
      Q" x+ G9 H% R" ]; }+ K7 w- w
  692.       }
    9 c/ W8 U( w0 ]- G  w
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);5 d4 K/ y* C! Y1 q% i: V; ^' B
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");6 P; o, d# G0 a7 s- V1 Q$ j
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    - g7 o7 r  g% {/ H
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");5 ^: H3 |# e( d- ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! [: G% H4 V9 C/ y0 @* j7 o' V) F0 ~/ l9 s
  698.       if(!Dn.Connected())
    8 c5 H8 c3 \  y( G( `7 {
  699.       {: o9 u/ `8 b; J$ t
  700.         dwTotalFiles=1;
    6 N0 r& \6 i2 E1 y1 O
  701.         dwDownLoaded=0;
    ' K, q) ]- a# h9 Z9 f
  702.         bSilentStep=TRUE;
    7 R! }0 k6 G; g5 f. a5 Y
  703.         bCompressed=FALSE;, Y5 x$ p# Q3 v# ~$ m
  704.         strExtLocal.Empty();3 x0 I/ j0 P* O4 ^5 E+ Q3 A" J! y, L
  705.         strFullName="readme.txt";. F( M: L5 _; l
  706.         dwProgramState=AP_CONNECT;
    7 O: x5 x+ h$ _2 H% B
  707.       }$ ~" l. \3 Q# A" F$ [$ I
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    6 r1 Y4 L; B7 D( j% P# ?5 `
  709.       dwStartUpSteps=2;& t, b" t9 m' @# F/ o0 p7 ^
  710.       break;6 c* w- A% z. ~
  711.     case 2:: }! N, w" S8 N  ~. b
  712.       {
    - L: Z# b! y( W% |* Z: o
  713.         int iEOF;
    3 B/ r- n7 b1 k1 {
  714.         FILE *fp;
    . A6 D3 y; F" T3 |: S, S
  715.         char szString[512];
    - w, f1 ~! A* }# ?! p) O- s4 A) p
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    0 w# \  K# b6 ^; V
  717.         if(fp)
    * A! O2 Q1 Z1 w9 g
  718.         {
    % M; z) i; F7 d% E9 z
  719.           do5 H" T0 G+ B/ X
  720.           {
    % h" L. B" X' L6 U6 o* t; s& b
  721.             iEOF=fscanf(fp,"%s",szString);% d/ x& k  g* u0 J
  722.             if(strlen(szString))
    6 |3 i+ V4 H# l/ Z. O) _, Y1 P
  723.             {
    4 j5 T5 j) \0 R: A
  724.               if(bFirstChar)& ?9 e7 m9 n9 P/ e7 L
  725.               {# R- E% L/ E4 |3 H: \: |( `8 r
  726.                 bFirstChar=FALSE;  y* @# Q( X6 z& a
  727.                 bConnectIsBig5=FALSE;
    * S' N5 r# l6 c! [
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;2 i, b' z  [  I; _( R2 H: N+ d
  729.               }1 {$ i2 J" n. e
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));& {" T( b2 \. n* V7 b3 E' m0 h
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    3 g7 }0 b9 j  H- |9 ?: }
  732.               dlg->m_ListText.AddString(szString);
    & Y( [+ i. A9 ^- l- s! ^
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: i$ R& `* ^8 P
  734.               *szString=0;& m3 w( G; R8 z: Z9 N4 |+ C: J. O
  735.             }* a) u- u; W5 ]2 g+ U+ A
  736.           } while(iEOF!=EOF);
    / U0 U  J' N+ f% M4 x4 U0 w" M% f
  737.           fclose(fp);
    . e8 d" b( g- @9 R3 [
  738.           unlink(".\\DownLoad\\readme.txt");$ ?$ U9 N# ]! t$ M1 A; y4 Y/ h1 _" g
  739.           dwStartUpSteps=3;# h- n* ?3 R) c2 B* D
  740.         }7 M1 y) S2 D! d+ Y# h( Q
  741.       }. i# \# s$ R; V) k+ Y# e3 p6 W
  742.       break;
    ( J1 D$ l8 d5 Z
  743.     case 3:1 q" h7 u* _5 I7 o
  744.       if(!Dn.Connected())* P/ F* H& S1 a+ \& n
  745.       {( j$ e, W- d2 L% v
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);/ I7 G0 j- {1 v
  747.         dwTotalFiles=1;
    ) p% q# a, ?, D  g
  748.         dwDownLoaded=0;" S# j* [: m" I
  749.         bSilentStep=TRUE;
    / w0 r5 E9 T& H9 Z/ K: R2 W1 m
  750.         bCompressed=FALSE;
    " F  Q- S5 `& X8 G. o$ F" Q, W# N
  751.         strExtLocal.Empty();. k) Q- l+ {, J0 y  h
  752.         strFullName="checkversion.txt";- [3 m, k3 Z6 c. i- F. T, n
  753.         dwProgramState=AP_CONNECT;7 |; n5 f; K+ j% [5 ^
  754.       }* W: S  t  K: e
  755.       dwStartUpSteps=4;
    * H5 m, g6 d9 y7 X' ?
  756.       break;  Y* N4 |* [3 |# @2 ?' J1 }5 m
  757.     case 4:
    ! l; u. K) Q2 e& K; r6 V& q% M
  758.       {) W) \7 A1 O  s  S/ ^9 R# [5 M
  759.         FILE *fp;: i. ?3 N$ D  T, A
  760.         char szString1[128];
    8 K; c, x9 `+ p% M" p( @
  761.         char szString2[128];4 [7 I6 |+ o- N: r/ @6 P+ M
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , p& h+ u3 S) _% L/ y
  763.         if(fp)
    $ h2 K5 ~7 d* r6 n( b" C7 q, L
  764.         {
    2 m0 u* o2 L: @# V$ o& T5 Q0 k- c
  765.           fscanf(fp,"%s",szString1);* j. M  T+ c5 U/ S; }, I2 u
  766.           fclose(fp);
    7 ]8 \7 h- k7 P1 K* W
  767.           fCheckVersion=atof(szString1);( L9 a% O0 f5 D& M& f& A1 k
  768.           fp=fopen(".\\checkversion.dat","r");  k0 z" R5 I1 _% h! U: c( P! L7 K
  769.           if(fp)7 \6 [9 Z. \* c% `' T+ L
  770.           {6 k1 c3 o& E& |8 S( u. h
  771.             fscanf(fp,"%s",szString2);
    0 S1 b1 B0 ?) c: ^6 U4 @; N
  772.             fclose(fp);
    # V# e1 N  T/ g7 B; i7 g6 H- a
  773.             if(atof(szString1)!=atof(szString2))
    $ t$ ?' o& g# U  Y% i6 X
  774.             {# U0 o0 ^, w4 s0 x# {) ^1 |
  775.               if(!Dn.Connected())
    / Z5 k9 t! ]- `: }- I0 m! X! y
  776.               {+ o& F$ V9 z. o! G
  777.                 bFirstUpdate=TRUE;0 g0 o. s' @& p1 V3 o
  778.                 dwTotalFiles=1;
    / c+ ]: n# |8 S4 @+ S
  779.                 dwDownLoaded=0;
    ( V$ E, m. i0 b. G8 g/ n. d
  780.                 bSilentStep=FALSE;% T5 e4 W' n: L1 {, Y
  781.                 bCompressed=TRUE;! n" I+ Q4 ]' B" T. E
  782.                 strExtLocal=".\\DownLoad\";. T9 f3 A! L7 ]6 r7 `# v9 j8 Z
  783.                 strFullName="update.txt";; Q+ P8 o+ U  @/ E% V
  784.                 dwProgramState=AP_CONNECT;5 i' u2 I7 [' W4 m1 g# W2 _0 u
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: I) e5 H; f8 K9 w
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ' b% n  b9 @, W/ N6 A2 i4 ]' o
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");2 E7 w1 ?8 n6 y9 e* D6 V- t0 M
  788. ' f" D7 H5 K0 B2 V9 Z1 ~; u6 K& |
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 m# N3 e1 V& h* \
  790.                 unlink(".\\DownLoad\\checkversion.txt");: h0 k% }( D3 F
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)* z7 j7 t8 A+ }; R8 u% k0 X  K
  792.                 {- [1 Z( `; ~2 W+ f; V: P) u
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    7 q" e5 G2 b0 a3 f5 R+ M& l' w
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ n. Z8 y& v, U; v
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");" n) u5 ]( v# K# o; y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 F- x. Z4 L6 _( P% c
  797. 2 t" w2 ]/ e9 U4 G! v
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % H. ?) u0 a- t- J! A) p' q, l' \' N
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");+ h2 P0 h  E$ s! s! }' e* F
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    . a1 ^- Z0 v+ M+ A+ e8 {% v' W
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 s) |  L& ]' }" |
  802.                 }
    , @1 N: O8 |/ ^$ I0 t$ F0 ~
  803.                 dwStartUpSteps=5;
    & P1 p) |: \* U" s' M
  804.               }4 P; c9 r/ E; w" j7 Q+ X; }1 f
  805.             }
      J9 `1 A) M# l2 c0 J
  806.             else
    6 X9 y; a- q* ?# ^: w9 o. ?
  807.             {4 q# w0 n: p! }- A3 ^3 D. P& p
  808.               unlink(".\\DownLoad\\checkversion.txt");% g$ J. R, S; b! A% y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 Z# @/ h' m: b5 A2 X" c
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    3 ?7 d. b7 W+ W) M
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    1 f" Z4 D1 J2 b' O
  812. ' ^* Z4 M+ J, w9 v
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ ?$ B( a9 l' y2 V
  814.               dwStartUpSteps=99;( ?1 G8 i! d5 G( r9 {! y
  815.               bFinishUpdated=TRUE;
    8 {6 }* ?- v+ d/ c+ x' N
  816.               bCanUpdate=TRUE;$ a' g0 X' ]- f$ [8 T
  817.             }' }9 l4 h8 K& e& X) w9 ~" y
  818.           }
    0 J6 |1 S3 d5 Y
  819.           else
    7 ^# ]8 q1 h1 l4 O& k
  820.           {
    9 R! a  T* |, B- D. p
  821.             if(!Dn.Connected())4 X3 S( w: h/ X. I' k' z
  822.             {
    7 b9 C7 U  I/ J. v! V
  823.               bFirstUpdate=TRUE;* V3 `7 V* C, F$ X+ u
  824.               dwTotalFiles=1;! t/ e5 m: ?* }4 H/ ]
  825.               dwDownLoaded=0;
    . z, Q2 x, ?# b. \& p$ B. K4 j
  826.               bSilentStep=FALSE;
    * D2 ]0 L0 v0 T4 {
  827.               bCompressed=TRUE;4 k; G/ n$ M6 `6 u- E9 f
  828.               strExtLocal=".\\DownLoad\";
    - e# F& `& R/ l6 k$ i. [
  829.               strFullName="update.txt";
    ) u, ?, x- Q4 B- E9 J$ s$ Z+ l
  830.               dwProgramState=AP_CONNECT;9 O" V* k7 @$ A' R2 ^1 ]& l
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 F0 Q8 D3 f% d6 g# t, S8 Q1 K
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# i% u0 E, w* }) C
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");9 N7 D, j. g! b0 h2 O" c
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ d- `- b! [+ Z4 p9 H9 E( `7 z
  835.               unlink(".\\DownLoad\\checkversion.txt");
    2 y4 _6 P$ \, @" X7 x
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)9 C! b7 x6 v3 z; t1 ^, H8 I
  837.               {
    1 Y* g7 {+ n6 I8 B  }
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ) y$ `' c) v3 r1 A8 I5 \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");8 O- P" L/ b& b) k- u
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    0 u! g/ O% ~$ g9 h
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! d  a9 ^, w: L6 J- d
  842.                 . V7 I- R! \" W2 m6 |# x
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' i1 Q) e3 T9 {  h0 @) |" S- W
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- f$ f0 N# U* E! G
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    . H- m, h7 `, o  [. Q
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 P& g6 A3 [0 D
  847.               }
    , `8 q( o6 X' T9 K
  848.               dwStartUpSteps=5;1 y+ k/ _6 k* b/ j5 j7 k' q
  849.             }
    # X( x2 L) N5 r% K
  850.           }
    & J% [. @: \1 \) T# V
  851.         }" \- @$ K- J1 ^9 e. p
  852.         else
    % J! V+ y7 {$ H$ i0 t) \. N
  853.         {
    # M# |7 y7 @2 k% E
  854.           dwStartUpSteps=3;8 B7 u& S0 v9 H" m, m
  855.         }
    ! _  Y) d: T, d! b. i
  856.       }
    + \1 f% E0 f+ s
  857.       break;
    , d2 [2 S  ]  t+ `& y6 S7 G. n
  858.     case 5:
    9 I/ }/ d0 y# K8 y4 g
  859.       {
    1 ?# F# \: o1 S
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    9 [' S0 H* ~. Z, x6 F' i
  861.         {6 V& M# ]) u- t
  862.           int opt_overwrite=1;
    3 f& Z9 Y) L  W$ r, G
  863.           int opt_do_extract_withoutpath=0;
    7 ^3 @9 }' t; R, {+ n4 J- y/ b
  864.           unzFile uf=NULL;1 H# o/ Z" |: v

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

3 r- O, J: }' e8 y+ C
0 j8 k4 W9 N% q- |0 H" ^/ ]

評分

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