找回密碼
 立即注册

CSUpdate.exe源代码

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

2 Y5 i0 T; u0 ?6 n9 R- ?
  1. / RevApp.cpp : Defines the class behaviors for the application.6 c+ w+ E+ G& S  A
  2. //, |9 k& I2 K8 M% q3 g3 ]

  3. . b) f  P9 \8 c; M5 p
  4. #include "stdafx.h"
    4 L1 m/ v1 [, I$ [; [# k6 r

  5. ! N) }0 l, T) u
  6. //#define UNICODE5 r1 \0 ^5 p# c" j( ]' _. q3 E
  7. //#include <gdiplus.h>
    3 d1 j* e( S3 |6 Q1 j  U3 x
  8. //using namespace Gdiplus;
    * N% N+ t! ~& ]2 g& J
  9. & M$ {6 P2 n' I  Y
  10. #include "RevApp.h": L4 |. [' ?* f* n' f/ x) O7 ]$ Y
  11. #include "RevAppDlg.h"
    3 ?7 V8 E0 q$ v! X# @# h

  12. + t% g1 X! I9 R, i' ]1 t2 K
  13. #pragma warning(disable:4786)' q# i6 ~$ \/ c( L# c6 R( K
  14. #include <map>
    & r! \( A  ?5 P+ G& X# C1 p- ]& l
  15. #include <list>
    % d; O1 u" F/ l+ [
  16. #include <direct.h>
    7 M; g! Q5 X4 z2 T. \/ H0 D: y

  17. ! ]: Y/ O( h% e* a. H" _9 \
  18. #ifdef _DEBUG
    % r: r1 o& b1 i2 C# o& p* M
  19. #define new DEBUG_NEW
    2 l4 u2 j4 Z* M" J+ H6 U2 I
  20. #undef THIS_FILE6 ?: E# O" ~2 V1 a" o1 {  R
  21. static char THIS_FILE[] = __FILE__;1 L1 g" Z) |- V6 S' z1 |& `
  22. #endif' P2 Y* B( N3 B8 P
  23. #include "SkinResDef.h"  ?& @' y2 G9 B* r
  24. #include "ChangeBG.h"9 i+ Y) \8 N- Q6 l8 e
  25. #include "AFXINET.H"- {2 u% E5 i4 a9 x# T! l, R

  26. , s3 Z/ X) {" S0 `  c* h
  27. #define TRADITIONAL_CHINESE 03 N) O3 @  c, A5 I
  28. #define SIMPLIFY_CHINESE 1& b+ q: Z1 I  L+ {( ?1 G
  29. #define ENGLISH 2/ M4 q  {( r3 Q$ ^/ c
  30. int m_iLanguage = ENGLISH;8 m# j& ?% u+ s' A8 v$ \7 b
  31. /////////////////////////////////////////////////////////////////////////////, c& v! ]1 j; i4 h  @8 i* O
  32. // CRevAppApp3 ~1 t6 M& S; c( L2 ~

  33. $ F. |: e, H2 f4 d5 C2 R+ c
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)2 ~( }$ B+ y( C7 c: }
  35.         //{{AFX_MSG_MAP(CRevAppApp)6 K* T* w$ C" t5 l; O% g) J
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    9 M  P: M4 o3 n/ }/ x
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!' x9 ^- n2 v, m6 I" n# Q8 {4 u
  38.         //}}AFX_MSG+ w/ H4 K  d! o) l4 j3 A2 `
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)/ q# w4 \4 b6 [+ ]: ]" f: a+ q
  40. END_MESSAGE_MAP()
    ; V: G# J, u" G3 J: E5 f" E
  41. " d  d  ?+ X. g) p, Q
  42. /////////////////////////////////////////////////////////////////////////////8 \  C: U2 i6 L. q: [- W
  43. // CRevAppApp construction' p  U) ^9 a. S7 H7 N
  44. * P" a1 z$ R% o4 s  G* z
  45. CRevAppApp::CRevAppApp()
    7 ?( T; G! ~% C! M0 s
  46. {7 m9 {0 E7 ?& S) L! s' b+ Y. m
  47.         // TODO: add construction code here,% q0 @4 _+ ~. }" W% g
  48.         // Place all significant initialization in InitInstance
    ; x9 @, m( p4 [
  49.   bDisplayIsBig5=FALSE;
    & G2 _. b5 E+ d" @( S( x
  50.   bRestartUpdater=FALSE;- A) ?6 m2 a- j6 N5 p% i& o
  51.   bFinishUpdated=FALSE;& [( {) V% w2 g) X# e5 a
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    + y+ u$ S# ~% b0 o: m
  53.   InitChangeDataBig52GBKS();
    9 T: E5 C. Z7 P  x5 o4 ~' f4 a, @
  54.   InitChangeDataGBKS2Big5();
    " ~% w( \$ B7 ?* ~/ y2 ]
  55.         //
    + o+ I) G' I& h9 \  {# W( @
  56.         bClickRunExe = FALSE;# J) x, L8 {3 m  Z/ o
  57.         //4 Y7 E/ t! ~) n( G# W- F
  58. }% ?4 C0 k5 d) i: v
  59. : ]7 l' ]+ [/ p8 M; P, [3 k3 A
  60. CRevAppApp::~CRevAppApp()0 ~* v& d" L2 a
  61. {+ a5 q2 T7 c# r
  62.         // TODO: add construction code here,
    ' Z# |0 L" O$ A' x6 O% }
  63.         // Place all significant initialization in InitInstance
    2 H  K% y6 l& F
  64.   EndChangeData();
    , R: t% g- |% J" F6 N8 h
  65. }( M( C3 A/ M' L0 |0 {3 e

  66. 2 R4 s; c" ^) S9 Z( g) h4 P
  67. /////////////////////////////////////////////////////////////////////////////# Z* r2 N& s9 }
  68. // The one and only CRevAppApp object$ ?+ W" E7 P9 _' K/ A  C

  69. 2 n/ o/ _4 r! |9 [! c4 c+ G
  70. CRevAppApp theApp;" K" d, u, Y* v1 z: x
  71. & B$ e. \2 q; o6 ~/ {
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    9 L9 o: e- I6 y2 b0 O$ K( O
  73. {# y' S3 G9 P& p4 r: L
  74.   int iEOF=0;
    3 g0 J$ L. G! G) t
  75.   char szTempName[MAX_PATH];
    5 t5 u% u3 ^" S2 ?5 w% `& K& ?  y
  76.   *szFileName=0;4 a" h$ v4 E+ S( [- n6 n2 {
  77.   iEOF=fscanf(fp,"%s",szTempName);, f' g, _9 k  \% @* D- W5 E5 E+ S
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')' s, }4 [3 p/ l$ @) f
  79.   {$ j, W  u! P1 n+ X
  80.     strcpy(szFileName,&szTempName[1]);2 d  _. z) R- U( q# Z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    8 `6 b& l# h7 V# }" ?/ o
  82.     {" i+ ^$ T, P0 M+ I
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ( w6 R0 U  z; i6 Z: g1 `
  84.       strcat(szFileName," ");5 W. u6 c+ g, D: l& m
  85.       strcat(szFileName,szTempName);
    , A1 v  o! d4 _0 r5 _
  86.     }; c- Y8 `0 p4 v1 ^) ]$ J
  87.     if(strlen(szFileName)>=1)
    * O* f: P: V5 D0 }& Q' t
  88.     {0 q8 J/ N7 h* A: Q9 |! B' I8 K
  89.       szFileName[strlen(szFileName)-1]=0;6 f, h! X+ l- J) T0 e/ {
  90.     }
    . y3 T" W. b! d1 j; C; d# |) L7 `
  91.   }/ L% u: Y5 |2 ~# q6 \* p" c6 j1 C
  92.   return szFileName;7 q; b: S" i" w7 a1 y4 @- z; }& r5 L
  93. }
    8 I  ~% T- A5 H2 n: U- i. G

  94. : {) F1 I* d& h
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    : C' n- J0 v+ i
  96. {
    . f9 G  f: Z  h6 C, S
  97.   FILE *fp;
    ! s& g' b9 G7 g# r: J; A  k3 G
  98.   char *key=NULL;* p' e4 Y* E# D+ X% R
  99.   char version[MAX_PATH];! v. c2 _; L! N: ~9 ^
  100.   LPUPDATEFILE file,olds;
    8 T) }- h1 w) @5 s6 K
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 N8 h: ?: v* v$ f' o( C

  102. % j+ N' Z: D8 Y2 ]2 s+ \
  103.   UpdateList.clear();5 T4 h. o- V  A; J! x. P
  104.   UpdateFile.clear();
    0 q. Z" @* a( p
  105.   if(GetFileAttributes(filename)==-1) return false;: H& H  N. _: I, B! B/ m
  106.   if(!(fp=fopen(filename,"r"))) return false;
    % g( X9 ~- g) A5 L
  107.   fscanf(fp,"%s",version);- w* ?5 n' c( a. T/ _% Z6 D7 I
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }! y# O( C' _4 C, r+ m; W) o. I
  109.   while(fscanf(fp,"%s",version)!=EOF)3 k7 Z: R; l/ s5 e4 `, b. L0 i$ G
  110.   {
    5 ]0 _/ V- I+ |) r1 T
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - b8 N4 M( ?2 k" P/ u( J) v" I4 x
  112.     fscanf(fp,"%s",file->path);
    : D3 V5 q7 d- p0 s4 h" W
  113.     ReadFileNames(fp,file->file);
    6 [# w4 ~( v+ a; H; U$ H4 y8 x
  114.     strcpy(file->full,".");
    4 ]: O" J1 b$ x% U7 w$ N) L
  115.     strcat(file->full,file->path);
    ( Q  b9 g3 x: m8 }+ u& S
  116.     strcat(file->full,file->file);$ F5 M! ?+ {4 w! z- ]5 K7 I0 C6 {4 @
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())6 h( Z' R% f0 ]: l
  118.     {3 k9 W: ~3 Y7 d* v9 S; [$ r
  119.       file->vers=(float)atof(version);
    . Q; H: W2 h; B# @& L
  120.       UpdateList.push_back(file->full);
    : X/ j+ U9 ^5 Q' x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ! g7 p$ r& S9 K; z
  122.     }
    # w: x! t6 u* N
  123.     else5 `* X& y7 e$ e' `/ a2 T  y
  124.     {$ p& |: ~" D  k( L6 Z8 x
  125.       olds=(*p).second;
    $ V1 [2 J! D( y0 Q+ ^
  126.       if(olds->vers<(float)atof(version))
    0 l; j+ j$ t" M' k' L; t
  127.       {7 C7 V# r9 o1 X4 [
  128.         olds->vers=(float)atof(version);
    1 ^% W! {: V! N
  129.       }
    + Q" H! [1 U' W# J6 ]
  130.       free(file);, X, F+ r; B6 t
  131.     }/ a: x5 G- b( r: [6 N( u
  132.   }
    6 l/ a- I4 I0 y* A6 B% q0 W7 v
  133.   fclose(fp);
    & X' @' |* R" z  d1 `7 [+ c- A
  134.   return true;* I2 N  D" N/ \& ^; Z
  135. }
    ) Q' R2 R# k+ B+ H1 `2 z
  136. " T1 l7 w0 i5 b
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)% o; f, F+ f" q% v- G+ P
  138. {
    9 ?" ]1 A6 F( y. N$ B3 U
  139.   TCHAR  szFull[MAX_PATH];* r6 V6 p, a+ a. l$ m* X! H
  140.   TCHAR *token,*inter;
    6 {4 |  n  S) J5 D6 @3 m
  141.   *szPath=0;
    $ l' y# t' }* i* P0 z# Q: h: @
  142.   strcpy(szFull,szFullPath);
    : l+ V6 v7 E2 m  U
  143.   token=strtok(szFull,"\\/");
    3 R* K) R( z: j( G+ u) Z5 X  x
  144.   inter=token;
      d4 b! a" Q3 D5 G) V3 Y( s# K
  145.   while(token=strtok(NULL,"\\/"))3 U! s! e) d( h. j0 _
  146.   {
    6 I: k" @( z, n; x: h
  147.     strcat(szPath,inter);
    ' w+ h) T% W+ g' _
  148.     strcat(szPath,"\");
    9 B) D$ w; G' N
  149.     inter=token;
    ' m: ~. b5 H( e/ w1 i4 ?7 k
  150.   }" m  @) X  L, f) P% R9 C+ u5 X
  151.   return strlen(szPath);& g) P% t  c+ G0 i
  152. }
    1 z4 @- Y4 @' r4 B& q
  153. 9 s' q" A3 I# }  c, A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ( S* ]: L$ q& N$ E/ L
  155. {
    5 m" E4 C% h2 L# y) h8 {% \
  156.   DWORD attrib=GetFileAttributes(Target);3 V& e7 g  e' d9 ^
  157.   if(attrib!=-1)
    ' }/ {2 Y+ x, W' p& J( m$ f
  158.   {  h8 ?1 g" ~! ]3 C4 T7 P
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))* R+ h4 @% p; a6 O
  160.     {5 @/ P6 t0 Z  s! p5 ^) b
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);( E  d( M) C/ K
  162.       SetFileAttributes(Target,attrib);
    ; d3 B8 T8 \  w: N7 k6 k. y
  163.     }) A7 W0 b' |1 m8 H; C
  164.   }
    . B. i6 D+ H! n2 f9 x
  165.   CopyFile(Source,Target,Erase);  Y  }) G( W% h4 }7 T( v4 W0 w3 D
  166. }) z$ q  G" B% W. S  c8 R3 ~
  167. 0 y. {. Y  B, f: }$ @/ I7 E2 L5 S
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ( m5 V1 }) q, @* @4 U
  169. {9 r) g7 Y4 \, `' A5 k1 K5 t- x$ x% [
  170.      FILE *fp;* m7 R: t% `3 h/ G6 I1 k
  171.      char  szBuffer[8192];8 c2 E' F8 |; s
  172.   va_list  argptr;/ X  o; V& W- F! T- {  l0 {- r  ~

  173. 7 a% A8 Q  }' h7 O
  174.         va_start(argptr,message);
    2 V3 |: m* ?- q3 `
  175.         vsprintf(szBuffer,message,argptr);1 m7 {. N( I4 B
  176.         va_end(argptr);
    . i' T, ]7 N- @" N) x+ a
  177.   fp=fopen(FileName,"a");4 @+ H0 X2 F1 l6 B
  178.   if(fp)1 ?8 C6 _" a) E8 J4 ~. Y
  179.   {
    # f# C: `2 N; S6 A& N! S
  180.     fprintf(fp,szBuffer);
    5 v8 X' K& C8 c2 X9 f4 k
  181.     fclose(fp);( k' W) x- O! ~/ c9 t/ c7 s8 _) G
  182.           _flushall();
    " n2 X: C2 ^1 ?# H
  183.   }
    : j/ [+ ~, i1 I  W8 ?# T  |7 ^
  184. }) A) [/ e6 @* j& I# }
  185. + \- |3 W3 q! v* `3 r
  186. BOOL CRevAppApp::Fclearf(char *FileName)
      W0 G/ v" C/ R" z" K( I* D, l7 J
  187. {
    * U+ Z9 l% C( G. B3 ?
  188.      FILE *fp;
    0 g7 M9 l5 Z7 M" |& I
  189.     DWORD  attrib;
    % E( j; h) F' x4 N& p# b& i
  190.   attrib=GetFileAttributes(FileName);
    % D, s& P- D0 z) c- |
  191.   if(attrib!=-1)
    - l% y0 S8 J- ^$ {
  192.   {
    0 c' E/ R+ o" N8 F" R; C+ _* e& ?
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);2 H% f! t, \* T$ A# z
  194.     if(!SetFileAttributes(FileName,attrib))9 w$ q7 X  Y; r" G- M
  195.     {
    . B) B1 J" I2 c( K7 o% Z
  196.       return FALSE;
    2 d' c! i8 |: ?* a& q& X# U
  197.     }
    7 Y9 I0 }  p! J) c# o
  198.   }) Q3 @( |% T0 Z* }. @
  199.   fp=fopen(FileName,"wb");/ w& C/ d; i3 d
  200.   if(fp)
    , h7 B: V7 t6 b: O. S7 O
  201.   {
    - E, a6 Q) ]+ \% H( Q
  202.     fclose(fp);
    + y2 C7 ~) `# `8 s
  203.   }' q7 V2 a: S$ I* O3 q* }$ }" f9 @0 P& \
  204.   return TRUE;
    ! `  p% Z' C, Q: F( V& K
  205. }: w0 j% e! j; W# \" A
  206. # N1 m) O1 N6 ]& s# Z! h, Y
  207. BOOL CRevAppApp::UpdateLocalVersion(void)' R; W: J5 ?& w& D0 v
  208. {' V2 m# X* Z. r6 _
  209.   char filename[MAX_PATH];
    ( ?) Z0 {! v1 H. N2 p. a; Z& i
  210.   LPUPDATEFILE file,olds;
    + O) C. d& g6 s) C9 Z
  211.   std::map<int,CString>::iterator i;
    0 f" A6 f$ x+ f! J6 r) }0 B' G+ N
  212.   std::map<CString,LPUPDATEFILE>::iterator p;% j$ c  z8 f& u* l
  213.   std::list<CString>::iterator l;
    " D. e) j2 b/ T5 R) O6 n

  214. ) m& T0 E, d5 m' }3 @
  215.   if(bFirstUpdate)7 u2 L& x4 o# ^% a8 y+ K
  216.   {: [$ D6 E. V, {( }- f
  217.     dwCurrFile=0;; u0 i' B( Y  m& `
  218.     bFirstUpdate=FALSE;$ s$ l  ^  w& D/ [/ S3 I1 ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ w' q; z6 N" \, `) O0 ?4 Y
  220.     {* f9 k& ~8 m  n- F/ F# k6 K: b5 q
  221.       dwTotalFiles=UpdateLocal.size();
    ) o; n% I: ]3 H0 J( ^2 d
  222.       dwDownLoaded=0;  ~3 y, J! e; W  x) n1 G
  223.       bSilentStep=FALSE;
    : b6 D, A! E# S; \% @2 I
  224.       bCompressed=TRUE;4 Y; I3 Y- P$ b5 c  d
  225.       strExtLocal.Empty();
    ; W+ S/ X& F( G' P+ T  s, x
  226.       strFullName=(*i).second;
    3 C0 H9 p4 @* c0 p8 Z7 W$ R) e
  227.       dwProgramState=AP_CONNECT;7 D! |5 q7 [9 r1 J; n
  228.       return TRUE;
      {, G4 {% c$ V- n3 x) Z' V1 H+ @
  229.     }
    * b! \+ e1 U1 ~/ ^8 ?3 n
  230.   }6 G8 c/ Y" O: p  o! v
  231.   else if(bRestartUpdater==FALSE)
    9 R  g' w3 Y/ p* ?/ s
  232.   {9 D0 h' W0 H; k$ Z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    2 R. W' x5 x* a
  234.     {
    7 ~, j5 [- m: ~( _
  235.       file=(*p).second;
    3 W1 h& E( n0 p" r! r
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    3 \8 T2 Y+ ~5 W2 k
  237.       {8 L$ ^( D5 ?3 k5 M+ i- U- Z
  238.         olds=(*p).second;0 x) T& u/ V3 a! M( G- `
  239.         olds->vers=file->vers;2 y! ?$ Y4 B0 u3 S
  240.       }
    : q# R; A5 {4 g. k6 t- d
  241.       else  L# ^: \# ]- o8 Z
  242.       {
    : S: G4 [* }8 p, L$ N4 x
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) E- ?. V; u: j$ S- ]. W
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    3 Y$ s3 G& v3 j  Z- g$ B0 u" O" M
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));, |1 {+ l7 W1 n4 R2 f8 F5 q( ?
  246.       }
    ! c" n& d3 s4 i( v* Z& R- m
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");  C' C$ D" _  l/ t( S) g8 E
  248.       sprintf(filename,"(%s)",file->file);. K8 M; h  R# o" k, [) c
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 X% J& J  K" G, Q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ; `* L0 S% w! s* ?
  251.     }
      p9 V1 L9 X) [) o  j/ T$ w# {
  252.     dwCurrFile++;
    ' `( M" A5 x+ `- X# c* n
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      i- X; a: _1 y) j2 x: V
  254.     {2 R7 j$ L6 L7 }5 F. |
  255.       bSilentStep=FALSE;. K1 C7 `+ i; P" @% `% \
  256.       bCompressed=TRUE;
    ; h/ M2 O% _6 c) j
  257.       strExtLocal.Empty();
    " J4 `. S: J6 h- v, J% u" u/ \
  258.       strFullName=(*i).second;9 e4 ^: A! V/ H8 f, p
  259.       dwProgramState=AP_CONNECT;
    : @+ N9 _3 b1 Z2 ?7 p) N
  260.       return TRUE;
    , Z. a! q# F; n
  261.     }
    9 I# ~' ^  N+ r, L/ h
  262.     if(!bRestartUpdater)( A3 a% [5 ]2 G7 i# j
  263.     {
    0 |$ T. ~# |% V6 C. q- F) F
  264.       int iCurrSize,iFileSize;( j) z( \3 `+ |& f4 ]
  265.       iCurrSize=0;, ^; Z% y+ r. |6 ?* Y
  266.       iFileSize=UpdateList2.size();
    + T4 f# z% j5 }% m& A8 l7 t1 }4 N
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    1 D. Z3 y! a  u$ Z3 j
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    0 o& |# \+ Q6 a& G! O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + [7 l6 \4 y. F- v( I6 d5 P
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . J6 e8 q, Z2 A: _' b- q
  271.       Fclearf(".\\update.dat");
      l4 k$ c9 V' g& {  J7 B
  272.       Fprintf(".\\update.dat","Bloodyf\n");  G& [; x8 U! d' u! X3 K; W' T+ K( m
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 L( L' v* p  T9 ?9 Q* u
  274.       {
    & S4 e% @7 T$ j
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 J5 a4 E7 U! A* w  |3 c
  276.         {" Q, G( @( {8 N$ a1 T' Q5 B& m1 D
  277.           file=(*p).second;
    - x- `  ]! I  t, }5 \- R1 x( X! S
  278.           sprintf(filename,"(%s)",file->file);2 n- C3 X/ a  V) @1 i. x
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& g! {5 o$ H+ T- M& R
  280.           iCurrSize++;6 \9 R! E0 ~" [0 @- X0 |6 D' q' J
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));* N2 {, D. c4 i' V# h- f5 |
  282.         }- v6 \; A% g/ y6 P$ r9 {/ |
  283.       }
    - T+ K2 m$ d0 I# F1 N7 e9 s+ p# |
  284.       unlink(".\\update.txt");% d3 r$ K( b- m: u3 Y
  285.       unlink(".\\update.tmp");
    0 |6 p/ z/ R4 o( h. h0 D4 X3 R% v
  286.       Fclearf(".\\checkversion.dat");
    - t/ H- h9 ~0 y2 D. p  X$ F
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    $ w) N8 @: u4 g6 A- ^+ b
  288.       if(UpdateLocal.size())
    - k: e  l8 t# K9 t( d' \( C
  289.       {# a2 l5 U+ U8 j# [6 n
  290.         UpdateLocal.clear();- M5 D: _0 e+ _+ f7 g
  291.       }
    2 T' M8 e0 |4 y8 l: T' f3 i
  292.       if(UpdateFile3.size()); h: d7 H. @& E1 ?
  293.       {
    ; w/ M- _9 ?- O% M# h
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). s: _9 H' b2 t2 T6 u
  295.         {2 A$ _; {0 L( ?3 H/ L8 }3 d  v
  296.           file=(*p).second;
    * y+ h/ q8 ]/ s. k/ F9 j
  297.           free(file);
    ( {2 X$ F6 H4 H3 O6 l9 v
  298.         }1 u  x! ^+ a; L. Z* v, j: d" m
  299.         UpdateFile3.clear();  L& J( `$ E& K! P! z' m$ w* _8 F$ h$ X
  300.         UpdateList3.clear();% T1 G/ E, z' S
  301.       }
    # {1 w) L+ @7 D  p& Y
  302.       if(UpdateFile2.size())
    " X" H9 h2 Z' q' l" u
  303.       {
    $ t1 r9 N! O: x% w! K! L
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 x3 j) f9 P( H, i* \
  305.         {: a1 k0 {' t; |! U: y% [
  306.           file=(*p).second;/ ?9 A. g2 d2 u. _7 d8 B* @
  307.           free(file);
    ! [1 L0 [8 f0 V! i+ A1 a
  308.         }  }2 o) f# D  t( `5 U( _- f
  309.         UpdateFile2.clear();
    3 j! ~6 s, F9 ^* ?5 m0 ~6 T6 y
  310.         UpdateList2.clear();
    0 {1 o# [8 O: S
  311.       }% G* v( h- g# c, T) N6 B0 o
  312.       if(UpdateFile1.size())
    * h. D/ M1 |& A7 R2 [# L
  313.       {( W! i9 L. F( o( @& b
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; O9 J6 b, r6 D$ Z4 b, Y, s
  315.         {
    7 ^. d+ y$ ]3 q  K
  316.           file=(*p).second;
    , D, G- o' J) F6 a/ ^
  317.           free(file);. v( I7 t6 o! y# B5 T
  318.         }
    . b* K& }2 O  T' y# Q* S3 I7 [
  319.         UpdateFile1.clear();9 o! H' f' x' w& V5 x, \  h
  320.         UpdateList1.clear();
    $ ^4 Q3 h; l4 T( V0 e
  321.       }
    " h  [9 p- q" A5 {% g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    : w- r; |; q6 p" c' F5 E2 n: a. [
  323.     }( h& m2 {6 ]: s* n" `. J# d
  324.   }8 ^8 @) o% ?9 o) J" Z; g
  325.   return FALSE;
    ' p! L+ J, X" b' f5 i1 R. Y: i
  326. }. i+ J$ y% X0 J

  327. , T) y8 `" d& P9 @! g- P
  328. void CRevAppApp::ClearAll(void)% I0 }, M* ~+ j+ W+ J) u. r
  329. {
    ! z& ?3 W: _* j/ U, u; f
  330.   LPUPDATEFILE file;
    / ]6 n! p0 U& ^- `. ^4 j. E
  331.   std::map<CString,LPUPDATEFILE>::iterator p;" X) z5 P6 P: D6 K
  332. ' u- `! w6 D- A, L3 o: V4 P5 G0 b
  333.   if(UpdateLocal.size())
    % {5 n: H. p4 O5 s# F. t5 [
  334.   {" u5 _# t+ d8 }0 _0 M9 d$ \- m
  335.     UpdateLocal.clear();5 g$ y7 D2 Q# L1 }/ a
  336.   }
    5 y3 A, L& _( m! t6 _1 F( ?( a
  337.   if(UpdateFile3.size())9 `+ L9 ^6 E& q8 J
  338.   {
    8 N/ j% j# o  ?
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 N3 q) C0 y3 r9 F2 O8 s! V
  340.     {
    9 j! {' h$ H' M+ V2 w) h
  341.       file=(*p).second;
    ' ~9 ~( q6 d9 @% Q  P/ w+ G3 {
  342.       free(file);; D" G8 W- {: c2 s1 E9 i
  343.     }- A- @! y. ~+ }8 @$ e6 {0 R6 h
  344.     UpdateFile3.clear();
    . [5 L; s% W( f( @) P$ v5 k
  345.     UpdateList3.clear();
    % k$ g& f( [/ P# d; @) R- k8 Z8 ^! l
  346.   }
    ( {0 @8 O8 S1 d0 M' V9 |
  347.   if(UpdateFile2.size())
    4 c8 Z6 l% d0 w$ `
  348.   {  F# o$ s( B: ^0 S6 ^! S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! ^' f: K0 _1 t. B/ I! n5 \4 ~; I) w
  350.     {3 x9 a6 Q+ v/ w, Z2 h
  351.       file=(*p).second;
    0 _2 E9 D* x- ~% l  E, o* a0 V( n6 [& Q
  352.       free(file);+ e1 `) J4 W6 p  k8 b, U( n' }
  353.     }
    - F3 P% `; N0 l$ p3 L0 ~
  354.     UpdateFile2.clear();
    : t& e+ j3 {" x( Z- B  A" ^5 t- M3 K
  355.     UpdateList2.clear();
    * U1 L& b/ g" c! ]
  356.   }
    5 T$ t' t0 @9 w* g- T" J  O% k1 H
  357.   if(UpdateFile1.size())1 ~* c: c, i5 q- E' A
  358.   {
    " f/ r  A/ u5 m/ Q3 |, ~
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); m/ W( k2 l% K5 p( t5 B3 Y0 D
  360.     {
    ; V9 _' B% D, l
  361.       file=(*p).second;' l* d3 A6 G8 m
  362.       free(file);- A' y1 B% r2 W+ K/ H5 S) v* |
  363.     }4 F  N: B/ m' v, M9 M0 {' d- H
  364.     UpdateFile1.clear();
    % i; w- Z; [/ ?
  365.     UpdateList1.clear();9 W: X; X* x) P* M' K  B. r: ^
  366.   }
      S8 k9 R. r% G+ k- h: y
  367. }  + M4 Y4 n: a: h6 d6 b2 _
  368.   6 f2 w% R+ p9 ?# S! w4 c* a. q. ~# r
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    & b  a/ ?& M4 O0 G) |$ v  Y
  370. {5 d+ v8 D3 G# i, u! N# A7 T
  371.   int c;7 R. {8 z8 M- i7 l; }7 ~" N9 T
  372.   LPUPDATEFILE file1,file2;
    : T% i& \$ W4 y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;) ]$ u6 I( `8 C, L# ~# x! T7 f# {: W
  374.   std::list<CString>::iterator l;
    " {. A3 f2 q0 e( `5 M2 T, Q% r/ F, Y
  375. & @, ^: e8 c$ `2 C' z4 p9 E
  376.   UpdateLocal.clear();; K- P9 Z$ d/ N; H/ l
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 r) d1 e% v- L% C6 C4 k% o
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);% _7 u/ c- C  N- Y' u! [! Y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);8 z: C5 f& J' N) R
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    9 j+ v2 S" I1 v: v
  381.   if(UpdateFile3.size())9 |8 S7 ~1 D4 G' ]
  382.   {, R' k3 e1 I% @
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    $ u6 c/ n6 \. L
  384.     {8 R* H- o9 c% r: |% e$ y( A
  385.       file2=(LPUPDATEFILE)(*i).second;, R% k* o& e- S! Y- x% [$ M7 L
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 n( B/ E6 |: M1 f, X
  387.       {
    & E- k, x* K1 \1 r, B  g9 J
  388.         file1=(LPUPDATEFILE)(*p).second;2 R1 ^* T! D' M6 y7 a
  389.         file1->vers=file2->vers;
    + r7 N, S4 H7 v
  390.       }& x& D! q" k' @
  391.       else1 c0 {  P2 K. z! R8 o  }4 f
  392.       {
    0 n9 s9 Z$ _+ a, {, y" _0 z' L
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 x5 {( p+ _8 s
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));+ o7 g" z% c5 [/ ?% c4 A
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - u6 J: J' A! @( |
  396.       }( V3 x8 c1 e8 j( ~4 j3 J
  397.     }
      y7 Y9 `  [/ e# l/ q$ j- W5 P
  398.   }
    - A$ O0 n/ j3 M
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 g* I. ^! {* D
  400.   {
    " A) \$ K7 l5 I7 M' v
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())" Q( Y3 Q% p2 M* G5 E) P) j
  402.     {
    $ ?2 p# O! h! z: C0 H
  403.       file2=(LPUPDATEFILE)(*i).second;4 p! G  E7 o( ?$ V% o% N
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' n, ~1 J8 t+ d$ \
  405.       {
    ) b3 i* m6 j+ u9 B% j
  406.         file1=(LPUPDATEFILE)(*p).second;
    $ B* [8 j, A" I7 Y8 d7 v- ^* L0 Q
  407.         if(file1->vers!=file2->vers)
    ' D. v! u1 V, Z0 |0 [4 U% B' H
  408.         {! h. y8 ~& z% p* A
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & ~& m0 D: {- O( p2 t
  410.           c++;
    , a4 a% u9 j" \& ]8 t( ^; F
  411.         }2 F* X8 p& b$ i) I; C/ e
  412.       }+ p' M2 A) Q* f1 t# N
  413.       else4 X; B; f/ \/ \
  414.       {
    5 h; O) Y  T5 r$ @" ~7 F
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 O0 G) G. j6 N( m8 @
  416.         c++;
    $ q+ c7 N/ @+ G  F
  417.       }
    ' D  C' K8 ?  G: M) V
  418.     }
    1 B& V: h4 W$ q4 k* O3 @2 n
  419.   }
    3 A! f; z: e3 \! @0 t
  420.   unlink(".\\DownLoad\\update.txt");  y# d% \2 r4 D5 E6 Q
  421.   if(UpdateLocal.size()) return TRUE;$ y1 h) ?7 U) A# y% M- u
  422.   else                   return FALSE;  V( ]3 ], S; k' d; b6 y. j, m
  423. }8 @1 C. y2 k4 j2 t3 ]

  424. & c4 Y1 h8 Y' O- D! w1 }
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 a" z3 W3 {9 B
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    " y3 ?8 I4 A$ m, l4 f

  427. " I% M! V' _; K) M4 ^1 W( q
  428. 8 o8 v, R! m4 a4 j9 V
  429. 5 W, n$ X' v0 _4 S
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)  W6 D% Y8 {" c$ L8 b* g5 F8 J! E6 H
  431. {
    & c( j9 Q* W) s; B+ ]
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    5 V! }3 A2 h- J7 D8 ^
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 W6 S# a0 }+ r6 q  K- B9 }) Z
  434.   {% _8 y1 ^# h7 @+ z, V! h
  435.     char szLanguage[50];
    6 g' q) l' [( A, C! Z' t1 O
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! H, l0 E/ i) ]% \3 c* N- r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;1 t( {3 L! }6 J# I
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 {( U/ C; S) |+ K
  439.     else                                   m_iLanguage=ENGLISH;
    - ~' t3 K9 @% J2 L
  440.     char szRegister[100];
    " M3 b- g- D$ {9 J' P) a2 ]
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ P3 x' L6 h) E5 G
  442.     strRegsName=szRegister;
    ) i  ?7 i2 `9 C, t8 O) C* j
  443.     char szPatchURL[100];
    1 P; a9 R1 I7 q) i& U8 |0 \
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 ]  A0 U! X5 t7 D3 G
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' R2 C6 g; i8 T6 L+ m* Z& b
  446.   }
    ( ~1 B8 C. O( |3 c: F! M5 F
  447.   else$ v3 A8 `- B  v
  448.   {5 r1 f' @+ L0 y" W  f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 n" ^+ Z3 P# g8 Y: w/ X
  450.     strRegsName=DEFAULT_REG_URL;
    1 |1 ~# \  j" _1 n5 ^
  451.   }9 ^+ c$ p) e- H7 j4 q1 q! T; p
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 x+ {. w* Q% |4 M
  453.   {, Q. M1 U1 T; t- W( f
  454.     char szIP[50];
    9 I, e4 {# g1 [) a
  455.     char szDIR[300];
    / F' f2 G! q7 v1 A+ {8 |- U6 x
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    $ [+ U7 V8 D4 ~7 s' v3 y
  457.     {
      p% N& X! Y) g) {+ O7 N
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");8 {$ d0 z: W/ @
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ; Q- W1 n# N# c% }* M# Z
  460.       strHostName=szIP;) ?7 Q& b' w( i
  461.       strHostPath.Format("/%s",szDIR);% h5 @1 F3 S; j5 \$ ^% Q" B( b3 G$ r
  462.     }. ?3 G: p9 R1 i2 w9 Q
  463.     else0 R% m3 O6 x3 k& a
  464.     {1 \. P. q9 P+ B5 V' M+ e) J) a3 s  F: Z. u
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( A, ^  |; Y  H
  466.       {7 W6 p; i4 ]/ w+ d. X' t- x
  467.         char szLanguage[50];
    : f6 i) M3 A  [& q+ a$ j! H
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; U. ^4 h6 h# K" T5 d: }9 y  s
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 A) G2 [8 F: v5 N( i5 X: e; `
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 O$ y' ]8 X# @9 H
  471.         else                                   m_iLanguage=ENGLISH;, y  ^6 `& }0 n1 G3 n5 i% w
  472.         char szRegister[100];+ X0 |6 J; y% D+ ~7 e* K$ X
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");* V( q) t2 W% F) ^5 Z3 a
  474.         strRegsName=szRegister;1 H  S+ {) r7 U6 G) t
  475.         char szPatchURL[100];! ]! `5 P4 p$ a& P+ V
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# Z/ I6 Y6 o9 F
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 K2 D, T# j( p# c( W
  478.       }5 p9 `. d/ B' S9 o
  479.       else
    9 x" D/ z. d; v% |2 \
  480.       {) D' E! W+ U# K9 O
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; [, S$ f2 h& e' S% ?2 R& o+ N5 c
  482.         strRegsName=DEFAULT_REG_URL;( f! ~7 Z8 I1 ]; @4 t; e
  483.       }
    * l8 f" j" {9 X3 n4 ~; m, ~
  484.     }; G2 r5 f7 X$ q5 m" p' p! E! \
  485.   }0 N5 m! p6 T  s
  486.   return true;' s* Z" W9 H* c* n9 d$ L
  487. }, l* G7 o, a+ b% ~$ c: M1 ]
  488. 1 m2 t7 d# K" j' k6 w
  489. #include ".\ZLib\unzip.h"
    & B1 v4 R$ g+ B
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# e, _, Z. b" f+ [- ~4 V$ ?
  491. /////////////////////////////////////////////////////////////////////////////4 I1 u* _% `: C/ S5 e! q' T
  492. // CRevAppApp initialization
    % n; }/ k$ R" [# C; c% J; ]( p" b
  493. 9 d2 `9 B* H! a3 y
  494. BOOL CRevAppApp::InitInstance()8 I# r/ n- e& `# w( e
  495. {6 ^+ D( O/ O7 d" m7 B
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];3 Q5 C! k! u5 o- G- N- U

  497. # D% J' h; U, Q- h( y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    # P% W  ?0 N3 T/ L/ m
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ) X# a3 Y1 A2 \" {  y% n$ V
  500.   {
    : O0 h, Q' I( N  {% R
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 {4 b/ b( a" L
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    , U" f' a! s: I
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    4 r! x3 W' K- X
  504.     {
    " U! Z. U7 O- }* n
  505.       strcpy(szPath,szPathTarget);
    . d+ g4 b' x+ O
  506.       SetCurrentDirectory(szPath);
    - e/ ?5 c8 y% l
  507.     }
    ; d- P& M  m6 I* R: K
  508.   }
    4 h8 P9 }) |" m4 f( b* R
  509. #ifdef _DEBUG/ k2 Q* q' C$ A3 A9 J7 r
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ M% Z6 X6 ^) j/ n$ ]
  511. #else
    8 e8 }5 X) ^0 T! Q0 z6 y1 b- u: Z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 h% Y9 G( e: R1 b: F
  513. #endif
    * |/ \+ G4 O4 p1 p$ v
  514.   {) |8 b- |( ^. e4 T
  515.     char tempFileName[MAX_PATH];
    5 W+ n* c  T  |- f8 s8 s
  516.     strcpy(tempFileName,szPathSource);, Z8 a1 U( V0 u# X( b6 |: R
  517.     tempFileName[strlen(szPathSource)-12]=0;
    6 Q% T% a0 k' \3 X
  518.     strcat(tempFileName,"\\$CSUpdate.exe");/ M* K" ~1 N8 }% `
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    0 K/ n4 v) q2 I5 I
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* }0 p3 k- u( t& X9 M- E$ z# \
  521.     return TRUE;+ }% P' \' A& B) ?
  522.   }
    3 ]6 G5 i& O# Z9 m! X, ~  [( h1 D1 @: E  O
  523.   // Nuke 0118: Delete run.exe
    5 q" C* q/ o& j: x  C
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 N( R: R3 b0 ]- \; s# s
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");* X: \3 ^- V* {5 V
  526.   if(!ReadCfgFile("Config.ini")); }( ^! a, h  s- `( }
  527.   {
    ; ~0 K, \3 ?8 r1 _4 D& X" c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    , |7 h# }5 R6 n8 L8 X0 L8 d" l( @8 b. v
  529.     return TRUE;$ W' }# z1 V0 i, {
  530.   }
    5 k6 |( X; `  J" Y* G
  531.   HANDLE mutex;/ A( q. S; X; R7 @! V5 W
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    , Q7 z2 N( \! w/ h8 C
  533.   {' x4 H" I" e  ?0 B* i  o+ c
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    # ~  |+ u7 Y( \* }) `
  535.     {
    ; k7 D- [7 l$ V9 w
  536.       CloseHandle(mutex);
      u2 F1 W! M9 T6 U2 y  u) e! Y' f
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* S: J. G: {; {/ m8 i( S  V4 S) s
  538.       return TRUE;1 m& V6 a4 v% t; d( ~3 r* c% ~
  539.     }
    ) n' l2 |+ _" q4 W
  540.   }  
    3 b1 o5 m+ K  p8 W! g4 H) \
  541.   CloseHandle(mutex);
    $ u: _. V1 P, f# e

  542. + ^6 |* A5 x7 |  D4 `# L0 k% S
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 r4 @3 y  V) m3 c- v
  544. % g) ^: x* d4 Y- y% w! k
  545.         AfxEnableControlContainer();( N0 D6 M( @& S! Y

  546.   t  @# |- m$ R2 b4 P. ^) S7 A
  547.   bCanUpdate=FALSE;
    & w+ d2 J7 v: W1 y5 _! A( {
  548.   dwStartUpSteps=1;5 `. M9 V8 M" l8 ]
  549.   dwProgramState=AP_NOTHING;
    / l  m# w# Q4 L- J5 G9 j: i& A0 R
  550. 6 H. \, H3 K/ _/ F( J  w' \
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    3 i+ G9 j# x& D$ c0 g1 q
  552. 6 E& }- S% ?1 z- P- u8 }
  553.         // Standard initialization
    # @* E2 u: F: o! N! U
  554.         // If you are not using these features and wish to reduce the size2 K& `8 Y, J8 N. K% r: B
  555.         //  of your final executable, you should remove from the following
    ( f# h+ V; Q4 D. N' A8 T7 I: U
  556.         //  the specific initialization routines you do not need.
    + I! I: X% @- w" F3 g$ N* o
  557. : S: p  D0 P& e
  558. #ifdef _AFXDLL
    1 q+ n9 d. s) v( u: Q2 }
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL' E" P& e/ P; u( Q
  560. #else( O& J. Z. _# d8 b# }: o* N( h
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically: G4 \8 M. f. e' S5 X
  562. #endif: a( d2 W' y) w0 v7 b' B! ?5 u3 E0 q5 }

  563. . N+ y% z! L5 @) D4 k
  564.   dlg=new CRevAppDlg;
    , k6 a0 T" }, ~  L6 ?' I
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    " d! E) ?, S  ~$ ]* l% Q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    * S) ?+ B. x, X1 C+ X5 {  @
  567.   m_pMainWnd=dlg;
    + ~. I: U: I, X9 D5 [  Y
  568. 3 `3 _& }1 z& {
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    % D/ T9 @3 f3 p. ?! B

  570. ( X; b- ?3 }- d* C( U, C) d% N
  571. //  GdiplusStartupInput gdiplusStartupInput;  s# X- I$ }. T4 v4 H3 K! y2 u
  572. //  ULONG_PTR gdiplusToken;
    9 n5 [$ i2 N$ r; h/ g
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    % }% C0 _$ z9 ~  \! w- v
  574. 8 @5 n6 o, K. s, V2 \. ]& n( ~
  575. //        CRevAppDlg dlg;
    ! M' e  K9 x( \8 I5 O
  576. //        int nResponse = dlg.DoModal();
    + I: ~% q0 L" x: y
  577. //        if (nResponse == IDOK)
    + _9 w/ j  b* }! X& w+ i
  578. //        {
    7 o9 A+ a5 }, c8 f6 T: X6 `9 R
  579. //                // TODO: Place code here to handle when the dialog is
    / T6 d$ R( R: z
  580. //                //  dismissed with OK' |7 l1 s, B0 O, h4 m1 M0 n
  581. //        }6 M$ h% T/ _  f1 d4 q3 T
  582. //        else if (nResponse == IDCANCEL)
    # {7 }0 S$ M( a( u
  583. //        {: a, t+ H  F2 `4 f
  584. //                // TODO: Place code here to handle when the dialog is
    9 @0 P- b1 y7 m( \* I
  585. //                //  dismissed with Cancel
    4 J( z( S1 Y: x
  586. //        }% I$ c* G" H! J" Z

  587. ; _, ]" D. Y5 z
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    9 x+ q% W* ^8 t2 C0 {1 d, G
  589.         //  application, rather than start the application's message pump.
    * |( U$ N& J) q* T1 a: M' [; W+ u
  590.         return TRUE;3 f8 G; r: o) c! j
  591. }
    - M! j9 f. m- _5 V# J8 q0 `8 k

  592. 7 y+ z, m* S% B
  593. char *CRevAppApp::strtok3(char *pSource,char *token)) F) N  c  k/ i
  594. {
    ( H! m! x5 B8 I# ?. n0 x" f
  595.   int i;1 ~& _4 f. V# J
  596.   char *szRet;
    8 v2 E  N1 H6 Z) s9 G

  597. 1 S6 P/ H0 S7 W
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    + n% |9 s" h+ v7 C8 @9 {
  599.   if(sztoken)
    - E: c9 x6 ^' a/ r/ K  e' l
  600.   {
    - l/ }: j3 ]0 {- ^
  601.     szRet=&sztoken[itoken];
    % R$ K! _* L9 X
  602.     while(sztoken[itoken]). ~" \9 q- X: s/ i
  603.     {4 L. m0 E, k$ a( T
  604.       for(i=0;i<(int)strlen(token);i++)
    + @) P' ~# e- M3 h5 M
  605.       {
    ( u0 F9 n* ], f! ~. r4 @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; U* |% r: x+ |* L& J
  607.         {: g% q3 o' F; K/ z
  608.           sztoken[itoken++]=0;
    ' k) u/ x$ D; @, J/ f/ ~. F
  609.           sztoken[itoken++]=0;
    9 W5 K# e, F4 z/ E1 o' B" o
  610.           return szRet;- ~/ k7 N7 |2 F% Q
  611.         }% \+ m2 P/ G' f" k0 E
  612.       }7 k; K. x' q: k  f, |/ ~
  613.       itoken++;
    ' j/ W5 q" D3 A$ O; f& Z, X+ f! W
  614.     }* R% V' m8 l  R2 N/ K, \
  615.   }
    ( L  b" b4 k1 ]5 Z, V
  616.   return NULL;" D4 O5 X. C* H) f/ X
  617. }+ r' Z2 |2 k/ U+ z1 u8 I: T
  618. 3 [2 L- v$ H0 s0 ^
  619. void ProcessProc(long Total,long Current)
    . p# y- @6 s. f3 J5 S1 n8 M1 Q+ a
  620. {
    / O1 l: O' g9 u  q& k
  621.         MSG msg;/ Q" D9 k9 z2 Q9 p1 U: R6 W
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);, N/ U- I& H: e- x! R0 x4 s
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));, |# O1 @% ]0 s7 o6 ^
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    " w3 G$ J0 m- q9 }
  625.         {
    4 r: l6 a9 ~/ v% w1 ]
  626.                 if(!GetMessage(&msg,NULL,0,0))! e& t, ~  L0 j+ P) d$ s; S
  627.                 {
    + b* l- k& q) `, H% }" w
  628.                         return;
    % {5 }5 l) X7 t. K1 H1 w5 P* B
  629.                 }
    ; O- \  c9 N% G1 j* ]
  630.                 TranslateMessage(&msg);
    3 M/ w5 M  _4 v9 E$ G
  631.                 DispatchMessage(&msg);
    4 E8 r/ \" b: }" M( v& }
  632.         }       
    9 m0 K+ u9 v6 G' X" X
  633. }
    % r+ r+ G: Q2 h& g. E
  634. & a# h+ q2 @$ q  l( d0 h5 j. [
  635. BOOL bFirstChar=TRUE;
    3 Y" l) N) |6 t1 k) H1 o# I0 n0 K* |

  636. ; L# E" F1 _) X) x* C5 j2 `2 B
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ! A1 Z1 r9 {+ n- t$ C5 b+ B
  638. {
    - w! j8 }+ k* u3 U. w+ ~" ~
  639.         // TODO: Add your specialized code here and/or call the base class
    , G. P% i$ s7 }1 @
  640.   switch(dwProgramState)
    + n1 r9 L: M% [* E# V, m+ N! C# K( Z
  641.   {
    , m% O* Y+ a* x- }+ z8 y+ N/ A+ d& d5 F
  642.   case AP_NOTHING:3 V. W0 D: |2 J" T* w' @9 ^% B
  643.     switch(dwStartUpSteps)
    : V# D6 K! L3 b
  644.     {4 r5 b& \; ^, q/ P) ]2 v
  645.     case 1:! s4 D! g7 T5 q) j" D
  646.       {! Y, z2 s) B! I+ C2 L/ o
  647.         int i;
    4 a7 c- e0 a% S$ w
  648.         CDC *pCDC=dlg->GetDC();
      V7 I7 O: J" D* Q, u# e
  649.         HDC hdcwnd=pCDC->m_hDC;
    % H: B5 i' Y# P" ^
  650. //        Graphics graphics(hdcwnd);
    3 A9 }: ^! S  T. F  K
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 m% @& ^' ]5 x, H; ?1 ^
  652. //        INT iWidth=bitmap.GetWidth();, I% Y: F! Q: W$ x$ ~
  653. //        INT iHeight=bitmap.GetHeight();
    6 Q6 s) K6 @: L$ H/ |- x& E' x: [
  654. //        Color color,colorTemp;
      y' |& g% N9 Z$ b/ @# _' p5 o+ x
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    0 v: j  P7 w5 w
  656. //        {
    . |6 \$ r1 K$ N0 i
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# t2 g5 |9 b; ?. h; L; C8 L8 x
  658. //          {+ A$ V$ Y. H# \) z# n+ ^% w: Q' ~
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    . ~" x1 q, Z0 |4 ^5 B- v6 F3 w
  660. //            colorTemp.SetValue(color.MakeARGB(( t$ H1 @% `( H" {2 j+ }! J
  661. //              (BYTE)(255*iColumn/iWidth),1 B- v( Y( A4 F9 k. W
  662. //              color.GetRed(),
    / u# Q$ K6 y. }3 o/ ?( g
  663. //              color.GetGreen(),3 w" ~6 M+ B! F4 O% s- y# A
  664. //              color.GetBlue()));
    ) R. w$ K8 Z2 p+ v  T
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    + c1 V  M9 b& D! a* y4 O/ ?0 Y- t
  666. //          }( e; O0 L0 S. ~( ]+ W+ y. S4 b
  667. //        }: A" l; u" y$ c* x) U! E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ) o, U4 l! X  ?8 @/ i9 U
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 ?4 d# d; {/ u& z3 n7 y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ( c, i6 r5 b' c+ ~
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 ~4 |% z) o6 L1 Z
  672.         for(i=0;i<240;i+=8)
    ) Q- @# c1 }) ~8 I
  673.         {
    7 o% D4 l. S0 ^8 }2 D5 D6 j
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & b; H- ~* D, g5 i: q8 r3 E" ~/ [
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  |- I  w" G: G
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) l: n9 u7 ^. o' ^- }6 N
  677.           Sleep(33);5 g$ L) H  M. g/ A5 A  f8 ?7 [0 t: E: l
  678.         }2 {" ~0 m' J/ O+ t0 ~- x' ~' f+ S
  679.         Sleep(1000);
    $ C  k% |: b- \+ y
  680.         for(i=240;i>0;i-=8)
    ) d# y0 j- `: f3 G. o2 F) {
  681.         {
    ( C/ Z+ `" V4 B2 A% u
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  h% ~, M5 ]$ O  V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # w+ K6 v- F& V4 f8 y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);2 I  q# V8 @* D2 `* U" l0 u
  685.           Sleep(33);8 J$ P) y' j6 F3 b
  686.         }
    ; m6 g0 J( _3 L5 t) ^3 F- {, B0 v
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    2 P& f9 B7 o% I
  688.         dlg->ReleaseDC(pCDC);% q2 p  J8 R( x8 K, q' Q; w6 Z( X
  689.         DeleteDC(hdctar);6 V9 b- D  V, Q; B( h$ L$ q$ V* i
  690.         DeleteDC(hdcsrc);; O0 o# l2 ^& T3 X; y  ~+ l
  691.         DeleteDC(hdcorg);
    ( I6 }3 r$ l7 @5 a& O4 Q- g
  692.       }, p; f+ U$ J! v) Q) N1 ]; H
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; E5 M/ U" C3 k1 C% x, s
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 s" F3 o4 W5 B. V! ~- H3 R: V- I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");2 Z3 D$ ~! Z; A4 `% g
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");1 v! [, m! n, d3 `
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " j9 b1 i+ P( A: r$ ~
  698.       if(!Dn.Connected())! s. r, n. _$ d0 R! S" u
  699.       {
      o' g, s  H" e' K7 D/ ~
  700.         dwTotalFiles=1;
    1 i& Y; n. a/ h+ P' W) o2 q
  701.         dwDownLoaded=0;0 u6 D+ h8 F4 {8 j0 P" Z3 k
  702.         bSilentStep=TRUE;
    $ b5 s1 K& Z) S2 z; k( F1 T" j  M$ A
  703.         bCompressed=FALSE;
    7 S- u% r8 L$ P7 J$ p) k
  704.         strExtLocal.Empty();
    * G# i( [) I; I8 s5 _
  705.         strFullName="readme.txt";
    / K/ g" ]# z" S6 L! n8 `+ ]
  706.         dwProgramState=AP_CONNECT;! U' A1 K. E/ c
  707.       }
    / t( a0 u* Q6 I% F1 |* k; q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();2 O6 B- m& F. t8 x6 v
  709.       dwStartUpSteps=2;2 W" F5 Z  {0 G$ X( f
  710.       break;+ w* ~; ~- V& y+ V( H/ [
  711.     case 2:7 d% D; ]: _# _# x' A3 }* W3 J1 B
  712.       {
    ' F% x* c/ B1 C" C9 ~
  713.         int iEOF;
    9 N& o# C1 U) f/ c$ @6 D
  714.         FILE *fp;9 ~0 y% [+ U2 h9 t
  715.         char szString[512];
      ?- \3 \) e+ l" U
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");1 K. i# R) r8 \4 W1 p8 T. }% J  p
  717.         if(fp), D8 Q  l" V; h  v1 _) C2 @, v7 U
  718.         {2 N: q% V2 M2 B3 h- C
  719.           do; C+ A) v" K# b# C5 M9 g
  720.           {7 \  K) |) ]% G- f1 t
  721.             iEOF=fscanf(fp,"%s",szString);
    1 `: c' `0 A( N$ k
  722.             if(strlen(szString))' W* y; ^# G5 ~+ R. K% w
  723.             {
    ) S7 A' ?# a3 F2 B% P, ~
  724.               if(bFirstChar)& Y, e5 ?0 [; W0 K
  725.               {3 K: [2 h" F8 j- q  W9 e
  726.                 bFirstChar=FALSE;
    4 u  ~. l) g. d# m; t! {$ Z
  727.                 bConnectIsBig5=FALSE;
    4 [. `  `4 \- P. c: O
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    , q# Y- {" K' v% g
  729.               }
    : j0 J& z6 g  V& [6 k
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));6 c& r) n& d5 N# G4 s
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    * u4 Z+ w  i5 H1 i8 e+ g- ~
  732.               dlg->m_ListText.AddString(szString);
    8 a  b& v$ z" O- X! _
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& G/ C, o( A# V2 N( x  P: A4 e0 M
  734.               *szString=0;
    7 z7 l, f' O& h; z2 j: X( O" t: ?4 |
  735.             }
    & r# S# a4 r0 |7 T* G2 ]8 M- u
  736.           } while(iEOF!=EOF);
    $ a7 M$ [, J% z% ~
  737.           fclose(fp);
    " h, Z! X8 g& X3 c$ D4 J
  738.           unlink(".\\DownLoad\\readme.txt");9 `& C, p6 q5 Z1 |6 G
  739.           dwStartUpSteps=3;6 @) E! ?9 E! u. s+ Z
  740.         }0 f* w+ Y& B& N6 a; Q( ?& {
  741.       }
    : ?5 }. t* |6 Z8 R; T  h
  742.       break;
    0 B7 P; m' I7 @$ {
  743.     case 3:  ^; z& n! w$ M, Q( i8 V
  744.       if(!Dn.Connected())( B5 ?/ e, e+ d. @4 ?
  745.       {
    ( Z5 J& R7 |8 I
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);9 t( W7 S& C, Z" K6 z8 i
  747.         dwTotalFiles=1;
    ( k; u$ D* I* g, p
  748.         dwDownLoaded=0;
      Y- \# U1 w! W( ]# `5 z  n: O4 {
  749.         bSilentStep=TRUE;' Y6 S# ~0 E; r' c7 R' F
  750.         bCompressed=FALSE;" v! p$ i; \* H( e. w* T, f: n
  751.         strExtLocal.Empty();
    . `; [' u$ V; {8 c# w
  752.         strFullName="checkversion.txt";
    ) L- D4 r9 _+ k
  753.         dwProgramState=AP_CONNECT;
    4 K6 O+ T% P, Y3 ]# D( e
  754.       }4 e( v+ q6 C9 D. y3 U7 X3 r
  755.       dwStartUpSteps=4;
    9 C' s2 I7 L/ R6 K4 d2 Z3 G
  756.       break;
    ( y! @8 r/ |2 n  U& Q, S; O) Q; J
  757.     case 4:' M2 i: Q5 X" Q
  758.       {' X& h9 J; z/ H
  759.         FILE *fp;; _: ^" x7 J8 W. k$ J
  760.         char szString1[128];
    ' ]" y, R# k! u
  761.         char szString2[128];1 i' J( Z% w4 P2 {: ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    0 x( t4 ]% J" t
  763.         if(fp)0 B# V: ^7 N% ^
  764.         {; l- u: P' k$ r; M8 _8 V5 G9 F# t& v
  765.           fscanf(fp,"%s",szString1);
    $ [0 V. b+ L* m# u: J/ l8 L
  766.           fclose(fp);9 s# E) @7 w# {5 g: p' t) {; t
  767.           fCheckVersion=atof(szString1);" l9 x4 K5 |3 x8 d
  768.           fp=fopen(".\\checkversion.dat","r");
    ) e$ p9 P$ M% {2 t5 T: A" S
  769.           if(fp)
    - X7 B* ~5 z; L( s
  770.           {
    " C. w$ _3 ?- W
  771.             fscanf(fp,"%s",szString2);
    6 B4 l6 U: L# v# E# X! S3 B$ X
  772.             fclose(fp);
    , J8 A/ n. F5 t7 x4 u
  773.             if(atof(szString1)!=atof(szString2))8 _: F' f- _4 K$ w- A
  774.             {
    6 j& y' G% f! N9 l+ O7 x/ J
  775.               if(!Dn.Connected())
      V" X  Q- g( W: h% }7 c) w6 M
  776.               {. i( n' R) ]- N0 I1 t2 E
  777.                 bFirstUpdate=TRUE;
    9 e  c. k) x" ^; Q+ R
  778.                 dwTotalFiles=1;2 l% y$ c; u8 |9 K: g" G  n
  779.                 dwDownLoaded=0;
    : c# O4 A7 Y5 X1 m1 D  u: M
  780.                 bSilentStep=FALSE;
    2 i2 ^' O9 O* U
  781.                 bCompressed=TRUE;+ V- I! I& y. ?! T$ m6 y
  782.                 strExtLocal=".\\DownLoad\";
    0 _4 e6 J9 W: c
  783.                 strFullName="update.txt";8 |1 \- c/ V* D2 j6 J/ d
  784.                 dwProgramState=AP_CONNECT;9 O3 ]7 [4 r9 ?) K  s. B
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 T5 ~7 g5 A6 Y" l- j* ^
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( J1 }$ \7 _3 I6 R4 m, x5 H8 Q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");4 f4 G" V& `; G2 e% U1 F, j, o

  788. 5 r. C7 g% ~# P$ I) G& R. R
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! R2 I: q) T: O3 C
  790.                 unlink(".\\DownLoad\\checkversion.txt");3 \6 Z  B. h$ P8 i* Z5 q6 Q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ! W0 k. g; {9 k
  792.                 {& _& T) x( w4 J0 W1 g/ L7 b
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ! A* ^, H( N( ]7 F
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    * c; R0 _1 G* M4 X3 g
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 s7 l$ p2 |2 r( a: i' O
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  |5 i  ~% {1 ~0 F! r

  797. + n, d+ n( _6 k7 c+ C, f) ]9 s2 G
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( C; _) @3 d, o3 @' L8 \5 W
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, S& d! b$ x9 O, ]* _
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    # A2 I5 D5 a6 h* r; ?" ?/ g
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( ~5 v* i( f  B" C: |% s
  802.                 }% }* R8 {, n( J; z2 Y: L# S
  803.                 dwStartUpSteps=5;. }( s5 P( }7 X: k( R% y* P
  804.               }9 N7 p. N5 O# S! {; T
  805.             }. S8 Q* U* C3 u; B
  806.             else
    ) v5 _8 T. p! v2 ^" ~7 Q6 R
  807.             {% T3 S% q9 e7 m0 t1 P: H: Z
  808.               unlink(".\\DownLoad\\checkversion.txt");4 v7 t0 r! ~" R, n6 i
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 w) ]6 N8 h& e9 y2 G4 f" i0 c+ f
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' ~  j3 @* P! f6 L+ r( w
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");0 r+ G: h" x. i; L

  812. 2 e5 d# y9 M; q" @5 V
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: O& l0 R, a( [7 Z' N& }
  814.               dwStartUpSteps=99;, w6 v8 `( e7 ^" w& f
  815.               bFinishUpdated=TRUE;
    8 X9 ^/ c; i: o0 K+ F" k# Z
  816.               bCanUpdate=TRUE;
    $ \; ~! F! b, ]9 e, \: p% j3 p5 a
  817.             }$ Y/ m* A# T8 `
  818.           }
    0 }1 E" g& {/ K' S# M2 t
  819.           else6 X: A" N$ `6 y
  820.           {
    " }! x) p, `% ^$ ]# o9 i
  821.             if(!Dn.Connected()), W4 _3 l$ s$ }. _
  822.             {
    9 l# }" J' Z) i  C3 @+ y
  823.               bFirstUpdate=TRUE;
    ; C/ c  |$ D  P3 y4 j4 l
  824.               dwTotalFiles=1;
    2 s0 e& R! h4 T2 j' @! l
  825.               dwDownLoaded=0;% P6 c' E  g% ~2 \; e  Z4 X
  826.               bSilentStep=FALSE;
    1 [9 O, s  V) ?9 X% B5 h
  827.               bCompressed=TRUE;" M+ Q) ~2 |' U! ]* r
  828.               strExtLocal=".\\DownLoad\";9 e8 _5 o3 P. y9 ^& a# g
  829.               strFullName="update.txt";, s% M, O0 s8 j
  830.               dwProgramState=AP_CONNECT;
    ) H  |3 e" c% c4 N# |" k
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- x5 ?# K6 x0 O; r
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: z7 T' R- j+ n
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / ]1 @& O% V; ?  |5 u
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% L, `3 P3 O! A
  835.               unlink(".\\DownLoad\\checkversion.txt");5 |( k* J% W" x
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)8 i  \' Y6 Q# j# |" |7 M: v
  837.               {1 W  }; y2 {8 ^+ Q8 C
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    5 _+ S2 h2 w2 t) d8 D, w$ w
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # u2 Q  E( G8 A: A# i9 j
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    8 C$ M' K5 A1 D
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 r+ F- c) w# D. F  d
  842.                
    9 S8 |4 V& V' h/ ]1 i  L* j
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / I! p  n* i7 f5 J1 _
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * t8 B$ x/ A. |6 \* D
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( ^/ {6 y9 L. {
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' K  k* ^& V6 O1 L- M
  847.               }% M8 Q9 E& c$ x+ w9 C' v0 \  b
  848.               dwStartUpSteps=5;0 j+ }" h- a, q5 Y0 j! E" m( n
  849.             }4 O% L4 |$ O! A( P! I
  850.           }
    2 p$ A& ?$ ]! B9 p' z
  851.         }
    ; u, R% ]  a, A$ d9 \
  852.         else
    8 X9 l4 @8 k9 M* w
  853.         {
    ( a, a" ~- A9 ^: F0 w3 V
  854.           dwStartUpSteps=3;
    ; P3 G* L, \* R. n
  855.         }& x+ j7 B* F4 v+ d% Q6 a$ z$ P
  856.       }- }+ _' o; Q" z+ f2 `, Q% @
  857.       break;
    $ x' L# n' {1 y$ k3 p/ o
  858.     case 5:$ N* X1 u- O# J' t% L# A& D
  859.       {1 o0 ?: ?! p1 M+ k9 G
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)1 z" Y+ H3 L5 A+ ^9 u6 ?
  861.         {! Z$ n3 d5 h/ ~
  862.           int opt_overwrite=1;7 m9 j( N& ]' @% |2 X
  863.           int opt_do_extract_withoutpath=0;, s" N& _2 [2 n
  864.           unzFile uf=NULL;
    0 N0 y) k% D% P) L3 ?
  865. 1 Z0 A8 L) ^3 }) \
  866.           uf=unzOpen("Wsa.zip");
    0 C) G- {! T: n# P  ^2 L  e2 O
  867.           if(uf)
    $ ~, M; j# F3 I. `
  868.           {' g6 n! S, R4 p. i! {
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    6 I# p5 e* b; R, y& R5 q
  870.             unzClose(uf);
    ! }; U/ M( _) t" l$ Q0 y" |4 W
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ( b- G4 [1 ^* u4 z4 L8 R) N
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");  W% g$ N0 o0 V' D4 ~
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");/ w- X4 d: \  h' ?% L. W
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- M# L% l/ m8 I. {/ g
  875.           }
    9 p; P/ _( n! }2 ?9 U. G
  876.           DeleteFile("Wsa.zip" );
    . k: l+ e- G* e& O* }' F1 H% j$ ^
  877.         }
    ( i) P5 B1 }$ F4 t* h6 M) Z
  878. 4 X& {* R& l2 B! W
  879.         if(CheckLocalVersion())( j& U/ h; o3 J# R- y* c4 ^4 U
  880.         {
    + U# t8 j( f  l0 S4 E( M; o
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    0 L* {! B7 s  o" n
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");. l. m  n6 p6 P$ D+ m
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");. ]3 s3 _* j# Z/ X3 l9 r4 D
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * M* S# O& U$ G4 e6 [+ }3 _. V* y- l
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ' H0 Y3 v) K" J+ s* q6 x" _
  886.           dwStartUpSteps=99;
    / R8 K" f2 d2 [2 k" _% n; c
  887.         }
    . N$ d( j! a+ _6 K  q/ x
  888.         else
    ! r% P1 w! w( I$ P) ~( q; w
  889.         {
    7 P  n7 v, [4 ]+ l( n# q
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    3 G$ O; E: u# s2 n6 ?0 s, l
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# Y& y& W  E' s" f
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    8 a5 q  M- Z8 I0 V

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

) K. e1 e6 k! T; e$ S7 |) t  ~- M6 u- Z0 W: 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, 2025-11-1 10:32

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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