找回密碼
 立即注册

CSUpdate.exe源代码

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

8 c+ N) _  i1 ^2 L/ w# p
  1. / RevApp.cpp : Defines the class behaviors for the application.3 w0 l( ~( i/ f/ @
  2. //1 ]$ C  |' `/ X
  3. 0 a( Z- _* S* s3 Y$ r
  4. #include "stdafx.h"6 U. J! F! N) D

  5. % l& t) \0 T: [
  6. //#define UNICODE: n( {7 M- I/ K& t2 t
  7. //#include <gdiplus.h>
    ) y4 t! Q1 R* N! Y0 t
  8. //using namespace Gdiplus;$ v) y4 h' T& m

  9. & w3 S9 C3 l  o
  10. #include "RevApp.h"
    " y$ o  A. A( C9 ]& G$ b
  11. #include "RevAppDlg.h"
    9 Y4 {/ n6 d3 X$ ?( N
  12. 5 H# X: n$ q5 f" R
  13. #pragma warning(disable:4786)
    ; a/ H8 E$ X7 ~7 Q$ o  X  p% a# j
  14. #include <map>8 F# ^; P# H8 N
  15. #include <list>
    + d- b' Z0 L0 X% C7 |# I% L
  16. #include <direct.h>
    , ^  K2 v# @( k* ~

  17. / t9 _3 Y4 E5 G, X( h5 u
  18. #ifdef _DEBUG+ [, p+ W, v2 W
  19. #define new DEBUG_NEW
    ! b/ V3 f5 m+ K+ v3 O
  20. #undef THIS_FILE
    , c, e" a4 q9 {  q4 Y" Y$ l/ f
  21. static char THIS_FILE[] = __FILE__;
    # Q# @  v7 E3 I( P3 r
  22. #endif- f  [0 y( b2 L
  23. #include "SkinResDef.h"0 U+ l" ~: D% z
  24. #include "ChangeBG.h"; }7 |5 m6 a& U* _' {6 c0 x  K' _
  25. #include "AFXINET.H"
    ( q  t9 |8 u* ~) r
  26. ( ~* V: B2 W9 b
  27. #define TRADITIONAL_CHINESE 00 c5 _5 x3 A! g3 E
  28. #define SIMPLIFY_CHINESE 1' c" B1 B7 Q- t% l( X1 w
  29. #define ENGLISH 23 d2 C" `8 u5 ~3 k: ?+ w
  30. int m_iLanguage = ENGLISH;# ]3 u- P) i9 @, ^. L
  31. /////////////////////////////////////////////////////////////////////////////
    - x8 ^) T3 N6 l2 r7 a
  32. // CRevAppApp
    2 l, i  o' D; V1 Z
  33. & b* E+ Q! y, M' {* t. ?
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp). O7 L" J; l% G3 v. g# \6 d) p: X, n
  35.         //{{AFX_MSG_MAP(CRevAppApp): c, t6 q/ W. r
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    % b! M/ `/ x2 H7 ~/ M3 {! h# i" @
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 Q9 k7 F% W" Z; f  {
  38.         //}}AFX_MSG- e6 L9 H7 x0 e
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp); b3 j/ D, a  x/ ]9 p; G: d
  40. END_MESSAGE_MAP()3 J1 K2 ^7 e3 J! ]/ K
  41. & \4 ?2 b2 t% |# Z# B9 O5 q2 B
  42. /////////////////////////////////////////////////////////////////////////////
    ( g5 i( V+ l2 O8 A1 w% X
  43. // CRevAppApp construction
    3 n: N2 q) s) Z) I8 D$ w

  44. 5 ?. ?/ Y9 o  `/ X
  45. CRevAppApp::CRevAppApp()
    ) Q' N" c/ r) t3 V7 H8 [
  46. {$ U* y& R' i7 m7 F* M
  47.         // TODO: add construction code here,$ j6 M: ]" S7 f  S
  48.         // Place all significant initialization in InitInstance) A1 P$ E. Q& f- X- q+ A$ b
  49.   bDisplayIsBig5=FALSE;
    1 w' |! U% U6 f) [
  50.   bRestartUpdater=FALSE;8 V1 z* T& J3 \, _( y- G
  51.   bFinishUpdated=FALSE;" |# Q3 w  ?8 X) Z7 X8 @9 \6 F
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    - l$ I& p7 w+ m( r8 P5 _2 R8 q9 L4 B4 A
  53.   InitChangeDataBig52GBKS();# m1 ^; J9 t3 ^" r8 w" n
  54.   InitChangeDataGBKS2Big5();
    6 V4 X7 t& s$ D- W
  55.         //$ P% [7 U. }8 o
  56.         bClickRunExe = FALSE;, p  V' K1 ?! P/ i2 I  P; O3 t
  57.         //* B0 W6 C. Y, m* V2 T6 n
  58. }3 m; S" Y; h# L4 m+ s, _. u

  59. 9 R0 x( E, e$ O
  60. CRevAppApp::~CRevAppApp()
    & u, T5 R# I; P. j7 T
  61. {
    # y  p) m' s+ @4 m$ s
  62.         // TODO: add construction code here,
    1 D: V: q. N5 X& c  W
  63.         // Place all significant initialization in InitInstance" M' E* v2 I* V" z! X" p
  64.   EndChangeData();
    ) ?* F+ y/ B' K  F
  65. }
    3 r! H( E3 Y& i1 T6 n
  66. ( y6 X  f4 i0 z0 z- r# N
  67. /////////////////////////////////////////////////////////////////////////////: h- G" Z. q1 C  \7 n! h
  68. // The one and only CRevAppApp object
      ^$ n( f' P1 S- a; g7 u

  69. ; A7 c( X8 L5 {, I) I  O
  70. CRevAppApp theApp;5 Z8 T- \$ a9 \, z
  71. 3 ?7 |$ H% l1 W% z2 }
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)9 K5 E: A2 s5 x
  73. {
    % @! ?: l5 f0 q% W- h2 e" B$ U# v' ?
  74.   int iEOF=0;
    0 i, k% M. o! e* y9 H, b
  75.   char szTempName[MAX_PATH];
    8 [( l# ^. ?* h" J* Z  w
  76.   *szFileName=0;
    * W  v, W1 \( C' j- d3 Q% j" K& @
  77.   iEOF=fscanf(fp,"%s",szTempName);
    + D6 z3 i2 _( j9 s
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    5 u8 D! x: l# B! b- V9 m/ L+ K
  79.   {5 Z% Q6 d+ z; w/ k- ~
  80.     strcpy(szFileName,&szTempName[1]);
    0 p# h6 N( X) c# k1 Q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)! U; M  H, L, j- w& P4 n
  82.     {, V" v, ~8 `5 m8 J
  83.       iEOF=fscanf(fp,"%s",szTempName);6 r2 I, c- i* u3 B
  84.       strcat(szFileName," ");
    & s; F8 D0 w- T& Q% d" `* s  C
  85.       strcat(szFileName,szTempName);
    9 B, N& o1 _# S8 S2 H8 O2 J1 s: m
  86.     }
    ' ?+ N- u2 |6 Y5 h, X, ^
  87.     if(strlen(szFileName)>=1): P/ X5 S# b) j3 C% {- O
  88.     {
    % I1 O' b' Z& R7 |% Q+ V
  89.       szFileName[strlen(szFileName)-1]=0;  d$ l! J0 y3 l, f9 Y+ H# Y
  90.     }
    # C  q4 y  z1 P* |
  91.   }( ?4 x& n; S1 f2 ^, \- t
  92.   return szFileName;
    4 Z. }4 S3 f! d4 I  h! h
  93. }+ l* x6 x2 M3 w4 L

  94. 1 i* I: C& n- e6 z( E4 N6 T
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    * @$ t+ u' s! r: \% a
  96. {: Y0 N/ Z% c) ^
  97.   FILE *fp;
    5 @, a0 v7 P6 ?
  98.   char *key=NULL;; X& ~  h6 w) S6 J$ [1 j  [# }
  99.   char version[MAX_PATH];% x( |) U$ P. B$ K  [" U1 R
  100.   LPUPDATEFILE file,olds;
    # g* w8 d9 J" H' @% f* f
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    . J4 H/ U" M3 Z

  102. 4 b2 T' m2 i) F
  103.   UpdateList.clear();2 K7 p7 E& ~- ^
  104.   UpdateFile.clear();
    " A0 A! N# J: T" n4 {3 Z
  105.   if(GetFileAttributes(filename)==-1) return false;
    6 u- y/ I' c( h* y
  106.   if(!(fp=fopen(filename,"r"))) return false;0 k" c# C0 y, f8 |8 V- a
  107.   fscanf(fp,"%s",version);
    $ N) }  H. [+ x5 R2 \
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }, o- f1 [: b4 A. d8 [& l
  109.   while(fscanf(fp,"%s",version)!=EOF), `3 \* R5 c; ]8 a- H
  110.   {
    & G! L: L, l/ P/ S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % r: Z( h  V* A! D! U- B4 X- a
  112.     fscanf(fp,"%s",file->path);
    $ X' @3 Q; M- B5 P8 i- W$ v5 }
  113.     ReadFileNames(fp,file->file);
    # X& Y. D/ h& b: W" r
  114.     strcpy(file->full,".");
    ( A, J) f8 E  \2 l6 y) h
  115.     strcat(file->full,file->path);( a7 }! S6 Y5 f# I8 `" z4 V9 q5 m
  116.     strcat(file->full,file->file);
    , w6 ]! Y: o6 w/ o+ a- j
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())  E3 J' y: I# T4 Z
  118.     {) G  x8 c/ Z5 S- `' c
  119.       file->vers=(float)atof(version);
    5 {0 x% e; u" }! j# ?" p  x7 i
  120.       UpdateList.push_back(file->full);
    8 S5 o' R( q* g% w, p8 ?" b9 f8 f1 X
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));3 v# d6 m% L* ]) \  A1 _: w
  122.     }, G2 w  z3 L8 k. s6 G& S. \
  123.     else  K) S9 Z1 J4 R# d/ v0 N
  124.     {. e+ ~% R7 `6 Y& Y
  125.       olds=(*p).second;
    & A+ Q9 ~. S* I* v) F9 }0 Q
  126.       if(olds->vers<(float)atof(version))1 @) j8 |" t% b! _% z
  127.       {% g; G- V$ o' J8 }
  128.         olds->vers=(float)atof(version);
    ' `5 u7 E  y; j
  129.       }( q: t7 I* w! Q$ }! t
  130.       free(file);
    7 y! B3 p$ R: f4 V* y- p
  131.     }
    : ^: _, [1 K+ N! P" a& G
  132.   }
    2 h) Y2 I' k) m% Y4 @# u8 |
  133.   fclose(fp);
    2 D3 P: |+ V8 _2 b: S; [  }7 b
  134.   return true;. @4 J7 U+ C  ?0 Z, E
  135. }' G+ [% c' d* ]. [7 h8 [
  136. 9 |7 Q6 D7 L, {( R
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)# Z5 [# e2 |( S% P" M
  138. {( R9 N9 v- \6 ~$ b3 o
  139.   TCHAR  szFull[MAX_PATH];
    . W7 C: m, _+ D. P7 h; ^2 t9 T
  140.   TCHAR *token,*inter;
    $ C6 _! @1 a; p, C0 \
  141.   *szPath=0;
    . q3 k5 C/ _# i6 C' J$ O$ H
  142.   strcpy(szFull,szFullPath);
    $ p7 Q$ z$ e; @! _  f; d
  143.   token=strtok(szFull,"\\/");$ ^/ d1 b# Y8 d- R. e3 G9 a
  144.   inter=token;; b  S$ D6 w) w  ], Z1 u
  145.   while(token=strtok(NULL,"\\/")); {' S) Z5 C% J, r
  146.   {
    ; J2 J! ]& z8 d6 s, d/ Z( ~
  147.     strcat(szPath,inter);
    3 G- O% z' }& R8 P! ]7 |
  148.     strcat(szPath,"\");" X8 \* N6 n* [' h6 e. ~, z' ^
  149.     inter=token;) Q( r* ]# l. `+ c& l
  150.   }# S# U0 A  i3 g- A5 U6 l; b! T
  151.   return strlen(szPath);
    2 [8 j" z' \2 f4 V+ f5 V/ c  V7 r
  152. }, N! Y0 t& z5 {
  153. 4 R% k' y, N+ J" N
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)# A. k% b) ]- y# T" B2 A, z
  155. {
    * \( w% X+ i: j- j; z3 }  F
  156.   DWORD attrib=GetFileAttributes(Target);! F: `- u3 n, I& ?
  157.   if(attrib!=-1)
    8 q: n( D5 f/ n" c' U
  158.   {  q2 J9 M7 w+ T
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))& t% r% n5 k; v4 M) ~) g
  160.     {
    * A2 Z6 D  m) d1 p; B% u
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 G) ]1 y2 `9 s0 n/ E
  162.       SetFileAttributes(Target,attrib);; E5 ?, q. M2 a6 U# B
  163.     }
    : M) T5 n! V* @0 \* y3 v
  164.   }8 j  F$ \) r$ W3 F) d2 U4 {- z6 R
  165.   CopyFile(Source,Target,Erase);  u2 H( W5 L* W7 y0 ^$ t4 O
  166. }
    5 g" H1 T+ B- l0 e+ S5 V+ u, y
  167. ' a! ]! q! q6 O" t; P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)  z0 O1 ]7 T" w" E
  169. {4 W: h" z) y. [  Z
  170.      FILE *fp;
    9 H1 L2 h: b$ J& D5 V0 A
  171.      char  szBuffer[8192];
    3 ]; V8 A. S, [1 {
  172.   va_list  argptr;
    7 t  x+ ^1 [6 [+ L
  173. ; S4 Q( O3 Q$ G/ z0 ~, C: c1 N8 \
  174.         va_start(argptr,message);( L, y) h/ e4 b7 y. K, Q/ M8 A/ ?
  175.         vsprintf(szBuffer,message,argptr);
    / \" {" S: t6 u" G+ f  z" L
  176.         va_end(argptr);
    ' e* i& Q: Z6 g3 M
  177.   fp=fopen(FileName,"a");
    $ h* e4 t& t7 T% ~4 V1 M' {
  178.   if(fp)/ G2 @; x2 V: S8 `8 P. N
  179.   {& U4 d$ F, _" b  a1 M* e2 [
  180.     fprintf(fp,szBuffer);" T* X7 u/ z# l
  181.     fclose(fp);
    ! I$ s0 C  a' ]
  182.           _flushall();8 l$ Q6 \6 \4 r7 I# q, B, R1 j0 l
  183.   }
    . z) V0 U1 g: d" l! b: R! o
  184. }2 I0 C( ~' ~9 a* u) p: l: o

  185. 2 r/ |! q& D/ l4 ?
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ) |! n1 T& }; J- X
  187. {& G1 \. X' n5 f; \2 D
  188.      FILE *fp;
    , K5 i& @. v% m" w  j) [7 s* h
  189.     DWORD  attrib;% N# B$ r( W1 N5 d, H" L
  190.   attrib=GetFileAttributes(FileName);) D* p0 z4 D2 g! S3 s' B* e
  191.   if(attrib!=-1)& K* T6 ^6 ]* w$ W  T. I/ Y2 Z
  192.   {
    5 M  U$ ]/ y1 p9 t4 @" O
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);. R; y6 O  q4 B& J8 p$ d/ H
  194.     if(!SetFileAttributes(FileName,attrib))% ?* h0 d9 T, t
  195.     {
    + I' r' `. P0 i$ k! D
  196.       return FALSE;
    + N0 T) S" o0 D5 x) x( p) ^# ?
  197.     }
    3 P  Q0 w- N3 l, \0 p7 w. h
  198.   }
    2 Q/ C1 z5 X) M9 V8 x) {
  199.   fp=fopen(FileName,"wb");. o$ J5 f. c0 f; V' k' N
  200.   if(fp)
    ) t" p! D# O2 d! i* n$ \% i- y
  201.   {
    6 L! y; T. P; V$ g* [  E
  202.     fclose(fp);% k4 s/ m- u+ j6 z1 {! p
  203.   }
    8 t) H4 z6 j* Q
  204.   return TRUE;
    & \6 G' n4 G+ l( {
  205. }! I; V% R. ?. `: o5 i% e
  206. * X) K- S: W, V
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ; k- [: w. K1 R4 v
  208. {2 j% U+ i' y3 s+ n( i# i# V9 y4 j" E
  209.   char filename[MAX_PATH];/ W8 E& x8 n4 x
  210.   LPUPDATEFILE file,olds;
    3 w# |/ p1 M/ V8 L4 E
  211.   std::map<int,CString>::iterator i;
    9 F. y4 N0 q) [' E6 g: A/ E
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! d  W) y: v. g8 ^+ {# k
  213.   std::list<CString>::iterator l;# A! [2 h/ k; A! g) K

  214. $ L. [) z, L+ |, G* s
  215.   if(bFirstUpdate)
    6 I5 w% V7 a* b; e5 t
  216.   {
    1 e- m, [4 O0 t; W! w
  217.     dwCurrFile=0;
    # Z7 Y# e2 @4 D  J0 N
  218.     bFirstUpdate=FALSE;0 F) J" @0 s6 h' J/ C) m
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 @% m) `$ `7 z  e! V( S
  220.     {& `9 N1 A8 A; w- N. e
  221.       dwTotalFiles=UpdateLocal.size();- c1 h  Z/ c( ?; v8 l
  222.       dwDownLoaded=0;
    / }6 E. l# S0 c+ Z/ ?: o
  223.       bSilentStep=FALSE;
    . D, X' c5 n2 ^! R/ A! Y  w5 j. i" S
  224.       bCompressed=TRUE;
    5 i1 R0 d5 I! A( N* ~1 W
  225.       strExtLocal.Empty();
      g2 m* `+ t) w2 h: r6 |
  226.       strFullName=(*i).second;
    7 j  Y# a; {  W' F2 m  p. G3 }+ c
  227.       dwProgramState=AP_CONNECT;4 y9 S3 A8 E) o- y6 E
  228.       return TRUE;
    " z2 P3 u% L9 [, q' ?1 U+ e1 Q
  229.     }! E3 J; A& p6 c5 k7 c$ i, \
  230.   }
    9 k, G- a1 c% q* ~" s' ]
  231.   else if(bRestartUpdater==FALSE)
    0 ?* h. e$ Y0 }+ C) S
  232.   {
    & d4 w* |. a/ O& v3 B6 U
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    0 B0 @- u/ v2 w& C6 S
  234.     {8 R) N  v) _. |
  235.       file=(*p).second;: x, Y; U8 O: D' d, _  C/ k
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    8 `" G7 B- W7 V
  237.       {6 c7 }- O& |* B6 n1 {9 k2 a
  238.         olds=(*p).second;; ~" g  \0 i- ]7 |$ U: H
  239.         olds->vers=file->vers;( l9 w8 f$ K" O. L' l
  240.       }
      c8 N9 F$ j; D- e# J% @
  241.       else
    ; ?; h, d/ v% J8 r) a; J; p7 s
  242.       {6 h/ z- G5 n5 O6 C0 D7 w
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . d% ?  m- d) T
  244.         memcpy(olds,file,sizeof(UPDATEFILE));8 y" v& {% L7 i9 |! j5 v, \
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    . G7 j+ Q" R7 V" c) n" c
  246.       }
      M& y1 y/ }# G" Y# D# L
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");# z) w) b& a* R& z5 k! x
  248.       sprintf(filename,"(%s)",file->file);
    3 R" ]2 c; d; Q# N% g1 k9 Z3 V$ N
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 e7 h  L) E' b7 j7 ~! n9 S; S( ]: X
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }2 l; @* s/ g, q- |9 X3 v( Q
  251.     }
    0 d: p1 ?0 P: s4 U9 {; \' k
  252.     dwCurrFile++;9 A% E. I; J5 Z7 ?& E
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . I# d! p2 h1 o, M# s  b
  254.     {
    ' x6 J5 C3 G  r* ^4 B
  255.       bSilentStep=FALSE;5 y- B) A, F  R$ O
  256.       bCompressed=TRUE;$ V5 \4 \1 Q$ Q
  257.       strExtLocal.Empty();
    ; P+ E% Y, I& k  m/ R. h
  258.       strFullName=(*i).second;3 R0 r8 C4 z! q' U( b
  259.       dwProgramState=AP_CONNECT;5 ~: |3 @" J$ U1 @9 M) J3 _
  260.       return TRUE;
    6 f4 A  O" |( j# T  B
  261.     }
    8 |, m/ e4 a( p/ }) ?5 v- @3 Z
  262.     if(!bRestartUpdater)
    , x3 W9 Y# W  V5 K, S& T6 \. N
  263.     {
    : u' }  \- y* n
  264.       int iCurrSize,iFileSize;. ]" [$ `- ^1 M0 E. M9 l# C/ q
  265.       iCurrSize=0;3 S  J1 r9 v0 h! n; E* s1 P
  266.       iFileSize=UpdateList2.size();+ i/ ^  ~3 L% L0 h; b
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 j& A' c. h) y9 Q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    # k" B" u# q0 w! x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");% P7 v3 c2 Y- \6 ^( v- ~/ O- W
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 I# _. D1 D$ N8 I* b& j
  271.       Fclearf(".\\update.dat");- ?8 y' |+ Y  M$ V6 m
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    3 _0 K4 g3 e" R- O! g* D, M2 I4 s* r
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 \9 z/ l( T; V: u( A9 }& r$ F
  274.       {- l- g3 E' z, T* A. X+ L/ Y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ( h5 b; C0 Z' o% |2 F# s
  276.         {
    * Z  o) Z$ {5 f
  277.           file=(*p).second;$ e% U- u5 G* ]# o
  278.           sprintf(filename,"(%s)",file->file);
    . p4 ]" m, g6 J7 _
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # M. L* G6 ]6 |& d# h% t
  280.           iCurrSize++;
    * |5 g& Q* a. S9 L. u
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));! l6 l- V2 R* m/ e
  282.         }! j5 X5 I* J* Y! U
  283.       }; Q' [' G9 n9 M. \6 w% t  j
  284.       unlink(".\\update.txt");
    1 e4 o6 i- G6 g
  285.       unlink(".\\update.tmp");; T& D+ I/ ]1 {5 |0 P! c5 ~' W
  286.       Fclearf(".\\checkversion.dat");9 p: w% S3 f' b: c2 j1 Z8 Y+ h! Z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);) e8 U6 x/ l; o* n& t2 r' D! h
  288.       if(UpdateLocal.size())
    4 ]" x! I1 g! t; K* i/ {3 j
  289.       {) a& {! h) x  \" }$ M2 [
  290.         UpdateLocal.clear();
    , @3 A/ X; E2 |2 Q- P6 [
  291.       }
    & n: U, ?5 x. n* T$ a
  292.       if(UpdateFile3.size())
    * o! B  b8 @+ l4 c
  293.       {- p' O! l. s( u* R! V+ G- u3 K
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 @4 l2 O, X, L. C0 b- x
  295.         {
    ! S$ i/ m  [# _6 U0 P
  296.           file=(*p).second;
    4 Y9 b, e+ \* O1 G! T& t0 _
  297.           free(file);
    7 Q! Y" }) I& S2 s/ H/ C
  298.         }
    ' f2 S/ {0 z3 p+ b9 _
  299.         UpdateFile3.clear();
    9 L, S9 M9 }$ S
  300.         UpdateList3.clear();
    # W( D* X- |0 ~: q9 q# {
  301.       }
    0 L3 L, A1 ?1 S5 b4 e* _
  302.       if(UpdateFile2.size())
    . K* s0 D. s' Q& z  T% }
  303.       {
    - E# p* z) {( e) S
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! M5 k% k; p7 q6 i2 A
  305.         {( p* _7 m- O" D" l% ~
  306.           file=(*p).second;
    # b, j) M9 b( M4 g) i- H# _, R
  307.           free(file);
    " R' B7 T+ F; y* C+ m$ S. S
  308.         }$ V, k! [( I  F) B
  309.         UpdateFile2.clear();$ l4 X. i* r2 w( V  }7 [+ M
  310.         UpdateList2.clear();
    ! c5 ]" Q+ P2 F
  311.       }% \( R2 }3 s- J7 V& l
  312.       if(UpdateFile1.size()); p4 Z- T  a' U
  313.       {' Y/ P: k( {/ t8 ^
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)0 i0 U2 p3 u  k. O2 b% i5 X4 l1 N
  315.         {1 ~' \  B6 o. E$ `
  316.           file=(*p).second;
    % |0 V8 `5 w! P7 T
  317.           free(file);
    ; o% T# M5 x0 ~8 V6 s4 q1 [
  318.         }, W% e9 c; ^. a( e
  319.         UpdateFile1.clear();
    ; N7 i& Z* C" `  R0 L8 |* w, j, H
  320.         UpdateList1.clear();
    7 E% J$ Q# ]" t* H+ h& T
  321.       }
    4 U! R1 l* I- E1 r: |. N
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));( v+ w7 A! O, s. D* E' v7 n" N
  323.     }& a1 V. r0 X7 r/ u9 S4 [; w. C* l
  324.   }  b+ k* l3 K* ?9 ^
  325.   return FALSE;
    8 B3 d3 v, ^# S- t! y9 K  e
  326. }! N# H5 @7 U1 k2 X4 H& t

  327. ( j6 X5 x- j8 Q' P; t# K
  328. void CRevAppApp::ClearAll(void)
    1 _& b* G, N+ _" j7 G% _6 L) G& P
  329. {
    # A- W- `* n. y* D
  330.   LPUPDATEFILE file;; N# \) [3 s% X  F& i8 {7 q' S) a
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; T4 V, `7 x( p
  332. + z  q5 ?' ~' U, N
  333.   if(UpdateLocal.size())* J6 Z8 F6 H2 \/ \1 w2 x- f8 @
  334.   {1 M# K) E7 L; G( F* W6 x; I" {+ n2 a
  335.     UpdateLocal.clear();
    , C1 g6 G1 c) t4 b2 u
  336.   }
    2 O* w: `& L6 s' w1 f
  337.   if(UpdateFile3.size())
    2 J; c. \8 ?1 L% c- B- V0 W; _% h
  338.   {
    $ d$ `8 X1 O! V
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)& G9 r# `# e; \3 r
  340.     {
    6 e, n) l8 G" Q) Y" Q" n
  341.       file=(*p).second;
    # ]* J# l' `/ J% h1 b
  342.       free(file);
    - p; X. M  [& c2 H1 m
  343.     }: W" c0 g  q/ @0 R3 F) L
  344.     UpdateFile3.clear();, }+ u4 n8 }8 A2 z$ ?
  345.     UpdateList3.clear();
    % O8 \1 d) r" Y
  346.   }
    9 b7 ~  l: j, l+ C6 h" G1 O& g
  347.   if(UpdateFile2.size())) G' d; T% L; C( v% w
  348.   {
    * L9 i) {- ]" L  X: ~7 y* Q
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + E6 u8 s- U( r( {
  350.     {1 h& u% t- `. K& m* u: g' u
  351.       file=(*p).second;
    # Y" M) ~( R8 @' i  R0 b
  352.       free(file);
    # u( C9 g. }# D$ p- X4 Q( d
  353.     }
    4 d' L4 z# l/ p+ O
  354.     UpdateFile2.clear();- d- Y8 }, g% b+ A/ W
  355.     UpdateList2.clear();
    % ]& |0 b- U3 o
  356.   }$ u* m( n* @* R. x0 y. t/ l
  357.   if(UpdateFile1.size())
    $ D2 f: ]3 H4 O1 `& H2 y' h2 `6 E
  358.   {
    7 I) S* s+ B& G, m7 j
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + e3 V2 c& b7 H( B4 x! P
  360.     {
    3 L8 ^: }% P5 E* d7 ]+ X
  361.       file=(*p).second;
    % h! Y: E9 y" P
  362.       free(file);
    4 H' Y- {8 s+ b/ M" V+ b  O: b& P
  363.     }
    + e9 m6 b3 v9 V) N. V* l
  364.     UpdateFile1.clear();
    ! H, }) |6 M: B, ~0 z  H
  365.     UpdateList1.clear();! X5 H1 t. \- c3 E+ x  a6 i
  366.   }
    5 Z- H4 [3 y: R+ X
  367. }  
    2 P" z/ @% P2 [& L( Q+ i! f
  368.   
    & P6 {) S! u8 t+ U; o: |
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 G( a5 U9 m" h! t& H. j
  370. {
    ! k. z% m  M) k( H% O6 j2 {
  371.   int c;
    " {" ]% y. T* _! M$ @
  372.   LPUPDATEFILE file1,file2;
    ) H3 K. ?8 X- N
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ j; E; z  g# e
  374.   std::list<CString>::iterator l;: Q/ l, z  z0 R1 t" P8 a' d2 E
  375. " X4 q: X8 I3 n  t' o$ @
  376.   UpdateLocal.clear();
    / z0 M4 X% z/ E; }! p3 K/ a
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    , L8 j( V6 D( ]5 g- V; j
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ [  I+ u, y5 |  s! |0 J# l
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);8 E) v: L6 K7 `4 S
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 u2 q5 L3 P! H# f
  381.   if(UpdateFile3.size())
    - W/ i  H3 M2 H% p" T% P
  382.   {& _* S+ z+ E0 o% k
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ) v; f2 e" F# x8 S
  384.     {6 O; i& g" F& ]6 f
  385.       file2=(LPUPDATEFILE)(*i).second;# h, {+ o; Z! j8 `( G: i5 M
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / m: Q7 w; w4 |/ V$ c
  387.       {
    - ~, O: v1 t  K  l3 {5 E$ t
  388.         file1=(LPUPDATEFILE)(*p).second;
    8 n- u# f' ^& `9 m+ v* {
  389.         file1->vers=file2->vers;+ Q! h- w9 K+ a# D- N6 d# ?$ F6 ?3 p9 B
  390.       }" n& I( \* @0 L$ k  [8 e6 k  {3 {
  391.       else. G4 c$ N4 Y8 p7 V
  392.       {
    + r+ n; Q- t" T+ T1 o, h
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: P9 |& E9 F  T8 X& c7 r# |8 k
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' f$ u7 A2 {+ |5 |
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ' M' R$ c2 I* b  T; ?" Y$ }
  396.       }
    ! v7 k: ~$ v/ s0 @5 u, H! r$ F$ \
  397.     }  O" |0 g5 X! ^1 R
  398.   }
      {" M2 W4 O7 t' k1 }( R
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)0 z/ L! z+ g1 [, y& d+ q
  400.   {
    6 D! P4 O# e7 s, x4 F7 U
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    $ c6 c. ?; j) l
  402.     {
    1 q1 Z/ @( s5 v9 P6 W3 c
  403.       file2=(LPUPDATEFILE)(*i).second;
    ; E9 _) M2 @6 ^4 p
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ |! V4 y- S9 `. p2 h; i% E
  405.       {1 F/ w5 o" R2 Z. H3 |
  406.         file1=(LPUPDATEFILE)(*p).second;
    . C2 `) w9 x: s: i: I' o4 \
  407.         if(file1->vers!=file2->vers). @) @: T8 z# n9 f! z
  408.         {8 V  o) _; h1 A
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' M; M7 K" p( e6 R7 I0 p& F7 O1 |/ m
  410.           c++;
    - F; I6 _$ u" f) e2 {1 c) n
  411.         }
    ) ~4 B4 u& v' |! V3 J9 c$ a( d
  412.       }% F& B) ]3 b, z9 b* w
  413.       else
    8 {( Q# R8 z6 M: j$ ~/ u0 c/ D2 D
  414.       {; Z: r6 y$ }& Y1 }+ t
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 {0 D+ Q/ m2 L' M$ A
  416.         c++;  _/ O+ [: w& z0 E4 g2 x+ k
  417.       }; y2 f3 c& ]6 ]& r
  418.     }
    , y: F) d* |- x3 [% Q' r
  419.   }
    " k' E& Y* C/ D* G- i. d
  420.   unlink(".\\DownLoad\\update.txt");- P9 h( j1 M7 C9 J4 A
  421.   if(UpdateLocal.size()) return TRUE;) ?5 j$ A! k* O# Z  A7 \% f
  422.   else                   return FALSE;. |: d7 L+ M: w8 {) d
  423. }
    " S0 n- M, ?' g8 O- s1 X- _8 e

  424. , Y+ z# C5 F1 k. ?" F
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/", u* h% x9 A" Y) }4 A  U0 E
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"4 w' }6 W* g9 X
  427. - W" |4 G3 \! W9 J' ^2 m
  428. & A- I& O  F0 E- y* K5 w  X1 n% c. B
  429.   r  T% O9 h* m. Y  c
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)- U7 u. K, ?4 Z
  431. {
    ' v( H9 K% Q6 M) x; e$ O
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    * w. E2 {. H- h2 f5 n: ]
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" Q- T: {9 ], @: N3 R
  434.   {6 E+ u7 n& i+ y- e% |0 g. `
  435.     char szLanguage[50];
    ' C4 S. {& E9 r3 s9 |& Z8 e# B
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 N3 B$ C2 A5 F
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! `9 n+ E1 a4 b9 G3 r
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; H. m8 ]0 m$ b" z! [" [$ O
  439.     else                                   m_iLanguage=ENGLISH;
    2 M* |$ W7 l6 q; ]
  440.     char szRegister[100];$ A, b1 n& l( q% P+ A6 u" d+ j
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    3 F# G, y/ l7 t8 C- E+ X
  442.     strRegsName=szRegister;3 q- g/ R' U0 C) Q0 X
  443.     char szPatchURL[100];+ p) _+ U0 C) J2 b: m% ~8 n3 l
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ @5 \! ~% R* Z$ u5 |: F/ O$ u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; b8 R$ f$ n( {2 |% w) ]8 r
  446.   }/ I! G6 Y: `- e' m; Y% P
  447.   else
    . D4 R7 U- t: d
  448.   {
    6 o. P# z1 c( p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* Z8 U0 R) E" x. g% K  L& t
  450.     strRegsName=DEFAULT_REG_URL;1 K$ M3 X" {, Z* D
  451.   }. C0 m% i4 Z% L! H" S% ~
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * Y0 c* b8 I8 P! A
  453.   {
    9 W6 Y% E1 u9 j' |, O
  454.     char szIP[50];
    - Z- J8 P$ R- p7 Q
  455.     char szDIR[300];) G- o1 j0 I( B
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 ]3 }9 U$ W2 t
  457.     {
    , |& M8 ?8 N. w5 |4 I1 k) s* B
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");! r* N# z0 X3 p$ m  k
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");% Z& ~# i9 ~' v1 }) f
  460.       strHostName=szIP;
    7 b& V+ l0 r$ j  R3 `
  461.       strHostPath.Format("/%s",szDIR);
    2 `1 B$ X& [, v  m. y& Z+ B
  462.     }3 ~; b# h' L6 o5 L) p4 w) E
  463.     else
    ) g* u& D$ t8 w; C; k% z# v$ M
  464.     {
    * B+ ?- o- B7 D2 i  f% x9 ]! i& j
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 m  I' h6 K5 y' j: K
  466.       {5 |  K. |9 S% `, p# K0 w6 x* Z+ a  {
  467.         char szLanguage[50];8 I" D8 Q3 J' V2 U
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 X2 C8 i% o; c& Z& H$ ^
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# E8 O4 B. ?8 M9 a. t
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 M( d: M' [. W3 X* i& ~5 Y/ v4 P1 Y
  471.         else                                   m_iLanguage=ENGLISH;) s. W. [7 y9 M' U% J
  472.         char szRegister[100];3 M# l& ?3 z' L! m! C; V  E
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" d' I. j( ]5 Y5 ]# D
  474.         strRegsName=szRegister;
    8 K- C8 o- V0 a7 R8 {
  475.         char szPatchURL[100];
    6 [2 e8 X6 T5 l
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: T! i: ?5 ~) d& E5 v
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% R0 O% d* t0 o' a
  478.       }3 Z/ G9 v8 K! q: d( [* Q
  479.       else( Q7 o& i: T0 ~% N  {
  480.       {
    * `$ U- N4 b  I4 X' r1 J  i
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * B& y) D+ |- d3 F+ j
  482.         strRegsName=DEFAULT_REG_URL;3 _( t& E8 c- ?7 u  C" H
  483.       }
    # p  p4 [% `. _( c
  484.     }
    ( A  Y: H8 x% c
  485.   }2 J2 ~6 {" T( V  @; q& t, @
  486.   return true;
      J; A* q5 e- P" p' z
  487. }
    4 w' \) l. f* P7 e; w0 X. N

  488. 0 s6 H( R* D/ ?* t  ]. Q, {) H3 j9 J
  489. #include ".\ZLib\unzip.h"
    " p) y) M$ O9 {. z
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ( [) g0 U' F9 l
  491. /////////////////////////////////////////////////////////////////////////////
    " m/ M! y8 C- k  t! L
  492. // CRevAppApp initialization6 j1 h6 p/ L6 \& u8 n
  493. 4 T: @/ a& h1 ~- p
  494. BOOL CRevAppApp::InitInstance()
    . L7 A- N; v* @0 Y
  495. {$ n" d4 C3 E& R+ a$ U
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];' k9 q9 l) k% c. V

  497. . ]/ V6 @0 O) Y5 d
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);* b4 \0 t9 c  Q) O* P4 u  s
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" S! g0 }0 N+ Q$ e
  500.   {
    1 j9 P7 X2 \& ^6 F) y4 D, ?4 l6 @7 K
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");, z! L* s7 m( L1 _3 U2 m2 i$ `
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % l0 O% N: s" X4 _
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))) a. y. @5 R# |: [. v
  504.     {2 B* O5 u+ ~/ Q4 L; t! F
  505.       strcpy(szPath,szPathTarget);
    ! I- b$ M4 x/ m4 A" L* ~  w* t
  506.       SetCurrentDirectory(szPath);
    1 _2 D7 n- b  R- Z, Q  j( l
  507.     }2 l" M% s( @( {1 L* `
  508.   }9 ?& {7 p; R$ t. @4 h9 M
  509. #ifdef _DEBUG* N6 @) z$ n1 ~5 U5 A  z. c- ?1 ]
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), X/ _" ~/ @) i2 Q( E
  511. #else
    ) {, a# u$ F( {
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). ~# n5 N: x; v- d
  513. #endif
    , r  j/ ?  r0 f# }1 L
  514.   {: i) R/ E! d# z
  515.     char tempFileName[MAX_PATH];
    7 b4 `# m  p  a1 b9 c6 _
  516.     strcpy(tempFileName,szPathSource);( m! O' |& x. h5 k/ J0 M
  517.     tempFileName[strlen(szPathSource)-12]=0;) o1 a' n3 H  k7 H8 t3 Z" e5 D' N
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 u) y4 Q5 _  p
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);" b% \: e% K& ^5 N5 I
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    8 T+ T9 s& o8 a/ O3 w; s
  521.     return TRUE;
    ! Q8 U$ G& K6 z6 ~) y
  522.   }
    0 q  O5 P" i8 w- m# Z1 p6 U
  523.   // Nuke 0118: Delete run.exe
    6 C. Z1 B; d  |0 \. [! w# H1 }
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    . u$ X; J# A5 Z) k- [
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");/ [! i. g* s0 a6 _5 m9 j9 f- B1 b
  526.   if(!ReadCfgFile("Config.ini"))
    . ~. ?8 b& X  A- X
  527.   {
    $ f' z' x4 K9 J; O1 g& E" k& H
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);9 o, P& u  ~0 l0 `+ G# V$ i
  529.     return TRUE;
    # S6 h! Y5 ~6 B4 X
  530.   }1 e+ a' P- N1 W# r6 M! ~6 u
  531.   HANDLE mutex;  y1 d8 T, m0 S( V
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 s5 o" W: [3 u" u- _/ d$ ]
  533.   {
    5 o1 S" J7 o& F6 z4 E$ [
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)) y$ C& `; j% _* ]% j7 p0 @- y" c
  535.     {
    : P8 q2 ?# ?' {2 g
  536.       CloseHandle(mutex);9 O- w& J$ B% j3 ?1 X
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);; ]) L9 E1 S! J5 G+ ?+ A; I  a
  538.       return TRUE;3 _8 }# [: P3 G+ v( p1 R) [0 C( `
  539.     }6 g& f! B9 O: I% H: A! _" r5 Q: P& G
  540.   }  & t8 a( C+ ^' O$ M
  541.   CloseHandle(mutex);( E# @' i$ {8 c  J# Z) X& \
  542. 4 x# s: Q. V: B! x* v4 V' W
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    , }& A4 o% e# W* |0 k2 f( B: V6 B
  544. 1 c0 w% f: K# E; W3 S' n* s
  545.         AfxEnableControlContainer();# u3 T, C9 ~4 m4 x' B0 ^4 `+ P

  546. + u3 {" B+ P8 o4 R: L5 e( |
  547.   bCanUpdate=FALSE;& ^7 ?  [: `& g
  548.   dwStartUpSteps=1;
    * |+ P# Z" P7 a; G6 C0 P7 S  l3 K7 q
  549.   dwProgramState=AP_NOTHING;
    + n) E9 I) Y7 j; W2 U; t

  550. * h* @0 H$ o- l1 |
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);4 x' l6 G* i6 z1 J

  552. ' M, M! e3 g. I0 V# `8 C7 B9 p
  553.         // Standard initialization. t" d) F  S4 v" m
  554.         // If you are not using these features and wish to reduce the size) ?7 Z% ^0 |. z  n5 C( q1 B0 N; a
  555.         //  of your final executable, you should remove from the following
    * `4 z0 |& `" p2 N4 v$ N
  556.         //  the specific initialization routines you do not need.$ e9 u5 D% b$ g- w9 i" B. o* W8 W

  557. 9 d- ~' u: h3 e/ P, E2 M3 V
  558. #ifdef _AFXDLL
    . x9 V# z+ d+ O, m; G+ r
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ) F: H+ \+ ], d, \
  560. #else; M$ v! u3 K- X, b
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 O$ g# h5 Z' c% A: p; W2 c
  562. #endif
    5 V- Y* {! ~! \3 ?% ~* r

  563. + ^$ H  i# c1 y: ^. }
  564.   dlg=new CRevAppDlg;; ^4 {. w% W! n+ c( z. |
  565.   dlg->Create(IDD_REVAPP_DIALOG);& n/ m5 ?( T+ m: A. L8 _+ [
  566.   dlg->ShowWindow(SW_SHOWNORMAL);% S1 f) A# I6 n- `
  567.   m_pMainWnd=dlg;
    % n% }4 i; u" Y. V/ @
  568. 0 \: G. L. n8 ~
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    # ~7 U' H! G  B) `- P, j/ k

  570. - g* g0 C% [/ ]
  571. //  GdiplusStartupInput gdiplusStartupInput;
    - J+ `1 f( G1 A  m" r7 w
  572. //  ULONG_PTR gdiplusToken;0 l- P  K: i. L0 _4 C
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ; i% P1 G! x& K% M9 z

  574. % w  M; U# M. S
  575. //        CRevAppDlg dlg;8 L. r, o# V; K. |
  576. //        int nResponse = dlg.DoModal();6 @: a2 K6 M. b
  577. //        if (nResponse == IDOK)
    ( }7 s! c& p8 Q( @0 x2 H
  578. //        {
    6 q5 ~! n0 w' k
  579. //                // TODO: Place code here to handle when the dialog is
    4 d2 u. f- O) |9 v7 t; P9 k6 B5 P; G
  580. //                //  dismissed with OK6 t, C% j5 |: w
  581. //        }
    % {1 @/ S1 C( \1 D; M. m8 j- P
  582. //        else if (nResponse == IDCANCEL)
    : U8 M5 \) Q+ {6 {$ j
  583. //        {# q- P( w* J5 b& m
  584. //                // TODO: Place code here to handle when the dialog is1 f$ A8 _8 ?3 D; W9 f; x# S
  585. //                //  dismissed with Cancel
    ( h- t4 L7 s: W5 P5 |5 k0 V2 Q
  586. //        }2 A; {' e( X$ c2 i9 [8 ]5 b% S
  587. 5 j* X# Z/ j+ h
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ( T. J, ]: D9 h' D
  589.         //  application, rather than start the application's message pump.! `1 n, l) y0 e! C- s. ~, C* D4 T
  590.         return TRUE;/ `0 ^. O" o4 Z: R; F1 u
  591. }$ e2 @2 W. c2 @8 d8 Q
  592. ! H. Q9 V7 M2 H* I# Q2 _7 d* y0 E
  593. char *CRevAppApp::strtok3(char *pSource,char *token)8 t, C% t$ \: y% |
  594. {
    5 z4 |: Y! T8 w5 |4 F! N2 I
  595.   int i;" O. N3 I, J1 p5 s
  596.   char *szRet;% t& x9 K2 l" c+ \+ n/ t2 G
  597. $ q- V5 a. C4 T- ?3 b' ~& Y
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    1 ?1 N+ P! c4 B+ N: O
  599.   if(sztoken)
    3 Q3 x# N2 S2 |1 s. s% m/ O
  600.   {/ }* U( u0 W9 t8 R" Y9 r
  601.     szRet=&sztoken[itoken];0 w; K, T. Q4 E9 x0 |% l2 H
  602.     while(sztoken[itoken])
    ' }( j; w! X" U$ x
  603.     {
    3 e( t+ {$ D$ G* z
  604.       for(i=0;i<(int)strlen(token);i++)) g+ S* M3 w$ n# ~9 Z9 Y
  605.       {& A9 U! l3 L5 N2 b: Q3 U2 _) d  m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ( F* k! ^, T: R3 C" r: }" v
  607.         {
    . w# R/ E# }4 {8 u6 K. r
  608.           sztoken[itoken++]=0;& \* I: A. }' _1 v7 V5 ~
  609.           sztoken[itoken++]=0;" q2 I: \! h( ]& a4 ^2 K; l& {- c
  610.           return szRet;$ O* A  o% w7 @2 U4 z' o
  611.         }7 w' L5 n/ O; R  L* H  M
  612.       }: v* c# j0 U$ q- r7 T% m
  613.       itoken++;% E" ^, X% @' r- [' C2 O! O# q
  614.     }
    ; M4 `9 R9 \% {# R
  615.   }9 v7 v& ^' t4 Z+ S# A
  616.   return NULL;
    % z: g: X  U' G
  617. }
    ) o) Y! [: F) H$ J0 I  L& A

  618. 1 E5 Z- E7 |' y1 A
  619. void ProcessProc(long Total,long Current)
    ; Z  s. ^/ w# {
  620. {: e5 e+ q! \& v" {' v1 D4 E2 x7 @
  621.         MSG msg;/ D: i0 E) J3 x; M" R+ U" G
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);% G# P- d  d7 f0 z( V
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 u4 F0 i5 ]: M* K' C4 V
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))& E* ?  |( I; X& j0 D) P  X; F
  625.         {
    ; u' U5 b. s4 ?7 q; h& y
  626.                 if(!GetMessage(&msg,NULL,0,0))( e# p- O2 S  a
  627.                 {' a( s' }" C/ h0 W
  628.                         return;
    6 g- |3 a$ N- ?7 D
  629.                 }
    5 Y( d) Q3 b; a) g
  630.                 TranslateMessage(&msg);
    % o' p. s0 x* U) R: G
  631.                 DispatchMessage(&msg);0 e: P9 M, j: V: [1 C5 |  P% Q' }
  632.         }        . Z& b! u: K- \6 L* @1 |% l
  633. }; f: n. G2 ?! N. L' }  N& K) u7 e
  634.   F8 S7 [  u  t, Z. X; r( \# t2 d
  635. BOOL bFirstChar=TRUE;3 N( i1 J' s6 ?" ]
  636. + S7 q9 s- u# L
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    & q. Q1 s6 A6 @8 Z7 R& H8 X
  638. {& \/ l  l8 T2 z) n% x1 F, Z
  639.         // TODO: Add your specialized code here and/or call the base class+ f/ y' }5 I# S5 C, i5 |; ^
  640.   switch(dwProgramState)
    : ?8 e, v: V: z4 |& d( A
  641.   {
    2 q. Z' q9 q/ ]) Q- K. a+ a" m5 p
  642.   case AP_NOTHING:$ P/ y: ?( O# A3 I+ ]3 j8 D
  643.     switch(dwStartUpSteps)
      c2 M) g; A3 B5 S9 Y" \* I
  644.     {$ q8 I' g! c. ~8 y+ b# M; b
  645.     case 1:
    / N- N' I2 |; j& {) G: t5 L5 R% K
  646.       {- k; s, K* D$ ~# R  M$ A
  647.         int i;8 p: R1 w4 Y6 c0 O* m
  648.         CDC *pCDC=dlg->GetDC();
    : ?. T2 D! P+ m* S; x% s0 o, |: J4 P! m
  649.         HDC hdcwnd=pCDC->m_hDC;
    4 x9 b/ Z: Y% |
  650. //        Graphics graphics(hdcwnd);
    . q; V8 @, j( S: w
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");! ~# u* ~# W# l7 o+ N# m# `
  652. //        INT iWidth=bitmap.GetWidth();/ n3 C) w, ?- Z- x6 _) G) j1 w
  653. //        INT iHeight=bitmap.GetHeight();/ }# b3 }' M+ k8 u
  654. //        Color color,colorTemp;
    - q9 S$ f& u3 o
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    # }1 A& ^/ _, K1 f! E) M  w: z
  656. //        {; i( `1 U! q, c
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    & b1 c. d) x8 t+ r  k2 L5 c
  658. //          {
    ( l. q3 }& q5 L# v5 g& [
  659. //            bitmap.GetPixel(iColumn,iRow,&color);0 C; G0 a- l6 T! L4 d, k
  660. //            colorTemp.SetValue(color.MakeARGB(4 c5 e& I9 H1 i1 b' g  s, ~
  661. //              (BYTE)(255*iColumn/iWidth),% f7 H. ~9 o% r7 C2 ?
  662. //              color.GetRed(),
    $ t% ^' X2 L) K  b
  663. //              color.GetGreen(),: P4 ]' L! D" z1 f: r9 G/ q
  664. //              color.GetBlue()));
    & t5 n, ]9 H0 H( c& V( Y5 N8 v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    7 [0 V0 Q* Q! R, z' N, e* x) Y
  666. //          }; D1 Y' E9 }0 y0 s! J0 ?. q! m3 x; y
  667. //        }: J6 A% ^  t0 w
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    . Y- I* c) k- I
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ Z2 j) e8 `, t& D, F, `: n
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    & T' [7 B1 H- F/ v
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    * @+ s) k0 M3 G6 Z
  672.         for(i=0;i<240;i+=8)# k1 R) [/ i  h4 \0 J! F8 }: p% P
  673.         {
    1 G8 [' t& m3 r: }/ ^; c8 g
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 L+ ]% I( V" Y: b% \" s" g& K: r9 l
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( ^, U$ b$ R& H" n/ I( y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      ]* }. {+ s+ }4 C
  677.           Sleep(33);
    8 L. ^+ x( D4 Q" _; ~+ V
  678.         }
    1 m5 e+ h7 F( y- e/ H; ^9 e+ ?# I3 n
  679.         Sleep(1000);
    9 M2 p8 F+ ~, J% \
  680.         for(i=240;i>0;i-=8)
    7 R0 j) U- T  _% [3 C
  681.         {
    : o/ R" d7 [$ p/ b% U' ^* x
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; r+ ^( E$ k2 G" n9 s* O  X
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 O! Q' Q/ d1 L6 R' B' M7 F
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * m9 G& o8 B# N  t7 _/ ?9 z
  685.           Sleep(33);+ T, u3 b4 M. \; M2 r# k0 d
  686.         }
    ! `) x, A, ~8 c$ f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    8 e3 z1 `/ ^9 l( [# Y
  688.         dlg->ReleaseDC(pCDC);1 n9 z& J& z% X4 o
  689.         DeleteDC(hdctar);; q% C  o( g7 h2 k2 f
  690.         DeleteDC(hdcsrc);
    ) N9 }% f& X7 v9 s. j
  691.         DeleteDC(hdcorg);
    ! s6 Y4 r9 A8 x
  692.       }( b( u1 g5 J- I% t  t
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 F' t. W& ]* d! ]- {
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");: e' j# K  e$ z5 I1 H; V/ W0 @
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ; S8 G! |2 r( w# E
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    5 K; w4 ]" {( V! q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      j/ u1 l. _3 T, B
  698.       if(!Dn.Connected())4 D* N, k  r: K$ X! `* F
  699.       {4 E+ n! x! s$ d. m* B
  700.         dwTotalFiles=1;' O% G5 z  R2 \
  701.         dwDownLoaded=0;
    3 g8 A# Y  O7 \' Y) l
  702.         bSilentStep=TRUE;% Z9 C) B+ P, r% J! j+ ~
  703.         bCompressed=FALSE;
    . v% Z) N2 Q6 Z2 D, E% a
  704.         strExtLocal.Empty();
    " k. ]5 l1 W0 C; h2 Y) z! w) H
  705.         strFullName="readme.txt";: A3 ?. [3 Y8 e# N
  706.         dwProgramState=AP_CONNECT;& [% ?7 o/ G# A" Z
  707.       }
    / Y6 f% Y7 p6 Y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ' D9 h7 G/ ?  x  y; ?* Y
  709.       dwStartUpSteps=2;
    0 j* {; t& P  c* o0 X  b6 p5 r6 v
  710.       break;' }' S/ `6 l; |# O, j* e
  711.     case 2:. Q4 n0 r" Z8 t1 H$ V1 q
  712.       {
    0 @+ X  z3 A$ {& j$ ?0 q1 z
  713.         int iEOF;7 J3 d0 F7 N9 K1 K$ d
  714.         FILE *fp;
    5 @: P4 e/ w, C& \! s. M( g
  715.         char szString[512];
    ; i7 j7 T+ Q0 Q8 p# q2 S0 g
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");8 i4 U  y2 G5 q( h7 `) f5 I
  717.         if(fp)+ Z& {, ?( \5 b
  718.         {
    + s% u* e! d9 X% n
  719.           do
    4 f0 i0 o0 A' S: G
  720.           {( i8 b. I( |% C" G' ^# P
  721.             iEOF=fscanf(fp,"%s",szString);
    # F, v2 N) c- ~1 S, M
  722.             if(strlen(szString))  }! Z. f# H1 ^& ^# f$ b; y' o" u" q
  723.             {
    . V' q. x# [& }4 \% f
  724.               if(bFirstChar)
    ! i5 F3 l3 G1 k1 C6 z0 M
  725.               {1 |  a/ j" \% f9 M0 v
  726.                 bFirstChar=FALSE;8 C$ o% t% V# N& x0 v9 A
  727.                 bConnectIsBig5=FALSE;3 Y; F8 l1 O7 y9 ~4 `3 n7 ~$ U
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; W3 Z% _! M6 y- |! b4 {
  729.               }  d! x. G9 T9 A2 X3 V
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    2 E0 B% ^7 r4 p$ v! g& w
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    " o/ D) f1 f! z2 A" ?3 V& B
  732.               dlg->m_ListText.AddString(szString);/ W; o9 o2 j' n2 z
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( t0 ~; w. O* M. Z/ T2 {
  734.               *szString=0;( Z- c4 I5 a2 L
  735.             }/ Y4 d3 ]% c8 h/ n( ]! h3 {, U4 G
  736.           } while(iEOF!=EOF);
    7 S; F7 p  O' z( B9 k, Y! D& }& v
  737.           fclose(fp);: A  H$ j% p) h! P: H, x7 W
  738.           unlink(".\\DownLoad\\readme.txt");  V# t) W) M8 R. H; n( `( X
  739.           dwStartUpSteps=3;
    1 t' P9 h: o8 Z8 r4 n! A' M- P
  740.         }
    ) ]& K+ d# p7 _
  741.       }) z6 k. I' Z3 {/ b9 K, O
  742.       break;# B5 a) t/ \1 J! o% P
  743.     case 3:* Y+ W& g: z1 N1 z3 c
  744.       if(!Dn.Connected())
    ' h2 {; }2 Z- t- A( Y" A% P( m( w
  745.       {5 }* Y) c) Y6 o
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);2 b* q1 D: A$ e+ W7 [, x
  747.         dwTotalFiles=1;9 h$ g0 h! H( i3 x
  748.         dwDownLoaded=0;
    " r9 }7 z1 S" @% ~4 S( Q8 f# z
  749.         bSilentStep=TRUE;
    * w5 E/ R% M( d! f: \6 h0 g( n
  750.         bCompressed=FALSE;/ b( R1 [8 ~6 V: K( c2 T
  751.         strExtLocal.Empty();
      X5 x7 H8 X, ]! O( U: ^
  752.         strFullName="checkversion.txt";
    1 M4 G. Q* `+ H. a- z) }; ~% x2 h
  753.         dwProgramState=AP_CONNECT;8 f1 i9 `+ I' o0 o3 P+ F5 @+ R
  754.       }
    2 g$ c  i( c1 t) V; G
  755.       dwStartUpSteps=4;
    % o: Q+ q+ I, {+ n
  756.       break;0 V# S- }4 _0 c( r* e
  757.     case 4:$ f$ H. O& O4 U, a8 R  A, p
  758.       {" x: r3 I1 I6 S5 Z, N
  759.         FILE *fp;
    1 @" G* w2 H. W  g
  760.         char szString1[128];
    2 p$ C0 j1 V* t. _4 O# B3 o
  761.         char szString2[128];+ x7 {0 V+ f# J% P
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");  ?' E4 g1 m* W+ ?) j
  763.         if(fp)
    % A: d  X/ t- {) F4 s  U9 T4 n0 M
  764.         {
    & V# P, n; P+ t6 Q
  765.           fscanf(fp,"%s",szString1);+ }3 R" O, B! s) n! O8 w
  766.           fclose(fp);
    - T. O$ G! {3 }- c
  767.           fCheckVersion=atof(szString1);
    5 e: V4 O4 n; ]3 s+ {$ M
  768.           fp=fopen(".\\checkversion.dat","r");
    ) {7 V; P! Q) F$ h
  769.           if(fp)0 D$ b" G, y5 ?* d1 D8 W
  770.           {9 f# K" T& U, J( O/ o( e) p! K
  771.             fscanf(fp,"%s",szString2);# r/ f( Z% Q* n/ H$ p; w* p* E
  772.             fclose(fp);" \; D3 n& P+ Z2 B
  773.             if(atof(szString1)!=atof(szString2))$ g. w6 L6 G7 a$ P2 D8 `! R/ X
  774.             {
    + y) F9 p  ?$ s4 A
  775.               if(!Dn.Connected())8 F* H3 u  C) v0 ?/ |
  776.               {
    & B" @( F1 {  p/ r) T$ ~; t1 _
  777.                 bFirstUpdate=TRUE;
    9 J" X1 T4 p7 J" f$ B) |$ K& [5 j% F' L
  778.                 dwTotalFiles=1;
    - Z: C9 I  _& q  d# q
  779.                 dwDownLoaded=0;& z* b( p4 C! T3 D7 H# R2 a& P3 h8 w
  780.                 bSilentStep=FALSE;
    . M. y6 i8 u3 H, S4 B( i
  781.                 bCompressed=TRUE;4 Q+ {6 d; u# }6 P8 G2 ?6 Y
  782.                 strExtLocal=".\\DownLoad\";( @: M/ Y3 G; o; t% c& C! {
  783.                 strFullName="update.txt";
    7 _4 k, f8 @5 `4 ?0 H" T5 [  Y
  784.                 dwProgramState=AP_CONNECT;/ ]) i: v1 x! l0 A
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ p) T8 \; k; P
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 J: k8 ^9 J( A" |0 |
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 E& Z0 c, z1 y9 t  d5 F9 \  V

  788. , K+ `, }$ t. U- r: z1 [2 u( A
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ t, D, s% ]. |# }( K
  790.                 unlink(".\\DownLoad\\checkversion.txt");% C$ U, c' g* C9 s7 e
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)( R9 K9 e5 N' u, T4 H
  792.                 {
    9 D2 P! L) B+ _9 S: t0 R7 u
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    & `" G$ D9 \% d; H4 _* `+ `% y
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    4 I1 m0 \( y$ ]% A
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");. q( n8 a- i/ R, x% N; q' `
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & v4 m! G) m% |' z+ q

  797. * l- h2 @1 \4 d4 t: M
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: O5 w9 \8 U1 s% I8 X6 @. s. M, L
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 e7 d3 E6 f/ s4 T- c' c  f( }. g
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 }) |# K9 `) b
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 C* R9 \0 y: J+ n$ @) A
  802.                 }7 m7 [: o  z. f
  803.                 dwStartUpSteps=5;
    4 t3 ^6 B% s! W6 V& e
  804.               }
    9 N. h2 l+ G  f- |: q- ?
  805.             }7 j5 l! j6 d) M
  806.             else
    + \5 J4 D) m: r- {9 [7 q
  807.             {
    - o  T- [$ K  C" d- I- f
  808.               unlink(".\\DownLoad\\checkversion.txt");! H3 d( A8 _# ~2 a% x  t
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    2 i& [7 F4 F/ O5 H- h
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : ^+ j" r6 w- u% E! m
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    % H+ b- o' z5 X; @3 }: S1 R) u
  812.   U5 Y9 x  `4 m9 C  J) ]
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 n, d7 H" h0 n  a
  814.               dwStartUpSteps=99;
    5 \$ I( o2 a$ Q& r( H9 d7 a; t
  815.               bFinishUpdated=TRUE;
    ) J6 O. D# B2 U: E' l
  816.               bCanUpdate=TRUE;
    / l, \, _& S; _/ }
  817.             }
    % x0 K; o9 o. V6 @. D, F  O
  818.           }! W' K" A# K+ ^  r
  819.           else
    , \- b, X4 _; s
  820.           {) S$ U3 D. D! v1 N0 y( p
  821.             if(!Dn.Connected())6 Q  H8 j  |$ X5 T' y5 [
  822.             {
    6 p7 l  q3 F" ?# R2 ?" b8 ]$ B- o6 @
  823.               bFirstUpdate=TRUE;: S- `/ `' N% M- r* _2 a5 W
  824.               dwTotalFiles=1;
      _2 {# p7 d3 \) g
  825.               dwDownLoaded=0;
    4 o+ m1 l1 y3 z
  826.               bSilentStep=FALSE;' c0 [! U6 G1 D: [& u
  827.               bCompressed=TRUE;! G( @+ Y, [1 q* S. E
  828.               strExtLocal=".\\DownLoad\";
    " v1 n5 s1 I- ?6 [" a  V
  829.               strFullName="update.txt";
    ! o9 a" R; h" o& A# c$ Y6 v1 y' u+ `) z
  830.               dwProgramState=AP_CONNECT;* u2 H- X' d3 q( ~9 e
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ N0 q: E; q) B/ c9 w
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 [5 ?7 w* D2 q) @# t! z# z- W
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");' X# l+ c8 H2 ?! u2 q% W
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' z! m& F: U4 S: f# m
  835.               unlink(".\\DownLoad\\checkversion.txt");7 k' G5 g6 ~0 _$ H" ~
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ! [" ]8 l- |' E0 X
  837.               {, a5 s7 D0 P  I- `: n! F: k
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    * ]$ J7 ^/ B+ Y. M. i
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    8 E$ q4 A! c: B" ^
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");5 @7 L9 J+ L0 a- U4 R6 N
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 d0 w+ }' L6 J0 K" d, D
  842.                 & W3 K, N# g4 _$ n- q$ X7 j
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");/ F! g  W4 ?5 }1 `* ]3 I
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");+ W3 C6 H1 }! n2 k) N
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");7 x2 s% G7 E8 b* b# z8 M
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% p! k% ?8 G' h
  847.               }
    1 i% J/ D, b/ o) n4 {
  848.               dwStartUpSteps=5;9 b( E5 J+ ~) R. V5 B
  849.             }
    4 @1 S" x) d( n+ _0 \
  850.           }
    8 x9 d" U4 f6 K3 W
  851.         }+ v1 A7 D$ t) N% W) J. F8 z7 H$ a
  852.         else, P7 {& V4 ^6 T7 [& Q' E
  853.         {9 h2 w/ ^% `5 x% v& A3 G
  854.           dwStartUpSteps=3;& G- ]9 |/ t  ~3 D, X" K8 g- g
  855.         }) F5 ^2 l- |7 G# {3 F6 l
  856.       }. R$ S& y& ?: Z8 D3 R! \- ^
  857.       break;3 v% s" d% S! d' F1 A3 M
  858.     case 5:) ?6 }7 P2 G7 j
  859.       {0 V) E: ?. k6 C  M2 ^3 D" i
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    0 H( p8 u% z% v5 u/ z! [. Y2 Z% D8 t
  861.         {
    / y5 @+ C6 g% [% R5 j
  862.           int opt_overwrite=1;
      Y& [# f' M2 A& s; P  k) x; N
  863.           int opt_do_extract_withoutpath=0;; v( x  J( w5 P/ B& N% I+ d; h
  864.           unzFile uf=NULL;
    ) J: I! i( `. M) z  U8 W0 a

  865. ( C2 }) n8 J- j; ~! w4 m% n
  866.           uf=unzOpen("Wsa.zip");
    & y4 h. g( ]; h
  867.           if(uf)
    " L- O! b3 e( C5 \% T
  868.           {
    - K; t- L% d: c) s+ c
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    7 f6 k. @( e$ Z' {4 L0 e
  870.             unzClose(uf);( F; B) H. i, A" O% g+ _( y$ O$ c4 O
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");) C  m) p" ^* ?& g
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");' i3 ?; k* L( U7 N/ O9 X; _
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ; ^( _! x2 R. G% ?  x% U) ~8 X5 v+ x
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 f& D+ ^3 X8 o+ ^4 ]. u
  875.           }! ?% ~! E# s' i) s$ z
  876.           DeleteFile("Wsa.zip" );
    . {6 E% b% X: A8 C+ N
  877.         }: }4 r7 {. g& Z4 ?

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-29 18:45

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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