找回密碼
 立即注册

CSUpdate.exe源代码

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

: ~$ _# N, m& S0 M4 s3 }; a- x  O# h
  1. / RevApp.cpp : Defines the class behaviors for the application.% H6 l. G" {( G$ B% k
  2. //; I+ f: B& w6 h
  3. : I: ?. P% x7 \5 o$ Q8 u; {( q
  4. #include "stdafx.h"
    4 e7 \: M8 |6 P4 |0 v+ L, l* D
  5. " J- d, g. \; A1 e8 E/ [
  6. //#define UNICODE
    " V$ O( I; ]: n2 j" ?! X
  7. //#include <gdiplus.h>
    5 T& Q( m2 l1 y
  8. //using namespace Gdiplus;( N" S3 K" D, Z$ a/ p9 ?

  9. 0 O2 t! [% L$ o
  10. #include "RevApp.h"
    2 ?* R. ]' O5 z* x& n) x
  11. #include "RevAppDlg.h"* m5 K+ e1 [4 e! B0 D- C8 Q- b

  12. 2 R+ `. }  n  _% _
  13. #pragma warning(disable:4786)
    ( _; r7 C: H" W3 B1 R( c
  14. #include <map>9 }+ W9 X$ P  u$ I( j; V8 F
  15. #include <list>- g$ `9 v; W8 p' M0 ]  M- R( U
  16. #include <direct.h>* U5 l# h* V9 K
  17. % w. Y- W1 N; Y3 s
  18. #ifdef _DEBUG
    5 \+ m6 y) ]( f. x# i
  19. #define new DEBUG_NEW
    : Q, a' s5 t3 H( G7 X+ P
  20. #undef THIS_FILE2 O+ h! F4 b9 \9 I7 q: B: Z
  21. static char THIS_FILE[] = __FILE__;4 @0 ^6 f& g; h4 B1 ~
  22. #endif
    / ]: b( d% R! q4 E8 W/ o
  23. #include "SkinResDef.h"  ]7 D: y% |* L; b! H$ J9 s8 o
  24. #include "ChangeBG.h"7 u: t/ b4 ^# ]1 `5 w5 y
  25. #include "AFXINET.H"
    $ `3 P. D+ x( q6 S

  26. ; L' @. S5 f! e1 k
  27. #define TRADITIONAL_CHINESE 08 \) ?* R3 n7 I
  28. #define SIMPLIFY_CHINESE 1, P& C" B* a9 R1 N8 X
  29. #define ENGLISH 2
    . X# v5 @3 |- E4 ^8 \7 c
  30. int m_iLanguage = ENGLISH;2 W" H) ~* x# h
  31. /////////////////////////////////////////////////////////////////////////////
    # `# x% Z$ C& t' {
  32. // CRevAppApp* i) L. j& l$ a

  33. ! E" t6 C0 j) P1 v; M( _# M
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 l" K: C' w2 y1 J
  35.         //{{AFX_MSG_MAP(CRevAppApp); D+ h8 I1 e' D( G/ H5 q8 ]
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    * }8 ~3 Z8 z3 {# f: {9 z
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!: T# j, B: p. b, m7 T( \
  38.         //}}AFX_MSG
    % G" I* r/ ^/ d) Y; ?1 j- ~! y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ' u4 l6 S; t& S. a" Q
  40. END_MESSAGE_MAP()1 }/ @9 \/ V. j6 j* a" V5 X+ B

  41. ) v+ a. J3 n& d9 Y
  42. /////////////////////////////////////////////////////////////////////////////
    : Q, s: \' j9 \$ y2 B2 q
  43. // CRevAppApp construction) g% ~5 k: t. c3 n' w, n; q

  44. ' @7 t: h4 F% i9 Y9 l% I  a
  45. CRevAppApp::CRevAppApp()
    5 I, {1 s/ `9 e
  46. {
    1 x. e' h, M5 _4 b4 B9 T# V; H* b6 ?4 z
  47.         // TODO: add construction code here,% o& c9 a) z" |, q# ?- }( Y7 o! z8 k
  48.         // Place all significant initialization in InitInstance9 O/ q# x& @! m
  49.   bDisplayIsBig5=FALSE;
    4 a: t' {$ q8 o
  50.   bRestartUpdater=FALSE;
    ( m* E( t1 K: n) w7 o+ ^: `
  51.   bFinishUpdated=FALSE;2 `  J% K8 \& o
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    4 ^/ o% [# I  ]1 w2 x0 [, P7 [
  53.   InitChangeDataBig52GBKS();$ |) U" a2 u2 X0 d" k1 K
  54.   InitChangeDataGBKS2Big5();7 ^1 _8 p9 M2 f0 i- r" V" g1 D* W
  55.         //
    ) ?, T% |( t' V- Z* M3 d
  56.         bClickRunExe = FALSE;
    0 W/ {" G  c+ G/ c+ J4 I2 y
  57.         //
    # J. [4 U5 n8 R1 y1 I
  58. }
    6 P+ r/ _) \  u. l+ F' }5 ^

  59. 7 |( M' x- L% r) L% c: |) c
  60. CRevAppApp::~CRevAppApp()
    # Z2 K9 }. ^9 V
  61. {; r# r" w0 |- w# L  @
  62.         // TODO: add construction code here,$ H' b' V* m  \! p
  63.         // Place all significant initialization in InitInstance  ^+ S1 V7 ]5 v4 L# t1 T, Z3 j
  64.   EndChangeData();6 `" S2 l/ S( Z: ]! ~2 i. d  ?' ]
  65. }# }8 T1 D7 k1 j3 j# \0 X( c) X$ l" f3 \
  66. ! h) Z8 i8 Z4 H- _
  67. ////////////////////////////////////////////////////////////////////////////// u2 W* ?: R  f3 q0 ]( Y& a
  68. // The one and only CRevAppApp object
    # J5 }# c; K8 |! u9 I
  69. , b% [" m/ N/ S. W2 o
  70. CRevAppApp theApp;8 J  B2 ?$ d. {9 z9 C$ k2 h
  71. - ?- M* D/ N  ]8 Q! f3 _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    6 p- `5 z+ F  k% q% Y
  73. {
    5 v6 f4 F9 C. V: }) J3 q
  74.   int iEOF=0;
    . k! F& c9 A* @3 d0 ?9 `, C- l
  75.   char szTempName[MAX_PATH];
    . F  y7 b5 ?! _+ D6 s
  76.   *szFileName=0;
    & _8 [1 f& r9 P9 _; x3 H
  77.   iEOF=fscanf(fp,"%s",szTempName);
    6 v& G. n6 g- p5 O
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    0 n5 G9 o6 s3 L+ a% M, A8 z
  79.   {7 @! i0 B) q; {% S1 z, b3 L
  80.     strcpy(szFileName,&szTempName[1]);- U; E1 f5 d+ m) ~) u  p4 m
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    5 N& b4 U* R& a9 Q( D% P, L
  82.     {
    ( O: C( _3 [& W& H2 h0 P6 ?
  83.       iEOF=fscanf(fp,"%s",szTempName);* o- |8 p6 U! i& y# ^1 D; _
  84.       strcat(szFileName," ");
    & V- d7 l% C, P8 x6 c. r
  85.       strcat(szFileName,szTempName);* N# A  B, |; u: y) E7 n( o8 u
  86.     }
    ' k% Y4 ?1 P5 H. M+ A6 T
  87.     if(strlen(szFileName)>=1)
    . [+ Q* n5 u9 L! Q) X& T% e
  88.     {
    $ W' j& g0 Q3 r4 c7 [* i; i, H( D
  89.       szFileName[strlen(szFileName)-1]=0;
    # Z" g) o6 k/ q8 e& H, W5 I
  90.     }+ Q9 s- |! k% Z; k' T  N" m) q
  91.   }7 }! D% |) e0 M/ h6 E3 c; W
  92.   return szFileName;
    3 b1 i9 {$ _5 X+ N! H/ W: A3 D0 w
  93. }
    " y( L2 E5 C% ?2 b! c% v
  94. # J9 N' [6 S2 Q6 g. j9 h
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    2 \4 {6 K% j# d$ x' D6 _0 B
  96. {/ v6 r$ l0 x: ]2 ?+ U( K
  97.   FILE *fp;
    1 C6 F+ R# R) M: q0 c: q0 ~
  98.   char *key=NULL;0 O6 [: p  {" R, }6 U% ?* v
  99.   char version[MAX_PATH];; `, k; a4 g' y# w* I
  100.   LPUPDATEFILE file,olds;0 e, ~5 B2 l$ ~- a/ P# t1 K. g7 F  {
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / b* G6 x/ S* Z, ~# ~! @7 f

  102. & |( X! D6 w0 q7 V
  103.   UpdateList.clear();* e! w. M9 {" @5 h7 I# f6 m
  104.   UpdateFile.clear();
    $ c- D% z7 v4 k- ^
  105.   if(GetFileAttributes(filename)==-1) return false;# ~& q$ M5 {. z6 f2 t: J0 D" Y$ |
  106.   if(!(fp=fopen(filename,"r"))) return false;1 @+ y: {+ ]4 ^( }8 A- d
  107.   fscanf(fp,"%s",version);
    , `0 G0 b: F: s% Z% j' X
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }* a6 f5 `2 T' p% b; x
  109.   while(fscanf(fp,"%s",version)!=EOF)5 n7 x. H" t' Y6 _2 M
  110.   {
    1 a+ M8 q, u) k3 Q$ E
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 n; T2 o/ t" L, y. ]! _# `' z
  112.     fscanf(fp,"%s",file->path);
    3 T1 ], T# k( I
  113.     ReadFileNames(fp,file->file);
    * d8 t: p2 F7 C* h0 U6 P' G
  114.     strcpy(file->full,".");
    2 N6 G" ^2 D+ V! [& U7 K* x, A
  115.     strcat(file->full,file->path);
    2 C2 V5 [' X' F" _0 o7 ?: V8 k& `
  116.     strcat(file->full,file->file);
    * ^9 z. |% Q% o. ~7 r
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())6 @9 L/ h) l, q; d
  118.     {1 x- g: C+ t+ @2 e
  119.       file->vers=(float)atof(version);% {: A  P% j8 ?  ]8 T
  120.       UpdateList.push_back(file->full);8 \$ S5 _; u0 x' C& b
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    4 A# S0 E  ^/ a; {# X. a6 U; q5 t
  122.     }
      `& R! X3 j! j6 Z/ [6 V
  123.     else9 n% a2 U3 f0 H' g5 R' m
  124.     {7 Z1 P1 Y0 o% S# S6 E$ _' r1 j& T
  125.       olds=(*p).second;
    $ ?, n  ]" O8 g+ [  d; _2 ~2 v1 @
  126.       if(olds->vers<(float)atof(version))
    0 O: f, [) w4 }
  127.       {; g' g" V' Z1 `3 p2 B
  128.         olds->vers=(float)atof(version);9 `7 ?- ^4 b, ]: v# w  Q3 B
  129.       }
    ' f' A/ G" i# n% d7 K
  130.       free(file);
    - F1 n( Q" O% k3 c
  131.     }
    ( E0 {, g5 K% I5 F* Z
  132.   }
    ; D3 q( ~. ^6 C* A! T6 {) n
  133.   fclose(fp);
    3 F% `: I8 X6 d7 ~/ E6 q
  134.   return true;+ S- o, y5 W& o: Z
  135. }
    , U$ h: |8 \9 p8 n7 `

  136. % I- y0 J/ K5 v! R  k
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ( w6 a& B' R" y% g7 n1 [
  138. {7 I- }* T& s  g* Z5 \* A, B9 v
  139.   TCHAR  szFull[MAX_PATH];9 r9 Z" ?) ^8 \) C
  140.   TCHAR *token,*inter;, P. j* [3 k9 P- {$ E0 M
  141.   *szPath=0;
    + s0 h8 \' X1 j  {8 D$ z
  142.   strcpy(szFull,szFullPath);, N" y! U" o0 h) S& T+ M
  143.   token=strtok(szFull,"\\/");5 D+ d6 ^* K& @0 I# V  z" ^% d
  144.   inter=token;5 u1 K4 u3 G% e8 [3 [
  145.   while(token=strtok(NULL,"\\/"))" X+ n5 o( Z$ p4 Q" {
  146.   {# U+ ^5 J8 [+ s: f0 p
  147.     strcat(szPath,inter);" ~2 J1 o0 O- W- p+ x) S' s! f3 c
  148.     strcat(szPath,"\");, x/ z5 D) A0 G; c
  149.     inter=token;
    1 l$ _$ y3 g6 v/ f. p
  150.   }9 [+ e6 x4 i5 z% J% E+ s
  151.   return strlen(szPath);
    5 r- U% w  p7 C0 V4 v$ F4 J' Q
  152. }
    , c' C5 K3 h2 A8 \; [
  153. : X" F; Q, }, U' ^2 R  C0 o2 f
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)9 a- j" d5 i/ `7 n7 }/ \
  155. {
    ( R/ v0 {$ U" i& s6 q
  156.   DWORD attrib=GetFileAttributes(Target);/ X' {. F/ K0 j/ f( E, s/ q
  157.   if(attrib!=-1)7 p$ o' D' P4 \/ ?
  158.   {
    4 T$ R: e. ]# ~) T
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))" ?% d! k, N0 i+ g- R* f
  160.     {% y( p. k! u6 x( b- P: ?% Y- C; D, F
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);! Y3 s8 ]* r( S" r  X+ L7 |+ \- l
  162.       SetFileAttributes(Target,attrib);2 a5 ^# ]/ \; ?' C4 Y8 `" _* S; i
  163.     }/ r, W0 i. M; ~) Q
  164.   }. ]' q5 T7 Q0 f- B: e; p4 h. |$ ~
  165.   CopyFile(Source,Target,Erase);8 |' j) C) l$ o/ _5 F  J; d
  166. }
    5 b5 f# L0 p! D2 f, S
  167. ( [- i" b  D) Q7 O) a
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)4 t2 p4 V+ d" S
  169. {- e4 ]; E' p8 W* T) \4 v
  170.      FILE *fp;
    8 @) u. u3 d5 |! @) p
  171.      char  szBuffer[8192];3 F: E: {/ O( Q; N- k) y+ Z
  172.   va_list  argptr;
    9 K5 D/ A8 q5 S9 V; W' r

  173. 1 z8 |3 W- F, E" ~
  174.         va_start(argptr,message);+ y& L$ W/ c" K0 e  V6 m
  175.         vsprintf(szBuffer,message,argptr);$ E2 z+ v; D. t4 {+ b6 B. p# h
  176.         va_end(argptr);. o' {% M7 O$ k8 w! K; ~
  177.   fp=fopen(FileName,"a");' D7 g! n5 @' V7 f; S' o1 t, w
  178.   if(fp)5 s; s9 H8 v3 q/ [. g
  179.   {
    " R2 _. g" W$ D$ P2 B' }& E8 b' N
  180.     fprintf(fp,szBuffer);4 d: n/ n0 g7 o  ]3 f3 K* R
  181.     fclose(fp);
    $ {: b  k9 ?, Z; l# L
  182.           _flushall();1 M/ V+ c0 @: O6 V/ o
  183.   }" P) W& P2 `1 r& F) q3 r; ?3 Y1 `( l! D
  184. }$ C* T0 {8 F7 }/ _1 l: n3 x5 E
  185. 0 b; H# x1 I- N4 L* w! F
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    * D9 V: T" Z' _7 g4 Z
  187. {
    " ^3 }% v! \: v/ w" I4 y
  188.      FILE *fp;
    6 R. F. t5 }2 z, X/ x) g9 ]4 l
  189.     DWORD  attrib;1 E: O+ W3 w+ W
  190.   attrib=GetFileAttributes(FileName);) W% d$ R# z" _5 X
  191.   if(attrib!=-1)
    3 ^/ K" ~: r1 i, q* d* w$ w
  192.   {! Y7 u$ c) c/ ^/ l9 J" M# r9 U2 z5 ?
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    7 |. m  |) P+ [* d
  194.     if(!SetFileAttributes(FileName,attrib))
    8 M: W9 y) b# \6 Z2 d
  195.     {
    % Q: |2 r  p9 M  Q  h
  196.       return FALSE;! i9 j/ L6 ?( g* C# b6 J2 K( p
  197.     }
    / y, x  J: M  @; Z/ J
  198.   }
    3 l! m1 ^) ^0 C2 O& [3 B( j
  199.   fp=fopen(FileName,"wb");8 D% e& n3 R5 Z( i- _4 ?" w
  200.   if(fp)$ X$ N5 M4 e; a8 }  N1 c
  201.   {5 [; F2 X6 {6 Z- V1 ?
  202.     fclose(fp);- }! d1 d* U* A8 Q* }; G
  203.   }2 Y8 c* m5 V1 `( v5 F+ n) U: u4 t' r3 C
  204.   return TRUE;3 z. w$ c) n/ U0 S# h3 |# P. Z
  205. }
    " i2 b3 K' ?. j+ j% |& q/ a: f3 ]

  206. : Q" P  u  N  e. J
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    * g! G& o( O  }5 H: h: {+ h. n
  208. {+ V8 N  N1 I+ R, Q3 S7 A
  209.   char filename[MAX_PATH];
    ) G& v  V5 i, D0 I
  210.   LPUPDATEFILE file,olds;
    . [" ?0 @6 Z* m& L- \$ y
  211.   std::map<int,CString>::iterator i;( p7 W- M7 U" z' H3 ~( V# c% @4 ^
  212.   std::map<CString,LPUPDATEFILE>::iterator p;- P1 X4 O$ m; p" B; f0 g
  213.   std::list<CString>::iterator l;
    5 `% K% ]8 N1 f4 f5 p- P% ^

  214. - c+ j# s6 g0 O( l4 H9 \1 p
  215.   if(bFirstUpdate)
    ) ?0 g) D* ]; {) f# @7 N! I' D
  216.   {6 G* \3 ^* L& d! B+ _
  217.     dwCurrFile=0;
    # s5 Q8 t8 T7 o9 Q9 [" c& ^
  218.     bFirstUpdate=FALSE;) d* r2 ]. D6 Y/ F& w
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% @& w% F9 ]' H0 F& t
  220.     {1 Q! i( E" E' O% R  n& P' x
  221.       dwTotalFiles=UpdateLocal.size();
    / D& I; O7 t3 D" b2 J
  222.       dwDownLoaded=0;: m0 K0 M# Y. i6 u1 u' {& B3 F% i
  223.       bSilentStep=FALSE;* }8 c% p/ L3 p1 N: C
  224.       bCompressed=TRUE;3 ^/ Z! R1 Q$ C$ i. B& X& [
  225.       strExtLocal.Empty();
    0 m7 ^- z2 X" B+ y: g
  226.       strFullName=(*i).second;3 o( S& E$ o9 u7 a3 H
  227.       dwProgramState=AP_CONNECT;
    ! \0 {& @2 n4 {3 {
  228.       return TRUE;8 C1 n9 Q9 j( V' c) C4 ~! C
  229.     }
    # L% Q. F& Q! u2 H+ Z, L) H- z! G& T
  230.   }) W# ?! Y- w4 ^8 E
  231.   else if(bRestartUpdater==FALSE)
    1 x/ h. `! O: Z  i
  232.   {+ @0 {; [/ o+ `# V# `5 i8 L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())/ }- x0 K( h2 G$ t1 h
  234.     {
    2 n# W$ I2 T5 j% G5 j0 ]
  235.       file=(*p).second;2 R$ u& X& |" L$ T( A
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())4 A( ^( {- n+ z: `+ _4 V. v3 Z* u
  237.       {9 H8 M0 L: f" j9 m
  238.         olds=(*p).second;* H8 [) c1 U$ q$ }
  239.         olds->vers=file->vers;: {! S7 B/ R; b, Y& r6 C+ A7 r
  240.       }( X; D" P) H: y( B- ?5 T
  241.       else
    2 A- t9 D6 L4 W* g
  242.       {
    % F4 B5 d& ]! F5 U) ~
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 ~6 W& R1 B, [
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ( _/ s. x% s' k- f, n- w
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    5 l  a2 P8 a3 q, q( B) t- s0 i
  246.       }
    " b( A7 u1 m& Q" {- }8 |
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");. E, X  J* [/ e- T& H4 r
  248.       sprintf(filename,"(%s)",file->file);* c0 |: F/ a" C! j4 O6 u
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 S- U- Z$ |/ p8 G" e; P7 f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }6 u0 c! G& i5 Y' P2 s5 c$ L7 f) u& w
  251.     }9 p; _& C0 G4 d5 N, e* M
  252.     dwCurrFile++;8 D, R7 F. z. [% H1 t' D# x$ N8 l% ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ P+ _. I* e9 J. c* A, b
  254.     {; @; g+ r, i- t
  255.       bSilentStep=FALSE;
    + s  ^" K6 I) @- C
  256.       bCompressed=TRUE;3 K; Y" I$ J# Y
  257.       strExtLocal.Empty();
    : x; N; i; R4 @4 ?! B" y( R
  258.       strFullName=(*i).second;
    % D  V- v' N; z$ W
  259.       dwProgramState=AP_CONNECT;
    * _; Z8 [7 l- F
  260.       return TRUE;
    / N5 |. E3 m" U& Q- }) w7 \- c4 Y
  261.     }
    ( ?" B; U: n- o0 }
  262.     if(!bRestartUpdater)
    : L3 }5 A+ O* J+ m! O0 i$ s5 v
  263.     {
    * b% M- \8 D# k. `; M
  264.       int iCurrSize,iFileSize;
    * R" l9 k3 {5 y, t0 ^( u
  265.       iCurrSize=0;
    0 K+ V, ^! h/ {1 Q: B; b4 L( v
  266.       iFileSize=UpdateList2.size();
    8 c% l8 @* p; \8 }
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    # w! O- {- N0 I/ u
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");; h! o0 Z3 m' ]+ z/ z1 ?
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");' ~- X# R, w2 e% |8 _7 H! g, N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) y$ ~  ?! f; ~
  271.       Fclearf(".\\update.dat");4 j4 A8 K% O! e  ]0 U
  272.       Fprintf(".\\update.dat","Bloodyf\n");$ h$ `$ R9 A5 {8 ]# e7 _
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 a$ q) z8 [1 }8 _( _# f7 U
  274.       {7 Y( m8 ~; W) d/ s! V  v% M) [3 A
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())- a* L8 c& @4 T( a5 ?
  276.         {
    / o$ X4 A, A# G- p# x
  277.           file=(*p).second;
    ' O2 L' V; C; D0 E* o) P
  278.           sprintf(filename,"(%s)",file->file);; L9 v9 q7 A1 k- n
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 M) z4 N/ }* O7 ^" e) p1 f# u3 J
  280.           iCurrSize++;
    - m+ k, s, r2 x  n1 z' [
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));& Q) l, S1 ^$ F4 l
  282.         }
    4 {) K- M8 K+ G
  283.       }( T" F9 R' p0 D" V: T4 ]
  284.       unlink(".\\update.txt");  ~$ q+ h' n* Q, F# B, R# @
  285.       unlink(".\\update.tmp");
    8 C6 Y3 |$ ^; C9 y) E- D/ C5 d
  286.       Fclearf(".\\checkversion.dat");, I$ ^! F. u  d, {7 N
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);4 A6 ^, C: {7 M
  288.       if(UpdateLocal.size()): {* r0 p: F. g6 {' x3 H' A8 y" S" b
  289.       {$ j4 S; {) U, U) M' w" _/ D/ i
  290.         UpdateLocal.clear();9 G% B) O4 D& f2 t. d; H8 o7 Q
  291.       }
    + a4 i: m) T3 f; C: r: \' b
  292.       if(UpdateFile3.size())- m( z! @2 X; ^+ G9 h2 f' X
  293.       {6 ^3 Z  a$ l: {) a
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  Z% }9 ~+ T" F9 \0 W
  295.         {6 R' t0 m( J% |+ A
  296.           file=(*p).second;2 U$ f" R) a4 x: k% q+ A8 X
  297.           free(file);& {, k7 _$ i) v% W7 E
  298.         }9 U, @6 J, R( l6 }
  299.         UpdateFile3.clear();
    : `* r0 g+ Z+ h
  300.         UpdateList3.clear();
    $ }% E& f1 M3 d1 H% w) |& h
  301.       }$ J$ ~; g6 b5 b. k
  302.       if(UpdateFile2.size())) {" [$ v* [7 p* S1 d% u
  303.       {
    4 S  v" p% l/ {& |' J
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . ]7 l/ j% o# t" i. R' N/ g
  305.         {
    # ^7 c: Z! z- r& u
  306.           file=(*p).second;
    3 Y0 k; W2 O6 x% |
  307.           free(file);
    ; {) h2 \( Y+ s( j7 k. i# y
  308.         }- N+ Q8 i3 q+ u8 f5 P* C, |2 E; e8 a
  309.         UpdateFile2.clear();$ g; a  V; s- b2 X1 P7 u0 {
  310.         UpdateList2.clear();5 k) I& y( J3 ?
  311.       }
    2 e) D& b+ |' _
  312.       if(UpdateFile1.size())
    7 B( C, n2 i+ m( [' d2 b
  313.       {' d9 p9 }- H2 r7 ]+ W, `
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 v  p$ B1 u; ]
  315.         {
    & z& v% n" ~/ P8 N/ q. T9 f$ w
  316.           file=(*p).second;
    8 t9 x  W4 F& D0 d, R8 t
  317.           free(file);
    " l8 Q5 W! G: J8 q" Z% p
  318.         }
    ; Q7 k3 F3 R, t' {! N
  319.         UpdateFile1.clear();
    ( {: f( R& p) D+ |3 M% y
  320.         UpdateList1.clear();+ T- N+ \+ E0 t* X0 n! w8 V) H' G) L% ~
  321.       }7 R  E; ^; d/ @- C) L( _* \
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 K  n0 n/ {) U! g4 C
  323.     }, i" E$ u4 B. Q( x
  324.   }
    ) [5 r% a2 k' Y: a7 t8 K  X0 v4 v
  325.   return FALSE;) w; c8 |! J. _# z0 [) A0 W% I+ C
  326. }
    0 h( e2 W6 h( n8 Q( _5 ]

  327. / }  ]" k, a1 T% Z4 g
  328. void CRevAppApp::ClearAll(void), ?& `2 o! ~& L8 W- ]. J
  329. {
    9 ~- I; _5 |' \; g) a, m8 v
  330.   LPUPDATEFILE file;9 X; M7 ~, m( |' \4 ?/ i
  331.   std::map<CString,LPUPDATEFILE>::iterator p;/ ^4 B, z3 V- i1 y

  332. 0 K6 m3 {8 u$ N! i) w
  333.   if(UpdateLocal.size())$ j0 I% {0 Y4 _
  334.   {
      \: L' l8 I8 a& c; u- B
  335.     UpdateLocal.clear();
    " `% r+ Q1 F  w; d, C/ Z& K0 S0 a4 u
  336.   }
    ' N( f# F4 v- ~. _3 l
  337.   if(UpdateFile3.size())+ I, Z/ [  ~6 N0 p
  338.   {
    . U8 \) g6 T" q5 w5 D$ Y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    $ n4 x5 O" |8 J: n6 E5 d/ v. l
  340.     {
    ( @& y" ?" E" p
  341.       file=(*p).second;
    # @+ @" u0 a; t4 e
  342.       free(file);0 ~; x  [! U( ?/ o
  343.     }: o1 S" [) @7 Z6 Y# I* N3 Z' {
  344.     UpdateFile3.clear();
    - H9 q! ^! J& F$ V% f# x5 U/ h
  345.     UpdateList3.clear();
    , b/ C  Z5 b9 s* w1 Z( O( v
  346.   }- V2 ~6 `7 ^3 U3 c+ n/ V% O
  347.   if(UpdateFile2.size())5 n1 a  m$ K5 z3 C/ _5 v! u! k
  348.   {+ G6 p& r6 O# H+ I5 H; L
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! k0 b% a/ S; d
  350.     {
    5 E  ~1 A! u$ _9 j
  351.       file=(*p).second;
    4 z1 a6 K* B; s8 b3 E7 K, p5 U7 z
  352.       free(file);
    . g' Y! t8 j6 j9 l) x, ^; B
  353.     }" t7 Q, F% l2 }6 H* a% n8 n
  354.     UpdateFile2.clear();
    ; P- b9 H; c* c2 i  E
  355.     UpdateList2.clear();2 `6 \7 c) ~2 E3 ^0 `) Y
  356.   }. `& s' S" W- j* q
  357.   if(UpdateFile1.size())/ q  ~7 `7 Z; ]- i! m6 @: w" B
  358.   {
    6 d8 X* i# X8 `  E/ d! z; q: q. s1 x
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) c8 Q, K+ U* a# U
  360.     {
    8 o+ t( L4 c5 x
  361.       file=(*p).second;
    % d  Q; K5 k4 n3 p2 @) ]0 U
  362.       free(file);9 @* e" d9 e4 \
  363.     }) I( F/ C  x& f; f, i$ H+ a
  364.     UpdateFile1.clear();' m  d" q+ P+ A) u3 s4 y# n7 L& q4 R6 t
  365.     UpdateList1.clear();
    ' C" p5 s7 r) _. J
  366.   }5 w) p- R6 ~; p: S( w  h0 ?% V
  367. }  , ?9 N6 F  Q5 R( G6 C
  368.   + o4 ?* Y  F5 ^! L
  369. BOOL CRevAppApp::CheckLocalVersion(void)1 u7 M6 @; X1 D" j" P, m' L/ O1 Q
  370. {" K" S- s: [1 G0 ]! o, e0 _
  371.   int c;: D! M$ w4 f& v+ e/ g$ z6 E1 `
  372.   LPUPDATEFILE file1,file2;8 L8 f2 I/ t" ]* i5 v# K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;5 R4 C# b/ G1 j
  374.   std::list<CString>::iterator l;
    6 i+ \& |# \3 m

  375. / {7 _/ ~1 @' O9 w
  376.   UpdateLocal.clear();
    0 w$ y9 k1 @2 B/ s1 E6 ?$ G$ o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; `  P5 N6 r3 I0 f- Y6 {( [( z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    3 |' z- x& x: X0 c) S0 T
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + R7 ^! [' ^& X! V' L' Y0 @
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);) {+ O6 U3 T. I+ i% e' ], M0 l
  381.   if(UpdateFile3.size())" s$ w( T$ Z/ B" }, w8 U
  382.   {
    + U& ^5 t" v' S* r
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 n2 G. C: v( J
  384.     {
    - u# r$ W7 ]7 F7 F- I4 a
  385.       file2=(LPUPDATEFILE)(*i).second;
    8 ^; {$ T) d* e; z
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())/ |  }; C0 ^# `0 }& {: L$ l
  387.       {5 D/ Q2 B& b4 w' ^2 \. X4 h
  388.         file1=(LPUPDATEFILE)(*p).second;6 S- P# R# Q3 p- w6 D' o
  389.         file1->vers=file2->vers;
    # t9 ?  u4 s9 G) j7 R8 g
  390.       }
    " c8 Y0 y  m7 b' |
  391.       else3 l5 ]$ Z/ u% h
  392.       {
    : O8 p3 O6 t+ [# j4 d  w: ~( G
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 b; w/ U% U* s' D
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" O" K" K; U! M. E5 D$ f
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));; J* p) b1 Z' ]4 @" h
  396.       }
    + B8 g; Z1 g6 k. i& G
  397.     }
    $ g3 {1 L! W6 P1 G- i* d6 R
  398.   }
    * [& w9 k+ {, x: G6 T" w
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 F- I6 B2 o. i6 {0 l% K# \# d
  400.   {5 I) c+ p& n1 i( T0 a2 T
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())3 p- M% G- I$ e5 J/ G% U
  402.     {5 i; [" l. k; B, }, Y3 Z' K
  403.       file2=(LPUPDATEFILE)(*i).second;  A" P$ B& I" M. V
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ( _! A! _: F5 e6 i* Y
  405.       {
    " K% b1 ^1 {& o  T! S0 n/ m
  406.         file1=(LPUPDATEFILE)(*p).second;% {( f9 {" F7 Q4 c6 J. H( L6 V
  407.         if(file1->vers!=file2->vers)
    8 i+ s- \/ U" P. G$ p+ N
  408.         {
    2 p& n' }5 |9 S% e
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % Z' Z4 ]' y( n0 d% O
  410.           c++;, j+ L% w3 a8 C2 d* ^; H
  411.         }
    ! b) b, ^& Q+ k! ?- e% w
  412.       }7 i' t& j. p8 R+ i5 {4 W
  413.       else6 L5 [. Z) K$ h8 w! g
  414.       {0 v3 C! B9 ^( S# F) h- p( c
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! X/ N2 D: b# F5 p! i' ?
  416.         c++;0 f2 a7 N. v& V+ Q! n% f6 R6 U
  417.       }( t6 U4 w$ I8 k( H$ U; H
  418.     }8 c( b0 s; a* j, \* `* P, s! b
  419.   }4 k1 i3 V. _+ P! J/ j% B, l+ k
  420.   unlink(".\\DownLoad\\update.txt");) X6 @+ \; M$ \+ H* F
  421.   if(UpdateLocal.size()) return TRUE;3 B# i0 X3 ~8 O- n1 P, ^
  422.   else                   return FALSE;+ A: \0 T$ M! Q# i
  423. }
    . D- G  J) n) g0 P, y

  424. 8 _. u' g6 P% l9 B
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"9 k+ O( @# y$ f$ u% L
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    + M7 R- H- |" @$ i4 v1 P

  427. # b6 ^6 o! v, P: |" G2 Z4 C
  428. * \. |  e+ _7 O- U; B$ d* G

  429. 6 B- F7 o2 U7 G7 x: y3 X: L! j
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)4 [& d9 @4 b: z! E/ C2 U9 f: K0 _
  431. {; j( l: p5 d! q& Y) J6 w  g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;. m# z3 F2 l& ]* e  K; T) r
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( N7 Z% \0 ]) H( n) z
  434.   {+ F6 @3 a+ n# k
  435.     char szLanguage[50];( b4 b, q& o+ L& d1 N, p: S4 ]& o
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ Y& b9 ], \# P4 m2 f
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) o5 ^0 U6 f; O7 S" G& b
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 ^! a6 w/ d/ G0 ^: [
  439.     else                                   m_iLanguage=ENGLISH;
    * l# ^3 X$ u6 q* d
  440.     char szRegister[100];
    9 h* ^4 h" n% i% G6 r2 H
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 z  P! D, L9 N5 \! U
  442.     strRegsName=szRegister;
    : K8 l8 M# q- o, }
  443.     char szPatchURL[100];
    " D$ J" Q9 [, T
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , M$ f4 a9 U) m* E! o& q% |
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, g. l  [6 z. a+ `- B3 t
  446.   }
    " Y; ^  Q7 @4 n
  447.   else
    * N- |. u* q& X) ]" [
  448.   {
    ' K# V. F  s7 w
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 Y# f$ X& H* L' R2 O6 V5 ^/ R1 C
  450.     strRegsName=DEFAULT_REG_URL;
    , ?1 I1 D8 A: b+ N+ _4 s! Q$ {. Z
  451.   }
    % {: n: j% z! x' P2 z9 g
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    # s" Z/ B5 y' @1 n0 d! c
  453.   {
    7 D- h3 r  D; i- I- d
  454.     char szIP[50];
    4 ^; R. a" w; L5 \8 T
  455.     char szDIR[300];
    ! J. U  X2 E# G# e9 n
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    - `6 l& s( q$ e
  457.     {4 G# b' Q4 u* q. n
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ; d$ u1 @1 ^3 e( L" \) R
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");* B) v( i! g' `; Z, c
  460.       strHostName=szIP;) t7 O. u  ^4 G. L, [
  461.       strHostPath.Format("/%s",szDIR);
    , X9 Z, T7 n1 r: L# z
  462.     }
    2 s" a  g' S8 q5 P) d: T4 D; K
  463.     else6 [( f; n# |1 c6 y. c
  464.     {9 j4 K+ v+ K3 c/ }- `9 P: }
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' j* S3 v! V: G# [
  466.       {
    " m6 s- F( Z* t0 c
  467.         char szLanguage[50];
      c7 @3 S* F+ \6 j! D
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 ?+ K* O' X( F4 G2 {$ E" N. u6 I* \9 O
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. z2 c9 q" [" f: q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! `( ~- s! g* t: z
  471.         else                                   m_iLanguage=ENGLISH;- B# C. k& B) }( h: p
  472.         char szRegister[100];
    ) h) {+ c5 p  S6 f0 Y/ a  K7 w; I
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 ^  _  I# r0 J/ }# f: B
  474.         strRegsName=szRegister;
    + ]) q1 E  c, l2 Y2 x
  475.         char szPatchURL[100];( t; o1 l' u! H
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ m7 O# t/ J2 v# q" {) K4 @
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 T1 j" r2 Y# z2 ^, V$ W
  478.       }
    7 A+ ]2 P- f, y! f3 Z
  479.       else9 I/ F3 L2 Z* \* P: X
  480.       {
    + O: a9 D% {* g' p% k7 X
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( L# [7 s, ^& Y% k# J' V5 u6 `
  482.         strRegsName=DEFAULT_REG_URL;' n  K7 Q3 b( |) U' B& _
  483.       }
    & r1 W: M9 S/ ~& S7 w+ y
  484.     }
    & Q' b: f/ M) @& s7 k
  485.   }
      X9 E, f- g6 j+ U) d: j3 V
  486.   return true;  o9 `3 i/ A1 x& y5 d. I8 l
  487. }
    2 \+ @5 b  s' h# G2 V  a' t; v8 l

  488. ! x: ~; [6 S( ?8 c9 L3 c0 }1 z' j
  489. #include ".\ZLib\unzip.h") ?2 P/ q& O$ ]9 [+ L" z" ~
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 [7 P  i* m6 J2 V1 p0 A
  491. /////////////////////////////////////////////////////////////////////////////: I8 M1 d) Y6 G# ^2 e' E4 N9 `
  492. // CRevAppApp initialization
    ) I0 M1 \$ z# i" u! L7 t

  493. . f  s2 k' H# B$ W+ s
  494. BOOL CRevAppApp::InitInstance()
    . B" F. B3 ?% t4 ~9 u
  495. {' u% T- |% f' N6 t
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
      s1 S: b9 V8 m- x# Y: A* A6 Z4 J; R

  497. " d& Y- k2 N6 }; W. Q% h" }7 ^
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  ~$ x$ _. R. B( q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))' P- P" t% C5 q& ?" m
  500.   {% a' d: i+ J7 o& w" f
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");* x5 S0 M) S+ m
  502.     GetPathFromFullPath(szPathTarget,szPathSource);9 b1 d1 c8 [" B1 j: _
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))! D6 O0 O% s( P% C6 ~4 x
  504.     {. ]" P  T+ {6 E7 O; ]4 [1 J
  505.       strcpy(szPath,szPathTarget);/ p/ g+ j" v4 V# n) Z
  506.       SetCurrentDirectory(szPath);
    ) x" C4 I6 r) h8 L) G# D4 l
  507.     }
    $ W  P$ W# V) Q* w5 q: g7 q- ]
  508.   }
    8 C2 z$ U( G+ P
  509. #ifdef _DEBUG6 d6 m' z$ J2 l' b( J
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! R3 L( X" O) f
  511. #else
    / A" m+ `! R% K% q" s8 C  N( L" h. H
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # n' Q8 i" }) Z* k& J' S: o
  513. #endif
    ) i; I1 P- g& h1 q/ Y
  514.   {/ l! t1 i5 Z; F$ N1 b# h# y& E
  515.     char tempFileName[MAX_PATH];1 |( {: {5 K) b& k
  516.     strcpy(tempFileName,szPathSource);
    : j$ Q$ s) b8 a4 U6 ~+ _/ N/ C
  517.     tempFileName[strlen(szPathSource)-12]=0;
    0 e7 z# N' k0 R/ H7 Y8 G/ D
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    " K' |6 x  p" _+ P2 V9 Y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);. R; }7 f/ z7 R) w
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);; K$ y3 t& `2 I: W3 u% w2 O8 K! W
  521.     return TRUE;: p9 {! K% P' B6 F
  522.   }
    ) Y: Y! [: s3 Q, S' c$ \' F
  523.   // Nuke 0118: Delete run.exe
    ' X4 u) I3 b6 ^
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 A5 i7 F0 w. W3 J/ Q! }: L1 `
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");8 G& v6 t+ C9 E& \  G
  526.   if(!ReadCfgFile("Config.ini"))
    : P' A( |- Z, n( g
  527.   {
    ! m2 V4 t$ k, q9 M
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);+ D0 ]: Q+ v; V+ _
  529.     return TRUE;1 {* e2 I' u) ?  o4 E; y/ y0 P
  530.   }
    6 f; e4 V" O7 \
  531.   HANDLE mutex;
      Y  V8 k2 \- L) g
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))! s! e  |& [" S$ S  J
  533.   {
    - u# o0 P; Q: S, m5 Z& D# g' A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    : \  l5 l, V7 t# v; j, E% I
  535.     {
    " Q( k# w( Q# ~& a
  536.       CloseHandle(mutex);
    $ M6 G, i, C  R  }
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);7 `& t' N2 z& x6 J0 E
  538.       return TRUE;
    & V/ m! Y. R# L$ Z; j
  539.     }) Y1 ]: r  T1 o* l$ \
  540.   }  7 |: L. z3 J9 L# f
  541.   CloseHandle(mutex);
    - ]0 E+ s: m' q1 T' W# K  `

  542. # A5 W/ p) E7 t2 C: L3 ~# R
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);8 S  g4 i9 P6 n! G. G

  544. & A) S7 Y; H' z3 Y, a' w0 H
  545.         AfxEnableControlContainer();! u1 W  O! Z+ F- y$ R% _5 o

  546.   ^5 ^- ?0 [: Y9 `/ H7 n, d
  547.   bCanUpdate=FALSE;, g: S9 S6 t4 S1 M" I  M' x. _; K7 t
  548.   dwStartUpSteps=1;9 A* p" O* q9 l1 N$ {* m4 u+ j
  549.   dwProgramState=AP_NOTHING;9 p% `* ]0 j7 K/ S

  550. 0 B, [3 q& |5 u2 s: ^; y, ~
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);1 B% V% h3 b  m9 @/ ~1 B" f

  552. & z9 R0 f7 I0 I6 n4 u$ X; b
  553.         // Standard initialization& N- g7 b1 ]# B8 ~0 S. {
  554.         // If you are not using these features and wish to reduce the size
    ) O0 P9 O4 v5 ~+ o1 B& [7 k$ t* c0 s5 ]
  555.         //  of your final executable, you should remove from the following
    $ q  E0 w2 p! h/ Z1 P
  556.         //  the specific initialization routines you do not need.
    # R( M, `* [2 ~4 i5 N$ B6 c

  557. " j. y+ F; u/ }, r0 B# j
  558. #ifdef _AFXDLL
    5 a8 T( a& J5 o
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ! f. S, H( c) q" u. C. t- k& K
  560. #else0 Q, P8 H9 E" Y! {- A* G
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically2 D9 P3 z) Q$ o1 C
  562. #endif, U- g( d' x/ H2 h
  563. 1 _9 q) ^6 h& F( i; ?) D: c* V3 f& M* R
  564.   dlg=new CRevAppDlg;
    5 n7 g6 N& l) n5 ]2 x
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' t( Y: O! ^( u3 K4 ^) }) a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);& X8 Y, J2 ?( s) |! @/ F! p: s
  567.   m_pMainWnd=dlg;
    ' [7 n4 v5 F+ ], X  [4 R( ~

  568. + G* o, e. ~0 e: ]8 K
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ; r  s. E. R- |9 v

  570. 5 S$ j) j0 S) E1 d
  571. //  GdiplusStartupInput gdiplusStartupInput;1 v. ~  ~% w4 P0 Z, ^; t
  572. //  ULONG_PTR gdiplusToken;, o% l4 R+ M. z  v% D0 M; ]' K
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& ]; y# m3 ~2 Q+ j: t, y

  574. . g) l/ ]: c6 r- G  p$ k
  575. //        CRevAppDlg dlg;
    . m9 y; o! E) L; \5 \2 R
  576. //        int nResponse = dlg.DoModal();
    1 K" I8 j! ~* k* P, }2 ~. k
  577. //        if (nResponse == IDOK)5 o, q1 }$ h) l  \. j- x- h
  578. //        {
    6 `" h( Y- U, s5 N
  579. //                // TODO: Place code here to handle when the dialog is
    " u1 D- ]. V2 g! W7 H* Q
  580. //                //  dismissed with OK
    0 r; p/ m4 G/ S: O0 Z; ?
  581. //        }
    2 i3 p% }* c" e3 _
  582. //        else if (nResponse == IDCANCEL)
    * j# Q  }( p3 |% w
  583. //        {
    / C2 ]7 W! N. n- x: I
  584. //                // TODO: Place code here to handle when the dialog is7 Y7 J8 M- h, Q! m! M2 t
  585. //                //  dismissed with Cancel
      |* W0 l) S; u
  586. //        }) ~9 Y$ {* d: I6 _9 s2 @# c2 k

  587. " ~, Q6 K  V9 U8 |$ x
  588.         // Since the dialog has been closed, return FALSE so that we exit the% b* ]3 ~4 |5 r% F( G" p, X0 k1 l. m
  589.         //  application, rather than start the application's message pump.
    3 h! j( l& ]; U+ }
  590.         return TRUE;
    . C; i, o' N! k( ~) U# U" t
  591. }
    0 a$ q# G) Q! v7 g! q4 w

  592. 8 z, H! Z9 g: R& u: y6 ]- I
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    7 k3 X$ f2 g3 n6 C3 w
  594. {
    ' k# w1 h. c7 j/ Q0 x, n
  595.   int i;
    " e( g# p+ W$ t3 P+ g& h6 \' T, ?
  596.   char *szRet;% m/ B. c2 w( N" z- B

  597. 5 ~( E# @) U: \% i, V% ?  ~
  598.   if(pSource) { itoken=0; sztoken=pSource; }5 V7 W* W# z$ N6 A/ z
  599.   if(sztoken)
    : Z% u0 @& ]7 `( ^9 D8 X
  600.   {
    0 v: q2 d& k3 ~; G+ r9 Z
  601.     szRet=&sztoken[itoken];
    6 x  I# G1 m" ~' b& T. Q
  602.     while(sztoken[itoken])
    0 m6 M7 i) d7 |) G, t# ?
  603.     {1 P3 r  U: q, t$ B; u0 j2 ~, \
  604.       for(i=0;i<(int)strlen(token);i++)- q' Z) }3 Q  c& o
  605.       {, h- b- Y) W1 \/ M( C' o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])0 h- D) b  Y' }" M/ I7 U- \
  607.         {
    7 p  K% o% _$ w  o9 t
  608.           sztoken[itoken++]=0;
    & t' o! R, W2 n9 B* W$ g2 E
  609.           sztoken[itoken++]=0;$ E0 X7 y% g2 F& j
  610.           return szRet;/ N* ~. s, x9 d6 I# k4 p
  611.         }9 t# a' i- g2 e: ^$ n
  612.       }
    % S: `3 |+ r$ X9 Y3 j  V
  613.       itoken++;' v( t& J) B6 Y+ h) @: U
  614.     }1 b: r9 j* e+ K! V" `/ J
  615.   }! v: `3 n: m6 j  h
  616.   return NULL;- e1 b$ k: P, U& T" \9 I3 O9 ?$ E
  617. }
    0 t7 C' P% w( N$ i. R4 G) z$ g

  618. ' V% f( }5 n% ^( q
  619. void ProcessProc(long Total,long Current)' U! K' ~7 F% T. q9 U5 b2 J
  620. {
    3 @5 ]) U; ~/ o3 k, G
  621.         MSG msg;
    / ]4 |8 q0 n6 ]1 M" o! p
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 \, n, i: _& N9 Y4 n4 \3 R
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    + T* \& L+ ?: R
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)): B% a" |$ y0 `8 Z& \& Y
  625.         {, k6 r! _; C) [9 j' O. @
  626.                 if(!GetMessage(&msg,NULL,0,0))* A- }7 M- |, }/ `) {( s( `1 e
  627.                 {
    - d5 M8 E7 M& g/ {3 w& B! |
  628.                         return;: s% Z1 p) \" S) L6 K3 J$ G+ ?
  629.                 }
    , n- f% r8 p, w0 [6 A
  630.                 TranslateMessage(&msg);5 F5 J0 t4 M% Y+ m
  631.                 DispatchMessage(&msg);2 {! Q, O8 u5 I) |7 w/ \
  632.         }       
    : w1 |0 b& r! g/ ~& G
  633. }  O* s) W  ^7 W, ~* X( ^- v
  634. ! @+ `+ n4 ?' ^. c
  635. BOOL bFirstChar=TRUE;
    4 p! D, j! T" `) u* z; H

  636. 5 r0 n+ \4 R7 H* S
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    6 ]0 T/ @; P/ P4 O2 y
  638. {
    8 m' O( q8 N4 k; B
  639.         // TODO: Add your specialized code here and/or call the base class
    + {3 N: A- V) L& @, `+ ]
  640.   switch(dwProgramState)* L7 M9 ?4 ~* ~; s' z
  641.   {! `5 m2 O3 x' q7 k
  642.   case AP_NOTHING:
    $ j9 }0 M+ S: X  I  w" M& C* U
  643.     switch(dwStartUpSteps)
    2 D( @% Z8 r# e8 s: r7 ?, E; S# V
  644.     {4 W9 k! x/ ~! D! t
  645.     case 1:4 o6 O  O$ S* \
  646.       {. B7 h4 z) h2 x9 z2 }
  647.         int i;
    9 \- a, f, E; i, p% K. c5 b
  648.         CDC *pCDC=dlg->GetDC();; G, {0 O4 Z" ^) \* d
  649.         HDC hdcwnd=pCDC->m_hDC;
    6 I# s/ g. r% {. Y, ^- L4 c$ C
  650. //        Graphics graphics(hdcwnd);& K; k" z2 K3 R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");% k1 }% f3 ^/ }* C1 ~; w& E
  652. //        INT iWidth=bitmap.GetWidth();
    # i( a$ I  Z" P  `1 z( _% K( |, ?
  653. //        INT iHeight=bitmap.GetHeight();9 b2 P/ h) F$ \2 X9 P
  654. //        Color color,colorTemp;
    ! o% ?9 ?' ^+ P
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    7 f6 r- d* I- o) Z- e( `; x
  656. //        {
    8 v2 d+ P7 W/ D3 V
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++): @" |, Z8 ~. H; }2 w
  658. //          {
    + ^6 c9 Y2 @* k( X+ p2 D- t
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    & u  P! {1 C4 o! _' v5 H- [
  660. //            colorTemp.SetValue(color.MakeARGB(* R/ `+ c8 l" n7 |
  661. //              (BYTE)(255*iColumn/iWidth),1 P! q: `/ v2 c) U
  662. //              color.GetRed(),- i" i, z/ G* L0 p/ S$ T% _
  663. //              color.GetGreen(),
    , i# D, a% v/ P3 K- R+ Z0 K; Z+ e0 C
  664. //              color.GetBlue()));. L1 M; _: I( n6 S4 Q* b/ z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' v) ~: E" J- n  I1 }$ C% p9 G
  666. //          }
    9 H$ U/ R5 M! a! @& g5 Z, H
  667. //        }
    - U! S1 f) D# u$ f1 z! |
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);  }! U; U4 F6 z: ?8 D
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " \2 A" j2 z. L& ?5 g3 i
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");, H" k1 n. C, k) Z0 t
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 K! T0 g/ f& i3 W
  672.         for(i=0;i<240;i+=8)
    " |7 ]3 {+ f* `! D' l; Y$ z  l
  673.         {
    # ?. g- q' a6 R% b/ Z5 U/ p" y7 @
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);- j' ~" e- O1 N0 i! j9 Q. \
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 C2 Z. Y& b8 V% T% @4 o
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' t5 }! K: f7 ]
  677.           Sleep(33);
    : @6 ~2 N% Y! b, m
  678.         }, f& J& M* @9 {1 r
  679.         Sleep(1000);
    + B$ a, r' a0 [$ ^8 J1 o
  680.         for(i=240;i>0;i-=8)
    1 C! W3 p5 `) V
  681.         {* i% ~. b: v& a+ N+ Z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 j/ r% U7 \7 \1 k# @" S
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 x9 {5 d+ T: E8 ^! I! M' L! S
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% K2 J% p* j& v; F1 g
  685.           Sleep(33);
    2 Z9 H0 S/ |& m4 f7 `, w. z
  686.         }! W- p* k1 I; T+ m7 G
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);  A7 V9 P* _+ F2 c
  688.         dlg->ReleaseDC(pCDC);' ~* r# M  \4 u* B3 {, k
  689.         DeleteDC(hdctar);
    % i7 f* K7 `. q; B8 j
  690.         DeleteDC(hdcsrc);
    " y0 d; O7 l1 c) F$ z. S* r, I
  691.         DeleteDC(hdcorg);" S7 |6 k3 l$ }! t8 u8 j  c
  692.       }6 d! _3 x8 H& e0 R2 f2 D, w
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);3 ~. J+ q# O- C
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");( M* P4 v" z/ \% ?- q; }7 U& L
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 o, H' a8 u. S* m( m
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , i4 |6 P! L1 V: p1 P  p2 |! I
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 P# h9 |8 {" ?" N  E) x; }3 h
  698.       if(!Dn.Connected())* W% }7 }0 k+ Q8 n# r% c
  699.       {
    3 K4 ?, X* r8 s% Q8 T* d+ @3 v
  700.         dwTotalFiles=1;
    1 c2 b: N6 |# ^9 k# X6 p; o1 p
  701.         dwDownLoaded=0;9 n; u1 m+ `- h7 Y' ~* W% B9 i
  702.         bSilentStep=TRUE;( ]$ @9 v" K  n1 Q6 j5 E: s5 K
  703.         bCompressed=FALSE;
    7 t! Z: I) m: c6 |, s8 G
  704.         strExtLocal.Empty();7 q8 s- k9 w1 `3 T
  705.         strFullName="readme.txt";
    3 r& n2 _- S, \4 V, K+ q- Z
  706.         dwProgramState=AP_CONNECT;
    ( E) v* S$ m& L: o8 @
  707.       }
      G, b! i3 v3 x% Z& c- {
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    9 N. q! F* t- K* H; [2 j; \
  709.       dwStartUpSteps=2;
    + h* C" L; L* y4 j5 C
  710.       break;& n2 t. I. T" h0 Q, J1 _
  711.     case 2:, F% ?8 ?+ X) I) c( k
  712.       {
    $ m) m& j7 _2 P% J0 z
  713.         int iEOF;' e6 Y6 h) o, Z
  714.         FILE *fp;2 j7 N! R. |  a4 c$ D2 q
  715.         char szString[512];& G: Z/ V* Q$ C1 X& o! c
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");) z& `2 d4 |" e' P& ?" @
  717.         if(fp)1 P# N+ @" A  v0 \$ ~2 [+ Z
  718.         {
    , t$ R4 J9 i3 {* v* F
  719.           do# A2 o" r0 L: z9 [
  720.           {! H  `3 U! p9 s
  721.             iEOF=fscanf(fp,"%s",szString);8 ]& f# a& @9 V1 z& g$ c: J) Q
  722.             if(strlen(szString))* h( S# y; n* w( B
  723.             {+ c4 Q- v7 I# e0 Y( r' O, V- Q4 ?  g
  724.               if(bFirstChar); X8 Q; t$ f& o1 Z! `; Y
  725.               {
    ) A, ^; A5 \! {. U
  726.                 bFirstChar=FALSE;; h% H2 U0 P8 @  `3 e
  727.                 bConnectIsBig5=FALSE;
    ( }+ D0 _8 A6 o5 |' Y! B
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ) {5 V" d# r( o# I4 R% Y
  729.               }
    3 e  Z  Q; u. _" O/ U
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    $ \2 V) {) `) T+ V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ; A! {% a) H' I: }4 V5 D+ S& V
  732.               dlg->m_ListText.AddString(szString);
    4 r: R' Y$ z5 J, m6 a; b* r
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 i( f  i. |' k6 p, K
  734.               *szString=0;. C9 M- S1 d" U. n3 K# K
  735.             }
    . B5 J3 Z1 P5 q" q: j1 Q4 j8 M
  736.           } while(iEOF!=EOF);; c$ h! O, ~2 ^( J/ \
  737.           fclose(fp);, {* }& w8 U, x4 g' @
  738.           unlink(".\\DownLoad\\readme.txt");" I1 m% x( U- L4 {8 Q/ _$ r
  739.           dwStartUpSteps=3;
    $ h' r) k6 m$ s7 K2 F7 U
  740.         }. T4 v  ?" T" @) F- B
  741.       }
    ' S  C( q* a; J& M! E# s
  742.       break;
    4 t) D6 s5 Y8 F  _
  743.     case 3:4 h& f! p0 ~7 l$ r& X# \& K
  744.       if(!Dn.Connected())
    1 C! G' z* O. S! d4 t2 q
  745.       {
    " X9 j- w% Z( c7 f3 ?3 P+ t
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 o" G0 z- n/ M* x) v% I7 e
  747.         dwTotalFiles=1;
    / D$ K3 L' t+ t
  748.         dwDownLoaded=0;
    4 \7 h2 _5 _$ J! I; h+ H% U
  749.         bSilentStep=TRUE;( y7 p+ m5 J+ e) O2 O6 d
  750.         bCompressed=FALSE;0 n$ W4 r4 s. i, n& R
  751.         strExtLocal.Empty();/ T$ _% T  W2 y8 L
  752.         strFullName="checkversion.txt";$ N# N# C" l# d! N
  753.         dwProgramState=AP_CONNECT;
    & c; i  o# ?) C' j
  754.       }3 x1 Z3 c8 N' L2 x& Q: D
  755.       dwStartUpSteps=4;
    & @% X% z9 N4 @5 r& u5 {, [
  756.       break;. K0 I# ]. P! ~# g: Y% l
  757.     case 4:% W) f* q8 a( a1 p
  758.       {
    8 f+ i& K: g! p( T1 f% X' I3 f- J6 W5 [
  759.         FILE *fp;) c1 P4 t; @# J
  760.         char szString1[128];, X3 R& R* {7 n5 h$ T
  761.         char szString2[128];% e; a& h8 z+ i) M
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");1 X0 p+ x8 ]0 g& M1 x
  763.         if(fp)
    & U9 X6 ~3 W* i) A6 y- a
  764.         {
    ( T& y3 n, h% B9 R0 C* ]
  765.           fscanf(fp,"%s",szString1);/ v* w2 @- H* Q& [: P4 M
  766.           fclose(fp);
    1 j, J4 q- `6 m/ [0 c9 p
  767.           fCheckVersion=atof(szString1);% G& y0 m1 z7 ]4 W
  768.           fp=fopen(".\\checkversion.dat","r");
    - u, m7 U: m$ }' j# w( b4 O
  769.           if(fp)/ A$ G: [: G5 X! M; T+ i2 N- B7 U
  770.           {
      R. @/ n' l4 M) D' ^
  771.             fscanf(fp,"%s",szString2);6 Z9 i8 ~9 V$ Y) \7 M
  772.             fclose(fp);+ l, n! s3 L) `, A# }
  773.             if(atof(szString1)!=atof(szString2))
    ' u7 G  e& x8 J1 ?4 n1 n" G
  774.             {% C( m4 x$ }. |" i
  775.               if(!Dn.Connected())
    # c! l1 k. n4 L* J: Q& \/ y
  776.               {
      S1 d' i2 m# g+ C# v
  777.                 bFirstUpdate=TRUE;! [' @. U9 N% H- A4 t& z/ d, m
  778.                 dwTotalFiles=1;
    9 V! Y9 n  C5 r- R
  779.                 dwDownLoaded=0;" }2 l3 Z' C' B- C- D  f
  780.                 bSilentStep=FALSE;
    2 O2 u. c! T2 o+ m
  781.                 bCompressed=TRUE;
    * r5 R9 q( `5 {, v; s) Z) I
  782.                 strExtLocal=".\\DownLoad\";& n$ h0 ~6 H1 e. @* `# ~* F
  783.                 strFullName="update.txt";
    7 D2 ]/ m$ W1 V+ h' \
  784.                 dwProgramState=AP_CONNECT;
    5 p% J" ^- j4 H) s8 z/ d
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' Y: L9 U, ?+ F" R+ z3 K
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , R$ L( D. C& a8 i* z8 Y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) e9 W, O4 _2 c* h: y
  788. 3 v& ~9 _" ?' U
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( r) j  H, P, d0 h# x) x
  790.                 unlink(".\\DownLoad\\checkversion.txt");( Y4 k6 g3 ~4 v' z
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 j1 R4 w; n, M  c. j! G
  792.                 {% R5 Z5 W* d, T, @
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : ]3 `' U6 w& p3 C) {+ B
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");, `- y$ c6 Y7 m7 e; m" F
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    9 g7 G7 q! w& B
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) o, f9 \2 w9 @) s9 q3 [
  797. / F! \5 ~7 K6 _: ^) `# \) R  Y
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + u  D/ U( V% ~2 c/ W. ~
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, }: R& `( X' f$ u2 H8 P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");+ J/ e6 T  R, V5 @
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 E) k/ I' b4 `) U
  802.                 }
    ; U2 i+ h3 O$ {
  803.                 dwStartUpSteps=5;
    " H. |' [4 k' c0 M6 p
  804.               }8 V) i/ n* u; Z1 P) r& L5 i( F: Q
  805.             }& G% ~4 g, n- ]0 {. f$ c
  806.             else
    6 U- N- q6 ^8 T3 Q
  807.             {
    ( R- p& ]. a3 Z8 S; W  y5 e7 O% g
  808.               unlink(".\\DownLoad\\checkversion.txt");
    0 B- L( P# n7 F% G7 j1 u$ K) [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  g8 P7 o& e0 N
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");/ E6 ~: ]7 `7 ~) T# _, i
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");: b+ n9 i6 y. s
  812. 5 |. g2 C$ b4 S' _5 o
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 q0 e5 L3 Q8 y" C& r& I5 x5 @- ~
  814.               dwStartUpSteps=99;% B+ X! ?+ D- I' N0 w& f. f/ _5 j, Z
  815.               bFinishUpdated=TRUE;
    % }1 ]4 d! e6 ]
  816.               bCanUpdate=TRUE;! ]. l4 c- @% d8 B: |3 j
  817.             }; Y5 I- B, M( N6 z1 T5 b
  818.           }+ ?+ b; k4 q9 d* a9 N6 A1 X
  819.           else+ {$ c8 J7 C# u, U4 d4 Z* N& \
  820.           {/ H0 E# v/ ^1 h4 i4 d& K5 h. X
  821.             if(!Dn.Connected())* k0 T- P- m3 O5 L4 F, B8 B
  822.             {
    ' U; k2 P: \* o7 Z0 z# l
  823.               bFirstUpdate=TRUE;0 B2 Y1 p5 ~9 I6 e  g
  824.               dwTotalFiles=1;
    ( V, l- r2 [) A  {% o, \
  825.               dwDownLoaded=0;6 x5 ^$ V  Y# V  G8 b/ ], l' G
  826.               bSilentStep=FALSE;
    * }4 P9 j; y& N. q* Z6 ~. a
  827.               bCompressed=TRUE;
    : Q7 Q3 n7 t5 s0 M1 _: p. j
  828.               strExtLocal=".\\DownLoad\";' q6 B# V: l; n- n2 C
  829.               strFullName="update.txt";
    4 x# N9 l7 G  A
  830.               dwProgramState=AP_CONNECT;
    . j+ o& R7 A9 B) Y6 d+ Q8 ^8 Z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 _. ?- [7 s0 l$ ?* [7 t
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 U! A9 j/ n4 Y8 P8 A
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");% C1 {! ~0 T( s9 I  o
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" X2 d2 n* p" G5 c
  835.               unlink(".\\DownLoad\\checkversion.txt");5 h" r  }: t1 I1 l  o% h2 E
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)6 Z8 e& S& J7 [5 a) f' }: T
  837.               {- y9 ^+ G/ |# u
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");6 i; [- {4 U6 ^  H3 W" `
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    " [3 {9 E. U$ O$ w5 I; X
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");5 w$ E( q' }8 d) S9 J: C
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % |) R# q1 `) l8 w1 X  x
  842.                
    " @* X. I5 z% q! N9 S1 C/ s
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; S: ~# l( b! R7 I7 u3 {
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 e0 W; D5 @* D8 t9 ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
      G4 w4 R& d% n5 D: q7 d& U* \
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; S5 Q8 Z4 ~, y
  847.               }
    6 z. ?5 d- d, d
  848.               dwStartUpSteps=5;! w' Y  {/ Z& C/ C, y
  849.             }# e6 Z8 Y, H; b3 {* b- g# z( Z
  850.           }, D9 `- z% b0 g! }0 y' h. W
  851.         }
    9 B5 j- |4 u: t- c4 V
  852.         else
    : b' Z5 Q, o7 Y9 F; C/ g2 L7 p# |
  853.         {! `" ]. t$ H! I; q
  854.           dwStartUpSteps=3;' R/ G; A9 L% F9 I6 ]; D
  855.         }
    ' B0 ]" K7 n- _" N
  856.       }
    1 y& ~; x  \# x, T) f
  857.       break;
    0 ]2 {. F( T* N/ i6 a7 u
  858.     case 5:
    3 x" t, Z$ `' l3 k3 t
  859.       {8 h4 Y, S* S8 ]' Y! K
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)4 `" l- u. @5 C: z0 v
  861.         {
    4 }  J! v$ M4 e! S
  862.           int opt_overwrite=1;
    * Y, O7 y% O7 l, W
  863.           int opt_do_extract_withoutpath=0;
    3 j) t' G6 \+ H( V/ y- g' u
  864.           unzFile uf=NULL;
    " X4 B( t' Z* S: B  i! l

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

2 V  x3 O5 Y% }/ [1 U

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回復

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回復

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回復

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回復

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回復

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-24 07:33

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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