CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
7 E# E0 c8 o. i. h- K% b7 O
  1. / RevApp.cpp : Defines the class behaviors for the application.
    - k. x( G8 W) B
  2. //  W  v: E: j4 l9 @4 u7 J  A) O; W7 n* Y

  3. 4 L3 _5 R0 b6 F5 ^
  4. #include "stdafx.h"
    ) J4 `' e) ]0 z  K
  5.   r( D- G, D+ y. ?5 N+ c
  6. //#define UNICODE0 n5 `, t1 F# `# I, e" y6 F
  7. //#include <gdiplus.h>
    / H) k) s4 C9 \# l  q" [: c
  8. //using namespace Gdiplus;+ v5 j& F' `( I+ l* n
  9. " e2 W7 x" r8 J; S+ _% E
  10. #include "RevApp.h"
    / B0 ]" v  w( [' Q- S" L
  11. #include "RevAppDlg.h"2 K" E3 E: Z- W" j

  12. # ~& Y, C9 o  V. W7 x
  13. #pragma warning(disable:4786)' ^& q7 q: t( t8 t4 X3 q
  14. #include <map>0 o/ ], I, k+ Q* I1 @  c
  15. #include <list>1 F- J( L" I* ~# Q4 Y
  16. #include <direct.h>
    2 b) x4 f# O( w$ B3 v" a

  17. - E) F" u3 J% \; O! b
  18. #ifdef _DEBUG
    - g( N3 K. u  k3 G) {& u; t5 E+ {+ u
  19. #define new DEBUG_NEW, t, M) W9 d2 }2 x6 _8 ^2 Z
  20. #undef THIS_FILE
    " K; w2 i6 X& Z' T
  21. static char THIS_FILE[] = __FILE__;* P6 j9 @# J4 y' ]
  22. #endif
    : [, ^5 R+ |' D% R& @; i0 Q
  23. #include "SkinResDef.h"- n0 f7 |, v6 A/ B! H( G9 L# G) \0 M
  24. #include "ChangeBG.h"2 X$ g7 @% t: c6 W, P
  25. #include "AFXINET.H"+ |# h$ h3 k( _' a% f
  26. ' F* D; A% M, R* ^/ Q8 x* B
  27. #define TRADITIONAL_CHINESE 05 w: x5 d1 v& `
  28. #define SIMPLIFY_CHINESE 1
    0 H9 v# {( v. m
  29. #define ENGLISH 2( g  A) P( \3 ~' l. [
  30. int m_iLanguage = ENGLISH;9 k9 }1 f7 I  M$ O4 x; U4 O
  31. /////////////////////////////////////////////////////////////////////////////5 r* J, v' \# u$ P
  32. // CRevAppApp
    5 G' S7 h/ o5 `1 i* K# e& g+ J, Y
  33. * H; N5 h7 b) F7 D
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)/ J: e! v, ~' t0 L1 o- f9 }
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) L& W) Y6 a3 Z) h
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
      I! F; c1 k0 c& f1 r
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 |& c2 g: b# b7 y
  38.         //}}AFX_MSG
    8 R8 t1 M* I- x5 f
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    + j) V) q* i: f' ?, H  B
  40. END_MESSAGE_MAP()" \- Z4 X8 M: a% k7 p; }$ j3 U  \% s
  41. . I% |& m4 u4 e" x1 ^( o
  42. /////////////////////////////////////////////////////////////////////////////
    3 _, u' V% i) a% e7 p
  43. // CRevAppApp construction2 C+ @4 ~1 S. H' A3 V- l

  44.   O( W/ C5 v' J  U. u
  45. CRevAppApp::CRevAppApp()
    . [0 ~9 W7 q3 y9 f2 @9 n! K: h
  46. {
    / Z* u9 f' K- }  j, Z: Y
  47.         // TODO: add construction code here,
    % `8 A) t2 M! l( Z, Y
  48.         // Place all significant initialization in InitInstance4 t4 Z$ {0 P) N' ?! z1 X9 K
  49.   bDisplayIsBig5=FALSE;
      N% i3 R% l* ~) _) g, X! x
  50.   bRestartUpdater=FALSE;
    % b' V( z" L2 d% Z
  51.   bFinishUpdated=FALSE;2 O& @, Z# l* f& a) V; H' P
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ( `1 ?) q/ Z5 Z  I
  53.   InitChangeDataBig52GBKS();& Y  }1 B$ \! S# @# h( V' n9 i
  54.   InitChangeDataGBKS2Big5();- S7 b& Q  G) G: `' Z
  55.         //
    8 O! W0 v1 @5 F) k* r0 b; T
  56.         bClickRunExe = FALSE;! B6 l- c8 y( _' n
  57.         //
    0 P- g6 E0 l/ \' V1 o, m8 u+ e
  58. }0 L* v6 `6 R$ @' R8 C; {8 H9 X
  59. , `3 p2 b1 w3 n4 U4 H5 |  k( r
  60. CRevAppApp::~CRevAppApp()
    3 w- g- F* X9 D6 ]0 B
  61. {
    / r- a3 N# B; H1 z" ^
  62.         // TODO: add construction code here,
    3 ~/ t( n4 [: P- `+ z: Z' y! L
  63.         // Place all significant initialization in InitInstance
    " A! h8 k% v  }, v- }9 J
  64.   EndChangeData();
    . _# M5 L1 y8 b1 D
  65. }3 T3 i5 C. p: k: K6 A3 D
  66. % ^$ b/ T  ~8 e
  67. /////////////////////////////////////////////////////////////////////////////, N1 ?! [6 @+ ~% Q
  68. // The one and only CRevAppApp object
    6 E/ E0 R( ~# U) A6 Q1 n, m

  69.   ?& `4 l% R% e7 Y% r2 h
  70. CRevAppApp theApp;
    + ?4 D- V! k! z# u5 j+ l7 |6 H" }' w

  71. 7 I. `, G( `* |' M6 f2 V  X. a
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    9 u9 Y1 R9 _) Z) V6 E
  73. {
    1 p9 S, |5 m# `% {
  74.   int iEOF=0;
    : w2 R, f6 l( W
  75.   char szTempName[MAX_PATH];& K; w1 ^6 y" Y; N+ x
  76.   *szFileName=0;$ n8 P" X+ Q  {5 v
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ' y% b% `; M: y- A- F! z
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    & M; \5 c# W, s# Q" Q) n/ m, A) N
  79.   {1 {& n. P! |/ I$ @
  80.     strcpy(szFileName,&szTempName[1]);5 @4 F0 V% f6 C6 B9 l. V# W
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    : p4 x+ K$ o6 r# C5 w
  82.     {8 J; {4 R% K/ l0 O
  83.       iEOF=fscanf(fp,"%s",szTempName);7 p8 \0 L+ m0 f  X' ?1 H/ W
  84.       strcat(szFileName," ");7 P: Y9 B) r5 @, R; v- h$ L% i4 \' v
  85.       strcat(szFileName,szTempName);. a. S. D# C: E& Z7 q) |5 H
  86.     }
    / a$ I, k( J3 Z
  87.     if(strlen(szFileName)>=1)6 r! i, I& V: b1 p6 t1 W, T
  88.     {
    / k3 l9 K. `7 n2 P
  89.       szFileName[strlen(szFileName)-1]=0;* w  O' w1 O! b$ }: p
  90.     }
    6 e0 W$ D/ o2 W
  91.   }5 z: {: e% m1 H2 v8 _
  92.   return szFileName;
    9 o7 k$ `+ c  [* z
  93. }, ]/ X- O2 O/ q- K- B
  94. " V, w5 R) `2 t' x) @  u
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)+ l) R& |: t% k9 o& I
  96. {
    3 e. f8 T6 O0 n7 i
  97.   FILE *fp;
    & d9 D% O* _4 e6 i1 t3 o
  98.   char *key=NULL;# [2 F, N. V6 q8 G# O7 g
  99.   char version[MAX_PATH];& @, F, c/ a& {
  100.   LPUPDATEFILE file,olds;6 ~7 ]; n7 h2 T9 S5 F9 M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;* B8 ^$ O) V% A  {& {$ K/ {9 {

  102. - U6 m5 H% n( t  f: u7 T
  103.   UpdateList.clear();( M5 f1 L  O6 }" z
  104.   UpdateFile.clear();
    / o1 S& O) f( ]- v- y0 _/ |
  105.   if(GetFileAttributes(filename)==-1) return false;2 I2 M7 J4 I8 d
  106.   if(!(fp=fopen(filename,"r"))) return false;; H8 W4 W, }. w$ ?3 {# _$ ~  i
  107.   fscanf(fp,"%s",version);5 c/ v- u; D4 M3 X6 x& v3 F3 {7 |
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    2 l1 `  ?& m1 q. k4 T9 A' ?  m
  109.   while(fscanf(fp,"%s",version)!=EOF)+ P9 [; ]8 N/ E
  110.   {* L# n- ^( x8 B) Z9 O, S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . c* Y; n' \/ J8 L1 C' K
  112.     fscanf(fp,"%s",file->path);( b+ X# X- Q- m; [7 K8 p
  113.     ReadFileNames(fp,file->file);( O0 T5 M+ {7 ], c" H7 p, t
  114.     strcpy(file->full,".");
    - O0 A1 }5 y, y. M, a6 g$ j$ J) B$ G
  115.     strcat(file->full,file->path);7 }. {! ~3 Q0 Z' M- ~. T
  116.     strcat(file->full,file->file);0 P5 B+ j; m8 ~! a# X3 C
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())+ m# z$ n% D2 t. n. _! i
  118.     {
    2 R" A: X! Z% e! Z9 f+ e3 j6 R
  119.       file->vers=(float)atof(version);
    . Y" i4 y9 a) B+ l; A$ }
  120.       UpdateList.push_back(file->full);
    7 M+ t( W3 d1 F& |- W) P
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));, a1 b  m  `; g, }0 R
  122.     }
    % \$ b5 K. X- O, e; ~) L
  123.     else- Z2 [- V  s+ J  R# [" I, E
  124.     {& X; }. u0 X4 V2 ]1 V
  125.       olds=(*p).second;
    " v6 T9 `. A8 N9 N  [
  126.       if(olds->vers<(float)atof(version))# c4 r( N5 o6 B" Z* w4 }
  127.       {7 z3 c7 Y5 [7 }- ?* X/ {8 A
  128.         olds->vers=(float)atof(version);. r5 {5 U. G) h! i$ N
  129.       }3 b. v4 ]) V) l5 X
  130.       free(file);
    / R# C! |3 g& t& h3 t# u! ]
  131.     }' O7 R) h2 e5 g! o$ K& i
  132.   }  k0 A8 Q8 a5 Q' u4 V( ^0 Z3 V* w
  133.   fclose(fp);
    & p% V1 A" S6 q. Z$ W
  134.   return true;
    " p( y+ I$ t* h+ `+ l, z# d8 l% E6 J' L
  135. }0 q! i# b  f# l

  136. 4 U" i/ |: K8 S, v
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)" n" h% e  |6 j6 G% Q) ~
  138. {2 I1 G6 ?+ y, Y% O# m7 E+ H
  139.   TCHAR  szFull[MAX_PATH];
    : T3 i" n6 l0 c4 Q& k: Q6 `% k
  140.   TCHAR *token,*inter;
    7 F+ f* e( ^8 D9 I
  141.   *szPath=0;
    7 U( g" {; L/ t5 K& V! [: Z
  142.   strcpy(szFull,szFullPath);6 K* P% \5 a7 n. R# X
  143.   token=strtok(szFull,"\\/");8 n4 R5 a. U& {3 D& r' I
  144.   inter=token;! L& ~5 C+ O+ W) ]" L  L' r4 h
  145.   while(token=strtok(NULL,"\\/"))
    $ _5 [. N. r, l% K4 h: S
  146.   {
    & J& \" c  O# `; L
  147.     strcat(szPath,inter);
    $ f4 e4 J) O) M, m4 t
  148.     strcat(szPath,"\");
    ' m' d8 w+ d$ k1 G% o
  149.     inter=token;% @% F+ d+ b3 p; Y
  150.   }) |, S5 D* t& {5 U! X& b3 M
  151.   return strlen(szPath);* X) o* e* z( ?0 p% g  q- ?
  152. }( Z0 R6 q; f  [% Z, w. A  ?
  153. ( {3 y4 Y7 @0 `4 Z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)& W8 J2 y' j0 b1 {0 o* h' G  N+ o
  155. {
    : i. p# P: C  Z8 a" G* Z
  156.   DWORD attrib=GetFileAttributes(Target);
    8 }1 C& j- a5 |+ t4 y4 I; S
  157.   if(attrib!=-1)2 f$ Y# `7 a, I# ^- f, r; `7 u) d" }
  158.   {
    / G$ O2 c# [8 F/ b4 m- R
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    7 x1 `* w% Y' W3 Z  W/ ^4 K: ?& n
  160.     {
    ( F" u! B1 l# e7 ]- ^
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);* f. i; c) M+ A. n4 h1 |0 _/ z
  162.       SetFileAttributes(Target,attrib);; W6 j6 s9 W# ^; O* P2 l! U) @6 X
  163.     }
    % j! e  l; P1 h$ M5 l) L' y4 R
  164.   }
    1 C6 f0 E) V/ D: Q* K
  165.   CopyFile(Source,Target,Erase);
    1 t: Y2 w+ @3 B9 D
  166. }8 x/ A1 W$ e/ _3 D7 s6 p
  167. ! q8 _. \8 y; Z$ ^/ ?4 M$ r
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    " U; `0 W( ]( O# b  e9 \" i
  169. {' S7 G. X9 k" i
  170.      FILE *fp;
    3 _! ~- h  D: b5 u2 A
  171.      char  szBuffer[8192];" v0 ^, s# \' T$ f6 y. u8 r9 l8 Q9 _
  172.   va_list  argptr;& \% i. [7 T5 O1 @+ a# k

  173. 3 }; Y9 o2 ~! r# S
  174.         va_start(argptr,message);7 \0 X3 H- C; ]! n
  175.         vsprintf(szBuffer,message,argptr);
    8 p- F5 C9 L- v6 i  e
  176.         va_end(argptr);
    7 w$ N& X6 ^) q- K3 p1 }
  177.   fp=fopen(FileName,"a");0 d5 a, D$ s) C( `" o
  178.   if(fp)3 D8 U' O% K, _; F! Q
  179.   {
    9 C4 }. A% z+ J
  180.     fprintf(fp,szBuffer);- N5 X7 X  |4 y$ Z* ?% F
  181.     fclose(fp);
    2 A. A' J, |& r2 r6 Y3 m! r' s# T/ |
  182.           _flushall();5 L$ |) Z8 t. W6 }! M# V
  183.   }/ f; |" f& Z$ k. m, n  \4 j  D
  184. }
    9 U( s7 K) x& H6 Q+ [/ c
  185. " v; C# A2 R5 m; M9 O
  186. BOOL CRevAppApp::Fclearf(char *FileName)6 ]" t/ g: e# K6 G% u: l
  187. {
    . v- R/ }: U+ N) K" n1 Y
  188.      FILE *fp;
    ( I# M7 K  k0 i0 A& u- A
  189.     DWORD  attrib;
    ; P0 _7 \4 g' k: @) F) w' C8 U
  190.   attrib=GetFileAttributes(FileName);( e! j5 X3 G1 y5 w" Q
  191.   if(attrib!=-1)
    3 t- Y5 T9 j1 ^$ m
  192.   {
    ; l6 u% C% D+ A( S. l+ _& C3 T6 S6 E( |
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);* S; A4 U7 m% C% d9 R- v/ A
  194.     if(!SetFileAttributes(FileName,attrib))
    : t( A  j& p& S3 u1 t) X. J
  195.     {
    ; @% a; y# U/ Y* F
  196.       return FALSE;
    9 r9 h3 |; D( u0 r2 @- u
  197.     }8 C5 b) d7 _- @, L  E! f
  198.   }
    0 }4 V! Y9 P1 P4 D
  199.   fp=fopen(FileName,"wb");
    ' D; R3 h. h$ \  c& Q5 R# y; j" h
  200.   if(fp)' a+ T/ _9 c( n' ?. `: D& r
  201.   {
    . O. k  u/ K# Z0 E! j' X
  202.     fclose(fp);) E% v2 H/ v. G8 \3 m: g! u
  203.   }
    & L  q$ z' B: v& j1 f+ K
  204.   return TRUE;
    & p. e% w# p+ [
  205. }
    0 h5 U+ @$ ?$ M. `- V% k8 y
  206. ( }( I8 l! b. z  T6 y/ N
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    # p& @1 ]1 z- t6 n- `( |/ C
  208. {5 K5 b, s: M3 K# v: w% t2 Y
  209.   char filename[MAX_PATH];
    8 c) N2 s1 Q6 p* m9 L8 b
  210.   LPUPDATEFILE file,olds;
    # u! L5 t4 r4 B, J7 d/ D
  211.   std::map<int,CString>::iterator i;& s) T9 b% I: x6 s( M
  212.   std::map<CString,LPUPDATEFILE>::iterator p;2 R& W5 t; _8 W" y$ C  s7 H
  213.   std::list<CString>::iterator l;5 k. J; u! R8 C  f2 D5 M1 Y

  214. 2 p3 p) `5 N$ Q0 \+ i* B: K5 `% B
  215.   if(bFirstUpdate)
    % b3 \+ h( v) ^
  216.   {
    - D7 R  g+ A9 n% s
  217.     dwCurrFile=0;
    ! V$ {0 \( a3 j6 p7 u* y2 u' B
  218.     bFirstUpdate=FALSE;6 h+ q0 _& w; \
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 @+ J; A5 M$ }" X/ H1 z
  220.     {  @, |9 y; U9 @) f
  221.       dwTotalFiles=UpdateLocal.size();5 I% I: i' A% h% n
  222.       dwDownLoaded=0;
    . F* Y* l2 T! s! M2 H, `
  223.       bSilentStep=FALSE;
    7 I4 D' K' T2 {! D: V2 \
  224.       bCompressed=TRUE;) G+ N' h$ A7 P
  225.       strExtLocal.Empty();
    . |9 k' V. H4 E! z5 ]% D
  226.       strFullName=(*i).second;& M  |2 L5 H$ J, ]9 d7 w# j
  227.       dwProgramState=AP_CONNECT;
    + ^* ]2 p" P7 t2 Y# b5 \7 ?' ^
  228.       return TRUE;. k, j0 ~0 i5 F8 ^( G9 L" y
  229.     }
    4 P+ G' U5 Z( c2 n& T
  230.   }& P, ~* X! ]& [9 V8 V7 n
  231.   else if(bRestartUpdater==FALSE)* g1 D* t5 k6 P5 ^1 i
  232.   {
    " k2 c4 @1 M! W, }
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()). N! Z: O5 _0 g2 }8 ]
  234.     {
    $ c% Z$ x7 P/ \# K+ n- b0 d
  235.       file=(*p).second;
    8 F  k+ v7 K5 R
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    : G# h- s% p9 F- Q8 n6 y; s
  237.       {# ^+ x: \0 Q8 V) U/ J' O9 E
  238.         olds=(*p).second;
    4 W8 _: p7 }) H  M( y$ a
  239.         olds->vers=file->vers;
    % J  I1 {* c! P1 t& V# L: Q5 c; [
  240.       }
    0 J6 X& F; R' {; T# c% F5 K: H
  241.       else
    4 @0 R  N! p, x6 t0 k- r6 M+ i1 k, ]" v
  242.       {
    ' v2 \3 W5 O9 S* ~+ Z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  n( @% T4 P% ?) Y( D
  244.         memcpy(olds,file,sizeof(UPDATEFILE));1 P( F2 ~; J, B" G7 H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));! [  ]% f2 t! V: |7 ^
  246.       }
    * M" ?  Z. E" G8 i8 ]$ b
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");9 I8 O2 }7 U1 U. r
  248.       sprintf(filename,"(%s)",file->file);/ X# `6 C& t  d8 q; s
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 Y. s) K5 U- w3 E6 O' q" f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }  t# m4 f! b4 l4 g
  251.     }, y/ A5 n! d% L$ h" ~9 I* t$ ?
  252.     dwCurrFile++;
    6 l  }, Q! N( }9 L
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 }1 _. q3 x; a. {* G
  254.     {) ]6 \, ?# l. W! q: j/ [3 t% N
  255.       bSilentStep=FALSE;% H3 F. h( s1 J$ d
  256.       bCompressed=TRUE;/ X, t5 B: Z% N
  257.       strExtLocal.Empty();
    . z% S* N; d9 E
  258.       strFullName=(*i).second;2 i0 i  c1 a0 z2 h# }" x2 W
  259.       dwProgramState=AP_CONNECT;5 o# {+ F( o7 k9 ?. \- J) o
  260.       return TRUE;
    " A" Q: f# [5 V; {8 l* X6 ~
  261.     }+ N; C8 z: C/ G+ D' B; j) C
  262.     if(!bRestartUpdater)6 S4 A* J2 F5 W  K4 x* ^2 X0 i; y6 g/ q
  263.     {
    ) {. k8 {" B4 Q
  264.       int iCurrSize,iFileSize;
    ' n5 y# p  u- L  `+ S3 @
  265.       iCurrSize=0;
    " U. ?: A; z) g. P, t5 }' @; I
  266.       iFileSize=UpdateList2.size();
    3 Q& _6 h) @, d9 ~: H4 E! y( X8 r4 r
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");! W- \# Y" J+ d. P
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    " l0 G1 T! y2 S/ `6 l  V1 ~) ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    * i3 x7 G9 x5 }" p
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" U; N+ T& R& L! l
  271.       Fclearf(".\\update.dat");
    * T. b$ q& k& x* h' q' c
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * ~+ @+ |5 u  @' b, F' ^; T
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , f1 H  J/ h/ ?4 u
  274.       {
    / s1 a: ]4 @  g# Y5 R, c) Y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())4 I3 s  c' N# v. p. q
  276.         {6 I6 x4 p6 Y: j/ F1 u5 Q
  277.           file=(*p).second;
    / a5 S& p& ^  N$ H* d
  278.           sprintf(filename,"(%s)",file->file);* [( g! D+ d# c2 P" Q: `
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);/ X+ |! Y+ c" }) G/ H
  280.           iCurrSize++;5 O" H. Q9 ^) G: D$ D3 J; \
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ' r) N2 R# v9 n; i' l' K: n, H; P
  282.         }
    # \5 R4 C7 l% n. U  h
  283.       }# k6 M3 c- ?' U8 V6 t
  284.       unlink(".\\update.txt");7 L* F" i/ ]: x
  285.       unlink(".\\update.tmp");1 }; i$ e) F, `  s# B
  286.       Fclearf(".\\checkversion.dat");8 m: P# h6 c' a- W
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);& X) `$ _* K/ J- y, f9 P' B# l
  288.       if(UpdateLocal.size())
    ( a# e: n! h: c  ]. a$ u/ ^; @
  289.       {* l% u5 j, j) l8 ]3 |3 [9 h) E
  290.         UpdateLocal.clear();
    & T! f6 {; o4 n) m& [
  291.       }+ U. ?- T% |# o  l. F
  292.       if(UpdateFile3.size())
    / B. A* j% h4 n- B. }8 [
  293.       {. w2 s5 ~0 C( i
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); s6 c- N' d6 z
  295.         {+ \0 n, U. b; w' m9 K: U/ ]3 g
  296.           file=(*p).second;
    7 T* @) F% Z7 f
  297.           free(file);
    5 c1 [- c3 R! B0 W$ ~
  298.         }
    % B1 n) t* K/ U) D
  299.         UpdateFile3.clear();+ p, A0 P( V7 ~. \  Y1 n! X
  300.         UpdateList3.clear();2 H9 u. D% w' g; w& o1 Q
  301.       }
    : M/ H5 t/ N5 s. l. L# X. G
  302.       if(UpdateFile2.size())
    3 f& j( R( J0 p$ p
  303.       {
    7 F* R* ]& W, [4 z& |& t
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / F' _2 x; P! B; w  `% d$ I# s
  305.         {8 X/ q( a6 p! u, A
  306.           file=(*p).second;
    + H0 }4 ~  U: t* G3 }6 S
  307.           free(file);  T/ H; @7 k- w. s
  308.         }
    % Q+ a( N  K' A8 o
  309.         UpdateFile2.clear();
    ' S+ `" \* k- M
  310.         UpdateList2.clear();9 C/ Y& p1 Z" C6 C- h# S2 K
  311.       }
    ! `1 Y$ b  V1 ]0 }
  312.       if(UpdateFile1.size())
    0 \' u8 l& S& k- X# M" t$ X$ S
  313.       {% P8 _( A. q. C) z6 D
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% v- ?  w1 _* x) u
  315.         {" r1 }9 Y- A5 }& H, D/ A8 U6 i
  316.           file=(*p).second;; D- A, J# M. a5 {$ j- ?
  317.           free(file);3 u7 w; R; x: ]9 N7 r+ Z# W. w0 R
  318.         }0 {' y% `$ O: l1 f( y  q% c7 j2 k
  319.         UpdateFile1.clear();* S* v- Q/ U8 Z6 S# v3 b$ h9 b+ F$ G: c
  320.         UpdateList1.clear();( B, k* N5 ?' i1 O' k8 a+ _# t; Z& f
  321.       }0 c2 N: \. c  r
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));; G6 P: }! G: S$ O) k  E2 q
  323.     }. K! F) C9 B! g! i1 m8 I9 r! U
  324.   }
    . ~+ m' _4 g( i" p+ M8 p/ p
  325.   return FALSE;
    % V8 B' }+ X6 q5 ^4 Q% @
  326. }
      A- ^) A" g, {6 e. A' i" M# E
  327. / m7 G8 D# k( [* |) g
  328. void CRevAppApp::ClearAll(void)
    + I/ f3 c9 A) {/ E  ]# s9 B
  329. {* {" e$ k/ T4 O2 I
  330.   LPUPDATEFILE file;" {% ^! N) d; Q$ i! }! h4 C
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 `9 D. [7 R5 x0 u; l: h
  332. " g  x2 E3 n1 k# ~0 g
  333.   if(UpdateLocal.size())
    , n1 |2 g( q$ N6 C8 m# k3 O( T
  334.   {
    3 ^/ B# A+ G! G
  335.     UpdateLocal.clear();$ A& {' \$ n" n/ K" v4 O
  336.   }
    ' o% l: v, m8 V! n. m: W& A" P
  337.   if(UpdateFile3.size())0 T4 I: F( v( Z. p$ s4 F  o
  338.   {7 z7 T. q/ K* I; ]( ?
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 g4 `/ w3 o% ^
  340.     {, f1 I+ v2 a. @* K! X% X) i
  341.       file=(*p).second;; l8 Y+ p* J& \2 T0 ]9 M
  342.       free(file);8 Y( H! S& n) m. X, v4 x
  343.     }" g$ @' M7 D( N) X. L
  344.     UpdateFile3.clear();: A% R( Y/ |2 h! @; Q
  345.     UpdateList3.clear();  M/ H/ k9 O! Q! B6 M
  346.   }
    ! d8 a; [$ u4 v! e' ?, L
  347.   if(UpdateFile2.size())
    & u$ X2 n: Z1 H& [/ B
  348.   {0 k, H+ n8 Y( F) i# Q& D
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)/ R+ }8 r, M4 O: t1 q, v
  350.     {
    5 n7 c# S: ?. p% c5 U  p" T3 ]) F" C: ~
  351.       file=(*p).second;
    . w5 K! }' c4 U
  352.       free(file);& \" O! N0 \% a# n& R
  353.     }
    5 x. D  ^* Y0 S+ Y
  354.     UpdateFile2.clear();
    2 a4 U$ r) @* g" H5 H
  355.     UpdateList2.clear();
    1 H4 |5 t) e" f8 j1 f
  356.   }
    / }8 i* b+ D' ~& `, c
  357.   if(UpdateFile1.size())
    1 s/ @) [8 I& t4 [
  358.   {* J2 P# D2 U: u2 ]
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 q1 y* L- e7 Z
  360.     {  L+ r. f: ]& U  _6 \. j. x
  361.       file=(*p).second;0 e* Z: F6 n% g" s
  362.       free(file);/ O- |' I8 O! F( u% h  L
  363.     }: \" o3 ~: N' |, [
  364.     UpdateFile1.clear();- P( `, m& u8 |, d( |) p
  365.     UpdateList1.clear();2 B! v" s1 V5 \! ]9 T
  366.   }8 t. a* I, Q: C% c5 D9 A' U/ C' o
  367. }  
    " p# U( l: @% A7 s0 @: T
  368.   
    3 ^; B8 s2 W' z9 k
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    % a0 o1 V6 M" o& m! A3 N
  370. {1 a/ z, G* k; [. I0 R& d
  371.   int c;$ v: Z: x* q+ l3 E9 R
  372.   LPUPDATEFILE file1,file2;- s5 X) o9 D* g) H2 L
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    5 s$ V* ]% K1 H: C/ L6 `  ?: f4 M
  374.   std::list<CString>::iterator l;5 n" G" t" E" I1 K
  375. ) l8 C  A! ?( a: J) s# w
  376.   UpdateLocal.clear();$ ]1 w- u3 e: e0 D' S
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 t: x8 ~7 q: @; R3 `" g3 @
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    % X- C" d; _( l% b7 c; \
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);2 {) ?" i# e$ e
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);. i* ]2 Y5 e' \- j& a
  381.   if(UpdateFile3.size())
    4 b3 {  _! x; j0 e0 Q( b' P  j8 \
  382.   {
    & M' o1 R& O, s0 C! ^
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)( Q' m0 x; O2 E6 l4 x
  384.     {
    : O! g+ Y. `0 b6 J
  385.       file2=(LPUPDATEFILE)(*i).second;# y1 B# z4 D' \% s
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) s3 c- n+ f7 S" q3 `
  387.       {4 u7 N0 ]2 O8 O1 }3 R
  388.         file1=(LPUPDATEFILE)(*p).second;# K; ?& R" D( P( p* w( x3 u
  389.         file1->vers=file2->vers;; q7 `9 a: W$ e: o; Q! @) E% e, i
  390.       }
    1 Y1 T7 a& m1 {0 @7 z4 V7 _2 c. m( d
  391.       else1 W1 r7 B# d+ O: |
  392.       {
    / ?& l% r, P8 F" D) ~
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 d# U/ o% B  t# p7 Q
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! O0 E7 s: Q1 e" ^. ?8 N
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    . t8 b/ ^! c3 R; Y5 ?# x/ h  I) n
  396.       }/ Z( n3 Z* t' N7 G4 F
  397.     }
    * f( \$ X) ^6 [
  398.   }
    # [3 R4 g  k  L3 a" f
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    : c3 c$ }# M( e$ r5 D: [! r3 S% V( ^% I& ]
  400.   {3 L; ?0 N. x' q$ }8 M/ V' Y
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
      ^! d0 M1 z1 D* k& Z  Q) D0 B
  402.     {
    & g6 d, T4 b/ |; T& D& \
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 p2 o0 C: u$ e, E5 S1 T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + H: }  {3 V9 H3 e9 m6 `
  405.       {
    1 J/ H; x5 r6 U4 |
  406.         file1=(LPUPDATEFILE)(*p).second;
    4 e5 i* O1 X% {0 d4 ~  C, X, c
  407.         if(file1->vers!=file2->vers)- o6 j, ]6 g1 o# d: _! Z
  408.         {
    6 I2 K# h# v, \+ j6 `4 n2 I
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
      t  \1 D  c6 y) i0 B
  410.           c++;
    ( O, |" ]0 U3 Q6 e: ]. O7 ]0 B/ M
  411.         }
    / W" U& b! u; `
  412.       }
    2 d! o( O. a2 t/ x1 b8 b$ D
  413.       else  l* |* e) ?/ e
  414.       {- Z& [1 C# u$ G
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: [2 k3 e: G& g, ^
  416.         c++;
    % z9 F, h' c& A  ^
  417.       }" G, z3 x$ u2 L3 y3 _+ ^
  418.     }
    " R: \4 b1 ?% W1 J2 _/ K
  419.   }
    4 m# Y: Z' n+ w2 W0 m: _# k. ~# [
  420.   unlink(".\\DownLoad\\update.txt");. H+ _; j0 z# \3 V! e6 v2 h
  421.   if(UpdateLocal.size()) return TRUE;
    7 ]+ {7 l7 N) M+ ~# n& _
  422.   else                   return FALSE;
    " g- h3 l/ P7 k- M( v* Y/ \
  423. }
    . M! L. K, N/ S8 q, \% P

  424. 6 l9 Y/ t+ P! Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    1 [% e3 z: L5 z1 y! i
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ! J! s2 \( n+ ^4 Q2 t6 X" b
  427. & C" J# y; z, f& H9 \1 n$ }5 {# z
  428. $ F  D5 q* o0 y$ ]3 p2 z- y

  429. 9 G% x( g" Y$ r8 |
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    2 u" {# L9 R% @8 T# o1 _3 E3 s( ?
  431. {: r0 C. F8 l% B- ~
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    : U8 c3 D1 G2 ]2 S. g8 j4 s* w
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 ]* ~  [5 {, h9 h2 F' Q
  434.   {& f, R, a+ G, U! i; X$ ~0 z3 J4 D
  435.     char szLanguage[50];, q! y( \$ o, W  h" Z' X
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) s. L" @- o! D6 r% j
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) L* C" x- G9 _$ h( Z
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ T; I4 w% i+ u% f$ R& T5 T
  439.     else                                   m_iLanguage=ENGLISH;
    ; n/ X& ^  g" F; j: |
  440.     char szRegister[100];
    , s/ \0 _$ J" w3 P7 P
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- s2 f9 k: e: A. G$ z& y  O
  442.     strRegsName=szRegister;
    $ I* y: Y, e; i3 J
  443.     char szPatchURL[100];
    4 S; u" [7 u2 ?" O6 }( b
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 I% v7 D8 q, R
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 r) Z. y6 n. ?$ u8 c4 `. F
  446.   }
    ( S' m% O) e7 L0 {+ P
  447.   else
    , @* G+ f" r& E1 O2 I; ]# Z
  448.   {9 a" a# [) U; s1 ~( ]: P& s3 g: r
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . _  E( y4 _  M: l' t8 u
  450.     strRegsName=DEFAULT_REG_URL;
    ) m' W! v: Q; R6 [2 |9 m7 s( X/ w
  451.   }
    8 f7 z9 `4 V  S4 t0 _6 z8 M  v
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    $ a8 f2 E0 [/ y, W" U
  453.   {, }1 q+ Y- Y8 R% l$ f
  454.     char szIP[50];2 w2 L# n6 Q: Y; B8 u( R
  455.     char szDIR[300];. _4 `0 x* T6 N# J: K$ H
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    # A- y  q2 ?* W# o4 R/ n3 `( _2 {
  457.     {+ {# w) o: [& L% m6 `6 B& G
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    " F9 g# C! s/ t3 o2 `
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 o& L% z; y/ D- u1 v
  460.       strHostName=szIP;
    ; e# v: w# ~7 N* |9 T1 G9 v) x
  461.       strHostPath.Format("/%s",szDIR);* [+ z2 {) y7 D6 w# V2 O( ~0 O
  462.     }3 b) a7 R, I0 F. s) Z) w, X! H, ]( ~# H
  463.     else7 C9 Y. s9 [1 @. u% y
  464.     {
    , c3 w/ z. D3 w0 L
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / ?- O$ X" B& \% |, @1 R( ^5 h' J
  466.       {: ]6 t, J9 g) o) k  N; I
  467.         char szLanguage[50];
      Y  s0 \+ x9 e, f
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " C+ }7 ^' \, s, u7 }
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " o4 ?6 ]+ ^4 w- k
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % E, Z4 J4 q! E
  471.         else                                   m_iLanguage=ENGLISH;( R6 T3 g& j! H! K
  472.         char szRegister[100];  T7 J  d9 f  ]* \4 ~4 D  w% f
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) J: y3 u% n; J  g
  474.         strRegsName=szRegister;& y8 d: N- J  o* |* H  r
  475.         char szPatchURL[100];
    % z% ?" k5 a) q% N0 D. j- y. n* M$ O2 W
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 g( l! a# H" B" H  S8 u
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + V7 E) A9 w/ R! L: ^. J
  478.       }/ P" d! [2 j/ }5 _$ f8 w
  479.       else9 i) J0 G5 [3 H# `
  480.       {
    " G; Q4 l( Y+ Z+ w7 n* p& J
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' Z  z( y* s+ [) y
  482.         strRegsName=DEFAULT_REG_URL;
    6 K1 A* O/ j: I3 U6 {% d" S" n9 k
  483.       }
    2 X" }8 A2 c7 H! `. |; S6 y
  484.     }& A9 @* k/ t; J; B$ q& J
  485.   }
    + N' Z, O5 _( U8 i9 u, |
  486.   return true;
    5 K' m1 {! _- r" y8 \) X- `
  487. }% ]( \# o8 C+ w' O! u
  488. 0 H8 f& ], u' r+ b8 l2 _" R5 n& w
  489. #include ".\ZLib\unzip.h"
    & Q8 a/ h0 \4 J: m
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    " k2 I5 n! E0 q! e# v
  491. /////////////////////////////////////////////////////////////////////////////
    4 ?+ N$ w0 S% p7 S! z/ W
  492. // CRevAppApp initialization# f! w  ^9 M/ e! K+ M8 Q4 B

  493. + k8 p% U9 N* c0 O) {
  494. BOOL CRevAppApp::InitInstance()
    - E6 ~- H  M9 h2 R9 Y
  495. {; I1 H, F; x4 t# @* P9 d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];: J, ^$ n  g' b6 [

  497. , i3 |! Q' K, K9 p8 Y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    8 H: O+ _+ j) [% V6 N% [7 X
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    5 d. S+ m. d/ K) W; w3 n
  500.   {
    * ~5 I  m* i3 C7 x
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    8 L0 p8 A! j2 E
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    0 g7 M  {0 Z* |+ K$ N) @' U0 _
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))  V% o+ K8 s9 \% V. }
  504.     {
    ( Y: w- N$ d6 v% V9 J9 L
  505.       strcpy(szPath,szPathTarget);
    # P+ y. Y0 v  j! X/ I
  506.       SetCurrentDirectory(szPath);2 ^7 O; k$ I4 y' p" h$ f1 b
  507.     }7 E: d8 V% V5 }: x# q! N( Y
  508.   }
    9 @- M% ?2 I4 x) Z& ?, o/ ?
  509. #ifdef _DEBUG
    5 j3 n4 O$ F" t7 a1 D) F" l
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), ]" T" o6 i- f/ i6 H( N
  511. #else! {0 P, v5 W( _8 m8 c' d4 w- d
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" a& u/ ?: A. R0 p
  513. #endif+ ~; r0 [1 a- Z6 p
  514.   {1 J$ s1 N. [( g; a" X% b4 M
  515.     char tempFileName[MAX_PATH];
    ) O4 F% Y! u8 |5 g# ~' j# [
  516.     strcpy(tempFileName,szPathSource);; y) J- i  \" F( W$ F
  517.     tempFileName[strlen(szPathSource)-12]=0;9 a' @5 y5 y" d+ z' I. F2 r
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    5 J; f2 y6 T! v/ m0 T
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);& v9 s6 U" L* _: H
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    1 P: @' U  {1 D
  521.     return TRUE;; ^) e; R( O$ v9 d
  522.   }" p$ P- d* A1 j6 F( i0 J3 H
  523.   // Nuke 0118: Delete run.exe4 ^8 v- b& o; b0 T# N! Z* g$ H9 P! A
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );" a4 k2 E6 q; }+ \
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    2 e9 M* s% ?- m9 J) z3 {1 I& Z
  526.   if(!ReadCfgFile("Config.ini"))+ q7 B! h8 S' ]7 S
  527.   {
    - u- N, Y* }0 C
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);- g4 k! B* Y8 a) l
  529.     return TRUE;
    , u& `, v! c+ G" z; U
  530.   }
    * ^/ n0 V/ L4 B
  531.   HANDLE mutex;4 G. e  X2 n* @& x4 l- e
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))# W5 @' j; ?% G! K# @4 @
  533.   {
    & D0 e: j8 E2 A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)/ T, K2 F) G) Z! e' |5 _
  535.     {
    $ c- l. J9 g! {5 f5 T
  536.       CloseHandle(mutex);& V5 b- l: |) c! v- n+ M* s  A
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);- E3 [- ~7 n- S& X/ `
  538.       return TRUE;& E3 A7 o4 l3 }) L' }6 v
  539.     }9 Q. O" {; }( R+ v  w3 `
  540.   }  
    & u7 E/ Q: B( W, ?
  541.   CloseHandle(mutex);
    ( Q4 H: p! t' N( O

  542. ( v9 Z/ a/ G9 o1 b3 f7 a
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);# R3 V9 a& D" \5 W+ W. Y! i8 `
  544. ( g' O/ I- j3 d
  545.         AfxEnableControlContainer();9 k% j2 E3 ?; T- r. J0 a  R+ a
  546. ( ?( w" _' t- J! P
  547.   bCanUpdate=FALSE;0 {3 O+ H* l. h2 d8 U% V
  548.   dwStartUpSteps=1;
    1 h) J$ ?' ^: K5 U. x3 {0 k/ l* e% J
  549.   dwProgramState=AP_NOTHING;
    ) ], o$ ]3 t; T4 |% w

  550. - l+ O  L( E: g4 m7 h% Y: }2 ]
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);6 ]  p$ @5 y% p% E

  552. 6 V) s9 ~3 u& f5 r, r% L& ]
  553.         // Standard initialization% Z! K) a" C" }) d$ i8 p8 s- R
  554.         // If you are not using these features and wish to reduce the size2 r0 u3 c$ x3 c% J, W
  555.         //  of your final executable, you should remove from the following7 `2 E9 ^: d& v5 @& y1 Y' ~  e( m! O; Z
  556.         //  the specific initialization routines you do not need.  ?1 {. o9 h; h
  557. * `8 S3 ]! `6 s1 i3 q
  558. #ifdef _AFXDLL7 {4 v. g6 p, A- p7 P9 B0 l
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ; f0 I; y2 q* V4 D9 ?( y
  560. #else
    4 ?% w8 K4 @; e% j
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 K* D4 V: ?  e- C3 Z2 E
  562. #endif
    & M# v& |6 F1 Y: @& [

  563. ( U) T' ~2 z% N/ H6 L* _* J7 F5 C
  564.   dlg=new CRevAppDlg;( P# R; S- d4 q4 E/ y
  565.   dlg->Create(IDD_REVAPP_DIALOG);9 F& Z% F+ x) w' w) x
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    8 v- Y1 W# C6 e& `) F7 A6 U# ~8 Z
  567.   m_pMainWnd=dlg;
    * y8 q% v/ j$ n
  568. 0 M0 d  K8 \2 v4 n
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ' m- J& M  m0 j! m; }
  570. 1 y% E* L) }# f  @2 K
  571. //  GdiplusStartupInput gdiplusStartupInput;1 |* G- N5 {  X' Z! s' t
  572. //  ULONG_PTR gdiplusToken;
    ' U* Q6 D# b% ^: G- N5 N" C
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    2 B. L" M4 y& K* T. [0 r, C
  574. ) l/ W. f2 P: d* z% ^
  575. //        CRevAppDlg dlg;4 E6 i% p" O1 c) i: o7 B
  576. //        int nResponse = dlg.DoModal();& z- P/ R# t+ y9 H8 Y) ], E
  577. //        if (nResponse == IDOK)( e: f* X+ `2 N: t
  578. //        {
    ( p. `/ {9 O2 x% E# I
  579. //                // TODO: Place code here to handle when the dialog is; E$ c+ ~4 e. K6 Y9 l
  580. //                //  dismissed with OK
    + o% {" [8 y% E
  581. //        }% b+ X! E& G2 [9 q  F! c' p- {
  582. //        else if (nResponse == IDCANCEL)7 n' v! X$ b1 H+ m$ a
  583. //        {! t1 V' S% E7 O8 ~2 P6 E2 V
  584. //                // TODO: Place code here to handle when the dialog is
    9 s$ d# `* @) g0 d+ s/ K
  585. //                //  dismissed with Cancel/ W. g5 {% C0 h8 f
  586. //        }) j  `  N3 f! `
  587. ( q6 K* ^. U$ i, e3 g
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . G) Q; G2 v( Z1 t( j, D
  589.         //  application, rather than start the application's message pump.
    - F5 j, b( u' n2 I: N
  590.         return TRUE;2 f* ?' u7 [) Z7 r6 Z
  591. }( H) v/ L" v8 S* i

  592. - O0 A3 J; {8 L
  593. char *CRevAppApp::strtok3(char *pSource,char *token)+ Q5 V3 r/ c' Y. T) J6 X6 c8 Q
  594. {9 ~# a. }7 {2 \( @
  595.   int i;) N+ N* h) ]0 D& H9 }
  596.   char *szRet;
      t& u' y( d) r  Y

  597. 5 \' {& N1 E3 t( W
  598.   if(pSource) { itoken=0; sztoken=pSource; }# J- s+ T4 W- H
  599.   if(sztoken)1 w& G5 Q& B/ Y$ k, r* P% o- Z( w
  600.   {+ U) ~% X( C: p: A
  601.     szRet=&sztoken[itoken];1 v7 O5 h9 R, `7 Y* ^
  602.     while(sztoken[itoken])
    % t% _6 [4 k( b% \2 y% M" U
  603.     {: b) F& t# w7 X  v: F" m
  604.       for(i=0;i<(int)strlen(token);i++)
    / |8 B" ~3 v! \& Y
  605.       {
    ( x7 z  A3 p1 i+ ~% H% L
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])* b2 X: M* n2 M) h+ X" ~
  607.         {2 _. b& I2 M) n: m9 @$ b, ]5 }) U
  608.           sztoken[itoken++]=0;/ Y. d- x, ]* q5 `5 w$ `. v4 ~% T
  609.           sztoken[itoken++]=0;
    ! m: ^, t* @4 ^' d) s! j2 Y
  610.           return szRet;% o4 T+ T' ^6 Q8 ~2 Z/ O$ T
  611.         }
    + V. U5 z+ m0 z  l
  612.       }
    . x. z0 m+ n( n6 \; q
  613.       itoken++;
    / w; p: g$ ?: B# n% [, b- |0 g8 Z
  614.     }
    . k/ d6 H. s. A6 v0 O! _
  615.   }9 Q8 ~# x0 g+ o+ H5 {% h
  616.   return NULL;7 e$ |* D* S% g+ z% O( {' M" e
  617. }, N' {& A1 W! L  ]
  618. 7 l) L/ L$ b' t/ e* V; H
  619. void ProcessProc(long Total,long Current)" e! ~0 l9 N% x0 d0 q/ F
  620. {9 G; ?5 |( Z8 d3 g3 l! |" Q
  621.         MSG msg;
    5 R, W, r& u' W) V- I' T/ A
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);& c5 K& z) I# X7 e
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 h1 h9 X6 q) c  c2 j  Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 D1 d9 ^' h# Y" C0 u; [; [
  625.         {
    : a# Y) `$ \" E' R6 X1 Q
  626.                 if(!GetMessage(&msg,NULL,0,0))4 k% Q, U. K, Z+ @' w
  627.                 {
    6 m1 E0 t: u4 C: n+ \% F
  628.                         return;9 z9 O' V1 D7 W* [
  629.                 }
    & C; a) T1 a" D7 ^; o
  630.                 TranslateMessage(&msg);
    6 R* D/ F# d/ `0 w% U! V# B6 J! H
  631.                 DispatchMessage(&msg);
    7 X7 ~/ @! E3 d& J
  632.         }       
    ( S6 `; u) E  I3 F3 l7 L( x+ |' d3 |
  633. }: L0 Q2 c* }1 h3 l; w

  634. : F1 M( m" O/ t! t8 G
  635. BOOL bFirstChar=TRUE;
    8 s" [  R. i* t# I* P/ @! D
  636. 9 X: V# k$ y8 \0 F; Q- o3 r
  637. BOOL CRevAppApp::OnIdle(LONG lCount)- L& F9 J. E7 a$ [
  638. {
    " X% J8 r) m% t6 A. k& A' u# s
  639.         // TODO: Add your specialized code here and/or call the base class
    # J0 d0 J# X! `' l6 N
  640.   switch(dwProgramState)' V0 k& e9 x; W5 }/ q
  641.   {! X. `4 R' K3 }
  642.   case AP_NOTHING:: c5 t( ]" Z7 E- w$ D
  643.     switch(dwStartUpSteps)3 f& B" g2 Q( o: R5 j+ u
  644.     {
    , e/ r: k& y3 {0 ^' \$ E9 h! S
  645.     case 1:- _( ]' r' O' E7 V, w7 Q5 C
  646.       {
    - i% [# s9 m" v# m1 G8 e4 i
  647.         int i;
    ) g! I) i- D2 Z  S
  648.         CDC *pCDC=dlg->GetDC();
    0 t1 H9 E& Q4 t+ T3 C7 _
  649.         HDC hdcwnd=pCDC->m_hDC;- s% k; [  D& X( e) C& E
  650. //        Graphics graphics(hdcwnd);3 k' _& v9 r; B& f: X. Y: B" \# m
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");) R& L: l  z4 |8 y  o
  652. //        INT iWidth=bitmap.GetWidth();
    ' g4 b9 R+ V) s  b4 k
  653. //        INT iHeight=bitmap.GetHeight();
    " X& `2 P2 b6 ^4 C! ~
  654. //        Color color,colorTemp;  N; H7 Q" v' @1 G
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & r4 n7 D% g& m* q7 g4 J
  656. //        {) C, m, X& }; x) X1 P, A9 ]
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( O; j6 v' T6 Z$ _7 v
  658. //          {
    2 J7 u" t( G0 O& b- \
  659. //            bitmap.GetPixel(iColumn,iRow,&color);" Y% y5 O' ~6 e& t3 |
  660. //            colorTemp.SetValue(color.MakeARGB(+ k( h9 v* K9 n! ~( c  }+ {  s
  661. //              (BYTE)(255*iColumn/iWidth),
    ) t: k1 J" \# U$ s, M  C
  662. //              color.GetRed(),& r3 V7 @1 q2 [
  663. //              color.GetGreen(),
    4 N' ]1 l( i8 e. l+ @$ S
  664. //              color.GetBlue()));$ X4 k  M: p/ b' v/ |
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' h; ?7 v$ C" B8 B+ @' N  f7 \
  666. //          }
    9 z& j* X1 {& H) |
  667. //        }! `% }9 z. ]. F, N: f
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    3 g+ I/ c* B; K' m* o
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 |+ B, T* c& @) S' c4 S' v, Y' d/ Y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");: `, g' \3 D/ A$ l* M7 ^4 d' }
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& A8 D% O7 O5 M
  672.         for(i=0;i<240;i+=8)
    3 l" b- }+ F$ z* J! m* o! \" g" J
  673.         {6 F3 r7 I& m- u" h# |4 t  u1 Z
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" P, y, O5 F; x% M
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & j0 t# I) r  ]% X. H0 S9 P
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' `; L+ L! r+ N2 |
  677.           Sleep(33);
    1 r0 U: Q0 d5 f1 C
  678.         }1 T8 c. f9 B9 @- N+ N
  679.         Sleep(1000);
    : a' Q" f9 R! [. Z$ [: A& f# E
  680.         for(i=240;i>0;i-=8)8 q4 E: ^8 ]) E! ?& [
  681.         {
    0 v  R8 q' A# ^  x
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : R" m) w* m: Y+ z
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , b  {" e* F* C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 M* e) r2 x8 B% w  ^
  685.           Sleep(33);+ x2 e' x# G6 a3 r, w$ ?* c
  686.         }4 B' A3 G: S  F$ q% C# O2 ]
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    - f' _9 n, L5 _( x6 g6 _) c
  688.         dlg->ReleaseDC(pCDC);
    5 s1 ~8 F( e2 |( z: d) r% {! H
  689.         DeleteDC(hdctar);
    4 S! W& U- r4 S7 z
  690.         DeleteDC(hdcsrc);4 L3 L$ h7 F, Y3 m( e. _; h9 ~
  691.         DeleteDC(hdcorg);. m! W+ d+ K7 y
  692.       }" Q$ f0 M# j6 y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);7 l4 w: m# I# l( o! e
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    , |" R; }" g3 m0 u  t2 Q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");& z9 Q' w0 I4 q  k6 A
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");& X4 Q0 p* t5 t6 m6 z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' ^- @9 Z9 o, R3 o/ b
  698.       if(!Dn.Connected())+ S- G" c6 i& {# {
  699.       {
    1 L% O. t* F7 e: i- Z5 |
  700.         dwTotalFiles=1;. d9 |% T% c4 `" J/ x' x
  701.         dwDownLoaded=0;
      f. l& [/ L4 e
  702.         bSilentStep=TRUE;: W# G1 v6 I1 d' k5 h% z
  703.         bCompressed=FALSE;2 H9 f7 s5 c9 n" @+ \9 j& R
  704.         strExtLocal.Empty();" v" P0 U1 r# g# o# n6 M
  705.         strFullName="readme.txt";
    ! |! }. b/ u8 n; Z/ _0 C
  706.         dwProgramState=AP_CONNECT;2 t  D, X9 i4 g, {
  707.       }. u1 m& w* b0 J6 _  s
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    . H8 f# M9 H  n4 w
  709.       dwStartUpSteps=2;5 o% I: N$ T4 O/ A3 T
  710.       break;6 g- ~$ B  k6 a. ?! ?* ]
  711.     case 2:
    , K3 \% e0 Q. W. e: C2 R% Y- y
  712.       {
    + h# p* {3 {) M# ?' q0 d7 \
  713.         int iEOF;' c( T* W& U2 ?. |, L) z# u
  714.         FILE *fp;. X! O6 Z- G) @
  715.         char szString[512];
    4 W7 J; ?. E0 m& d1 y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");1 W2 b; E# P9 J/ Z7 T) i- X$ |
  717.         if(fp)0 x9 l: N: G, X7 \8 a$ Q1 k
  718.         {; j, C8 Z, t$ N6 d# ?! N
  719.           do
    4 {9 j0 [* c# Q0 l( ?4 m. o! o' |' }, v
  720.           {
    * g7 l0 W, d. }- M1 b1 Y
  721.             iEOF=fscanf(fp,"%s",szString);
    : ^; ]7 E3 f  g
  722.             if(strlen(szString))
    * ^0 F% d: E0 I" s
  723.             {3 g7 k" z- F" ]4 l5 H
  724.               if(bFirstChar)
    ) [! v" l0 n) E4 \6 Q% c2 [: d
  725.               {: X( Z- d, I( g! X* {+ C) b
  726.                 bFirstChar=FALSE;
    ( p6 t4 A3 {" m' C# c
  727.                 bConnectIsBig5=FALSE;
    ; M3 u& G6 R8 O5 m
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    2 i6 s( I1 T" G6 v/ t0 }# v& }6 B
  729.               }, Y3 m" Q0 E: X$ g* O% n3 l$ g
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));5 z0 y1 K+ U4 W1 K* a/ G( F
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - J: ^2 t! l8 n  q
  732.               dlg->m_ListText.AddString(szString);
    * z, h! U' b; {9 _; p* v
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + b* _- O7 _% a0 t/ M% C' x) _
  734.               *szString=0;
    1 O4 u' t% ~; i' ~' ]2 `  z' ^# V0 m
  735.             }3 ?6 f/ \9 E7 i. O
  736.           } while(iEOF!=EOF);- p! y) |2 F! H" y
  737.           fclose(fp);  G1 G2 X6 L' U/ W' F
  738.           unlink(".\\DownLoad\\readme.txt");& c- i; G# f" D; y- K* s2 n9 K
  739.           dwStartUpSteps=3;
    7 p% S: J; d7 e! p
  740.         }
    ' @7 I) n  O( `' b8 D. r
  741.       }# Y+ Q- a) o* D9 r; ]. G
  742.       break;" y0 u" t7 r/ ~  B$ B6 C. D
  743.     case 3:2 m; d4 W8 b/ O, v
  744.       if(!Dn.Connected())
    $ t) B9 [4 k& A6 E3 D
  745.       {1 ~5 ]0 c% a4 g; {. J
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    # [2 G* j' N7 o* j( ?& f) {) ?, n
  747.         dwTotalFiles=1;
    ; O% v- o: _; W; g& u. b  _
  748.         dwDownLoaded=0;
    $ ^1 o0 n3 U$ }6 R% ], l# T. z
  749.         bSilentStep=TRUE;
    * Q9 e% W: ^/ ^5 V' @3 @
  750.         bCompressed=FALSE;
    / K. D2 R2 o9 k5 n  D. f
  751.         strExtLocal.Empty();( ^; G: e  o) z) Y2 j/ R6 I# A7 [
  752.         strFullName="checkversion.txt";
    4 c. v, c+ l9 M. m1 ?8 @( Z$ ]0 b
  753.         dwProgramState=AP_CONNECT;
    1 p0 m; k7 s+ d: J. H
  754.       }
    + @6 e; m* [: b0 V% O  J% V5 U
  755.       dwStartUpSteps=4;! K0 {; |. B+ m) S* ]2 c; H$ z
  756.       break;4 ^8 q6 S* }; c0 x% K( |
  757.     case 4:  l: f8 ]# K" J: i+ _. K' m
  758.       {
    . O  m& G- c/ g* ~6 }* A
  759.         FILE *fp;& B/ X( T& \$ ?9 O( _; C  h# n: K
  760.         char szString1[128];
    ( A$ G8 {- W# B6 K1 G
  761.         char szString2[128];
    ) B( X, `# d0 z' k& X" I* ?
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");* J4 B  P# B: K, y
  763.         if(fp); _! k8 S  [0 \. O
  764.         {
    / L. `; X# P. p
  765.           fscanf(fp,"%s",szString1);/ W! X- _/ l+ `* f3 ]6 d
  766.           fclose(fp);( G3 p* Z4 H  S
  767.           fCheckVersion=atof(szString1);! D, F4 f5 y! U0 G+ n/ ~
  768.           fp=fopen(".\\checkversion.dat","r");1 Z( d- B/ v0 l6 G. J# x  w) H/ e
  769.           if(fp)' M5 M* _0 u! R. ?: y
  770.           {
    ! H- i' ^) ~9 q. p% L; I3 p/ ~8 W
  771.             fscanf(fp,"%s",szString2);
    ! l* P  [1 D, ?
  772.             fclose(fp);2 V7 ]; r7 Q0 t5 d# }) X! Y
  773.             if(atof(szString1)!=atof(szString2))
    ) r8 T" ?+ v9 C
  774.             {2 F4 O1 K9 F( M* k5 m$ t
  775.               if(!Dn.Connected())5 P: q. K+ [9 M: V
  776.               {
    4 x9 R9 N9 p; h; h- W* y0 J. b
  777.                 bFirstUpdate=TRUE;& {6 I4 L1 ?  v
  778.                 dwTotalFiles=1;
    " m9 ?" I9 D+ o! q3 Z% r5 h: H/ I
  779.                 dwDownLoaded=0;4 H/ j/ U7 ?" a
  780.                 bSilentStep=FALSE;* L/ \& @) C* {" y3 z- R
  781.                 bCompressed=TRUE;
    7 b  Y$ X1 _. I! G0 C" u  o/ p! ^
  782.                 strExtLocal=".\\DownLoad\";
    ( \4 X! }' H: q) n+ k3 h( u
  783.                 strFullName="update.txt";; m# ~% ]9 u( O+ z) C' ?
  784.                 dwProgramState=AP_CONNECT;
    % h* T' E: G- e7 H( p: _
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ' @& l* A2 O: Z9 J, x6 z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & @/ P/ N% L4 H8 ]* S) g
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");0 B  `' ]; H8 ~) {' ^5 L. {
  788. $ E# p* B: F# P9 C* c
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 x0 [* S9 J* ?4 B
  790.                 unlink(".\\DownLoad\\checkversion.txt");# u4 l, r7 _' A. g8 G
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)3 z' G8 V8 g2 P3 B/ i$ Y
  792.                 {4 w0 }: E; F* ~1 W6 Q( d: h1 v
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ; |* ?3 h; }: R' L
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");8 j, s) g( q& H1 i8 `
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ! R: C% m: H  c+ b
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 P/ L% D: \: y: n3 P
  797. ! P' L$ R6 _$ M
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' U0 D9 k7 P3 K: f4 u
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ g+ B+ V  k2 d6 {
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 C" h: R% ]' n* \8 t: u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % m) x& t# x/ q" Z0 ?3 E
  802.                 }
    5 j! J/ B, h# ^, k; c
  803.                 dwStartUpSteps=5;0 f6 k- J# N+ z3 d5 J
  804.               }
    ! G  ?2 F2 }1 V2 a9 @
  805.             }
    : o" m& Z+ J  p; N0 u8 |
  806.             else
    / O5 y# w- y* H# M$ o( ?6 |" d
  807.             {0 z- y# f2 {' [9 h% I
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ; T1 H: b5 c9 M$ Q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ p6 {9 g: i/ ?
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    0 c7 Y& ~4 L& r" \; P0 {' R
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    + {. w1 W2 E1 T. m

  812. , V. I% [# f+ O5 t
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " i  N/ X$ d7 r* n' r
  814.               dwStartUpSteps=99;0 k+ J6 o9 @8 m: V
  815.               bFinishUpdated=TRUE;7 B8 u2 [  {! H0 {/ k/ B# _
  816.               bCanUpdate=TRUE;
    * H' C& L9 Y( Y" k6 X+ F+ e) Z
  817.             }! `+ x3 b, U1 m$ W: p
  818.           }
    4 ~" E3 ?$ t" r
  819.           else
    9 y5 O- C+ j* X
  820.           {2 Q; p3 q, U' N6 q: Z$ X
  821.             if(!Dn.Connected())
      w/ Q# D% E5 l! c6 o3 U
  822.             {
    ' N$ x: n5 f, n9 ^0 y
  823.               bFirstUpdate=TRUE;
    ; |) g5 M$ r9 }: l% g9 }7 H
  824.               dwTotalFiles=1;8 E2 i. J! s2 M9 H
  825.               dwDownLoaded=0;
    ! x9 c( r% `+ x% S
  826.               bSilentStep=FALSE;% E- t6 j7 q0 Z/ Q" D4 }
  827.               bCompressed=TRUE;* C4 b" P& }6 z+ ?7 v
  828.               strExtLocal=".\\DownLoad\";
    + ]  |8 H; R$ W( z+ x. ~! ~( D
  829.               strFullName="update.txt";
    ; A3 W* y) ~! }$ X, l
  830.               dwProgramState=AP_CONNECT;- Z$ Q1 a) P& v  g- M! V0 ^
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 ^+ d3 x9 b/ R( {* @* y- E
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 S: v" d+ h8 r# ?5 G. a. b) V
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' B- H3 `* j. _( e
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) x% L$ H$ [: h$ _. S
  835.               unlink(".\\DownLoad\\checkversion.txt");9 s' T2 r+ a' d7 W( t
  836.               if(GetFileAttributes("Wsa.zip" )!=-1): X" S6 @8 N% Y( ^
  837.               {5 d- s: w0 ?! r( g
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");0 t( t/ E, G  S  F$ {/ b- o
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");6 Q# a- n7 |5 O+ t' Y2 I  s: U$ C3 j
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    9 {. ?6 N8 o: q; y* x2 H) |8 {) `' W
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 D! m6 r* ^6 W: Z  r: W
  842.                 5 H) c, Y1 ?2 o. Y1 m
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      B! S0 k; o  c9 ]& W& d3 l- D$ V
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; `0 @/ _9 r5 x; N
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");  Y! J  W) A; t' v% ^# z6 V8 D4 U
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 Q  F4 ?& x7 g8 T/ J+ \* u
  847.               }
    - I. q" x. X, [5 F7 ^% q0 _6 w4 l
  848.               dwStartUpSteps=5;
    8 o" j. H' t- b8 C% _7 P( J2 {6 v$ B
  849.             }' ]0 q% Q8 o; g& d; l
  850.           }! o9 X6 x! ~, D. ?$ |' z+ ]% b+ f: ]
  851.         }
    5 a! A& E- u" w0 R5 ]& _
  852.         else7 _, T3 o/ t3 Y% `0 M) e7 _
  853.         {7 G) V" D" c, J- h; s4 c; S6 z
  854.           dwStartUpSteps=3;2 M/ `2 @$ G% ]& y' s# b* F$ O( K
  855.         }
    - @$ w. Y. G' h& }
  856.       }/ I2 A8 ^! |7 B" Z
  857.       break;! H* D& a6 h& {/ s2 m, ?
  858.     case 5:9 H' B7 [+ A4 X1 s+ `7 j% u1 u
  859.       {7 Q% b7 |  K  S7 `/ U- C
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)$ b, x4 U9 V0 `) o4 D5 f- @) V/ Q
  861.         {. Q) `# O2 M& R& f
  862.           int opt_overwrite=1;
    3 F( J3 `2 Q6 N- e2 \, w0 L/ F- j
  863.           int opt_do_extract_withoutpath=0;& n( z& a' P3 C# Y
  864.           unzFile uf=NULL;; _3 K/ Y: [4 Y& g; _- J( N
  865. 5 R8 U5 x. _$ B3 c( _
  866.           uf=unzOpen("Wsa.zip");& x1 A/ P% a' v( k
  867.           if(uf)
    $ l3 w( r5 b+ @1 k, P
  868.           {
      K+ l% G3 ?! G: I: a
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ' W" M8 b9 ~* Z' U9 @7 ?6 V
  870.             unzClose(uf);  v; w5 G: t. }2 U- N8 {4 d
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    9 A$ S9 X/ K5 M( M, B$ u* J, r
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    4 R& m, v) o, u- B6 V6 N! X
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ( F" [! u! r7 C8 W4 d7 g& Z9 {
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. T2 w4 K, o! o  a
  875.           }
    7 B& E7 x4 K% R$ n, n
  876.           DeleteFile("Wsa.zip" );: a2 j1 k' h! r( N" ?% t
  877.         }7 Z% r8 B8 k8 y2 \' o
  878. # U( J; t7 E( s7 @, a
  879.         if(CheckLocalVersion()): B- m, c3 e3 T+ a, m
  880.         {, l: {% I7 P" r$ k: E! s' i
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    8 J+ i% D# j' j0 o( c
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    8 G' O8 x! t; k$ k
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");0 m6 Y7 }7 V/ [4 o
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; y/ S& @7 M% w9 x5 _. z6 t. O
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);& A" z4 {, B* `6 @/ z1 r; h9 E
  886.           dwStartUpSteps=99;3 Q% e- h/ D/ u# H
  887.         }. |( a( }: ?# r9 [! L
  888.         else
    - k) x& j4 H  T8 i2 i# y) G/ ?
  889.         {
    0 Q1 B* ~. g+ g; c, a
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  w" M$ q( V' j7 H
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, E% l& C8 A: ^7 l) A: q
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 q5 v5 b+ {1 _6 o8 u8 K* f. _( A

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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