找回密碼
 立即注册

CSUpdate.exe源代码

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

5 p: Y+ X& r8 ~# k; ~$ X
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ( M  O# ^# U$ L. p& o1 d# ~9 I
  2. //
    ( m' D6 _6 S: N; d
  3. 5 }) C) ^. C' X) l  b
  4. #include "stdafx.h"( q( M5 K" E. Y2 m- a

  5. $ O+ c; T9 C$ z: Q, R7 v) v- T
  6. //#define UNICODE$ \9 j, J' r4 t8 `6 r- D2 d  b8 d% g
  7. //#include <gdiplus.h>; t- u5 x' n2 X9 r' M# T) ^5 V
  8. //using namespace Gdiplus;0 g/ r& D% a  ~- e# P& h- i

  9. ( m0 i6 e) p% [7 a" l
  10. #include "RevApp.h"* c  ]( L$ K" g% Y3 d$ V
  11. #include "RevAppDlg.h"7 W4 i. g% m* {7 H6 U

  12.   T% `4 o2 S, J& q4 X
  13. #pragma warning(disable:4786)( c7 |/ P$ T3 m$ ^; c
  14. #include <map>
    : _2 V3 ?& J7 U* W, [" o- r
  15. #include <list>
    6 `2 t. h3 V7 T, H; `; `; M
  16. #include <direct.h>
    ' {' O; _. d' A3 x9 U/ ]5 y$ s

  17. ) s2 l# U- U1 r
  18. #ifdef _DEBUG
    " k. a. L6 d) g. j) d
  19. #define new DEBUG_NEW' n3 _5 X) P% M5 q9 D
  20. #undef THIS_FILE- r# v6 Q0 ^/ e" d3 \) }& {5 n
  21. static char THIS_FILE[] = __FILE__;
    , W9 N7 P* L( B: K( Q( s
  22. #endif
    : F6 o0 Z$ }& l8 `  X
  23. #include "SkinResDef.h"
    % a) _: t; u8 t8 D9 `
  24. #include "ChangeBG.h"8 b8 e  ?5 x1 x! E5 ]
  25. #include "AFXINET.H"3 s5 K9 L8 O. R! b. G( _- k
  26. , O" u1 P0 }6 [; T5 u! D- h
  27. #define TRADITIONAL_CHINESE 03 l  ]' N4 f! b9 f
  28. #define SIMPLIFY_CHINESE 1
    1 W" M0 p, v3 D: m5 n8 t
  29. #define ENGLISH 2
    ; [+ ]. n" k- o% ~$ t7 e7 P3 u
  30. int m_iLanguage = ENGLISH;! r" b: w& Q# `1 l) [
  31. /////////////////////////////////////////////////////////////////////////////3 B( t* @- U( D: i6 E' q
  32. // CRevAppApp
    6 L  ]* C( i1 i6 \1 }( t, X/ R
  33. 0 W7 X4 U6 I- ?8 F8 i4 {+ z0 c
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! p4 ~$ Z5 B1 P
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    9 S3 l7 O  v  R
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.! v* s! o+ L5 V2 M; N3 w
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    : O4 @1 O. Q2 l4 Y  G. K
  38.         //}}AFX_MSG$ z& F1 K; `$ j; K
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)  d" Y: d7 v6 O1 Q1 k
  40. END_MESSAGE_MAP(), l2 n1 n$ `* E
  41. . z8 q/ M! _( r: ]2 R7 R
  42. /////////////////////////////////////////////////////////////////////////////
    . y  [! e" w  h1 ?/ a" m/ X
  43. // CRevAppApp construction
    ! X) h% {/ c4 l* @4 z0 I  K& t% b+ N

  44. ) E7 l& ]) a* v" |. q5 _
  45. CRevAppApp::CRevAppApp()
    ) N7 u4 v2 P0 O# y- u# M# M& D4 U
  46. {
    ; j6 ?; L" ^- b4 n0 D! _, x- D
  47.         // TODO: add construction code here,
    * `$ W6 I7 {' U0 M+ C( d1 w
  48.         // Place all significant initialization in InitInstance, ?/ f# B# B" z% b
  49.   bDisplayIsBig5=FALSE;
    " D9 Y  c9 E( B
  50.   bRestartUpdater=FALSE;
    % n1 m4 O7 C7 i; W( D
  51.   bFinishUpdated=FALSE;
    6 L8 _8 P3 `/ L2 C
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 t. Z) y8 i5 r" G+ ~# p0 r
  53.   InitChangeDataBig52GBKS();* K2 |1 M/ _0 u& E
  54.   InitChangeDataGBKS2Big5();
    1 A! A1 H  \1 q" u8 G6 v& c
  55.         //
    ! o; ?  q5 p# n
  56.         bClickRunExe = FALSE;
    ( g/ o5 H% u& o5 c" D. u5 Z1 F; c
  57.         //
    % T7 S- a$ |+ g9 y# H& v
  58. }
    # Q* f* R! c( ?, w. ~
  59. 2 V+ b2 g5 \9 ]& W5 Z" l5 l) A
  60. CRevAppApp::~CRevAppApp()
    , P% X& v+ |" Y; E  r" X2 |
  61. {2 l4 Y: k; T4 R( w* R( `+ [
  62.         // TODO: add construction code here,  H1 }8 w" i+ _+ k
  63.         // Place all significant initialization in InitInstance3 M7 {% G; a& }& i. ^
  64.   EndChangeData();; Q7 v3 O7 r* A! R6 \
  65. }
    " T6 u0 q' _8 R1 g! \) g- g
  66. % Q0 U( @6 X+ o9 S1 r
  67. /////////////////////////////////////////////////////////////////////////////2 B# y! q2 N/ b
  68. // The one and only CRevAppApp object# T" G: ?) B+ C1 z% N9 C

  69. 6 w1 _  I3 E3 a0 T0 t
  70. CRevAppApp theApp;/ z! J3 E# e4 Z

  71. " \  Q4 ^/ M, M4 x" C0 t1 [6 B
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName): _3 h1 L) J' U. [: ]1 i! O( L7 R
  73. {' Z3 i. v* }  s, o0 e
  74.   int iEOF=0;
    : I1 O) \1 F+ D1 _
  75.   char szTempName[MAX_PATH];% A; l+ ?; H# y1 F. ~* z( U
  76.   *szFileName=0;; [; `* Q. B8 p/ ~& @
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! B: F1 n: ~6 e' z. _) O- M% v
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')9 S5 l8 a' `# q9 e8 T* m4 Q9 N
  79.   {# a/ ?+ }7 e1 M8 }3 e' D
  80.     strcpy(szFileName,&szTempName[1]);. K6 o; x! L/ f
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    6 k/ R  t* v) Z0 j
  82.     {
    8 p; T5 M. ]& o$ c5 R4 V. b
  83.       iEOF=fscanf(fp,"%s",szTempName);% N, W5 l% }: ?0 Z# |
  84.       strcat(szFileName," ");7 i6 j% |  R9 ~7 d
  85.       strcat(szFileName,szTempName);3 @6 w% r# K0 n0 h
  86.     }+ ?$ |. H! j: y, u' Q# ~; g
  87.     if(strlen(szFileName)>=1)" A5 x0 }4 H* b/ l  F1 b* D
  88.     {
    $ T2 Z- }" M3 _# x8 N& |7 P- N4 X
  89.       szFileName[strlen(szFileName)-1]=0;
    1 V  E, @3 T$ G3 Q( f
  90.     }( a1 ~9 ^7 p2 t0 Q
  91.   }
    - o' ?3 c/ e' b% V/ ?5 U2 c. e
  92.   return szFileName;
    3 ]' T# v9 P3 d0 [
  93. }9 u; A6 p: G' K4 R! p7 w( {" [
  94. $ I: N# o# u% @
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    " K& R$ a, ?5 b/ V4 N- ]$ ]
  96. {7 Y9 I! `; X0 X# R- V6 A. a
  97.   FILE *fp;& x, ~' E, a/ r0 `
  98.   char *key=NULL;4 P, V7 T6 e% j/ ?& q- q: @
  99.   char version[MAX_PATH];) `! W4 e' u! D; u3 w, K" ^- \
  100.   LPUPDATEFILE file,olds;8 J: ?( G$ \  g3 @6 ~
  101.   std::map<CString,LPUPDATEFILE>::iterator p;+ `, N" W; \: G$ a* }

  102. 2 B! {5 ~7 ]* Q& O+ J1 ^) [
  103.   UpdateList.clear();
    ' S  P$ U& k% b2 {1 r5 f4 c
  104.   UpdateFile.clear();
    - j9 P1 B( n+ i4 ~
  105.   if(GetFileAttributes(filename)==-1) return false;' g/ l+ i; E9 N
  106.   if(!(fp=fopen(filename,"r"))) return false;( v5 }$ s: S) A' s5 B' D
  107.   fscanf(fp,"%s",version);
    % f' @1 c* s# X' n: A2 f
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }* a& `; F4 A5 y* q5 k7 L6 l
  109.   while(fscanf(fp,"%s",version)!=EOF)2 c1 t5 Z* T1 y% x7 d
  110.   {
    5 Y: P: C1 O4 F9 r5 D5 S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ Z" |$ |, t9 a3 t
  112.     fscanf(fp,"%s",file->path);, j2 p, R% M3 P, _  C$ N
  113.     ReadFileNames(fp,file->file);! W2 H7 g# U/ E) e8 R7 p" L
  114.     strcpy(file->full,".");
    8 u9 F  F1 s& y0 L
  115.     strcat(file->full,file->path);
    , q6 R0 }  J. o0 O4 |1 r
  116.     strcat(file->full,file->file);3 r3 c, ?+ R0 \; `: q  L, S
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    4 L. |3 U  [- r' L! H
  118.     {
    ; `+ `7 b8 U$ t* `) j! c9 \1 E
  119.       file->vers=(float)atof(version);
    + X; _  ~% Y* e9 _0 @
  120.       UpdateList.push_back(file->full);# ?) @2 Y- z3 c3 [" T: J- k+ w1 ^
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
      ^& c; z2 \1 h& ]. }
  122.     }
    8 Q' G0 F$ N1 ]5 i8 G
  123.     else9 P" @, z2 }$ k% G/ Z$ H  j: Q( S
  124.     {
    4 Z4 o  B3 s" u
  125.       olds=(*p).second;- L0 U% M/ ?" O* A: k# x; l; s9 @
  126.       if(olds->vers<(float)atof(version))* b/ v& E- y9 K& N. O$ O# G7 N
  127.       {1 h6 v/ z  f4 }4 z; A" V; C
  128.         olds->vers=(float)atof(version);; T+ t1 ^# x' f2 o4 M$ _+ v: y
  129.       }; `. x7 l, {* |3 j
  130.       free(file);8 G$ j8 u: y, P/ z6 m) f
  131.     }  |, b9 L5 u& t" }2 V3 Z: M
  132.   }, ~" P9 j7 v# I+ z
  133.   fclose(fp);( |" Y) [0 ]8 g) Q! U. X
  134.   return true;" {' E7 K7 |* h8 i, u, H7 B
  135. }5 l. z( o# U& c4 [

  136. 9 N5 t' `) v- E9 D& c# i3 _4 s
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    9 v7 O, n, X+ ^6 z( w
  138. {
    . S- ~. o% j; E9 M
  139.   TCHAR  szFull[MAX_PATH];
    ! @) \9 r! U  U8 D
  140.   TCHAR *token,*inter;) x& v/ [' }3 P# L, ~& c
  141.   *szPath=0;3 o. S; V0 d" d/ I
  142.   strcpy(szFull,szFullPath);: {6 `& ?0 }0 b. v. x
  143.   token=strtok(szFull,"\\/");. R& s" b! P* p( k+ h7 b
  144.   inter=token;
    * U- b) T9 \; n% }/ h, v0 B
  145.   while(token=strtok(NULL,"\\/"))* L5 U# N% f! X* G  ?. [
  146.   {/ {! q" C2 Z% h' Q& j1 h0 C
  147.     strcat(szPath,inter);# y  O  E1 \& [9 ]6 q3 I5 k( W
  148.     strcat(szPath,"\");5 J3 d% M0 A- e, _+ C' I
  149.     inter=token;" N- Y5 j+ L6 z+ ^. \
  150.   }8 L4 X! Q7 x& W
  151.   return strlen(szPath);" T1 P5 ^+ ~1 w6 i  S8 z
  152. }
    7 P4 ^; z. {% g! b! D- Z5 |

  153. 0 I3 p+ W0 O, K- `* ~! t
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ; k; i! O7 T. i6 j% ?0 v+ m& s
  155. {6 j4 D# G" r, ?
  156.   DWORD attrib=GetFileAttributes(Target);
    5 w/ J/ \- |( {8 [' g
  157.   if(attrib!=-1)7 u" y# x- F2 ^# s! f2 l- G
  158.   {" b6 \, N/ ?0 @; U
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))9 F! Y5 |1 ]+ [( B
  160.     {: o, ~6 T. x6 Y# h, Z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    , r- {7 F" W' L7 U2 E  q0 d0 V
  162.       SetFileAttributes(Target,attrib);
    . a- k0 C4 K0 s% f% o
  163.     }, |& Z; A& F* }% A1 k6 P; U+ r
  164.   }
    . U2 f4 k0 Q1 e/ C. S3 s* f; [
  165.   CopyFile(Source,Target,Erase);
    4 t9 g, o% i  _/ @- k
  166. }, t# i4 G9 C4 S9 a# k

  167. 8 q( {' N5 ?# g1 y" W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)5 o4 s- `8 q7 Q
  169. {, m# M) V$ A: H/ V+ X! Q+ E
  170.      FILE *fp;
    / ]9 e" i: B* ?- ~6 \
  171.      char  szBuffer[8192];
    , q  l; Z1 e' Z1 h0 ^
  172.   va_list  argptr;
    ' p% g' z; O; X

  173. ! K8 q5 x2 U: }$ g0 H
  174.         va_start(argptr,message);3 @3 `' g" O# Z# }
  175.         vsprintf(szBuffer,message,argptr);
    7 ^- ]! A1 C* T+ V$ U
  176.         va_end(argptr);
    ( `3 ]% Z- v, Q8 t# u8 j" h) ~# ~& I: t
  177.   fp=fopen(FileName,"a");
    , h6 ^) f/ T. p' Z+ M! a
  178.   if(fp)' a! k% l; M+ r2 u# f
  179.   {
    ( m- V, r" V! z% H& w6 x: h! f
  180.     fprintf(fp,szBuffer);( q4 L( h( r6 E) ^, F+ Z( ~, R- D
  181.     fclose(fp);! g) L+ O4 U, w. J3 c
  182.           _flushall();
    & P" h/ g# d* J6 K
  183.   }# m  N0 e' d4 w+ q1 Y) k
  184. }
    / O# P0 E- h0 U5 h
  185. 9 z8 t5 j) u( t% {. j  ?# X
  186. BOOL CRevAppApp::Fclearf(char *FileName)( {& V5 R" D% }- ]
  187. {
    9 S3 {. _7 S" @' A- e8 W
  188.      FILE *fp;
    $ `% R( ?5 D: A/ c
  189.     DWORD  attrib;
    ( t2 B; U" L) l( {3 J7 @% J$ x
  190.   attrib=GetFileAttributes(FileName);' j" {# f3 T* @! `
  191.   if(attrib!=-1)
    ! Q& A6 n5 x$ u/ l/ O+ y
  192.   {4 j% ]% e8 d& h1 j5 v/ J' L
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);9 u3 Y  i& i2 g
  194.     if(!SetFileAttributes(FileName,attrib))* i. f2 _1 Z6 S- B0 l9 k
  195.     {& l# I" z- b) @6 y( Q7 W+ _" v) q6 T
  196.       return FALSE;% e. S. Y- w% X
  197.     }; z! z$ e' q! D1 D0 t5 B" v5 l5 p
  198.   }2 m; B- E$ P9 t/ D
  199.   fp=fopen(FileName,"wb");
    , s& Z" @% b, w
  200.   if(fp). O- P" F2 x0 ~: F$ L3 C
  201.   {/ E, w( G1 F2 G* ?2 ^
  202.     fclose(fp);
    " }0 x9 Q4 M. d; |' O
  203.   }
    . W& X- c; K6 m0 Q
  204.   return TRUE;+ C1 A  c7 U$ S- K! x7 Q8 w
  205. }9 @5 J$ Y4 z. r6 o7 b; X

  206. $ r1 z; g1 L6 D# }" h2 H
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ ?8 j# M8 f" x% B' q
  208. {
    7 S" m, ]7 {: s  c) X8 H2 I
  209.   char filename[MAX_PATH];
    + J0 {6 u7 ?& G! w1 G8 w1 t
  210.   LPUPDATEFILE file,olds;
    5 ]; [, j+ R! B" r* a2 a
  211.   std::map<int,CString>::iterator i;
    & Q, d2 c( ~/ r6 o. c9 d& J
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ B6 i1 ]6 f( x. t+ i0 `
  213.   std::list<CString>::iterator l;# \) F' I7 E$ E6 X1 E
  214. * M. g+ d5 F" N
  215.   if(bFirstUpdate)
    * D; a, ^0 e, ~' U% [( w9 z: H: D
  216.   {- Y7 R; I9 I9 M1 f9 |) }8 v$ ?
  217.     dwCurrFile=0;
    ! n7 C, ]7 X3 O" ~
  218.     bFirstUpdate=FALSE;
    0 T; Q; T$ I% @+ v$ p
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " o6 n0 v: a& j
  220.     {) v+ ~* W5 t& \  z. g6 m4 T4 F
  221.       dwTotalFiles=UpdateLocal.size();
    + [) j+ F5 f4 Z3 J7 \# V
  222.       dwDownLoaded=0;5 A* w: o  q4 N6 f3 \
  223.       bSilentStep=FALSE;
    3 T! E% Q7 [/ D4 {2 U! U. r
  224.       bCompressed=TRUE;
    ! ~  a' C) u: M" i7 N4 G6 E1 l
  225.       strExtLocal.Empty();
    ( b$ e: u3 g  X; B7 h. {/ t9 k/ B2 _3 K
  226.       strFullName=(*i).second;
    ! d; x6 K3 s; @3 s3 z
  227.       dwProgramState=AP_CONNECT;( r& X  J/ k  O- N
  228.       return TRUE;6 @2 q  `# j! ^7 k
  229.     }# z. s4 R4 y% V, D6 _" |; \
  230.   }
    ' ^, p6 E+ w4 i: [' n
  231.   else if(bRestartUpdater==FALSE)
    4 k+ p( j2 b0 n/ \2 I
  232.   {
    % J5 D; |: p: D$ g
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())/ b: f0 d7 V9 }7 {/ X; K9 l, ^' m, e
  234.     {/ ^$ y- w: k- q& L6 ?/ S
  235.       file=(*p).second;
    8 {4 H/ |- c  V$ f: N
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())8 [1 d4 d6 z# J. M1 e
  237.       {' j: U; H$ i$ k- A# _1 G
  238.         olds=(*p).second;
    # w) C$ H; b* i  [: k! Q* M0 ?
  239.         olds->vers=file->vers;3 ?, o8 p$ b9 ~2 F7 ^
  240.       }+ V' U/ p& v- M4 t
  241.       else
    * C+ n8 D2 @8 {8 Q, O
  242.       {& m( }1 j1 x7 G0 E0 k3 u6 g
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : W3 B% \7 x8 W; _, Q
  244.         memcpy(olds,file,sizeof(UPDATEFILE));$ f  Q* e: C2 N7 s
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));7 U* ?' n7 P/ H2 [. F0 N
  246.       }
    % U" A$ t* n  c- R
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    " U2 G+ [% A/ |+ y9 t& H, C
  248.       sprintf(filename,"(%s)",file->file);( t  }7 f! \* P& T
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      N/ B2 \* d) t! f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    # K$ [3 T; `7 T9 W6 y0 U7 Q$ S# i
  251.     }/ f; Z$ S) d/ I3 D5 k  ~9 M
  252.     dwCurrFile++;
    9 h% X" m8 E7 I* l2 e
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) d) o+ R4 E: `7 r3 i2 l
  254.     {6 s. D8 f$ `; I) n2 P( M
  255.       bSilentStep=FALSE;9 j& a8 G6 c+ h  E9 R* a5 t
  256.       bCompressed=TRUE;
    " T/ P! _1 p' R0 e9 W: o
  257.       strExtLocal.Empty();. F* ~; v( a; f( Y/ q) x- @
  258.       strFullName=(*i).second;! c  {% G7 a- D. v# F, y. s8 [
  259.       dwProgramState=AP_CONNECT;
    ! ?* H0 e* z5 f6 a8 k
  260.       return TRUE;
    ) ~% [9 g+ J' H) g* P
  261.     }
    ) N5 J' W9 t  v1 P' f- t6 `1 M8 z  y
  262.     if(!bRestartUpdater)
    1 V/ S, ~' e) G
  263.     {
    $ s  r8 \) e+ P1 t  Q
  264.       int iCurrSize,iFileSize;
    1 H, p8 Z1 ?  f$ V% R. a+ r
  265.       iCurrSize=0;
    # x7 m- r. J/ b- |" o7 ]  G; O
  266.       iFileSize=UpdateList2.size();, _6 k! b* v$ X
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . t& A8 z: y8 X
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    " ~8 P, y7 n: \( P: X: |
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ) X9 I! `. E% E/ h- R" e
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! Y3 S) P7 `' `5 x( v8 c
  271.       Fclearf(".\\update.dat");
    + H5 g3 s! ^& Y- i
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * D7 a' Z+ }0 k2 Q/ |' G9 w. ?
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)  E" D% M/ [# s+ i
  274.       {/ E* X$ ^% Z/ @/ T' R+ C
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    / @, j0 Z5 }1 w, n  J
  276.         {# W0 u6 w+ J  Y' ^0 |2 o
  277.           file=(*p).second;# V! f6 x+ ]: ]7 I
  278.           sprintf(filename,"(%s)",file->file);$ j, v0 c1 F& j2 M
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 Q% U5 W  O* ^5 w2 ~0 s) ]
  280.           iCurrSize++;9 j3 m% T7 L% M: v
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));2 i" w$ C, C) [' d0 X" F1 b
  282.         }9 e! |2 V! T: W8 X9 C* @
  283.       }( Q" V& g) |4 ]- n
  284.       unlink(".\\update.txt");
    2 U/ Z& _/ Y/ P" A- Y
  285.       unlink(".\\update.tmp");
    5 l  M' o0 F# g) b* w
  286.       Fclearf(".\\checkversion.dat");
    ( T6 v  d2 u+ _# y; M+ B) M
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    - F" d1 ^: k2 b# f4 p
  288.       if(UpdateLocal.size())
    ) G5 s4 K1 M" I# b% |
  289.       {
    ! ?- G* q' i5 i# `, A
  290.         UpdateLocal.clear();
    7 v$ O( h# q. K9 e4 K+ U7 X
  291.       }
    6 q4 z* f/ \0 E' N
  292.       if(UpdateFile3.size())
    ; ?2 s! |5 m# z! M
  293.       {
    ! C- b# h* K8 d* n* f& O$ [
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 G: p% v& f$ [0 K$ v3 X
  295.         {3 e4 O( Z( `3 ^! s8 C6 j
  296.           file=(*p).second;/ F$ R& @/ T% r% F) e
  297.           free(file);
    3 u- i1 O5 m* W$ w/ T# s( R' m0 @
  298.         }* @; _& c9 s/ q$ w9 w1 W( v
  299.         UpdateFile3.clear();$ o' f$ J: l$ F; ]5 o- m
  300.         UpdateList3.clear();0 P* I' M5 `6 B' v; w- B/ D
  301.       }6 @' C+ C& R4 Y; @% A
  302.       if(UpdateFile2.size())
    , q+ P$ S3 f1 L+ r
  303.       {" F4 L/ j% I6 P; m4 k: V8 }3 i7 m
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 X: y  ^, [# k
  305.         {
    % R, t, t: o9 ]7 k$ S8 J9 E
  306.           file=(*p).second;! E+ A' |/ i& W2 d% K! T) B1 V
  307.           free(file);
    * E9 F& Q' t+ E% A: J, t
  308.         }
    0 {/ v# Z5 ?' K& G, u
  309.         UpdateFile2.clear();
    5 S& a" E" Q% v" V) e% `# U
  310.         UpdateList2.clear();
    ! q  j$ K, Q4 T) B% C% p
  311.       }
    ; G4 Y6 ^: s3 w! u* Q5 O; R2 c
  312.       if(UpdateFile1.size())
    " k0 F5 o1 r2 H( `. o! d$ b$ |+ N
  313.       {
    & f. t+ @* s0 k* D1 d' [+ ]( r
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- P  J  z- e5 t$ v; f+ K
  315.         {% s3 r0 {4 z" F4 Z: l4 ]! {3 B
  316.           file=(*p).second;
    0 q6 L: o% T, K- X# r
  317.           free(file);0 L: j3 Z% L. T5 K* U& \
  318.         }/ ^$ f: u3 d+ k) i5 R, O
  319.         UpdateFile1.clear();# u2 C+ D" U% x+ w1 `% k5 L+ x% v, z
  320.         UpdateList1.clear();) e" a# _6 W  m- D
  321.       }
    1 }. k3 V( t7 b
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));) y+ V  G/ W; l+ ]$ ?; D" Z
  323.     }. ~* Z3 `4 b: X( D1 O& a
  324.   }% \9 \0 p0 b# n- Y9 K. t3 q0 N
  325.   return FALSE;
    1 x5 ]* N9 B' h( U# X/ }5 [: i
  326. }
    % M+ F6 `+ q7 {- c* P0 d# f
  327. , q7 i( L9 c0 S$ k
  328. void CRevAppApp::ClearAll(void)7 c; W- B) u6 `3 d# X6 X9 j' v
  329. {
    3 b% z7 c" j2 t' ?0 a
  330.   LPUPDATEFILE file;
    : \# o# Y, D9 T4 _" ?2 x
  331.   std::map<CString,LPUPDATEFILE>::iterator p;! `# u, @& l4 u0 t  C) k5 h6 i. m
  332.   {  x4 o- x* A' C9 T
  333.   if(UpdateLocal.size()); D% f& P2 d6 h) A
  334.   {6 L) J1 z# n# ~; {% S, l: `$ G2 @
  335.     UpdateLocal.clear();( @# }+ ?$ B& }) @) O8 C
  336.   }
    9 P1 x( O/ h8 `$ a) @4 X9 N
  337.   if(UpdateFile3.size())
    ! t% J) ^0 S+ g2 F7 U' e
  338.   {
    ; l) ?, e0 L/ [/ r7 \! `3 y0 S
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    / F9 o/ \+ G) A' v" W0 k3 ]
  340.     {7 v9 S' I. N9 O" W& I8 C
  341.       file=(*p).second;8 J- g. V; b! k8 b# l
  342.       free(file);
    + n' {/ o  c6 C& T$ J! L" s) I- `6 H
  343.     }
    0 l; \1 c. D5 C1 _( B5 r
  344.     UpdateFile3.clear();0 h( c8 ]3 o! D4 v
  345.     UpdateList3.clear();, i) x4 N3 N* `
  346.   }
    ! H) T0 S- w& G6 p# R% ~6 s2 l
  347.   if(UpdateFile2.size())1 }, V! {- G1 v) U+ i- R6 z
  348.   {
    " k7 I5 u/ C+ I* u& X
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 p" R) ]; ~" D; x5 {
  350.     {& y4 ^1 @6 A2 O( h
  351.       file=(*p).second;, u9 g% C6 S% v# q1 Y% D2 n( u
  352.       free(file);
    1 D3 C! z5 S: D8 ]+ T
  353.     }3 `/ B' E5 m* w% S2 h5 J0 s
  354.     UpdateFile2.clear();
    " f+ G% w- n( E+ X9 r: [" N7 |
  355.     UpdateList2.clear();
    - N" f% N5 Z7 h" j$ C% t
  356.   }
    / _  n/ I0 F6 |: I
  357.   if(UpdateFile1.size())
    9 L0 V/ t- {9 |) p8 b
  358.   {/ d. i" ^6 z) N: _1 C& V
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' v, @4 l6 Q. \( [
  360.     {
    # @0 g! k1 l9 O/ m. P4 V, j
  361.       file=(*p).second;: }3 c% r3 [" b$ B* z
  362.       free(file);
    & s5 r5 ~8 H) r; ?; G& Y, s
  363.     }2 ^$ |. q: Z' Q: [/ y) k1 s0 y# e9 O8 |: e
  364.     UpdateFile1.clear();
    / D) g* N1 I' ^- R2 X" L  l( M) u
  365.     UpdateList1.clear();
    8 f' G, E, Q, i8 ]0 G6 P) v" j
  366.   }2 L7 Q! g# S3 ?0 z* F2 v
  367. }  ' Q2 n- g! _( f. l) ^! Y9 c
  368.   
    , W2 d& g2 z: }& ~
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ) k  w; Q& M6 ^$ D, {
  370. {; _* C' E* I& f
  371.   int c;' h: s2 T. P9 e& k' n+ k
  372.   LPUPDATEFILE file1,file2;# _4 |$ w# S" u+ ]1 K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;& j; o5 c2 Y- Y. v" {8 ~! X
  374.   std::list<CString>::iterator l;
    4 T) b9 D: V/ g4 [& {5 a3 u# j

  375. % r8 z( O% }: _/ C  q
  376.   UpdateLocal.clear();. n% Y. G  n8 t5 j5 r" H% t
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);% d' P$ J' T6 r$ y+ o8 O: f
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);1 B, r& M- I6 F1 M$ \' X) s
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' \$ B/ W' Z! X7 z! O) k! U. o5 M
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 V2 @- I+ H: i- b7 n0 }
  381.   if(UpdateFile3.size())- d: a$ b1 b: @' q
  382.   {
    ! o- k" ~. p$ p: b& G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)$ R' U9 o+ b. C
  384.     {
    , G3 C& d4 V8 E0 p: Z
  385.       file2=(LPUPDATEFILE)(*i).second;2 Q3 p9 \: ^! y. @
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 p5 _: r) x+ N& T5 G5 Z4 Y  K
  387.       {/ z% Q+ z6 R, O9 F+ J% A
  388.         file1=(LPUPDATEFILE)(*p).second;1 A% D/ R, N9 D7 X, _3 _& H
  389.         file1->vers=file2->vers;
    . D& ~+ K) a* u+ f* w0 _: D
  390.       }
    - X+ N: C6 y" `% l. H! d+ c; f
  391.       else8 \( Y- j, Q" v8 p, \5 E
  392.       {
    ) C% l1 w" X/ W" E$ I
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# H  v; |) L; {5 o
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));# {$ Y3 d* A' _0 ^0 f8 r2 Z6 g
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ' w# Y# Z0 G* W7 r8 l
  396.       }
    3 u$ p- W3 i! S
  397.     }
    2 `& |% @" y; o, x5 q/ d
  398.   }" u( P  r% S7 g. V# [1 B/ T' p
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)0 w1 K+ |- T, ]( `8 r9 b
  400.   {2 J) b1 Y5 o2 K* D3 j
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())3 o1 r# {/ N7 i) R+ r- A9 j& @
  402.     {
      D: |5 E3 k  N  Q: L
  403.       file2=(LPUPDATEFILE)(*i).second;
    * |: _0 l  Y: D1 T  M9 C# g0 L$ u
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 b" B: w( u  Z( a1 b
  405.       {0 v7 m8 l" Z) \, Y/ N" I* e8 v
  406.         file1=(LPUPDATEFILE)(*p).second;, I8 t* [! ?4 n9 G# b6 T
  407.         if(file1->vers!=file2->vers)4 g4 o  N' D3 V8 ]( e
  408.         {& S- M% w; V: T  D/ {. o
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, P! M3 @! X% ~, r0 k* [- h% P3 S
  410.           c++;$ i8 L$ `: ^8 Y
  411.         }% Z- s% }+ k7 D& m7 U0 W
  412.       }( q: r. L$ g9 p6 V
  413.       else
    ; n) s, Q0 U! L4 S; r( C& x) _
  414.       {; @4 ~8 s. ]4 b2 e) R0 w& X( z+ \
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ \1 R0 Z& k1 ?; R" u
  416.         c++;
    ' @  e8 g  v% ^1 w" S# J* F9 Q
  417.       }, P1 Q9 `) M' ?7 Z; W9 {  X
  418.     }1 J% U# p9 A! W6 _( O4 h
  419.   }$ r$ X' T8 }+ @  I8 q" a7 c6 y) D) g
  420.   unlink(".\\DownLoad\\update.txt");
    ' z; s- X' H  A. W- ]* ^; U" p* J
  421.   if(UpdateLocal.size()) return TRUE;
    8 P. q1 C2 t9 S0 o( \
  422.   else                   return FALSE;
    ! G; T3 K: D$ d7 j$ h
  423. }7 i- g; ?# E' g( c* {' P" b

  424. 8 _) h8 d2 i) F- T5 {; _& `( V+ `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"% Z) o' ^# X) N& Q: @2 {4 y/ s, ?
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    1 F: a* w% n9 r; j( ^) `+ Y

  427. % U. L9 [2 d$ [

  428. # z# e6 K5 Z8 u7 |8 t0 D
  429. % G5 X2 U% J  F9 d
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    - T, i' E% ^( o: z, S
  431. {2 L* i1 M) p9 m  w" Q- }3 ]
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;. C; Q$ `; _( W6 F. i$ ?
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 E3 M/ K$ G) i9 W( Q
  434.   {
    $ t- ~' z4 E2 o& T
  435.     char szLanguage[50];: b! z' R* w4 B6 l1 {9 i
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & R0 o% r9 r/ x7 `: b
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! L% O+ b9 f) T* g! n7 H' s
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ i8 N7 G! ~" B
  439.     else                                   m_iLanguage=ENGLISH;
    ; ]+ P' u/ m4 R  K3 ]
  440.     char szRegister[100];
    . [1 t9 l% m9 x# U
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 Q! @) l. K0 Y+ ]! r" x, U" ?4 r
  442.     strRegsName=szRegister;, R/ L& J6 T4 I% |
  443.     char szPatchURL[100];
    , Z) H' W6 R- A, _: ?
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");  {" D. r1 G5 {7 g* o$ u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) M6 u, E' U/ I
  446.   }/ f9 w  l( Z" l. c! R5 L! s# l
  447.   else
    2 o) `/ _" Q4 ?. d3 k2 D+ R
  448.   {
    ) x; S) N( p- m9 p+ F
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 b/ t+ o! a) E; N- d4 K
  450.     strRegsName=DEFAULT_REG_URL;1 \$ b: @6 \0 u' ^8 r" b
  451.   }/ a! x( W; a9 M2 |8 I9 `3 F9 t
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ( H! @9 t1 x8 r" h& z" Q
  453.   {
    1 u. T/ i2 O. p) S' V2 V% w* q
  454.     char szIP[50];
    8 s5 B0 o8 j  _- v. M" l
  455.     char szDIR[300];9 v$ U5 v+ f9 O1 m
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))( M2 h# S8 `8 [- N" ?
  457.     {5 N! a( x, ?1 ]1 ]4 X5 k; w
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    8 W& q" s% s) |8 w4 d& L5 \( d
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");' N9 H( n1 S5 U$ ~
  460.       strHostName=szIP;5 A7 {, Q( h6 Q0 o+ M
  461.       strHostPath.Format("/%s",szDIR);
    # N5 d- J& N2 T8 C, o0 i
  462.     }
    % O/ E' I& {7 j; T6 W( l. \3 \, [
  463.     else
    ) y% x% l- S/ M* A
  464.     {
    3 x: ?9 R! J. L! Q2 w" b
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( W! _5 m' I' i- I7 R$ L1 t+ O
  466.       {+ n5 d2 S: A, |  u( {3 @9 Z- B+ j3 c
  467.         char szLanguage[50];3 |% D; |" ?  |6 Q) M) O  }
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * X0 l- r/ ]6 Z; ^
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 z, M; a5 _$ h; n. W- r
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 T) v$ A* g  ?: D3 X
  471.         else                                   m_iLanguage=ENGLISH;# `" g* L, n% U1 ^' F# F+ c1 I
  472.         char szRegister[100];) r7 q2 f8 |: G
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) `0 h. k0 \" k- \
  474.         strRegsName=szRegister;
    & p, S3 `* a: p  N, [, y  D/ I6 e: y# Z
  475.         char szPatchURL[100];
    ) v/ D/ M) k" @* A9 B
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ k# }- i. Z" t6 \: r$ f9 J
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 y6 k1 T7 E; h2 ]& \- z
  478.       }$ `: n( P, |6 x  {, z
  479.       else+ S. I9 ~1 H* e) k; K% O
  480.       {- s( c2 m% m) x5 n( u7 u
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& z, q0 l0 r1 H0 A) w" Q
  482.         strRegsName=DEFAULT_REG_URL;
    " g+ ^! b# Z% h) Z# m
  483.       }1 ~" F9 ?+ u, ~8 I6 g1 c0 }
  484.     }
    5 s% D" M7 ]# V+ R. I* r
  485.   }
    : C1 u  M. _9 I3 I% b* q
  486.   return true;' \# {2 b& E3 E( T
  487. }
    $ C8 Z/ {" p+ p% h) x6 |6 k. \2 }
  488. ! I3 A9 J5 `( x, Z0 U- b
  489. #include ".\ZLib\unzip.h"
    / ]4 v7 ]% B% L. T8 [  B4 F
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);6 x% U3 z' z- k) E( ^0 N
  491. /////////////////////////////////////////////////////////////////////////////8 K$ U& d9 F4 _3 R/ X+ B2 G( U/ G1 x
  492. // CRevAppApp initialization; ]/ |3 J- O$ v' A2 y+ H- F6 ~3 v

  493. . x, N: s- T+ C* {3 }4 L
  494. BOOL CRevAppApp::InitInstance()& @9 E' H0 T! D9 j9 N% k, B
  495. {
    * y$ |* P& R" @, L; X8 v: [  w
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , \3 y. X' x6 D
  497. % {3 Q( d: q, B' ]
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);, M3 S1 H% E) q1 l
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    1 M1 q! c0 X0 W* `
  500.   {
    - R" ^% K6 t4 h* s; c% y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");( q3 R& c5 y; R1 Z# e/ K4 T3 k
  502.     GetPathFromFullPath(szPathTarget,szPathSource);, o2 Z% a4 J$ ?/ v1 N# L# I
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 z; V/ s: }. P+ n
  504.     {& F5 @( s1 ^; o/ y
  505.       strcpy(szPath,szPathTarget);
    + q! L5 p( m2 [9 q7 H) I
  506.       SetCurrentDirectory(szPath);( A9 e+ Y7 H* c7 z+ y2 Q/ I: I( _
  507.     }8 R& `5 m" A2 p9 M) i( K8 r
  508.   }2 W! f  U8 S2 S' m, M  O
  509. #ifdef _DEBUG
    " h2 ~6 L  a3 [* ~7 y( y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! z! w4 x" z+ ~4 R. B
  511. #else' S* W, o* b. b4 O* J# _
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    & \- C6 |- J# V7 x
  513. #endif
    ; S& _9 t2 {! g& Y5 z
  514.   {5 t+ G# _$ Z* J- V7 t% U% G
  515.     char tempFileName[MAX_PATH];% @( m, a! q1 H7 y4 x9 ?7 |& ?
  516.     strcpy(tempFileName,szPathSource);
    : c0 B  L/ ~+ j% Z3 Z% i* X
  517.     tempFileName[strlen(szPathSource)-12]=0;
    8 M: u* d( m! Z# [5 V; p7 h
  518.     strcat(tempFileName,"\\$CSUpdate.exe");- T' c  x. P5 _
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    6 h8 s- G+ u6 ]# g
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    / H; Y7 `0 @) h% b4 Q" V
  521.     return TRUE;
    / {7 i4 C5 B1 J5 h& X# y. Y8 y$ Z
  522.   }
    ' E9 q) e; K  j  c5 i4 @: h! Y
  523.   // Nuke 0118: Delete run.exe
    $ c9 L$ @# A5 L: u* c
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
      r; v+ p- m/ l: j# x* I+ r& X! t
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    : f6 S2 U; N+ B) ], M: P- t6 Y
  526.   if(!ReadCfgFile("Config.ini"))
    ( h  k4 T: p; Q4 C9 r
  527.   {, J, j4 _8 Y) x
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: D4 b- S" x. G5 N: J4 b
  529.     return TRUE;
    7 f  L0 t' e8 }& K" _3 \& g3 q
  530.   }
    ; L1 {( N7 k( u9 c
  531.   HANDLE mutex;
    : H) y: S2 o2 e+ k/ K& z6 H) y0 G
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; z3 ]1 _$ ~4 o  s, L2 a
  533.   {
    " U, z- P' q- ]0 W/ E) j) A9 @
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)! ^$ Y1 b1 W( Q" s* R
  535.     {5 n, k3 x9 ]1 v- L
  536.       CloseHandle(mutex);  L: S! ^' E! d8 d; b  R3 `
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    7 _' {8 E3 N8 r) S1 {
  538.       return TRUE;
      i$ U  e. v, e+ A" f% S# O$ r- w% x
  539.     }
    4 j/ D! D& m, x, T- _
  540.   }  
      T$ V# f, `; V4 i, z, P2 N
  541.   CloseHandle(mutex);3 p. [( p0 q: E$ o

  542. 3 F, u. G  Y2 q) _: o
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);5 ~$ X; k) v* ?0 \; A: d

  544. * P1 n8 o! _( \6 n. T! g9 J5 b
  545.         AfxEnableControlContainer();
    9 ~5 K& \0 _1 f' Z8 W; |# a3 _# i; w1 S0 Q
  546. 9 ^0 c: j( w& b5 y8 t6 m8 T
  547.   bCanUpdate=FALSE;8 H5 w( r8 H! m1 @: O' R1 t+ K, \
  548.   dwStartUpSteps=1;: [- y' Q& [) i  }
  549.   dwProgramState=AP_NOTHING;
    # T# e/ F) D- x2 @* H" o
  550.   x# g7 G1 B0 J" D
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);( k7 |; Z/ o9 S6 j: q( ?

  552. 8 e* Q% p+ g& I4 [4 i+ K
  553.         // Standard initialization0 @$ O0 u& d- Z8 A1 m* G
  554.         // If you are not using these features and wish to reduce the size' p' L: L  g6 r/ z
  555.         //  of your final executable, you should remove from the following
    7 x$ y# ~: j' B
  556.         //  the specific initialization routines you do not need.
    ) h" ^; f# V6 f& x& F  |) b

  557. 3 G! b6 c( p- V3 B
  558. #ifdef _AFXDLL
    8 X9 D4 D5 C9 ]4 X# A
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    % P) z7 g4 m% B1 R) B
  560. #else
    . Y0 V2 v. M; l5 V- v. p
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically2 L1 ]. \' x! ]) c3 G4 I5 {. i  x4 S
  562. #endif- A, F* l& c6 j2 h" v" J

  563. 1 @1 _; b$ i* z! }7 E0 {9 y
  564.   dlg=new CRevAppDlg;- O% T4 z# H6 G* P4 W
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    0 I  |; n( W0 U7 v: V' X' {: Z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / h( c! I7 F; w
  567.   m_pMainWnd=dlg;
    + N6 E  j+ V: N% N
  568. % N. m* F* s5 F) F7 q6 K" W
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);  o: K. R' u) a, k) g1 w1 G

  570. 0 c+ U# s8 L/ l
  571. //  GdiplusStartupInput gdiplusStartupInput;
    : Q- B1 }  T9 v6 ?8 Q: e. c! H
  572. //  ULONG_PTR gdiplusToken;" J1 E: k$ A( V/ x" Y( |
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    : x) J9 d  B, W3 S/ F

  574. " M8 e, A' d2 X7 B
  575. //        CRevAppDlg dlg;
    7 L, r0 R" p1 W8 s" q# _
  576. //        int nResponse = dlg.DoModal();
    $ |8 ]# e; R5 I, j
  577. //        if (nResponse == IDOK)
    . }$ O% U, P- _) i/ R
  578. //        {0 \3 B3 l2 \, d% d' v
  579. //                // TODO: Place code here to handle when the dialog is
    2 N# o1 z+ e3 ^$ x  B/ r% F
  580. //                //  dismissed with OK) I7 I  ~4 J2 A! l$ I
  581. //        }2 U8 l( ^* A2 [/ A* V: l/ j) S3 O
  582. //        else if (nResponse == IDCANCEL)
    6 ]4 x. i& \1 K1 |
  583. //        {2 i* j. ?' Q+ C
  584. //                // TODO: Place code here to handle when the dialog is; C5 Z% W6 v# d& F. }+ p
  585. //                //  dismissed with Cancel0 y6 r# [  Y# @- M0 I
  586. //        }
    2 k9 g; B' A! [# n$ Y( v
  587. / o% |. ^+ C* _# i  E8 _# `! }
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    : t6 T& E; M! d% K$ o. X7 H
  589.         //  application, rather than start the application's message pump.) r1 w0 b% j/ w8 D# S. o0 U1 S
  590.         return TRUE;
      f3 ]9 Z2 y3 g) O  I
  591. }" j. b8 J1 E+ ^1 `( ?
  592. 6 o8 O$ D- U. t6 I0 C
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    8 H( k) @% z- M2 }+ d" X
  594. {$ S' B- J! ^. E3 e# h
  595.   int i;' s8 A1 O( ?2 F1 Q( X) w. p: W
  596.   char *szRet;2 K! A' |; Q/ ?, Y

  597. . ?0 X: T0 S8 w1 l' X
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    4 X) q2 ]8 ?& F$ {3 y
  599.   if(sztoken)) W- }6 W& }. e( G5 M: w' l) |
  600.   {! n, Q- Z8 n1 N# f0 |8 c# L' J2 E. j
  601.     szRet=&sztoken[itoken];! j3 E) n; w6 ?8 t; W
  602.     while(sztoken[itoken])- M, Q5 g1 E5 u; c; ]( R
  603.     {
    ; q9 a+ T2 |; F3 I9 ?2 E) @6 `
  604.       for(i=0;i<(int)strlen(token);i++)
    $ J# g) Q) M, |' k* g- D* W
  605.       {/ q  s, l' w: }) a' Z% }& B1 S
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    1 }" P6 X$ j  b6 Y) M8 k# K
  607.         {
    4 q9 j5 K4 v( b2 ]# a: [' d
  608.           sztoken[itoken++]=0;
    , O+ E% |, p  u2 c
  609.           sztoken[itoken++]=0;! Z. G* q' z$ a( \9 |# }
  610.           return szRet;
    7 w1 x" Z, o% a4 s+ s! ]4 Y4 a
  611.         }
    + s8 y; H) ], G( H' a. o3 Y
  612.       }: @1 i1 t4 u, T  F2 N% y
  613.       itoken++;
    2 G2 X# t" [+ k4 I
  614.     }' r+ L! J* W# K. ]4 X# P1 ]
  615.   }- }6 h5 ]2 x8 s1 E2 M) @% V
  616.   return NULL;
    ( I! {" Z+ t+ E2 Y: ]6 p
  617. }+ ~! T1 ~: h* Q$ w# Y2 ]

  618.   u: t3 m" Q% Q( z# b; M5 k/ `
  619. void ProcessProc(long Total,long Current)
    9 O: W& i( w) x2 A( f6 j8 u4 P  D
  620. {. J6 L' P0 V! A% t6 T) O
  621.         MSG msg;
    / y9 U4 V9 p* x  N- H
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);1 N: b9 G5 U& Q! L$ i) l! s
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    $ o4 p, S4 q5 W6 v) Z) R; Q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))1 F( w8 [5 E. T, p& ]  Y
  625.         {/ |. J4 w0 a9 Q+ S) k8 x( b
  626.                 if(!GetMessage(&msg,NULL,0,0))
    0 k( c. r5 F) u# b
  627.                 {% F) ?6 Q" f6 Z" `: J
  628.                         return;
    2 q: ?2 r( q  M" \
  629.                 }9 N+ C* v. F0 P: Y8 ~
  630.                 TranslateMessage(&msg);
    " }2 @/ @- T2 ?; ?
  631.                 DispatchMessage(&msg);. d+ a+ ^, ~* J. E% z8 ~
  632.         }       
    6 {: A2 l# [3 ?3 K8 ~
  633. }; J3 @% Z% m. r2 m' ^: L# E
  634. / s# ^) G  w; @  U( M# ]; Q
  635. BOOL bFirstChar=TRUE;' l6 I& t: C6 R$ }2 t/ s  G/ k
  636. ( |& ]; z* _. e0 ^) P) P4 e
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # t+ d" U( s, c" H5 h
  638. {4 P; M7 V3 o* \2 s2 g
  639.         // TODO: Add your specialized code here and/or call the base class3 M, m) a* G! t$ L* ^( ]
  640.   switch(dwProgramState)
    / O$ m" y8 l/ T+ }: Y8 g+ F( k
  641.   {6 x9 N' b. D9 ?, R) n
  642.   case AP_NOTHING:
    & F4 X1 h6 s9 H& o
  643.     switch(dwStartUpSteps)
    3 @' V2 _( _3 }9 s
  644.     {1 }% a8 c& y+ d, A
  645.     case 1:6 f  @1 ?: X/ ^) b
  646.       {
    + L: I6 X( y& J: }; i) ^& `
  647.         int i;
    ! j! ^* i+ `5 z
  648.         CDC *pCDC=dlg->GetDC();
    + ^. K& b6 e* S) ]
  649.         HDC hdcwnd=pCDC->m_hDC;7 ~! k" e9 Z- Y% s
  650. //        Graphics graphics(hdcwnd);  P' c. U5 \$ _& t1 u6 q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    $ M+ L( i7 ]5 i1 e' ^' n0 u- {* f* t
  652. //        INT iWidth=bitmap.GetWidth();
    , v& s) H1 W9 J1 I- I3 o
  653. //        INT iHeight=bitmap.GetHeight();
    ( P0 S/ s+ [8 R9 A$ s& ~6 Y, b' L
  654. //        Color color,colorTemp;7 Y2 }2 w  ?" G, U, A- Z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    : g5 V/ c8 Y( }. A0 W- I5 y( T
  656. //        {- T) L) K4 z: L# Z) @+ q; D! D
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    2 `- T1 |* S6 B" Q) y8 `9 b5 f1 ?
  658. //          {
    0 u# b/ q6 W7 D% U3 `0 e. u1 f
  659. //            bitmap.GetPixel(iColumn,iRow,&color);& [; p4 a: F+ X1 W1 o0 H" [
  660. //            colorTemp.SetValue(color.MakeARGB(
    - e7 ]6 w# V5 ]8 `1 M0 P/ Y
  661. //              (BYTE)(255*iColumn/iWidth),8 W0 a2 s+ K- a, J2 l
  662. //              color.GetRed(),
    ! C0 K. s2 K, r+ l- M+ U8 N
  663. //              color.GetGreen(),4 T* }/ T6 ?% f4 `1 E
  664. //              color.GetBlue()));, i; @# }1 l( Y4 A
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);) A, r% ^( I$ A+ p9 x+ d+ D
  666. //          }# I6 @  `: X, F- m' U
  667. //        }
    3 k3 P; P4 M. r! o. `2 b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ' x0 \6 u/ K2 p; r' R: X+ F: W% E: u% U
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 |" P' q. u- D) J
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");- `- o" _8 p4 m, r/ Q4 u2 D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      e7 G8 c0 U+ a1 d( y  @8 }  ]3 g
  672.         for(i=0;i<240;i+=8). t* C2 K1 r3 v9 _
  673.         {6 E7 h% B% ?; X" V, @
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! O; k1 M9 y- F$ h! F
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - L0 B8 X$ G5 ~7 `# e9 A
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  i5 X/ Z! q: p9 C! b/ j
  677.           Sleep(33);
    6 |$ P! T  D0 `, u- y. X
  678.         }+ z8 x  u- p8 W1 V- u6 s
  679.         Sleep(1000);( _7 y# U  @$ ^) j
  680.         for(i=240;i>0;i-=8)
    * F% y7 T4 T5 [% B8 [
  681.         {
    ; \9 v2 E; [. B2 n  w$ b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 a8 X5 r9 m3 H/ E8 u- x6 g
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 b! ~$ e0 g0 _, ~
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " u4 |1 i. m& W9 ]" y+ }
  685.           Sleep(33);
    3 T: U3 B9 z3 v9 B/ p4 @) w
  686.         }
    5 S+ q0 ?3 L: ?0 u
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);3 P* h6 A% [% H' T6 W7 m
  688.         dlg->ReleaseDC(pCDC);; G4 f! R# ]2 x* z9 j! J6 H& [) f
  689.         DeleteDC(hdctar);
    : l. j; D2 T' Y! T; h
  690.         DeleteDC(hdcsrc);
    - A% g8 u* f  N
  691.         DeleteDC(hdcorg);
    " o9 L+ v# v; f2 \( }  N
  692.       }  V# u. Q9 X& {2 q8 k1 j
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);; G% i( L0 E4 w' t7 g
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  F* @" c/ s; y5 X+ m# s
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");5 a. z0 R3 |$ [: l! v- X
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");) w5 `. e; i% k( K6 E6 S' q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) y' _0 n3 l  y/ ]
  698.       if(!Dn.Connected())' a1 T- u, _7 G* J
  699.       {; Y; ]4 j7 h& R& [
  700.         dwTotalFiles=1;+ x$ J% G  ~9 q: ~
  701.         dwDownLoaded=0;
      R3 G& l5 V+ M1 k9 W
  702.         bSilentStep=TRUE;3 l/ |" U4 `- |  a5 `
  703.         bCompressed=FALSE;( J9 s: E8 f  Z4 x# l& ^
  704.         strExtLocal.Empty();
    % I% ^' R! j8 @' r% R3 R8 t- H7 ?
  705.         strFullName="readme.txt";# b0 i4 q7 M" }0 m; ]
  706.         dwProgramState=AP_CONNECT;; n( p/ C) H* ?+ d+ d% @1 A7 N
  707.       }# n' L% a) g- d  k1 l1 Q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    4 @, R0 y4 ^( y
  709.       dwStartUpSteps=2;
    ) b  Z$ A/ X" l1 Q/ x8 c
  710.       break;
      H! ]! I7 A) e
  711.     case 2:
    2 f9 u- j9 }% I4 o/ g3 C& O
  712.       {5 ^: A7 L3 D& Q+ P; \# n& I
  713.         int iEOF;! y- N! `. ^* K* ~) K
  714.         FILE *fp;
    1 \' F9 v  }9 C. {& R  }  a
  715.         char szString[512];' E6 O8 ~; I+ k8 {$ x* }: z# a
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    7 \5 P4 w" R) M8 x- a' @
  717.         if(fp)8 [) O% l2 G( _+ L4 t% V# y
  718.         {9 Y# h3 ?2 f; S9 j: [4 U: T
  719.           do
    : B! {/ l# \: G, k
  720.           {
    8 }$ c2 G* O$ [0 u! ?0 T" H
  721.             iEOF=fscanf(fp,"%s",szString);2 o9 O% }  M  O# H7 x* H
  722.             if(strlen(szString))
    - N. i9 A. G' |7 p" W! V
  723.             {5 ?0 G  z& }, |4 r) Y6 ]  F
  724.               if(bFirstChar)
    8 }$ j  H! s6 p0 F5 _+ G
  725.               {9 q% x: q+ u7 d
  726.                 bFirstChar=FALSE;6 L, P# f5 V! X6 Y  C  G# k/ O5 f
  727.                 bConnectIsBig5=FALSE;6 e9 f$ u& J* P9 G  s( ]4 l
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;( {/ S' v+ ?0 R% X' x+ Y% q$ ?& j
  729.               }" l- ^4 F( T5 \
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    * @9 ]* v/ ?7 X  ?1 x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));& q( _2 |& s! y% D/ K6 A4 O
  732.               dlg->m_ListText.AddString(szString);8 x% @5 Y  c) A9 n
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 H6 y9 [' _9 A. K  ^" m; x
  734.               *szString=0;
    & f5 v/ P- ?. U' V, l
  735.             }
    6 L1 X' v( u0 R1 {4 L' _7 j# A
  736.           } while(iEOF!=EOF);
    & {; q& G% a7 ?6 e( J" C
  737.           fclose(fp);/ @1 _" r! a% S% Y( m# X) W7 s1 U
  738.           unlink(".\\DownLoad\\readme.txt");
    + v$ o8 u1 g4 o% q9 o8 Z
  739.           dwStartUpSteps=3;
    1 ^& J$ t$ v' p; d4 c
  740.         }
      X5 \& e! F1 t" K3 D% r; {( U
  741.       }0 z( V) I. P& L9 m  M: K7 C$ p
  742.       break;) ^! {6 Z% u. C3 @& \9 D
  743.     case 3:
    ( |& w- W7 \: X
  744.       if(!Dn.Connected())  E% u5 }  F) b  n4 P6 P  `  W
  745.       {
    5 q" p% c/ G' a5 V# I) h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);: l% q3 x  x/ e6 L% T% P1 M
  747.         dwTotalFiles=1;
    0 p8 d% s8 `' P
  748.         dwDownLoaded=0;
    $ a7 `0 [/ A$ t% d
  749.         bSilentStep=TRUE;
    $ o4 T( r! L) _0 v
  750.         bCompressed=FALSE;
    + L2 T, e/ ?+ }# P& z
  751.         strExtLocal.Empty();
    2 W1 G1 r( K' ]9 P
  752.         strFullName="checkversion.txt";* y$ q4 }/ R- H  z: @. g2 K
  753.         dwProgramState=AP_CONNECT;
    # }! y* P6 U4 {$ t# ~: f
  754.       }
    7 K+ Q9 E; [2 o) D0 t; |
  755.       dwStartUpSteps=4;
    ! G5 m4 `6 }; x
  756.       break;
    + W, p! ?9 U) p9 K& w6 Q9 r
  757.     case 4:! Y! W. A: N! C( m! V4 o9 p# c7 i
  758.       {2 r/ I1 [2 B$ ^1 d, |
  759.         FILE *fp;
    3 H+ ~! r% i8 i( _* d, A+ D8 c2 [
  760.         char szString1[128];/ p7 a& f. d' U( G  P. l
  761.         char szString2[128];
    4 r7 T1 h  X4 S/ G3 R
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    : ~& f5 V& p2 K2 ]
  763.         if(fp)
    , A& b- n6 n9 e: ?) J% ?
  764.         {2 y  ~; x* K% w: E6 ^/ a
  765.           fscanf(fp,"%s",szString1);
    " O8 {* `! [1 g$ w
  766.           fclose(fp);1 X' a) P) t. L, Y9 E
  767.           fCheckVersion=atof(szString1);
    1 E0 J# y0 V* ~, V
  768.           fp=fopen(".\\checkversion.dat","r");, Y3 O: f7 j3 x1 X5 F8 \
  769.           if(fp). H5 Z. p9 L- Y) n
  770.           {9 z; P% Y. D/ r( j( e/ B8 l9 N
  771.             fscanf(fp,"%s",szString2);
    & q* M; R1 }9 u5 N4 ^( S: }/ |" b
  772.             fclose(fp);' P( B: J! }, m9 E
  773.             if(atof(szString1)!=atof(szString2)): m. m3 [" S& W# Y1 }. B1 t% U
  774.             {/ Z' W/ O" s5 Y$ z/ W" R' J6 J
  775.               if(!Dn.Connected())
    , l% [! U1 G- d1 _5 g
  776.               {- j. K! j, K7 F2 v
  777.                 bFirstUpdate=TRUE;
      @3 Z* I( `4 A& ?' E
  778.                 dwTotalFiles=1;
    3 A& T/ j% z$ y& a( e, Y3 c& y5 i
  779.                 dwDownLoaded=0;
    " c, r5 o' U5 u9 n6 `
  780.                 bSilentStep=FALSE;# v% q% o' C/ r' W4 H* P1 ^# e
  781.                 bCompressed=TRUE;, T, ?1 N. G2 {  p! \% \) a
  782.                 strExtLocal=".\\DownLoad\";: q; e  Y' I. z- p$ q: S) m7 J8 Z* u
  783.                 strFullName="update.txt";6 G/ j& r3 [/ H' E6 c) @5 K
  784.                 dwProgramState=AP_CONNECT;
    . U, u3 C: D) e3 B( Y' E5 r
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & K* T8 Y; _3 y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# C* h# w, }- \! ]
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , {6 Q* `+ Q: {+ i
  788. 5 ]7 d" g; w2 y
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 g4 ~7 A  S. d. _5 a
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ( W" d8 Q0 {# l1 \# e5 c
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' y! F. B6 _8 Q4 v
  792.                 {
    + A2 u% P! K8 X4 \
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    6 S! u$ R5 N7 I6 _
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");) y  w4 E- Y" y6 E
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");* a* I7 ~9 S% v5 Q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ z8 b" D* ?5 K* z3 Y
  797. % Z4 y; R! o- q' X) \3 u
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , B& R1 n/ O% e4 F
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; I4 h$ c) U- F5 q7 ~0 Z1 k4 ^' ^" ~
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    9 y, P+ y/ y  Y, _% Y* G
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + q" Y, }* e% l6 k* m/ L" b
  802.                 }, ^3 d# n- A8 \
  803.                 dwStartUpSteps=5;8 [& `7 Q9 w$ X# i3 G! q8 l
  804.               }
    & O6 b' U! ~  n8 ]: j  `
  805.             }% |  a- S, ^  m1 h# U/ c4 o
  806.             else
    ( x& S) F3 @& O$ i8 R* ^3 U
  807.             {
    / Q0 u1 i. w& N6 J0 y' g$ A- g
  808.               unlink(".\\DownLoad\\checkversion.txt");4 V0 a" D. `$ X& }, a
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");, |% g' M. E1 }  L: L- M# e( k$ Q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 ^1 ]) v* P1 s; d: m0 ^; j+ F
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");+ @, W8 v. \, A% t
  812. " @# S, b# r8 R- b  ^0 `1 c
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " o2 S) h, s: ^9 T
  814.               dwStartUpSteps=99;* H8 W2 a$ ^& l0 u
  815.               bFinishUpdated=TRUE;
    ' }8 y, [& B8 F7 m
  816.               bCanUpdate=TRUE;, L* g  G; D! R6 i
  817.             }
    # G9 v2 S1 ]2 Y$ ^
  818.           }1 I6 N9 E3 Z5 M: G" ~2 b) X
  819.           else
    , k3 |7 r( J$ @. ~# o( B, f
  820.           {
    - J1 e$ h; u  m: l+ p; Y
  821.             if(!Dn.Connected())
    5 w8 T7 g% v1 X4 Y: u+ B9 i
  822.             {/ D6 k# b+ G  x; c1 c" F
  823.               bFirstUpdate=TRUE;
    $ W, ^. f6 N: ~( {
  824.               dwTotalFiles=1;
    ! m% q  f& @& I8 `
  825.               dwDownLoaded=0;
    / ~, a7 o8 z1 _* T2 U/ B3 X! u
  826.               bSilentStep=FALSE;3 E  G( F9 Y! b( X8 D; z; Z- K
  827.               bCompressed=TRUE;5 J! V; u  r% [! o6 d/ x
  828.               strExtLocal=".\\DownLoad\";
    4 i4 k$ y9 c' S5 u, _. Z9 G6 V
  829.               strFullName="update.txt";
    2 Q: ?9 }1 c! s% r8 e3 Q
  830.               dwProgramState=AP_CONNECT;
    0 I8 {: B3 \2 O( E: H; G" G! ~" P
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  a" B8 \9 k' @) g
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' n! W+ Z+ N" c+ m: K0 M
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' K2 X! O7 \' M, s+ [
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 |$ R0 w* G# s7 T0 X+ t4 p- n. ^
  835.               unlink(".\\DownLoad\\checkversion.txt");
    1 r- l' H% _$ {6 N* f  P6 h+ }- y- D
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    * j0 L) B  X, v! o8 z, R
  837.               {+ t1 p( H7 [2 v1 E: L- A! R6 M
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    + \& n' p5 \; e$ Z+ d
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    6 u( L) E. E' U* U: @- o' `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");3 N$ N/ l7 J# G% v. ~' Z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 n3 o' S) {1 a$ _8 _# o! }9 y
  842.                
    & r1 r/ Y0 Z' @" D
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 X& @6 l- D3 S7 P. F
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! D% L( _- ?6 ^) B
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 G% [. |$ [- F) X
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ }. Z$ b" k2 L7 D* n  u
  847.               }, W7 J( G# S. K  Y9 q1 o8 }# Z
  848.               dwStartUpSteps=5;3 v9 I# n9 A' k3 o: w% s6 k
  849.             }
    ! `& @" I4 [7 V* [- g+ W: f0 j
  850.           }2 @% C3 E" `& C/ t  W# S/ |6 P
  851.         }
    & e: d$ K+ d- f  Z" l4 L( n, m
  852.         else( |" M$ o% U0 ~
  853.         {
    1 D4 d8 a( F% D2 `! R  h6 c3 p/ H
  854.           dwStartUpSteps=3;3 ]) A; d0 d$ N( k! P
  855.         }
    % c! Q9 q$ V" r4 J
  856.       }
    7 v* R) V5 [2 a- ^
  857.       break;
    , o9 s$ x. Q$ o  f
  858.     case 5:
    0 ~% J" s( i" o3 I2 E9 ^. l; [: \* F
  859.       {
    2 _8 Z: [1 E& j
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    6 ]5 a( B& w( V' B* E0 {
  861.         {
    ! W: S: A8 Z: d9 T  J; b5 ^" {
  862.           int opt_overwrite=1;
    " Z2 {# v8 r8 a0 v- e8 C
  863.           int opt_do_extract_withoutpath=0;* x; \- G- d8 A. d; f0 _
  864.           unzFile uf=NULL;
      c! Z& J6 D' W1 D* J0 w  C
  865. 0 [2 P3 L! s, i1 p4 m: _3 |
  866.           uf=unzOpen("Wsa.zip");& L. F3 e5 |$ |2 x0 L
  867.           if(uf)
      E( F4 `- j2 z) |, o( D8 u& J; h
  868.           {
    + P6 v& h0 y, E& t; A) D" ^
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);. q- j# x2 o9 Y" ^. j
  870.             unzClose(uf);
    6 R0 K: r1 x( o) M$ k
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
      T- d) {1 s/ e. f  @8 g
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");9 X' }2 _% I7 P8 s
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    2 S8 j/ v( u$ T
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ R. x; q! r) I
  875.           }* h, @' W' v6 `" H; V
  876.           DeleteFile("Wsa.zip" );4 L/ N; @9 K$ u/ a! }9 O
  877.         }+ E. x) a! J* ]! s

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-1 14:14

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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