找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
, B8 ^+ ]1 b. M% M" t$ w  |4 g
  1. / RevApp.cpp : Defines the class behaviors for the application.
    1 v! i7 c% X- T( g6 y9 d
  2. //  @  m6 q) H* V3 U  _4 P
  3. / j9 N7 H- f" T( g) I
  4. #include "stdafx.h"
    : F1 p0 Q* Z2 A# [
  5. % X9 b" n# F- Q+ k& }9 Z
  6. //#define UNICODE
    ) }8 b" c5 I. z$ m9 l4 G6 S/ G/ Z
  7. //#include <gdiplus.h>
    * P  S7 X' ?5 U1 y
  8. //using namespace Gdiplus;
    ( Y6 h& D: v) Y0 P: h

  9. $ Q9 ~. I" i% v& z+ q8 C
  10. #include "RevApp.h"3 T# H3 l# ?9 x( N9 o
  11. #include "RevAppDlg.h"- g) L% T. u/ d; R6 L

  12. 8 R* o, f% d, E  n2 d) w; V
  13. #pragma warning(disable:4786)2 M/ u$ t1 j% f
  14. #include <map>
    ' J0 f# T3 C6 C  J1 i) d' t) D
  15. #include <list>) a5 F7 a, m% ~0 [5 ?
  16. #include <direct.h>
    : [2 m- _5 |' n& ?8 S" d

  17. 8 x; O- N5 N! ^
  18. #ifdef _DEBUG3 u" d( F4 J3 e$ }
  19. #define new DEBUG_NEW
    & C7 K6 Y. _6 o1 _0 }+ z% |
  20. #undef THIS_FILE  S+ w) X0 Z, t$ R6 N0 y
  21. static char THIS_FILE[] = __FILE__;5 t. J! f( E) T. c6 ~7 b! X
  22. #endif
    0 ]" u- r# f" g7 j
  23. #include "SkinResDef.h"  G- J4 y$ E% q
  24. #include "ChangeBG.h"
    ! o/ ~8 n$ h# k/ d( P
  25. #include "AFXINET.H"
    : r6 m9 v8 y! `4 E6 i

  26. $ X. v- C4 {! ~
  27. #define TRADITIONAL_CHINESE 0
    : n3 |1 ]' C* Q4 ?6 N0 T( E2 o! n( H
  28. #define SIMPLIFY_CHINESE 1: c  _" p$ X3 @- k3 d  w
  29. #define ENGLISH 2
    & i; q+ B& Z& y, m1 y$ W7 T* {( `
  30. int m_iLanguage = ENGLISH;& ~5 m9 a1 N; n7 W4 {. ]; c
  31. /////////////////////////////////////////////////////////////////////////////
    0 o, {  j5 t/ v2 j5 y& m
  32. // CRevAppApp
    & I: S+ z  D2 Y/ |# d5 K

  33. " z+ m( u  [+ e2 X) K7 v. o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    # m: H% K& X+ {8 K' }! {7 n
  35.         //{{AFX_MSG_MAP(CRevAppApp)1 y+ d, I: ~0 Z: X
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.) I3 L& H/ n* F7 D$ [' F( q7 T
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!$ ?* n. H! V# k3 k" P! q4 @! g
  38.         //}}AFX_MSG( v1 I8 e% h! A& m$ }# A( D" T
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)3 u9 t" g% y3 A$ P
  40. END_MESSAGE_MAP()
    " f8 a& X0 z! M6 u9 ?+ x2 t
  41. ( v: `7 O  }6 h
  42. /////////////////////////////////////////////////////////////////////////////
    * c2 f) k5 Z/ I  ^0 R. E
  43. // CRevAppApp construction% M' I# f& ~2 P5 ?) I+ P
  44. 8 K7 Z5 _7 ]4 W  K8 _
  45. CRevAppApp::CRevAppApp()
    ; p. F: E/ O& N; D2 F2 c9 Q
  46. {
    9 D0 g2 M$ L: y: G, v5 U& _, c5 O
  47.         // TODO: add construction code here,, v& F; ^- }$ k; A) t4 Z
  48.         // Place all significant initialization in InitInstance# C4 |* y9 o. q
  49.   bDisplayIsBig5=FALSE;3 g" p: V0 S/ H7 I; z
  50.   bRestartUpdater=FALSE;: X( H1 J1 _% M. w
  51.   bFinishUpdated=FALSE;
    ) j! i8 G. S" A, U
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    0 ?. Q1 g" n3 ~! w6 p/ Y* r
  53.   InitChangeDataBig52GBKS();0 j6 O* }- @9 D1 p
  54.   InitChangeDataGBKS2Big5();5 f; I3 S0 R. H
  55.         //, B! O( k8 W' |+ D) Y# Q8 |* v
  56.         bClickRunExe = FALSE;% Y4 `, k1 T8 r* i# `* ~( [' j
  57.         //: u8 i. |/ L9 x/ S
  58. }6 c4 h" U' @0 w  l) k! G, }

  59. ' S/ z# Z- h0 `; z( {( q, a; @
  60. CRevAppApp::~CRevAppApp()
    ; D. i) Y6 t, B  z, K+ h
  61. {
    $ R  A  A. {5 ~' e5 }; J
  62.         // TODO: add construction code here,
    - N9 B7 O8 C" Q4 d2 i4 E: `6 `: k4 f
  63.         // Place all significant initialization in InitInstance+ ^1 v7 a! ~6 ~* V1 a
  64.   EndChangeData();
    ; Y. B0 O, u/ e1 P9 z# g) ]& M0 i
  65. }1 ]0 k% h8 N0 D5 F

  66. * H7 C& w5 K. E* U
  67. /////////////////////////////////////////////////////////////////////////////. D5 G, @& q( I+ k! j
  68. // The one and only CRevAppApp object
    6 Z9 @. u/ T4 Q, ~* Z* v

  69. ) ?  Q( c% A' N( R+ v6 e
  70. CRevAppApp theApp;! E" }5 n* m7 J0 S9 `; s
  71. & P6 y4 R; n/ |$ }/ G2 D6 L
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    . d3 n# S0 I7 X; r2 p
  73. {0 T5 w( o/ G, R
  74.   int iEOF=0;
    3 k- P4 ~* j( z2 K4 V7 l
  75.   char szTempName[MAX_PATH];" G( R6 K0 M, V
  76.   *szFileName=0;
    8 h3 t# C3 x  g6 \8 D& d
  77.   iEOF=fscanf(fp,"%s",szTempName);9 G$ z" c& l* M+ ?' }
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    / p* C9 S6 A; ^% g
  79.   {* m, ?4 W5 m+ F$ Z" j
  80.     strcpy(szFileName,&szTempName[1]);
    7 w; I$ y- x* ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)& ~: {* x; F. K8 f
  82.     {6 C2 ^9 Q* y, T. u3 r
  83.       iEOF=fscanf(fp,"%s",szTempName);
    9 d% }; N1 q7 k9 x, e. `1 F& F
  84.       strcat(szFileName," ");! E! K* K! t. o* m9 Y& p
  85.       strcat(szFileName,szTempName);
    ; }4 ~, f/ I7 r4 C
  86.     }3 V3 V' T% E* q
  87.     if(strlen(szFileName)>=1)$ z( A+ v* n! w& ?. ~4 Q
  88.     {
    % u+ u; i( W. I
  89.       szFileName[strlen(szFileName)-1]=0;
    & `$ L+ X) k9 R! R* o4 l# S! G
  90.     }% h8 E/ ~# ~: k$ M+ y7 g+ N3 V
  91.   }
    ' P% S: j! f1 a) f4 A% S8 f* Z2 F& S
  92.   return szFileName;! f2 E# A* \2 b
  93. }
    - K* P. y( z9 @5 j2 s9 s
  94. ) h' v& v* q7 M! h, W
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    0 X- z! k% {$ W8 r) U
  96. {
    ) B* P7 p6 J& u% [/ O9 I, {$ |
  97.   FILE *fp;
    9 g$ f5 x* i5 f0 ^
  98.   char *key=NULL;' A* x' l% v& ]
  99.   char version[MAX_PATH];9 T9 ~& `' ^; H" g
  100.   LPUPDATEFILE file,olds;& {9 n" Z, d* u# n) s6 w( ~
  101.   std::map<CString,LPUPDATEFILE>::iterator p;+ n; w7 c' C8 L
  102. 0 M# t5 H( H: _. F7 W) E
  103.   UpdateList.clear();4 {- O  A/ y- P
  104.   UpdateFile.clear();
    ! V8 ]4 v2 O1 z0 J. [
  105.   if(GetFileAttributes(filename)==-1) return false;
    * ^; R( z' z2 s: H$ I
  106.   if(!(fp=fopen(filename,"r"))) return false;
    6 E' u9 y0 z5 `; O6 ~7 p
  107.   fscanf(fp,"%s",version);
    ' G9 W; w' L' a
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    0 B1 Z8 D  V+ B, w/ f" Z. `
  109.   while(fscanf(fp,"%s",version)!=EOF)
    - l) c6 o; Q$ }5 }
  110.   {
    : n; H2 K+ A2 m% B4 ?
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, C, k5 C6 _  |' ~& g' J: V
  112.     fscanf(fp,"%s",file->path);
    ( I1 f) R# P* O* l" M
  113.     ReadFileNames(fp,file->file);; x$ d! \4 q" w$ c7 Q5 t
  114.     strcpy(file->full,".");
    ! c2 W  @2 M* K  a
  115.     strcat(file->full,file->path);5 R3 T3 {2 q, R! d
  116.     strcat(file->full,file->file);7 E$ O. E+ X, @# a6 ]
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    , ]" O2 ~! [  r: A, `! ^; E! \
  118.     {
    ( o. \( ?$ B2 M2 J* W. ]% W
  119.       file->vers=(float)atof(version);3 ]9 v* k$ t1 L. l! v
  120.       UpdateList.push_back(file->full);
    . e: ]; L5 [# a9 R4 u- w. m
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));/ e( x2 k9 L/ S! l9 z! C
  122.     }
      F7 H8 @* L- j. h/ y! X" r% y
  123.     else  g! x. s; _6 x) |% s7 i3 e  ^- V7 z
  124.     {
    6 G( D, V+ [; X. ?+ x# I/ M
  125.       olds=(*p).second;3 r# K- ^* u8 V7 [
  126.       if(olds->vers<(float)atof(version))
    " n$ f9 l$ F7 W
  127.       {+ ]! H% o$ y+ N0 W# r! a: g
  128.         olds->vers=(float)atof(version);9 D  v8 K4 y' _% q* `% K& _
  129.       }
    0 O/ |( Y9 N. ?3 X  a: U' F
  130.       free(file);
    $ F! b# R3 F$ u$ L* I0 ]/ a7 u( L
  131.     }1 _3 b' C% k% \2 I5 o
  132.   }$ i, K2 N$ K" f6 H2 Q
  133.   fclose(fp);
    $ E7 }4 g( o' W0 @
  134.   return true;/ d4 r- G3 |8 Y
  135. }
    % }+ S% r6 \) `% E

  136. - p: z( k+ N" L
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath): n$ ]3 w7 B2 L; [
  138. {$ I: ^  C. [, P; H' j
  139.   TCHAR  szFull[MAX_PATH];  W8 O0 h4 r* W7 u
  140.   TCHAR *token,*inter;6 s5 L5 ?, m) w
  141.   *szPath=0;
    0 v* c- S$ |0 g" I3 z3 d
  142.   strcpy(szFull,szFullPath);
    ! [) s+ i% J7 f% s+ p+ ^
  143.   token=strtok(szFull,"\\/");
    . R9 [% G( L3 _) U7 X' m
  144.   inter=token;2 f5 m' j0 {( [8 A* t5 B+ r7 L
  145.   while(token=strtok(NULL,"\\/"))6 U: z6 ?+ R8 H
  146.   {
    * S& t- E5 ~. t/ p' _- B( z5 ?" Y
  147.     strcat(szPath,inter);
    2 t3 R: l7 i8 _: |: V5 q
  148.     strcat(szPath,"\");
    . U$ J4 R/ y+ q  p
  149.     inter=token;
    ) Q6 D& t8 k' w% U1 Y
  150.   }
    3 F* R) ?; i* L& H" ?5 H( C
  151.   return strlen(szPath);/ r% q. i6 c8 `4 \. J/ d
  152. }
    3 H8 |" r& I+ m" `2 Y5 l
  153. 5 C9 P1 V+ U& G6 r) ^1 c6 C
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    8 A7 k" ]+ X  ^7 a; C
  155. {9 F* o( y" U: J
  156.   DWORD attrib=GetFileAttributes(Target);
    % F" ^4 E5 z7 P! Z, {; O
  157.   if(attrib!=-1)
    8 x/ l0 m: G6 z/ |1 u* n! v
  158.   {2 a# ]8 a6 m& q0 C2 F
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))9 }0 j3 p4 ?" Y/ R: e; I/ m- Z
  160.     {. W; l- x4 W* ], L$ k) w
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    6 B% P! A+ M4 Z" G
  162.       SetFileAttributes(Target,attrib);+ l7 k# R- N& b% [- Q; `
  163.     }
    - D1 E" \0 J% d, r0 E, ?1 h
  164.   }5 }2 w* ^, C& `4 ~0 r
  165.   CopyFile(Source,Target,Erase);& e- }+ [3 P( T, h& S7 k3 |
  166. }
    $ _+ P9 R0 o: T: d* i; x" S
  167. ; a) g2 H- A; N- s1 k3 ~
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    7 `& X7 y0 t; @) N
  169. {
    3 t" H+ c) D( G# K5 s# x
  170.      FILE *fp;
    . N& l- w0 ^4 ]% _
  171.      char  szBuffer[8192];
    # ^1 |1 ~; [7 u
  172.   va_list  argptr;
    * E' a5 |6 f0 ]. f  ^

  173. 2 {4 ?/ y3 `% w3 n4 t
  174.         va_start(argptr,message);
    ) B* E5 S8 v2 d# _8 @5 h, A! J
  175.         vsprintf(szBuffer,message,argptr);$ |5 M( r5 b+ Z" l$ {
  176.         va_end(argptr);1 m* K5 \1 W+ ]1 c( s' F
  177.   fp=fopen(FileName,"a");
    2 c  D' e7 Y: C8 S: |- r8 {' I
  178.   if(fp)  ]* K; I; J$ ^. Z) n9 Z
  179.   {5 }" j  j+ |2 J: T
  180.     fprintf(fp,szBuffer);5 H/ T5 O" K$ t# J
  181.     fclose(fp);
    * K' {; ^, N! I# [: m* ^# W
  182.           _flushall();. S+ h  S. R* X' [& J; B2 b
  183.   }
    1 r, o! t/ u" o
  184. }/ }' j7 H, p6 b% Y( J
  185. 2 ?) f# F: I: M) G
  186. BOOL CRevAppApp::Fclearf(char *FileName)! |5 e7 E  b% \0 |% Q5 R
  187. {
    $ k! r, ~# `0 X" z: v; U$ k: \3 S- T5 n
  188.      FILE *fp;/ p! m; V- r# f
  189.     DWORD  attrib;
    0 M5 a8 R5 j0 `* E/ i' |/ Y* y
  190.   attrib=GetFileAttributes(FileName);
    ! ]* `, s+ P' M0 @
  191.   if(attrib!=-1)
    " y$ y0 r; `  D6 z( b3 U1 V" `
  192.   {- ]: Y6 z( N, e0 t) Z- W
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    1 }$ s' @) y4 c7 P0 ~0 _
  194.     if(!SetFileAttributes(FileName,attrib))0 |) q. l  |9 f+ `
  195.     {
    3 z! G3 k! f6 v: ]( K9 W
  196.       return FALSE;
    ( K( Z0 q( I4 j. P, S
  197.     }) `9 ~5 A& `6 d" u- S
  198.   }) h' K9 z1 L' o, ]: P+ k
  199.   fp=fopen(FileName,"wb");
    9 t  q5 b0 H) U9 A; R; \
  200.   if(fp)" p. q, J# |' S2 `: C
  201.   {
    ( d( ]; J/ U- n# m! l5 V( k( p
  202.     fclose(fp);
    3 f5 p7 R! I  D# R, I* o- i; Y- m
  203.   }" e1 y$ {1 Y4 ]& C5 n8 P' G
  204.   return TRUE;; m  k$ [0 R* U: D
  205. }
    ) }/ ?6 Z" i+ X9 r) x+ P4 S, s

  206. $ C' ?1 p7 w$ D! k2 |4 F. T9 J* u  m
  207. BOOL CRevAppApp::UpdateLocalVersion(void)% c$ l0 q! t! Z
  208. {
    & \- a& i) ]0 Y
  209.   char filename[MAX_PATH];
    0 w2 k9 X+ r0 z. I+ o$ l. W
  210.   LPUPDATEFILE file,olds;# B" T9 E) o' T
  211.   std::map<int,CString>::iterator i;
    ' u5 n1 v8 Y) A* h9 t% U
  212.   std::map<CString,LPUPDATEFILE>::iterator p;1 c! |5 u/ X0 {, o" U' M
  213.   std::list<CString>::iterator l;% Z- k; m. j6 S) G2 r

  214. ( q9 f! y6 Y; S6 w
  215.   if(bFirstUpdate)
    * f( V+ I5 y9 I9 v! T% P- V3 f
  216.   {
    ! Z) {9 e4 w6 f
  217.     dwCurrFile=0;  Y5 z, z  Y. E' }9 \: K1 D' D
  218.     bFirstUpdate=FALSE;
    * ^9 q4 r2 h" O/ ?
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! _7 m+ r- p2 ]+ w; q/ I* b
  220.     {
    7 O* M/ m, [* P0 x
  221.       dwTotalFiles=UpdateLocal.size();8 Q  V& e' t+ w3 R( D/ K. t* N# q
  222.       dwDownLoaded=0;) }; ?* ?/ i$ I7 Y
  223.       bSilentStep=FALSE;
    ( R3 f  b- e5 [9 [9 ]
  224.       bCompressed=TRUE;
    . h- J& s: ~7 [
  225.       strExtLocal.Empty();
    * ?; x9 m9 A0 B, T
  226.       strFullName=(*i).second;% H8 d* P7 Y) G; g  H
  227.       dwProgramState=AP_CONNECT;  m# C2 N) ~  n3 `
  228.       return TRUE;
    ' q8 t" X  @6 a' ]/ h2 K8 x
  229.     }
    1 C/ a5 @: }& E2 _  i9 F! `
  230.   }& L1 a+ m% n' k+ ~6 P$ o
  231.   else if(bRestartUpdater==FALSE)/ `0 a" A  ]) V
  232.   {
    6 k0 P- p  x1 e2 E/ P2 H
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ; H) |2 `: d' f8 _; o, d! ]2 L
  234.     {3 k: G0 r) \; A: s; B, }# i5 S) p
  235.       file=(*p).second;
    4 Z# {9 C+ A  {1 g
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())' f5 Y) h* |9 t, H. L
  237.       {
      h: @3 g& Y1 ~  F
  238.         olds=(*p).second;6 z5 g/ x6 y8 _; M4 h
  239.         olds->vers=file->vers;
    + c8 ~6 R8 D2 f7 |5 ~) X. K" Z4 g
  240.       }
    " ?6 ]3 ?8 b- |4 O1 M- G) p. S+ z8 t- T
  241.       else  d: c6 M& s( w% k, u
  242.       {" b6 b1 n7 ?! V
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " i. k1 N/ K  Z9 G2 c7 l$ Q
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ) e* |* g; \, r/ u
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));  U1 L: y4 b* n2 ?" L& _
  246.       }0 i7 H! I8 E. d: _% `2 e% i- C
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    7 W$ a- V' {; ^
  248.       sprintf(filename,"(%s)",file->file);) U# c, f$ r5 q% h) @
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 q6 J/ z7 |6 o/ u
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }6 G3 q; T) ]# F5 O( i
  251.     }8 A6 L' ?* r. X8 z! H, y: H
  252.     dwCurrFile++;' N& E, Q. u+ d6 l7 H) s. l
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())2 t9 O+ \8 F1 I4 d4 d
  254.     {) r$ u- {+ t  E9 C9 {$ J$ I
  255.       bSilentStep=FALSE;0 r. m& s, F* {
  256.       bCompressed=TRUE;& e: L) T4 R9 f' U: ^, J% i* b
  257.       strExtLocal.Empty();
    ; f- L- A5 v% ?* |7 ]; r
  258.       strFullName=(*i).second;. {; k: K/ {- S) @: g
  259.       dwProgramState=AP_CONNECT;
    / r4 P2 t% l5 t( d
  260.       return TRUE;
    ( r8 ~$ {- W8 u3 u+ l5 s1 V
  261.     }
    + w, \8 C9 W- ?$ @, h8 N
  262.     if(!bRestartUpdater)
    2 P0 v/ Y2 J# Y! g- A7 f) n
  263.     {) y; \7 y2 J* h# q* ~
  264.       int iCurrSize,iFileSize;
    - P# l$ X, ?7 q2 v5 f
  265.       iCurrSize=0;: U- g& Z8 J/ k) a
  266.       iFileSize=UpdateList2.size();' V+ |# U2 N2 Z5 ]" u2 z- X3 Z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    5 m# P8 A4 S( t( ^. `0 J
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    & R& h$ y. z$ L* Y# T
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");, w; |8 y) J" `% Y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 b% E# R2 U4 C3 g( |
  271.       Fclearf(".\\update.dat");
      i. d' R. a3 H0 f3 b8 C# S
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    / I8 f% \; B# V/ {6 w6 F
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++), M3 J, a9 i/ ?/ }& U3 \7 o
  274.       {# f+ M2 Y% P& `1 @4 h) y: A
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 e0 p# O. N' ^3 a9 N
  276.         {
    . L! `. L  w' f2 [9 Q2 m" d
  277.           file=(*p).second;. t' r& i) `; e: n1 j
  278.           sprintf(filename,"(%s)",file->file);) r/ @2 ?9 P' c$ L7 ^/ i7 {
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 N$ H7 m! N2 O. y  y
  280.           iCurrSize++;  m' _- H& Y$ O
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));, h8 w! p' D5 t& k
  282.         }9 W; x1 f& ]6 T/ H, o! w$ W& M0 M
  283.       }+ ~1 }  n( q! q' \/ k1 Z$ Q
  284.       unlink(".\\update.txt");
    2 N- |$ T: X" J0 i
  285.       unlink(".\\update.tmp");8 e. K2 H2 a/ p: t& [8 u+ J
  286.       Fclearf(".\\checkversion.dat");
    ) m$ m+ A+ @+ D& d0 @& L
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    8 o0 ~( k! Q, ]3 D& P0 ~' r* {
  288.       if(UpdateLocal.size())0 [/ K0 L5 _$ H) ?
  289.       {
    $ N8 F5 K3 Q; J2 F. @" J
  290.         UpdateLocal.clear();
    2 y2 p3 N: n+ \: A* U- Z
  291.       }
    / x* L8 g9 U2 `% k' O) f
  292.       if(UpdateFile3.size())" r* P2 S' }' a& {& N0 N
  293.       {
    # `( A9 P  L7 g. ^4 c
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)2 @; d5 u5 h2 \% E" x2 k& j
  295.         {
    ( Q4 {. U7 n# Z6 H; r9 A/ e
  296.           file=(*p).second;
    + M9 u! [. |, I
  297.           free(file);
    2 u' I3 ^4 p4 p
  298.         }
    * P: u1 ?5 Q  ?! u# ?; l2 j
  299.         UpdateFile3.clear();. c) G! _' H  ?
  300.         UpdateList3.clear();2 H- E' a6 Q& D4 o0 m
  301.       }3 e! H6 m; J0 ]* U+ |( q: a4 ~
  302.       if(UpdateFile2.size())
    6 ], Y% z$ M) x# A! Z
  303.       {9 X8 x0 c: W9 w* T' ~1 M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 J, q2 l5 l% A: v
  305.         {
    / E" h; L* Y! n: @" |. B, w9 P
  306.           file=(*p).second;
    0 I3 e8 J4 j# A% v$ a
  307.           free(file);
    . s* {, O6 v2 v( @
  308.         }
    6 z7 Z( V6 a, m/ w. Z+ |2 B* n
  309.         UpdateFile2.clear();
    2 d/ s- i0 c2 b6 d) u  }
  310.         UpdateList2.clear();
    0 h, Y9 Z3 u& ]
  311.       }
    " a  b3 Q! l  i$ R& x+ A7 s
  312.       if(UpdateFile1.size())
    & A4 Y5 U9 s' N# D) W/ C$ l
  313.       {
    : G% A( E8 Z1 o- K) U6 b/ b
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- L7 ]1 A5 r4 p0 j3 y1 G
  315.         {, [! b3 x0 {6 k: N: c; ]
  316.           file=(*p).second;
    * @0 G& {+ D& ?. Q
  317.           free(file);/ k; m+ \2 p, `9 E3 K8 f
  318.         }
    * v& B3 F2 k" K9 {2 Q
  319.         UpdateFile1.clear();
    ( e4 V" e) {( Q6 Z- I3 l# \0 h5 l7 q# Z
  320.         UpdateList1.clear();
    ) K5 X) v; V  c) n/ v
  321.       }) K8 C2 P3 q: I! L: T
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));- r, ~1 y' ^4 h# Y, L( d
  323.     }; |+ E" c3 Y; P; K. {9 L, c& s
  324.   }
    # I  r: m9 ~! Y8 x/ Q! s' J/ c
  325.   return FALSE;7 k6 _2 ?3 N; P1 V& t& m% a( X
  326. }
    ! ~. ?* {  y0 {

  327. 5 V$ F  f0 M6 ]% v+ d. U2 a
  328. void CRevAppApp::ClearAll(void)2 e/ `1 R* D3 v- j1 v# d5 T
  329. {$ k" j. M3 M. X
  330.   LPUPDATEFILE file;
    0 G" t2 m7 Z' T" g! ?7 k
  331.   std::map<CString,LPUPDATEFILE>::iterator p;- g2 t! Y- _" e. Q0 {

  332. , @4 ?) v7 A" b) l  F! M
  333.   if(UpdateLocal.size())
    ( f* D/ P# t- g* N9 {
  334.   {9 `  A0 u. T0 n1 x+ b$ b
  335.     UpdateLocal.clear();! f& W- @5 }/ W. z
  336.   }9 z4 x6 u2 O: F  N5 z
  337.   if(UpdateFile3.size())
    9 T+ r- i0 \- T* I8 C+ N: b
  338.   {/ J2 P+ n# s/ }0 z( B$ `8 A& J  n
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * ?, `% ~" V. z
  340.     {* y9 s* t( \4 D& C; @* S; Z
  341.       file=(*p).second;0 y0 H9 m) S8 k% `4 J; S
  342.       free(file);! ?7 X- W/ i5 J
  343.     }
    ; w* s7 B% Y/ P1 v) y
  344.     UpdateFile3.clear();
    ) i/ e- Q4 K# ~/ A/ Y
  345.     UpdateList3.clear();/ [" {) z/ r0 w  m, X, K7 b
  346.   }+ e# f" W0 H+ ]( p+ c
  347.   if(UpdateFile2.size())
    & J8 @' Q2 r% \0 q0 t* k( H
  348.   {" l5 C2 q) @( u& O) @
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 U* C. q# S  [( x; `
  350.     {+ x( N8 N  g$ v  H8 d
  351.       file=(*p).second;9 l* e7 h- N8 }5 V2 X" t3 ]
  352.       free(file);2 O% x% Z" c. ^
  353.     }, i7 o$ Z6 F3 k6 Q/ @
  354.     UpdateFile2.clear();' t5 m/ {. Y: X
  355.     UpdateList2.clear();! f6 k: @; ^: g
  356.   }
    4 y/ l  C* R- C/ R3 }+ \& A
  357.   if(UpdateFile1.size())
    + `7 y% N4 |" M8 ~# o1 i/ U
  358.   {, f% U7 [$ }; Z2 ^# ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    3 f4 T/ a8 U7 j' ^( p# A  ]
  360.     {
    0 ?' K' v* L1 |9 K
  361.       file=(*p).second;7 P- R$ Q2 b, S
  362.       free(file);3 P" h5 t6 D1 o) q2 @1 o
  363.     }
    - [( O4 r! ~% w& n0 _! d
  364.     UpdateFile1.clear();
    ) ]# k. x) j% T' t, N" m
  365.     UpdateList1.clear();
    & ]( I2 u) c! d( Q1 u
  366.   }
    ( n# @" o7 f; B- T
  367. }  
    7 B, Y. D" n  t1 ^: f0 Z
  368.   % x  k! L$ Y  E
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    2 W  S8 E: @1 `6 }3 r* o
  370. {( ^$ i) I: S+ r6 ?5 d
  371.   int c;! ~. [& R5 D: Q  ]! w6 j
  372.   LPUPDATEFILE file1,file2;/ u+ k" b2 T% u
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ S/ Q! \) h' a' p& Y; y
  374.   std::list<CString>::iterator l;
      f* \" j8 n2 \" T. N. D
  375. ' [: P# w2 S8 i
  376.   UpdateLocal.clear();
    2 c! ~6 B- \0 U( E/ ^. R" ^4 n- U0 D- o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    - S/ f8 k7 U8 i4 N- {% `- l
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + T) h& G) Z8 w0 A
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + ^; H& a' Y5 v
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);7 Q) l' x" z6 G0 F- i4 [( D/ X
  381.   if(UpdateFile3.size())
    3 P$ E) U) H$ {/ H9 w% ^5 g8 h) u
  382.   {
    $ C6 ]1 Z# d  J8 y1 V9 O8 q/ W
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    3 C& f" i) Y, L6 R% e
  384.     {2 D+ F, G5 F9 f* B' m* o+ h
  385.       file2=(LPUPDATEFILE)(*i).second;
    3 }' L# R( t& U) C6 J4 ~4 q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' y! z& ~0 k3 t) W. Z6 g' m9 r
  387.       {( v) S  ]( o8 _8 T- b. O
  388.         file1=(LPUPDATEFILE)(*p).second;
    , q9 q4 w1 h" ]5 z
  389.         file1->vers=file2->vers;5 Z8 l9 [4 v, F6 }! g% P
  390.       }
    2 M! ]) @* d# {5 ~% J, b' j" o
  391.       else( u8 [+ D: h4 n$ z: G" d& Y" H
  392.       {( u- y' C7 T% {% u" a6 y( g- n1 O& {
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 z  e# q9 t: Z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));7 ?. s: H9 S+ b* S7 G
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));% a8 `+ q6 |4 K" m
  396.       }- _% _) O# \" f0 ^
  397.     }
    # Q  J4 B0 m6 W
  398.   }
    8 a: f, l& j0 [5 ?# m/ w
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++), P% p& w+ W" m% m
  400.   {' D" z6 Z& O) H$ C
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    * @" l' d- i& u# l6 g
  402.     {( o" h. C6 [- [) H
  403.       file2=(LPUPDATEFILE)(*i).second;1 X' g7 w; C3 s
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())7 A+ C, R4 G7 \$ `  I7 E$ h+ l% G
  405.       {
    5 j9 _' `9 W2 v9 w0 Y  p1 H
  406.         file1=(LPUPDATEFILE)(*p).second;" D% g) \, L- j! R5 z5 _; P$ [  a  X$ X, r9 P
  407.         if(file1->vers!=file2->vers)' U6 t; ]" [, F* K4 ?
  408.         {
    , }) l8 {+ L0 j$ c4 `8 X$ @
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 z* s  H% R$ @& ~1 V9 w2 B
  410.           c++;7 O7 m* w0 v: [4 F. F9 |+ Q. H0 S9 X
  411.         }9 S, B+ u& X" c2 X, I7 M3 z
  412.       }; z3 D2 [4 e4 M5 ]" R
  413.       else
    4 i; M6 j. p+ ?% y' d
  414.       {
    5 ]2 S9 s" C1 Q# y! \" k& _
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + P2 B  X+ t6 T2 b
  416.         c++;
    ) D- U( P* l# W: A5 b8 e, p. J
  417.       }! Z2 {: U; C" Q; A0 `: p: `; k
  418.     }
    & d; x9 C; c4 t4 x  a+ _- O
  419.   }! O/ \0 F' C3 i# R; {* o% c
  420.   unlink(".\\DownLoad\\update.txt");7 T3 W! B; l0 x
  421.   if(UpdateLocal.size()) return TRUE;
    4 E) q; y3 i7 T& o* `( ^
  422.   else                   return FALSE;" M6 `& z( N, l
  423. }# _: {: ~% l1 X
  424. 6 \# y/ x* Z4 P- R7 h5 }1 l+ G9 ]& p
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    3 O( J# ~# w* E5 p( C
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"0 i  n% r3 F( N7 s  |3 f

  427. . d) L1 E  D) ?

  428. 9 G" J/ n, G' i1 X, g% k+ D, a! C
  429. ) _* b9 U2 h+ K" [9 P
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    : z# P9 j5 W9 j0 [
  431. {
    9 C# U' P! d2 I# A( k# u8 ^
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;" ]' ?) L7 P1 u: ^1 N4 W! T
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' G! C; ]3 W0 E9 z- Y: S
  434.   {+ l1 }+ z. q; x% `
  435.     char szLanguage[50];
    1 t, r4 n* ~5 I: q( D8 y1 m
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 t* q( m* o% y6 O7 C
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;1 r7 z+ G+ e) l, W" s& C" }
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;( E. J3 B' j. p' y# N9 c; {: c: s' x; R/ t
  439.     else                                   m_iLanguage=ENGLISH;
    $ l) o$ ?5 \2 z) Q& @* a3 R
  440.     char szRegister[100];0 v- Y- e5 U3 |
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 X) Q% B5 L5 ^
  442.     strRegsName=szRegister;
    9 `; G1 `  [2 H6 H
  443.     char szPatchURL[100];. k$ V. N$ n  U8 ~. C
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! S/ z+ v/ v' v8 E* @* i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : [8 m  u$ q( u( O  {; J# H
  446.   }
    ; W! B2 x/ x. A
  447.   else
    . m3 H, m! D" ]( {6 i) L2 Q
  448.   {/ e) @) n# t: p2 A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & F& d9 D+ n3 l2 T- b1 k$ _
  450.     strRegsName=DEFAULT_REG_URL;! G- k9 k/ D: s6 z4 E
  451.   }
    - `  h6 p! p0 l# U" ?& A) g& [
  452.   if(GetFileAttributes("hosts.ini")!=-1)( r# y- n" u2 i  u# c
  453.   {' P, `4 }/ o! W3 o$ P! C( T
  454.     char szIP[50];
    , e$ V- h, G3 O
  455.     char szDIR[300];& N. ^6 @$ T% X7 X& ~
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 B: h" b( f: m$ G: d
  457.     {
    # v" B; j$ f. x: E$ z$ U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    % C4 ]9 g% Y) S. @% g6 z" n
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# ?" o2 Q3 _- o- I
  460.       strHostName=szIP;& B7 a$ @; o7 V5 T
  461.       strHostPath.Format("/%s",szDIR);6 e$ g) G' n; a- q: m1 j! i* V
  462.     }
    ( K! b! I9 C6 L/ G. _1 Q# ]3 ]
  463.     else
    # y7 g( P! h5 k! u
  464.     {- g! L% `' j  q) s8 Q6 X4 t4 f1 q6 W7 Q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), r9 S7 w* b( G7 |
  466.       {2 P1 ?) T- G( J/ W9 j* Y
  467.         char szLanguage[50];$ L" c( Z; O- J
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 z' \  ~7 D8 C7 ?2 ?0 [5 K
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 @* Z2 b: [( A: f8 [& x
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ y. Z1 R# ?- x) A' \$ I
  471.         else                                   m_iLanguage=ENGLISH;
    ! X, z" ?4 H8 T/ e* d" V- W
  472.         char szRegister[100];
    / t6 O+ ?1 }# h  s  Q! D4 C5 o% j+ q
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: Q: I% T: c+ o0 \2 v7 i
  474.         strRegsName=szRegister;4 m. Z0 i( b0 F0 b; e; C
  475.         char szPatchURL[100];/ S' Y1 Q: o1 j7 f- f3 P
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 C2 ]. l( i! L  w3 k
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ X! O" a# Z, J2 ?6 L
  478.       }; ^; y; @  _$ u* g. W
  479.       else
    6 M6 c$ [) j1 }: I$ o1 y
  480.       {
    % Z& ?" T; y- f$ K8 n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 X  l! }+ ]$ g+ {- x1 [/ x2 Q
  482.         strRegsName=DEFAULT_REG_URL;$ W  A. f5 S2 K' S5 O
  483.       }3 C2 F! w7 p! i4 F2 k' o5 i8 P7 z  X2 c
  484.     }1 d% M  m# l5 J  \( q  i
  485.   }. o. A/ c* |4 R1 W3 Y6 V
  486.   return true;
    ; M6 B. X& U- Y. t; }& g- M
  487. }  e1 _& |4 O9 o+ d( k) e' Z
  488. 1 V$ u! V: G# |! Z5 h# n
  489. #include ".\ZLib\unzip.h"
    & ^$ r7 X7 ?* N
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);7 E3 X$ z3 t. y
  491. /////////////////////////////////////////////////////////////////////////////+ z: L$ t" B4 t+ q0 ?
  492. // CRevAppApp initialization, ~% U+ j* G' ~  i) m, a2 R3 W
  493. : p% Z  Q1 w# @+ M$ m$ G
  494. BOOL CRevAppApp::InitInstance()
    7 H" O" k2 N0 B7 ^5 I3 |" V
  495. {9 C" t  M1 B- {! G& V9 c0 B
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];8 m6 A  d& l2 B* P6 K
  497. 4 J4 b) `& e7 O5 @
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' q: e  @6 J7 R/ a
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    / _5 }0 {* G% Q  q2 ]& D
  500.   {
    9 I) ~2 Y" R" e8 Q' ]- {1 C; s
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    4 t) V- V4 o0 v
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    5 C+ E. X1 R/ Z# h: A; K6 p; L
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    " C% N5 W  K) e9 M* s, C
  504.     {& p, t9 l2 N5 x) A' Y" e
  505.       strcpy(szPath,szPathTarget);& y8 S+ k  G0 @) d
  506.       SetCurrentDirectory(szPath);
    8 z& s0 w. g" Y
  507.     }0 L* }! L! {  ~! p0 s
  508.   }
    ; ~- E/ k2 A9 ]
  509. #ifdef _DEBUG/ a6 ^) o8 ^4 ~/ [
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ {* y9 W% a. t
  511. #else
    0 D6 g; z. H; x* J1 y( E2 F( }+ X
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * A% R7 ?. W1 s! W9 @2 x
  513. #endif
    ) @# Z6 s4 n$ S& {; ^
  514.   {
    ; P1 I& H  C& ?! ~
  515.     char tempFileName[MAX_PATH];4 L3 m& ?. E/ n" B& E& Z8 V
  516.     strcpy(tempFileName,szPathSource);
    , Z% C5 \8 k, O( p
  517.     tempFileName[strlen(szPathSource)-12]=0;
    + }5 }3 ]$ T7 S; D- O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");/ _( k+ s$ e& |0 G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    : ~% Z4 G. N; v( r+ R& r: E8 M6 m8 x
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    , s. r" ?  f$ e" o  e* l: A
  521.     return TRUE;
    ! _4 o& D$ {) _$ ^8 }( u
  522.   }
    " q5 @0 X/ H7 `1 _
  523.   // Nuke 0118: Delete run.exe
    - p! F  q6 @. Q9 S& N
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );. r7 @% Z+ N& `
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    . ^. P2 n6 P) R" r3 I* U; Y0 \' _
  526.   if(!ReadCfgFile("Config.ini"))$ x. n: ]9 ?# z1 T
  527.   {
    ; r' M/ N+ W: M, J$ q# l
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    5 m1 I. i8 g0 u! I" H6 w
  529.     return TRUE;; t+ i8 `. @4 m: m9 n
  530.   }
    + \+ n4 A" }( k+ L9 z
  531.   HANDLE mutex;
    9 Z; Z3 J8 N* g$ s5 E( o- |
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    % u, K( R4 G' w0 X6 z
  533.   {+ r1 _) W' {3 b6 s2 @
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)* o4 f. `4 H2 X* ]9 ^8 H: A0 u
  535.     {
    2 [+ D! [1 |+ M
  536.       CloseHandle(mutex);
    1 `6 |, ~! A$ J) [+ d
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. Z9 t3 E, }! L9 _, b6 w; j1 S! j
  538.       return TRUE;
    4 J) X! ^8 d! j) ~  g) F
  539.     }' ~8 R9 T' d: \
  540.   }  7 V0 S) q" f: D- V! [0 \
  541.   CloseHandle(mutex);% ^9 ?, X& [- l4 L8 w

  542. * H' I/ ?& F/ Y* m
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    7 c7 V# I; a% k9 s3 ]6 j2 `
  544. ' T  O" h, _" F
  545.         AfxEnableControlContainer();
    2 Y7 b9 g; b& \( O
  546. 4 A$ s. i. s+ @: P4 c5 ]; K
  547.   bCanUpdate=FALSE;
    3 ?9 ?/ F5 `* s  U( ]2 l. ^1 E
  548.   dwStartUpSteps=1;
    5 g4 e. G, t' m! U8 [
  549.   dwProgramState=AP_NOTHING;
    ) U$ g4 O8 ~( j1 e, M3 v

  550. 5 a% l# I  R! i7 [9 e2 n+ f% B
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ' a# t8 B* {% l2 D' a

  552. . x& E: S8 d7 U5 X
  553.         // Standard initialization
    4 O- P- c* U- e# J! n- p: V
  554.         // If you are not using these features and wish to reduce the size
    0 _% [8 H; b( E% n0 `" F
  555.         //  of your final executable, you should remove from the following$ h/ D% m2 @# ~+ F& c
  556.         //  the specific initialization routines you do not need.
    " y+ K+ s+ j  m
  557. 8 p" I, \1 t! B( [+ H
  558. #ifdef _AFXDLL
    - r' _; h0 e. @0 R  m0 D+ S
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ( A6 R  K/ o2 f: o2 J& P! j
  560. #else
    7 P9 r' c4 O! J9 u
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically9 x! y  W) B+ h+ J9 r- f2 Q) I
  562. #endif
    . o" j$ f8 c: ?, v6 v, E. H

  563. - E; j  K$ m) G, o0 B7 p: q! F
  564.   dlg=new CRevAppDlg;
    ( e$ v& D& G: A0 s
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + r0 }! H; S! Z! {1 q3 h9 l+ \* V
  566.   dlg->ShowWindow(SW_SHOWNORMAL);. \3 q4 @- a1 R+ F
  567.   m_pMainWnd=dlg;, l: {& ^8 z3 h( @3 ^. e1 L/ A

  568. 5 \2 v8 {2 B$ u! o9 g# B4 b" E6 B3 O" K
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);! c$ Y% f9 W7 z% H
  570. ' P7 {& P& ^1 \* t$ z
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ' o4 C/ z4 K8 |( Y# E2 t% G
  572. //  ULONG_PTR gdiplusToken;$ J) O, s% M: n5 c/ o+ O
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);. D$ H5 Q% W# c/ ~
  574. ! n8 C6 f+ ~0 x
  575. //        CRevAppDlg dlg;0 G; x9 H& v5 Z3 N$ P
  576. //        int nResponse = dlg.DoModal();" Z+ j: K; u7 k: D& g, O
  577. //        if (nResponse == IDOK)' u% A  Y; j7 ^. c. |7 j& j1 M; h4 P3 Y
  578. //        {
    ) p$ D0 d6 F5 F. s# @
  579. //                // TODO: Place code here to handle when the dialog is
    . [9 w' h, q( C
  580. //                //  dismissed with OK
    9 F+ u" \5 y$ \, x5 u0 k
  581. //        }
    & t: k4 u& _& n1 p0 k& e; J! r! b
  582. //        else if (nResponse == IDCANCEL)6 ^& u' _* ^2 f4 y
  583. //        {: C2 t' f) I, ?4 J* ]' G
  584. //                // TODO: Place code here to handle when the dialog is
    0 R% u0 n+ L4 s
  585. //                //  dismissed with Cancel
    , a8 a7 e' ]; \6 Q& p2 v, u9 t
  586. //        }8 A$ F: p6 ~! d' ~/ P* s
  587. 2 h/ h6 m9 x+ K$ v
  588.         // Since the dialog has been closed, return FALSE so that we exit the0 }8 E  [4 Z, F' n
  589.         //  application, rather than start the application's message pump.
    + z- _( ^; D6 y
  590.         return TRUE;7 F$ \/ |1 P3 M
  591. }2 j3 _: q# u9 B  w: Y, V8 n9 ^
  592. . d3 h. j( \8 g4 c( f; E  ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token)8 F  @4 m* u, h$ d: {3 ^. a. J
  594. {0 {  D. O6 _* B  }
  595.   int i;: m+ j- J' H8 t
  596.   char *szRet;
    + a  O' j0 _% b9 X- T: A0 I9 Q, ?

  597. & c0 b3 U% |# h; ~$ `
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ' f' K3 q5 @' h' \7 t! L
  599.   if(sztoken): d8 \6 C+ G( ?$ O# X5 F
  600.   {
    6 g) Z7 W6 B3 C/ `; _- ?+ h
  601.     szRet=&sztoken[itoken];* J9 H7 a7 l* o2 N: d
  602.     while(sztoken[itoken])
    ( Y, l: }  t! A2 a# [% h3 |+ w; ]
  603.     {/ R% B4 L7 G2 d! d1 ^) I5 x! A
  604.       for(i=0;i<(int)strlen(token);i++)" S8 k/ I. M7 P
  605.       {5 i9 k3 _; A2 `
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    $ f/ F4 m1 Q  l9 _
  607.         {# Z. h" n% k) M( H) q. O3 D, n; k
  608.           sztoken[itoken++]=0;
    ' t+ G& B, r% H: ^
  609.           sztoken[itoken++]=0;
    ' i1 W: s; p8 _0 O- I, E  w* M
  610.           return szRet;
    $ ?! g* ^7 Z! Z& P1 u6 w& p. K( t
  611.         }
    9 y; l- l3 G  Z
  612.       }3 e) l  I! ~9 L+ f6 R, n
  613.       itoken++;- Q; V" [/ g# S0 A) e4 a5 S! D
  614.     }2 Z  M/ U7 [8 U, O
  615.   }
    . x, r) G: F  Q, }9 P
  616.   return NULL;& `7 }; _8 n- N9 z0 ~
  617. }
    / D$ R5 O8 n' S7 a9 p  J* F

  618. " Z: W" v+ q6 f7 h4 }% d% w
  619. void ProcessProc(long Total,long Current)
    . z3 `0 ]- o4 h3 S  A7 d3 ^% j
  620. {: b( a2 I) H. f. Z5 H7 R) T7 m6 ^
  621.         MSG msg;" J( [5 J% m( G3 y9 \7 P3 _, i
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);1 W! g' h& ?& e6 c- K4 q+ d
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));# k9 P- A6 W! T6 ?6 ?1 l3 M6 n
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ) f; M3 ~: h5 ~8 O
  625.         {
    0 C  M3 b9 o. m) f4 N3 {5 h$ ~3 @
  626.                 if(!GetMessage(&msg,NULL,0,0))5 {( t% m9 l6 {
  627.                 {
    ' ?0 Z* K/ m: ~0 p( m) ^# E
  628.                         return;1 Q& p# G: K0 e8 \5 _- U
  629.                 }7 E/ E$ u9 n$ M. V) S4 c: m9 I# S
  630.                 TranslateMessage(&msg);
    ! A1 S! W! E, i
  631.                 DispatchMessage(&msg);
    ( f9 O  p' q" q) O! m
  632.         }        - b' V- m$ z& ~0 J, V
  633. }8 e! h" r( L3 R1 [" B8 D
  634. 1 S6 r( b8 E" I# w
  635. BOOL bFirstChar=TRUE;/ @; w2 F- O$ {

  636. % M% N, }- w+ N& e! M1 ~
  637. BOOL CRevAppApp::OnIdle(LONG lCount)4 J* l, o0 _; R  H' Q! P- x1 G+ F& C
  638. {
    7 R* [1 V9 i* c7 g8 P! y
  639.         // TODO: Add your specialized code here and/or call the base class
    8 t6 G% u9 e: X; q
  640.   switch(dwProgramState)% V: v4 A4 |' C: d6 o# c
  641.   {
    7 p: u4 t7 c. H$ B5 X
  642.   case AP_NOTHING:
    / @( F2 a# E4 m) s
  643.     switch(dwStartUpSteps)
    # w4 D+ z# U& z8 I) s- v
  644.     {2 A6 }" V  K9 z8 N$ N% ]
  645.     case 1:" m2 P' U* Q. b" ]8 T! w* `. o2 x
  646.       {  ]) Y5 @) A# m; J5 l
  647.         int i;' ]& `3 _" w1 x3 i- ~( Z; Y6 m7 \3 x1 n
  648.         CDC *pCDC=dlg->GetDC();
    5 g2 N) p6 L* ~6 |
  649.         HDC hdcwnd=pCDC->m_hDC;* I6 I, P: j. F
  650. //        Graphics graphics(hdcwnd);6 F+ g0 z7 ?) A+ c$ F5 ]; n" g
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");: a! O6 {- R- Y& ?& t# D' F
  652. //        INT iWidth=bitmap.GetWidth();
    5 Q7 C3 L7 f5 z* C- y- ~
  653. //        INT iHeight=bitmap.GetHeight();; K9 A* V. A- e" f; f
  654. //        Color color,colorTemp;
    ( [( l. E5 O8 F. c1 E9 c- d& A
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)0 o: b7 G& C& O' ^$ U
  656. //        {
    # R: ]9 t" W) a8 h
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    4 X$ g3 Y* L/ [7 p( d/ Z8 h7 b! e
  658. //          {
    3 _" X2 a. P4 `& }9 U$ a
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; I6 P0 U0 b0 b$ I: h
  660. //            colorTemp.SetValue(color.MakeARGB(
    5 J( O0 J' _+ {7 Z2 a  b7 |0 J
  661. //              (BYTE)(255*iColumn/iWidth),' D7 x- H* F+ O6 e% J
  662. //              color.GetRed(),8 b( _; D6 N  |
  663. //              color.GetGreen(),) g6 n2 F8 j" ]! T" S, h' z8 p
  664. //              color.GetBlue()));
    ; G, f  o* a+ D2 x, w4 K# q
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    / n. R9 c4 _* _
  666. //          }
    0 ?0 e/ a! o+ e( R1 v  E) c3 T
  667. //        }
    : J7 O  M! a. Z, @& m0 l% C! P
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);4 z4 I& p5 o( e% t; R, Q7 {
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 H+ k, V% k) W" {) z% s
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ {& Z4 G. @% i5 @' `7 V- c; I/ O7 V
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " W! G) Y1 {- }6 D! A  V6 M
  672.         for(i=0;i<240;i+=8)/ D& S! P9 U2 P% ?9 H
  673.         {
    ! D' R* h/ K/ Q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 {) n$ j. \5 ]5 f# A" R, Y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 m$ o; `% K& |9 L( Z9 c# H
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 u1 p1 M% p- m* _! [8 h
  677.           Sleep(33);8 e, S& S: {, A, O
  678.         }4 A% D! V. ]1 h) l1 @, a& ~$ N
  679.         Sleep(1000);
    / V. [3 e4 w& ]9 L
  680.         for(i=240;i>0;i-=8): a* R$ V. q3 u! U% A
  681.         {
    ' |$ Y0 D# ?9 ~/ U- ?( T% i$ m
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);1 `" U! n! N' N5 r
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& L# E" d2 B! E3 Q6 g9 S) N
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( I' h9 N2 R3 z* L7 j
  685.           Sleep(33);. e& _- @9 b( i6 I4 p9 W
  686.         }
    3 x& N# s( ?6 ]3 m5 A
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    , `8 `3 F1 X8 G, m+ H
  688.         dlg->ReleaseDC(pCDC);* u& D, w/ M+ f1 D
  689.         DeleteDC(hdctar);
    4 Y; c1 n+ a- i! p+ }% ]
  690.         DeleteDC(hdcsrc);
    7 X) y* j5 Z; t! K: d8 L- C7 {
  691.         DeleteDC(hdcorg);
    2 K7 s! }+ C; d. B$ I
  692.       }
    % e1 _5 W3 g9 N
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    - }" S: K' N8 @$ n- P8 N
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  K' s  A! A7 ?0 m3 u
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    % g5 h" J9 g# Y  |& k4 a
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    1 V2 G/ Z+ x! R; A
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 {9 j$ V, H' ~: |' ~/ d
  698.       if(!Dn.Connected())+ D+ O% J! S5 u- P, F2 ]6 }/ P; _
  699.       {
    ' v; e/ C2 v" Q  F( Z
  700.         dwTotalFiles=1;3 v0 R( H! w3 E4 F
  701.         dwDownLoaded=0;- a  W! d9 N. g# P/ X2 Z
  702.         bSilentStep=TRUE;# ~$ B7 x+ j4 Z2 X% v+ J/ Z0 R. H1 Q
  703.         bCompressed=FALSE;
    / e) H5 B4 K( R( m
  704.         strExtLocal.Empty();3 y, z& L& E# \5 [3 Q  A. t
  705.         strFullName="readme.txt";
    ; g8 ?' h% o. t
  706.         dwProgramState=AP_CONNECT;
    4 ^/ s- ?. [4 b9 h% s% l1 \, s
  707.       }. I( Y! t; L9 h) Q  e7 C
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    " z# _: I1 w! X- r; c+ B/ s- W
  709.       dwStartUpSteps=2;9 U1 M$ ]3 ?. S) f
  710.       break;- f. ?+ n' J! }. |
  711.     case 2:0 q9 s9 e5 f4 A& d* U% Y' F
  712.       {
    6 N! |5 d5 s4 T
  713.         int iEOF;$ C/ q& ^. K3 T. h6 W) K( l
  714.         FILE *fp;  c5 S/ \6 B1 l% s" i0 g
  715.         char szString[512];9 @* q+ o- n) e0 h+ s0 q7 M
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    # a. k: Z' t' a" q/ N" k
  717.         if(fp)
    9 H. j5 h$ y  K% T2 n
  718.         {
    , A8 M& y, B: a, V
  719.           do
    / J) I0 q  h# }8 d
  720.           {
    - x0 l. M$ s; c) B! J+ c6 q$ }
  721.             iEOF=fscanf(fp,"%s",szString);( Z6 E& @1 v& l  U
  722.             if(strlen(szString))/ ?) f0 u2 o( A& o5 M2 [' f- k7 B
  723.             {  Q9 \* v2 w& k% K/ m  d9 W
  724.               if(bFirstChar)
    9 X. _* `; S3 @7 L# K: G, b
  725.               {& ~3 B2 R% ^4 @
  726.                 bFirstChar=FALSE;
    1 F8 a7 w& O4 `. w3 n0 C$ i
  727.                 bConnectIsBig5=FALSE;
    ; f6 H, S- u8 x% i. L- ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;/ r# M8 x+ O' a( H
  729.               }& D9 D# y- Z( F2 O/ f
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));# h# L6 R5 Z8 ?! h
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));9 F& w- c+ P$ L" g
  732.               dlg->m_ListText.AddString(szString);; D' z# G8 s% F- c
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 A+ K: ]: v- J8 s% b# o
  734.               *szString=0;  [1 F; H: \8 s( a
  735.             }- S. d% F  e3 D& _
  736.           } while(iEOF!=EOF);
    ( A5 j7 h7 I- J0 B- G5 n# I
  737.           fclose(fp);
    $ w) R; h8 X! p# d, h' m
  738.           unlink(".\\DownLoad\\readme.txt");
    6 W  p+ r; U; d; v6 P( a! d
  739.           dwStartUpSteps=3;) m% v8 m9 N. Z* s: f) Z8 V
  740.         }
    $ m; j% h; P' h& ]* |
  741.       }) {4 G( J/ _4 D3 R. ~9 G2 U! Y
  742.       break;
    - J6 F  t/ ]9 j, h* @. T
  743.     case 3:
    7 o- n$ [$ x$ D; n, _6 c* h; e
  744.       if(!Dn.Connected())$ K+ I2 B2 \, J
  745.       {
    ( T+ W: U1 c6 f; g
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);( \; Q3 _. q2 G$ \' ?1 E
  747.         dwTotalFiles=1;! ^( O; h' K, _9 _% a: v$ W; z
  748.         dwDownLoaded=0;8 ~2 y- o: ~- j! n' R6 R( t$ D
  749.         bSilentStep=TRUE;
    ; k) X8 M& d! G7 c# A; _
  750.         bCompressed=FALSE;
    1 Y9 G7 B3 \2 W
  751.         strExtLocal.Empty();, B/ L1 u) T9 Z: u  @3 i
  752.         strFullName="checkversion.txt";
    ; \" D  G, j' Z/ _
  753.         dwProgramState=AP_CONNECT;
    & a) X9 m5 n0 k: o; y
  754.       }$ b1 h: f4 v$ P
  755.       dwStartUpSteps=4;
    % F  j0 m& \0 }8 a; E
  756.       break;  \8 {& c1 I  z4 `0 N5 m  `/ N4 s
  757.     case 4:
    ( S6 a+ m! w, S+ L/ L1 ^' g
  758.       {
    ! z1 L5 N" K8 n2 y+ y2 p6 |' O
  759.         FILE *fp;( Z# d- k8 p* Z1 {; ^+ b' |
  760.         char szString1[128];
    - q. K! [" a( {; e; V0 {
  761.         char szString2[128];$ ]4 S7 K8 A* x/ ^  V
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    * ]' c2 y; W& `9 N) M& b
  763.         if(fp)( q2 W) ^- B6 \6 m1 t- }$ g. h( [. t! l
  764.         {
    1 f2 b2 G, s) B0 a( ]
  765.           fscanf(fp,"%s",szString1);8 h. @9 a% j9 u$ c- V, ?% n
  766.           fclose(fp);  g+ L* ]; L; j) K6 }$ ^* ]
  767.           fCheckVersion=atof(szString1);
    . i5 n! r% k, h- I4 @& S  q
  768.           fp=fopen(".\\checkversion.dat","r");
    + ^3 ~8 O- W" ?9 f+ U; u
  769.           if(fp)
    / ]& a/ a3 C5 i- M
  770.           {% Q! R+ t; P6 Z" v
  771.             fscanf(fp,"%s",szString2);( [) H+ R3 z" z8 X, d: Z
  772.             fclose(fp);* ?1 a) I/ s4 i* P- r* H
  773.             if(atof(szString1)!=atof(szString2))
    ' k: @1 ]8 I1 L4 ?6 P' E! H
  774.             {
    9 v2 y/ `9 V1 u: z  k
  775.               if(!Dn.Connected())& i7 W2 F/ k) ~- K( B
  776.               {
    / e6 b( ~: y6 l* I) {
  777.                 bFirstUpdate=TRUE;2 O; ^# d* n5 p' n! m4 T
  778.                 dwTotalFiles=1;" B- |4 `, @9 p" Q0 r
  779.                 dwDownLoaded=0;
    2 ~6 |9 j& u7 S5 J  |1 v
  780.                 bSilentStep=FALSE;# `5 j0 O$ A7 |" h9 z% d! P
  781.                 bCompressed=TRUE;0 S3 h+ r2 {) ]
  782.                 strExtLocal=".\\DownLoad\";$ [" X8 d4 k% V% H
  783.                 strFullName="update.txt";# B* o) \( @- Q# f
  784.                 dwProgramState=AP_CONNECT;
    + Z  p5 p1 y1 a/ d/ W6 X* ^
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / k+ K  F& ~) S8 z4 R
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( N' H- p8 ]/ Y! f' z8 ^
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");4 d$ e1 B* n/ Y. X5 y( ?

  788. 5 @: |& o  L9 l# y# s) h8 ]! c# M1 q
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 `$ ~3 J+ C# I( Z
  790.                 unlink(".\\DownLoad\\checkversion.txt");5 }6 }. R! o3 f6 }8 u
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    1 a2 K5 a' C# _8 h
  792.                 {/ M/ ]$ z. U% h5 ]; U: {$ c
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : u" z9 `6 ]4 B7 N) h# O3 |
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");9 R# R0 l. {6 o. w
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    " ^7 I5 H; T0 b0 m
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) V( U* m6 J7 z

  797. 4 j! _$ ~. c5 i4 X
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");0 E1 I2 Z; }# D5 T
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    9 d: ?+ m3 r! N2 O2 E% W) y: P* T
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");# S2 X- q% S9 v% F  ?( U
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ v6 E0 W0 O/ ?+ z8 Q. X, Q& Y
  802.                 }
    + H7 \1 A5 F+ J5 |* I) l& Y
  803.                 dwStartUpSteps=5;
    $ B5 \/ _8 Q5 Z& K  ^* F
  804.               }
    9 [  J2 o; Z1 X
  805.             }$ z" y9 U$ {; U4 {8 c% b1 c
  806.             else# z7 }7 ]# }! S' E' M) w4 P5 F8 X
  807.             {
    9 S- p0 E0 U; f  u  y
  808.               unlink(".\\DownLoad\\checkversion.txt");
    8 \- x$ k1 k0 y0 G$ n; n* ~
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: b9 h+ m. R4 b5 Q8 n
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");( i% W1 J8 Y) l& F2 D8 J* X2 Z# d
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");+ {) @+ \1 m2 A

  812. # r1 q0 A' @& ^9 o: ?$ {
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 f% V$ m* ~+ M9 E; N+ b! H! V
  814.               dwStartUpSteps=99;
    5 S5 p8 A6 g9 `8 q
  815.               bFinishUpdated=TRUE;4 a7 }  Y& a3 Q
  816.               bCanUpdate=TRUE;
    ; u# }0 K$ d- d5 e# a$ J
  817.             }
    . A  [( X% P& A9 N
  818.           }
    ; V" h% j% L0 o9 Q, n5 U8 x
  819.           else0 O2 x& X# l- t- J( l/ u1 E
  820.           {! t9 D3 i5 d- t2 |' ]
  821.             if(!Dn.Connected())& V' @1 R! X1 P) y/ r
  822.             {
    , B% l& X8 [0 `7 h; `
  823.               bFirstUpdate=TRUE;
    & Y. f- c( e2 U5 L, [% Y; q
  824.               dwTotalFiles=1;3 q/ s; e  A- y! J
  825.               dwDownLoaded=0;
    5 \# s" B8 B& I% [
  826.               bSilentStep=FALSE;
    + W. ]8 [0 l# V) z% j% G* Z
  827.               bCompressed=TRUE;) o- ~2 {6 g- K# e' s5 E
  828.               strExtLocal=".\\DownLoad\";
    " w% H2 }9 w) ~  [4 r* a
  829.               strFullName="update.txt";
    4 h0 B  D4 i; ^. _  \
  830.               dwProgramState=AP_CONNECT;
      W2 T; q& W7 `( v/ c4 @, h
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - K2 Z4 M3 _8 l4 d3 d
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" m+ C" g2 y$ D3 t- W# f
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 m) y8 V! l( |! m3 v& {4 T
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & ~+ W" Q6 O4 Q7 S8 p; ?
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ! B% A& |0 X) c8 K: v5 B& ~% r
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)4 k, g* x, f% a# Z
  837.               {
    & z/ b- \& b, k( h
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");( H8 ?0 u5 z+ v5 ?8 Z/ \) x0 w+ _
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");: W5 }% I+ l+ p( |
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");, B: F3 I- i- N
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ q4 ]; e& Q' H; B
  842.                 1 K" ~6 f) j8 E" V* o" h
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * @5 y- U+ x# r
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : Y( ]8 O1 K+ t7 T* y& j
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    1 L; b8 o- y2 R! v" E" {
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 f8 {' }) o8 k  ?4 d, Z8 I
  847.               }/ ]$ C% y+ P0 p; A
  848.               dwStartUpSteps=5;/ K+ k- `9 [" n; |% Q& H$ K
  849.             }: f4 u0 N& J- }% L9 j2 y
  850.           }& T+ W/ ?" A7 G! P) g* ^
  851.         }8 p% R! e0 c9 w8 A
  852.         else  u1 P8 [0 i9 G& S
  853.         {& m- a) K; o$ E' `4 a: _
  854.           dwStartUpSteps=3;
    0 f% j+ ~" n+ U! A
  855.         }
    8 X" \$ {" m! @6 p
  856.       }1 s4 T5 {6 t: h
  857.       break;
    , \- F* o* d; y8 C3 s9 m7 N
  858.     case 5:
    9 I% g+ I* P6 s, E  N
  859.       {( f/ P) V4 I" ?2 L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)3 t5 ~; d( i0 ]: R0 L! p1 H- n
  861.         {9 b# N$ s, M3 C/ m# z9 U
  862.           int opt_overwrite=1;
    : L% Y. S6 U% r5 j
  863.           int opt_do_extract_withoutpath=0;2 \* N& G1 R! m, v7 k4 J
  864.           unzFile uf=NULL;0 ^  @5 W8 y  [
  865. ; w- v% I; W' B# ~0 j
  866.           uf=unzOpen("Wsa.zip");3 C3 F" L" Q. W/ D
  867.           if(uf)
    + w( P8 ~/ r, [  U- Z0 K
  868.           {+ u& j! W- n; D, e+ g! h9 X
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    1 {* C" W3 D/ h; z; T7 ?: E9 S. R) \
  870.             unzClose(uf);
    # \9 N4 `) h1 [$ z' g: b% q. ~
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");8 j" ]: J9 U  _0 f2 W' O  P) ?# r8 u$ H
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");3 _+ x' j% L4 d5 v- B! \6 q: _
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");9 k- o. c8 F' a$ Z$ H) R2 I* @; c8 s
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 c$ r5 d( G- m( N9 p
  875.           }
    0 ]9 m( {! T8 i! [
  876.           DeleteFile("Wsa.zip" );' A1 Y% q5 m$ S9 N, W
  877.         }4 y/ P/ A3 B+ g- D
  878. $ q, @7 w: Z1 E1 k9 W- o+ ?, p. I
  879.         if(CheckLocalVersion())
    7 h- ^6 q: W' R( ^
  880.         {
    # k, I; c4 d- _" W& L: j
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    : i( f! o& j3 z1 b* ?0 K; O
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    $ y, d9 {) t% E5 f/ i# K
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    6 f2 n2 y' P$ j8 E
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 q, R1 `% i# S# E$ q6 [% S
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);% x4 w+ j4 q# ~' h
  886.           dwStartUpSteps=99;
    8 Z! z+ c- i. W/ t
  887.         }
    0 R% `3 ~, P3 I' k% [
  888.         else" {& L* o8 e0 `3 C; e! |$ U6 ~
  889.         {
    & B- b6 G) }* ~8 ^2 [; X* P* r
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* }1 A3 X% @$ O1 a: \
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& W' x7 M3 V) R9 ]
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");. X4 m  A# M2 V5 O) J/ w

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

! q# M5 \  p4 \& U* U; q8 x3 f4 W

評分

參與人數 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-24 06:56

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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