找回密碼
 立即注册

CSUpdate.exe源代码

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

/ _; N( d( G3 m8 b& d3 L
  1. / RevApp.cpp : Defines the class behaviors for the application.! n* H( q* u( Q; F$ j
  2. //% c4 [# C; u6 B, o7 L& |: L! |

  3. ; `+ _  @! \/ o( I8 t, t  y1 B
  4. #include "stdafx.h". N3 V: {: D) t8 q; K# Y
  5. ) n7 E5 f5 F0 W" R9 x" o* N
  6. //#define UNICODE# e8 I# ^- d6 ]) q) j4 Z
  7. //#include <gdiplus.h>
    . ?; X; D& \" A. `" P
  8. //using namespace Gdiplus;8 |8 A& t3 U6 N" \, l$ i% h, I

  9. 5 v3 ]% W* [5 ?: T- ?$ U) I/ Z9 ~: g
  10. #include "RevApp.h"
    * _. M+ j0 l5 {/ R2 ~
  11. #include "RevAppDlg.h"$ L$ ?! W* Z) J1 X  w

  12. ; U. @. S' ]! c  d8 L. Y( _. a( R
  13. #pragma warning(disable:4786)
    3 W/ _% T. {/ U' _
  14. #include <map>
    " g4 _3 K, h  X
  15. #include <list>) H! i5 `1 H9 ^1 l7 j3 q
  16. #include <direct.h>  y8 @; |3 n. k6 u! Y

  17. ( E/ L3 f0 u3 _. e
  18. #ifdef _DEBUG+ ~0 V" ], [$ F/ ^
  19. #define new DEBUG_NEW8 k$ o1 Z% f8 L& [# A, |6 c
  20. #undef THIS_FILE
    * h$ S8 B, f  q
  21. static char THIS_FILE[] = __FILE__;$ p/ _* k+ E, D4 H+ ?3 m  k
  22. #endif
    6 y! L- ~. R$ `' g
  23. #include "SkinResDef.h"- }+ K: g1 k4 B
  24. #include "ChangeBG.h"
    * Y7 W. B- p( u8 I; E: M/ B
  25. #include "AFXINET.H"
    * a5 |+ X5 F6 p! D1 D

  26. ( a& g( D! x6 N' x; O" Z- o
  27. #define TRADITIONAL_CHINESE 0
    - S9 V/ R7 Q* A3 b: l
  28. #define SIMPLIFY_CHINESE 1; B6 d9 ?2 ]$ {2 x1 B4 V
  29. #define ENGLISH 2: a. A, r( b* ^
  30. int m_iLanguage = ENGLISH;8 t% F8 J1 v; n# Z7 K
  31. /////////////////////////////////////////////////////////////////////////////6 t, K% h( h4 W+ Q4 M/ f4 s
  32. // CRevAppApp! z0 Y# E$ p- C) j
  33. 8 f. e% F& @$ V# A$ w$ V$ u
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    8 r) ^4 y$ Z2 f0 U4 X
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    4 A9 Y4 O3 B, b
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 s3 ]# d( U1 f3 O0 T
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!# S  s  d: Z9 F8 e
  38.         //}}AFX_MSG
    ; R5 x5 Q. y* U- a  y4 x
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)1 G% b2 L3 C) T1 C% F) T  f9 r
  40. END_MESSAGE_MAP()' b, y% }. s7 h) t7 V

  41. 8 _$ g' P6 z8 w
  42. /////////////////////////////////////////////////////////////////////////////
    % h+ N' S- g( |; M/ w) i
  43. // CRevAppApp construction0 P, N' A$ a( c5 X" _

  44. # _; O" P3 A' Z
  45. CRevAppApp::CRevAppApp()7 d6 r4 Z& y( g% K; o: D, {
  46. {3 Q6 Z' [. q2 ~3 I
  47.         // TODO: add construction code here,
    ; g' z/ `5 Y, |, |" c
  48.         // Place all significant initialization in InitInstance2 V9 e9 L- t' }5 F
  49.   bDisplayIsBig5=FALSE;4 }1 Y0 k( `; @5 j# g' w
  50.   bRestartUpdater=FALSE;, {) x: v0 B% _
  51.   bFinishUpdated=FALSE;
    , v7 E5 b* S+ A
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;/ C* a! s  _6 V( Q  j7 F& a- E0 M
  53.   InitChangeDataBig52GBKS();/ A# i& P& a- E. b1 r( n! H1 Q" M
  54.   InitChangeDataGBKS2Big5();( {; b6 [( R9 F$ Q% a
  55.         //
    6 ?  O3 n$ R+ ~1 ]8 h6 u' y/ m
  56.         bClickRunExe = FALSE;5 b* N% f% ?, J" L4 h
  57.         //
    + J- J) N3 l5 }
  58. }
    3 w+ T, j# E3 h

  59. ( n( P% Q& n/ F: ]+ P
  60. CRevAppApp::~CRevAppApp()3 Q' J: v/ |' x: o; u# b$ ^" v
  61. {
    % O( T' J0 O+ |" z8 T7 k( m5 P! J
  62.         // TODO: add construction code here,& }0 M, r$ m* }' {
  63.         // Place all significant initialization in InitInstance3 _% g  a4 D# O/ `" F& ]4 p9 ?
  64.   EndChangeData();0 d  X9 O& a& Q2 {
  65. }
    4 Y" T3 ^8 G" R8 e& d- T

  66. 7 |+ V, y0 w/ u5 Z$ A* U4 E" g9 O
  67. /////////////////////////////////////////////////////////////////////////////! @7 Y% ^& `. b1 e
  68. // The one and only CRevAppApp object' H0 n7 X1 i: R% m! n- F9 K8 W
  69. 3 `; [5 ]8 e7 W1 i+ j" v- R
  70. CRevAppApp theApp;
    : I, Q% v% ~. I$ b- H8 L2 V

  71. 6 B3 Q1 V4 w& f+ F. |/ W1 H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)" G. P, o& W* q* [
  73. {
    ! R7 C' C5 _9 ]( c
  74.   int iEOF=0;4 @3 v1 X' Z1 X+ W6 L1 o; o' y
  75.   char szTempName[MAX_PATH];
    * T/ D4 F& `& s2 N% [# L* W* U
  76.   *szFileName=0;
    " E$ m& V! G# \" l! z. Q# A4 e2 A
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 I, h3 }4 U7 f& O; T
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    3 `( p4 g% k6 B) j$ T
  79.   {, Z- @+ S' ?2 V7 p5 B& C
  80.     strcpy(szFileName,&szTempName[1]);
    2 E5 x/ ~- o; \* Q! k% O% @' d& \, a% }
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)$ w8 ^  e2 f6 s, A/ M$ t9 g1 b) k
  82.     {1 h; A- R9 e* c/ t: v* N/ A- u/ p
  83.       iEOF=fscanf(fp,"%s",szTempName);. i) Q  R/ i; c5 a
  84.       strcat(szFileName," ");4 Z- P, `+ A2 ^. T& k9 Z7 b6 B
  85.       strcat(szFileName,szTempName);
    2 p# d( \% h: N  v4 L+ g
  86.     }
    - c# W  S  g4 `- Y) Y; ?% h
  87.     if(strlen(szFileName)>=1)7 B' {4 Q! Q+ ?/ }) v7 t
  88.     {: t7 z2 a% N# {) T
  89.       szFileName[strlen(szFileName)-1]=0;
    ) N& b4 Y2 c  Z  i* r/ C& {; [# W" A9 R
  90.     }
    . b7 |0 s! j" h* `' e- M
  91.   }
    / G. _% p5 |+ k, J
  92.   return szFileName;
    ! t6 w& w6 T# ]* I5 G' Q! o' a
  93. }' T/ X4 M1 G. R5 m$ q" L3 v+ [

  94. ' `+ `. [+ o4 u" }; z# n
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)7 P( R% h! Y, T! g7 f
  96. {* g3 q2 G* Y- \- k1 e& l
  97.   FILE *fp;
    ( [. d8 ^1 G8 ]4 x/ _
  98.   char *key=NULL;
    ! |; b/ O" Z! G- b5 e
  99.   char version[MAX_PATH];
    ( B  W- m. N4 {) Y( d
  100.   LPUPDATEFILE file,olds;, x# F) E* {2 F! W- `1 p' m
  101.   std::map<CString,LPUPDATEFILE>::iterator p;6 b1 s  j& j9 s

  102. 9 K( c; i) s+ @8 S: J
  103.   UpdateList.clear();, K6 U( D1 ]9 z- b/ A+ k- {9 f
  104.   UpdateFile.clear();
    ) b* d5 `1 O. W
  105.   if(GetFileAttributes(filename)==-1) return false;
    " b8 {" _) p0 r1 y
  106.   if(!(fp=fopen(filename,"r"))) return false;
    , ?0 O( Y  T* ?& o0 d6 c$ S
  107.   fscanf(fp,"%s",version);
    4 L3 P$ f8 Q8 G+ y3 n
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
      B8 ]" L- o+ T; D( F3 h- }5 r
  109.   while(fscanf(fp,"%s",version)!=EOF), D6 W1 P; x4 R
  110.   {
    - W3 h; H5 o5 K5 A. N! [/ M
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ Q% }# g9 p% q& Q
  112.     fscanf(fp,"%s",file->path);
    + B# t$ ]# L1 Y8 ^& [
  113.     ReadFileNames(fp,file->file);' G5 r$ \# d& n! e3 B! Y2 L
  114.     strcpy(file->full,".");9 F4 K1 C+ v4 f, ~+ I- ^  a; ?' m
  115.     strcat(file->full,file->path);1 }* }8 z( i+ E
  116.     strcat(file->full,file->file);7 c* O6 g$ D: U. r3 o# |  g2 c) J
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    . J; a5 y$ T; C2 \& N2 t
  118.     {
    2 k: g% B( N  N, u7 b
  119.       file->vers=(float)atof(version);
    9 S0 f+ C, {  K! ^4 q2 z& X& K. {
  120.       UpdateList.push_back(file->full);
    % v: u! z- A; U& H) x1 \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));1 L' W4 t0 E5 h$ |+ f+ F8 V
  122.     }
    3 ?- I9 N: t3 o. e# g2 B4 ^+ D
  123.     else' ~# z* _7 z- G" L: P
  124.     {
    7 ]6 U8 B# H# h" V
  125.       olds=(*p).second;! N7 F% i! X5 q5 O: U
  126.       if(olds->vers<(float)atof(version))% j3 T# X5 a. t5 w  w
  127.       {
    0 v, {4 R3 P  T* ?( i& {9 S
  128.         olds->vers=(float)atof(version);( r9 E+ g& }* W3 H* |: `
  129.       }8 Y# j  h$ i! I
  130.       free(file);# m* N6 q( n' n9 i
  131.     }
    + \! p1 Q* h+ Z' g. f
  132.   }3 A9 n" b/ s  R4 m" Y* M9 k6 f0 P
  133.   fclose(fp);# r4 Z8 g. c$ g) S0 j0 b
  134.   return true;
      Z, v0 T( \; P
  135. }  L* e  k  c" i/ x5 B
  136. ) v% |; C8 ]7 A  T& v* P  Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)$ ~+ q" k% Y+ }$ d7 i
  138. {( a0 a8 \$ E! n
  139.   TCHAR  szFull[MAX_PATH];
    . j# |' f3 r5 S1 M( p2 Z
  140.   TCHAR *token,*inter;
    1 J; R  k7 o8 X* V; V, @- Z
  141.   *szPath=0;
    6 O% U# M$ C. j, o
  142.   strcpy(szFull,szFullPath);4 h- Q) N8 s; D: f& |
  143.   token=strtok(szFull,"\\/");
    3 @5 O" e0 J, ^$ E
  144.   inter=token;
    . C  u" D' G( q! e
  145.   while(token=strtok(NULL,"\\/"))
    : n: f$ T% B. f3 {3 ]" @. M
  146.   {# ~. R$ L9 z8 A: f2 D
  147.     strcat(szPath,inter);7 b. @& q* d4 K: L
  148.     strcat(szPath,"\");
    ) h, e" n! z* M% R* F) v2 k
  149.     inter=token;
    # Z. v9 i+ w4 T. O5 ]' D8 P- \; Q7 m
  150.   }; E8 \8 ^' ?7 O5 y
  151.   return strlen(szPath);- ?2 h9 P: ]1 B5 D* O
  152. }
    * L2 d9 }$ _# C% r

  153. ' n, X! Q4 _( [0 P2 i& O+ o8 s
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    $ h4 U1 ]1 z4 Z- E3 y' B. t
  155. {
    6 v9 b0 A" ^7 f) ?4 u8 B
  156.   DWORD attrib=GetFileAttributes(Target);
    4 u8 i: P. _; M' U
  157.   if(attrib!=-1)
    + L; h4 [: W4 Z9 i/ Q
  158.   {
    5 m" S4 Q. l) J9 u/ N5 {! a% B
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))" r7 Q$ b" }0 V& F& e3 i
  160.     {: h/ P) r/ h8 J2 n8 u
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);( `9 Q, k- {4 s( f
  162.       SetFileAttributes(Target,attrib);) J/ K  d) n; N, a6 r! f
  163.     }
    ( }6 d* j+ R1 q. F+ P
  164.   }
      X- ?' {# F8 R
  165.   CopyFile(Source,Target,Erase);* s* N2 D; Y& ~0 S: J
  166. }
    . s# J$ S( ~) k% s4 L
  167. $ t: D) J" |( f" Q% q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...). _% v7 Z! Q6 N$ c1 A' C- Z
  169. {5 R$ N+ N( P& q& Q9 k4 k
  170.      FILE *fp;
    ( Y: b2 G) ]# I" y3 M" \0 M
  171.      char  szBuffer[8192];
    / z+ P: `9 g$ Q$ E) j7 o
  172.   va_list  argptr;
      O* b' s) Y; r! ?% w7 G5 J
  173. : @' O# M" d4 `
  174.         va_start(argptr,message);. V4 r" d- Z6 H, F$ N$ e
  175.         vsprintf(szBuffer,message,argptr);
    . R) O* n* n/ e7 H1 J
  176.         va_end(argptr);
    # D5 v( F- S* j, ^1 |
  177.   fp=fopen(FileName,"a");
    # Z% B6 u4 y6 `4 C& u
  178.   if(fp)
    ; S  n) U, n) P) `' [# ]
  179.   {
    : v$ a8 Y! {! l" C7 U  ]8 L
  180.     fprintf(fp,szBuffer);1 C5 \  l9 N, W5 C9 s
  181.     fclose(fp);
    & k5 a0 j* F) T) W+ @
  182.           _flushall();
    - G4 O" d, m% z: Z
  183.   }6 k' |. f9 f  S7 f
  184. }/ u+ [- j' b( z7 j

  185. # m9 s  u7 e8 D, z; e9 ~9 F
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 x* T# r5 t# @1 f
  187. {0 _3 p1 H1 a4 o$ L- `& d- U
  188.      FILE *fp;. c# j: x. N. W# }4 _5 B2 c
  189.     DWORD  attrib;. a& e; X6 z5 ^5 p
  190.   attrib=GetFileAttributes(FileName);
    & j5 I1 l9 ]6 c- {4 M" j
  191.   if(attrib!=-1)
    5 c: Z" c+ R; y  V# J
  192.   {
    * p" i' a. n8 u! [4 P
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: N/ e5 c; }1 A3 L
  194.     if(!SetFileAttributes(FileName,attrib)): E5 G0 H3 P. p3 O. S) l
  195.     {
    & e* J! R7 |  ^7 m0 \
  196.       return FALSE;
    . x: V+ I& L& c
  197.     }
    4 i. n7 v5 V( w6 T3 m0 i
  198.   }
    ) h5 M1 @# M+ @  V8 U9 V7 L
  199.   fp=fopen(FileName,"wb");
    8 F* N+ {# G9 r3 \+ F* E
  200.   if(fp)' H9 T+ f' D( c! Y) \. h
  201.   {
    $ n6 o( e0 B  c% a) ]
  202.     fclose(fp);
    2 _. _- o5 B( I1 T0 r
  203.   }6 V7 _( s! w0 S& Q
  204.   return TRUE;1 J0 ~. v# c% p( F. D6 S5 J1 ?, L2 m
  205. }7 r+ N! [! `3 Q! [

  206. 7 c! K% H6 u/ e
  207. BOOL CRevAppApp::UpdateLocalVersion(void)6 M$ Z1 m5 P7 q3 ^( N
  208. {) Y: n# l0 c* I# j) S9 K: E' N9 u
  209.   char filename[MAX_PATH];
    6 u5 {- ~  d- w  [6 r0 Q
  210.   LPUPDATEFILE file,olds;
    3 }0 V# a1 f1 \3 O9 A5 W/ @2 b
  211.   std::map<int,CString>::iterator i;
    ' U0 t# ~' J  j! C) |8 z- |
  212.   std::map<CString,LPUPDATEFILE>::iterator p;8 Q+ J+ W8 H# q$ v
  213.   std::list<CString>::iterator l;
    ' J( }$ s- A+ d- [

  214. 6 b8 D( ~- @& v  X+ {
  215.   if(bFirstUpdate)( a- Y0 d. Q! M7 H- c. H
  216.   {( n& z$ F6 R# k8 D  Q! I' E% U
  217.     dwCurrFile=0;+ k9 H2 z! Q; F
  218.     bFirstUpdate=FALSE;6 X4 ~( B/ P, @9 }1 d
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    9 }: N& h( s* Q6 Z! e  U
  220.     {
    . ~" @! \# r5 `+ {0 q1 |% u
  221.       dwTotalFiles=UpdateLocal.size();
    * N6 q. ^% G5 `9 }. H8 |" F
  222.       dwDownLoaded=0;
    - b; x: f( q3 R* V. `
  223.       bSilentStep=FALSE;
    0 ^3 O1 a' x( s' l9 |4 ]
  224.       bCompressed=TRUE;
    9 d. v& i* P3 X) [
  225.       strExtLocal.Empty();3 ?) Z! e" Y+ B6 T$ ]$ t
  226.       strFullName=(*i).second;
    - |! G0 A* ], i# Z* L; R
  227.       dwProgramState=AP_CONNECT;  {# R* X# b! Z# y4 e
  228.       return TRUE;8 y9 [5 @, I) Y5 R3 s7 _5 M
  229.     }0 s# Q( T* {, Z- i- g+ a
  230.   }' l; l# |3 u* \; ~! ]
  231.   else if(bRestartUpdater==FALSE)* Z  f3 u# {% ~. }- m( K  w% b
  232.   {
    ; ~% W: X4 P& Z& H% i* r( f- _
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    2 _# C4 M" B6 K$ V2 K
  234.     {! g" I( L6 w/ c3 X3 _  {
  235.       file=(*p).second;# y( \: ~0 k: L9 c: u! K1 j
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    3 G6 k. a8 A( W
  237.       {
    ( ]# V3 p% {9 e$ h/ `4 _
  238.         olds=(*p).second;
    ( `/ u5 Z; O1 |4 n9 A
  239.         olds->vers=file->vers;
    , p4 H$ e: r1 y8 ^" F
  240.       }
    2 r/ e0 Z3 {& p+ i7 q& v% \3 R1 I
  241.       else
    ) \( J* I3 k& |! g5 j& m
  242.       {! E" W( C' y9 X; p5 Z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . @* B2 q4 B1 v+ C, m  e. J  k
  244.         memcpy(olds,file,sizeof(UPDATEFILE));" v/ z; ^$ `2 w$ J) O! ~
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));: [8 S. z% d9 k2 L4 e
  246.       }
    0 w# q! a8 L& G6 t. R7 `
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( e1 X, ]2 E+ D! C( v  |
  248.       sprintf(filename,"(%s)",file->file);
    1 \& K) Q! P: B  Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - y2 V) Z$ P) ~% s' C) L; X
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }" E- V. f8 ~& k  `: `* J
  251.     }
    2 o$ }  |+ W: F7 T, z
  252.     dwCurrFile++;
    ( f& ]9 d9 Y# ~9 M7 S& }
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 E1 k  A5 t4 [' ~& h) x( [/ z
  254.     {
      ~( G7 G- U- O) D: ^+ Q
  255.       bSilentStep=FALSE;
    " T8 d' K6 z! ?6 b& n) c6 z3 E
  256.       bCompressed=TRUE;
    3 ?5 W# A2 E' {! l! T/ f' S  [3 }* ]
  257.       strExtLocal.Empty();
      u7 T4 K8 E7 h: y0 W3 o
  258.       strFullName=(*i).second;6 y' G! N. x  z* n
  259.       dwProgramState=AP_CONNECT;
    8 U+ z$ ^. ~  C5 a' Z/ Q4 f1 o
  260.       return TRUE;
    8 [0 r$ \# p0 ]7 u* ^
  261.     }
    ( Q: T7 m# @  j4 C
  262.     if(!bRestartUpdater)
    & a! A) Y- f, A$ F/ u; O
  263.     {; u+ i* L3 X* s8 C
  264.       int iCurrSize,iFileSize;* }; a6 g' C. F5 I
  265.       iCurrSize=0;
    4 l% k: ?: k( X4 Q. O5 c% H
  266.       iFileSize=UpdateList2.size();9 D/ i, V* p, i: ?% \3 H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
      B$ a9 p0 ]4 g3 n2 [% N
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");, c5 @, O& @- x' M1 X
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    . k3 L% C: k7 H! A0 R  F+ H; A
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" [8 v1 f  F2 H% [, S! K
  271.       Fclearf(".\\update.dat");3 N# @+ n5 j" N
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    4 A  s( t  p6 C% i. N' b; R7 |
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    : R' k5 N% m$ T" ^
  274.       {
    $ g' ?3 b4 n5 }& p
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    . |. x4 Z# T3 a, h
  276.         {
    5 U; F1 }5 ~0 ~, \6 p0 J; {  b
  277.           file=(*p).second;5 [/ P  f  G2 H* x  G0 c) W: p
  278.           sprintf(filename,"(%s)",file->file);# R6 a$ ?+ A. F. L8 s" O3 @% Z, k  y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; H/ q* G4 }+ N, X$ j7 i0 u
  280.           iCurrSize++;$ U% o! v% e5 u+ g: T
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ; L! Y1 t- E, ^! `* r% z
  282.         }
    / x- L% ?- X8 D" T% `
  283.       }: e5 |. b  H* P  {: Z' @* g
  284.       unlink(".\\update.txt");- G/ o( L1 }. I' ~) F# w! z
  285.       unlink(".\\update.tmp");( s# L4 N- f& _  n/ X7 Q# g4 `
  286.       Fclearf(".\\checkversion.dat");& G0 V9 y! N' G- }5 ]+ M
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    - p$ x  c" |+ q1 t4 a/ m  N
  288.       if(UpdateLocal.size())
    3 p& N* ?( f$ R
  289.       {* |; t# n& j+ l: R8 c4 ~
  290.         UpdateLocal.clear();
    1 O5 D1 W% `) _: S
  291.       }
    - H3 @, P: Q# p8 A& j9 A% ~
  292.       if(UpdateFile3.size())0 c1 f( ^$ M( \0 o" W0 N3 M/ v
  293.       {! J, l% f/ _, B( s- g
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 n; Z- L/ n8 E3 X. u, e
  295.         {6 h7 J" v5 W% ~3 ^
  296.           file=(*p).second;5 o4 K4 J4 k; j
  297.           free(file);
    & T. X! K" I5 U3 D2 x$ G/ j7 n
  298.         }" u/ |+ o' n9 |1 D. J8 n! U
  299.         UpdateFile3.clear();
      x2 m. B& T( y1 c5 g
  300.         UpdateList3.clear();% f8 w+ g/ A3 r$ z3 r% Q: M
  301.       }
    & q4 p$ x& H; D) T* U
  302.       if(UpdateFile2.size())% ?3 K# B; k2 p8 `5 j. d" y$ r" q
  303.       {. }- X* b/ `& l! i$ V& O0 u) B9 M+ r
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& ]- v, g$ Y! N( k' y
  305.         {! Y: e) {) v! f4 W* h
  306.           file=(*p).second;
    ( x  m  ?" m( S4 ~. X7 s9 k
  307.           free(file);
    : X5 Y" P. Q) V- @( B5 G
  308.         }
    / n: F9 a! L5 T/ J
  309.         UpdateFile2.clear();
    $ i0 s* l1 H9 R, t
  310.         UpdateList2.clear();
    ! j' w# g' w" {' q7 O7 [
  311.       }( r& N' B8 f! e" ~( l* T+ R& [
  312.       if(UpdateFile1.size())
    . u5 R" G2 P" I
  313.       {2 }% A8 Q6 c$ l. ]
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & f; ~5 z; T: X3 ~" d+ `6 o& N' n
  315.         {; b- B6 H1 O" L+ I. V0 \
  316.           file=(*p).second;% P" N& }% y5 A4 |, |
  317.           free(file);
    ' [% u* K9 Z, b$ E
  318.         }
    " g' {1 e) P6 H* T$ z+ Y" f
  319.         UpdateFile1.clear();
    5 Z% E9 ^. r- P* D- X# ^
  320.         UpdateList1.clear();. J4 }/ u$ o$ X6 x# e; @
  321.       }" d* s, ^4 R  B$ A: c3 {' J9 e
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % d' v& Y7 s: U9 S
  323.     }
    % Y/ a2 p/ f; T3 O
  324.   }
    % w4 H# T. p3 K- J) ^. I
  325.   return FALSE;
    5 s' T2 ^7 b+ I5 C" y) `
  326. }. i0 b5 F' L& X# |' c" S/ w

  327. - S/ \, A4 J; [; c
  328. void CRevAppApp::ClearAll(void)+ v) Y; \4 v& Z# r  \/ A
  329. {8 L9 ~4 I* D) V0 v/ o7 }
  330.   LPUPDATEFILE file;
    8 L4 U. u# O) n$ J& d" y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;; d8 [% A# M- }9 N4 e

  332. + q( }& t8 ?; h4 T
  333.   if(UpdateLocal.size()). P* z9 V: P0 h$ ?5 p4 C8 A9 W6 W
  334.   {1 Y4 y- x# _# Y' R* C) V0 n! w! c
  335.     UpdateLocal.clear();
    8 j/ G7 W8 r, ~3 R1 m
  336.   }- U2 V0 |9 ~9 k5 D. e
  337.   if(UpdateFile3.size())
    8 R) x/ Z: d- Q9 t- l$ k
  338.   {' f/ i3 r8 l3 Z9 J) Z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) z8 h/ _+ G5 L5 _2 p$ ?2 A& [
  340.     {9 R3 b0 n/ p* W5 M, c; J5 f
  341.       file=(*p).second;- I6 I! w8 i; r" W  i6 H  Y4 L6 B
  342.       free(file);
    * r0 G. d1 r% ^! Z9 V8 i
  343.     }7 A( h: Y9 b& A4 y5 j* M
  344.     UpdateFile3.clear();
    2 E8 u, S, o/ U1 G
  345.     UpdateList3.clear();
    8 Z# a7 G3 I. v, p
  346.   }( X; H& B. y$ c
  347.   if(UpdateFile2.size())
      o' ~1 c* }+ n2 m) U. J
  348.   {
    3 c0 z$ \: x. m$ ]4 j% e5 [
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 I9 y2 W* i1 o$ L/ w# ]
  350.     {
      c' |! h8 e. J: J
  351.       file=(*p).second;
    / q4 x8 l# d5 M6 X* c9 m7 X
  352.       free(file);
    + v! ^( C( p0 U
  353.     }
    5 D2 d8 ~4 e8 {" y- n& k2 L* I! x
  354.     UpdateFile2.clear();0 L1 e" k( V+ i
  355.     UpdateList2.clear();1 ^8 Z( I# O3 B' ?( n
  356.   }
    ; U2 [/ a2 Q2 C6 C
  357.   if(UpdateFile1.size())" Y  x$ ]: y5 P( Q+ S; c" N
  358.   {. ]5 p6 d& H3 J: I
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ _& X: y9 G5 }7 o
  360.     {
    * f! N( |7 R1 H+ ?
  361.       file=(*p).second;
    , S- J3 r6 T2 ^5 ~( g9 f  s
  362.       free(file);0 M9 H4 W% J( i8 O8 k# B
  363.     }( X6 O  z3 x* B8 r, G. u
  364.     UpdateFile1.clear();
    ' \. N- p8 S# L$ ^' X  t3 i6 n( I
  365.     UpdateList1.clear();, \  y4 \% ~# s
  366.   }
    ; r, m4 K: [( }5 r0 T5 n
  367. }  
    # o* J  @4 [* R0 K/ v1 J
  368.   
    $ k& g7 H! |/ o& y  O% A* T
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    4 [! D$ p, J; x( E8 P
  370. {
    / M1 S# O9 l+ `  g/ ?3 v
  371.   int c;
    $ ~0 Z& p) ?( v- t  J* Q3 b9 V
  372.   LPUPDATEFILE file1,file2;* @" X2 O( E, U( y0 b
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;, W$ C0 E9 A1 u2 A; Y% h
  374.   std::list<CString>::iterator l;  Y) v0 X: h* S
  375. & f$ }; ?+ r1 y1 }6 T0 X& U4 R1 Q
  376.   UpdateLocal.clear();8 f- O" ^$ D- ]/ S& H* S7 ?* S' m0 X% V0 e
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    " ]# G2 v: U( h( I- Z/ U+ l" n
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);2 ]% B( i9 A3 ]
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    6 n5 M5 \7 o# X8 g2 B6 j; C
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    # u; t, x2 s5 y4 P7 i& w
  381.   if(UpdateFile3.size())" U* Y. D$ p: c% o
  382.   {. U$ D6 t! Z& T# f- `
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    / m& J( s- n. P  u1 H
  384.     {
    9 i. T- r0 x) t
  385.       file2=(LPUPDATEFILE)(*i).second;5 k4 F! }; v+ d3 w
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 q4 I4 I. M1 W. l! R, r
  387.       {, U" q( G0 c' s1 ~; A. K
  388.         file1=(LPUPDATEFILE)(*p).second;$ f0 s; x0 A7 y" ?1 m0 Z% D+ C
  389.         file1->vers=file2->vers;
    # Y1 {5 ~0 A% W! u! t' c
  390.       }( W5 f' `! S7 v5 O
  391.       else
    * ]) Z# c# X% s( n" b
  392.       {
    # }, r* e# a5 h* K
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 }9 }# {( Y& \8 [5 @7 ^# y, R
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    5 o2 Z  o" B- D
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    4 K" O4 {% p3 J% D( |; H7 Y
  396.       }
    " L$ q9 W: z/ J& V# X2 }! H
  397.     }& W% Y& T# t. k2 t; m1 y
  398.   }# W0 K2 ?% \4 n
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & K5 t" C& A0 m. n
  400.   {0 K3 I' [" ^' L+ Z1 l% M
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    & o7 V4 t  J2 d7 a* }
  402.     {
    * Z! p: ~0 @2 G8 g' Q8 B3 a
  403.       file2=(LPUPDATEFILE)(*i).second;0 ]. v  N" y/ \" z! @
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + O) x' U1 j$ T
  405.       {4 o/ T: l% f1 }/ p
  406.         file1=(LPUPDATEFILE)(*p).second;
    4 k" x  ]5 C: k% N7 y4 h
  407.         if(file1->vers!=file2->vers)# C# }0 G+ p& y$ @6 m
  408.         {" ^2 {3 |4 K, |+ T
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- e' {+ j( ~+ T- {* F: X
  410.           c++;: U" S( v1 ?4 f  c( c* l- F3 V
  411.         }7 e5 a) w6 V& v  D. ]
  412.       }
    ' [- D, U: j% X) M3 g. ?+ O8 r, x
  413.       else
    / ?1 B- W1 A  \# I) R
  414.       {8 s0 V2 N$ J6 R0 v
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 |, V  r0 Z+ ?, |" ^
  416.         c++;
    * z6 ^# U/ r2 z& d# q7 p: K2 z& L1 Q
  417.       }% y" O9 P# L6 y* C
  418.     }1 J4 G1 u6 A% v* e$ {" {" O
  419.   }1 e2 z$ X" m  N2 @: e1 y9 b
  420.   unlink(".\\DownLoad\\update.txt");( ^/ _8 i5 l# |; _! b+ x, N
  421.   if(UpdateLocal.size()) return TRUE;
    $ F9 Q' `3 ^+ |( [0 G9 j1 f
  422.   else                   return FALSE;& \+ U  z8 q- r
  423. }, k8 F3 p+ f( h6 N4 X) ]2 ?
  424. : J9 Q# s+ N7 N$ k' F4 Z0 B
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    $ T& n4 K. D; K: M( ^) T+ T7 Y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ s+ U# e' E1 C% B

  427. 9 _' ^7 e; u' i3 m3 j& J' n3 T

  428.   {  e' L- D1 _6 d. D! A

  429. - E5 |& O' b3 ~5 N% \
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile): ~" e+ m+ p8 `3 p3 ]8 q& t
  431. {
    * g: M( S& }1 M$ l! x. S1 K
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    % d* n/ X& t: c. d$ v- p* J6 f
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 ]. `- q9 \* S: d  _
  434.   {* ~, x, g+ V1 W; [' e
  435.     char szLanguage[50];
    # h' g  I& D+ V: |4 w3 }; I" _
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; b3 X/ I% ^1 \  E. c9 O4 a
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 S& C7 u1 g3 _  t  q: q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " w0 n7 i) A; E6 r/ [6 G: U+ y! Y7 e
  439.     else                                   m_iLanguage=ENGLISH;
    ) f7 D3 [1 `+ p' A. a; ^9 d; v
  440.     char szRegister[100];; t. D6 u5 [( Y9 _6 `8 h6 V1 C
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 \7 _* R/ r" r% D( M( ?
  442.     strRegsName=szRegister;
    ) x. h7 f# p& F
  443.     char szPatchURL[100];, k: Q9 Z, }+ d- I  ~: _9 `
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; I7 |6 L4 \( p
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " L( ]; E! Y5 d( O" y$ D
  446.   }: n" W, Q3 f+ s+ @  o( k- n7 e2 c
  447.   else
    9 @! ^6 T2 x0 c+ H7 i
  448.   {
    9 k7 d2 q: k+ b  Q, L: W
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- m8 H8 u) Y0 ^4 o! f
  450.     strRegsName=DEFAULT_REG_URL;
    " E- z0 h( C; [* U2 E! h2 \* }5 \$ X* v; i: c
  451.   }2 N* R) r( S9 j+ z6 k
  452.   if(GetFileAttributes("hosts.ini")!=-1)4 t  U1 U# l+ z: q- K1 E7 J9 o
  453.   {3 i. g0 ]7 S7 |
  454.     char szIP[50];' F& _" D( y3 q8 a! D
  455.     char szDIR[300];
    . d$ y: Y3 c- u
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    3 z" [5 t6 q" f/ }3 x2 O" N3 b: W1 @$ ]
  457.     {8 v8 t& b( u) P% F
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");0 R5 X' ]& y- t  y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    % @  p7 K( U3 a; Q* ?. U4 K
  460.       strHostName=szIP;2 S# M  ~$ `, m4 M8 ]  S
  461.       strHostPath.Format("/%s",szDIR);! X& b3 s7 R8 f
  462.     }
    " ]  U' o1 e4 O8 G) G2 H
  463.     else
    $ d/ B1 J# c3 N3 `# O2 E
  464.     {5 V+ A# s7 m# Q5 a, m
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , ^3 {( Q' Y9 K! Q
  466.       {; J7 N1 a" k# K, U- `' R; t
  467.         char szLanguage[50];
    % U) B' f( `4 H) A! z  R  v" t
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    0 g6 l8 r+ g" t  ~! C
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: W: A" h8 j6 t: ]7 j+ Q& J7 S
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + h9 @2 W( v: @9 }6 V+ f; u
  471.         else                                   m_iLanguage=ENGLISH;
    $ L5 \6 |4 l( ^
  472.         char szRegister[100];
    4 i; N9 e$ Y7 G
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 S# E8 X; J! F3 a/ e
  474.         strRegsName=szRegister;
    % ]; O8 q5 a. o. O, Z, e, j) j* j
  475.         char szPatchURL[100];8 U/ ^$ K8 C  U# v  _; r: B
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % r- T( H+ e# ]1 G( N( w3 ]4 I
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" w5 j8 t/ _! v9 P: ?8 K% _6 t
  478.       }4 ^/ z0 u- C! p: a+ T
  479.       else
    + D- p5 V4 [3 ~0 L
  480.       {
    2 t' F' O) P9 W. L# a) r% Y
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! Z# \9 ~2 I. T( K2 x( _
  482.         strRegsName=DEFAULT_REG_URL;
    . ^- }1 _, C4 B  D% L
  483.       }# A0 L, e6 I2 E- v$ j
  484.     }
    / {* J+ P1 R- Y6 d% P
  485.   }9 t: X) t/ ~! J" V
  486.   return true;! w, B% B/ ~) a! [$ ]
  487. }: N: ^+ |% O, i2 }% _' k& N, U. [
  488. ' T; o# ^3 M; f- Q# Q+ ]7 h0 X
  489. #include ".\ZLib\unzip.h"
    ) y# b7 w: U3 g. |" |; C! B
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 Y# u& h( h- e# s. G0 q8 W! O* a" \5 z
  491. /////////////////////////////////////////////////////////////////////////////
    : ?8 @! M  ^0 \7 T
  492. // CRevAppApp initialization  W8 c+ L$ D: g% s1 c% G7 O

  493. + [) {; C6 n+ h/ O1 d( r. Z. L+ V
  494. BOOL CRevAppApp::InitInstance()7 U! p& c; z" k: u
  495. {2 r1 O, n8 ?& u. \! E- \
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    3 e7 n% Y9 H. j  I6 p
  497. & O6 p7 s' j7 ~) E5 w, h
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);8 A1 p- ]/ t7 n/ S5 w8 l
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))* ]0 R% {( l' ^* b4 k4 B; a$ d8 n; S
  500.   {3 c1 G  }6 I: f, `7 p! ]. x
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    8 W& ~$ T5 }( J. R9 J  D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);' {8 Z9 W/ ]& t/ ~6 d! i1 _
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ; m. t# y' D4 R$ f1 X  k
  504.     {, v& @/ I# u1 c/ q
  505.       strcpy(szPath,szPathTarget);
    / K3 E' V. @9 x' w
  506.       SetCurrentDirectory(szPath);
    % L8 }9 \3 o3 R- d
  507.     }
    9 j8 {, k/ w9 z- \5 m- X7 V
  508.   }
    . S8 f6 x# e! x2 E
  509. #ifdef _DEBUG* O5 Z7 h4 T0 @- z; Q, n+ Z) f' d
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)): D& T. Q0 Y5 Y1 f1 S$ K
  511. #else
    8 F0 }0 G$ y2 |! G0 k% F, {
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- P, w; }8 C  b0 s
  513. #endif
    , U( Z2 b& q& d$ s" j! g$ o8 C3 }
  514.   {
    # [7 [0 G) W% a' a$ }
  515.     char tempFileName[MAX_PATH];
    $ G8 K+ r( h5 P$ M) x% g
  516.     strcpy(tempFileName,szPathSource);6 ^( r- }4 t. |: f
  517.     tempFileName[strlen(szPathSource)-12]=0;
    9 U6 b. a* x0 a' L; d# L
  518.     strcat(tempFileName,"\\$CSUpdate.exe");: M/ H. B+ m9 g# ^2 G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);5 m0 G! ~( d. ?
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);& \; O7 q; J. i: k1 |! Y
  521.     return TRUE;! M6 H5 |" L  x* ?' G' `  G
  522.   }0 h% l7 J! b4 U9 {4 _8 S- G8 H
  523.   // Nuke 0118: Delete run.exe
    3 N. ^6 h0 E  s* `, l) e
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    + Z5 @2 `$ _7 ^
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");* r$ W' ]4 C: [" B
  526.   if(!ReadCfgFile("Config.ini"))
    - ]0 V) m* M& E0 j! \) J! F# O4 w  z
  527.   {
    " H8 `/ J& n: x
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    9 N: l- T& r  O1 M
  529.     return TRUE;
    7 l0 c3 o- ]8 _/ A& w
  530.   }
    ! A. n  B6 Q5 U2 j+ K
  531.   HANDLE mutex;
    ) K6 p* I1 N8 M" q& Q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ! g& T; }- E/ D- q* _0 K& |1 V
  533.   {
    + z/ n: y; g! L4 _) a/ w1 a
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS), A4 l, q  T4 K) ]3 I
  535.     {
    % n- f9 z, }) g- Y: K
  536.       CloseHandle(mutex);2 x5 m) V& i& }8 H) H/ E- [
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 P- J8 m% }3 z- {( ?
  538.       return TRUE;% Z# u3 e3 C7 z. Y4 y- ^1 L: b
  539.     }6 h# _- P5 Z* L
  540.   }  . [% S5 [% |9 q; K0 e6 B
  541.   CloseHandle(mutex);
    . A) f. N$ w  }

  542. 3 h2 j) s  `' D
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);( ]. O3 a2 K7 ?/ J& `) O- ?( n  j
  544. / z- {7 I# J5 z' @7 w2 a8 a9 I
  545.         AfxEnableControlContainer();
    7 S! E5 w, k' v& x- a, m+ a4 i# R

  546. " s5 o! d; d% i4 ?! s* V
  547.   bCanUpdate=FALSE;$ N( o" Z* f/ y5 y& x' \' F: w9 }* e
  548.   dwStartUpSteps=1;
    ! k1 G, ]: O4 N% w# B
  549.   dwProgramState=AP_NOTHING;2 b9 ?$ L) F. [; ]
  550. ; K1 q$ T6 V0 [( L9 A% x( Y1 j
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    + v9 D9 W7 ?# F% K/ Y( o0 F
  552. " o- L0 C! S& r- i9 r
  553.         // Standard initialization
    6 @9 o$ N( Y  k+ u; T/ {' l" K
  554.         // If you are not using these features and wish to reduce the size% }: E3 K% L; h
  555.         //  of your final executable, you should remove from the following  A- j) O: ]5 s5 K: ~9 s) v
  556.         //  the specific initialization routines you do not need.
    ' c+ m: l8 a. @, l* [% \
  557. 1 D" E5 C4 K8 q  C4 W0 d4 V
  558. #ifdef _AFXDLL3 w, s* Y: B, D" H/ ]2 N
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL- z! O: T" F8 i) F. C" @1 Y
  560. #else3 e9 j& J* F4 e* V9 h0 [0 [
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ s' f6 A' D# }8 B
  562. #endif
    - v. f5 V" d- `! O0 m/ F0 N% d# R

  563. " Y  x0 a, R8 F5 c0 ], E6 l! U
  564.   dlg=new CRevAppDlg;
    1 }  C! p" p0 D7 {" h" a+ b
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    * q% S; a2 \( h4 d( l! Y
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    " F; V5 {' E. J, @/ |
  567.   m_pMainWnd=dlg;+ \2 Q) N& e5 @, _4 B2 W1 h! \
  568. ! u5 c$ ^# b% s- I
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ) e1 E1 w1 C$ y4 o' u' g. n

  570. 0 u9 i% [; Z* ~7 a4 D4 n. Z
  571. //  GdiplusStartupInput gdiplusStartupInput;
    3 A$ f# q, ^8 U0 P0 S* Q2 f. h! Y  t
  572. //  ULONG_PTR gdiplusToken;
    # q& l: o! B$ k" T3 U
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    : u2 A, I. b+ J9 w

  574. - A0 ?2 h5 }' d
  575. //        CRevAppDlg dlg;& V: e  S0 L3 V# l) K1 t2 t" B* \2 i4 N
  576. //        int nResponse = dlg.DoModal();
    6 ^% h# ]$ f8 \* D. P( C: Z( O
  577. //        if (nResponse == IDOK)3 i% A* A! }, L) y% J7 d$ B% X3 B
  578. //        {4 t0 p$ N: F( ^8 ^$ \
  579. //                // TODO: Place code here to handle when the dialog is) [4 E( r3 d" l1 m7 y0 ~. U
  580. //                //  dismissed with OK* U% X/ z  A& j) c6 ]
  581. //        }
    : ]- U9 ?- s6 Z* [% _" s# O
  582. //        else if (nResponse == IDCANCEL)
    0 Q. j3 g0 W* l, g
  583. //        {
    ! q& `7 J( E/ s2 Y
  584. //                // TODO: Place code here to handle when the dialog is
    3 M& Q  J' p6 |" d( l& W7 C1 J1 t
  585. //                //  dismissed with Cancel
    5 G0 A& B) [  G( Y6 A& b
  586. //        }, N0 I  ^- A: M5 |2 J0 u

  587. # Q% t$ g6 j- r% l/ ~7 y7 G
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    % u6 C. b1 {2 R* d- a: K& _
  589.         //  application, rather than start the application's message pump.
    5 v9 E% W' |- E3 z2 S8 M, j
  590.         return TRUE;! T4 Z3 V; B8 u) u3 s; ?5 f
  591. }- t7 m( i* i! F, L, s
  592. 2 C* F5 d6 C; L  Q
  593. char *CRevAppApp::strtok3(char *pSource,char *token), O8 K) U( v1 X
  594. {. Z& \, o6 V7 P) x( Q; L
  595.   int i;  x- \2 f3 N9 [' ~; l
  596.   char *szRet;1 H. B% z  F; p! i( Y
  597. . B7 ?3 `: b4 p- O  [
  598.   if(pSource) { itoken=0; sztoken=pSource; }9 x7 g. \2 @% I. l' _
  599.   if(sztoken)$ K' ~( Q; ]0 |) I# J+ ~3 t
  600.   {& ?9 h, o9 t1 e0 q& O
  601.     szRet=&sztoken[itoken];
    5 `& O6 F4 A- c
  602.     while(sztoken[itoken])
    2 [6 D+ S: r2 [, \, @, D- a
  603.     {2 u; W1 \, A' b0 H; o$ R4 P6 B
  604.       for(i=0;i<(int)strlen(token);i++)
    & Z# H4 }" v. B- l% X  t
  605.       {9 e* r4 Y. }( K1 S# s* e
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; a+ R: P; v8 ^$ N+ D
  607.         {
    8 \& |+ y3 J% H5 n
  608.           sztoken[itoken++]=0;
    * S+ C$ {) T/ p- T1 J6 b$ c1 a
  609.           sztoken[itoken++]=0;
    . |9 U3 B1 b4 P% T
  610.           return szRet;0 c% s# L2 [+ @- j& b7 R$ K! \
  611.         }
    & \( n) b' N+ \$ Y0 T
  612.       }
    5 i/ @2 I* Z& J2 h1 [/ T$ E) E/ b
  613.       itoken++;
    4 |' h0 f- F9 p7 S2 j
  614.     }. [- j, n6 j! H* w: O0 D8 F
  615.   }
    : `4 S# @$ c- l- I* R
  616.   return NULL;. H: Y, B* r" Z: {9 X' x
  617. }+ x! K2 f4 p: a! I5 L2 F% e4 e

  618. 5 I2 D2 T; G, H
  619. void ProcessProc(long Total,long Current)# g  |7 ~' g3 d
  620. {' U! b, [* s0 ]  s
  621.         MSG msg;1 X9 g7 Y1 O! k
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);- U: X/ K9 y: m% N9 f- _1 K# y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - L7 x' C% V% z$ V
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)). K) b7 e7 D6 o8 b  a
  625.         {5 o! R6 _, }0 j0 K0 }/ ]  ]2 \
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & f7 \6 B1 \+ ?
  627.                 {$ ^+ l( B& y  ^2 N
  628.                         return;$ g8 s5 a3 i5 X# Z
  629.                 }0 W' L3 {# I/ N  a  a5 n8 T
  630.                 TranslateMessage(&msg);
    7 M# W' R/ g3 e7 N* K
  631.                 DispatchMessage(&msg);# V; v$ R0 _* v( U0 a  n
  632.         }       
    ! S5 F9 C; v  }' k
  633. }
    ; m# O/ O, M- y& [4 N
  634. 1 |9 m+ J( n; e6 n
  635. BOOL bFirstChar=TRUE;7 k3 f8 `# r, C) {1 E
  636. $ Y9 h( t* `. ]# D' m" }7 M8 f
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ( m6 G: s9 b1 N! [5 _3 O
  638. {
    " j0 U# A9 }3 X& T/ f$ E5 C: A
  639.         // TODO: Add your specialized code here and/or call the base class& d! Q  x( {3 P8 c. x8 C& ~  v7 k. J. a
  640.   switch(dwProgramState)
    $ g" v* d+ @: O3 Y- d  X
  641.   {8 {" k$ w) o) {+ }, f" Z
  642.   case AP_NOTHING:- |/ o+ d3 a+ @# F
  643.     switch(dwStartUpSteps)
    ; c) u( Q+ M  d
  644.     {
    ; q+ |% k0 R" @+ r4 ~
  645.     case 1:5 Y5 P( u' A! p" F9 ~$ R4 A" V
  646.       {
    + A- y0 p9 x" z0 l; W: w: N. [
  647.         int i;# N- }- i5 X& E( `! V6 h
  648.         CDC *pCDC=dlg->GetDC();
    + O3 O; ~8 Y4 s; c$ y- W
  649.         HDC hdcwnd=pCDC->m_hDC;! A7 |5 A9 O* Z8 @3 o
  650. //        Graphics graphics(hdcwnd);
    ) M$ u7 g. b; W$ L% `% Z6 U
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");- O9 ~" P. S- Z* a/ d" s* ^* r% K8 D
  652. //        INT iWidth=bitmap.GetWidth();- i5 e7 o# u5 a' K) O2 |
  653. //        INT iHeight=bitmap.GetHeight();0 V0 R: V2 T9 p
  654. //        Color color,colorTemp;: m! q5 j. Q$ w2 Z. N. D% d% m
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)! l' {7 ]9 P7 g; L" a
  656. //        {& M* a8 e$ f# x+ w! i6 b1 L
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ' Y" e% F3 o8 K. f* J1 k" X
  658. //          {* y  o' `7 A6 ?8 r
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      E; y! s) t( N, ]
  660. //            colorTemp.SetValue(color.MakeARGB(+ k$ l. Y8 V6 T2 U
  661. //              (BYTE)(255*iColumn/iWidth),9 f  G8 z& N" n: ^1 i8 P2 U2 X
  662. //              color.GetRed(),% K- b( y5 U6 h
  663. //              color.GetGreen(),! P3 F3 F- |0 @. O  h
  664. //              color.GetBlue()));7 q! z" M# M+ H! x7 K
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    / j0 B7 V5 Y" {) E/ Y2 y$ a
  666. //          }
    6 L' T0 u+ z" E$ N& U
  667. //        }7 o& h( c9 ?( N% Q5 m
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);) U6 |, I* V% {" O* V
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 \2 f% F( A9 p
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ c' A2 m2 G6 s, \
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: q0 \8 _1 a& M+ a  D# K! z# p
  672.         for(i=0;i<240;i+=8)2 q; x6 L: L+ L- U
  673.         {8 X  u. U8 K0 `- }
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! l2 ]9 a$ J" q" q3 b
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ V: X. U0 i4 e  k9 t
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. G: M. p' d/ v1 c
  677.           Sleep(33);& Y" m* K/ ]; X: \) g+ S  B! Q
  678.         }% O: c; T' m3 G$ Z! J. ^% `! k
  679.         Sleep(1000);
    8 G% d; x' V7 C. q, K3 J
  680.         for(i=240;i>0;i-=8)
    $ Z) r( O1 r% t  H2 t5 ?
  681.         {; _! ~1 v9 c/ o
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  \( T+ ~* \9 I
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 t1 ]# {4 d/ N5 k. I
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ V# l6 M8 p) _0 B" B1 d' w. T
  685.           Sleep(33);
    / ]! ~2 ^3 d* m) q
  686.         }
    * X7 R  K* R  @$ S5 J  a3 e
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    9 g& e: P% s7 I. c( P
  688.         dlg->ReleaseDC(pCDC);
    6 ]: T% E: ~# y9 q# H$ U
  689.         DeleteDC(hdctar);% I* c, B8 z& A: u4 I. ^* X0 v( X* P
  690.         DeleteDC(hdcsrc);3 s. ?& l5 l! m/ l1 A. f: V
  691.         DeleteDC(hdcorg);4 u& F# ~- f  C/ K( f8 W, ^. }! O
  692.       }: [- k, V3 m/ {4 C
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    " b2 W8 f$ {& y; L6 M. {& `, k3 _% d1 {
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    5 a1 Q+ |1 u8 x: l
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");4 u" T- |! T. E7 h
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");: U5 c; [1 y1 t
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 \3 B! z& m$ _1 a8 U6 o1 a' x
  698.       if(!Dn.Connected())
    & v/ v2 X5 C9 M( R
  699.       {3 `  `% a& N% D1 d6 q
  700.         dwTotalFiles=1;' h& J7 a4 J6 z- b+ j& H0 H
  701.         dwDownLoaded=0;4 @# g0 Y' m7 b; u/ N
  702.         bSilentStep=TRUE;
    . J& P% K% [: d, V9 Q$ P
  703.         bCompressed=FALSE;
    6 k+ W  O  ?9 a  s: ~' y( y7 T
  704.         strExtLocal.Empty();2 O2 W% b' s/ |
  705.         strFullName="readme.txt";
    ' m7 W$ T6 z4 H) [% @1 D
  706.         dwProgramState=AP_CONNECT;8 Z1 h& A( y1 ~) b
  707.       }
    0 X7 j; ^2 n) k0 m! |& ~5 K+ c
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();0 n  G2 `. i6 B: r( D/ N2 Z2 L" D
  709.       dwStartUpSteps=2;
    ! d- ]' V( o% c) C' J* Z
  710.       break;
    0 d- ?/ d& b* g7 w9 q% [
  711.     case 2:' [2 ]1 \/ m: f* q
  712.       {0 T2 y: @5 e9 p9 [3 ?
  713.         int iEOF;
    - K9 K/ w" d5 j/ ]: R1 a
  714.         FILE *fp;
    / `+ j# T+ r3 {+ z" x* C# m1 f. K
  715.         char szString[512];
    / B" f1 k1 D. ^4 x  h2 {
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* n. G8 K/ c7 ^
  717.         if(fp)( W6 h! I# [$ J+ T, [8 N; I
  718.         {
    ' `( Z! \! E! R, a
  719.           do
    5 x2 p7 |, ?3 e% |* Z' i6 s* r
  720.           {
    . j* a' `/ ?/ t2 N
  721.             iEOF=fscanf(fp,"%s",szString);
    % D* V1 a% l$ V$ Z* E/ @4 L
  722.             if(strlen(szString))
    ! B8 l+ P0 ]! |, v" S$ h$ c% ?' c
  723.             {
    0 d" d; N& S# z' y$ g& V
  724.               if(bFirstChar)
    ' F0 h. R. H0 o3 X# [
  725.               {
    & d6 q3 e9 K* m. I5 }; y5 r1 \
  726.                 bFirstChar=FALSE;
    ; ^' `$ |- f+ c2 K
  727.                 bConnectIsBig5=FALSE;
    * y* V: n+ z7 T& F6 d
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    % Z# b8 j0 f% p* E( @
  729.               }6 [' i; j% {7 l0 n% Z9 Z
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 F0 R$ K! h7 t& M) e" x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . }: K  A4 k. B3 @% Z+ Q1 ^3 w
  732.               dlg->m_ListText.AddString(szString);
    $ x0 [( C/ \6 n% k7 e
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) D( T  l0 j* ^
  734.               *szString=0;
    ' G! ?- b8 a0 [: I
  735.             }* Q+ E" k+ [- k: N$ r
  736.           } while(iEOF!=EOF);
    2 `: E- z7 _6 }5 y; N; ^9 o6 Q. |
  737.           fclose(fp);
    2 ?) z/ t! Z0 {& A! f0 e% l1 M
  738.           unlink(".\\DownLoad\\readme.txt");
    - n1 S7 X$ `" G' |7 o
  739.           dwStartUpSteps=3;, m' n2 |4 J2 P0 C
  740.         }3 E# |: ~2 V/ t' F" F/ e/ i
  741.       }
    ! Y9 l" H* F1 |( g& t2 E* Z' f2 W
  742.       break;
    - Y8 @4 y% m- j2 S0 c. ]$ x4 J
  743.     case 3:
    0 x1 e  D1 g: a, O
  744.       if(!Dn.Connected())
      o, F  y$ h" j* V  \( E, g: l
  745.       {
    ( r" g. g# G6 Z( d9 z& s8 G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    6 ~$ f: n, ]8 g- y
  747.         dwTotalFiles=1;
    ! e2 k5 p1 d3 X! g! D5 P7 f
  748.         dwDownLoaded=0;( r0 s; H7 a& v( u+ [
  749.         bSilentStep=TRUE;
    * ?% K" R' D, ~4 f' Q6 O8 P
  750.         bCompressed=FALSE;4 B; `0 ?4 C0 V0 V/ U; @3 m6 P
  751.         strExtLocal.Empty();) j# s8 M7 |5 C  C
  752.         strFullName="checkversion.txt";
    . s7 A  b' c" I$ R
  753.         dwProgramState=AP_CONNECT;
    $ `. K+ Y0 _, B* q* X
  754.       }
    ( V: P4 j: u+ S+ |* \
  755.       dwStartUpSteps=4;
    ' {( u/ X" y0 A0 T8 k# W
  756.       break;" w. {  e( j+ h; J
  757.     case 4:9 \" J$ V  Y% h' z9 F; i
  758.       {* t) j6 n5 F2 }) r3 R
  759.         FILE *fp;) `! L3 N3 `3 y2 T' y8 G4 [+ R
  760.         char szString1[128];; B9 l, x0 ]0 K+ F# v5 p3 x+ w  {
  761.         char szString2[128];  m2 [, ]/ i- ^- I
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    - w* U: H7 Q) x7 e: L0 V
  763.         if(fp)
    4 S* y' r, ~6 |
  764.         {7 w; B. g; E6 j
  765.           fscanf(fp,"%s",szString1);
    0 h8 T9 }% n! a  z1 O$ b' F( D( |
  766.           fclose(fp);, H6 ~! z' q) a- {+ x9 }( ]
  767.           fCheckVersion=atof(szString1);
    ' J" Q- i8 a( S# j
  768.           fp=fopen(".\\checkversion.dat","r");9 N& X; {$ v% Z1 s5 r
  769.           if(fp); r" L% A' \- O$ k- x( G1 j; j
  770.           {
    ) E- P, `* j# e3 l6 @# a
  771.             fscanf(fp,"%s",szString2);8 B/ b$ i/ Q5 x7 c* P' A
  772.             fclose(fp);8 @3 L6 I* B% W1 t( v
  773.             if(atof(szString1)!=atof(szString2))
    5 Q- e. i0 t" L4 b& O
  774.             {# u" {4 i7 g5 K  o
  775.               if(!Dn.Connected())
    % r" V  X" c6 ^" o
  776.               {
    7 h! h) n. U: p; G% R3 I" G
  777.                 bFirstUpdate=TRUE;
    ; d/ r2 b: g+ u
  778.                 dwTotalFiles=1;: E# z, z4 J) t. O
  779.                 dwDownLoaded=0;+ ^/ m$ v9 P7 o8 {) n( |* ?* L
  780.                 bSilentStep=FALSE;
    9 a" ~2 G( X3 T- R1 R0 z
  781.                 bCompressed=TRUE;- l. \0 Y3 t0 C  ?7 j0 X+ u
  782.                 strExtLocal=".\\DownLoad\";' ^: ?- O' w) o+ r7 {; j. L
  783.                 strFullName="update.txt";
    0 i. B4 e" p. ?4 Z; R) a
  784.                 dwProgramState=AP_CONNECT;
    : Y( L' j$ L2 U$ @, ]1 t2 A  Q; _
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - P$ `% r1 x2 ^1 u  E4 O: i3 ~
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - T7 t0 N0 E5 D4 M3 W9 T* y7 O. \
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");& u6 ?# _& ^" U. `. U. u) m

  788. 1 h1 B* C& C/ ~* \
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' a: i2 g) i: F: |- b, E" F- `$ n* Q
  790.                 unlink(".\\DownLoad\\checkversion.txt");. B8 o& C; E- r9 j: W1 _  ^# e' O+ o
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 U$ {8 O4 N7 V1 x2 g
  792.                 {
    , D" r  E# G5 k6 @* Z9 F7 `  x
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");$ t. k4 E. y7 z1 t/ {
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    " q1 T" Y; P' V! t7 i
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");; w& z2 a7 p- {% |' w! L- P9 l% n
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 E. ?% G# V, E! n* e# S

  797. + Z% i' `( X$ g" n
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 h$ c5 a0 c& i, M% ]
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");- j8 s' I3 f& l, }, E
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 \. y6 z4 F9 C. b0 q. s! u7 t  J0 A
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " z4 ?2 S. S/ Y- r8 }! R
  802.                 }; d$ V0 {" d' Q" H8 o! }
  803.                 dwStartUpSteps=5;# z. q( P: W: y
  804.               }1 y, k& t5 D& D2 g/ c
  805.             }: o1 Z# _7 Y4 e" f" i! H
  806.             else
    3 o$ e7 |" S) v& z
  807.             {5 s5 \5 P4 b  N5 M
  808.               unlink(".\\DownLoad\\checkversion.txt");2 I1 `" ]9 B, i# ~& N5 C- A
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");( D% }: N" v+ K. l2 s  s4 s/ N
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) @2 X3 g8 \) D& z/ S& ^
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");/ \1 ?% S! F" a( j% o1 D

  812. ! d4 k( n9 b' P, _# J1 L/ o
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * L# \3 q9 [, K& n
  814.               dwStartUpSteps=99;( N1 E# R* U: j3 K/ |) }6 y' \3 X
  815.               bFinishUpdated=TRUE;
    & j3 ^) ~0 R% o
  816.               bCanUpdate=TRUE;) b0 ]2 y6 l% b6 O  m; M) C
  817.             }
    , w, M& Z) S* @; o& L+ b
  818.           }
    % m7 y1 P0 k# P) k, H5 u
  819.           else2 ^- u& p; U7 `" D7 H3 I
  820.           {
    ) J  j( ]6 l7 U
  821.             if(!Dn.Connected())
    4 w$ t, q0 h9 U7 W; G
  822.             {% z  z! Z( J" N( |! n" k  m
  823.               bFirstUpdate=TRUE;
      D+ @: P* M! z4 M8 U3 R' p, ^+ O
  824.               dwTotalFiles=1;
      V0 ]& a% y% p- m2 K, ~+ z6 `' p/ f& O
  825.               dwDownLoaded=0;5 F5 i( \) a7 |1 n( t
  826.               bSilentStep=FALSE;
    & ?+ h* j6 T5 D! t/ y% b
  827.               bCompressed=TRUE;
    - m+ L& l# _5 j. Y: P
  828.               strExtLocal=".\\DownLoad\";
    0 x# g9 P  K8 w$ u# K  A% O
  829.               strFullName="update.txt";
    # G/ A; ~8 w0 F5 ~; E2 G1 {) h7 K
  830.               dwProgramState=AP_CONNECT;
    % f% s# F+ r7 l; ~
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 H  ^+ v, X7 l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 D) x% H# u3 o# \
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");# B5 Q& |$ I! G5 I2 c
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ P1 X/ g7 G+ Y' {- h3 a$ W& l
  835.               unlink(".\\DownLoad\\checkversion.txt");
    # }+ Y, t0 K6 ^, M, ?3 I9 a; l) E
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    : K, p% ~; @+ w8 g
  837.               {  {0 i) @# x- ~0 \: a0 `3 b
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    6 b& `9 n6 Z( s5 R7 ?0 o1 o; ], D
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    6 X/ {0 ]( B# W$ \
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");8 Z1 U  i+ u2 j" L% v5 e  |1 E
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) P" G" {$ l, O" U
  842.                 3 @0 \5 J* v% C  i$ L9 M
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% \5 ~: |- W7 ?) I+ q
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ s7 m' F) G- r+ M- k3 W
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    # R8 Y: v  z5 l; s$ {. a" V, _
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ P5 D- c+ O  H( d( z
  847.               }
    4 ?- G, m6 J) w
  848.               dwStartUpSteps=5;
      D6 p" T3 y: n1 e, m# W& G+ M1 e1 ?1 U9 h
  849.             }7 e+ l. v+ `7 @3 }% s: `, P; I
  850.           }( J) h4 P0 i2 V, @
  851.         }3 r/ n& s0 Y4 m% N, Z
  852.         else
    . u# M6 g) A, u% P3 k) w
  853.         {9 C: t5 X4 ~# z7 J# F+ D5 X
  854.           dwStartUpSteps=3;
    1 K# z9 L* d9 X5 e' P
  855.         }( u! |/ ~9 W6 a' N
  856.       }8 Z- ~% z+ a0 i& |1 [- _
  857.       break;
    / Z4 f) ~8 W) P+ }/ [6 {5 r! ^- D
  858.     case 5:5 Y8 z8 \2 O, L. a8 U( S/ O
  859.       {
    , X2 W8 ~$ e, G2 m2 m
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)4 p/ [4 e* w2 O" _: ]) l  n; d, a
  861.         {
    7 [' }8 C$ q: ]* C& s% [
  862.           int opt_overwrite=1;
    $ u6 Z5 h; b1 {# O
  863.           int opt_do_extract_withoutpath=0;
    ; o" x$ i: f( k3 g0 T% t: k) q
  864.           unzFile uf=NULL;
    # r; {9 u" z0 d  }5 C9 t, j0 x8 n) I

  865. / P& a- A3 Q# `5 n1 F
  866.           uf=unzOpen("Wsa.zip");
    % s* |: r* m4 v! ]+ D4 A
  867.           if(uf)
    ) S# I/ P% F/ S; A- G
  868.           {! N$ [) J) ^- ?% F% u/ b
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);2 c3 b$ a& I1 A+ C& y  C5 e& I
  870.             unzClose(uf);
    : H" f0 H3 D6 \, c& ?7 h
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    7 i! c6 P8 c( R; j5 P, I0 e+ q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    / h; w7 k  y7 D: F( g
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");8 P0 c9 G- z8 `9 z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 p7 u  t+ f# W$ M0 o( [
  875.           }
    % `# \$ j9 M8 Q5 }
  876.           DeleteFile("Wsa.zip" );' ~* R2 e/ b9 [1 @5 N
  877.         }
    $ z* U/ h* I) K) J

  878. ) R- `0 e3 q! Q  p; Z: G( q  n
  879.         if(CheckLocalVersion())4 |2 {. E1 |! t- c
  880.         {
    : m1 d5 _; [. s0 U  H2 c
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");% g$ y+ R+ ]$ f
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");/ W7 }" I2 D% P7 X4 {$ p9 I
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    5 @8 j$ I/ K5 f$ n$ ?0 k  E
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; L/ `4 B" |/ H5 `
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    , `5 e  k2 Q3 R
  886.           dwStartUpSteps=99;- W# {! _" f, w! M% X: v# e
  887.         }/ B7 c' U3 D( J+ Y2 \/ ]# j  p% c
  888.         else& Y+ r5 R  b) v8 E, M0 e' \
  889.         {4 y* P8 i4 `* J: P# a+ v
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , H5 z9 h/ @! S% T+ y/ s3 i/ @
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");6 l5 t0 r1 T% ]7 r( m3 L
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");1 k* n; m& \( K: H3 a

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

4 x+ k3 A* ^# z' u" ^9 S( }3 p9 x+ M3 T6 {% Y: [& v

評分

參與人數 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, 2026-3-4 20:28

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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