CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
; y- ~% m% k' }
  1. / RevApp.cpp : Defines the class behaviors for the application.+ f% G6 o' _! f+ z" m, ]7 j  c
  2. //
    ) t5 c+ E3 b+ s; o3 T
  3. 4 |6 M0 {3 a8 {
  4. #include "stdafx.h"
      D; z: K9 e! j5 y. @, Q" [, r) L

  5. 9 r; j8 X& U7 X5 ]! ^
  6. //#define UNICODE. Z: M2 Q/ b* Y' `2 h( `2 _0 y
  7. //#include <gdiplus.h>: F% e& B7 Y4 Q6 o
  8. //using namespace Gdiplus;7 s" C0 Y* S7 h$ u
  9. 8 q0 n! q. C1 {* u3 N9 }" s
  10. #include "RevApp.h"6 U% N5 K7 e" \6 ^1 G
  11. #include "RevAppDlg.h"# N1 L0 {  k" z& x* [+ Y

  12. ; a2 n! X) e) |+ T3 c8 B
  13. #pragma warning(disable:4786)1 P9 k: S% S& I. }2 V. c
  14. #include <map>
    ! z+ F. W8 k8 A& U( |5 k  r
  15. #include <list>& u5 w8 |. e* ?6 [3 P, t2 C
  16. #include <direct.h>/ ^* s! @! g5 Y/ x5 g6 m0 f2 _& Y& o
  17. ; i4 v) b  X* B. o5 `8 k) o
  18. #ifdef _DEBUG+ O* a3 ]. _: F
  19. #define new DEBUG_NEW5 K$ `! o. u) R% o3 ~5 c
  20. #undef THIS_FILE$ D2 g; n7 J9 U( M
  21. static char THIS_FILE[] = __FILE__;
    . j4 l5 _% Y  a( Z
  22. #endif  q0 |; \; }* y" J3 t* a+ \# f
  23. #include "SkinResDef.h"5 N, ?% z7 _& C1 {% z( M; l
  24. #include "ChangeBG.h"
    3 P  z8 s- y# v. T# `
  25. #include "AFXINET.H"$ I1 t2 U- }- C7 o( ~# e

  26. 7 Q) K8 f- k8 b. |( L# j" L
  27. #define TRADITIONAL_CHINESE 06 F7 [- ?/ g* f# T+ T
  28. #define SIMPLIFY_CHINESE 1/ k9 v' a" ]3 Q/ }, I3 I
  29. #define ENGLISH 2, ^* w; H; ^% v3 ~6 p" H% U! V
  30. int m_iLanguage = ENGLISH;
      Z- q+ T# K: ~$ A! b! G
  31. /////////////////////////////////////////////////////////////////////////////" `+ r6 m: d, D7 u/ F; G# v- J, `
  32. // CRevAppApp* v% W: T1 E" \6 e$ ~: E5 I  w

  33. . L" I/ `9 A* z; h% K& V& a5 v
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 i1 P5 t1 ^* H7 ^: G2 s
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    . A8 v1 R6 ~" d8 V. |) w" x$ F) R9 \
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    0 S+ a5 M" \  ?# o: c/ Z
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!" i# X7 p* M) Z7 Q6 b( B/ m$ y
  38.         //}}AFX_MSG
    2 ]1 U( x* u6 L& ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)1 }) L6 x1 c& p8 c2 b8 _
  40. END_MESSAGE_MAP()
    & a+ }* b3 |( N$ B
  41. 4 E' c* c' a. X& i5 W5 ^2 l0 z
  42. /////////////////////////////////////////////////////////////////////////////
    ) A( B( I! [# Q* G
  43. // CRevAppApp construction
    + f. W0 c( Y4 x" D2 T) |
  44. ) i! \" n3 Z$ r0 y, I* }) H% M
  45. CRevAppApp::CRevAppApp()
    ! ~: v( M6 O0 s$ @7 M
  46. {
    & _2 Q7 \0 K# D6 {9 T
  47.         // TODO: add construction code here,; H! X2 N5 S2 t" n1 G
  48.         // Place all significant initialization in InitInstance
    * N4 z; q$ a; |( ?. a2 _
  49.   bDisplayIsBig5=FALSE;$ Q( s+ u' ?3 p' r6 m
  50.   bRestartUpdater=FALSE;9 r4 t/ _2 U: v& h+ [
  51.   bFinishUpdated=FALSE;
    9 T- c$ M$ ]8 ]1 J
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ) `) w5 {. _3 r* \
  53.   InitChangeDataBig52GBKS();
    0 m! j% t- p$ ?# e3 [
  54.   InitChangeDataGBKS2Big5();7 @& r0 }" \: T* @
  55.         //
    6 T' N# z) W% P. }2 I! l: ^
  56.         bClickRunExe = FALSE;
    4 A- O, x$ E0 {0 Z, w& e5 R
  57.         //1 D4 N2 y: a5 z* h3 V  I. V
  58. }# n4 _0 C# ~1 e8 q7 B
  59. , `/ T7 Z, p2 v+ H% w  o. M
  60. CRevAppApp::~CRevAppApp()$ d( E; }! \6 i7 d* m8 }/ N
  61. {
    # Q5 e9 o4 X& V1 ^# `# H: D9 a
  62.         // TODO: add construction code here,
    " ], h* m: t2 M8 W1 R5 Y
  63.         // Place all significant initialization in InitInstance
    6 C6 Q2 n3 h% \' H. P6 |
  64.   EndChangeData();
    ! Q6 K+ i4 g* [1 I" ^) U5 I
  65. }
    $ b, t/ S. i- ~2 m, @

  66. ' ^9 i" M1 V8 X3 r; G7 V
  67. /////////////////////////////////////////////////////////////////////////////5 M9 @; T3 A6 E
  68. // The one and only CRevAppApp object
    ; [/ U0 ^8 K( g

  69. * l& V& S8 j& X3 ]- g9 u7 i4 r' L
  70. CRevAppApp theApp;
    2 Y- {) a* g- S4 V  E6 A$ c8 E& P

  71. . \/ o/ w& \3 l% h
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 \; ~/ X( f, f5 e# W% M' H5 J# f
  73. {6 `6 F2 j: a" k: f; C
  74.   int iEOF=0;
    6 b4 h2 P6 C, Z  w7 H
  75.   char szTempName[MAX_PATH];( t  i; J9 l! I0 A
  76.   *szFileName=0;' ?; D: n" W( {* J; ?* n, Y9 c
  77.   iEOF=fscanf(fp,"%s",szTempName);, Y; }; L5 k3 l, ]* Y! C9 R
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')( W4 x1 `2 p3 n* C+ ?
  79.   {
    & }# K5 @, |) [( i
  80.     strcpy(szFileName,&szTempName[1]);! E  n1 {2 P2 y; o; {+ I3 @
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)8 f: ~  c" r. Q' U' j, C! H  p
  82.     {0 P1 h8 G6 B0 r1 C% j4 l& ~, T
  83.       iEOF=fscanf(fp,"%s",szTempName);! C; I5 j  o- H7 W
  84.       strcat(szFileName," ");
    * T4 u! A5 ~. S- d, X5 z
  85.       strcat(szFileName,szTempName);
    * o6 f) M( S: M& d2 A4 M
  86.     }
    9 b# g$ ]; `% S
  87.     if(strlen(szFileName)>=1)
    % _8 Z9 }/ P/ j. E% e
  88.     {: d: L7 ~) ?+ A; s% ~/ N; G" ^
  89.       szFileName[strlen(szFileName)-1]=0;
    ' B: I* G/ u3 `" O) M- C
  90.     }: H# T; J  }5 E1 b" c
  91.   }
    & y: a- D: @4 n+ g
  92.   return szFileName;* f, @9 \9 F, W/ \, o4 J! {. [% g
  93. }
    ; j6 L2 @2 M& H3 A! i, Z* C
  94. + \7 n2 ~. S5 V2 V2 o. c
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile); ?4 T/ T# ]8 F  q' \9 c
  96. {
    $ X# i/ F3 n& X7 q
  97.   FILE *fp;
    ! _1 V& T) w% R( ~' H2 D5 k
  98.   char *key=NULL;
    2 d# O: n$ R& _) Q9 ~
  99.   char version[MAX_PATH];9 d% m7 p' z  s. k
  100.   LPUPDATEFILE file,olds;
    % b. C  D( w+ P* k: {+ M- Z$ ?
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & D5 J5 Z! j4 K( g7 }/ O
  102. , F! ?2 [3 X) I; o
  103.   UpdateList.clear();
    ' u4 k8 a$ A! ]2 J& [
  104.   UpdateFile.clear();
    . @' A: T' y- |3 T* d
  105.   if(GetFileAttributes(filename)==-1) return false;
    8 Y$ c* J8 z" T, v4 q6 Z
  106.   if(!(fp=fopen(filename,"r"))) return false;* L7 C' N) B' B0 Q! k
  107.   fscanf(fp,"%s",version);
    % `$ @  a' W* L5 O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    7 |' C9 O4 `- W8 u% t; r
  109.   while(fscanf(fp,"%s",version)!=EOF)& R+ I' x; M+ O" p; H: }4 [
  110.   {8 j" D4 f( m. j+ J8 w' ?9 h
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ W" w6 ^2 _1 I: F4 D+ V
  112.     fscanf(fp,"%s",file->path);  Y5 U9 v4 {! y
  113.     ReadFileNames(fp,file->file);9 R" Y# \& U& I+ X+ P6 l. \) K
  114.     strcpy(file->full,".");
      Z1 p  {6 [- v5 |7 u/ D; l  {$ A
  115.     strcat(file->full,file->path);% P' ~+ u+ ?3 N9 N( q
  116.     strcat(file->full,file->file);' d; v/ Q7 [* K4 d9 f; G
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- r2 S. Q) y; m' y7 ~5 J4 \3 A# M
  118.     {
    8 V$ z* I! f( x, f
  119.       file->vers=(float)atof(version);
    5 G/ G7 G1 ?0 q/ _' W$ Y
  120.       UpdateList.push_back(file->full);( _2 x5 O, U+ L5 `- ]2 b9 y% k3 V" C8 r
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));2 l$ b( `1 L4 e2 S& P6 x5 b* G
  122.     }
    9 B- w# r- G* I$ f& F. a5 J
  123.     else( M( i7 x/ c' |$ R
  124.     {5 g; s' ]* c, l8 H! Y' e. t4 \5 C
  125.       olds=(*p).second;
    2 B9 g9 k6 J  M. g! z
  126.       if(olds->vers<(float)atof(version))" ^% y2 o  ^8 o, F7 l* k4 E
  127.       {
    3 Z( p$ \9 g! z# r9 y- o+ I
  128.         olds->vers=(float)atof(version);- M0 u9 ]2 l& v: |( [; P
  129.       }( C' t; h' e3 [* u! i0 @5 p! ?0 M
  130.       free(file);5 ~- B5 _. `6 e+ D' H, i* q3 H# r
  131.     }
    6 _/ d( a( p, }, z; Y
  132.   }; o  \+ X2 T! H- |! {3 x
  133.   fclose(fp);6 e' g& N" j1 W6 S" G1 Z. Y
  134.   return true;
      Y. T8 _2 l7 ]! ]
  135. }! Q/ L2 ?7 Q4 G$ M' J& t2 t
  136. ! v& u" j$ I3 P. n/ ^
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)% E8 O9 Q1 j# D9 W5 l& j8 k5 a1 R( x
  138. {
    7 F8 G+ n6 x/ Z) o
  139.   TCHAR  szFull[MAX_PATH];
    " r1 x2 k( C0 P& y; |
  140.   TCHAR *token,*inter;
    6 k/ N- b8 R! ^
  141.   *szPath=0;
    6 f2 i! ^# P9 O# a4 \8 }- _
  142.   strcpy(szFull,szFullPath);& ~! @1 G" r' Y  j7 U0 T
  143.   token=strtok(szFull,"\\/");
    ! n0 Q  C$ `  [: ^
  144.   inter=token;# C/ c! ?: N; s0 u3 K1 Q2 g% C
  145.   while(token=strtok(NULL,"\\/"))$ ~1 z6 T' \( X0 s9 e4 V
  146.   {3 f* @( H0 W" |* R4 E
  147.     strcat(szPath,inter);/ a! x; B3 r0 k! E
  148.     strcat(szPath,"\");8 p. {3 y$ g' u8 Y& n9 q, L6 c
  149.     inter=token;8 C3 m" Y) S7 N" U6 D1 n
  150.   }
    ; I; |& i8 j& [) M) C
  151.   return strlen(szPath);
    ) f  A$ S# E" e- _# @0 x
  152. }/ `3 J8 a+ V# E$ j& i' C
  153. 0 O' Z: {6 E" N# N
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)  k* p+ Y' h$ S7 H5 p$ s1 |
  155. {
    9 }5 c) U0 [/ T3 ?
  156.   DWORD attrib=GetFileAttributes(Target);
    0 m, r& [/ ?) R
  157.   if(attrib!=-1)
    ! o3 l  A! y/ Z7 y  D- m# @* J
  158.   {' B% j) H. x( |! p* F: l; r- r
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))' N* W6 \9 U$ J8 }
  160.     {# M  _( ?9 T& x! a: Q
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);2 y7 [: z+ q  g+ q/ k, y: a
  162.       SetFileAttributes(Target,attrib);
    + [+ S: d$ _# l" |+ h) l
  163.     }
    ! N4 x. t" D$ b5 c9 `7 G8 V
  164.   }7 z% v- @) d, t
  165.   CopyFile(Source,Target,Erase);! ?3 g5 i# Y9 S1 Q6 ~: V. S
  166. }6 z4 y: p: \& W3 P  C
  167. , s$ U9 W8 e4 G$ s
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)% V6 K8 a& |2 Y
  169. {1 k& M- N) U. S2 t3 v* ]$ y& Y
  170.      FILE *fp;8 D$ D: l7 j2 I1 E7 U* }; b
  171.      char  szBuffer[8192];* a$ \) [% X) H) g
  172.   va_list  argptr;
    1 }0 ]2 M9 \5 J5 a% x! K: A
  173. . |$ I: H5 O- u% e+ m
  174.         va_start(argptr,message);4 W# w* k& h* {& F
  175.         vsprintf(szBuffer,message,argptr);
    - n' k! y  m6 W, a7 w/ c! N
  176.         va_end(argptr);
      {5 J. k8 q0 a
  177.   fp=fopen(FileName,"a");
      v/ C$ {! T1 t, U$ G
  178.   if(fp)
    8 ]) ^4 l# [0 Q) J* q- S; o
  179.   {/ z) f  O+ I. q! B
  180.     fprintf(fp,szBuffer);/ I/ L# t1 Z4 p* Z8 H8 u
  181.     fclose(fp);6 `0 D. j% E5 \4 O  I& u; d+ t! y
  182.           _flushall();! p3 I" R4 d. C8 O9 C0 Z, R
  183.   }
    , x4 ^. ~" h7 [2 z
  184. }  u) B* T" f1 p3 [2 [! [
  185. 1 b$ z; [2 k) o  j7 J! X* i
  186. BOOL CRevAppApp::Fclearf(char *FileName)4 E: G6 k2 ]+ Z4 g4 R
  187. {
    ! d0 j" [# ]$ X1 u% ?! j
  188.      FILE *fp;2 |) w% W. B% u+ F3 E
  189.     DWORD  attrib;. R5 g) i5 l0 c7 Q( R3 a
  190.   attrib=GetFileAttributes(FileName);
    5 E/ M6 i8 A4 O; f7 {( _
  191.   if(attrib!=-1)2 m- c) m# V6 y* {" ~
  192.   {
    : p7 P# a* z6 x
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 P# B  \" D4 Q) f/ z; @6 ^1 P
  194.     if(!SetFileAttributes(FileName,attrib))+ i' H# j; B3 }/ m+ O. v7 t5 C
  195.     {# X8 C; \0 c- B! G5 ]: ~* Z. N8 n4 I
  196.       return FALSE;+ D3 D* L7 y/ v. }: {
  197.     }9 w* c! G; b- V# _6 i/ X4 a$ R
  198.   }
    . |! E  S  K  E! E3 C
  199.   fp=fopen(FileName,"wb");5 _: c. y2 s1 d# s# o' U
  200.   if(fp)5 C' O. z8 l. }8 U4 m  U
  201.   {
    $ o9 u9 L+ O+ x  n  j/ F: A
  202.     fclose(fp);: O5 `1 S$ w  _$ m7 U5 i0 s
  203.   }3 J" M8 a9 z9 d" ^# I9 u  M' Y: h
  204.   return TRUE;
    - J% ]( e! T' ]% z3 y/ }
  205. }
    2 m& l/ j, y. p' O1 d
  206. : `0 F5 m. R# O" G9 ^
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    * z- L/ Z+ ~, p. o  J1 H
  208. {
    % Q9 {; W+ i3 A( T+ L* ]5 A5 t  {
  209.   char filename[MAX_PATH];- l" a+ A* v4 B2 L( i5 U9 }' g  N
  210.   LPUPDATEFILE file,olds;
    6 `# {/ ~3 R4 q4 S
  211.   std::map<int,CString>::iterator i;
    , [8 x3 _6 ?( p! H8 `
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( u/ l8 }. a9 C' D; ]& y: S- U; U
  213.   std::list<CString>::iterator l;
    ! b8 r6 F/ C- \8 i' O. `3 }& O, w

  214. 7 V4 U. X: D7 E% ?# w( g
  215.   if(bFirstUpdate)  X7 w, V$ a& K6 e. v1 J
  216.   {
    ; p: z* u- q( s9 V
  217.     dwCurrFile=0;0 D( Z, q3 q) r+ @. d* F
  218.     bFirstUpdate=FALSE;
    2 r. N, v8 o" x; o
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 U6 E+ x$ p, W1 I" I" B
  220.     {# [0 J9 {) U8 ^" \
  221.       dwTotalFiles=UpdateLocal.size();
    & `7 y# ]# x4 j9 i. P: T
  222.       dwDownLoaded=0;
      a2 R: r1 T% {: ^* d
  223.       bSilentStep=FALSE;& x9 g1 x: d0 w: o3 ^
  224.       bCompressed=TRUE;
    6 F" @: `& R: s, N  p8 c9 q& z& D
  225.       strExtLocal.Empty();
    4 S! ~/ M% q- l
  226.       strFullName=(*i).second;' G8 P+ k7 k, {9 z+ i
  227.       dwProgramState=AP_CONNECT;
    6 T3 j5 m9 f0 @2 y6 Z4 T
  228.       return TRUE;; u8 z2 T2 x0 ^' B
  229.     }
    ) s' ]( W9 W& [; H: u
  230.   }# k5 }) `6 {8 k8 S
  231.   else if(bRestartUpdater==FALSE)$ r$ H8 c+ K4 \  P
  232.   {
    : ~2 K% q% N2 c6 k3 e
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())3 H8 G* I/ M" c
  234.     {! A  X0 F8 P( _1 e1 g
  235.       file=(*p).second;
    & b: M* n& _$ o$ m
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    # \3 N) t+ {7 S4 H6 O. g8 W$ e, F2 F+ _
  237.       {
    * U0 x0 V  V5 t# J9 i; s& l" t* S
  238.         olds=(*p).second;8 f( r! [- q; F+ o4 @3 s
  239.         olds->vers=file->vers;
    % M1 d- e: j- L) Y) }. W" N
  240.       }
      E2 |, R# [- u
  241.       else
      M: v* t$ C" l$ ^( _
  242.       {- P# t6 L; |- n0 i; o
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " H- j- T8 y; w  V
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    6 ~# L. x% t5 C. \, P. T
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    / T. B; U2 p5 n$ k
  246.       }. n9 N" c  c" q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    0 U! u+ j5 o& ^+ D: y' t% c
  248.       sprintf(filename,"(%s)",file->file);
    ! g# H; z' h3 W1 {. M$ Y9 G
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - y7 _9 Y" l. W: a( w- r+ Y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ) a& H, U" W9 S* h
  251.     }7 C; \, h( ]5 [1 F
  252.     dwCurrFile++;5 c# p( |, [5 ~, z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 Q! f9 `, Y) i; d( |
  254.     {
    ; z% [* |5 W* L; V- ]2 q4 }
  255.       bSilentStep=FALSE;& w. F" ~9 a: r# o' |: y
  256.       bCompressed=TRUE;
    1 a8 f4 b. H. z4 N: [
  257.       strExtLocal.Empty();
    7 b, h2 M- Q1 N8 `7 u; Q
  258.       strFullName=(*i).second;
    4 Q$ a2 O4 `  c/ a- E" P$ X7 w
  259.       dwProgramState=AP_CONNECT;$ c& o* ~1 L6 b) _& I2 t
  260.       return TRUE;
    9 @, }% E; s- W' F
  261.     }
    6 a6 b2 x' w- U
  262.     if(!bRestartUpdater)8 m9 G/ ~% x# Q; {, m
  263.     {& U$ o9 ~3 B5 U
  264.       int iCurrSize,iFileSize;
    3 A- `, [( f- T7 i
  265.       iCurrSize=0;$ s* V1 P, s7 H$ _* B0 D& D
  266.       iFileSize=UpdateList2.size();
    $ I6 \3 {" ~7 {4 j4 l0 }& Q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % A/ m4 e) P* q& S7 @" P  `8 V
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");8 d% [) y2 D* V2 S4 J2 M
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");, ~/ u. i. g1 f. u
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 ^) U0 h0 A- k1 W. _! c8 H
  271.       Fclearf(".\\update.dat");
    4 z) A' v- |& q& V/ `. {
  272.       Fprintf(".\\update.dat","Bloodyf\n");8 q1 C$ u; d5 V! T5 C4 e$ y2 m
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + r9 U1 b! v, M5 a. m
  274.       {; z1 x! K- g$ g5 m" _
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& v# i. w4 `8 t- a) `9 y: V# q( e
  276.         {
    , |, c" g, p( `* {8 E$ }
  277.           file=(*p).second;
    . X& ?6 M  C; X/ {# E
  278.           sprintf(filename,"(%s)",file->file);
    4 l/ W+ q2 U5 A; {2 C4 p
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ z; O% o( R( k( s$ d; y6 g: |9 U
  280.           iCurrSize++;
      [" p0 [1 r$ W* Z& i# x0 C; Q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));3 m; h- h) P: L
  282.         }
    ! v7 J. r6 K* G' Z$ E0 k# F6 b% K
  283.       }* c3 D: L0 O! Z" z/ l, T1 g
  284.       unlink(".\\update.txt");
    . a1 d8 {) g. x4 H
  285.       unlink(".\\update.tmp");
    " }) [- n+ j7 X
  286.       Fclearf(".\\checkversion.dat");
    " o" f+ }" V$ k# {
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' c9 ~* Z/ Y' u5 p3 j# f
  288.       if(UpdateLocal.size())+ I+ Q+ G1 [7 z4 X$ f: C4 h9 e
  289.       {0 @; k. V4 U# D) n; t8 c$ t
  290.         UpdateLocal.clear();
    & z2 Z# j" \5 v: h) J0 X4 \5 u' |1 M
  291.       }8 T0 S* d/ N- P1 j& F( [) n( T3 f
  292.       if(UpdateFile3.size())2 m7 c0 E6 l; {2 o% c5 i/ m
  293.       {2 Z* i% w( q7 ?; U& x
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 S, Q: g: e& ^) c1 Q4 A
  295.         {
    ' V# u# r- e# u% \7 \
  296.           file=(*p).second;( s4 V! ]# [" W1 p% t  b
  297.           free(file);
    2 g& n6 o5 F; [5 b0 i7 T8 q
  298.         }; R- F4 m, ?) S& d8 h& Z
  299.         UpdateFile3.clear();$ ^4 y7 X& u' }% _1 t9 ~  `) b) V# M0 o
  300.         UpdateList3.clear();+ m3 L6 r& t- V5 W* {0 u8 z5 L
  301.       }
    # L9 n" z9 |6 \! J
  302.       if(UpdateFile2.size())
    8 R! x7 I* k) z
  303.       {! [/ E. x) a9 t" M! ]: P1 ?% P4 O$ }
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' H  @8 [3 ~+ p. D7 w
  305.         {
    / P1 r2 m, {* O8 c$ p
  306.           file=(*p).second;
    # Y9 l! `+ c0 L
  307.           free(file);* s$ T7 O0 T" B  v' L
  308.         }! R" w0 r3 c% l
  309.         UpdateFile2.clear();
    7 d  C. g! i- O. u4 n
  310.         UpdateList2.clear();
    % b4 v1 ^6 b7 c& Y4 W2 c3 C  I
  311.       }
    ) q) d. ?: K6 U! P+ l
  312.       if(UpdateFile1.size())$ q, `. g( b8 z3 c
  313.       {
    7 Q- t* p$ ^# l. W
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 W3 u- q' n; `5 I! y% _
  315.         {5 _# Z& _+ ~4 g$ f0 ]
  316.           file=(*p).second;
    7 f# J5 P. d, f5 C" v8 z! e- g- ?7 C
  317.           free(file);
    & |' Z6 f* ?* g# i; e- R
  318.         }* @# G* ^3 [; j5 B
  319.         UpdateFile1.clear();9 N8 X. n1 c4 ?* G3 m( R
  320.         UpdateList1.clear();
    9 k( y# J. R* U( p' k2 V* j
  321.       }
      Y7 a4 z" [; q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));$ Z& T' J9 {6 }6 f* A) _
  323.     }
    2 E$ E0 {. }* ?
  324.   }
    ! @# w3 @+ p) s/ l3 d
  325.   return FALSE;
    2 V5 L# O$ w6 I1 W3 W/ X. L- B
  326. }
    : H$ J% A7 M6 m9 S# T  o
  327. & B: B) L2 d4 F, c7 E8 f) |( F
  328. void CRevAppApp::ClearAll(void)" R9 H) O/ w& s& ~: N" n
  329. {
    ; E2 a" W) s! Y/ z
  330.   LPUPDATEFILE file;6 E3 V8 G! z, f* z- N: V
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% ~# J: @# e& _; O, E1 B: o
  332. , j% Z( D+ q' C, e
  333.   if(UpdateLocal.size())
    * M+ k% D+ u: j, z6 G
  334.   {
    9 A$ L& E6 R7 z: i" v
  335.     UpdateLocal.clear();8 d7 A4 _' |9 u* x# m# z% y' _
  336.   }
    5 Y. p) s. c) p8 b
  337.   if(UpdateFile3.size())
    ) Y) ]6 J! |; o. J, o* B
  338.   {
      x: R  |/ B6 B6 M' D' _
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 Z8 s& m& w6 C: i' o6 p) e/ {
  340.     {% `4 ?( O, A) h# m
  341.       file=(*p).second;
    ' i5 D& o$ T0 h2 Z
  342.       free(file);, l* E# j$ ]7 @! ~3 o
  343.     }  o6 `7 V7 d' Q/ A" [/ Q
  344.     UpdateFile3.clear();+ t+ k. h- ?# L& h. o
  345.     UpdateList3.clear();
    0 ^4 U: d8 l2 y* c
  346.   }( B0 E; d0 @9 W" i2 c% c
  347.   if(UpdateFile2.size()): X% \/ A$ I/ g7 Z; O% l
  348.   {" {7 U; r0 g0 ]. P5 B! j  ]
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . o2 Z3 ^+ J* Q1 e  f9 }8 ]
  350.     {5 a, c2 B4 v4 X: X
  351.       file=(*p).second;
    . f! F$ K: c, R9 x$ T
  352.       free(file);
    ( w" N/ o. Q2 H) _# K
  353.     }+ w  M8 z$ u- ^
  354.     UpdateFile2.clear();) J( \3 ~, [( z; G$ u
  355.     UpdateList2.clear();" X5 \6 V2 b$ a) S' T5 ?/ l- i. ^! p' \
  356.   }1 R* X# I8 \/ _6 t3 ~7 S
  357.   if(UpdateFile1.size())
    5 A) I# Z' N, r) Q& d  B
  358.   {
    ! d) [  s5 B# D) w
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% D  S6 b6 t, O4 r8 X. X
  360.     {9 D/ @( l' A" t; s" C! y2 `
  361.       file=(*p).second;
    6 n6 ]! _( n7 t( x0 y# l+ ^
  362.       free(file);
    " w- X4 r7 ]9 V- e/ P
  363.     }& `9 }' g5 g% `4 F. j2 J2 s
  364.     UpdateFile1.clear();
    " Z/ Z- [# R& u! i3 L+ `6 x
  365.     UpdateList1.clear();- P, g8 R% D5 V8 L/ ?" q$ A2 x; B
  366.   }3 A9 p- m. n1 j: J& S! Q1 Q
  367. }  
    # r5 A% |' y, U$ I0 K& j  [
  368.   
    ' r+ m" I+ c$ T# x" [
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ! \$ K. o4 {/ T' g+ y
  370. {
    3 ?3 b. C* v, d5 \
  371.   int c;! e2 m, x- G7 ]% e( v" Y, m
  372.   LPUPDATEFILE file1,file2;4 E. |0 x7 W8 `% Z; v
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;3 W; Y* F2 z6 c4 E
  374.   std::list<CString>::iterator l;: X: \8 u, I0 ]% h- N. e

  375. 3 ]7 w6 G* O0 \- v/ C7 V: R
  376.   UpdateLocal.clear();$ c' ~$ q8 N( U/ B6 N
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    : i% R7 \/ |, c. M
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ' D! R' z* B$ ^- Q* U2 M/ L
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    * r$ d  N3 }# [
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 w# _8 f" O- l' b* ]8 p$ j
  381.   if(UpdateFile3.size())
    8 _1 B$ ?0 ^& C+ K
  382.   {
    " A, H% J$ M/ V& ^3 V% x
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    $ W- ^- m# b; i7 N
  384.     {
    4 b* q0 G! p- m& l5 M- q3 r
  385.       file2=(LPUPDATEFILE)(*i).second;
    + Y6 w5 W: p& ?6 F9 S4 |" g! v
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): R% ^6 r% c* W: B# r8 U
  387.       {1 _- e+ {/ O/ R
  388.         file1=(LPUPDATEFILE)(*p).second;0 S1 |$ ^* p4 x
  389.         file1->vers=file2->vers;0 Z, O1 S' G& \2 M1 e+ H
  390.       }" S$ I0 [8 `7 d3 S' G% ]  S4 y
  391.       else
    & T: a7 s; }, V5 V5 b
  392.       {8 \) s7 S4 n/ H, S- J- b- R& N$ q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 ]/ ^, |; L) A5 w# i" {; ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));6 q0 a# y& }/ f7 Z
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));: ?! l9 m+ U7 Z
  396.       }
    ' n  ^& K0 X  d* E
  397.     }
    6 q1 X: ]2 i- y6 @
  398.   }
    5 M3 a, t! I7 K4 E; Y# ^9 g) }
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ' _7 H! T/ C4 y+ s. m
  400.   {
    8 L* M7 M3 B; j$ b
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())) I0 S" e8 j8 R% Z% ]# n
  402.     {
    7 H# n9 W% l( n( O/ Q5 S- L7 j& S
  403.       file2=(LPUPDATEFILE)(*i).second;, c) o" |: {: j$ w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ f5 R( s+ L. `5 @! j- w3 \
  405.       {" p- K& K' O  s' w
  406.         file1=(LPUPDATEFILE)(*p).second;* ~! P% n* {( }: r% o  b0 ~2 O) x
  407.         if(file1->vers!=file2->vers); r) L+ p3 {) j3 `' z
  408.         {* N7 i0 h  s. @& Q0 R9 \
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
      ^2 R1 a! j1 m/ x3 k2 g' u
  410.           c++;2 Q8 [: ]2 A1 }" Y8 F: |6 X% E
  411.         }* }) F. v5 }3 `9 U! \
  412.       }
    7 g! y6 E3 q# C  {: s
  413.       else+ t( E+ r+ g5 X
  414.       {+ o; E; p, A! @4 D& a2 @7 Y# `7 k* M
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( i6 Z! m, t( m1 F) f4 M7 `
  416.         c++;
    9 t7 c2 u7 t6 U" ^; Q7 v" g
  417.       }, z# |/ Y; S" G7 a2 B, Z, L
  418.     }9 i8 y9 ^' x, G4 B5 T8 B
  419.   }
    0 }# }& [, |5 w1 X% q
  420.   unlink(".\\DownLoad\\update.txt");& Z5 {2 `; g1 W, {
  421.   if(UpdateLocal.size()) return TRUE;
    . w1 P! a( c) c; G% B: D' t
  422.   else                   return FALSE;4 @1 {+ Q5 v7 ?5 Y. }' g) K# |$ K
  423. }1 h& A! \0 l3 @8 S
  424. 3 h  n& I1 [2 Y% S- _2 e
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    1 m$ o1 j+ z" N8 `
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    " B  W2 \8 o. |" G8 x
  427. , d4 f9 s) ^  r" C7 b& c4 S, u
  428. * i1 t6 {$ C5 {3 Z' k3 o4 |

  429. % H3 W: }! ~6 ^) B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( [! j+ Y8 {' u; \3 b
  431. {# ?, l$ F. p/ N0 @2 o- ?/ q& y0 R2 ~
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    , ]: ~0 m9 t7 K
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    + |7 h3 R# P% S% U, b% W" }
  434.   {3 N; H% L2 \+ N7 ~( o5 Z4 O
  435.     char szLanguage[50];5 y# `/ T# W& h/ Z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - R" N! H: p. i9 `- R. ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    + ]- b4 ?9 c( e3 n
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) j3 N7 S" b9 K  f( G4 ]& Z
  439.     else                                   m_iLanguage=ENGLISH;
    ) f4 s6 s. I) P- H+ w# c
  440.     char szRegister[100];
    2 _4 r) I0 ~/ e" V8 K% r, ]+ A$ z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / k  Q) E; t8 f" a7 d
  442.     strRegsName=szRegister;9 e- D% ?- L9 [' M& L( f
  443.     char szPatchURL[100];% c+ I1 a0 H. o. l5 S* ^4 `: z
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; O* Q& _" j, \% ]3 E
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 u+ k% [& ?  s* m, g
  446.   }: \" ^* `$ A+ I& s+ }* B
  447.   else
    : i5 {6 X2 ]& {' V2 F/ P+ ?; \
  448.   {& E- r8 V. ^6 S' F- J
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# {( A- Q# b9 O" U$ U
  450.     strRegsName=DEFAULT_REG_URL;3 y' O! ]* w0 z; E
  451.   }/ c2 J9 D; ^- Q4 _0 B
  452.   if(GetFileAttributes("hosts.ini")!=-1)% r, }% E" A( O3 f: M3 v4 ?" \
  453.   {
    7 r& S/ M& l. |5 o6 i' J2 S
  454.     char szIP[50];
    8 Y6 o" s, z# C
  455.     char szDIR[300];3 |  n- N  q# a5 |! M, k
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    0 T6 G$ B6 K% m$ q0 w# T
  457.     {' f! ?! a1 q4 g
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    * ]; r' C* _4 }5 `  G4 h
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    + X$ ~" o5 Y) J
  460.       strHostName=szIP;: `: g7 a3 c; Q6 e
  461.       strHostPath.Format("/%s",szDIR);( I1 w+ N! t4 n2 Z' n3 s
  462.     }
    8 @- u; p& ~8 ~0 V* S1 i
  463.     else, S: E+ I. l3 z" ~2 _
  464.     {7 o6 z( y  M; m5 a5 }6 j
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 [* i+ I% ~6 g" j8 l6 _' T! P5 h
  466.       {0 ], W! P/ {- l4 O3 l" g
  467.         char szLanguage[50];
    # L! x6 r+ i+ h- C, L" F* \
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 d1 z+ ?9 j8 M5 I
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ b; T, g+ p7 H' I1 e. F  Y, @
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ Y0 d! e, k2 D
  471.         else                                   m_iLanguage=ENGLISH;- s. {6 K% L4 K  z
  472.         char szRegister[100];
    5 D! Y) P! Y9 q! f% e: W
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " y4 v' r) F. `1 D5 K2 Z
  474.         strRegsName=szRegister;2 P/ c* o8 ?0 M* x& k
  475.         char szPatchURL[100];
    0 `! O/ p- q. z
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");, v. c# `. t; x2 D
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      ?' z) f3 A- ]  W4 d. f
  478.       }
    8 i: x7 I2 V7 c* b% y, Y
  479.       else/ N2 N( D, {' c: O! `$ W5 n  L
  480.       {7 Q7 H# a# p& ]& ?6 E
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);! W0 T3 x1 C% F: e8 I/ k
  482.         strRegsName=DEFAULT_REG_URL;: M" I( k5 x' G2 F" D
  483.       }
    * w; q, C8 d0 A/ K( @
  484.     }, N9 M8 e6 a. E, x/ {
  485.   }
    . b* w4 {* S2 d; k
  486.   return true;
      u. a9 c8 W% r" p# G
  487. }7 y9 ?2 D2 s' p& {
  488. - `; g0 J$ U$ w% ]6 C2 i
  489. #include ".\ZLib\unzip.h": G( D& e8 ~" @; }, l
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    & b( }4 y3 A7 ~4 r6 C4 d' Y$ |8 W
  491. /////////////////////////////////////////////////////////////////////////////; E6 E. f# `; W- X( H) c$ c0 b& t0 w
  492. // CRevAppApp initialization: S' _: n9 V/ L% P% H% X$ J8 L
  493. 4 q" T% q* t! `" [  C& i8 z' V9 x
  494. BOOL CRevAppApp::InitInstance()0 r+ A6 m9 b3 d* I: _/ {
  495. {8 G* O' d/ Y0 f
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];8 L0 R) g5 X) }  a+ e7 u9 v
  497. , {# X2 |5 m- w
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    . Y/ G6 t; i8 ~3 p! z3 ]
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    0 |4 N- p# k8 J6 U4 u# A
  500.   {9 g! q) l7 ~4 \' w6 z) _4 ?7 V
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");' N' Z' g* z" y  o) w+ O
  502.     GetPathFromFullPath(szPathTarget,szPathSource);1 O( V& Z1 d: ~% Z: k9 d6 ~- `6 \
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ) k/ l$ X1 X) w) S. }( k
  504.     {7 X  t: T  p! p# W4 j* j
  505.       strcpy(szPath,szPathTarget);
    : T0 i$ I  }! M4 {# S
  506.       SetCurrentDirectory(szPath);# Z+ T+ @" `2 }  G3 z: j( M. S
  507.     }6 Y$ u0 w- m$ l5 Y6 v+ q. a/ a
  508.   }
    2 t" _+ J( E7 u* R( o  I* M% z
  509. #ifdef _DEBUG
    * a2 c/ s& ~/ e4 j1 V3 A% S
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ K! w, a8 v. o5 n
  511. #else
    6 S- {/ |3 ^* K5 _* s
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  z) t: Z' ]$ d8 f/ g# I* M
  513. #endif
    # ~+ h9 Y3 X; w, I) [9 @
  514.   {
    3 |, d* X' E, W# X6 u$ a
  515.     char tempFileName[MAX_PATH];
    ) H* V3 Y, m- w. t1 Z
  516.     strcpy(tempFileName,szPathSource);
    0 A) K0 K9 [; i1 ?
  517.     tempFileName[strlen(szPathSource)-12]=0;  \* s, z; U. F0 m
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. |1 f7 B- i7 P$ V! r. l" v7 n
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);: v7 _) k8 ~6 s
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);6 `3 L' ~; {# ~+ k) V! b9 k/ A  V7 K
  521.     return TRUE;; D* v" w9 v: ^- p2 o, [1 q
  522.   }2 Y# N3 z& F& ?+ ~+ s: B- z2 @
  523.   // Nuke 0118: Delete run.exe9 E, j0 i. I# d
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );, ]; |3 Y" i7 l0 N
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    " f3 d- M8 k. e4 R* Z2 G
  526.   if(!ReadCfgFile("Config.ini"))+ G1 ~8 U  D" ~# x! |3 G
  527.   {
    0 r# B: S3 `# Q# X
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);% |6 c) t$ K7 C5 Z: g! o& S$ P
  529.     return TRUE;
    ( b" c  j0 a" K  u% q
  530.   }* a9 V2 r/ a( w* ~
  531.   HANDLE mutex;) p& o' @0 A" a$ p4 t7 t
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))+ k( ^( e: E% E8 A
  533.   {, `- R% W2 K) A! c( J2 O
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)& j& h( G% r2 |
  535.     {
    : i: M& i0 ?  h& \1 r# E3 w+ n
  536.       CloseHandle(mutex);- i! @7 _$ c0 f2 V1 S1 J" b% J! {
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ) v4 o) i- e/ h) s  g, X
  538.       return TRUE;3 b. u$ Y. L7 n5 j
  539.     }: }. |5 A7 E+ J  i3 b
  540.   }  - T. D  D6 U, S0 {3 L% ~
  541.   CloseHandle(mutex);% y: c0 |( V- U. v& V( l1 u

  542.   R6 D& @* x- Y( M+ m- y) g  W' N0 Z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);7 H, _6 G0 r- \8 {% f) r

  544. 5 h& G- t$ u9 r" c# ]- F
  545.         AfxEnableControlContainer();& Y" j' {7 w, b1 b
  546. ) a* m& S4 O! v8 l* O
  547.   bCanUpdate=FALSE;. B: R7 v1 i( f( Y3 g* U3 T) u
  548.   dwStartUpSteps=1;9 H" n& B9 H, t& B* q4 w6 K+ \
  549.   dwProgramState=AP_NOTHING;& y- t6 I# r4 M$ e5 I) V7 [1 r( s6 N

  550. - p, P8 h9 c. {. y1 F
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    $ h1 q& m! W% G
  552. % B8 h% l0 u, T  ~5 c4 M8 ?
  553.         // Standard initialization5 [% J4 q1 Z& L) e  J+ w
  554.         // If you are not using these features and wish to reduce the size, d% I# B& A) b7 \
  555.         //  of your final executable, you should remove from the following+ ~0 W- S8 R: R
  556.         //  the specific initialization routines you do not need.* v+ ^2 \5 I9 N8 R( J
  557. % Z4 J7 Q# K# A$ y9 a8 M
  558. #ifdef _AFXDLL
    9 O2 `* ^1 j! R6 C& s2 F7 D/ N
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    - w$ a  v" p' ]
  560. #else
    1 d. O8 F' w; k0 E& `; |3 i
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    2 R5 i! b" G  f! d! |0 ~( {6 I7 @
  562. #endif% Z, k& @: j  T6 c0 `
  563. + d& u4 b; _  L& ]
  564.   dlg=new CRevAppDlg;6 {9 J1 q" a4 F+ o5 y3 w, Y5 o! {
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    0 P( F5 A6 b" D+ m1 G) u6 A0 i
  566.   dlg->ShowWindow(SW_SHOWNORMAL);( j% M$ u/ M5 k! j/ j6 x6 B6 v7 W
  567.   m_pMainWnd=dlg;
    * P# b9 a# I7 q- h

  568.   I. ^6 ^$ j5 w- v1 ]* Y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);$ v" E8 G% Q% k$ Q7 w
  570. 5 A& i4 X, N" M- G" K$ y
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ; I% f/ b) ~9 b  g
  572. //  ULONG_PTR gdiplusToken;
    5 _( }$ {0 I3 t7 l" Y/ m( `
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);  s7 r3 g, C- Q! \: P; b) F

  574. 6 k  p7 v( Q$ A, N8 \: h
  575. //        CRevAppDlg dlg;
    2 x& L6 w" g: N4 F6 F* L4 n
  576. //        int nResponse = dlg.DoModal();+ U1 g+ l/ r, S; A+ P* d
  577. //        if (nResponse == IDOK)  {# f6 l3 j$ v$ p
  578. //        {
    1 d1 }, w( H* {6 ?. v0 W* {
  579. //                // TODO: Place code here to handle when the dialog is& u6 i; C4 y3 T+ f9 l# t0 x  ]
  580. //                //  dismissed with OK
    5 T- G( P3 i$ {8 C) Y" }
  581. //        }
    9 l9 I% j( |. |' W/ a
  582. //        else if (nResponse == IDCANCEL)+ u, V8 _6 q+ c2 c/ w8 K! N) ^
  583. //        {
    + e. z" s! |# F  D4 t+ C
  584. //                // TODO: Place code here to handle when the dialog is
    # h% L' @* ?+ i+ B
  585. //                //  dismissed with Cancel$ O3 W3 V# C: s+ P
  586. //        }
    8 z9 J( ?; Q) Z- Y( ?. M
  587. ; {# T& ]3 j" p' Q6 n. k  F
  588.         // Since the dialog has been closed, return FALSE so that we exit the, l) o+ v5 x4 H- ^8 q0 z
  589.         //  application, rather than start the application's message pump.5 s4 W8 u9 V. K& L% J. `9 k
  590.         return TRUE;
    ! S) e+ l$ s7 {
  591. }
    8 M; s# p; K1 `' ?7 p/ g* I

  592. # w$ U! K$ o* N  O+ D
  593. char *CRevAppApp::strtok3(char *pSource,char *token)5 u( ^7 g" k  N3 u& B. N
  594. {# M9 ?2 I3 h2 G. I* D
  595.   int i;; Q8 z% O. Z% a3 I! \
  596.   char *szRet;
    % e0 }0 D3 [' A7 D& b& D6 |
  597. . x7 r0 \. G( t) y
  598.   if(pSource) { itoken=0; sztoken=pSource; }' n% e/ ]- n, U! z8 a
  599.   if(sztoken)
    6 U7 s. ?5 |7 u6 e, V0 p8 e
  600.   {, s1 _+ v+ I1 m/ N; M  n( U
  601.     szRet=&sztoken[itoken];6 \% A; L* I  V3 e1 e" d0 r5 r/ b
  602.     while(sztoken[itoken])
    ' A& h9 I$ T* o8 i) {
  603.     {* p3 }2 R, W& i8 l/ T
  604.       for(i=0;i<(int)strlen(token);i++)
    ( ~2 x* c) W" H7 x1 W
  605.       {4 z1 Y. ^! R7 y; i) r! q; J# A
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    % T& L. q0 I% T) g6 e
  607.         {. [: J* a! j$ n- F% ^! N3 F( Z
  608.           sztoken[itoken++]=0;
    7 H' t0 t+ ]) u/ v- Q9 a
  609.           sztoken[itoken++]=0;
    0 }1 T% }4 ]9 o0 _- A, p
  610.           return szRet;
    ; z' u* C. h4 g% e" m& E4 B
  611.         }
    0 K" g6 W5 I- E
  612.       }5 Y. m2 z, K! {" g, J# l& x
  613.       itoken++;
    . T  }+ h4 F' G
  614.     }
    * ?% H1 V: V* S- J& R
  615.   }
    3 H3 o4 H. v+ E
  616.   return NULL;4 |* B) o1 p9 A: w9 q; b* K
  617. }9 [8 U& A; `8 a; W* _

  618. " R1 j7 u" |8 o
  619. void ProcessProc(long Total,long Current)
    : @( t8 ~$ p! H3 i' c; ]5 a" F
  620. {
    : z. I* t% @  M6 ?+ ^
  621.         MSG msg;3 d( b+ v4 Q  X0 Y' W
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);$ |( M/ B6 ^5 ~! z" M) {
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 \( Z" f1 b3 G+ D9 F
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)): Z( r( x6 M2 Q5 j5 E4 @9 q$ H. y6 M
  625.         {
    2 X2 |, F) G- `  M' f8 ]
  626.                 if(!GetMessage(&msg,NULL,0,0))0 X) u$ \4 Z( T" a. k% {
  627.                 {
    ( X5 i4 F' k- z5 [+ t$ I
  628.                         return;8 c* F7 i- _/ `8 e7 P
  629.                 }' Y  j( @+ c  l3 T- X
  630.                 TranslateMessage(&msg);; f, c3 [( Y( o8 y# R2 a3 R
  631.                 DispatchMessage(&msg);
    & D$ k, m& t9 H# O
  632.         }       
    ' K* x. |0 R! `' Q6 }3 _' ?
  633. }
    # ~6 Z# {( X/ n* |* T* R; R

  634. " r( c1 e3 p# }$ _% K" D8 J
  635. BOOL bFirstChar=TRUE;, @2 \5 j3 o3 n! i! g3 `

  636. 8 R6 m, D, O: u( Q5 C$ l
  637. BOOL CRevAppApp::OnIdle(LONG lCount), {, J9 y8 k& [8 n4 q0 u9 y
  638. {! P7 ~% `# t  z- [5 B
  639.         // TODO: Add your specialized code here and/or call the base class6 g. d6 U8 Z8 n9 F1 T
  640.   switch(dwProgramState)
    . \8 V0 W8 J8 x0 i& U# ?' |
  641.   {
    4 S# M: a" G) e/ [( ~
  642.   case AP_NOTHING:4 _' N4 u; E) I2 j0 Q9 J
  643.     switch(dwStartUpSteps)
    6 p- E+ v$ w0 D1 y( w8 n
  644.     {$ T9 Z4 ?! ], F7 i: S  s8 J6 c
  645.     case 1:
    ! l, B7 Y- _: v& W' |
  646.       {( Y- Z) ]1 d% s* y! n  L
  647.         int i;
    ' S: F7 g9 ]4 Z
  648.         CDC *pCDC=dlg->GetDC();
    # B! G) b" I. m2 X) K
  649.         HDC hdcwnd=pCDC->m_hDC;
    , O. [% J% O, l- F* U/ G
  650. //        Graphics graphics(hdcwnd);! N3 o2 O* e) t$ Z4 u: O/ ^
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 k6 ]1 F' h5 ?  w( O
  652. //        INT iWidth=bitmap.GetWidth();+ U0 l% M& t7 V: E8 D
  653. //        INT iHeight=bitmap.GetHeight();
    2 [" H- C. l7 }/ A+ f+ \2 l- W
  654. //        Color color,colorTemp;
      D( L; j. u5 v: W( ?( u( r5 W! G
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    1 ?" ~9 m% q: ?5 l. D6 y
  656. //        {. E5 m+ I4 B8 B: r/ R
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)1 p6 Y; U. p- A8 w4 @8 i
  658. //          {$ H* E( J5 w  b. B7 g2 E0 `+ j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);- {4 y0 W! u4 v* c
  660. //            colorTemp.SetValue(color.MakeARGB(
      t8 a: _) w' F3 C3 Q( n7 x7 S
  661. //              (BYTE)(255*iColumn/iWidth),) C6 G; y/ y% R9 y& U$ V( W
  662. //              color.GetRed(),# a/ A2 g0 s( q4 Q* U; v
  663. //              color.GetGreen(),# O: K: t. ?, g+ x
  664. //              color.GetBlue()));
    2 y, V9 g, R+ \# e9 S7 x( `+ V4 Z6 I
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);( N/ u% v$ n5 W' S% e' T
  666. //          }
    ( `+ ]8 H8 S8 K4 W2 d, ?& X
  667. //        }( |7 ^! y9 O; o
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 q% H0 h0 l1 w. F) ?, r! z! g
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / \. M- c/ D8 A( T% G* n, T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");  k# M$ q0 j/ o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( h( i0 x/ H8 {6 f: F1 Q9 x" T
  672.         for(i=0;i<240;i+=8)' m, T' s- ?4 H* b
  673.         {+ r) r" J( W9 p- a9 S+ n
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  S5 L: ]0 K9 c3 F6 Q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . W3 a4 d7 N# F6 i8 t
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * V) Y, d$ A+ H( v+ \) I
  677.           Sleep(33);
    ( e  S! p; n7 P6 P
  678.         }
    4 p1 M# V" m" V$ V
  679.         Sleep(1000);
      H8 I6 z( [1 S- ?7 b8 c2 S- q
  680.         for(i=240;i>0;i-=8)
    7 f" c' S$ R! J
  681.         {
    2 T* ]1 F! t' r6 q, [
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 z8 a$ c% G: _, N/ E. ~% S
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    8 X: i# K7 |# Y% c
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% t' c4 A! T- y: }5 E7 n* ]
  685.           Sleep(33);
    / j% x# z; e% J6 {. [& S* l
  686.         }
    / L- O* w: X/ \2 g4 @
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);5 [9 V1 c$ ^9 o+ ~" |! |2 d
  688.         dlg->ReleaseDC(pCDC);' X* n* P# V- U" F8 F+ g' L4 j
  689.         DeleteDC(hdctar);1 F/ K4 J. a5 d3 d- N6 F, y
  690.         DeleteDC(hdcsrc);/ P# q% [5 Y0 }) g! E1 W
  691.         DeleteDC(hdcorg);' ^' h# f. @; G( N& Y" _) n
  692.       }/ o+ ]3 _% M: s$ @. o# h( W) l7 J
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    + |6 U0 k) |) H2 _2 u0 Z& x
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    5 E2 s% O. \" N1 N6 q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ) p4 p; B' L# e: j
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");) a" C; x" I6 ?$ C% W7 \" P
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ G8 M3 y" k3 d  o
  698.       if(!Dn.Connected())
    ( Q) ?* I0 V- b; Q$ Y  W6 T
  699.       {
    + v' L; B0 M- L% m0 n
  700.         dwTotalFiles=1;) o1 c4 J4 i5 i0 d1 g: C
  701.         dwDownLoaded=0;
    , S- @) f) C3 }4 G
  702.         bSilentStep=TRUE;* B9 q; b/ q) I, B/ k! J
  703.         bCompressed=FALSE;# h1 S* `' L3 b: K1 q& l' k
  704.         strExtLocal.Empty();' t7 c, v$ c' L- s. B" g( Q% ?6 V
  705.         strFullName="readme.txt";" R  \7 D5 T7 y1 y$ v1 Y' |+ T' Y& X
  706.         dwProgramState=AP_CONNECT;
    2 L. ]% A, a) T# r
  707.       }0 G, t: B! r- ]4 @6 o( B
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();+ F% a" E* D+ p* M: P9 }
  709.       dwStartUpSteps=2;
    2 h, r" [- i/ C+ H
  710.       break;5 h' J$ G1 Z% e) C4 L/ r
  711.     case 2:
    9 v. P$ E) t1 S2 Z& G+ N1 }
  712.       {6 a  k+ \% B, L( h/ [5 ^" f" f$ z
  713.         int iEOF;
    " n: ^7 K7 F7 I& u9 L7 @2 o5 M
  714.         FILE *fp;  b- d9 u* x- _1 l6 r/ V& @. b$ ^
  715.         char szString[512];9 H; h" L+ `) [, l; \# f3 T
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");- M; @) a! i0 ]. I  a" A2 V
  717.         if(fp)
    0 r3 u* j% k# n- ?. G' g  d
  718.         {! ^4 v! B; Z( ~( J# W6 U# q" b# l
  719.           do8 ~8 C* |6 F, t( ~( i6 x( q
  720.           {
    + ~9 a/ x- q. l* o: N, K9 v/ w
  721.             iEOF=fscanf(fp,"%s",szString);
    # R4 Y3 _# D5 v2 s5 Z7 i; u# C; F9 V
  722.             if(strlen(szString))/ G) S" @2 D6 t$ \) |7 m7 ^' K4 ^+ T
  723.             {
    " q7 q+ s' A8 z, V/ B
  724.               if(bFirstChar), i& ~9 `* i6 |/ N& h. V; f2 n
  725.               {- Z' d# k1 ?& ~& g5 M/ Z
  726.                 bFirstChar=FALSE;  }, J" _% j5 }2 ?4 s# ^
  727.                 bConnectIsBig5=FALSE;
    # p" [( Z7 C: B
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;& K, q7 t' ]% r+ D6 @: }% c
  729.               }) _* ~2 B$ k& z
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));8 v) ^- d  V( O# }: q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    * `4 q4 S4 ^: m' `8 t2 @8 R
  732.               dlg->m_ListText.AddString(szString);
    4 V  g% s2 {' r$ L# m. Z( p% N# w
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& ~( E+ }& ]3 i6 n) V8 }
  734.               *szString=0;
    ! C. s! |5 ^6 d- O- v2 Z
  735.             }3 K9 l2 K4 v6 [: L7 h3 Q: P/ X
  736.           } while(iEOF!=EOF);7 F- _* K2 n# n, X3 ?# u) {
  737.           fclose(fp);% |8 |, e& e1 s! @/ q, d
  738.           unlink(".\\DownLoad\\readme.txt");2 Y. M  d% W2 C
  739.           dwStartUpSteps=3;$ a$ N4 E* M/ C' D6 x
  740.         }* t) W! V3 d" g3 E1 r, I$ e3 f
  741.       }" z& X( F! Y5 z: f0 i
  742.       break;  Y8 d) n7 m' C/ i4 A4 }) d
  743.     case 3:
    6 t0 f7 W  O; b* d* ^
  744.       if(!Dn.Connected())
    8 ^1 \' n; ?! ]  [' K
  745.       {
    1 Q. {2 G- T+ Y, Q( F8 k
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    : }% k" H( {0 }! A4 Y8 g5 n- {
  747.         dwTotalFiles=1;
    + g: ]' a; r, `* Y  y( B- G" E
  748.         dwDownLoaded=0;
    # `0 g+ p4 i  F7 L
  749.         bSilentStep=TRUE;
    - H7 Q% p% R3 w$ I
  750.         bCompressed=FALSE;
    0 i. R% N, L8 X2 d- f* t1 i
  751.         strExtLocal.Empty();
    ! j( N7 f  Q4 c0 K  e9 j
  752.         strFullName="checkversion.txt";
    . Y/ Q3 N5 X# q7 e
  753.         dwProgramState=AP_CONNECT;
    " F5 d. }( s' k) X" s) F9 q
  754.       }  g" Z' d( ]) y
  755.       dwStartUpSteps=4;
    $ Y, D' X4 W! j8 U( N# g
  756.       break;/ f6 M9 p& x" {+ d) M+ W
  757.     case 4:* c8 C) P$ p/ S% V( b0 L
  758.       {
    ) n: ^3 Y! }9 `9 c" c
  759.         FILE *fp;
    8 G" }) e( H" ]( m4 `' D! v
  760.         char szString1[128];
    ( l& O9 O4 k1 N, }' N; f! o
  761.         char szString2[128];8 V* I/ X; q; R0 f* i* d4 [
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");/ c0 O" Y" G1 i+ T
  763.         if(fp)
    . j9 Q( r+ P, B$ c' [) h0 [9 P
  764.         {
    ' C3 V3 C8 {( V8 y' `0 ^3 b/ Q$ j
  765.           fscanf(fp,"%s",szString1);* x8 r6 G: x+ g! M7 n
  766.           fclose(fp);
    4 d% z- C' f* ~# t( I
  767.           fCheckVersion=atof(szString1);
    0 E$ E5 x1 @! {  G' c
  768.           fp=fopen(".\\checkversion.dat","r");$ f3 P  U9 ?1 l4 i5 G
  769.           if(fp)
    - E$ ]3 @/ V+ H
  770.           {
    - H2 r: a' O0 V8 ]6 b2 [
  771.             fscanf(fp,"%s",szString2);
    5 V; S: i! ?* ^5 c$ j3 U( S
  772.             fclose(fp);" |/ f  ]/ \1 a% C! \
  773.             if(atof(szString1)!=atof(szString2))+ o' C0 t$ _- m2 P  C
  774.             {
    8 v/ ]+ P  m" l# _
  775.               if(!Dn.Connected())/ x1 W& a0 N/ f! A, e# c
  776.               {8 X6 H9 R- b. P) H! Z; `) N* z
  777.                 bFirstUpdate=TRUE;% w% a' e1 I8 _0 R/ C
  778.                 dwTotalFiles=1;8 L  R2 f. y! r9 M) n& I
  779.                 dwDownLoaded=0;" ]9 h" I, E2 _& y% u$ @: ]. D5 t
  780.                 bSilentStep=FALSE;0 ~1 p. p% S3 [' \
  781.                 bCompressed=TRUE;9 B1 n% g' W) b1 e
  782.                 strExtLocal=".\\DownLoad\";
    % i, O/ Q9 W- a0 `& s
  783.                 strFullName="update.txt";4 s9 d, I, h. |  @) [
  784.                 dwProgramState=AP_CONNECT;
    $ c, k! r2 q8 O- v6 m7 ?# r
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 t' C8 b' ?% {! r' S7 l
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; w1 e& `4 N" J( Q3 o9 }- ^
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 q" ?! E/ w" i* a
  788. # P- z7 s) @% j- e
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ I) E/ ~4 Q8 f# V8 f# l9 E
  790.                 unlink(".\\DownLoad\\checkversion.txt");3 n0 l% r* m1 l
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    3 {$ n- w  W7 A+ k
  792.                 {
    7 F1 T2 U  u4 {. O) O
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");* R' E3 U$ e# j4 i& F
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");1 D# r$ K3 Y/ }- B7 H# C7 H
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");& Z* Q+ [0 ^. }& S7 c0 |' k  z
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' v" P. ^2 J6 U1 q, o% e7 B5 @

  797. + s. p; \) D" {
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! }5 ?- }2 {$ _' }% M7 O& U  v
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! x- e" k' V! L3 l: o2 q
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 R) X8 T4 c+ t$ I* D/ P8 p
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 K; Q  {+ W' x* y8 ^$ V: A
  802.                 }
    ' p/ x' d7 B) B1 s, i
  803.                 dwStartUpSteps=5;+ E9 f9 o6 k0 }/ @1 D
  804.               }5 Z0 |* Z& {+ n2 m
  805.             }& a  Y, ?; L$ {4 v! G0 W5 U
  806.             else
    - W$ g0 d7 U" n1 F. P3 R
  807.             {0 v$ r) ]4 u+ g0 H- _
  808.               unlink(".\\DownLoad\\checkversion.txt");
    3 y. ?! G9 r1 M1 }" P# U
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - e) I  L1 A$ F1 j0 a( B: P7 n) |2 }; ^
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ! {% k' m: |2 d5 P* N; l( t
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    " b4 b4 e% u$ c; |2 O

  812. 3 X$ V7 P" B* }/ [7 l; w
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, j) _) _7 `9 g# P
  814.               dwStartUpSteps=99;' ^8 L2 K. B5 k  x
  815.               bFinishUpdated=TRUE;. H$ D% u4 f$ K0 C6 a
  816.               bCanUpdate=TRUE;
    . U: P# G* O7 A3 B  |7 E& P
  817.             }
    * ^9 K' i: P0 o
  818.           }
    " R- H: q: @8 L# A. ]) }
  819.           else
    + Z, N: C  Z3 u5 j8 _. {  ?& }" H. \
  820.           {
    : {8 W' h, X  z6 D7 k2 d+ S# l
  821.             if(!Dn.Connected()). ?, A# A% j! {
  822.             {
    8 t; T5 r" t9 F1 n& M- k
  823.               bFirstUpdate=TRUE;
    , f/ c* ^( \) w  |$ N
  824.               dwTotalFiles=1;) A% J4 v& n5 M8 ~0 H( J5 `' V
  825.               dwDownLoaded=0;; M- l0 p( Q) h) p
  826.               bSilentStep=FALSE;5 s: h2 H  D$ ?; k
  827.               bCompressed=TRUE;, Z; X* C1 g. O  A# d3 h  K. s
  828.               strExtLocal=".\\DownLoad\";
    4 A( Z2 K/ O5 h7 x7 U
  829.               strFullName="update.txt";# I6 \! S3 y( z( g' U% ~
  830.               dwProgramState=AP_CONNECT;
    4 V, Z% s" ]. c2 x% Z6 m
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 k# t* r: b) D- K6 w
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 Z4 r4 k+ A  @+ {3 ]: y: F, y7 o
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " @. x1 P. p. N' u% n7 G
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# @  ~, T" ?" ?6 l
  835.               unlink(".\\DownLoad\\checkversion.txt");
    8 `0 E6 y  g, Y  H) r* {9 [
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    - P4 Q: O) B: Q5 g* o  Z) l2 K7 D
  837.               {$ K* K0 r0 g' n5 b! I$ Y% |6 D
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    % R8 R/ f: U1 ]
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");0 N2 J/ P8 K, z& r
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    1 v- `/ I6 n$ s4 r( ]6 D  u4 @' i
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ k9 t6 w$ ^  H" p$ _( a- E
  842.                
    ) L/ b+ K" G- U2 I* E9 v  s$ d- C
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) ]/ j6 z7 _7 ]2 s) \. |; M  y
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 R6 U4 {* g; x4 [  E9 \8 t" W
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    , ^. p1 o) x! s# o
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " w& q" U: V0 i4 n
  847.               }+ i% m1 h2 M" v: \0 T, H0 e* m/ z
  848.               dwStartUpSteps=5;
    4 `; G5 E! }$ V2 T' w7 b; {
  849.             }' v* D9 t# ^* f: E
  850.           }
    % v, \: g6 ~0 M  F7 O
  851.         }
    - {' S8 E* i0 R( A5 d' ]
  852.         else
    * o9 W+ h9 d0 `
  853.         {& p$ P* M6 X( d0 E( l
  854.           dwStartUpSteps=3;  L3 N5 l- [; f5 k+ Y
  855.         }6 n( E( ^, ~- B1 O4 D3 g$ t
  856.       }% p3 J/ a: C9 F% [) _6 P
  857.       break;
    & v$ {0 ?! s3 g; B6 W
  858.     case 5:
    8 u: L& s8 \" B  p, y
  859.       {
    , Y) v0 Q; [* P; u- S, ^/ r% ^4 @) \
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)  \  u" |* d, A' I( G
  861.         {
    8 z8 |/ I1 e/ V$ |# y
  862.           int opt_overwrite=1;
    & a6 F5 H) n, Q0 m* l6 p, A4 h
  863.           int opt_do_extract_withoutpath=0;4 b* f7 ?3 r# N& Y3 D5 K
  864.           unzFile uf=NULL;
    ; F$ O8 t1 z, S$ g" V

  865. 5 k, ^* A5 A  V* f
  866.           uf=unzOpen("Wsa.zip");: a- {/ A% m" v: X8 R7 U
  867.           if(uf)2 Z3 J' `2 J. c* |* }+ I
  868.           {' ~! k4 l& a, S; W- H
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);: E& u" O2 [( M+ X* j4 u
  870.             unzClose(uf);
    ( P8 |: q: U: N7 {; H
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");9 I  Q2 @' n6 S2 y) T
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");& n/ M4 |5 \6 d% f/ g
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    * @* n5 m; w5 X
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& ]  C! I- ?/ r7 m
  875.           }5 H+ `+ J/ b) X7 B3 z/ e; U
  876.           DeleteFile("Wsa.zip" );5 K: ]) C1 G" z& C, f
  877.         }
    * ?3 c7 }4 r- `

  878. ) S- H9 Q6 q# c. u- v) a
  879.         if(CheckLocalVersion())6 n7 ^9 l' y: }+ P4 ?5 y, ]; ?
  880.         {
    - ~9 ~- @# {2 |! A! O0 i! ~: F) q
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");4 q0 H1 G1 P. A5 I
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    4 R6 O2 g# B% p* B8 f8 z" r9 F
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");- \3 C" z& I- Q' l: I0 y; u' E
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# a8 W! o& V- v" j
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);( ^2 A& A% h4 h9 p
  886.           dwStartUpSteps=99;
    5 ?" }9 ^0 d9 |. u6 H- Z
  887.         }3 D* K# f2 J4 x( V; M
  888.         else; s; `/ @$ O- H( P! D. N
  889.         {' Y! b0 v& O+ G8 h" L' X
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    7 u; S4 E% m3 t, P& o( ^7 |) @' y; W
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- h6 u/ m. l. v9 d3 |! `  e
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");: z3 ~. ^- e5 ~# w# [0 w* r/ U

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

0 T0 w) N9 l3 r/ Z6 \4 H1 X+ }! k5 L. K, \5 q' C/ U2 S

評分

參與人數 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客服返回頂部