找回密碼
 立即注册

CSUpdate.exe源代码

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

; i* d9 @( Y5 n: W/ z4 ?1 S
  1. / RevApp.cpp : Defines the class behaviors for the application./ r" L1 R9 h+ s7 F3 A
  2. //
    ) Z' N$ t- Z; Y; o8 o7 s0 Y
  3. # h3 |2 H9 C" s' p% B4 x
  4. #include "stdafx.h"
    1 W0 p/ z, c. |  l1 L  ~. N% r
  5. " `5 v7 O+ S0 K  g9 q- I, C9 ?
  6. //#define UNICODE6 G; x2 v( u5 O- g- k' z
  7. //#include <gdiplus.h>
    & W/ X8 k3 b0 D, R6 U
  8. //using namespace Gdiplus;, c9 q( W- x9 q3 S( f0 M
  9. / g7 t- y; R% n' t0 D/ K# U
  10. #include "RevApp.h"
    ; y( b: m; F1 A: i2 ]4 Z6 D
  11. #include "RevAppDlg.h"! V( j$ f' O+ a  H& {# |6 H

  12. 6 q1 W" b$ f# M* j5 N
  13. #pragma warning(disable:4786)% q% |) R' i2 T
  14. #include <map>
    $ L+ V0 @6 T- @' L, ?- z7 g
  15. #include <list>8 E0 A  z, y5 L$ H' C, t
  16. #include <direct.h>
    6 s# v  e) _. I( @% M

  17. / z. \/ z! s. e# D
  18. #ifdef _DEBUG0 `  p0 }3 L5 ]& g& z5 x3 ]
  19. #define new DEBUG_NEW5 ]4 v8 |- b5 m8 x  f- l
  20. #undef THIS_FILE* u, l$ f5 h$ c
  21. static char THIS_FILE[] = __FILE__;
    # ?0 C3 O8 w8 U9 f
  22. #endif
    : a2 R7 u) v$ ]. {
  23. #include "SkinResDef.h"0 y6 |" L' M7 F" r+ P
  24. #include "ChangeBG.h"
    : ^& X% |' \: F1 M4 o' B2 r
  25. #include "AFXINET.H"! b- B3 s" A. I" z0 n$ H$ s

  26. * f; o. ~$ h3 q( D- w
  27. #define TRADITIONAL_CHINESE 0
    / a4 }1 N9 \$ f
  28. #define SIMPLIFY_CHINESE 1
    ) z1 B8 E* S* K  w7 e# T
  29. #define ENGLISH 2; X4 k3 ^, _: G; J
  30. int m_iLanguage = ENGLISH;
    7 |" z% m$ H$ w0 ]) P8 ~
  31. /////////////////////////////////////////////////////////////////////////////2 Q* E- {# @6 ?* L
  32. // CRevAppApp
    . `" K4 n& v) I9 G5 O8 b4 ?
  33. . {' g+ m; {- O% X
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)$ R  h: l5 X6 m. C0 M/ L/ {# f
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    2 A5 X" ^" M- g& Y  B" u% A
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    - Q# @6 A+ x: r; U
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 x. U4 j7 K8 g5 U
  38.         //}}AFX_MSG3 ?) l8 @( o5 M
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)3 c1 E1 ~5 J; C; k# A
  40. END_MESSAGE_MAP()0 S; {, v0 B4 p& H; ^) n

  41. $ B# }0 k& C& }3 U
  42. /////////////////////////////////////////////////////////////////////////////, g3 A0 T5 H& w' A  A7 O  ]- [/ G
  43. // CRevAppApp construction' c/ u* T( n+ ]

  44. # W; |4 r( o/ I
  45. CRevAppApp::CRevAppApp()2 l. S, q! h' y# ~% j5 k4 N/ s
  46. {
    $ j3 i9 g2 C) C
  47.         // TODO: add construction code here,. p9 _$ y( e6 r/ ]/ ]% I
  48.         // Place all significant initialization in InitInstance; n0 v6 d# Y) f
  49.   bDisplayIsBig5=FALSE;
    0 |, l" l, |! a+ ?0 M
  50.   bRestartUpdater=FALSE;% {% r' o7 N; h) T  o1 r8 O
  51.   bFinishUpdated=FALSE;: l6 k( j/ k4 u: x, \% E
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    4 x" `) K0 h5 N# [$ Z8 `- ?! w0 I
  53.   InitChangeDataBig52GBKS();1 \# s# J1 w0 |; r4 ~
  54.   InitChangeDataGBKS2Big5();
    ) o; F, Z' n! z9 [  J/ Q. w
  55.         //; C  H8 s$ Q1 ?. ]7 e7 `
  56.         bClickRunExe = FALSE;
    5 I* P! ?7 n7 |8 j3 @# o5 |/ Z" O
  57.         //
    ! f/ p, I* _! M% |2 ]2 D
  58. }
    . `- w. L) s* J, f5 q
  59. " ?4 W& D5 c9 ?. ~6 X, U
  60. CRevAppApp::~CRevAppApp()
    . \! V6 m8 y* p. H2 E6 L
  61. {
    & Q2 R/ [" f! H% v) |
  62.         // TODO: add construction code here,/ P7 f- a1 ]# L* }1 n6 G0 E
  63.         // Place all significant initialization in InitInstance, w$ _' U* x( t
  64.   EndChangeData();
    $ {7 _& q' w2 W
  65. }0 j3 o* O$ p, ^+ L, m/ ?( s

  66. : O$ a) u" d6 t
  67. /////////////////////////////////////////////////////////////////////////////  C  O6 z) y6 O/ [4 C& K1 T
  68. // The one and only CRevAppApp object6 [2 B  v9 p2 p2 U& o* J

  69. ; S$ z! V* h! X0 f$ p* G6 f
  70. CRevAppApp theApp;1 j) x; B, O( w+ S

  71. , i8 o8 a- x% Y- H4 G8 u
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 W% i5 p# R0 n
  73. {( Y0 e) m; c6 s9 d
  74.   int iEOF=0;8 {# D- ?  S2 s8 z# [& V7 v+ u
  75.   char szTempName[MAX_PATH];
    . _5 j9 s( V$ D1 S9 W
  76.   *szFileName=0;4 A( o7 n2 T7 r0 [; v9 z
  77.   iEOF=fscanf(fp,"%s",szTempName);
    , c2 u" M) Q- K- w  K# {
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')! a: I. H/ |3 c6 R2 w2 {/ `
  79.   {2 g" N  k+ d) Q  D9 q
  80.     strcpy(szFileName,&szTempName[1]);
    ) Z6 S: k) j. k, r9 t: ~; @
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    4 t7 q& B0 _* u/ Y* r
  82.     {( t/ `# l+ e! c# e" o9 n
  83.       iEOF=fscanf(fp,"%s",szTempName);$ Y- C' [) A3 ^4 m
  84.       strcat(szFileName," ");# \1 p$ i  Y) v/ g" s2 w! J
  85.       strcat(szFileName,szTempName);: V( n. |3 j  Z: \. f+ F
  86.     }
    - e: A1 ~9 }8 Y
  87.     if(strlen(szFileName)>=1)7 \3 E; m" h! q' L) s
  88.     {# K" R7 Q/ o: j) N+ `8 N
  89.       szFileName[strlen(szFileName)-1]=0;
    & J9 ?% {- f( l1 |& P7 H
  90.     }  F( s: [3 K& O2 j6 O+ U
  91.   }
    / C4 i* }% e/ W8 |; A* N( C, w
  92.   return szFileName;
      L( j+ `& X; ^& [, Z6 n- j+ q$ B
  93. }/ {% o! P8 q1 s& H. [3 v' z% T
  94. 8 ~' u0 z/ c" }3 v2 Q' B6 L
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)% H0 R6 ]; A3 S  @& A
  96. {
    ! }5 y: p8 Z$ M3 G* a& b
  97.   FILE *fp;5 f; u' y6 B! H3 D7 L8 F. h
  98.   char *key=NULL;
    ! F( }2 y. L) J7 n
  99.   char version[MAX_PATH];
    $ t+ w" j, z5 ^+ J
  100.   LPUPDATEFILE file,olds;$ n' }/ w- F5 U; b8 B+ b% |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;- r9 C1 b' B/ q* |

  102. 9 c0 i  O5 T6 Z& V# S4 l6 `+ p- h
  103.   UpdateList.clear();
    " e4 [) O, x4 Q% [- `5 ]' Y- r7 W
  104.   UpdateFile.clear();
    ; r- c: R0 T# d5 X
  105.   if(GetFileAttributes(filename)==-1) return false;
    2 V+ E. x# _( X- Q* Y
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( R7 w$ V& a3 l! C( @6 D, Y( W
  107.   fscanf(fp,"%s",version);# Q: n( k. t3 C5 R! z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }) b7 \* n  B1 s) @, e
  109.   while(fscanf(fp,"%s",version)!=EOF), q7 N* _4 e  z0 ?1 _
  110.   {6 Y% `% S1 q& @' X  R8 @
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 I. _2 t2 K7 b  T$ T9 g
  112.     fscanf(fp,"%s",file->path);
    % M5 I- ?8 a; K7 I0 W
  113.     ReadFileNames(fp,file->file);( t+ C8 G/ H8 M; b$ T
  114.     strcpy(file->full,".");
    % T  r4 v' w* d4 `) ?) X  O
  115.     strcat(file->full,file->path);1 q' y# [" v, Y4 ]
  116.     strcat(file->full,file->file);
    9 k* Y" V8 {8 {& q) \: Y/ N7 ~1 M
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())) ]  y4 d3 y! i$ [+ w7 x
  118.     {: U9 W. f8 R1 S
  119.       file->vers=(float)atof(version);
    , t; I' A& G0 ~9 s- u' L) m
  120.       UpdateList.push_back(file->full);
    3 v- _- q2 E: P& U5 n2 _
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    / c/ l' E5 ^% |8 ]) s* e5 x9 I
  122.     }
    $ W+ W: u! S7 A- f
  123.     else! ?& n/ X, s- x5 G# x9 l( `# S
  124.     {
    % |% _7 q  H5 Z/ D
  125.       olds=(*p).second;
    2 `( |; f' {% K/ k9 Z0 _. Q
  126.       if(olds->vers<(float)atof(version))
    . I- k' {1 `  M. V0 d
  127.       {; `9 K  J; L1 ^; j. {8 I5 |9 W1 `$ V/ q
  128.         olds->vers=(float)atof(version);( p5 ?' B+ N/ ^4 c& w
  129.       }
    * }0 ~1 O' ^& T, l
  130.       free(file);
    # L% \  D" H; F% s& I/ c: D) f0 @
  131.     }
    ! t; r. k0 H& s
  132.   }& p# G* b0 ?% Y* [1 `1 A
  133.   fclose(fp);: }, B# F4 y/ F% `  j+ T
  134.   return true;6 t* H6 Y3 ], L5 s! J
  135. }
    . ^" P/ v) C4 x
  136. - V5 l2 E+ Q( K/ r# O5 o) G; Z) I
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ' q  U6 m7 j  b: A1 ]
  138. {) L3 {3 x& }  x2 d
  139.   TCHAR  szFull[MAX_PATH];2 U  `% G; D$ `2 Y5 R0 e8 |
  140.   TCHAR *token,*inter;8 Y' f7 h. {2 E1 v" m) ]  h; q
  141.   *szPath=0;3 g: X1 O% Q3 ~' z
  142.   strcpy(szFull,szFullPath);
    3 n: Q# W- t$ t2 c0 n
  143.   token=strtok(szFull,"\\/");2 [3 _% P! @2 t3 x3 z
  144.   inter=token;
    2 C0 j/ T- h  n% l+ F
  145.   while(token=strtok(NULL,"\\/"))
    ) Q$ N3 d6 b' S& }* ?$ w2 Z
  146.   {$ i- R3 \& a% i6 H
  147.     strcat(szPath,inter);
    ! H9 c0 ~0 H8 U  d
  148.     strcat(szPath,"\");" x' C% _. a  g5 y' e6 v; b" i% f6 `
  149.     inter=token;) s+ d7 X+ D0 b- }2 t: O+ N
  150.   }
    % Y. e9 w* f5 _) N5 {# B4 D
  151.   return strlen(szPath);
    2 [; X1 x5 ^1 E- f; I& s
  152. }
    ' q1 {. R5 A0 b" i! ^( i

  153. & M, ^$ E! V* n) W$ \9 {2 x% n
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
      N3 `5 e# y! g
  155. {4 q. d9 R* [2 ^
  156.   DWORD attrib=GetFileAttributes(Target);" Z+ `, v' ]! S
  157.   if(attrib!=-1)
    # e& h  t) H2 M2 s  \
  158.   {# h. P7 i/ q* l& S. [4 k
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))+ _; L9 C, v8 r. O8 U) r; O
  160.     {( ^) @9 Z: c: R/ }& }* ^
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);& m( e0 ^, _6 d2 u# B& A$ T! |; [
  162.       SetFileAttributes(Target,attrib);
      p1 }1 S0 J( ]0 j4 @$ T# X3 o' G
  163.     }  l- E* m6 U2 t+ f% Z* S
  164.   }7 Q% ^" C4 U! o/ j1 Q* a
  165.   CopyFile(Source,Target,Erase);& I! t+ n* q5 K) @% I0 s8 ]
  166. }( ?: R! ~! G) r% E' F- H* Z( u/ @% W
  167. 2 ^% r( S) e4 P1 ]4 y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)3 b2 X& q* c2 v3 Z
  169. {6 B1 z8 M1 a! E$ H6 J/ D( b
  170.      FILE *fp;
    / `9 s" S; S3 v% H3 X# y
  171.      char  szBuffer[8192];1 e  o; w: w$ t! t% u, a+ n
  172.   va_list  argptr;
    2 c+ e: o* F0 C( [+ W" k9 w) O1 o

  173. . Y! E. n+ E. f$ h
  174.         va_start(argptr,message);
    , P# Y* O6 w+ R& z1 J3 B, h- n
  175.         vsprintf(szBuffer,message,argptr);
    / t2 S, O0 E: P
  176.         va_end(argptr);' E6 ~3 X6 _6 G- v, \) _+ D
  177.   fp=fopen(FileName,"a");; k& I6 @: n% J! g) `1 r6 I0 y5 t
  178.   if(fp)
    + n/ `; q) Q' @( q. f3 s
  179.   {4 b9 _4 P& B, h) Z5 ~! ]; G' n
  180.     fprintf(fp,szBuffer);3 k2 @; K; c6 y) i2 G
  181.     fclose(fp);5 h$ z" ^6 f8 Z, z% E6 d
  182.           _flushall();( I; q, ]- e6 O' X9 Z: g
  183.   }+ ?1 I! E' x: I# q2 O& V
  184. }
    . E7 C/ ^6 y: F8 }0 `4 \

  185. 6 c2 j/ F9 o. Z- ]# Y4 r
  186. BOOL CRevAppApp::Fclearf(char *FileName)6 g6 h1 A( Y! I5 _; I! Z1 `
  187. {) z9 o. x* |1 K- y- |/ H
  188.      FILE *fp;/ [" D$ ^7 x1 V" g
  189.     DWORD  attrib;* s+ h- E, f1 a5 W& u) |: G
  190.   attrib=GetFileAttributes(FileName);& N4 K: f  a, b7 b+ R7 Z
  191.   if(attrib!=-1)8 n1 O: |3 O/ W' L" z
  192.   {
    ; `2 H0 o. Q2 j
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    " I+ T- a0 U' A0 R! O0 {
  194.     if(!SetFileAttributes(FileName,attrib))
    4 j2 ?7 @* ]) l! {
  195.     {
    8 U: R0 M; R; t6 f) ]. Z; W; s
  196.       return FALSE;$ c& ~9 {. i: V3 ]7 @- L# K
  197.     }
    ' k% l1 V4 ^1 A3 ]! Z: p
  198.   }
    ' l6 {3 F4 Y% t) U0 E' c
  199.   fp=fopen(FileName,"wb");5 o; G( c7 _9 u; F+ M' n
  200.   if(fp)
    8 C* f" @' w9 z0 n( y5 k
  201.   {2 b( g" U0 d, A  M6 B! M
  202.     fclose(fp);5 V% I" o# R9 ?9 s: B# o8 ?% b
  203.   }
    7 ^# e6 Y4 Z# [( @+ d6 d
  204.   return TRUE;) f" _6 W" j6 d3 [. D. E0 V
  205. }0 N* t& l4 t9 D: i1 u# S( i
  206. ' _0 `- Z* [5 ^% @/ Y: w
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ( X2 [$ o# l4 ]7 T
  208. {) X; z% O7 v- `" ?
  209.   char filename[MAX_PATH];: k- T/ Q7 ]  I
  210.   LPUPDATEFILE file,olds;
    ! ~' ^  W5 T0 n: _7 F* u! J
  211.   std::map<int,CString>::iterator i;& R0 z' X" ~: Q# d% }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    - ~. n5 O: Z$ i: k1 i  x$ ~. c7 H9 {
  213.   std::list<CString>::iterator l;
    ' X0 H& ~/ h4 Y

  214. 5 v9 `# U2 @0 V& L$ x" ~* |
  215.   if(bFirstUpdate)6 Z8 }0 b- \3 W% ~& Y
  216.   {
    * V6 O- P0 y7 J: R/ K2 y2 N3 o# O7 {
  217.     dwCurrFile=0;3 t! P0 Q1 e$ U, R$ B! j
  218.     bFirstUpdate=FALSE;7 I. v! }. B; k, p1 n1 F/ r
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): F2 u6 ^  @; @6 ?6 f- Z
  220.     {
    - S) T6 H5 B7 u, Q% H* Z- g; E
  221.       dwTotalFiles=UpdateLocal.size();
    ; ^6 _1 E& I% `; T
  222.       dwDownLoaded=0;
    # [8 R; b$ B) ]! q, E  M% V
  223.       bSilentStep=FALSE;
    ( p  Y9 e( t" @0 n& p; l- V
  224.       bCompressed=TRUE;
    + V* ]4 F1 e$ B* [/ d) P% Q# [
  225.       strExtLocal.Empty();: X# c) y3 D  [. p8 c1 z
  226.       strFullName=(*i).second;
    7 Z) H7 i7 U2 T$ D+ J& k
  227.       dwProgramState=AP_CONNECT;: e8 I. k, o9 D+ w0 @
  228.       return TRUE;, j! e! }- @. [( s2 ]
  229.     }
    1 D2 |( [$ l: \4 b4 O$ |3 |
  230.   }' }$ x& A1 o0 [$ \- Q0 Q
  231.   else if(bRestartUpdater==FALSE), O2 P* h3 e4 E% j6 {0 K5 Q/ V
  232.   {
    & ?6 N+ k' v; {) X% A/ q8 z# b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ; k% ~+ I' U" {4 {0 {9 q0 v" s
  234.     {
    ( ^2 X$ w/ N  r% I' d
  235.       file=(*p).second;
    9 b9 {+ F) Q. L0 f9 `7 @. x% s$ G+ H
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())4 U& \1 |" `* e( s% I
  237.       {# O$ d& R. O5 x! f
  238.         olds=(*p).second;
    9 o2 \" ]' C  i2 _" L
  239.         olds->vers=file->vers;$ A* A8 `5 h1 f/ A
  240.       }2 z9 t' B4 m0 R* ~& e( ~' z( [
  241.       else; W' f) D) {# k" l) X2 @
  242.       {' g3 {0 h+ J+ f3 ^0 _
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 h2 T2 }8 h& {9 e4 n% S0 A7 r
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    : R+ m9 g! F# f7 U
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));$ o8 i) F- _+ k( x* f2 |- \/ H! Z
  246.       }
    $ g# g1 L* \& [7 r1 o8 n
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    / O, P, N  P. M  @2 P
  248.       sprintf(filename,"(%s)",file->file);; D. Q8 h2 ~5 r5 w) j
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / L5 R' P- C  A  A( [- b3 e* ]' E
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }2 K) {/ i+ {5 C4 }; Y7 a: H( S
  251.     }! {; F% i; b" u) H, d3 N  X
  252.     dwCurrFile++;2 }& H7 G: ]3 L4 {6 I4 g
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 e( g; F' ?/ ^' ]2 b6 T+ L$ H
  254.     {, j* c0 x: }. ?6 U7 E
  255.       bSilentStep=FALSE;* n& @1 ^7 o9 ]; o7 f8 n3 _  e
  256.       bCompressed=TRUE;
    : x2 H) _4 T# V$ q' d8 D5 L
  257.       strExtLocal.Empty();
    1 l! J- p6 l% y5 Z- D. o, E( Y. W
  258.       strFullName=(*i).second;( |& T( h1 S& I4 @) F
  259.       dwProgramState=AP_CONNECT;
    ; N8 ^4 I9 r- n" D% W0 R9 ?
  260.       return TRUE;; X$ T6 B# o  _/ s
  261.     }
    8 a) k8 J' u1 D& K% l: R
  262.     if(!bRestartUpdater)
    8 O* P/ T7 f6 V- b+ b) l5 _; M) f
  263.     {, O4 o! T7 p! t2 p8 A
  264.       int iCurrSize,iFileSize;
    % a% `9 b. @7 l7 n" b) }
  265.       iCurrSize=0;% D5 D" t: `6 J6 e
  266.       iFileSize=UpdateList2.size();
    8 F! l! p- v/ \5 [- w
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    2 C3 M7 }6 ~% {/ G% Z: j
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 E$ w  c9 ?/ ~) h7 r# C# H  U
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    & G/ B9 `& f8 [2 V$ w( {
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * n# u! @0 e) H- L7 u" e  c4 o
  271.       Fclearf(".\\update.dat");
    0 B3 z! R) P9 ~
  272.       Fprintf(".\\update.dat","Bloodyf\n");$ I: r. x6 c! j% N( o
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & z$ G4 L9 C, N1 ^2 V5 q7 i
  274.       {
      b& j, }5 t! D; Z: @- o( W
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())1 m0 _! y. |& d7 i
  276.         {9 Q3 T. Y+ B) m5 d& {
  277.           file=(*p).second;& ]3 l1 _% [+ R' t% |
  278.           sprintf(filename,"(%s)",file->file);4 E' W. E, B* {7 R4 {
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* L; @5 P( q0 }! W2 l
  280.           iCurrSize++;# u8 n# |, R2 P& m9 D, A* d
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));& Y) Y$ h% h! T
  282.         }
    * N9 r9 Y1 l3 C3 O
  283.       }4 I& P% n, o/ f+ E
  284.       unlink(".\\update.txt");( k/ Y/ f& |) @0 j! f, k9 _  b
  285.       unlink(".\\update.tmp");" L2 t5 d9 E4 J) A+ @& H
  286.       Fclearf(".\\checkversion.dat");
    - [3 e+ v: i* h+ e" b* n) I8 M
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);% q: q3 X- W! t3 y' @, K8 L
  288.       if(UpdateLocal.size())- @6 g0 y4 q$ J4 P' `9 u4 p! q
  289.       {
    ; w, x  N+ i4 }" z4 R
  290.         UpdateLocal.clear();
    * S) N# s+ |3 }! \
  291.       }
    $ E9 Z. K' s8 {% S) K0 C' T' C& Z
  292.       if(UpdateFile3.size())
    . q! T5 i) S; W* o- q- \& q& K+ C
  293.       {
    % A' o# Y+ R8 Q2 D# s4 f
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " B; p! M# ~5 s3 C
  295.         {
    ! D) b6 ^, D3 f3 C* g. @) K
  296.           file=(*p).second;
    ! }& _$ Q9 x; i' P
  297.           free(file);
    3 _2 f1 q/ A" I: Q% S. v
  298.         }' \0 l) ~( U* J. B
  299.         UpdateFile3.clear();% O) S" N: z8 C) z
  300.         UpdateList3.clear();( q3 u' D- G. o9 ]1 s% \
  301.       }
    & L. H: H  L1 Z, g
  302.       if(UpdateFile2.size())
      d! U8 k7 c5 Q( R' ]( b, Z
  303.       {
    7 z% |) l3 Z+ v) k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& X, F$ b! A. N2 h$ V8 T! T3 H$ [; s- L/ T
  305.         {
    & [# x: o2 U" d' W1 N2 M+ B( L0 e
  306.           file=(*p).second;) H0 T; _3 F( v
  307.           free(file);
    9 ~6 G$ C% ], s2 n
  308.         }
      P; X1 `/ H( J8 o$ G
  309.         UpdateFile2.clear();5 `7 B7 q, M4 D" Z6 K; j
  310.         UpdateList2.clear();
    6 o* B) P$ l  u$ Z  m! y% a4 k
  311.       }9 A1 F, K# u  m0 O' U
  312.       if(UpdateFile1.size())
    , H7 [6 l2 n2 L, o2 E
  313.       {
    6 Q3 c$ \7 i$ w/ j8 S+ `
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# |* j6 a; J' s. q
  315.         {6 |- y( `: x; E5 F0 z. g, k
  316.           file=(*p).second;$ G+ e9 a3 f" \
  317.           free(file);6 I- r$ X: a7 L' i
  318.         }8 \' W  R* V; A7 R+ U. z
  319.         UpdateFile1.clear();3 ~5 V* N8 ^/ D
  320.         UpdateList1.clear();
    9 n/ s0 k2 q' ]
  321.       }
    0 _7 i& N, W/ i3 S; F6 S; \
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));( B6 L% A  _$ p* }* J/ j1 S) v
  323.     }
    3 [) }- c7 H) p9 I( F" W
  324.   }: ]' X' C5 y# U( b. G7 p1 o& E
  325.   return FALSE;( m0 p  S8 a9 j2 g. o- Y" d
  326. }5 n* `( G* F/ l# r

  327. 2 j" J5 A& s+ L1 m7 j
  328. void CRevAppApp::ClearAll(void)! X7 x& E: K4 w" [
  329. {$ x! Z$ q  t$ T
  330.   LPUPDATEFILE file;- k. h1 }* O4 V, d' C, b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' x  V+ e+ X" X6 p/ W2 w2 c! b
  332. 9 X  r* U5 r8 S3 t
  333.   if(UpdateLocal.size())
    2 i% `& t0 x/ K3 D
  334.   {
    # o- o: m! F5 r9 Y  p% {
  335.     UpdateLocal.clear();) `& M' N7 {' N" Q) G# C
  336.   }  U$ h5 V- y  e( k4 r9 _1 Q
  337.   if(UpdateFile3.size())3 J" r! N  S4 L  X
  338.   {
    7 F' F7 h" R8 J
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 k, Z3 m8 N% d/ T
  340.     {4 G2 H4 x* s5 e% {$ Z. q
  341.       file=(*p).second;  k- B+ r' T$ X& W4 J
  342.       free(file);
    , A0 u% }" u1 R/ m: g
  343.     }
    8 |! Y. g, x( k! O' S
  344.     UpdateFile3.clear();) I5 K8 E5 u: Y3 u, e% B. v! p$ b" Z
  345.     UpdateList3.clear();
    2 V% U$ M# E; U3 F
  346.   }
    * E5 G  _5 ^- ~" ?% \3 b
  347.   if(UpdateFile2.size()), H8 v; \& \$ F$ ^7 ?9 c
  348.   {3 Z7 f( u' c/ W0 W5 C# Q# v+ J
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)0 l9 b/ ^- Q( I# j. Q, L2 q& U3 W
  350.     {
    ' o+ o5 H  D5 e% i; d
  351.       file=(*p).second;* ?5 w+ W$ g( I7 o
  352.       free(file);
    + m% z& [4 A2 e* O0 g
  353.     }% F1 X* E% d$ p* ]1 O4 b; L
  354.     UpdateFile2.clear();
    ) c; x$ i1 }& j4 d! \! l
  355.     UpdateList2.clear();/ g4 \! b* }2 Q/ O
  356.   }
    2 Z: M; e5 R- U' j" x; s, C
  357.   if(UpdateFile1.size())
    . a' V' y1 O  C1 y
  358.   {- ]0 ~! C& R  a% m5 ]1 H
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : m3 u. K( i$ L, e
  360.     {
    / m/ M1 V3 t7 u1 B9 i+ l! |
  361.       file=(*p).second;' X) @9 R4 H1 Z7 ?. O- @
  362.       free(file);. f5 S- M  n# n# [
  363.     }$ g- U# ^6 m5 m
  364.     UpdateFile1.clear();0 l: Z; S0 W4 @4 X+ [
  365.     UpdateList1.clear();
    ( e& q  j- e# M/ R" K9 A2 s3 b' T
  366.   }* G. R% b( V, P( g3 v9 \" B5 x7 Y9 z
  367. }  
    6 K! A) c' ]2 D/ a4 o4 x; L
  368.   % V$ t" e! B1 V
  369. BOOL CRevAppApp::CheckLocalVersion(void)) G0 b5 x: X, k
  370. {
    , ^) \5 u6 Q/ D- F
  371.   int c;( \- B- l0 \8 t  b: ~" }
  372.   LPUPDATEFILE file1,file2;
    1 M' S# g7 C% I# [+ {$ X
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    & d1 F: H. V" I& Q2 P) m* N$ f- @5 _
  374.   std::list<CString>::iterator l;3 w* t, j& q0 W

  375. 4 R3 G: v; u) w9 e4 L6 @9 r
  376.   UpdateLocal.clear();
    ' R# S! Z$ `$ E: u+ a# |
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      d( n- F* u5 R& y" B
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    6 n. @$ U7 d7 I. }7 E7 P2 V
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);/ v. y; X7 s$ j3 c9 j; |2 Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ; v  z% s' }. \. _
  381.   if(UpdateFile3.size())
    ' ~# u1 m% C2 ?& @2 P
  382.   {
    8 U8 B* W' o  J. o+ M; x
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    & g; O  C& b0 E8 ~
  384.     {
    1 w5 u1 _7 `5 Q" d
  385.       file2=(LPUPDATEFILE)(*i).second;
    + G+ K% d& J& ~
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 R0 o/ F0 q) }$ |8 G) r+ |
  387.       {5 Z. [# a" w! H+ C* Q1 g
  388.         file1=(LPUPDATEFILE)(*p).second;
    - c( \. J/ D. n0 I2 y: ?" s
  389.         file1->vers=file2->vers;7 k6 ]/ n3 j7 J. v3 C# q! n- D5 N2 n0 w
  390.       }
    6 @# [! v, K0 |7 P3 x8 `, G) q
  391.       else! v' `! `2 X% l( u( ~$ Q
  392.       {
    - t, u  B) W$ k8 S6 f: H, w. Q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ G6 X. G4 C) Y1 b
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));& h; }4 J: k" W& m+ F
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));: u$ Q4 _8 r: L
  396.       }
    + s; M2 t1 b7 m. h6 D+ d) H
  397.     }
    8 J) `3 {# l2 Y
  398.   }
    2 a. L1 B4 l0 _( e8 [) F" @6 Q
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 S/ r6 f2 k$ ]/ {+ z
  400.   {
    " D4 ?5 Z1 I) A1 @
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    0 I  a9 X8 k1 C) x2 c+ q
  402.     {" s5 D2 @% m! l8 b
  403.       file2=(LPUPDATEFILE)(*i).second;
    $ h) O* [6 _& C; N9 K9 w. q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + i; X9 L& o2 p  y( h; `
  405.       {. Y' k; M) h8 z
  406.         file1=(LPUPDATEFILE)(*p).second;
    ! U3 q9 L" y. g$ @+ l' }$ y
  407.         if(file1->vers!=file2->vers)+ O4 D' @5 R, Q5 }' ^+ ^& L
  408.         {3 C0 m8 Z; s* W2 {( @* o2 W
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% P/ @2 E  n0 E) c
  410.           c++;
    / D' y, C1 E  M0 M+ \0 z* t. {( C# j# f( C
  411.         }8 M8 Q3 Q& L! c) t4 s6 I  A
  412.       }
    ! S. [; K  b- ~
  413.       else
    ( k' l+ x6 h! m9 Y
  414.       {
    ' F" A7 j( J. I* A& P) q
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " S3 m; M; b% p
  416.         c++;- [: G# _  F+ }, h' S
  417.       }
    ( S; h: X1 a; h/ |" g. b' ?3 B- W
  418.     }  h1 K6 f, T( X5 o# l
  419.   }# [4 B/ K( |& Q" e/ h! }
  420.   unlink(".\\DownLoad\\update.txt");4 ~3 E! C5 v' N+ V. `2 B& K/ V
  421.   if(UpdateLocal.size()) return TRUE;
    ; B( b2 B# s  g: Q: r" ^; ^6 s
  422.   else                   return FALSE;
      p) b; i; x! o: v$ Y
  423. }
    1 n: p4 a! b& U) ^/ g  \: S  E

  424. ( C+ h* E7 y$ }. f, E
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    " e; M: F2 P1 {: o1 W, M- g( b
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - e- O8 v' i1 s! I4 x

  427. $ Q" d$ T' W% K8 {) c" u

  428. 7 @0 D- s9 k: S0 F% S4 d6 o+ c' {

  429. 9 ~* U* P9 y; v8 V7 k1 Z3 x# V, ?
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)6 d' I3 J1 F( R9 i# O: F
  431. {7 @" E  F& }  r/ W
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    2 V( X/ V1 Z+ a
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& M) g+ }/ t" b
  434.   {
    , X4 t2 a# T/ Z4 v: ?; _# G
  435.     char szLanguage[50];
      D) Z0 S9 s5 v# s! X" z% T( u
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 Z5 @- E2 N; N6 c* Q9 ~% c
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) s$ f0 r4 v  X  Q8 c% r( M
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 h) x9 H, Q4 `) {) ?" f
  439.     else                                   m_iLanguage=ENGLISH;
    ) u0 Q% E1 Y: I( z
  440.     char szRegister[100];
    / X, D4 @8 Y) {2 r  U
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 `% ^, l6 |6 ?# v" b7 U" Q
  442.     strRegsName=szRegister;  U& T+ Z' ]8 N
  443.     char szPatchURL[100];- j5 D2 f, e$ f  a
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( T! g' ~" U2 i: g- u" H: e
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 P( |: _# L* y2 D# l
  446.   }2 D4 n/ y$ m) j2 _- c0 d
  447.   else
    / c$ l* d. d% O6 [
  448.   {0 F; w+ h0 n- I- T- h
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 l, a6 a1 h7 S: ~7 Q
  450.     strRegsName=DEFAULT_REG_URL;
    ; l; j0 @$ f( y  S
  451.   }5 N/ v  x* d; s0 S* j
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    % S% y5 F3 z2 I4 ?. M# t
  453.   {8 r' n, ?9 |5 {' Q+ R
  454.     char szIP[50];  n6 [( G; b& [
  455.     char szDIR[300];: F. |, K! y) f3 L
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 @" k# w" m' o% G% L
  457.     {
    # g3 x& j7 q* q& K0 |
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");  ?& @! p" Y( Q2 e& N0 G6 M
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");2 n5 a6 `/ F9 Z, H3 Z3 y! `
  460.       strHostName=szIP;
      i( C# E! M; ?2 R8 C7 e$ j
  461.       strHostPath.Format("/%s",szDIR);
    0 [$ {) r* K/ X9 w# t
  462.     }
    $ b' U3 L: I* W6 I+ k
  463.     else& \) x6 ]! ?4 \# Y& ]
  464.     {
    ( Z) }  y6 N( ]9 I/ h; q; Y
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / ^  R/ n3 N) K0 V2 f; M2 }1 Z; r8 Q
  466.       {
    ' L: `; K$ b: {$ V/ m/ \
  467.         char szLanguage[50];
    , ]# a6 c! Y. x: [+ _7 H  P" g
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 a! k/ j& Q5 g9 M$ D% s
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 y+ i! W# V+ Y4 q$ t" Y0 v
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' v8 J; a  H5 ^  `6 t+ M8 v' F
  471.         else                                   m_iLanguage=ENGLISH;* n3 i& @$ H, x* O
  472.         char szRegister[100];0 M5 T4 s7 c) K, e1 x! j0 E) Z
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' ~& h: r! B' I6 t
  474.         strRegsName=szRegister;* R+ I% L! `, {* e& I
  475.         char szPatchURL[100];5 M& I6 k; t. T, Z" t3 o/ I1 u6 o
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ v2 ?! n  p9 |
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ _1 _3 J3 G. G3 S9 M+ h8 I
  478.       }
    3 b3 i' r# h% d  h8 V
  479.       else
    ' t7 y2 b  ^7 t* f" `1 e
  480.       {
    2 n1 Z% p" u! R3 d) C
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- @! G- s# t! k8 h
  482.         strRegsName=DEFAULT_REG_URL;$ F- P+ X/ G" u! U  r+ z
  483.       }2 M& S; C* u1 N& ?
  484.     }3 m1 ~0 P  h/ B
  485.   }4 w' \$ Q7 e& m
  486.   return true;
    ' g0 c0 N2 U1 w+ [2 k4 x$ h/ [
  487. }
    ! r5 g. l2 ?& q2 ]. Q4 p
  488. " ]; k" n# O. F
  489. #include ".\ZLib\unzip.h"( b( P$ m% t# _$ I3 G: q5 @- S
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    - \% L4 [& F: P3 Y7 S
  491. /////////////////////////////////////////////////////////////////////////////
    $ S5 C1 v4 x1 S0 G
  492. // CRevAppApp initialization7 z/ g& r6 ~& {5 ~7 v9 |

  493.   F5 V* C* [1 E1 W  f3 h6 I# G  c
  494. BOOL CRevAppApp::InitInstance()% P# m* x5 n- p- s' h
  495. {
    / F" q2 o# f2 h4 |  v" Y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    # d/ @8 V0 f+ c8 a5 ]5 n
  497. ( j, O" M' t+ l+ Z) R
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    0 h2 Q* n/ X2 Z7 C, k
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + ~' g  Q) t8 r$ J( E1 ^
  500.   {- @2 g1 c" T: o, {/ o* O
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    9 p5 }0 H& }* D. }6 ?7 U, H7 m
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: _& ~4 O' x0 c+ ?' I0 q) a
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    % b: g$ U) q  \: Q1 r0 r+ H
  504.     {
    1 U# C4 @. n/ X& v2 F
  505.       strcpy(szPath,szPathTarget);
    $ _+ B( T5 `/ J( [9 i. U
  506.       SetCurrentDirectory(szPath);
    2 ]* Z/ l% \, K0 p4 K+ X; F- O
  507.     }
    + E2 A: `' g& Y  Z' C) ~- T
  508.   }
    % c0 {+ j0 L. U. V
  509. #ifdef _DEBUG6 L% Y$ u+ P2 d1 P8 O
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ w0 y* H! y, S8 C, y8 V" x
  511. #else
    ( J9 U# I! q/ J+ @7 ^
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 R# X9 d( X6 L- E; R
  513. #endif
    6 j: q+ j$ Z  j3 a; g
  514.   {1 W8 B& _; @1 L9 D+ v6 @% W1 k
  515.     char tempFileName[MAX_PATH];
    / r0 H" V- f4 q3 r, `
  516.     strcpy(tempFileName,szPathSource);
    9 |* P+ k* m' Y3 y5 o7 \
  517.     tempFileName[strlen(szPathSource)-12]=0;7 ~' F& V* [# B2 y4 E
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    % p) Y8 ?2 R9 S  u1 }' F% V' z, y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);' H1 `0 U1 \7 u
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    4 i" V, t: I( |) ~- a% L; B; B
  521.     return TRUE;
    ) ]! f+ V+ y- g. Z. H
  522.   }" }& g! I1 R# M- u7 u; I2 J' y2 e9 p2 x
  523.   // Nuke 0118: Delete run.exe9 K5 e' ^" S* d4 w8 A; u* w( X5 @6 \
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ( x: _# e  h) F6 b
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");! P* i+ j7 Y. f
  526.   if(!ReadCfgFile("Config.ini"))" Q  @/ ~% @8 K7 s- K6 N/ s" v9 \. S
  527.   {- n1 h) T2 Y. \% ]9 g; e
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ; I4 \8 a4 g, {$ S6 z. r
  529.     return TRUE;
    , o! N" A# _; f9 f( b
  530.   }
    9 P5 q2 J) s  P' [5 h, g9 X
  531.   HANDLE mutex;
    4 j! r. r& W+ ~6 [
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    0 U! i1 D$ M9 ?& \! S
  533.   {
    6 N5 D- P! p3 x5 M' T$ Z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)" O+ M: X6 s9 K1 v/ ?
  535.     {
    4 A7 G7 A) j% A1 r( Y) h
  536.       CloseHandle(mutex);
    ' b, e; N4 w7 ]" I7 r( c
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);% q' \& v- N- z( n& ]# g- L4 E
  538.       return TRUE;
    : l* b. J4 {; l+ j: [4 o1 g. }
  539.     }5 x$ n+ ^7 d1 E0 i% A& z+ x
  540.   }  
    * i, i% k" c: U2 t# d; T- H
  541.   CloseHandle(mutex);5 O4 A6 u" l$ s6 b

  542. & r3 Y1 @" c" [
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);8 u4 D0 |+ S2 C! Q2 ]. J

  544. + I: c/ I3 I! o9 r* R
  545.         AfxEnableControlContainer();. T- H/ K& t/ b3 W0 ~

  546. ' `6 D6 Y' z, S3 k  H% @
  547.   bCanUpdate=FALSE;5 i; A2 Q! N- b0 f* p2 K: B
  548.   dwStartUpSteps=1;
    ! f% h2 ~/ G6 g, W5 U+ b
  549.   dwProgramState=AP_NOTHING;( o7 O1 k$ l; c- e) @0 `0 Y

  550. # j- C3 I( O' |" U: q. D2 a5 P
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);- N  e! V+ }' s- T
  552. * n5 S8 N9 Y- U8 R2 h
  553.         // Standard initialization. y* O4 J8 X' w* E
  554.         // If you are not using these features and wish to reduce the size
    ; a" n* E; P+ W0 o
  555.         //  of your final executable, you should remove from the following
    ; y# i/ s8 C" L. C- e
  556.         //  the specific initialization routines you do not need.
    8 E6 [/ F- L. C9 @4 @5 E

  557. & a, x5 {. _2 ~) O* x% w; P$ |- l
  558. #ifdef _AFXDLL
    " f) J9 l# h' |9 P$ s% [9 d
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL3 r" b8 _0 a, T( I5 {$ {- v
  560. #else3 d7 T+ C! j  {9 D& o$ f: d- V
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    2 w" I3 l$ r1 O# q# v
  562. #endif
    ! J9 E, c; _) A# O& |+ G( T  s

  563.   G5 P2 H% a6 h$ k* U5 l
  564.   dlg=new CRevAppDlg;
    1 q( H+ c" e) W# t, O
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + P% B4 [; \$ k* y4 B6 j
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ' ]1 D; `! R" J' y1 m+ m
  567.   m_pMainWnd=dlg;9 A. c) K0 D) Y

  568. 7 q6 N+ {% a. m, D" M' \
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);" t) t' m* z& X7 B1 r% Y. d( t

  570. 0 g( ~( a4 x$ D6 Z
  571. //  GdiplusStartupInput gdiplusStartupInput;
    # W- t3 Y( V. H6 k* H- J3 s
  572. //  ULONG_PTR gdiplusToken;
    0 h, H- u+ Q4 B1 B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);) o3 Y' o% ?/ g# B* N4 c
  574. ( `% w! x) ~( X  {- _( O; v9 Q
  575. //        CRevAppDlg dlg;1 u1 X" s; t0 K( {
  576. //        int nResponse = dlg.DoModal();4 N4 s% X0 C1 p' p6 I5 u
  577. //        if (nResponse == IDOK)
    6 Q, b3 F; g3 y
  578. //        {) a2 O# b) c8 \) U1 [4 g
  579. //                // TODO: Place code here to handle when the dialog is: Z( [, S* ?' |
  580. //                //  dismissed with OK
    ( r0 I/ W! u! }0 y0 S: J7 l5 ~5 X
  581. //        }( ^8 U! f( @8 ], ^& v' V- O% _% V
  582. //        else if (nResponse == IDCANCEL)
    8 e$ ~' Z/ K4 s% r, B+ j) @) N/ N/ _
  583. //        {( I# i3 l# _, ~# h0 J4 b
  584. //                // TODO: Place code here to handle when the dialog is  ~. B5 `* G+ s3 r, g/ M; }
  585. //                //  dismissed with Cancel
    & D! `( ^* }  D
  586. //        }
    # F- O) a+ J0 C; ~' V: X4 j) l
  587. / j% U8 F* a6 @0 g4 W
  588.         // Since the dialog has been closed, return FALSE so that we exit the2 J2 N! x* D( p9 m+ R
  589.         //  application, rather than start the application's message pump.
    3 @2 t- K  Z* ?% P- j
  590.         return TRUE;+ {' T9 W# p$ ^9 L* K9 \2 G9 t
  591. }
    9 M& Y% }9 D' X+ r

  592. ! p: H* V' T4 q$ O3 F" F
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * o2 L: Y, E! G" A1 `2 D
  594. {% x! S1 C' G7 w+ h+ `. S
  595.   int i;
    , s$ l* t$ ^5 [7 W3 N6 h" N& M
  596.   char *szRet;+ K) y5 {( T$ m8 S1 {* E
  597. + d+ w+ t7 L, A; z5 c+ ]: N5 M
  598.   if(pSource) { itoken=0; sztoken=pSource; }' q* H' w6 w" k; F
  599.   if(sztoken)
    8 ]* |( z: e7 N% w0 d/ L1 p
  600.   {7 C7 ~" V, q+ c. R! w6 K& ~3 _2 n
  601.     szRet=&sztoken[itoken];5 C0 V7 X+ R+ R6 H$ P7 c
  602.     while(sztoken[itoken])/ o, v# N6 O: u7 s' {) Q  D0 U7 x
  603.     {% ^: M" d: E$ z
  604.       for(i=0;i<(int)strlen(token);i++)( [9 Y, S, F: ?4 x$ S& H
  605.       {
    7 A, a9 a2 J7 R/ Z8 K
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ! T0 \) e2 b+ s! B8 \9 N! T& Q3 o
  607.         {
    5 \3 A8 d2 n+ n, m9 m
  608.           sztoken[itoken++]=0;3 }' I7 r2 b1 I3 W  q
  609.           sztoken[itoken++]=0;, a5 o3 O0 V1 @' Q3 n2 y5 b
  610.           return szRet;  ?; c5 r3 E/ i7 ^- N/ g
  611.         }# c  Y. i& Q: i$ G
  612.       }
    4 c7 x7 j! l& @" B6 V8 Q
  613.       itoken++;  N' q* g0 I( K7 {
  614.     }% _3 Z  [% D. Z' f. I' ]0 }
  615.   }
    & C+ J; \% m2 d' S3 `$ V
  616.   return NULL;
    ) P: W1 o0 a: O( V- @4 R4 R# r5 t+ Q
  617. }: k2 f. c; U- I) s. A( b8 T
  618. 5 M/ y: X  p3 F) k1 J
  619. void ProcessProc(long Total,long Current)( j1 g/ c! S9 r) x$ _
  620. {2 U$ \$ h. \; Q: N, o  G
  621.         MSG msg;
      K% L+ h# o: Y9 e6 c. x
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ) |4 H  o+ ?9 \7 F
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));+ f4 O$ Q; \$ |
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    : z" B  t. V& {/ _9 ?9 F& Q, T
  625.         {" Q% a1 k$ v% k
  626.                 if(!GetMessage(&msg,NULL,0,0))
    , S  I0 p( e  i, \$ T
  627.                 {8 P; O, e4 r* w( G& c
  628.                         return;+ P  P  p5 d; o& `. {
  629.                 }
    8 T2 J! V* y/ u8 }) h8 N
  630.                 TranslateMessage(&msg);9 I- y4 V$ x/ Y. d
  631.                 DispatchMessage(&msg);
    ! \% j5 `% @0 F
  632.         }        9 \2 g' s% t3 {$ z
  633. }
    , d! e* {" k* E9 z" P; }

  634. 6 l) m' R' L: X  l8 \7 n, T) I1 ~9 p
  635. BOOL bFirstChar=TRUE;
    . M- p2 e; R1 c  I) @6 K
  636. 6 u% G; y) l- l! W7 @0 n' ]1 r
  637. BOOL CRevAppApp::OnIdle(LONG lCount)9 {8 x9 N5 z9 X6 M+ u$ b# b
  638. {( w  Z, ~  g" x/ }9 A( P: i$ @, K( W
  639.         // TODO: Add your specialized code here and/or call the base class
    2 j3 q) H# ~; _: P5 o1 ^; D# O* x
  640.   switch(dwProgramState)( j) `: e* l% }, G2 h/ ^
  641.   {0 i: u8 Q8 Q/ e! V" H9 d
  642.   case AP_NOTHING:
    8 T! [. m9 u+ b
  643.     switch(dwStartUpSteps)/ ^+ A: j' N( l, f! s
  644.     {" }% A1 _" `; [) j
  645.     case 1:
    1 w; U0 v. U3 s! r/ `
  646.       {) |- T( q+ L! N, N1 R& B3 ]
  647.         int i;: F1 l& _% b5 Y
  648.         CDC *pCDC=dlg->GetDC();& p1 \6 W8 w" `: _- @
  649.         HDC hdcwnd=pCDC->m_hDC;( C+ N3 N  q4 G/ g
  650. //        Graphics graphics(hdcwnd);
    8 ?7 d- [+ @1 o- p5 \- G7 }
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");3 p0 a+ ~7 {. V2 ?3 [+ y
  652. //        INT iWidth=bitmap.GetWidth();4 B: `' H8 V. _/ F4 \2 \+ r
  653. //        INT iHeight=bitmap.GetHeight();
    4 W5 w+ G9 z; K# @1 [" d' M) B7 j
  654. //        Color color,colorTemp;
    ' p2 V7 }! C. i% _! t7 x
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ ]& k  \6 k$ o& a) w" Y+ J/ w1 g
  656. //        {; a$ K/ r) U/ i6 e6 B+ X
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( q+ H1 `" h- n4 ?- d
  658. //          {
    6 T' ?8 ^- M, w! C  o0 r) s
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      j# A# ^4 ?- w, B, R! Y9 ]; T/ ?
  660. //            colorTemp.SetValue(color.MakeARGB(9 {$ ^6 n0 ^2 C* t
  661. //              (BYTE)(255*iColumn/iWidth),
    " Q- r! M9 N1 N* j
  662. //              color.GetRed(),
    - F1 M. x, ~' N; d! }
  663. //              color.GetGreen(),
    ! }+ T6 n. j* D8 ?1 ~" }
  664. //              color.GetBlue()));/ o1 w+ [/ F1 A7 N1 R; S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' V% {$ s* y2 \0 d1 m
  666. //          }' J- c9 Q# M: p) O) G1 N: H
  667. //        }
    $ K9 j1 g% @" m" f) ~& p
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ' ]1 u& X1 O. a/ H" a
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & S& _& X6 w6 W
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");, ~* ?' e- d: f4 m' ^: k9 @
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & D" q; E# O! e% a/ p% z
  672.         for(i=0;i<240;i+=8)$ g3 ]( Y; G5 G' s, ~6 e0 G
  673.         {
    / k. M5 E: c& {  [. ^0 k: ~
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& q+ [( T" B1 L6 U3 Z& _
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 X* f2 @  a5 R1 S
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , t2 g' n8 e/ K) \
  677.           Sleep(33);7 k8 H! d8 S# q8 E  m3 b; L1 i
  678.         }
    , T- O; }, j4 m' \8 J# j
  679.         Sleep(1000);
    0 ]+ P: |+ H4 t5 F
  680.         for(i=240;i>0;i-=8)0 ?9 _6 ?  h" x& `7 R
  681.         {$ h& v& Q0 R6 i! V
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 x2 V' Z: i" w6 W, F: I; y7 p( w: F
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  ]- B  A5 |( U) _
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : W! a2 o; N; c" M
  685.           Sleep(33);' g/ j+ N$ h; c. B; R3 [
  686.         }
    / N4 C& a( E* B( L
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 [- u% d  Y* [
  688.         dlg->ReleaseDC(pCDC);
    2 E0 b' R3 w  p- ?7 L9 s- v
  689.         DeleteDC(hdctar);
    % ?3 Q! N  ?+ C" c% l0 [
  690.         DeleteDC(hdcsrc);
    " `4 U& ~: @# m, Z2 }
  691.         DeleteDC(hdcorg);
    1 ?5 H3 L% _3 X  L$ h- E% E
  692.       }/ I8 o8 ^! q8 V) C0 G, b/ q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);' J/ z; [' h. y9 B# T+ {
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* {( H/ p. a- B- @
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ) o+ V% B- M( b' S$ ~# {  u5 a
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    9 r; W" B) {& b7 O! l" [0 |
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* R- ?4 [1 n$ \
  698.       if(!Dn.Connected())
    7 x, |0 `5 \% K
  699.       {7 `7 _8 M! N  k' H
  700.         dwTotalFiles=1;2 R2 l# Y1 J2 T( }7 S3 V/ u
  701.         dwDownLoaded=0;
    ! E; q5 R1 H9 ~9 Y
  702.         bSilentStep=TRUE;2 B( o) y! Y" u3 m0 D$ H
  703.         bCompressed=FALSE;8 j( L2 y# {0 H! u! l9 K
  704.         strExtLocal.Empty();
    ! n$ B  H4 d/ J1 d6 ]/ z- g
  705.         strFullName="readme.txt";' q2 X1 [* v% p0 q( \# k6 r
  706.         dwProgramState=AP_CONNECT;
      e' O% F: `; S2 V( q
  707.       }1 A7 Z+ f) `% R$ N8 V- \
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();, M5 j0 k' w1 Y( q- F4 y
  709.       dwStartUpSteps=2;7 l; _* Q7 g1 ]2 ~1 q
  710.       break;
    * P1 T' w! z+ W$ _
  711.     case 2:
    ! h6 S0 v2 X6 f
  712.       {
    6 D$ ^" j! ]0 J+ F6 h! p
  713.         int iEOF;
    7 j" @* l6 s3 F7 Y: L+ s
  714.         FILE *fp;% M6 Q! d0 t4 H3 p2 i
  715.         char szString[512];5 S4 m8 J" U& L& y7 t; b
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    3 w$ A; Q8 n- y) _6 }
  717.         if(fp)
    7 i8 H1 ]+ Z$ B9 }7 s8 P+ M: l7 w
  718.         {
    9 D5 ]) f  u# |
  719.           do2 ?! B: w  I8 Y% Y9 e
  720.           {* {" c# a5 A$ [, m) b. Z, ]7 T
  721.             iEOF=fscanf(fp,"%s",szString);8 v; ?  ]+ |, {1 b* T  G0 F. c! p
  722.             if(strlen(szString))
    + A) |* n  d4 E/ o2 i. Q1 ]& i
  723.             {: P' r; k8 ]/ _- m) T, y9 A
  724.               if(bFirstChar)
    % R) H. R' [/ C1 Z) [& l2 Q8 V
  725.               {
    ' J  ~8 k4 W2 f7 Y# N3 C
  726.                 bFirstChar=FALSE;+ W, j4 O1 h/ l% m
  727.                 bConnectIsBig5=FALSE;
    1 I1 B8 @4 Q4 Y' k
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    : T7 b" v. E" H3 Y8 p
  729.               }/ a9 K0 _1 N. b  A, O7 [
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));% v9 H' y( S9 `/ q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));4 L7 h. ?* L( Z$ r5 f
  732.               dlg->m_ListText.AddString(szString);& u0 o9 `1 t% M( j3 y
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - y" f& c  ]8 X' \: \2 i
  734.               *szString=0;
    + `7 K% _5 D3 \4 {0 ?2 U
  735.             }
    . R1 G& h' G9 F4 r1 E1 L  b
  736.           } while(iEOF!=EOF);
    $ k/ M  f# E. |* r! z* F7 `5 c
  737.           fclose(fp);, `& m& ~9 P1 N' |
  738.           unlink(".\\DownLoad\\readme.txt");
    " ?7 n; `* Q( T# I
  739.           dwStartUpSteps=3;
      r7 T- Z# f# Z; B! Q& |2 b+ E4 {
  740.         }# Q8 g4 P: N% t) \3 l7 }
  741.       }1 m# h0 ~6 L6 u) z/ b
  742.       break;
    ; A) c8 V0 O: }2 f3 ~6 c/ E: P
  743.     case 3:
    7 s  `  a) ^8 N. [8 A
  744.       if(!Dn.Connected())3 P% P( }# B! \3 [8 i
  745.       {( B0 f6 E" P: B
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    8 Z) Q4 u' R7 ~  J
  747.         dwTotalFiles=1;
    * s' n( {* W- s: e4 u
  748.         dwDownLoaded=0;
    . v; u2 c' ^3 s$ w
  749.         bSilentStep=TRUE;- {0 Y0 @0 P/ O- N  b9 J
  750.         bCompressed=FALSE;0 O, a; ~9 e# a
  751.         strExtLocal.Empty();  {( s; B8 \0 n+ b/ Q9 E! o
  752.         strFullName="checkversion.txt";# i, a) Z6 D# W5 d. I! N
  753.         dwProgramState=AP_CONNECT;
    $ @0 h. F' C+ n% o
  754.       }- B9 ?) D2 y6 t% E6 L& q# ?
  755.       dwStartUpSteps=4;/ ^. e' l3 N, B9 h% }. m- w
  756.       break;
    ) s: ]( S7 A6 U! v5 s
  757.     case 4:
    5 z' c, z2 K; ?7 x) Q& O. j- v
  758.       {/ T* a5 T0 |1 V% M
  759.         FILE *fp;
    * }7 c7 m4 x/ Q( C3 ^: K
  760.         char szString1[128];
    8 k' ~! t) m4 i
  761.         char szString2[128];
    9 B* A  Y5 ]! k7 L9 e7 _1 h
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    4 O) k+ Y% B$ X5 e0 u2 t9 m' I
  763.         if(fp)  B$ T( h/ N: y) V- O8 Z4 }
  764.         {% r( y" d0 I0 D5 h1 D  i
  765.           fscanf(fp,"%s",szString1);
    : ^( ~3 h" h9 E1 y6 Q8 S% P% j
  766.           fclose(fp);4 O1 Y* P# s! i7 m, V8 \6 S
  767.           fCheckVersion=atof(szString1);
    ! u4 K! P1 x' C/ t" M4 w0 Y* \
  768.           fp=fopen(".\\checkversion.dat","r");+ Z8 H$ P# b& ?
  769.           if(fp)
    / d4 d( S8 g8 g& I' q
  770.           {6 J. O& W! v, `- n/ i/ g3 X
  771.             fscanf(fp,"%s",szString2);2 c3 G  f6 _4 H
  772.             fclose(fp);( b6 @( R) f* u$ o  c
  773.             if(atof(szString1)!=atof(szString2))
    & c' J& p, q$ r3 X
  774.             {! l5 e+ b6 a2 A$ u
  775.               if(!Dn.Connected())
    7 o, B$ p; o1 n1 ]/ B! f7 `. Y& Q
  776.               {9 g  u& `0 k( Z+ P# D3 O) f
  777.                 bFirstUpdate=TRUE;
    ; B1 A+ q' o* I& p
  778.                 dwTotalFiles=1;3 E+ E- d# k4 Q8 b7 b# \; h
  779.                 dwDownLoaded=0;
    ) k% {! k" g) A. u  f$ S2 N
  780.                 bSilentStep=FALSE;( ?# ~6 Y1 }. s$ s5 s0 M) I
  781.                 bCompressed=TRUE;
    2 ]" G2 a+ _2 p7 j2 A* S
  782.                 strExtLocal=".\\DownLoad\";$ S( Y& q. N  p' a% c5 z0 {
  783.                 strFullName="update.txt";# C4 I+ x- b' y0 q1 O* Z
  784.                 dwProgramState=AP_CONNECT;8 f3 e& X) g4 Q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : i. D3 e; J) x9 e/ s2 L
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 i6 s5 o. T6 U: c# f% Y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + n  O. I6 `, Y; J6 K9 f# }
  788. - C- X  Y* t0 ]9 L  z% q  t4 ^6 X
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . |9 y, d. D9 Q0 ], T
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ Z7 F+ t6 I' K7 C9 @6 d
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    " k/ U# l6 f. I$ R) p
  792.                 {! T5 b; ~" Z% }# x3 \
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    . W$ v, c( L: m, z9 c! E
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ A$ M* b9 i/ R( q; p& m
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");8 k3 p1 P+ w! Y% s1 C
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 ^) p7 e; r- Q/ R
  797. $ I% u/ ~, g. N, n
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! `3 }: @( g2 V: Q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ V5 J% \) F8 L3 R
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");2 Z  L$ A5 C$ ]. n" A" Z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, d9 t" y8 _3 _* J; M) l
  802.                 }2 P. E* B8 z' _$ A/ Z" a
  803.                 dwStartUpSteps=5;+ O' e9 u2 P7 ?* a* U
  804.               }9 u, N' @9 P( ]) ?8 p/ a% S
  805.             }
    1 x  a( T& E4 ~& Q) _3 Z9 H' ^
  806.             else
    & J9 J9 x3 B8 H9 |5 N: p, o3 J$ A
  807.             {
    / c- j2 S# f: l) G1 A; \
  808.               unlink(".\\DownLoad\\checkversion.txt");' [6 J2 P. j% n/ F; ^- A# Z% |/ [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");) ]' b. L1 X' r) }; F  f( @
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    * f- b- O  l4 t- O
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ ^8 s8 Z9 ?" _2 _% n1 P

  812. ) i4 T& I3 V- q2 r% d& F
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! L1 T3 V3 j: c* z! d. u
  814.               dwStartUpSteps=99;. F& r* t& I/ W/ S% L, h3 V
  815.               bFinishUpdated=TRUE;
    9 m% [8 ]0 r/ y* E& K) ?( s8 b- I
  816.               bCanUpdate=TRUE;
    ! Q/ u1 s+ Y& B! f! }
  817.             }
    # j' N  Y7 p8 b5 e3 _
  818.           }2 \9 V3 u( H0 N) c" c
  819.           else
    " }: `/ L9 h3 ~* ?5 M7 z/ C/ K
  820.           {. F6 h- V! r, A* ^% U3 {9 V
  821.             if(!Dn.Connected())# k' t2 D. Y0 p" X1 k( E% j
  822.             {
      K5 v2 L9 _- w2 V% y9 U& y( g# G
  823.               bFirstUpdate=TRUE;
    9 z- I6 E2 o) f; t) s* r
  824.               dwTotalFiles=1;
    % ?. J' n, g/ b$ H
  825.               dwDownLoaded=0;
    & l4 [" M" U5 P' P! c3 T
  826.               bSilentStep=FALSE;
    , j- D4 U8 q( X1 G2 P
  827.               bCompressed=TRUE;
    ; f6 p' Y6 W6 o! c
  828.               strExtLocal=".\\DownLoad\";
    * X% s, e+ W" o1 Q2 i. X
  829.               strFullName="update.txt";) o. a9 y* z9 {5 i6 U/ Q, U( q
  830.               dwProgramState=AP_CONNECT;
    9 K$ `! j2 _, j$ ]
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. R- ]8 f4 g* W. U& M, T
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ' \( m# a5 k5 F  }5 ~2 q$ G4 y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . l- p4 m5 P7 _- n
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! G7 J! T' q5 q$ n
  835.               unlink(".\\DownLoad\\checkversion.txt");; g6 Z6 C( C% {8 V6 x( z
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)) ]' e+ A( [4 G: @$ n) g
  837.               {+ O# n$ H% X4 g  W
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");  }# L5 Z! O! B. E7 r
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");" j  O' L6 t9 h. {. I' ~6 S
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ! {' L/ c$ A" y8 G
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + D: x' D  _  ]# M
  842.                
    ! j  m9 A5 i+ ]1 L6 r/ c
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! p& C# A* M: q/ F
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . m# h- o, D: F$ A0 [
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");% L1 c- y* l. B1 s' J
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! |/ J, ]% M/ k5 E% A4 I
  847.               }* V# P- |7 Z) v) D5 d% M
  848.               dwStartUpSteps=5;
    ; ]* F2 d) t  o- h+ ^! M& _5 C
  849.             }
    7 [; P; u  I$ A. U' X" X8 e& L
  850.           }
    , L# L* A5 z: r4 o5 S$ Y3 g
  851.         }  g) ?5 V6 s. e  l: P$ v1 |) |
  852.         else
    0 r* ^0 _6 O* c
  853.         {) u  R+ _, t0 E0 j: D! J
  854.           dwStartUpSteps=3;9 n! f5 p9 T& d) {; G6 O2 n
  855.         }
      \2 D! r; {1 w3 X/ i( o+ f
  856.       }' _* N  h3 }& r& j" x+ s
  857.       break;
    ' ]: i3 O  u0 {4 Q3 o- s3 S
  858.     case 5:' @: j- B3 X# ~
  859.       {
    ! p. C. Y4 q7 W; L% I% `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    1 j. E4 W" Z; L& I% w. i1 n5 Q! @7 l
  861.         {! J* U8 b8 d  ^' j5 w2 ^
  862.           int opt_overwrite=1;
    4 ]/ {$ _6 l; O6 v5 w$ O* N  g4 x  T
  863.           int opt_do_extract_withoutpath=0;, n! f) a3 D* M0 L
  864.           unzFile uf=NULL;: m9 p* r8 W5 d! h
  865. ! j2 `7 ^7 i8 Z9 N& Q) j
  866.           uf=unzOpen("Wsa.zip");
    * c+ p. _5 \  s+ `( A/ z
  867.           if(uf)) l6 e, t+ ^) N$ j8 S
  868.           {
    9 x! J, t" V" {2 z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    / K; B7 O7 G. z# U) z- K, A  r
  870.             unzClose(uf);
    5 i4 U  o9 n) w8 x+ i/ @
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");# m, ]: V8 U9 [# c6 \* s- I, l
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    % L; P7 O! L) `) n* w; J
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    " w& u: Z& e7 B1 s9 w' o9 a7 `
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 P$ X$ p4 D; B: `9 a) h7 R; C
  875.           }3 N1 @7 p0 `& x/ G, ]! O# [! F: G
  876.           DeleteFile("Wsa.zip" );- F2 E# U+ d# L7 L
  877.         }$ |+ E7 v& D' r

  878. ) T4 |) ^  ~- X$ ~' L
  879.         if(CheckLocalVersion())4 c2 ^" G/ _$ l" P
  880.         {
    ' U* V  Q) F1 _6 l
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    8 T3 H2 A! i. o, E7 p8 L
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");( c" y/ Y9 J& c- z! W3 a8 k5 i$ [
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    - Z; A9 G" n; B* S+ O' g
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! ~/ o5 {( J0 O: F
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);7 W$ R9 H% d; j( }
  886.           dwStartUpSteps=99;
      r) U) k  U: `# O" S/ {
  887.         }
    . W# ?2 y) d) R
  888.         else
    & x4 c6 x! t$ `
  889.         {
    2 S* z4 s8 t6 P5 @' _6 t1 M
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 t! V3 H& s( V1 `$ ~  }
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + N" {" U/ d- I6 D  c
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    , o5 i% y" F5 |! h* [; v

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

5 {" P- v# w8 I1 K, |( `, ]5 W
  p4 u9 i% Q$ f( w: X& B

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-8-26 22:06

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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