CSUpdate.exe源代码

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

5 ?2 r6 K' ?1 Z9 `7 ^
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ) F+ p0 r# Z: ]  t) T
  2. //
    5 j) ]! O5 y: j, V

  3.   |2 ~0 |% a- O/ [' E
  4. #include "stdafx.h"' f* v" C! u, n4 ?1 M* @! d! {
  5. / h2 q$ |& C' h, D& ~
  6. //#define UNICODE
    * t* n- k) k3 k! x4 C, X( Q$ I1 _% {
  7. //#include <gdiplus.h>' K% L3 ?( ~1 F8 h  k
  8. //using namespace Gdiplus;& j3 L, A* p3 T5 Z5 t6 c3 N
  9. - X; D' N2 J- ^6 i
  10. #include "RevApp.h"
    - M" V2 H. r/ J- w( E# x
  11. #include "RevAppDlg.h"* V3 \# d/ a, l& h: S1 ~' D2 ~' W
  12. ( |6 N4 u$ J$ @5 B% n$ k
  13. #pragma warning(disable:4786)
    0 D  ~: A& m; z* {
  14. #include <map>  T. _( S+ ~0 @7 l
  15. #include <list>
    / B. o' _5 I( ]2 n' m' h4 U4 N
  16. #include <direct.h>
    1 A, b% g3 @7 ^% E. ^
  17. 3 c( N& M4 R, [6 ?- a" G
  18. #ifdef _DEBUG: w) V; s) |; C# `- C
  19. #define new DEBUG_NEW
    6 @- K" h- D4 X: |
  20. #undef THIS_FILE; Y" U9 z! `8 g8 p
  21. static char THIS_FILE[] = __FILE__;
    ( [* d4 \; w- w/ z' G9 S
  22. #endif3 T5 z5 j+ A9 I/ @/ J! E
  23. #include "SkinResDef.h"
    : u+ L$ g+ f) T3 y  X: {6 ~; V
  24. #include "ChangeBG.h"
    + ?1 L# L! L9 e+ {, p0 ]2 e+ G
  25. #include "AFXINET.H"
    & N( ?7 H$ w& Y) [& C* m: c

  26. 3 z( G2 M4 I/ |
  27. #define TRADITIONAL_CHINESE 0
    : d% }' Z7 J( y. F$ I+ j
  28. #define SIMPLIFY_CHINESE 1+ l' H& X' b" i- r9 `, \  |
  29. #define ENGLISH 2+ {! g9 i9 W4 Q) L5 A4 [" `7 i
  30. int m_iLanguage = ENGLISH;. @! j0 j% O* |) Q- E/ @
  31. /////////////////////////////////////////////////////////////////////////////  m$ E% F3 r! ?. d, X- u6 W
  32. // CRevAppApp& \+ G3 q' ^0 r* K3 E) z

  33. 3 u0 q# o) w6 U. }3 y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    & d  c# Y; t* d! g7 H
  35.         //{{AFX_MSG_MAP(CRevAppApp)6 G# x% @# H! `  I# p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ; l9 w" t  N: r+ I9 `6 d8 ^% M' V# }
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    / I. _" Z& i5 K# Y3 V8 I7 K5 u
  38.         //}}AFX_MSG' X9 f9 t- T) U3 o, l. l
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
      R8 o0 Z8 V& z3 Q1 X% x# |
  40. END_MESSAGE_MAP()5 W) H( [  }9 J& l
  41. ; @7 M- y6 S' A) K
  42. /////////////////////////////////////////////////////////////////////////////
    ) ]8 i: Q3 ]; h( ~& x3 @9 i" |
  43. // CRevAppApp construction
      K" {1 h2 J7 f: C9 n
  44. $ {& z9 |# p, M
  45. CRevAppApp::CRevAppApp(): s2 k) i- o! B  m
  46. {
    6 ]' a. ?  {9 p  `. }
  47.         // TODO: add construction code here,4 t; P) v. }7 K! A, A: x& u
  48.         // Place all significant initialization in InitInstance
    ' ?: \: O, F  x! [- y
  49.   bDisplayIsBig5=FALSE;- V% W. }) ]1 ^* H
  50.   bRestartUpdater=FALSE;, ~( [2 y/ D( c- X  ~  I
  51.   bFinishUpdated=FALSE;
    , j& @1 S" C. p8 T- [0 `- D
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;" H' k) W- B" n, Q) h
  53.   InitChangeDataBig52GBKS();+ X& k; q5 j5 m, {" p
  54.   InitChangeDataGBKS2Big5();
    % J8 ]; }9 h; d
  55.         //1 ^+ u/ k8 v0 Z& |& t+ K+ {0 K
  56.         bClickRunExe = FALSE;
    & s1 @. _8 X: F6 O
  57.         //
    ( X. u4 a4 q- r3 ~& Y5 y7 a, M: c5 q
  58. }  l5 _: }" d( o4 n! Q: Y0 z
  59. ) \- F, F. r5 E4 W& R
  60. CRevAppApp::~CRevAppApp()
    2 @% a- }+ ~. o
  61. {2 \  Y/ N3 c7 h7 h! G
  62.         // TODO: add construction code here,
    , p, c, M% B) X( E
  63.         // Place all significant initialization in InitInstance1 O8 j3 K2 N" ]. K& y: I
  64.   EndChangeData();
    - ?) ?, r5 p9 E0 z. i. }
  65. }
    ) X9 a. W+ x6 y* c/ Q
  66. 1 U- H& q& `$ X7 U2 t# q9 p
  67. /////////////////////////////////////////////////////////////////////////////6 @, p& I9 c$ P* J7 m* A
  68. // The one and only CRevAppApp object
    ( T  ?. J; u) k+ J
  69. " e8 g, M; [7 ?; S. D9 i% u6 S
  70. CRevAppApp theApp;
    % n9 v0 J3 v' X" M: _4 b

  71. ( V; R8 J* \/ z! Z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ! _! i3 T  c3 ~
  73. {2 n; w& `1 y# J5 n7 @
  74.   int iEOF=0;5 ~3 R3 E3 `& p7 N: \
  75.   char szTempName[MAX_PATH];4 X" W2 v0 H9 n+ \3 `: P: Y" s
  76.   *szFileName=0;2 l2 x' I8 \1 b& p1 _
  77.   iEOF=fscanf(fp,"%s",szTempName);# _4 @/ y/ `1 n
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    $ D; b4 l, n/ s0 I) s
  79.   {" \: {' z& ]: ]# a
  80.     strcpy(szFileName,&szTempName[1]);
    # S  P9 ~4 y5 p& Q4 c. O+ p
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ; ]8 D: F8 |8 P( D; F
  82.     {
    % ], c1 e  q4 k, i
  83.       iEOF=fscanf(fp,"%s",szTempName);
    1 Y& y7 n) y* l- x
  84.       strcat(szFileName," ");+ O9 j3 Y/ y* `6 E. s: e" ^# S
  85.       strcat(szFileName,szTempName);7 ~: n2 B0 H, K- x. i- Z7 v) [& Q; _
  86.     }
    ( }" P7 M7 u2 C2 f# i" A1 ~+ m( m
  87.     if(strlen(szFileName)>=1): H6 {$ D/ z9 I
  88.     {8 ^2 l6 Z- g" j6 |0 V5 K' n0 n
  89.       szFileName[strlen(szFileName)-1]=0;
    * `& e, H, N5 @8 \5 |( D
  90.     }
    / j9 `1 h8 V* z
  91.   }) [9 Y) u% s, ~# v$ i
  92.   return szFileName;3 I  {0 F& d2 _5 Q
  93. }
    , I5 x2 J% ~: h' k
  94. 5 c' O" m% q: [0 i. z( Z% v
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    3 v! q% c5 N! P! V$ Z8 y6 ]5 F* `* T4 T
  96. {$ `5 Q: a+ M3 Q' {: r5 _! c4 v
  97.   FILE *fp;
    ! g0 A  c- ~" a1 s5 c
  98.   char *key=NULL;6 N* P3 Q  ?+ {& C0 L7 U2 D( E6 j
  99.   char version[MAX_PATH];+ q" Y' J( o; y6 V3 Q8 d* F
  100.   LPUPDATEFILE file,olds;" t" L6 K" |0 w) v2 j( |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , f- @( l! P, P- s7 D4 Z6 |

  102. 1 ^) K4 W" U6 V7 s& _" o
  103.   UpdateList.clear();& }: W7 W! ?/ V$ Q
  104.   UpdateFile.clear();" u4 _5 A, o( k  H
  105.   if(GetFileAttributes(filename)==-1) return false;
    / L0 N0 O9 Q& a$ I0 X
  106.   if(!(fp=fopen(filename,"r"))) return false;! ~0 A6 \5 |' {9 l
  107.   fscanf(fp,"%s",version);
    9 L+ u; b8 G( j! i0 s
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- I0 A( D7 y2 N8 a0 S) {1 g
  109.   while(fscanf(fp,"%s",version)!=EOF)
    - L3 A- o4 W( k& Q: `
  110.   {
    ' C" p0 I& v+ _0 Z1 K. f: p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 k% n# Z9 W* K$ y8 {* h
  112.     fscanf(fp,"%s",file->path);
    # i4 Q9 |1 S% r) c2 p( j
  113.     ReadFileNames(fp,file->file);
    ) h9 C/ u" j% @+ L( h0 H' A$ p
  114.     strcpy(file->full,".");) {2 M! c: V1 y0 P9 M# d
  115.     strcat(file->full,file->path);3 C2 E9 i; y6 K: }+ [
  116.     strcat(file->full,file->file);8 Q' m8 a) e$ t5 h* k( Y+ @1 T
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    % z" @) r) J. F* S
  118.     {- P0 M1 Y# H" q/ k
  119.       file->vers=(float)atof(version);3 M5 S- c* J: g6 x
  120.       UpdateList.push_back(file->full);
    0 _# }3 D' F% g7 S. L) i
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    3 N2 z0 o6 v# y5 A6 ^
  122.     }
    5 d6 X+ k% m, e7 @1 U
  123.     else
    % |" @3 J" ]/ C( y
  124.     {' D9 _2 C: Z$ A; d5 V, ]& i9 L
  125.       olds=(*p).second;
    + I' a; D6 s0 W' J3 Z/ R
  126.       if(olds->vers<(float)atof(version))
    7 R$ h1 a" N' I5 E
  127.       {
    , c, h7 k! H) k
  128.         olds->vers=(float)atof(version);
    8 a5 J3 \- V) _+ j
  129.       }; }- N1 M5 A& f# y" Z0 c5 V
  130.       free(file);( J2 i, [  X8 W# L) A
  131.     }
    ) }' k7 G2 ~$ F1 m
  132.   }
    0 s( d) e' x+ O) U4 T
  133.   fclose(fp);2 [: O6 E4 l: @
  134.   return true;7 l+ E" R% ?. ?3 x, W
  135. }9 _( M+ B9 N& M9 D* g( z% q
  136. 9 O. R- N* j9 B8 {, m
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)3 x& y/ v" P, Q( D2 u5 D
  138. {4 L8 p0 ?. O3 l2 _4 \
  139.   TCHAR  szFull[MAX_PATH];5 t* E2 U' c6 E  G# B+ Q% ]
  140.   TCHAR *token,*inter;
    4 z2 z) j# h  Y
  141.   *szPath=0;
    & v" J2 a0 m, {2 |* M1 c6 Y* n
  142.   strcpy(szFull,szFullPath);6 ~1 K) t  Z0 m+ p3 V8 y) O
  143.   token=strtok(szFull,"\\/");
    3 Z% L) |+ p5 m
  144.   inter=token;
    0 M5 @5 l6 C$ X  R2 H- h4 N
  145.   while(token=strtok(NULL,"\\/"))
    8 U* W4 @7 ]! I2 z4 b# R
  146.   {9 S+ G( F  v# q2 O) g4 \/ }
  147.     strcat(szPath,inter);
    , k) ~8 D4 w1 U+ [5 c/ b, d
  148.     strcat(szPath,"\");
    + @# E. z/ {, V2 j# a" q
  149.     inter=token;/ a, z' F3 B. n( D4 C; }8 [9 H
  150.   }" l- w1 x6 Y3 V  ~; k: ?$ ^! D
  151.   return strlen(szPath);$ y. g3 L1 }9 _
  152. }
    7 k  ~& y3 P! n0 z. u

  153. ) l1 q! b5 t  r  a/ C( u0 m
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)4 Q  x" T# A) ^* f
  155. {2 w/ C/ O* _) e/ d
  156.   DWORD attrib=GetFileAttributes(Target);
    1 F( h4 C) Z- v! _, d% l9 Z
  157.   if(attrib!=-1)
    & Z5 i* ?( i9 d& h& q' u
  158.   {, N7 @0 S- h* G% R6 `6 {
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))# g; @3 O$ A) o- T
  160.     {4 T& L  q7 l) l+ Z4 G! k6 {
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    7 |5 }2 i* p' t) b- h# I- z! `
  162.       SetFileAttributes(Target,attrib);4 [2 T$ `0 E! M% j4 M1 Z' S) y
  163.     }& `# s/ p  i; Y$ V0 |
  164.   }
    * j7 w1 \# K( e, j! M, R
  165.   CopyFile(Source,Target,Erase);+ e; {  L" u& S7 z
  166. }& T5 W" c/ _4 B6 Q

  167. 1 F& |0 A3 H* G
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)$ F  m9 s  s( ]& Q% A4 W
  169. {
    , J2 L, H4 ?+ \+ b
  170.      FILE *fp;
    # M- Q7 @6 s- u. t* |
  171.      char  szBuffer[8192];: c8 S! f4 W; a
  172.   va_list  argptr;( y' Q5 {9 l* f# F
  173. + b: T5 p0 C7 T. |
  174.         va_start(argptr,message);
    ) E; s% O; B, n% w
  175.         vsprintf(szBuffer,message,argptr);* c/ q9 t- w2 u0 A
  176.         va_end(argptr);# t: U, }2 I4 U: |
  177.   fp=fopen(FileName,"a");
    - C, W( y; `' D
  178.   if(fp): q3 I' l& H% Z% f! y: G+ e+ `. \
  179.   {/ ^( Q; n( d) ?- T) S# W, k
  180.     fprintf(fp,szBuffer);+ h! d. i9 C' V) F$ b# X0 D9 b
  181.     fclose(fp);
    3 ~' ?+ U. \4 J3 y: V
  182.           _flushall();
    5 T9 L7 h- U) g$ X2 N
  183.   }% Z0 Q7 Q2 j8 c( a$ H
  184. }
    - W2 B0 b- ?0 K( F) g. N: G( i
  185. ! G$ Q2 v  K" t% v8 I3 _/ O( A
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ' F% k# G9 P. b; O7 d$ D! s
  187. {
    ) S% v; V2 \, j3 a+ N
  188.      FILE *fp;# t5 j2 ^& m5 o' |9 n
  189.     DWORD  attrib;
      [3 I" r- N6 B7 T2 A
  190.   attrib=GetFileAttributes(FileName);
    5 v9 Z8 k! g2 P  m+ M9 t: Y
  191.   if(attrib!=-1)4 b4 N0 c4 M, y, a  J0 d0 w9 c+ m
  192.   {# H+ p( z1 i' i& N1 g" i
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);; q$ }  J* N* v5 y, l
  194.     if(!SetFileAttributes(FileName,attrib))8 o$ a* G! G' b# K7 {7 t
  195.     {4 T* i6 N9 |, @, R( M0 o# A
  196.       return FALSE;
    0 g8 h" L) j- I
  197.     }
    $ d& ?4 }9 {/ S: `6 }( l
  198.   }" {+ d. r: I9 x5 p  S
  199.   fp=fopen(FileName,"wb");5 `1 ]% C3 A. l/ h2 y) i& N8 }( u5 ^
  200.   if(fp)
    - V  c6 y" I* N/ b, w8 v
  201.   {& m* b- q, L& l$ O' m2 d9 {
  202.     fclose(fp);% q& A0 W( h/ C5 P# r" [8 h
  203.   }& K8 M, a9 I5 J
  204.   return TRUE;
    0 V3 g' f& @; ]4 Y
  205. }: F3 O3 }& L  i7 }& S

  206. ' p6 z  }0 }- J" r/ ~" Q3 S- D6 K
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ H0 B* q# T% a3 Y: M2 ]/ Z
  208. {
    4 N8 f, `; z1 _8 A; u+ i; D* ~
  209.   char filename[MAX_PATH];6 x" ]0 _& k. E) m
  210.   LPUPDATEFILE file,olds;
    - D0 e" s9 R% U/ J
  211.   std::map<int,CString>::iterator i;4 O5 }9 y9 x! C& v, N
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 b5 j& l) L1 _6 a4 e, y  g
  213.   std::list<CString>::iterator l;
    & H5 ]+ a8 ?; q3 X4 e8 M
  214. 8 B) Q0 b0 P2 _7 s1 e
  215.   if(bFirstUpdate). s" Z$ E( P; Q- |
  216.   {
    , U: P* r3 h; u# E
  217.     dwCurrFile=0;) a- n* G% C- N1 x  |; n
  218.     bFirstUpdate=FALSE;
    / x4 v, w; l$ r
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())' b* Z$ G+ h7 A, k
  220.     {
    & A9 n0 H9 |2 G9 I, C
  221.       dwTotalFiles=UpdateLocal.size();
    * f# }/ V1 @; h1 ?8 ?' v& o6 ?
  222.       dwDownLoaded=0;
    ( X) y2 N0 Q! o6 N: ~3 r! v
  223.       bSilentStep=FALSE;- [1 G+ d9 x" ?  ~
  224.       bCompressed=TRUE;: G" D- O! [6 G: V& l
  225.       strExtLocal.Empty();* @5 b  \" Q& ~! L* @$ e
  226.       strFullName=(*i).second;
    2 x9 ?) |7 m: ?1 M* @: }- P
  227.       dwProgramState=AP_CONNECT;
    # B2 ~3 S3 F" o$ t9 A3 h
  228.       return TRUE;
    8 I# Q# r0 A4 x  d
  229.     }
    ; V+ s& B+ R3 g. _
  230.   }
    5 N. j- p: G+ ?% i* E
  231.   else if(bRestartUpdater==FALSE)
    9 o$ z5 n1 i( X: l0 ^
  232.   {0 G# o/ D4 e) l& N! X# ^9 b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    * `# |5 j7 {: e( q
  234.     {: M  K1 I5 v6 z9 _+ D, W
  235.       file=(*p).second;; j! O. d" ~( D) S" P1 F. d
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    & _+ k8 E) u, C& S% g
  237.       {5 m; r% f% m( o, m
  238.         olds=(*p).second;" F0 Z4 d$ T6 @* ?  p' I% n" @
  239.         olds->vers=file->vers;+ ?9 i) F/ L3 h) Q
  240.       }! H# y* Z# z  i1 L4 {
  241.       else
    2 i* L$ Z( `1 M
  242.       {
    " z- W# s& H% i+ S! J& q6 n8 p
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: s) P* Y# Z8 t4 H
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    + Y; U: P8 J, j# N: H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ' G2 B* ?( c" A5 D! Z3 s+ F
  246.       }
      ]6 n$ q: o1 L
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    0 s% o: ~; E1 r5 q/ R
  248.       sprintf(filename,"(%s)",file->file);1 v+ r. z! v) {; |$ V0 v0 I
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 ]+ C1 \- y3 M. Z2 [2 S) t' S
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }  d* t; [9 f# a8 N
  251.     }
    ' c+ c- L6 Y5 B/ t) \4 o
  252.     dwCurrFile++;7 k4 n3 E1 H% `5 y" k/ i* v: h) |
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " R' ~# h0 M8 t) |: S9 W% |% J
  254.     {; p+ L5 v& J* ?7 |7 x# @: C) t/ P3 p
  255.       bSilentStep=FALSE;
    ) `! M0 k- ?3 W6 x+ p! c5 G$ L
  256.       bCompressed=TRUE;
    " a3 e( C% M1 v% V! ?6 c' b
  257.       strExtLocal.Empty();8 f  a% U3 ]/ X  O4 q. m
  258.       strFullName=(*i).second;- y2 `% y- [5 U7 u
  259.       dwProgramState=AP_CONNECT;7 @3 O& c* F6 k3 o
  260.       return TRUE;5 O' x0 y* u( z+ @! `
  261.     }
    9 C2 u* Z% P: y
  262.     if(!bRestartUpdater)
    + G  ?7 r7 [4 q- q' |& K
  263.     {
    8 B8 [2 }: h( ?5 ?4 n. _
  264.       int iCurrSize,iFileSize;% ^. m- K" e0 Z; P# o1 s* l, q7 ?
  265.       iCurrSize=0;" r% M. X- C+ B! A! z
  266.       iFileSize=UpdateList2.size();
    7 }3 T! c2 q+ u" v1 O
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");) F7 T/ d8 }! x& ~2 x
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 U; Q# |' n. H8 l8 ~+ H2 G0 z7 F
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");0 J" |; {7 ~; C9 J+ l
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- k6 r% f, J) b
  271.       Fclearf(".\\update.dat");' R9 R% O4 L3 X. |
  272.       Fprintf(".\\update.dat","Bloodyf\n");! X9 B8 @; R6 [
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 s% ~! K: |. ]+ e; l5 M
  274.       {+ n/ `' S9 b3 b, y: g5 n
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())' y; \1 _  e2 \3 t9 u
  276.         {
    . `6 o% e  S, X0 S3 Z# r) n. @" d
  277.           file=(*p).second;
    * r3 ?  m1 U1 I. {, H& D* ?% L
  278.           sprintf(filename,"(%s)",file->file);( a1 P. |/ |& p) ?& o1 S5 g
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  A- e% B) j9 M
  280.           iCurrSize++;
    ' T, J2 w% I6 [7 B  u% ]
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    & @/ b- a" q2 p* Q. W1 n8 v, L
  282.         }# U  T7 b. E7 d: a9 {4 x$ o& ^
  283.       }
    * \; C2 Q2 v  ^6 h0 |7 x  R7 ?
  284.       unlink(".\\update.txt");: p* Y) h0 ?+ q  i# Y
  285.       unlink(".\\update.tmp");2 ?% v2 m# C; q7 D, _: ~$ K  U: O
  286.       Fclearf(".\\checkversion.dat");! F5 H6 Y+ q* ~6 a* {
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 f  h  A6 N! q( u% p; T
  288.       if(UpdateLocal.size())
    . c! s/ }6 y" k
  289.       {
    / q, [- O% D; ^, s  ~; ^) }
  290.         UpdateLocal.clear();
    7 s1 L8 L; @9 I) L  e5 D
  291.       }
    3 `7 m) ?$ Y/ _4 v1 n' w- o
  292.       if(UpdateFile3.size())
    . w' k) w9 K7 ~. j: j: F9 A8 H% k
  293.       {
    $ n1 X3 S6 W+ E& @
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 {. o% K  o6 X2 {; G# @: R2 L
  295.         {
    " i/ F3 f8 I. }3 I
  296.           file=(*p).second;& l/ V, w2 j8 V
  297.           free(file);7 h6 R$ `" w9 x( P) Z& N" I
  298.         }
    " _. T1 o( f! B% h1 o3 o
  299.         UpdateFile3.clear();
    9 i$ F1 K+ t  q' B& e
  300.         UpdateList3.clear();6 @2 f1 E- D# c3 ]4 s
  301.       }
    $ `- b7 j7 {# {" u/ N8 G8 u
  302.       if(UpdateFile2.size())* V* B% {7 F* ]; F
  303.       {
    % s: C* ~2 g# H% U! h
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  X! t" D3 {$ @
  305.         {
    $ O$ N5 v4 i/ W; ^
  306.           file=(*p).second;1 X$ A; m% k5 A) E- }8 s
  307.           free(file);
    % C( g5 j- [0 C9 i4 b/ [
  308.         }, G& v3 N: G( B9 ^, w0 q( @
  309.         UpdateFile2.clear();
    * u  s& @( v! }! Y7 u* T
  310.         UpdateList2.clear();
    ; G) @! R% \/ M+ ]) K
  311.       }
    $ F' d% D" `5 w8 H4 B
  312.       if(UpdateFile1.size())" [( H6 R( G# L+ f% x) E0 D, A$ n
  313.       {4 K  X; w: L2 Q2 L' I# X
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); T6 `! A' m8 q% J" x9 E) Z0 k
  315.         {' N$ o9 [* f. G2 P# F1 I4 w/ R
  316.           file=(*p).second;
    ! z( J4 c' @8 u
  317.           free(file);
    / u; a/ f8 V5 Q% f, P- L
  318.         }* t, }/ E3 y& r
  319.         UpdateFile1.clear();/ [' S7 p  ]$ h+ Z- h
  320.         UpdateList1.clear();
    " U# a) G7 m; ^( Q# M
  321.       }* A( t; b4 v3 V! C4 n4 D
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    $ u) V& e- F+ O" Q1 y% m6 ^
  323.     }
      V) q- g: ~' V1 Y6 v7 J/ W
  324.   }
    9 r' D: ]$ t: T- T  W
  325.   return FALSE;
    + t8 O  x' F( i. T
  326. }
    / M/ J* o) _+ N3 y! k
  327. 5 \+ n, Q& b( E1 Z. q3 f5 |' V
  328. void CRevAppApp::ClearAll(void)% K; c, v& E0 u' q7 e
  329. {) |% Z8 B& e0 F
  330.   LPUPDATEFILE file;& P# L) w1 m3 `( n( g1 N$ U
  331.   std::map<CString,LPUPDATEFILE>::iterator p;3 \" r. k+ V, Z

  332. & P: {( x& a0 S$ p  {' l- a
  333.   if(UpdateLocal.size())
    , M6 W$ q! s. b, _) N
  334.   {
    & ~7 ?) h( v' L; N
  335.     UpdateLocal.clear();
    % R8 n, d' [5 r: n
  336.   }$ r$ j+ b* N: S; i, K
  337.   if(UpdateFile3.size())
    0 G: M/ i! p. O& n0 H# e
  338.   {
    ! N$ K1 J0 O# g0 t- I
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)3 s3 u+ \- l" b3 w9 T6 T+ N& ]! C
  340.     {0 _- Q# X6 ?! B9 v0 A
  341.       file=(*p).second;
    4 ~* i0 i/ Z, d" y
  342.       free(file);$ E$ @8 C2 F7 \' H+ `
  343.     }/ I3 W- Y! Y" @4 F
  344.     UpdateFile3.clear();' w/ X; A: k; D
  345.     UpdateList3.clear();8 l5 W; L$ Z6 j/ N1 X0 F
  346.   }
    2 `7 n$ w$ Z/ T* ]" J: ~
  347.   if(UpdateFile2.size())# `+ ?9 O* E& F2 D( _$ G
  348.   {  m0 ^% W8 z0 m6 p2 s
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 L! Y" ^8 Z  F2 L
  350.     {
    3 p( M6 }6 a! U
  351.       file=(*p).second;& G# N: \0 ]% R2 m
  352.       free(file);
    2 w' p! L3 T/ R( x* E) h
  353.     }
    * a2 g4 @/ o8 t& J( @3 o/ S3 R* X
  354.     UpdateFile2.clear();: ?# Y- T7 Q! _3 v9 Y% s
  355.     UpdateList2.clear();6 p# k. `& N6 X9 O& I5 \( ]$ A( t
  356.   }# n& W9 H4 D3 H1 J; W
  357.   if(UpdateFile1.size())- a/ `, f, ?- F
  358.   {
    5 s3 \' V, I8 H4 k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ Q* L5 X" f6 p% e( Q
  360.     {
    % W7 u* _& o& e' O* ~! u
  361.       file=(*p).second;7 q$ \  M9 p. u- e! s& b0 j
  362.       free(file);
    ' G+ Q& |( d7 f6 G% ?
  363.     }
    - R5 [2 S3 w) D
  364.     UpdateFile1.clear();
    . d3 r2 ~( T6 {& ]
  365.     UpdateList1.clear();
    $ u6 h0 s) i. b" B! _4 A
  366.   }( ^  M/ {: ~& [/ g) ~4 q0 D
  367. }  ; N3 }) o# f3 i# G
  368.   
    ' F* o8 d! t5 L0 k( \, ~. `. @0 E: P
  369. BOOL CRevAppApp::CheckLocalVersion(void): x4 x- ~% }  m. F1 k
  370. {
    # t2 {+ a. I3 g% W* P
  371.   int c;
    2 l$ z4 I4 P+ Q# R: W6 Q6 I
  372.   LPUPDATEFILE file1,file2;% T2 }/ W5 s  ]1 e# l8 r$ ]
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;+ {7 X( w9 ?# n5 e( ^1 q2 g0 z* h
  374.   std::list<CString>::iterator l;4 m6 U9 d0 i0 n6 J2 ]$ T3 x4 f' S
  375. $ K! ?7 A) I( \- x
  376.   UpdateLocal.clear();) `/ e% b2 m; b# Y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      n# m5 O: p8 k' x1 Q2 o
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    % Z( e: _$ L4 m
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);* ]6 ~7 j6 x2 `4 X$ e+ h
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);. a1 [& `9 M2 s$ R5 l& V  @' _4 P
  381.   if(UpdateFile3.size())
      _8 r/ h5 `6 h& e
  382.   {
    / y! j; F& Z0 b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)  I4 B$ h7 l, G3 ^0 Y& v
  384.     {
    # @8 V& D( h! u& t, Y% |: J
  385.       file2=(LPUPDATEFILE)(*i).second;" T  U3 `( u6 t
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 E& F* p  k$ x; f
  387.       {4 A/ j0 K5 C4 B* k$ R
  388.         file1=(LPUPDATEFILE)(*p).second;
    9 z, n2 O, Y( @) _
  389.         file1->vers=file2->vers;
    + R7 ^6 S, u7 k  r
  390.       }
    . n8 T( \3 I2 Z# v8 X" {& ^# c
  391.       else
    5 L* k3 @0 q6 A- q% t
  392.       {
    / r+ @9 {6 e9 ~6 x1 ?! E/ j
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , l: y6 w( R5 u0 a* q# n, u0 k
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    * k  g  Y" `5 {
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% l! p) r9 |( ]
  396.       }/ w) m9 X, ~( c3 c1 P# @* G* j2 z
  397.     }9 w$ p- b+ U" @5 a  q* s3 B& Z
  398.   }
    2 f- k, ^2 X$ `* K, o+ D' t& y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)& ]; F! R$ w5 m- a
  400.   {
    ( u! s8 g, ?$ j0 v: V
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())% z+ ], K3 ~5 z
  402.     {
    * X0 y6 I* q+ d8 U
  403.       file2=(LPUPDATEFILE)(*i).second;" I6 e6 x7 E6 L% {, k& X, Q% T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # Y, X' x/ \) S8 ~5 \% g
  405.       {0 I% N1 j) q& N( b  d% s
  406.         file1=(LPUPDATEFILE)(*p).second;, }4 m( O+ ?  a) K- Y
  407.         if(file1->vers!=file2->vers)
    1 M3 s6 C0 k0 _# {4 S9 D
  408.         {2 s7 J5 ~% d, Z( L6 ]
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: X! H0 P6 t  {, g: W" V
  410.           c++;; a  e; G: _' C4 |" ^. S7 w
  411.         }' z, G9 M! Z- @/ N6 |) a! v
  412.       }" Q  {  G" D0 u% f3 K0 a% R
  413.       else- f0 z6 l2 Y2 d& t
  414.       {
    + B3 b- Q* E8 f& X& a$ I
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# _5 y8 {6 `, ^4 g
  416.         c++;
    % T- I* }* j' x8 @: j6 v5 z
  417.       }4 b6 K7 m" k! t6 D: z" h
  418.     }
    0 x4 k1 l( T3 x' a/ Y' j: u
  419.   }2 h3 [* S% a( v+ j+ a5 Q
  420.   unlink(".\\DownLoad\\update.txt");" u; w) M( W  _) i0 A. ^3 r
  421.   if(UpdateLocal.size()) return TRUE;1 i- C% j1 w9 D- u
  422.   else                   return FALSE;
    ; f4 m7 j- o$ U0 g$ f
  423. }
    8 \6 f  K, U6 x9 N) N1 y
  424. 4 T: r! E! M: W! u+ }9 _3 K
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"( [$ V' E2 O1 ]
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  r$ A3 _' P5 E& o( F' r1 |

  427. ' i0 z) L0 I  S0 w4 |& d

  428. ; S3 b- `8 B2 L1 k. ~
  429. , }. z/ _# w* c& t4 C  m
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile). s# I, Z# d& J) d6 f
  431. {* b5 Y* m) z: Q% M
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;- U1 m* O- ?1 p% m6 e
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ T1 ?* T) D4 j& {
  434.   {
    & D0 \& J  F! V5 h5 }% |' k- u8 m
  435.     char szLanguage[50];
    1 S3 Z6 A& D: S' I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! B6 z$ w; P; |) w* ]
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; c  i* M! \) s# ~5 L
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 j9 b4 A6 G2 t! Z: b. m4 e
  439.     else                                   m_iLanguage=ENGLISH;! b5 O  `1 x% ]9 l
  440.     char szRegister[100];2 h% `) U2 r& ~# v/ y0 n3 \
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : K5 y" Q+ D. A: [/ w, E
  442.     strRegsName=szRegister;
    0 |; F9 f/ ?2 x' a. i
  443.     char szPatchURL[100];5 F6 G! j5 d3 @. Q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 W% v2 z) v7 k+ N
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ n8 t% I4 T( n& A
  446.   }" |' O! B) o. V0 E
  447.   else; \5 ~4 r/ ]0 M' g3 I  ^
  448.   {
    # {0 C" K5 W" b- w
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 ^7 I; s# t2 z; M
  450.     strRegsName=DEFAULT_REG_URL;+ d4 m5 Y4 Z+ R! `/ y
  451.   }; s* A" ^1 x' g; R2 V- E5 w
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    - E% K2 Q+ X" V2 L3 I! ?
  453.   {
    2 \) W6 H' N  Y5 M2 l6 \& b
  454.     char szIP[50];8 Z$ e: K2 L3 Y7 Z8 F9 C9 i. _
  455.     char szDIR[300];
    # d. P% r( b! }& }
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    5 K4 W: }2 A) X- F& b0 L. @
  457.     {
    + l* c$ v" T, W7 a
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");1 W* G) r0 m  ~7 x
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    5 {) J& a4 `$ c7 u$ `* X
  460.       strHostName=szIP;; |3 o' D3 M. D& I6 N2 @
  461.       strHostPath.Format("/%s",szDIR);, A, Q3 O# Y! g3 z) |
  462.     }: a: w$ R7 v1 k& b: v0 G& y
  463.     else
    , w" {% m, k  P+ A1 O8 q
  464.     {
    # J( W0 N5 ?! C- Y
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( n3 N( s4 g$ I. z' L, w
  466.       {: `1 @% O+ @# s. d* m6 I
  467.         char szLanguage[50];
    ( B0 \: V6 u$ ~6 I
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    , f5 n8 D, c; r2 b' G
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' T3 o1 m  N' n% k. }1 }
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 n9 a" H$ A& @+ f0 K5 m
  471.         else                                   m_iLanguage=ENGLISH;
    , c  ?$ ?4 t9 g' v
  472.         char szRegister[100];5 E1 g$ `, W3 h8 C3 `" D
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");( T1 S# }  G; t8 O' T  N3 y0 N
  474.         strRegsName=szRegister;
    - W; F  j, d" r( I' f
  475.         char szPatchURL[100];# Z: j# f( s  Z. j5 s, Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( j& x( b' _$ F$ {6 v2 V! ~% A
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" }/ [" I- T4 s8 Y! h
  478.       }
      k9 e2 g/ K2 @0 j5 _
  479.       else
    + ]' X8 n1 O  |; s- T0 a
  480.       {
    . g- m* }* P$ m- V# o5 Y
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 z4 \% P! i6 k1 U  s6 l. L, b
  482.         strRegsName=DEFAULT_REG_URL;
    9 O; @+ G, {5 k% M9 b* z( H9 _/ L
  483.       }" C) S# n/ z0 B: E' J% B
  484.     }
    * I; k* S" `" r" [1 I6 H. |: i0 i
  485.   }! q* T/ y( u: @5 X/ f/ F+ P
  486.   return true;4 R0 z4 K& O% d
  487. }
    / A9 Z" u/ ?& N- W

  488. ! v4 A% o# y  l, P
  489. #include ".\ZLib\unzip.h"3 r! ?% ^( o' z
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    : C( l. D, w2 y2 E! U
  491. /////////////////////////////////////////////////////////////////////////////
    . h' J7 U  r8 f' z0 j
  492. // CRevAppApp initialization  d" `6 @9 N, V- y  ^4 p1 D; T

  493. ) x' P. c7 ]9 `  _% G$ n( S. u
  494. BOOL CRevAppApp::InitInstance()
    4 O& I- W1 c+ g0 r4 E6 ~
  495. {
    " ]( L9 l& U) j. U* a$ D& _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ! ]7 h* t7 B3 I  y: W& f' c

  497. ' r9 x* ^! ^0 U, k" O# R) y# S
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    + e- z7 p$ d; k* Y) H+ s$ v
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . J1 Y2 b; }& E8 q! K- V2 r
  500.   {
    4 l  t1 t4 P" r. Z1 z" N  G' b1 V
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");: U1 c  D$ U" ?& C$ ]
  502.     GetPathFromFullPath(szPathTarget,szPathSource);3 E- J# Z; \) j+ G; |+ a
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))1 I# G7 C3 {9 a; u- }7 q2 a
  504.     {1 C9 M2 J6 F$ F3 Y% O; L
  505.       strcpy(szPath,szPathTarget);( u5 ^: [" I# O6 b( u! ]1 \  _! \
  506.       SetCurrentDirectory(szPath);
    & E/ R4 L7 ^  H) V
  507.     }
    8 W2 n  `. ?0 T, a$ F3 b
  508.   }
    ! b9 r: f/ I$ b3 J
  509. #ifdef _DEBUG
    4 ]; ?' |+ R- Y; w2 v
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # X1 @: F  @& H) h3 k
  511. #else; h  k; _" j# f0 l
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ r% L; d" ~3 g( d8 }
  513. #endif
    + }- Q  w6 g0 c0 A+ B" T  c
  514.   {4 T' Y$ t$ U  }  r+ w
  515.     char tempFileName[MAX_PATH];" b& z/ E1 y( T( P
  516.     strcpy(tempFileName,szPathSource);
    + h1 }  _* S4 o: I5 L- \+ B
  517.     tempFileName[strlen(szPathSource)-12]=0;- E/ w2 ^4 R0 s4 s& P- D
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    : i; E7 n8 i0 {. @# \: x1 w  s! ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ) I$ F8 p: a8 B( a" S# N6 w
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);4 q, S; \3 G4 c5 v- R/ d0 T
  521.     return TRUE;! [0 `1 m: C& U/ S% O
  522.   }1 Q5 H% N9 c1 L3 n1 A2 f6 t" g
  523.   // Nuke 0118: Delete run.exe
    4 V* N) Y+ U& w2 W9 C
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );0 t0 C* y- o% c, Z$ \2 ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");0 }, N4 H2 C7 A) U+ v) \3 A, l
  526.   if(!ReadCfgFile("Config.ini"))5 s4 G. w% P) O
  527.   {1 l% D' n3 L2 o
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    * `+ |0 s* |0 ?; W/ {5 Z
  529.     return TRUE;1 M* W, P. S5 M# y* @; ?( g6 Y& T
  530.   }
    8 M2 p$ c6 b) Z) C4 O1 w
  531.   HANDLE mutex;
    # v  M) [" f& w8 f; G, C% P
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    8 p: U% |( z7 ^, t: s
  533.   {* a/ ~5 Y% w; C/ X0 N
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    + n5 s7 V6 W* T. M: x
  535.     {! M! S" n" F* }# n! Y9 v
  536.       CloseHandle(mutex);- b* p# `' t) z5 g: Y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    - ~/ |- V$ T2 u8 C) i  `( b4 {
  538.       return TRUE;
    $ z3 P3 |& s4 k' q* [- x
  539.     }( N! W. K! \% L- r8 o8 L3 Z- u2 d
  540.   }  
    * J1 F# `2 q3 u
  541.   CloseHandle(mutex);
    " [( Y: G! U+ U5 h3 @$ N; Z

  542. ' c! {- Z; a3 M4 h. K
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    3 e$ o3 f) w, ?7 H  e9 h

  544. / h( ^8 [6 ]- Y3 E
  545.         AfxEnableControlContainer();! r5 A) r# X, q9 H8 U! I
  546. , t' _  M$ B' f7 r4 e( B) ?
  547.   bCanUpdate=FALSE;
    0 _! l1 o  @- A& Z
  548.   dwStartUpSteps=1;0 t. G+ C$ {" H
  549.   dwProgramState=AP_NOTHING;7 l9 `# s, d% |; s
  550. . T) a" V0 w6 U; G  A9 t
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    / N( L- m' Q  F- h
  552. - j- y# G, T# J! z" _
  553.         // Standard initialization$ ~- O0 ?0 w6 C2 M% o
  554.         // If you are not using these features and wish to reduce the size1 h6 K9 I/ a' a
  555.         //  of your final executable, you should remove from the following, o, y! c. z( ?, z5 i+ P1 c, e% U5 j
  556.         //  the specific initialization routines you do not need.
    3 `0 l9 w( ^; Y6 P+ U9 D" d' K
  557. 9 n# w" p0 {: Z- ]) D
  558. #ifdef _AFXDLL7 \: _" J9 U# C( i4 M& ?' M
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    , ~- e% T/ n1 F6 t1 @$ Y% z
  560. #else" Q4 y6 t9 T* }' B, [
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    : I0 O; q' m: h6 v* e+ ^7 q& \7 ?
  562. #endif' M$ [6 [7 E( W' T8 ?! b! |) z

  563. : l  q% S: S8 F1 g
  564.   dlg=new CRevAppDlg;
    . H, w; A6 V. u% f4 q
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 D% P8 F/ D5 D! u
  566.   dlg->ShowWindow(SW_SHOWNORMAL);. I6 Y' _% y% M+ m3 z+ [& Y! I
  567.   m_pMainWnd=dlg;4 K4 ~7 u% U+ d6 A
  568. 3 {! q5 u7 s) t! `
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);: \" f5 [/ R9 w& Y7 F
  570. $ A* s. p& }0 }0 \& O7 j- \4 [
  571. //  GdiplusStartupInput gdiplusStartupInput;8 Q2 P( U7 b" \9 M
  572. //  ULONG_PTR gdiplusToken;& ~: U* F) Z' e+ g0 g% N
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    : \$ B% j8 W! P0 z5 @- y

  574. 6 @/ W" |! q& M$ p3 {8 `
  575. //        CRevAppDlg dlg;
      z6 B0 K$ P' D, s9 C+ c
  576. //        int nResponse = dlg.DoModal();
    4 D  k% I4 [, Q+ |1 _$ O( b
  577. //        if (nResponse == IDOK)
    ( I  e4 z" A) u% G  d
  578. //        {
    - F" b, h6 M$ C1 S( w6 H. V  X! K& ~
  579. //                // TODO: Place code here to handle when the dialog is
    8 d7 x; g+ d9 W# ^9 W4 z
  580. //                //  dismissed with OK5 }: m7 q' k6 }  L1 Z: w2 B
  581. //        }
    7 x1 w+ M' `# h- R
  582. //        else if (nResponse == IDCANCEL)
    . ^" m+ v2 F! y. N
  583. //        {. }( L0 Z6 j3 S" |
  584. //                // TODO: Place code here to handle when the dialog is
    9 b- S4 R6 v* e7 [% z& O
  585. //                //  dismissed with Cancel
    ( |- ]( x- x: w# Q0 \
  586. //        }! m# g) T+ b1 l6 t$ ]
  587. 9 o+ E& ^# W9 O$ t
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    7 K' B5 u3 k& l" ]
  589.         //  application, rather than start the application's message pump.7 B  B* n, s) d) M! t
  590.         return TRUE;
    2 _- I6 E# z" H8 w! b2 j
  591. }# D- ?1 t$ k  x. {

  592. * r" d/ `! w4 V: r1 l/ @
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    $ [" y+ J7 A/ H' I) j2 ^
  594. {' w* a5 O) d7 j1 d$ J3 h
  595.   int i;  J! W( M1 y: v. H3 m6 m& q1 t. Z) q
  596.   char *szRet;3 V5 ?( [) i0 D2 r% {

  597. ( p2 O; E: {& I( `
  598.   if(pSource) { itoken=0; sztoken=pSource; }* L' N# U1 |4 ]) C' W7 I+ L
  599.   if(sztoken)* d/ c& X1 }5 w% j
  600.   {1 i( Z8 A8 `9 s; e+ i; I
  601.     szRet=&sztoken[itoken];
    & @, \/ H6 h- _5 g3 \( a( }
  602.     while(sztoken[itoken])
    + H; H. d9 b7 s
  603.     {/ a9 q+ A% M3 p! U
  604.       for(i=0;i<(int)strlen(token);i++)3 r$ x: Q3 a8 @
  605.       {( X7 F+ {& x5 y$ X/ u
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])3 ~: n3 Q2 {) J( C& O/ t2 d
  607.         {' p6 O6 j- j" _
  608.           sztoken[itoken++]=0;- i+ j- z  Y  p, S+ G  A" L
  609.           sztoken[itoken++]=0;; X' r1 M& F8 Y" m* ]
  610.           return szRet;% L. @9 ^* t+ y/ m0 F! U. y, b: ~4 p
  611.         }4 n% X4 g9 z/ J$ U
  612.       }3 N7 @7 D6 W5 L( N* w4 ]# L7 t5 |8 H, m
  613.       itoken++;
    6 \" A/ N- v, p% a9 t5 A3 n
  614.     }
    8 X! ]  d5 n6 ]
  615.   }  a/ y3 d9 ]3 O
  616.   return NULL;4 ]  ]7 G+ g/ |/ b- H
  617. }
    6 s2 g, O) m( R* }0 H
  618. / H# f8 c( o3 u: w- ?+ p7 R
  619. void ProcessProc(long Total,long Current)! e0 y( X3 W# v, h8 R
  620. {3 V) Q9 e$ g; z
  621.         MSG msg;" w4 Y1 m% G: z0 [# d
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " r/ i4 `1 Z5 I( M% G3 }
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));6 G3 O" V: @" d; N: b- L' P
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 w7 z6 z$ j! y2 K# Y* V( R
  625.         {
    3 v; W5 G) {- a! x4 D4 ?# x
  626.                 if(!GetMessage(&msg,NULL,0,0))( L* T9 J6 X* f$ U" \( h
  627.                 {
    9 P' L  V+ _; U3 e$ [
  628.                         return;
    9 u' |; E7 d  Z( d+ M
  629.                 }
    / K7 H& K) ~4 k% t" g" N
  630.                 TranslateMessage(&msg);
    - _$ m$ y- V" S; z) Y
  631.                 DispatchMessage(&msg);
    4 q8 w0 O1 t; X7 {) w
  632.         }        , G7 j" m# }4 y, O2 {
  633. }6 Q' X# k& n/ w$ n5 F6 f+ o8 S" ^
  634. . `" V8 t8 J6 W, j7 O! F
  635. BOOL bFirstChar=TRUE;
    : ]/ W4 ]) @5 j' [  D
  636. ' X/ A  N: ]; u9 {) ?0 I8 V
  637. BOOL CRevAppApp::OnIdle(LONG lCount); N! n3 V5 R' N& M0 M
  638. {
    : H! A: |3 g1 n9 t
  639.         // TODO: Add your specialized code here and/or call the base class
    % V* e; y# u: Z3 G  I- ^8 g
  640.   switch(dwProgramState)
    6 `2 c$ d7 b. J$ \! J7 m
  641.   {
    * `7 Z- s! {( r& \; T. Q
  642.   case AP_NOTHING:5 l+ d# c6 o5 k2 c+ J7 M' Y& P* ]
  643.     switch(dwStartUpSteps)5 U' `4 s' U% u5 U. Y3 G5 \8 R
  644.     {
    ( V- l) f3 Q# T
  645.     case 1:. k/ I% |) S( Y" f- z+ i" ]! q( }
  646.       {
    $ K: L: W  n6 p6 Q4 u
  647.         int i;; w- R/ O& a; k6 [6 {/ D
  648.         CDC *pCDC=dlg->GetDC();+ C1 p; w8 Z/ Y' a# K& B
  649.         HDC hdcwnd=pCDC->m_hDC;
    9 Y$ \& [& U6 {
  650. //        Graphics graphics(hdcwnd);' `+ ~& g! k) w: F5 @- T$ B
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    2 R+ T- q2 ~9 R! H0 K# V* }% _
  652. //        INT iWidth=bitmap.GetWidth();
    6 w0 R! c/ ^! u: n
  653. //        INT iHeight=bitmap.GetHeight();
    : m: a# ^" L! l& |
  654. //        Color color,colorTemp;
    + o! O5 t4 |8 R5 Q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)" s5 V7 p) r/ J# I. J6 p- h9 v
  656. //        {. r2 b5 N* _2 e, K, ^
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ! I$ k* ]+ d. X4 {
  658. //          {$ X: ~$ B2 n  f# Z! {2 x2 n
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 U/ G+ J5 z) t
  660. //            colorTemp.SetValue(color.MakeARGB(1 i1 \2 X+ X* p* \2 d  M
  661. //              (BYTE)(255*iColumn/iWidth),* A: r; z4 M, ~' T  C" _
  662. //              color.GetRed(),; p+ Y! |- D3 P. h+ ^
  663. //              color.GetGreen(),
    % W  P8 ~- g/ L. X5 r
  664. //              color.GetBlue()));  I" `' `. s. K
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 y( u) j. n: l4 n) m
  666. //          }; v! W8 \( l  e8 c! ~/ c* Q. r; x
  667. //        }7 ?  D: Y/ d+ T$ f& t; ^$ x
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # Z( Q8 o7 v8 q' y* d) R
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 j" u/ c1 w& b% A
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");% m% v' N4 }+ P9 \3 H5 z' a
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");, W7 w3 m' {2 p* l
  672.         for(i=0;i<240;i+=8)6 T. P( o8 \5 S% `: C- R8 d  s% o/ m
  673.         {
    3 G9 {$ \8 T' F* A) w
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & G0 e; l- d% O/ D: U# y5 \) v9 \3 Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- @# @& y: ^+ N8 s" J. n
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 T, Y5 m+ ~% e
  677.           Sleep(33);& R* y, y8 ^2 \/ h4 E- P% g
  678.         }
    6 j7 I! b8 J7 w( J+ p) I) k# E/ `
  679.         Sleep(1000);& c  E2 c0 y. u# S3 j9 F
  680.         for(i=240;i>0;i-=8)* W  Z& x' W  o9 W
  681.         {
    : n; [# Z7 U* H9 G) X' U
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 |3 ]2 ]! ~+ b% I# }
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ) Q8 h% ]5 R4 |: m
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 `9 i( g( D8 z9 U* b, r9 f
  685.           Sleep(33);
    . v0 B. L' x% [! n
  686.         }
      m# J; S. J1 Q4 N2 B3 s$ z3 S
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
      H5 f* r5 v, n7 {& }% h
  688.         dlg->ReleaseDC(pCDC);
      e5 m5 I. r+ G8 O
  689.         DeleteDC(hdctar);  _6 g9 Z4 u  F
  690.         DeleteDC(hdcsrc);
    + ~6 M  O  S/ C$ y# d1 P  h
  691.         DeleteDC(hdcorg);
    ! p5 l# k6 O! O
  692.       }6 Z; Q. q6 J; }8 k/ i- F5 O
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; N3 n3 T6 F% H2 h
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");, N6 a2 }4 t: n+ O+ K2 c
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 `* Z3 T% V, Z6 ~1 H
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");& X" B1 N) u" g0 @1 G
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 ]9 [8 C4 R# k1 S6 G3 k# S
  698.       if(!Dn.Connected())
    7 p! c5 g( r; C  ]
  699.       {# z" ]# o2 c) N* l
  700.         dwTotalFiles=1;- S  @! C) Q+ R! ?
  701.         dwDownLoaded=0;: x2 A8 `  T6 K/ ~. q" g( g
  702.         bSilentStep=TRUE;- Y6 B/ V+ f1 y* s4 o4 V
  703.         bCompressed=FALSE;
    . K: i8 Q0 o' a3 E; s6 J: B
  704.         strExtLocal.Empty();" N, v, A7 d0 z8 m4 E
  705.         strFullName="readme.txt";
    1 ^  }+ o1 j% b
  706.         dwProgramState=AP_CONNECT;; u) N" g8 ~( M
  707.       }
    ( s) t% p2 j, y  n
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ( l6 ^' U5 e- d* B+ ~  h
  709.       dwStartUpSteps=2;( c0 j# t% X3 q* Z) n/ V9 s' B
  710.       break;) t4 r% o; G* G6 c4 t, t
  711.     case 2:4 S) X+ ?$ A0 g6 _8 n) Z5 Q
  712.       {6 Q" e% x! P# }# |/ G. j4 T
  713.         int iEOF;
    4 ?' w+ Y- @( ]" C1 M7 u) h
  714.         FILE *fp;
    ( G* G/ ]. f! I$ j, n& `0 [7 T! s
  715.         char szString[512];; k( q# P9 g" R- v( z+ M) M
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    $ ]" H/ n, m% s" q" K2 A
  717.         if(fp)' o: D! E+ b* Q5 O9 S3 ^
  718.         {8 p1 Z$ f( w& \7 K
  719.           do
    0 ?& j1 t7 U0 U$ m0 Y" e2 W, y5 k
  720.           {8 I+ B+ D( x0 D# C' K$ W2 \
  721.             iEOF=fscanf(fp,"%s",szString);% A; I0 Y& G+ S# O! [' L
  722.             if(strlen(szString))
    $ c6 q: w1 [, l2 @' a1 Z
  723.             {
    6 h- s) j. b2 o; d$ \
  724.               if(bFirstChar)
    , t) O4 V) @" ^( i* J8 `0 T+ u) D
  725.               {/ R6 k2 b- X% S& i- y
  726.                 bFirstChar=FALSE;1 A* ]7 m) o$ r
  727.                 bConnectIsBig5=FALSE;
    $ H4 @2 G- A6 V* o% a6 O+ ?2 }% T
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;1 Q+ R  G+ @9 h8 u; T
  729.               }
    4 Q  c8 Z/ G/ F" Q& p1 `( ?& g
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));/ w* q2 R$ _& v/ `/ C" l( h+ h- Y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));4 p5 @+ M! n) u
  732.               dlg->m_ListText.AddString(szString);" l* |/ _2 q! Q9 t8 G
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 F2 u$ s. i$ U9 X$ t( m  e
  734.               *szString=0;; P4 p3 v* O: O, m! w
  735.             }
    ! f" h1 F7 J; h  @8 T9 x5 g
  736.           } while(iEOF!=EOF);& S! ]3 L3 G% Q& R
  737.           fclose(fp);1 g) t) w$ X9 w3 ^3 |5 q5 ~) E
  738.           unlink(".\\DownLoad\\readme.txt");/ C) T* c& L* X# M* O: Q/ h2 N% o
  739.           dwStartUpSteps=3;  z6 U8 f. M- Y& ~
  740.         }
    , j! h4 ]) n7 v6 L
  741.       }
    + `8 S2 V/ v. e9 H2 _
  742.       break;! V2 N' k3 B% X; V* K  k: _8 W; M
  743.     case 3:' [) w, S* I3 O: ~
  744.       if(!Dn.Connected())
    3 K& ~! V# |0 ~4 b1 A. A. F9 J
  745.       {) S! k& r' r9 T. k
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    . R- Y$ }5 j" k& U. R; ?0 a
  747.         dwTotalFiles=1;: ^  ]0 y* v3 n) C) S
  748.         dwDownLoaded=0;) C; K; z3 v& ?+ B; ?# M
  749.         bSilentStep=TRUE;
    0 W/ S& {+ E4 a* K% ~
  750.         bCompressed=FALSE;! J$ |" L* }  N0 Y
  751.         strExtLocal.Empty();
    , y0 C9 C. e$ q$ ?6 d" s
  752.         strFullName="checkversion.txt";% S  {* H$ `! r" v7 y1 r2 l
  753.         dwProgramState=AP_CONNECT;
    " J2 p7 c/ K1 F, f
  754.       }5 t$ @# n0 c9 r+ N& g( s# [
  755.       dwStartUpSteps=4;
    ; N$ M% G+ |0 i! ]0 L
  756.       break;
    ( r- t3 R1 ^' t8 N5 t
  757.     case 4:
    3 K2 R% X# k9 O% P- W
  758.       {- g& B3 y, p( [& F
  759.         FILE *fp;
    9 W7 M3 R/ O* f; f4 R  P8 B0 y
  760.         char szString1[128];
    0 s0 [; G7 n5 t2 N, B7 o9 x
  761.         char szString2[128];+ U7 _- S: J  y9 j. b
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; L5 Y: f* u6 e) Z) E7 N$ n) V
  763.         if(fp)1 W; ]  x  W0 a  ?5 }
  764.         {
    ( w/ m' N, q( N; G' m7 |
  765.           fscanf(fp,"%s",szString1);
    2 v& ^7 c0 C  P$ B& j) S: v& D
  766.           fclose(fp);
    # F7 s* z& k: H  I
  767.           fCheckVersion=atof(szString1);: T) v. m( v7 r
  768.           fp=fopen(".\\checkversion.dat","r");* L4 C! }# Y5 D8 X  @5 M5 c2 g
  769.           if(fp)- _5 f8 @+ {, Z. |
  770.           {% F5 B9 ?: ]) [
  771.             fscanf(fp,"%s",szString2);/ y. s* P5 k" N7 u& l, G( Z) |  Z1 x
  772.             fclose(fp);5 {$ r. P8 r7 n2 t& m
  773.             if(atof(szString1)!=atof(szString2)), q5 Q6 A& i2 s- m+ X) O3 Q
  774.             {
    $ r( Q6 m5 U, c0 y* n" E
  775.               if(!Dn.Connected())
    " g0 h' K4 H4 Q1 u* `
  776.               {1 H& H6 e) j8 [, m' h) I( w* y
  777.                 bFirstUpdate=TRUE;' w" w* i( c9 [  b9 b, C  b- a
  778.                 dwTotalFiles=1;
    : C. t# T. s3 o; Q6 @: N0 g% n( Z
  779.                 dwDownLoaded=0;
    ( ^6 x% ^* e& i. A! V7 a
  780.                 bSilentStep=FALSE;
    8 D3 I1 I4 G1 }! k
  781.                 bCompressed=TRUE;4 c! ?* z0 `0 V
  782.                 strExtLocal=".\\DownLoad\";, c2 f- G9 i; }3 r% c
  783.                 strFullName="update.txt";
    # l3 C0 j& u; n  A) N% L  W  [% d
  784.                 dwProgramState=AP_CONNECT;3 g1 m. {0 J" J. t
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 @& g7 E* S9 k- W# F
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( a3 B: b: q3 R% i# g% j' w: O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    9 B2 X& H  s; {1 G! d9 z
  788. ! s- F/ f; T7 h( b, f" L" E
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 N4 g$ N% J6 A$ Q5 x% n! g
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    3 L% _$ M$ W! c; T
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 Z! K& h( A, F, ?8 r0 _
  792.                 {
    ; ?4 O2 B7 j4 m& \, k& a& ]  w
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    - R( R/ E) H; n3 i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");( d/ ^$ I' |8 K, l2 r) p* F
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");$ ]" Z, z7 a: \6 I5 J
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! |* S3 Q2 f0 v$ t. ^

  797. # c& B4 g0 \( S. |0 L  q
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , [4 o6 B- v9 N7 \7 T2 L# f
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; x) r) S! V2 Z7 ~' [2 _. Y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");+ r" V0 Z7 @/ u; o( n8 I- }0 |0 _/ i
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , G5 [" I" V( f. k. V3 i
  802.                 }
    , \1 D* g# v) r- H( T9 Z
  803.                 dwStartUpSteps=5;8 m0 ?/ _. e+ f, K/ c  B3 M9 r
  804.               }
    7 R7 {' m/ s% {" o
  805.             }
    * X; X' u) ]3 S. p+ Y
  806.             else* u( P  f/ B8 z% n
  807.             {, V/ v, r+ ], K1 [  Z* }
  808.               unlink(".\\DownLoad\\checkversion.txt");0 @4 q" u3 G. c& [  t
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");. }( F$ Q% j1 T  _
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");) k' B3 Z' Q1 p* O% j
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    - z# x$ F; L/ X' L8 d4 D

  812. 5 N# J+ P5 O& o/ R$ o
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* B1 t5 m) w2 t( J, n
  814.               dwStartUpSteps=99;0 [8 i  H7 H- }1 o
  815.               bFinishUpdated=TRUE;' z# o% \$ v) ^% j, z# J
  816.               bCanUpdate=TRUE;
    / _% k/ z& L8 I  |
  817.             }! r+ ^, J) N  l
  818.           }: U; k9 B4 K; ~; @" Z
  819.           else
    ) K% [  Y: F$ ]( {9 H
  820.           {' u( Q( S7 O6 Y0 X% p
  821.             if(!Dn.Connected())* [6 T9 W) A8 @6 c) I% }4 _% \- H
  822.             {
    ) Q+ v) g  L1 q! |2 J6 P
  823.               bFirstUpdate=TRUE;' N# J7 X9 \# @* h  s
  824.               dwTotalFiles=1;
    . D8 S/ a* Y9 U; j0 t
  825.               dwDownLoaded=0;) ]$ d# v) Y" J1 T% p
  826.               bSilentStep=FALSE;
    + U% q; k0 S* E3 `. J" y* G
  827.               bCompressed=TRUE;2 D; E) H+ \/ h
  828.               strExtLocal=".\\DownLoad\";
    ( C0 p7 ?9 e$ J
  829.               strFullName="update.txt";
    / i9 C0 w" Y: {. H( f5 t- l
  830.               dwProgramState=AP_CONNECT;+ _# p; o7 d+ e1 q9 h. t% l" R
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 K2 y' R5 h" {0 T; B2 }8 {. P
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; U; ]5 ]9 P7 |
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 P% p. Q& c! q# I, d$ Q8 e
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 D& D0 a1 W: i% W  Q$ h4 z
  835.               unlink(".\\DownLoad\\checkversion.txt");
    0 V6 n, N2 `% e5 I' E0 {
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    % ?! Q- d- r" J5 F% R, m" [
  837.               {3 t0 A% q" q# l8 D; T/ N7 X6 K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ( u+ t( i( w. Y9 k* ?! R
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    1 I# v/ p" T. f
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    0 m5 j! |9 L- f6 H/ I
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  ]) B$ i, T0 j4 h, b# q
  842.                 & K! Z5 x( m! k1 Y4 \( O+ ^
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 F" |. q" p  U5 B. |. M
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # G- a9 ?3 X+ m* g9 Q
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( s' I7 W( p1 x! ^* B& V6 x
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " o' O& x4 q1 W6 g0 C! a
  847.               }
    & F* w+ w6 c7 X4 k' G5 |' W9 }
  848.               dwStartUpSteps=5;7 w* A2 N- A3 x& @9 w) u. g
  849.             }% Z( W/ f: u7 p$ \  m2 G7 y; ?- `
  850.           }7 r1 U6 ?2 m, x* H! d9 w+ a' P3 X
  851.         }
    8 Q; {" ]" D2 ^$ A) c- {$ i
  852.         else
    " Y$ e& N$ B4 L+ y8 c
  853.         {
    * [5 t& E& o  {6 \$ P7 O
  854.           dwStartUpSteps=3;' R+ b# B% U7 [2 N: ], D% k' ~
  855.         }4 o% H+ Q& R" e
  856.       }
    ; P2 [' ^  A) U: ]) \: m
  857.       break;, e/ }9 T4 O5 h4 C) t
  858.     case 5:
    2 [7 @3 z- `) _' `5 J
  859.       {
      Y$ E9 ^( |4 B4 O6 `- B9 h
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)3 f/ N/ b% b: n3 c  v* ?% N- r3 r
  861.         {
    4 |  h0 o' ?1 d, S: c1 M
  862.           int opt_overwrite=1;
    . s* j9 \) x( |; F' o' j' ]
  863.           int opt_do_extract_withoutpath=0;
    2 T0 d) f* R* N
  864.           unzFile uf=NULL;
    7 Q. i. w1 S6 C1 W, u
  865. 8 ^' g3 q$ a, w' r8 ]
  866.           uf=unzOpen("Wsa.zip");: f% K( @6 W' x+ x7 A  m
  867.           if(uf)8 e+ N0 o6 w6 |7 P
  868.           {
    2 D2 a5 O! k; F8 Q! N
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 S/ |3 ~; \+ `1 e: u2 C7 W/ J
  870.             unzClose(uf);
    / k8 R$ T1 T8 K8 x9 s0 V: k
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    + U/ }( A! i( J/ a8 c
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");6 m3 r3 v( F! ?7 S5 k& u7 `( a
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ) c2 r/ t5 ~: q( a" W- H0 j
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 m; G; y" U. T8 R; i* w
  875.           }
    4 ], j5 R* u/ Z! c+ ?3 [
  876.           DeleteFile("Wsa.zip" );2 H1 S" h& K4 f" t/ C
  877.         }
    ( H6 S5 F, ^2 X; B: j  |% ]  ]! j2 C

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

% G# [& F% H# }7 ~0 D

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部