找回密碼
 立即注册

CSUpdate.exe源代码

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

- S$ }( l; L! m3 u; r. L4 s
  1. / RevApp.cpp : Defines the class behaviors for the application.3 ?7 _0 q% P& V: |& i  Q' ^
  2. //
    , N  d+ {' a) a9 e  g+ i/ J& ]
  3. ) Q+ Q3 x+ r" c7 w. ~
  4. #include "stdafx.h"
    ) n; U; X6 x; A# U* I+ r
  5.   g- s3 G; A( k# }& _
  6. //#define UNICODE) K, e4 c6 H3 Y, q/ Z
  7. //#include <gdiplus.h>
    / a1 X" r5 I2 G& U. K6 d
  8. //using namespace Gdiplus;# E3 m- W8 O4 F7 P4 g
  9. $ i" X& R" _5 Q" B& `0 D! V  e$ u
  10. #include "RevApp.h"' |) ~+ t+ L+ M# y
  11. #include "RevAppDlg.h"
    3 o' K! b3 B5 v$ F% W5 X+ q- t
  12. 1 n, O8 e: U& ?1 B; K( h7 j
  13. #pragma warning(disable:4786)' l% o2 a8 ?' w* m
  14. #include <map>1 H6 j& l9 G+ I+ e
  15. #include <list>
    # C2 E5 {+ B* b& ]) \- N4 J
  16. #include <direct.h>
    : F4 G# `2 O7 N& ~6 d. Y% }! o6 I

  17. 9 D! _: s& U( ^( {1 X, B3 y
  18. #ifdef _DEBUG3 S4 S+ `1 q+ s( m! {) Z: |
  19. #define new DEBUG_NEW
    ) a$ f. g9 {; l4 @9 c  H
  20. #undef THIS_FILE7 o" {" G- V$ \- D5 R8 g
  21. static char THIS_FILE[] = __FILE__;7 i# @9 o6 e: n) }$ I% Q
  22. #endif
    9 n4 u6 d; ^2 v7 i7 L' e7 x
  23. #include "SkinResDef.h"
    : k$ I2 D' \) H1 f' V) d5 a$ G
  24. #include "ChangeBG.h"
    ; l6 q) c$ p$ R; Y) e$ \
  25. #include "AFXINET.H"
      Q. x+ z" B! K/ G' w: d2 R: g  @7 y3 A5 ~

  26. 2 s+ b& c; h: H( x- ?
  27. #define TRADITIONAL_CHINESE 0) r+ t/ ]9 T$ N& R
  28. #define SIMPLIFY_CHINESE 1
    4 D2 i8 c5 f. A( Y7 D
  29. #define ENGLISH 26 b8 G3 j# |: \" _9 J3 J! A
  30. int m_iLanguage = ENGLISH;
    1 W% N& B: g) E
  31. /////////////////////////////////////////////////////////////////////////////
    * j$ F& L5 R: K! C8 \3 s+ }
  32. // CRevAppApp
    $ b  B  v* Z& w. f5 q4 g7 n$ u( ?

  33. 0 g  T# `) a& d
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    : k" s& T. c- i0 P
  35.         //{{AFX_MSG_MAP(CRevAppApp)) c: \. q) F! H4 u
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
      t* ~$ K! t3 r1 u6 d" V
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 _  x2 L3 b8 O& ^5 r
  38.         //}}AFX_MSG
    0 g. y& x' b0 w$ h7 o
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    $ J$ J, G9 i% A  F. \; m
  40. END_MESSAGE_MAP()
    ) V( p- [2 U. R7 I8 o* x6 g

  41. - q0 D' k5 {- }* z( T1 p1 O
  42. /////////////////////////////////////////////////////////////////////////////0 \7 x5 o9 E; v. @+ [- x
  43. // CRevAppApp construction& c5 s: C" ~, \! ~/ a
  44. ; A9 E* y; g; p
  45. CRevAppApp::CRevAppApp()
    0 R4 Z3 o+ v" p
  46. {
    + ^( r1 S5 U4 ?
  47.         // TODO: add construction code here,5 `; O/ P3 |$ [* t! y
  48.         // Place all significant initialization in InitInstance
    - w' Q! c. ?( M1 d' [) c
  49.   bDisplayIsBig5=FALSE;
    & u* v5 r9 K0 w6 I
  50.   bRestartUpdater=FALSE;2 s$ M3 K  n3 G: |8 d, R$ ^, B
  51.   bFinishUpdated=FALSE;
    3 D# K' Y4 q' \+ s. S* q* z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    : H) W1 H% ~; M& d$ `7 e
  53.   InitChangeDataBig52GBKS();
    7 Y3 D# o6 _& b& V  Y3 S" R+ w
  54.   InitChangeDataGBKS2Big5();5 L' ]( t3 x/ i% g+ e, |
  55.         //& Z0 ]* E/ `& F6 }4 O, v. [
  56.         bClickRunExe = FALSE;! c  y+ i- w' ^! _" b0 S1 O  P
  57.         //
    0 E$ S; }4 g2 n! L3 Q
  58. }
    $ \* w% C* o' F7 H* w
  59. 9 b$ E! U! [: a: H- m! C! m- p0 H
  60. CRevAppApp::~CRevAppApp()
    8 Y6 ?" a+ }, W4 [8 m; I
  61. {
    ! r+ o+ ~, n( P5 l0 |! W( X9 B
  62.         // TODO: add construction code here," I- ^3 U% H5 p+ W
  63.         // Place all significant initialization in InitInstance
    6 j4 B) V) J* p8 c% e
  64.   EndChangeData();
    - E9 `( e; [: b" S
  65. }
    % s& S, O0 a& D3 n/ N. \' ~
  66. $ ^$ W- G+ p  D5 ]
  67. /////////////////////////////////////////////////////////////////////////////% E& ^, T, [: {
  68. // The one and only CRevAppApp object
    ) E; F2 u8 [! a! C
  69. 2 b% u5 @4 [$ g' {6 y
  70. CRevAppApp theApp;
    # j. l  b9 A$ L- l3 E& b4 {
  71. 2 I5 j6 L4 \3 D5 _. F
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    - {  ?. a# U4 J
  73. {& A! ~0 i  y& y2 s1 y7 f0 G6 v
  74.   int iEOF=0;5 S# `2 W+ y. B4 c* M
  75.   char szTempName[MAX_PATH];7 }8 V( P% K- t- ^4 K" D( E# o
  76.   *szFileName=0;6 G/ Q6 s( i& S% l% G, z
  77.   iEOF=fscanf(fp,"%s",szTempName);( F& i/ t4 j, X- w9 R
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    0 Z, R2 Q+ J  T2 l
  79.   {# ~4 r+ l4 {. w: {' a1 C' \) W$ w% n
  80.     strcpy(szFileName,&szTempName[1]);) Q! p+ |3 v0 X" w( r! r( a: \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ; T1 t! `7 t* u  ?( R
  82.     {5 ^% T7 s* y% y+ Y3 G
  83.       iEOF=fscanf(fp,"%s",szTempName);& l& P, C& A0 i7 {
  84.       strcat(szFileName," ");
    , c. x: i1 `$ }( g* a6 l+ f3 ~# V
  85.       strcat(szFileName,szTempName);' h2 J1 `" \! e, b$ z- k
  86.     }
      K5 q3 H6 K* U, ^+ m; L8 \; l
  87.     if(strlen(szFileName)>=1)
    4 h! j$ t# o' `5 w0 P/ N* N/ K3 _8 g
  88.     {6 R  S. ], d; Q+ D7 a9 C7 {
  89.       szFileName[strlen(szFileName)-1]=0;& x* H2 o% t2 g0 l& H& i
  90.     }( K3 \8 ^+ C% r: }2 \  i2 ?+ N
  91.   }7 f0 |" j5 y& m; A+ h+ c& i% y
  92.   return szFileName;! w$ Y; k, \6 N/ ~- Y
  93. }
    - E4 w0 N% j( o
  94. 7 P+ e2 n. G% a6 z" n' d" Z; ~
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    % m  r6 |* K7 Y2 i
  96. {- ?, O9 C& ^/ O7 R9 t4 ~
  97.   FILE *fp;1 [2 G$ l6 E' J; b6 m! A
  98.   char *key=NULL;
    ( w9 n( b' \9 [, z; v2 W
  99.   char version[MAX_PATH];
    * U6 P* K5 _2 U+ d% O9 e7 i/ R# [* L
  100.   LPUPDATEFILE file,olds;
    - y2 H) B+ d9 b) N4 L* {& k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 Q( f/ ]  M3 T$ W) x

  102. 0 Y4 Y* Z; w- @8 r/ D
  103.   UpdateList.clear();; A$ D( x+ F1 J" a6 E
  104.   UpdateFile.clear();( m$ N* s8 a( I  D
  105.   if(GetFileAttributes(filename)==-1) return false;
    - C, N5 {2 G* E  }7 X
  106.   if(!(fp=fopen(filename,"r"))) return false;+ ^3 R! f  H  V  d
  107.   fscanf(fp,"%s",version);
    ; C8 `! z% a- M& a7 G7 G7 `
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 [8 ]$ E% i6 Z) c8 C; ~
  109.   while(fscanf(fp,"%s",version)!=EOF), O0 W- I  _2 D& U& P
  110.   {7 D) @3 Z( ?0 n8 T5 l
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 U; x1 y, V( I+ @! ]' m: T9 y
  112.     fscanf(fp,"%s",file->path);
    . D( v: b, M5 z/ b
  113.     ReadFileNames(fp,file->file);1 A  p0 W8 V8 S  c" K: L" Y
  114.     strcpy(file->full,".");- _( h7 u& R' K) h7 D1 q$ ~
  115.     strcat(file->full,file->path);- G; B) A( o# [
  116.     strcat(file->full,file->file);
    + m# u$ _; Z6 W/ ^
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    & g  L) {, C& j& A' q' b
  118.     {
    ) z0 z4 R$ N1 b' W. M3 w# A
  119.       file->vers=(float)atof(version);
    * ?8 q- M/ J* Y+ O5 g( R& n3 m
  120.       UpdateList.push_back(file->full);5 n; j( d% e5 c( p( T/ b" d
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));# \% h" I/ e, {) O9 v
  122.     }9 Y6 R& K) Q5 F1 Y
  123.     else4 Z% K* n  X  `& t( D
  124.     {
    % K! ?7 x; B9 z$ T
  125.       olds=(*p).second;7 l2 W9 K5 S, R: b' I8 c4 M/ `
  126.       if(olds->vers<(float)atof(version))6 P* O" @' B1 ~- q5 }1 l7 L
  127.       {' ?0 K# D' d9 }5 R; p- Q; y
  128.         olds->vers=(float)atof(version);& c$ v7 e* M+ Q3 J1 g2 g
  129.       }& o4 Q* U' [# C4 D8 T. I. D" p& q
  130.       free(file);  b4 x6 Q: V: Q3 J( A4 ]% L* O* ?
  131.     }
    ; l% _2 ^2 R2 l1 r7 M
  132.   }
    % E2 R. d$ ~: L9 p* |
  133.   fclose(fp);1 f. N: w4 d; R) X' f2 l
  134.   return true;
    7 v: w7 p& G3 ?8 W' L
  135. }
    ) J' l+ O+ l$ z3 q# ^/ r, ]5 J
  136. % j( Y0 b8 m$ L0 v) w7 k
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)1 c; j- a8 q: C# J: ~9 k  S+ @1 s
  138. {
    0 {$ J8 S' t0 U% R( s2 P
  139.   TCHAR  szFull[MAX_PATH];
    ; u+ S# D8 g0 t( O
  140.   TCHAR *token,*inter;& [5 w! g  ?" `2 Y/ l
  141.   *szPath=0;% G5 \& {! L6 r1 {- B
  142.   strcpy(szFull,szFullPath);
    * D+ m$ d( D! u7 g% E) g
  143.   token=strtok(szFull,"\\/");
    , y; p8 H1 g' J9 m- B8 K/ s; d
  144.   inter=token;  r! |' n/ ?2 y8 {4 K& X) J( h  R
  145.   while(token=strtok(NULL,"\\/"))
    ( P' C! R+ Z4 F8 F3 O
  146.   {
    8 l3 P1 ]8 |! S/ n- ?' _3 S% ~
  147.     strcat(szPath,inter);
      e$ n% o2 B: a
  148.     strcat(szPath,"\");9 x8 X' {$ I; M* J7 Q0 P
  149.     inter=token;
    & t& ]% K: q% L" j
  150.   }
    : f- l9 g1 N9 k. p% P9 J& g
  151.   return strlen(szPath);- X7 R/ b( Z7 r5 D# H
  152. }6 \6 M) ^# G1 n2 p  E' I0 u  B0 a& {8 G
  153. 2 X) e% y4 f  h
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' z5 K8 N9 x5 n" B, L2 Z
  155. {
    2 _) Y. g4 ?; R8 E: h
  156.   DWORD attrib=GetFileAttributes(Target);
    ! z3 z* E1 j) _& {7 Y
  157.   if(attrib!=-1)
      ~4 w! E( T2 i
  158.   {8 c/ A& w/ _/ R( ~6 @
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    8 W; D: _2 V" K) a1 l! V3 E& K
  160.     {: u' ~) k7 e& W8 A( S
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    7 g# M. D9 j; I% A
  162.       SetFileAttributes(Target,attrib);: A, N! b' P+ X7 V5 w% m
  163.     }
    ) U7 t" }  V$ L0 K# R
  164.   }
    + S6 K$ ~8 a, U; W  L- f6 R
  165.   CopyFile(Source,Target,Erase);$ r! F3 O6 u& M. r, [1 x, j
  166. }" Q( i' c& D: C) W

  167. 0 |' S' `% w4 [  Q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! p+ t" _6 O, N7 ^: G+ g
  169. {
    ! C/ e$ f1 P' X& K, x
  170.      FILE *fp;
    * m7 c3 y" j5 K6 H" N- A
  171.      char  szBuffer[8192];
    ; i2 _  W, X  V& y, F: Z2 e
  172.   va_list  argptr;
    & b9 W) y, \5 L& y

  173. ) ~) j  t9 v' x# j! |
  174.         va_start(argptr,message);
    ; X; q; J+ v5 |6 `
  175.         vsprintf(szBuffer,message,argptr);7 b( w& t& }! l8 H1 }! _2 G# U$ }
  176.         va_end(argptr);  x: B( {( ~0 H1 n
  177.   fp=fopen(FileName,"a");
      ]& Z0 R: h8 w7 w+ A7 i$ U
  178.   if(fp). _1 O& N8 H, g2 N
  179.   {9 |/ B. G# V& W2 a6 J
  180.     fprintf(fp,szBuffer);
    . w5 j# ?1 }! _4 W2 O
  181.     fclose(fp);
    . O, `+ H& z/ A% }
  182.           _flushall();* E& T3 ^5 P8 G( V/ t6 D
  183.   }3 I. V) a# F+ X0 _- ?# B- c  q5 D
  184. }4 U# f+ R3 Y7 C+ D

  185. & p: D; W* V; j( ]
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ( w6 q6 i, c+ t5 e. ?
  187. {
    * P4 i9 Q' e# G. \$ K6 ^
  188.      FILE *fp;
    4 n4 |& O) `6 E3 e$ q9 P7 Q
  189.     DWORD  attrib;
    : A; M, |- t$ v, ]
  190.   attrib=GetFileAttributes(FileName);8 M0 i: u8 f' a) Z& ~
  191.   if(attrib!=-1)0 x+ c* Z0 w) Z$ x7 a! g
  192.   {
    7 E" V/ u. g2 _1 |
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);( ]( Y- Q5 Z6 b( O! Y9 x" z5 K2 W
  194.     if(!SetFileAttributes(FileName,attrib))
    % q. q6 \& H2 n) p- {
  195.     {
    . K6 p1 _1 g8 _: e6 V, W! O
  196.       return FALSE;
    : g1 n7 e$ ~. d: Y# v% c( `
  197.     }. G. F  C6 o' x6 e- E9 e; L
  198.   }
    ; ^; i! @1 y6 K
  199.   fp=fopen(FileName,"wb");
    " u4 _) Y. D! K8 a" |0 A7 d
  200.   if(fp)
    % k7 w% ]4 a5 i  D1 E. R4 o
  201.   {( b8 O: D5 z4 D; g+ g* w! W
  202.     fclose(fp);
    # d$ ?) x6 O& \' |) h* h
  203.   }
    0 k) h8 z. C4 z5 C
  204.   return TRUE;
    / F/ d6 I+ q8 L% D. E# S& |
  205. }
    3 i, H# i2 G& Z/ M* |8 D; }- O0 P5 H
  206.   Q; X* E4 O& X& r6 K* t! ]
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 T2 K/ B; ^5 P4 w; |8 {* h
  208. {1 Y$ J& E! _5 U) D1 F, E/ ^. E! h* h
  209.   char filename[MAX_PATH];7 s4 y$ e2 K9 `& A+ `
  210.   LPUPDATEFILE file,olds;
    7 U3 u* [" h- F& n- L
  211.   std::map<int,CString>::iterator i;9 l# u  ?3 Q8 x
  212.   std::map<CString,LPUPDATEFILE>::iterator p;/ W  m+ ]0 D+ S
  213.   std::list<CString>::iterator l;
    3 V7 ?3 q1 k2 g/ j  E* ?5 \, H

  214. ' Z" C" ]" ^3 |1 k& j7 Z, F4 c4 x
  215.   if(bFirstUpdate)
    / N3 R+ N; E- i
  216.   {* r, p7 ], @, H4 c% |- v
  217.     dwCurrFile=0;
    ' y* r- ]' r  o5 b7 T6 A+ P
  218.     bFirstUpdate=FALSE;
    7 S$ L6 a& t% Q, `5 D7 P
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( c, ?& f, k8 h
  220.     {
    % |" m1 ^1 A$ ^1 B
  221.       dwTotalFiles=UpdateLocal.size();: p8 `: @; U' P; l3 z/ P
  222.       dwDownLoaded=0;8 V0 J* m2 b8 R' A7 n7 L+ j5 x
  223.       bSilentStep=FALSE;
    * x% i9 ~9 y& \; h
  224.       bCompressed=TRUE;/ Z/ Y3 |2 D6 n( ~; f7 X
  225.       strExtLocal.Empty();
    " h- X+ e+ p9 L! r
  226.       strFullName=(*i).second;
    8 }" r7 h1 `* q
  227.       dwProgramState=AP_CONNECT;
    . A  O9 P# l; t1 K
  228.       return TRUE;
    9 q. E4 a9 r  a9 [
  229.     }8 e- p5 Q- O" y. D6 ^7 O% v/ G
  230.   }# k) I- O$ E9 x2 G9 R! r
  231.   else if(bRestartUpdater==FALSE)" K: F1 ]  K4 s) t- i. ~( ?/ W7 w
  232.   {
    & K" I4 i# X8 r
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    + P9 E5 O" d) A+ @' L$ l% w. p
  234.     {9 U% h. B5 o0 z
  235.       file=(*p).second;5 ^4 M$ F, Y7 [( H* B0 }2 N
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())! A( c: W/ O& X& k6 \' x, I' s, F
  237.       {
    2 K- w) [4 D8 _. |& ^
  238.         olds=(*p).second;# \! p7 b! K( ]& R  @- G  D
  239.         olds->vers=file->vers;( j% F# g, y- c1 j! F2 A  C- f
  240.       }/ f. q, N& }# a3 O. t% {
  241.       else; D. U+ ^- v. S& ]! L" Y
  242.       {* V, A/ ~( d/ S$ C
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 U- l" o5 `0 y: t* O# X
  244.         memcpy(olds,file,sizeof(UPDATEFILE));& @, K5 I% |. @1 Z7 c2 X1 ]! F$ l
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 s- N& |; o7 J
  246.       }
    . ^. i" b3 t. Z! j. J0 X5 ]6 A  o
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( I! j: q# Q: q7 P
  248.       sprintf(filename,"(%s)",file->file);1 r: X0 U: n3 t+ |5 ^. C
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* X2 s; ?4 r5 J
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ) L" D; Q0 ^6 ~( _7 n" T
  251.     }5 W3 z* T2 p5 N5 b/ W
  252.     dwCurrFile++;; W& X5 _4 c6 F9 Y- G" p- B- K. D
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 R2 Y) \$ m# u4 Y7 n; p4 y, i3 o
  254.     {! N* O7 ]5 K1 M$ d/ J" A' B9 d
  255.       bSilentStep=FALSE;) D7 k- ~& R0 x5 F1 |2 r
  256.       bCompressed=TRUE;6 t+ w: }' O' d
  257.       strExtLocal.Empty();7 M. @3 s- W7 @( h
  258.       strFullName=(*i).second;
    - f. s% c& q) P2 G8 y; O
  259.       dwProgramState=AP_CONNECT;
    $ j2 b: {+ K0 q, W- v, T: f
  260.       return TRUE;
    $ @- s% l  D8 F% [# f, a! g% s
  261.     }
    # S  I7 h9 y) W6 _. r1 O
  262.     if(!bRestartUpdater)) D* r# J+ u- Q6 z8 o! j
  263.     {7 P7 c2 |/ ?  x: b1 ~
  264.       int iCurrSize,iFileSize;
    ' E) q6 l, }, r% V+ h& l' E
  265.       iCurrSize=0;) Z5 Z2 T( Q$ Z5 K( U& x
  266.       iFileSize=UpdateList2.size();' \; F( ?9 x8 m% p; |
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");+ [0 g+ D! w2 C% g" s& ?+ y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");6 l1 K/ w' M$ ]& m) p
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    2 g# X6 q! [. u. u7 j
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" v2 P* `. w5 E  y# c
  271.       Fclearf(".\\update.dat");' `. ?+ G2 F6 h7 P
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    3 k7 |5 z+ C- a2 [, K4 ~0 q9 }
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)5 Z$ ]. o9 J5 Y  H. R9 s1 W
  274.       {
    9 c$ B! Y  q: ^. I  N
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    $ O' p9 c/ V( z- C" D3 B; u
  276.         {
    ; @3 ]5 X: w: n
  277.           file=(*p).second;' [; ^4 C  x; U& \2 G
  278.           sprintf(filename,"(%s)",file->file);% x% a& ^: Q! Z  I2 b
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ s; ?# i+ g8 q1 Z) ?0 Y* P0 B
  280.           iCurrSize++;
    % y0 f) i2 D" h/ z$ h$ h
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));4 q4 b  W# H" g1 l6 x
  282.         }) g0 @/ p5 L5 G
  283.       }
    4 y. L4 o0 s% L& k
  284.       unlink(".\\update.txt");
    ; j. D2 r* ], a7 q9 l4 W
  285.       unlink(".\\update.tmp");9 a* ~; b$ I  }+ D( t) I
  286.       Fclearf(".\\checkversion.dat");: u9 d4 A4 Y% F6 O* ^
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);* d. M! Z% P; n. |
  288.       if(UpdateLocal.size())
    2 t! a9 r! ]8 o
  289.       {
    7 t! s7 X& r" T( r' `' c: U% _: z, h
  290.         UpdateLocal.clear();
    , d* K" ~0 [4 Q& p
  291.       }
    , u# e. K1 T" J+ V. E
  292.       if(UpdateFile3.size())
    4 x9 f( a$ a# N& c
  293.       {
    * L% T' t& ]1 A# ^6 t  ^5 N, J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ m6 I9 \& P3 ~) [! ?/ ^; T
  295.         {! _* H7 N6 f' `! d7 @- q: h  _
  296.           file=(*p).second;
    ; F, Q- `" o- X
  297.           free(file);/ U" y8 h6 C2 E$ R6 M4 b
  298.         }
    : v1 t8 l5 J2 z2 `2 c& K
  299.         UpdateFile3.clear();! @' g9 {3 l7 h! d1 y6 D& U
  300.         UpdateList3.clear();
    ( p) J$ J4 v, L, J, @! s; h( W
  301.       }
    # m8 P; K' ]% x
  302.       if(UpdateFile2.size())4 ]' ^  ~3 \: g8 }
  303.       {, v9 _2 B- v+ Q% Y
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( y3 @& M" H" m
  305.         {
    ) g7 K( X' C0 i  ]; S& J& n
  306.           file=(*p).second;2 J/ ~0 Z3 J* x6 E/ }
  307.           free(file);
    ! l, B5 n6 O! T
  308.         }
    , Q9 N' P3 Y7 r4 p! ]- K5 ?9 K
  309.         UpdateFile2.clear();' {* J3 B3 @& @
  310.         UpdateList2.clear();
    9 L3 k9 V1 }" Y0 v
  311.       }  P. G7 k' F8 S) e# \
  312.       if(UpdateFile1.size()), M! @  X9 z/ B7 x7 r- Z3 K. ]. @
  313.       {8 b( v- }- s3 e9 a1 ?, h- i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ K7 m. L- f  N" d' Y" O
  315.         {: W; A5 x# h2 Z! j- e" w
  316.           file=(*p).second;
    3 m5 l) i; A1 I
  317.           free(file);
    + i! ~. _. M$ F$ a  }
  318.         }
    & F0 K- ^  J1 ^' z$ k& i
  319.         UpdateFile1.clear();
    8 u' x" C8 a7 u; l, G
  320.         UpdateList1.clear();
    % J) b6 b7 F% O2 E, \
  321.       }; P# l, W# q  c5 h
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));9 K7 x5 ~- I6 o
  323.     }
    8 u9 R. [) k$ C, e: s$ A+ @- @/ L( w
  324.   }
    ; |: d2 n' N) _  c0 F4 q
  325.   return FALSE;
    & _+ `1 z/ ^* @) U% D
  326. }
    1 X0 Z$ L/ n2 \
  327. . r8 \, I4 L4 i/ w& v" R. _2 p* |
  328. void CRevAppApp::ClearAll(void)6 W; F* b4 k, ^' @
  329. {
    & ]/ @7 H1 {, z7 H
  330.   LPUPDATEFILE file;
    6 g( W( M8 w, ^6 @2 h" R3 B
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    # m/ [/ d& ?2 L/ I- Q) {

  332. $ j6 o1 Q+ X* C2 s& s
  333.   if(UpdateLocal.size())
    - @$ z. }8 Q* G6 J" O6 q" u
  334.   {
    : l2 T2 E* }' V2 X  ]
  335.     UpdateLocal.clear();: k+ Y: @1 g, X& N* _8 S
  336.   }
    " X& u8 t+ X. ]
  337.   if(UpdateFile3.size())
    , r5 P* a: n( w: U  @. U* ~/ M
  338.   {3 _7 _% l9 T5 o, L
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 k7 p0 f( r  X1 p) k5 {% x
  340.     {. ]- h9 b* h' F
  341.       file=(*p).second;
    - J' ^% Y+ E3 W
  342.       free(file);* q. ^8 V7 J& G2 Q4 ]6 w0 R
  343.     }- h  s" p- M' s: n/ Z
  344.     UpdateFile3.clear();
    : o: ?; e: \4 h2 z0 i3 S
  345.     UpdateList3.clear();
    ' a# ^' k4 [* [( U! J7 {
  346.   }
    2 A$ `1 S' F* P, ], G
  347.   if(UpdateFile2.size())
    ! X) v2 S$ D$ W5 `9 J
  348.   {
    ; n+ A: P' I9 D* x8 e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), i* f: `# i- Q
  350.     {5 f' C  R2 l( w8 g8 o0 Q
  351.       file=(*p).second;* ^0 ?& w% X/ K) R/ x1 E, R5 u
  352.       free(file);
    + x5 P0 d. T  V+ q( G2 r) c
  353.     }
      {1 ?  Z0 D: u9 J' d& ~' d
  354.     UpdateFile2.clear();2 j1 h  V% @6 w8 h
  355.     UpdateList2.clear();
    2 ]; }2 U$ L, y
  356.   }7 [+ I/ ]% |8 ?+ y6 [
  357.   if(UpdateFile1.size())
    & u6 j( m, J. y6 R  y+ q/ d
  358.   {
    9 P  z7 n! o% b6 H# L  Q1 z( z) s
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : |! W# |+ @; s2 `
  360.     {
    ) C" g! [" m! v+ ]- E( y1 ^
  361.       file=(*p).second;! Y0 O) q% [% g9 y, e! Q+ z! p
  362.       free(file);" F! _* N2 x: K+ Y
  363.     }! W8 m* _" V" P* B+ l5 x$ a: q
  364.     UpdateFile1.clear();
    5 x5 a: |- T+ M$ [! l5 n8 g
  365.     UpdateList1.clear();
    0 d4 C6 w8 S+ V) c) z8 R/ V: K
  366.   }0 Z( J) n* T/ x
  367. }  4 [. l1 Z* X6 b
  368.   9 o# I' S% m) c7 f2 {; O, S: }
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    $ ~8 d1 B3 L7 F5 Y! k+ ~& ^- d+ ]
  370. {
    3 i4 C: h! V( @' r4 [
  371.   int c;
    + }+ q8 x- x  T% R4 i' l' A9 a
  372.   LPUPDATEFILE file1,file2;
    . e5 v+ N+ `/ p: L4 c
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 j  I  T( b7 @* N& k: P
  374.   std::list<CString>::iterator l;
    ( Q" b# `3 n" J. p
  375. 6 [# ], J8 K4 e7 k9 r
  376.   UpdateLocal.clear();" }) \4 d/ @( l. e4 Z# M# E* b
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    8 q2 M8 i% N. ^% T7 I
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    7 r: N$ d0 B+ I$ o  {$ i
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    % ^; r* l9 v2 V" m" \  I- n
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);* G4 d3 Z# [- e5 h) P
  381.   if(UpdateFile3.size())2 z+ w- |, o. j  ^9 ]2 J
  382.   {2 E. t+ |) C6 e5 q. G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - g7 h! g, W: Y/ _# s' d' o; e
  384.     {. P" W  U# O+ D6 F/ _( k. n) v
  385.       file2=(LPUPDATEFILE)(*i).second;
    % Z/ I0 v1 K2 J) P
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 }8 Q! q& }1 {3 q! }* b8 o
  387.       {
    # w! [. u. v$ x8 {+ O
  388.         file1=(LPUPDATEFILE)(*p).second;
    ; G/ m* w( v# A% z* M- e; V
  389.         file1->vers=file2->vers;
    ( o' c* }! V5 J# h* E
  390.       }
    * K' {5 ~, ~' h' d
  391.       else
    , K" h% D/ C/ K5 P
  392.       {, y: R7 K3 J8 [8 P9 j
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 _# L$ f* e" }! j, V& M2 u' v6 g
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));) _" L6 }2 @% J+ X  D. Q
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ }) T; g; ]! q' t. W2 E& B1 S" x" T
  396.       }2 [# h# d9 v0 @& u
  397.     }
    , {9 v$ |) Q% _
  398.   }
    / w* r0 [3 e  Q1 o9 E
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! p) ]9 g! l: w" @* q6 \- g
  400.   {
    / Q+ B+ u) f# ^! \$ W: |
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())& J6 o+ A4 F7 ]. Z# G! |' Q3 x" ]
  402.     {
    8 P3 r. ~; T# a0 E2 \/ _' r. G4 n
  403.       file2=(LPUPDATEFILE)(*i).second;$ q# S: t! n- q  @
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( S2 j3 b. p; |- Y& S4 m& Y/ z1 E
  405.       {
    ( z; h# x: c# d! k6 Y9 L2 U# r
  406.         file1=(LPUPDATEFILE)(*p).second;
    / u8 {) t; K8 ^, ]
  407.         if(file1->vers!=file2->vers)4 A4 e; U" B6 b/ y. l
  408.         {" Z/ {2 F/ D. a9 [4 o* p
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. f7 b1 H; W2 W( L6 {, h0 G
  410.           c++;
    ( f" v9 Q4 A0 }' H) w2 y
  411.         }
    6 T( n9 G& w& |, C: k
  412.       }
    2 ^& c: F- V# f: T. f$ J
  413.       else- j, A' ~* c; E
  414.       {* V. C9 w$ ?& E/ T2 n- K
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ e0 R9 k9 A/ L" }
  416.         c++;
    ) q9 u) x9 i1 C7 r- T
  417.       }
    ( S2 p4 T& a6 h. A2 N" w; q% P: x
  418.     }+ o) r8 D* Y3 [; A& b( _0 a7 b. H
  419.   }
    2 _9 p6 v" d5 \$ i! ~# W- s' y2 y
  420.   unlink(".\\DownLoad\\update.txt");
      g( \) }$ s2 S) w0 a' w
  421.   if(UpdateLocal.size()) return TRUE;, d3 T0 a+ y2 T9 n( C! B7 c
  422.   else                   return FALSE;
    8 [/ P( w( S) |+ @2 g
  423. }( T- Q& `! j" n% u; c

  424. & C- ]7 V# e) u3 g3 C- F2 f. y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    5 w' B" a6 N+ ]8 E0 y2 M% M
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    8 N1 v  x* Z$ p( B  n

  427. & ?' m+ b) i: v& @% b0 ?( _% h

  428. 5 I# w9 Z) {+ M3 T* T
  429. - K/ q% L) b0 t
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)2 ^; h0 c# g: _
  431. {
    * k4 f4 z* Y, v8 ^! G1 W2 l
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;' ~4 \& Y* |# r+ ]6 u
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); \# w( t' a; i1 F
  434.   {: M. b+ i/ `( U- g. n' l! T& y
  435.     char szLanguage[50];- P5 j) }( `& n* M* I9 x! z% Z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 O! |: f- U+ b" o' {/ O( B
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! ]- b/ X% A* E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ G# ~# ^; l: Z4 U: p
  439.     else                                   m_iLanguage=ENGLISH;
    # y" `/ [# y, y6 ]$ \( K. U
  440.     char szRegister[100];2 t" H, `/ [8 t6 _1 U- Q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  {" h2 r+ G; _2 ^7 @, {' n4 t: o
  442.     strRegsName=szRegister;2 [% z/ n4 r) v3 I& E3 }  g
  443.     char szPatchURL[100];& o# R0 r( `5 c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 A% n" f, y- m
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 x# c! g) b* R9 _
  446.   }
    7 O. {7 }# Y  p# [
  447.   else
    ' c. i' {5 e- e4 [; {
  448.   {
    * R4 }' J! b) Y- C! c% ]$ n  g
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);' T& \4 g. Y  V* Y6 ?4 L4 f5 t5 h; ^
  450.     strRegsName=DEFAULT_REG_URL;
    ! t3 `5 U; t. |
  451.   }
    / K8 ]/ w0 Q% m, m* a7 A0 L/ [
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    / e& X& @  A1 r( w
  453.   {3 n9 i& t  |* g: g+ p
  454.     char szIP[50];5 q7 ^0 D0 g+ C4 n8 s$ l
  455.     char szDIR[300];8 |0 A$ J* m3 Y. r; b6 n: }* u
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ) E  i, K6 V5 E; s- r
  457.     {
    ) j* {2 l3 ]& u  U, R
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & F% w2 E! b$ P
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# N/ x  d- B2 c( \' O3 z% ?9 r
  460.       strHostName=szIP;
    ! k8 b2 a5 B+ v' ^# M
  461.       strHostPath.Format("/%s",szDIR);
    % G6 w) M' H3 q, h, R
  462.     }! Z* W5 c: u" @* b8 M+ G6 G, l
  463.     else
    4 z! A9 L' E! ^  R+ f, B% D+ k
  464.     {
    4 O" r; f# ~- F1 r
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% D: m2 Z2 T* E
  466.       {
    2 W, a, I0 x' w; N6 @
  467.         char szLanguage[50];
    3 x' y% \' y: z+ m' `6 l0 K4 f1 g
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " `4 u( X, w* R7 }/ R; X
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      ~7 t- Y4 i( L6 _) A
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 c4 l. h. r. T, e
  471.         else                                   m_iLanguage=ENGLISH;8 n# ^3 k; S* K! Z+ P
  472.         char szRegister[100];  ]- [: Y6 Z: `9 F) w  Q* i
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & q/ K7 m2 Q% f9 J* G1 Z
  474.         strRegsName=szRegister;4 Y( y* E0 a+ @
  475.         char szPatchURL[100];
    6 M& s8 z3 N8 n; V. C  @# I( R
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 b: Q: O7 j8 h/ d+ o- l0 G2 T
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: I2 x% s3 z) ?. U! ]! N( z! s5 O
  478.       }" ^7 o) y( Q0 K* x  V" j1 l
  479.       else- y1 x$ w. u# [1 c# A9 T
  480.       {9 E4 c( g; s) @6 |4 @/ U
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 J9 L2 l; S' s% C6 L2 N& H: r
  482.         strRegsName=DEFAULT_REG_URL;/ J# Y" w& d' u2 D6 @, x+ @3 J
  483.       }
    ) P" W; s" k5 _2 f9 E
  484.     }( [3 x$ X$ Z" p7 o) j
  485.   }
    / T2 T( B* P9 O; ]; H6 }' @$ S
  486.   return true;# O4 q- s2 O& _; O9 H
  487. }/ q+ U6 F8 h5 p7 ^5 z9 U  D& F

  488. * c' R! ?; y6 {1 s3 Z% C1 g( i
  489. #include ".\ZLib\unzip.h"
    : L  Y7 i3 P4 a3 d8 `6 g) @
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    - `0 m  @* m$ d. m, s
  491. /////////////////////////////////////////////////////////////////////////////. Y& o- j/ X* x& ^2 W. l+ B
  492. // CRevAppApp initialization- X6 O4 c* l) m
  493. ; U% D: d/ U0 }# Y
  494. BOOL CRevAppApp::InitInstance()
    , k- {% B) m9 Y2 C# d
  495. {
    7 S1 S  f/ D% D2 a3 K
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    7 h/ t' v+ G- c& x
  497. 8 Y6 V2 l% ?$ U' U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    7 w+ s) h" n: W" O% F$ Q/ A. k
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    5 c4 F, O0 V  _$ c$ P8 G% H$ K5 F
  500.   {
    5 G  \9 B' L+ ~
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    , Q% F# w* W5 \# o4 p
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    $ _. k, F/ c; d+ S2 f
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))1 V$ Z/ Z+ Y+ v- k4 k0 R
  504.     {
    - ^2 ?6 S- f+ z- U6 T8 e9 ?& B
  505.       strcpy(szPath,szPathTarget);
    & [  {& I( E: f" k7 T
  506.       SetCurrentDirectory(szPath);% V, @  s1 l# B9 T0 W; I
  507.     }
      x& a7 M' k7 U7 M/ V. u
  508.   }9 v- Y; G/ U/ u4 X) c
  509. #ifdef _DEBUG
    : g- g" }& K; N7 J6 n9 _' |( c
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 N& e) n$ t/ y% Q
  511. #else% U) X6 y  f' P2 T3 M/ }# ]: j4 ?* b; |
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . [7 ^, f8 g' x, }: [0 z8 t
  513. #endif1 C( Y  W: w: m7 W
  514.   {% [5 t, L; q, X8 p$ q* ]+ n  H
  515.     char tempFileName[MAX_PATH];; i' o/ f0 ?+ A* a! b) Y
  516.     strcpy(tempFileName,szPathSource);
    - [, T4 _3 U) f
  517.     tempFileName[strlen(szPathSource)-12]=0;
    $ d1 @3 a/ n/ f& l/ M) Y6 ~3 f
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    8 ^5 ]: r) A6 a
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);8 u. G& x2 j; l" l3 R( [4 P
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ! y/ b6 e" K- p3 m
  521.     return TRUE;
    3 L* A3 f3 Q1 C1 ~, J: d9 U
  522.   }
    # U( V" i& y% P: j
  523.   // Nuke 0118: Delete run.exe/ \* Q6 [; J3 S
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ! b4 H6 Q0 K  w' P$ \" C
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    . O* W  w& r2 C3 f9 U
  526.   if(!ReadCfgFile("Config.ini"))
    ) {2 i$ O) ^; m7 m0 |
  527.   {5 j- {- h" s7 {6 m: E- i; M
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);! d, J3 `# L8 \0 P+ j. ^
  529.     return TRUE;$ L( l1 y4 V# }
  530.   }
      _  ~, g6 H$ n7 M3 H/ {: f
  531.   HANDLE mutex;
    , I0 V6 i9 K& W( U9 ?
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 h6 `5 P$ c' {
  533.   {
    2 [5 O" T% l. m9 J
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    5 B$ K: B. Y' u) o+ P8 ]
  535.     {
    ( R3 F- F9 l  R0 V! s3 e* w4 u
  536.       CloseHandle(mutex);1 B: O6 K9 I- r" ]% E
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
      w6 @% L; p( D! f+ ]: W* ?
  538.       return TRUE;- F% r  i! T0 g' n/ T. r
  539.     }  i. D/ U, v( F! g; e
  540.   }  
    ! j* \( Q! S0 z  V, j
  541.   CloseHandle(mutex);
    ) C/ `4 J# ]/ @. q. Z$ [6 u$ X# C

  542. % k) ~- \2 H1 X+ N* P7 y% _
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    4 h6 }( @. G' V
  544.   V9 I4 ^) {! B3 W' D3 z. m
  545.         AfxEnableControlContainer();  u  y# h& N) M8 o3 j
  546. ' i) ^: B. k5 [- ]/ Y8 U: o
  547.   bCanUpdate=FALSE;
    $ f$ u0 H$ x3 \
  548.   dwStartUpSteps=1;
    5 d! W- u9 X- z9 j0 d5 r4 o, |& {
  549.   dwProgramState=AP_NOTHING;3 `. O& S7 S/ n* [/ H
  550. ; ]1 [7 e% v# C% P4 I8 @: P4 j
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);1 `8 A2 k; `; u/ r! y! k) ]
  552. + z! T# X0 _3 _$ G
  553.         // Standard initialization
    4 a7 q0 R+ G2 Z5 K9 Y$ ?4 \$ f
  554.         // If you are not using these features and wish to reduce the size
    6 s7 E* W. M8 N9 [
  555.         //  of your final executable, you should remove from the following
    " E1 _# V; v* A" S+ G& m& X6 N1 J
  556.         //  the specific initialization routines you do not need.
    & L% z* d  F2 e. ]' f2 k0 w

  557. . E5 W& ~6 e6 q- X4 ?
  558. #ifdef _AFXDLL
    - y) f. u8 l' I' l$ k! t$ O
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + x8 O0 Y2 ]# l/ c
  560. #else
    5 C6 B' C& p( a$ Z: @( ?6 v
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically, o; d4 Q) g1 p$ `6 N; k
  562. #endif
    4 e. m& y5 k) |  t0 a) Q
  563. # Q% E0 n: C0 U1 }5 `! L8 d- h
  564.   dlg=new CRevAppDlg;
    % b. K/ \! p: U* X7 l4 g( `
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    : T6 B# g: s3 l, @- ]% R
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    % @/ d& q3 i! [" C8 H6 n: Q; G
  567.   m_pMainWnd=dlg;
    " Y& q& \  `9 d- f5 @1 X! H7 J0 C& @; y: r

  568. + \) n% t$ L6 Y" J* t( R8 w
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);7 K7 h; {  k$ B; a
  570. ' V' h0 b: }  n1 {6 B# J+ o
  571. //  GdiplusStartupInput gdiplusStartupInput;9 c6 E$ }2 k9 ?6 e* ~
  572. //  ULONG_PTR gdiplusToken;
    5 i8 S2 F* o' q& U% E4 \+ y7 J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);( M% Z" t& e& b" g% I  S

  574. + V/ X1 ~% R  N5 P. D3 G- d
  575. //        CRevAppDlg dlg;
    7 i" [" q+ k9 ~$ M  a
  576. //        int nResponse = dlg.DoModal();
    / X0 d' e- c: U1 w7 f5 V
  577. //        if (nResponse == IDOK)
    : i; L- ]/ r& H+ E3 Q6 v& S
  578. //        {
    ; R3 e6 D0 U, N# Z, t7 I0 s; g. h- i
  579. //                // TODO: Place code here to handle when the dialog is& Q  ^7 Z+ g+ r" H  d7 G( s; X
  580. //                //  dismissed with OK+ p4 O  B* r2 D" E
  581. //        }% U6 E1 V' d3 u" m& j1 {
  582. //        else if (nResponse == IDCANCEL)2 `  ~, w! w. S" i) `7 W$ S
  583. //        {
    7 L' M( k# D0 ?* N- ~$ D
  584. //                // TODO: Place code here to handle when the dialog is
    ; Y$ W: R4 h7 N1 c* ]9 ~
  585. //                //  dismissed with Cancel& U/ h6 b4 O/ f$ A7 s8 u8 [+ i
  586. //        }
    0 Y* r7 g0 J5 A8 u

  587. + p1 [3 N4 D% q  _2 u8 q7 s
  588.         // Since the dialog has been closed, return FALSE so that we exit the8 L7 u$ V' R0 J. Z1 i
  589.         //  application, rather than start the application's message pump.
    / o' R7 f0 e5 x- P- ?0 N) \
  590.         return TRUE;, ^7 ^/ g* L5 H+ {
  591. }
    ( I; w  D6 |% q! g" @& @, p

  592. 3 Y/ [$ y- {' D6 s! @( z: d- \
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
      k* c, O# I% _5 L; O* E5 k" p
  594. {  h( W3 ]4 Y$ x2 E/ x0 s# W
  595.   int i;
    7 F- J3 W. }$ Y; S3 v: D+ b
  596.   char *szRet;
    8 `, H+ e, T* c9 Y! a% H' H; e

  597. 2 K! a3 q3 i& f0 a; j9 r9 m  d
  598.   if(pSource) { itoken=0; sztoken=pSource; }2 H. r8 y& ~- ?4 Y0 G! o5 k
  599.   if(sztoken)
    ; _' H( h6 l: G# B7 J+ G
  600.   {
    ( j2 C3 M, b4 `- u1 ~9 w
  601.     szRet=&sztoken[itoken];6 r6 c% K# ~; [; F- M
  602.     while(sztoken[itoken])' j6 P' i% M4 r+ r/ d+ C3 Y
  603.     {5 X0 ]' d7 {; i( G3 Q6 G
  604.       for(i=0;i<(int)strlen(token);i++)# }/ N8 }3 a) w
  605.       {$ w6 i& S4 y8 t8 d
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
      q' Z1 o# H% f! d9 q! z
  607.         {4 l. ]' H; L1 S6 Z; U8 d5 i6 q
  608.           sztoken[itoken++]=0;; z1 u$ Z7 q+ Z9 m3 t
  609.           sztoken[itoken++]=0;
    $ C. T0 O! i5 V8 `
  610.           return szRet;
    - ?8 _( \0 M0 j. v3 u% \
  611.         }6 L* V" ^  W' w( w& ?3 o
  612.       }+ M; l+ U  e) h
  613.       itoken++;* I2 e4 I5 Q- N4 ]+ A9 V6 e, n
  614.     }
    % f6 r8 B% s$ S& O, Q  b
  615.   }( z& y+ H3 w2 Q. C
  616.   return NULL;
    - [/ S" b8 v1 _) q
  617. }
    . \3 r% D4 h( w  K# _

  618. 9 y; ]4 ^6 {* s5 w/ _
  619. void ProcessProc(long Total,long Current)' P; H% U0 r( o% j* J, ~: K. f
  620. {
    5 r4 v+ ~1 y0 \) a2 H# {) q; {
  621.         MSG msg;
    9 L! u2 F! Z8 M  R
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 Z3 t) f# N  v/ e
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));1 A- f2 ]9 U+ z2 Y( y. y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 i! B9 a! e% h$ a) Z! x
  625.         {
    5 v8 [- Y3 j" K6 H5 Y
  626.                 if(!GetMessage(&msg,NULL,0,0)); Z% X. L* e& b6 W. N) A$ h
  627.                 {
    ( N" X8 ?8 I% X1 p; f% C% k; P
  628.                         return;- x3 d5 g/ n, r; E, o! W% g' f
  629.                 }
    % V4 D" Z8 Q/ S. e) T" A# k
  630.                 TranslateMessage(&msg);# c! |# E1 @3 d# d, U9 ^. A
  631.                 DispatchMessage(&msg);
    " P; G! b" I+ ^4 Z
  632.         }          M! b6 w$ l% b2 S) p+ |! p
  633. }
    - ]- g8 S3 f$ w

  634. 1 l  s6 d: `" Q: O" H
  635. BOOL bFirstChar=TRUE;4 O6 L  B, B# I+ P, ^

  636. 8 O$ y7 u2 S* u
  637. BOOL CRevAppApp::OnIdle(LONG lCount)" {0 C. r5 Y4 m, d" G* ]. t6 E
  638. {
    2 ?# N0 \6 P/ N( H& y) z) e. s
  639.         // TODO: Add your specialized code here and/or call the base class! N* U% Q, e( Y& r
  640.   switch(dwProgramState)
    8 c0 Q/ c4 ]. I8 x5 s! u9 F4 K
  641.   {
    : o, k/ Z% l5 o# u/ w! G# B
  642.   case AP_NOTHING:% B- [3 t, V8 z3 j3 k# ^
  643.     switch(dwStartUpSteps)
    3 v. {1 R9 |( W
  644.     {9 _( n  G5 q# A* |
  645.     case 1:2 g: H' R- ?) l) s0 M: R; p% \
  646.       {* f/ H1 B: `  E2 z+ {
  647.         int i;" J9 G5 H, u( }7 k$ J
  648.         CDC *pCDC=dlg->GetDC();8 t5 z% p& |% ~; C
  649.         HDC hdcwnd=pCDC->m_hDC;: X% ^: J! L1 E3 @3 |' J
  650. //        Graphics graphics(hdcwnd);, f  @% i7 l; s- [4 P' g( E
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ) P  x1 o- |: M$ P6 d0 k; ~
  652. //        INT iWidth=bitmap.GetWidth();
    1 q4 \3 T9 h9 \' ~4 u8 |
  653. //        INT iHeight=bitmap.GetHeight();
    + i; \* g% k  `  o" U
  654. //        Color color,colorTemp;
    ' G" s4 n( }% o1 `2 F
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ s2 V& |- |, {2 X6 |& ?6 u
  656. //        {
    - X* O$ C3 N! {' W2 ]
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)3 g. R5 ?! w3 n& n+ `7 u
  658. //          {
    # b+ f7 A$ k5 o3 T( `2 V0 T
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    . P6 N# x2 U, p" s+ m+ g! ^
  660. //            colorTemp.SetValue(color.MakeARGB(
    : E8 W( N+ y6 N5 t+ o
  661. //              (BYTE)(255*iColumn/iWidth),
    5 \2 H9 t2 _, f: h  t9 }
  662. //              color.GetRed(),0 O9 |5 I- C7 v1 D: h
  663. //              color.GetGreen(),; M2 F2 _! O0 \; ?
  664. //              color.GetBlue()));, t7 h* J% M0 o1 T2 j0 N; X
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # a/ l- e, _' E1 y6 w$ @
  666. //          }
    # i, ^1 v, m% D. N& N( K
  667. //        }
    8 R  t) o7 t. t3 }
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 j3 e- ^+ G) l  Y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 ?4 D$ N! k/ }
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    0 g1 s, u) C+ e: K) I% i' I
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & F) s5 N  \5 z- g8 I
  672.         for(i=0;i<240;i+=8)# W, j/ U  T) e- L! g1 a6 ~
  673.         {
    3 s7 U3 Z9 ]( D
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. x$ Z1 [! G) `
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 J6 V* l  _& S0 p% ~
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);1 V' Y7 _# ~& I; _$ v9 u/ n: U
  677.           Sleep(33);/ j' |, G3 i. \9 _
  678.         }' e  U8 y1 C5 [( l& ^
  679.         Sleep(1000);: ~4 V5 J* e7 r8 A. c+ M# j+ |
  680.         for(i=240;i>0;i-=8)) m$ w% p( {' K* \# r1 d. @5 E
  681.         {
    7 K, P! X9 C/ {3 W3 ~& s
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % W4 q1 K9 ?6 e1 w3 ]3 @' D
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);( \, K6 J" V1 M; [' r' C8 I
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      Z5 S5 c% l9 V' c
  685.           Sleep(33);; L* Q  [/ T# G8 T" s
  686.         }% F7 o0 c) h. _3 j' I$ J
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);% ]2 B3 d. P( ^7 A2 o
  688.         dlg->ReleaseDC(pCDC);
    ' I3 {- \$ G% @/ C( |! V5 a
  689.         DeleteDC(hdctar);  s2 K- h" Z& o* H
  690.         DeleteDC(hdcsrc);3 g& Q; x2 D8 b  E9 ?, E: R
  691.         DeleteDC(hdcorg);* V3 M* z  Y; c) w3 ?- }9 k; N
  692.       }
    - e/ q* m1 {! g( b
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) P* w. {, i+ M: @% w
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ' ~0 C3 t. g1 X7 q( P& c% u! Q, G
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");3 E" E( x7 w2 ^8 D0 Z# i
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");$ J( j6 v7 h% x) l
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' q* |. Z6 e' i6 b; u
  698.       if(!Dn.Connected())6 L! E1 l0 |+ R1 E3 U; ^8 U3 _
  699.       {
    . |) r# _7 T5 @/ B) X
  700.         dwTotalFiles=1;0 F  q5 ]/ [# o( X
  701.         dwDownLoaded=0;
    ' U% m) k4 \' l
  702.         bSilentStep=TRUE;
    $ u0 J  g7 Z- O6 b4 k( {
  703.         bCompressed=FALSE;  ~2 z, Z0 r) d8 k
  704.         strExtLocal.Empty();
    ! h9 g- e" d; J$ L+ G! N
  705.         strFullName="readme.txt";' G5 F' F' U4 Y
  706.         dwProgramState=AP_CONNECT;6 P, [- L& _( L% O
  707.       }
    , a5 j9 b6 J1 f4 ^, H
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    : A+ X, t. w$ A5 X
  709.       dwStartUpSteps=2;
    $ g- y: [! J% w
  710.       break;
    # s* l9 v8 j& A- p: S# w
  711.     case 2:
    " F+ e6 b( E+ m2 E" [
  712.       {
    # m, I- n) F0 B+ S  }8 D
  713.         int iEOF;
    ) L4 Q$ d, O8 @* H+ L
  714.         FILE *fp;
    ; V( @0 u1 H3 F1 D
  715.         char szString[512];0 |( w# U* }+ B" O$ N* ?
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");  ?5 R; v3 c9 s8 T! }- F6 |8 ?4 I
  717.         if(fp)
    / j# j6 C6 F( K; D5 ^- _6 v) W
  718.         {
    6 z8 ^' j; ]0 D/ A. p
  719.           do5 i; `" q3 c# ^! V4 R5 P( L# p
  720.           {
    . X  x: u$ r* l* t
  721.             iEOF=fscanf(fp,"%s",szString);
    ! [8 N) R: b. X
  722.             if(strlen(szString))) W/ j# c0 p- l- j9 q
  723.             {' @+ Y2 U! s4 F9 U; ^
  724.               if(bFirstChar)
    " s+ o, W" o8 Q
  725.               {" L. T/ A4 `6 E9 R" h
  726.                 bFirstChar=FALSE;
    & k8 C. r* [- R% h* f* j) J  U
  727.                 bConnectIsBig5=FALSE;) m9 N- \" }% ^3 M6 F9 p
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    . L7 k4 G  G5 {3 A4 Z
  729.               }
    ( v  T/ |; d# Q+ p
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    8 k) l  a) ~  M$ W, T
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));7 j$ Z. ~4 b# q- s
  732.               dlg->m_ListText.AddString(szString);
    9 m4 E- w. l6 @4 M7 T+ {; D, H4 e
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 g( w' ]6 T0 n  q# ~
  734.               *szString=0;, |; J# o; K  V/ P4 N  B! e; i* u- q& D3 s
  735.             }- [. D$ ~  N6 L7 T7 F6 f" _
  736.           } while(iEOF!=EOF);* J7 b9 k% Y* F; {; Z
  737.           fclose(fp);
    : e9 }# s6 w, l8 E! s
  738.           unlink(".\\DownLoad\\readme.txt");
    % {1 k# }8 ?$ |6 g2 G% T! T: b4 z
  739.           dwStartUpSteps=3;
    5 X" n. h/ n+ E" E9 ?
  740.         }
    ( g* R1 Z$ d6 a" D( c7 u/ j
  741.       }
    4 y% x; @) s- K- H  ^9 u6 o4 R
  742.       break;$ b8 Z6 O; x8 J5 F" S
  743.     case 3:3 Y3 |9 z7 a$ d* ~) a. B
  744.       if(!Dn.Connected())
    . y  o  Q; [7 }. g, o* }* X2 }8 k4 f
  745.       {+ |% b6 }, M( Z4 F! h, E$ R" U- n' D
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);; [6 V+ \/ n, |: a5 y9 p
  747.         dwTotalFiles=1;
    ) z/ v8 t. B: t
  748.         dwDownLoaded=0;" |( z( r: J7 {& ?( L
  749.         bSilentStep=TRUE;
    0 W, n" S( T7 W8 h% O
  750.         bCompressed=FALSE;
    7 T- D" ^% y: J$ p
  751.         strExtLocal.Empty();+ Q, C7 |! E/ d% K8 D( ?% q8 O
  752.         strFullName="checkversion.txt";
    + u8 `8 b# q; P$ p0 |
  753.         dwProgramState=AP_CONNECT;- e6 e* T; J# `1 `
  754.       }; U7 f% N' }9 x
  755.       dwStartUpSteps=4;
    4 n' A; ~3 s- ]2 {* u# C1 [
  756.       break;# V3 z3 f! @4 Y( j% Q
  757.     case 4:! m2 E( d6 t" x0 a8 t/ f
  758.       {3 L" n( j$ S+ f% M
  759.         FILE *fp;7 `; y4 Q/ A( l( Y1 O$ d
  760.         char szString1[128];
    9 M" E0 P0 a( e' ^1 a) T
  761.         char szString2[128];
    ! p1 F2 H  @2 R" y( s/ h
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    & u7 @, F+ R9 F5 r. O0 C3 Y
  763.         if(fp)$ B5 }7 o! A5 H" Y3 `/ _$ {3 S
  764.         {3 b  Z) b2 q% k% q
  765.           fscanf(fp,"%s",szString1);
    % [2 x" M! u/ a
  766.           fclose(fp);: l! j( i$ g7 t2 i- T2 \
  767.           fCheckVersion=atof(szString1);. Y" ]9 W( G6 L0 I
  768.           fp=fopen(".\\checkversion.dat","r");  `7 t2 ]" d( o3 C6 i! n- {
  769.           if(fp)
    7 S; y! g) i, G( I6 @6 Q, x( |
  770.           {
    1 ?% O( E* o. G. t% D: ~6 V3 k' {
  771.             fscanf(fp,"%s",szString2);8 R- L- v$ i5 q; T/ f, ]
  772.             fclose(fp);, H# J- t. G4 |4 d  s* N. h
  773.             if(atof(szString1)!=atof(szString2))
    " b; U! o0 k! I9 Q0 d& Q% }- x! ?
  774.             {! b7 D" ?6 l2 J4 H1 ?7 m6 ]
  775.               if(!Dn.Connected())1 C: D3 _& D' U1 {5 K
  776.               {  }( V! g& k$ X& E4 x
  777.                 bFirstUpdate=TRUE;
    # K" N: q% {1 G2 v' e
  778.                 dwTotalFiles=1;9 m- c! @0 V3 S9 }- ^$ d+ f) S6 E
  779.                 dwDownLoaded=0;
    $ u5 J/ T' }+ i6 T5 }% C6 Y7 m
  780.                 bSilentStep=FALSE;
    ' L$ l& G) ]; B% e0 b7 D
  781.                 bCompressed=TRUE;4 B: @1 \- C; z3 ]8 ~; o1 l
  782.                 strExtLocal=".\\DownLoad\";
    ! c4 s5 [! E* I% p) P
  783.                 strFullName="update.txt";# O% |& w) I' n! M$ e( d2 K  L
  784.                 dwProgramState=AP_CONNECT;* [& P1 n, q) Y; M& O6 b
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 d" [, G3 r3 k$ N, Y& {1 A
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( X# B  {- ?% _5 D
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");& Q2 ?& ^5 I& ?0 a+ |

  788. ' v9 C: C% U3 |/ T2 [
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / c8 H) s  G* T; z3 V  p
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ; ?1 }8 ]) _1 i' z2 B# s
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)0 [3 C: t, \/ y# ]& a
  792.                 {
    5 v( H' I1 t, Z) T2 O$ l+ B6 V/ K& P$ _
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    1 s: `7 }9 q1 Y6 G9 o) l- _
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( s& B5 T2 }1 E' |6 W- E- D( ^! ?
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ; c6 Z( u' ^/ f( X' v
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! {# ]- A" h5 S) z2 }- e; @

  797. - T/ |5 k/ ^- h5 F3 Z$ _) g8 T
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - G% l8 g; {# o0 g
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & x. {+ m3 r2 F: N1 P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    % `! k" o9 }# N' a! _; I* G
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ D2 a& r/ N/ h7 y' V0 w
  802.                 }
    ! o: Y4 Z) ]1 ^% j- X
  803.                 dwStartUpSteps=5;
    ) v, m+ U! V9 e! K. n
  804.               }
    . s$ S" {2 k& T6 t
  805.             }
    $ c  e1 `3 ?! C- A5 ?8 z
  806.             else
    ! k1 M( o* s0 l
  807.             {- e; d: v* |2 L8 a# A, g. w" ]! V0 U, A
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ; e2 ^3 I( V& V# Q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 H& C1 P, X& q$ R2 ], S
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 E6 F1 B; o9 k
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" E( q9 n1 k3 U$ |, L4 Z/ q  L8 J

  812. 5 H) R- t& C  `% V; ~- N4 m. j) a" l
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% u5 K: I" m: ?- W; y5 |$ i0 n
  814.               dwStartUpSteps=99;6 g+ h1 d2 p9 R8 C9 g" X5 x
  815.               bFinishUpdated=TRUE;+ T* Y. T: I- G1 j$ a3 t6 c7 l8 m
  816.               bCanUpdate=TRUE;
    # b. o; `0 I  n% @7 t$ J2 F) j
  817.             }
    # k, R1 f1 e  @- d2 w" p) o* g
  818.           }4 p' c  c" T( h2 E4 V
  819.           else
    + c  \4 J% q3 e  |( A
  820.           {0 f' a! Y% ?5 C0 u0 I
  821.             if(!Dn.Connected())
    7 ^0 i) _  I6 s  h; w& o2 |
  822.             {1 [% H3 c, Q/ J
  823.               bFirstUpdate=TRUE;4 z3 n1 Z9 u- `/ h# s7 ?
  824.               dwTotalFiles=1;- w; _& B/ Y, _4 S. s6 j& ]5 J  B
  825.               dwDownLoaded=0;( X0 L! Y, S' W6 A5 A
  826.               bSilentStep=FALSE;
    ! \. ]1 N; f: t% }" e5 l0 Q
  827.               bCompressed=TRUE;- h; G' V" @' h& c
  828.               strExtLocal=".\\DownLoad\";  S+ a0 W4 ^5 x1 d; l8 O
  829.               strFullName="update.txt";
    5 B/ O  q" N: T0 P) y) ]
  830.               dwProgramState=AP_CONNECT;: V% I  Z9 E5 S3 A* b) |
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, P, o0 q4 C( ?5 ]% h
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - N' h' _3 P$ K
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , c9 _! R. l8 j: J3 S; Y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: e! |7 ^9 |5 b' z* v% E& N
  835.               unlink(".\\DownLoad\\checkversion.txt");0 |  y7 \& m( Y: p. h" N
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)# Z/ [, B" `6 Q  E& T! D* p+ h: E
  837.               {( q1 p! y. _* y4 U: ~3 @; s4 d
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    & r7 Y8 q9 K% v
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # u  n5 y/ _% w6 ]& F
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");' n. O( ?+ Z, Y, i
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% V' l4 s1 f3 U8 E) u4 O# w
  842.                 , F* |0 y$ f8 U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * _; ^6 l2 ~% o& \% b: c
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ v: C1 G/ U& G7 u- u2 {
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 n3 b2 g7 W; k& O
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# \$ ]* `( q2 n, d) t5 c( k2 m
  847.               }
    + b" I: ]4 Z( b$ y4 z7 z
  848.               dwStartUpSteps=5;& l4 }* z: {6 C
  849.             }0 S9 x  O6 W, H1 z2 v
  850.           }9 Y  F, _' D6 r$ m# l
  851.         }. y  Z# G( Q, S, J: d  \* G
  852.         else  A3 a# z5 M+ o8 F
  853.         {
    # w& A8 [. Q6 Z4 m, H
  854.           dwStartUpSteps=3;9 v2 k4 B# G4 F) p4 ^" t! n- V5 W
  855.         }
    0 {, ^6 b2 P/ H  Z. L& i
  856.       }
    , u% b" X# R6 e
  857.       break;5 O6 H9 q: V" ~: [8 c
  858.     case 5:
    ' m4 J( \: P# `5 I' _% }7 W( v
  859.       {
    9 H6 M) k& c/ U9 b+ l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    # ?8 Y  F) i# l8 w0 g. p+ A0 J$ x
  861.         {
    ( j5 n8 d. S! c& p$ m! m3 i
  862.           int opt_overwrite=1;
    0 a# P& T. O( d
  863.           int opt_do_extract_withoutpath=0;
    & f& P* \- f" P3 |7 n! k7 j- _8 a
  864.           unzFile uf=NULL;
    * w5 S. J0 W/ G% K5 O, B

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

8 ]" ?+ d' s- a  L% V+ I  d9 E# }
; W! m0 K$ J, @7 A! 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-1-27 15:48

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表