CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
, b2 a1 r: w8 _( E. Y" j1 j1 Y& ~: _
  1. / RevApp.cpp : Defines the class behaviors for the application.
    9 x/ ?( s! r9 p" M) t/ r
  2. //
    # k' p& J4 X. d- H$ g

  3. : b( y  D0 r4 t/ n( G
  4. #include "stdafx.h"
    6 A% Z5 H! n, l+ x

  5. ) x9 b' n7 w5 a4 O% T' r1 h; e8 p
  6. //#define UNICODE1 X- `; r! H/ w5 a
  7. //#include <gdiplus.h>" m' l( s* P# A% X- L; L! Q
  8. //using namespace Gdiplus;% N4 w$ s' D/ H) f9 e; \

  9. : v5 F* H9 y1 R2 L
  10. #include "RevApp.h"
    : G3 D: R& L, W3 t0 |, u- m
  11. #include "RevAppDlg.h"2 T0 X! S9 p: B. k# O! H+ p3 J
  12. & r/ K5 r( F; S2 K4 U
  13. #pragma warning(disable:4786)
    5 S. Z  P+ L9 v# I& w# q
  14. #include <map>
    . Y5 @! O' s4 H( }/ P+ c7 E
  15. #include <list>5 ~+ u/ k' y# C' |1 Y" F2 _  e9 Y2 k
  16. #include <direct.h>4 p, y; B5 U5 J  p' N6 w4 f

  17. # C. Z7 y/ b: k% m- @2 D# s& N
  18. #ifdef _DEBUG
    : B. G. D: Q* k7 u- w' }3 i5 O7 |
  19. #define new DEBUG_NEW
    $ N. d) b* b% P& F3 y$ v
  20. #undef THIS_FILE9 d  h+ d0 Z( ]7 E
  21. static char THIS_FILE[] = __FILE__;' O! h/ R# w* v6 _% |
  22. #endif
    : Y+ |) B, v* @4 y6 N. q
  23. #include "SkinResDef.h"
    ( ]7 B9 U# a( j. a; `& B2 F$ V3 L
  24. #include "ChangeBG.h"  d+ w* q) ?% C
  25. #include "AFXINET.H"
    3 J' i5 N5 x& I

  26. - O; ?5 D7 d+ B2 z4 j! t$ C
  27. #define TRADITIONAL_CHINESE 0
    , d, J6 c' [: r! _/ S$ c# D
  28. #define SIMPLIFY_CHINESE 1
    8 [3 A7 C2 D- N+ N  ^
  29. #define ENGLISH 28 I% T1 [. t; e# Q, ]
  30. int m_iLanguage = ENGLISH;
    ; W, t' Q* a8 s
  31. /////////////////////////////////////////////////////////////////////////////
    ( y/ {+ ~6 x0 g
  32. // CRevAppApp* O: e9 t. n* w! b6 I! M* M

  33. # t  |, h# T$ {4 C" I
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 C5 y, n! m3 x
  35.         //{{AFX_MSG_MAP(CRevAppApp)- u1 i6 z3 H8 i4 ]7 d
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. @: X  w2 `% C9 @) J
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    3 ^5 r: @' Z1 B5 o
  38.         //}}AFX_MSG8 p: d7 }8 Q$ J% p
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)5 x; z  u3 y7 L0 z3 Z5 k; B% h
  40. END_MESSAGE_MAP()& O' Z8 R6 X1 E- S
  41. 5 X  |1 H, e7 x+ p
  42. /////////////////////////////////////////////////////////////////////////////; j* |) O# ~, ~
  43. // CRevAppApp construction/ J- A6 @2 Y  ~. f# O2 b

  44. 1 ~6 \1 ?3 {; u# v  }
  45. CRevAppApp::CRevAppApp()
    8 }3 O2 @" i9 N; b# {7 x: s/ C
  46. {
    0 _3 g5 X) b! g% l7 M. w
  47.         // TODO: add construction code here,
    1 y1 `/ e" c& P9 u
  48.         // Place all significant initialization in InitInstance1 N% o" V' e+ z/ x' N, E' e
  49.   bDisplayIsBig5=FALSE;- W5 B0 q. T, t) L- F3 T
  50.   bRestartUpdater=FALSE;
    * N+ P: Z6 p- s$ O
  51.   bFinishUpdated=FALSE;' N9 S' N; o  z; E9 J! P8 d
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;0 a. e& i4 j$ o
  53.   InitChangeDataBig52GBKS();! ~4 N0 S+ v, N, E! y
  54.   InitChangeDataGBKS2Big5();
    + f- @- j0 _- v- x4 S! O
  55.         //! ~- `- j+ g3 R/ C
  56.         bClickRunExe = FALSE;" r) n: Z, U. s( a- x
  57.         //+ q- {! c) h4 F  I
  58. }
      W- O' E2 _1 S2 l
  59. # G  u/ f- n% `3 o
  60. CRevAppApp::~CRevAppApp()
    4 n: w. J, _; k3 w1 e3 L: h. t7 X
  61. {/ o; |  |8 s) b. [9 Q
  62.         // TODO: add construction code here," i. \* L0 G# ^2 ~3 M+ d8 k
  63.         // Place all significant initialization in InitInstance" h8 p' }& v2 ?- I; {7 W/ h. I* |
  64.   EndChangeData();* }, Q" k4 B7 C4 ?
  65. }3 z" a: t: @  }. u* C

  66. % i3 L2 v) v* \, R! `- g
  67. /////////////////////////////////////////////////////////////////////////////& y% O- B* N) F+ i  C9 }
  68. // The one and only CRevAppApp object
    2 h& {/ ?! J, y4 U1 E; j; z

  69. * T. H! a( }) S9 o5 k
  70. CRevAppApp theApp;
    " V% F" D% Z3 v/ X5 c- ?6 W3 r' g
  71. - @2 d3 O% E' w
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ) B- g5 w4 F6 k  W
  73. {
    * w2 ?6 L0 x) X) g+ ^- F
  74.   int iEOF=0;
    $ h0 E4 e7 R/ {6 k( |( C
  75.   char szTempName[MAX_PATH];2 B& p( E3 ^$ a  V! K. X
  76.   *szFileName=0;% F1 ]& J$ A4 O
  77.   iEOF=fscanf(fp,"%s",szTempName);
    6 l9 x8 y- ~  ~  ^. w  K
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')- z; T: b) \; ~. ]9 }5 p3 q
  79.   {
    ; Q. A6 U1 P' a
  80.     strcpy(szFileName,&szTempName[1]);
    & e6 f; c% b7 c+ h$ t$ z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)- }' ]* w- X# z8 Q! U5 K3 F
  82.     {
      V; B! d6 C9 E  ?  D) O, ^
  83.       iEOF=fscanf(fp,"%s",szTempName);
    0 m* ?, z4 u! _' R; h
  84.       strcat(szFileName," ");
    # f; I( p+ O. u2 a
  85.       strcat(szFileName,szTempName);
    ( s9 }. f& w2 R2 ]( `8 F1 h
  86.     }
      a0 ?1 L# `* p$ q
  87.     if(strlen(szFileName)>=1)
    . N7 F0 O$ S0 X  U  j
  88.     {
    " I- s; ?" J' P
  89.       szFileName[strlen(szFileName)-1]=0;
    ( P2 |% k* C- {7 e, h
  90.     }
    ) b# f' U7 L& |# J
  91.   }" }: [9 E0 D+ N6 f. B. T, y- G
  92.   return szFileName;
    / }9 k& |" r6 c- q7 o
  93. }4 S- O( ]5 e9 U" \2 R& ?
  94. 5 D+ k- e! o7 n7 r4 C- e. E
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)0 f$ h$ z: @+ i; f8 ]
  96. {
    ( R3 E/ [5 M1 V$ y
  97.   FILE *fp;
    # ]& z( {7 j. i
  98.   char *key=NULL;' Q0 L5 J1 @2 R8 @7 P
  99.   char version[MAX_PATH];
      B# u7 b% a' P$ ^- f1 m, O
  100.   LPUPDATEFILE file,olds;
    4 k( B# m0 i+ V# j# w5 o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 i1 x: `  d# I& B0 x+ N5 W5 M
  102. ; P  K  a& R1 N7 g9 o6 w
  103.   UpdateList.clear();7 ?: Q6 q& E0 w0 ~6 V* {3 O* F
  104.   UpdateFile.clear();& w9 L/ x% q" e- B( G: A  D* w% ~
  105.   if(GetFileAttributes(filename)==-1) return false;) i6 a0 G7 h1 ]" _7 ]1 G% h
  106.   if(!(fp=fopen(filename,"r"))) return false;
    7 [$ V1 W9 a* \: r4 [
  107.   fscanf(fp,"%s",version);# U- I7 n, z3 C8 q: ]7 J( C% J
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ( y) Q& N9 X2 C9 G! i4 V
  109.   while(fscanf(fp,"%s",version)!=EOF)7 G0 c: S" @4 b; }
  110.   {
    4 ?5 e% R6 s# H) u, ]$ F& M
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # {; k: `: k0 n. H* G  ?) K
  112.     fscanf(fp,"%s",file->path);
    # t0 k/ P" _. r/ y- q6 p
  113.     ReadFileNames(fp,file->file);7 s/ v9 B( X' G" k
  114.     strcpy(file->full,".");4 ~7 Q9 V5 ~8 L# Z: q+ h
  115.     strcat(file->full,file->path);
    8 i2 e9 M2 v3 @( }  r1 s
  116.     strcat(file->full,file->file);8 H. z! R( v3 P. W
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    9 {3 N. e; |( c' O  {( Z, a% ]9 r
  118.     {: v6 H7 C$ C& F
  119.       file->vers=(float)atof(version);
    ' G$ W1 [# h) O! o% T# X. K
  120.       UpdateList.push_back(file->full);
      L0 d6 V8 F  A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ' u: z+ X) X4 h, y& V" W
  122.     }8 A$ M. L- ?6 P# _8 w2 }3 L8 ~
  123.     else
    + ?* x9 Y& B7 n' M7 E6 P
  124.     {
    4 B0 [3 N: q' k+ E" d% V+ U3 y, H
  125.       olds=(*p).second;
    ' ]" r4 C% |, g! W2 e* `
  126.       if(olds->vers<(float)atof(version))1 ]. r. ?3 t5 x' M* ?# d' m
  127.       {
    / c; P3 |- V/ W/ x. L6 w
  128.         olds->vers=(float)atof(version);
    3 X; e4 ~! o- V" Z  @
  129.       }$ V) z/ z; e. F
  130.       free(file);$ J$ ^9 Q8 O9 v: ?: @; W) @
  131.     }
    9 _& w. F& v$ ], J5 y8 n+ i
  132.   }8 ~/ V6 \% X7 N9 t6 T& Y. x
  133.   fclose(fp);
    * n/ |/ q( i7 S& x" X* P
  134.   return true;* O' O1 K- |' c8 ~- k$ ?
  135. }  M0 _) Y, E# {8 v( @3 I
  136. 6 `; o4 `8 Z: V: a) a
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)& ]- y( s1 V  `: u* w9 u
  138. {
    6 d1 U  q( q6 `- \$ a: H. ]) ~8 F
  139.   TCHAR  szFull[MAX_PATH];
    % X5 p, O) c* i5 y1 J6 ]" @" V! v
  140.   TCHAR *token,*inter;
    + g) v$ |# m, M0 x* |
  141.   *szPath=0;
    ( G% T0 Y+ Q- I( `# r
  142.   strcpy(szFull,szFullPath);
    9 j, J# W0 q  G( B2 ^
  143.   token=strtok(szFull,"\\/");
    5 D/ i) B" I8 U. o( S1 C. X( ^
  144.   inter=token;
    " e) O3 B2 G& Q% o+ Q6 G0 x
  145.   while(token=strtok(NULL,"\\/"))
    + G+ W! |8 J5 M7 c
  146.   {
    ) t2 [4 n7 O0 s( w
  147.     strcat(szPath,inter);
    2 }# ^* H# W7 W) G! y6 [+ U
  148.     strcat(szPath,"\");2 U# n/ ~# i/ r4 G, L  q& o5 L$ x
  149.     inter=token;
    ; n5 m9 J- q9 Y; s  O
  150.   }
    . k3 a. ?; y8 \  S3 m" J: m* h
  151.   return strlen(szPath);* j+ y0 Q7 a9 j) z2 n* j
  152. }
    ( Z4 q* d" M6 P0 K
  153. 5 \* V8 L& F' p' @/ k* M
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)- ^. w6 f' A& }: b
  155. {1 G' ~6 X# M5 A9 U$ E
  156.   DWORD attrib=GetFileAttributes(Target);
    3 U3 `, E2 \! t" |# _! E) ^
  157.   if(attrib!=-1)) u' r/ y3 ~, v$ V8 D
  158.   {, }, h- Y# n# K2 R
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    - K1 i6 I8 Y8 i$ p, Q
  160.     {
    $ ~9 `2 q# C' P. A
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    & l: |6 K( k3 `+ r6 U
  162.       SetFileAttributes(Target,attrib);
    5 K* n6 Z/ H5 B  |
  163.     }
    ( M+ S# _! T5 A  T& ?4 f# ?7 ]
  164.   }
    ' S" L3 h+ Z. E1 C
  165.   CopyFile(Source,Target,Erase);
    " [1 G+ p6 D  Q/ p" D: @: Q/ m5 ^% y
  166. }) U7 _5 Q% d3 A9 v  d2 D
  167. 3 V: H# j) x- l+ N: k/ B" r
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...): {; d; m7 ^( y# g% }6 M- O
  169. {
    * H* h, D! r  ^
  170.      FILE *fp;' m$ y) D4 d$ G; w- {$ E( S' U
  171.      char  szBuffer[8192];
    ! y8 B3 b7 t# G8 @6 b2 M
  172.   va_list  argptr;
    * Z! Z7 E2 V* ]3 i
  173. 1 W6 Y7 E1 N. E. t
  174.         va_start(argptr,message);
    9 i& ~* n) I9 o% |
  175.         vsprintf(szBuffer,message,argptr);! F' X, y* v& s  ~# x
  176.         va_end(argptr);
    - Z5 m9 }- v7 U- B& m* Z) w8 {
  177.   fp=fopen(FileName,"a");( v) c* ~- ?0 _" l
  178.   if(fp)( G, E) h5 R; C- a
  179.   {! ?0 t; [4 ~: J6 S: M8 U
  180.     fprintf(fp,szBuffer);! L) R' k. q7 L2 g
  181.     fclose(fp);* W  i! {$ J! W2 o) `' \$ }2 }4 R
  182.           _flushall();5 _; I5 N" Z1 W) Y* s
  183.   }
    + R, B% ]9 F( f: t
  184. }
    9 H- c& n  A! |2 c- B3 N
  185. 1 v9 g. \* R2 q; P; q" z- m
  186. BOOL CRevAppApp::Fclearf(char *FileName)  h* v3 m- m! {! D7 p7 H+ M" k
  187. {  X) I4 X6 M' C) O; u
  188.      FILE *fp;7 w4 E" I- Z. F1 Z
  189.     DWORD  attrib;
    , q# U+ q1 C, a0 [! ^- y- j
  190.   attrib=GetFileAttributes(FileName);  I% j: @' ?0 U& x7 b9 R( S
  191.   if(attrib!=-1)
    ) O: `% R8 y% c7 D" j- n
  192.   {
    & y3 G% m7 ^/ K7 r/ u0 }6 W3 j3 i6 D
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    7 j% ]1 }9 }; {$ s8 N
  194.     if(!SetFileAttributes(FileName,attrib))
    ; H6 O0 y) q3 r5 A  C! O' S  }
  195.     {$ D3 b* D% A$ {3 M% U* F! |, P
  196.       return FALSE;) F. x- _" I& r4 o  H" ^( P
  197.     }
    8 D4 i- _; F/ B7 x9 x0 b( a
  198.   }1 q7 e" b0 _; [9 m7 ^5 K
  199.   fp=fopen(FileName,"wb");
    - g) V$ g$ l- e7 R
  200.   if(fp)4 r2 A6 W4 X' _
  201.   {
    ( u& L0 W3 m9 P& ?6 w) r  o
  202.     fclose(fp);
    : R4 V0 k- X" V  E
  203.   }
    * }* T% o! I1 F1 ?+ h
  204.   return TRUE;
    # y& _, ]: @5 h+ B9 q+ j
  205. }- @4 L" V( @' J' z+ e

  206. $ o9 d; {2 a& P" G' Z, [
  207. BOOL CRevAppApp::UpdateLocalVersion(void)' o9 j. g) @% V5 ?0 Z- q$ D; m
  208. {: H' E! z: x" ]( B& i" k9 x0 _+ J# ^
  209.   char filename[MAX_PATH];- k2 d" Y7 j+ S  E! F
  210.   LPUPDATEFILE file,olds;
    # A1 v7 z4 @) ^1 j9 {
  211.   std::map<int,CString>::iterator i;
      q+ ^) ~2 }3 ~0 }: |) b
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 `1 A8 N$ t, R# k- Z+ X; w
  213.   std::list<CString>::iterator l;; v7 c0 s3 L- i& P5 m, l0 V( o- C

  214. ) Z, G7 J6 b+ n0 A6 ~' f$ h
  215.   if(bFirstUpdate)- F! L' L- ?- C4 M$ z
  216.   {
    4 Y* t1 r" Q5 G2 a
  217.     dwCurrFile=0;/ e0 R: t* n0 c- Z" `8 F
  218.     bFirstUpdate=FALSE;0 m& N+ w% U3 e" u7 L6 d
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( G- [3 ^. B  S; p* I$ O( Z
  220.     {
      `8 F8 h  u9 y9 |- `
  221.       dwTotalFiles=UpdateLocal.size();/ ^) I4 T8 x8 ]. M9 y4 v% C5 D) L; x" w
  222.       dwDownLoaded=0;
    5 t. W9 V5 H3 N( E" E# a; p2 C
  223.       bSilentStep=FALSE;
    ' T0 V! G* v  O, V. j/ ~. Z  u
  224.       bCompressed=TRUE;9 y7 _4 p* W! N
  225.       strExtLocal.Empty();
    6 P4 a/ x6 ]4 ^; {3 S+ d
  226.       strFullName=(*i).second;
    % |: n3 m2 w4 P0 @. g6 f0 ?" w
  227.       dwProgramState=AP_CONNECT;: o  E' n  P# J: _2 ~/ ~+ F
  228.       return TRUE;
    8 e/ L: h# a" n( Z) {. D6 o! k
  229.     }, G3 }7 @- Q: O2 A8 u- d, ~8 N2 z8 Z
  230.   }( Q1 J. U( Q5 i+ k7 }: k7 j
  231.   else if(bRestartUpdater==FALSE)
    . k0 b# I6 I: l9 y# R
  232.   {
    ; O; t/ V- C. q6 `
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    9 j9 s- r; a$ ?
  234.     {$ P0 [. s& O+ B3 m  a
  235.       file=(*p).second;
    7 }5 C3 u2 r( n
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    " r6 {% W3 F, z: [) ~
  237.       {+ u! L5 `1 P/ v& m  ]9 t0 ~- J( L
  238.         olds=(*p).second;
    5 y1 X1 ]" m3 V; e) G
  239.         olds->vers=file->vers;9 V% X2 d/ @9 k. x
  240.       }; M% M6 w/ g0 Z! R: E
  241.       else
    6 Y0 D6 j" N0 Y" c
  242.       {' c6 a' u+ M5 ?, e/ D
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , |3 A# [5 M3 y" {$ y' J1 T( I0 ~
  244.         memcpy(olds,file,sizeof(UPDATEFILE));  i' T3 ]! l0 C* K8 M
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    : k. r' v5 H7 N0 @) o
  246.       }
    ! k5 b4 `% \! _
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- e1 g1 H7 v) F8 c8 L
  248.       sprintf(filename,"(%s)",file->file);
    7 d% ~+ J, T! V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 {! ]7 E( F3 g" ?$ C# K, i
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }4 t. G4 v. M6 d. T* }+ j
  251.     }
    + x" y. t1 }( k1 L5 V" B% k
  252.     dwCurrFile++;
    1 A, t4 d5 f+ r+ b1 n9 Q$ V
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())7 [5 J" Z3 {$ D7 T# u: R
  254.     {
    / g- a2 ~" S3 n2 a. x
  255.       bSilentStep=FALSE;0 M5 Q1 Z0 a# c8 g6 U7 T
  256.       bCompressed=TRUE;. e  f1 n9 f+ `# B$ E0 P2 t
  257.       strExtLocal.Empty();5 U+ J. D' ]% K0 [9 Q& _* ]
  258.       strFullName=(*i).second;
    " g4 \3 _+ W5 [
  259.       dwProgramState=AP_CONNECT;
    6 @4 |( ]2 B7 j
  260.       return TRUE;
    ; B0 ]1 L2 b: U, d9 ^
  261.     }$ y8 s- g: O+ V, z6 w9 y2 Q4 c
  262.     if(!bRestartUpdater)  @1 o. [+ g+ Y& x$ Q
  263.     {
    1 X, k3 l3 \% w3 c3 v
  264.       int iCurrSize,iFileSize;
    7 I0 }3 s9 L3 P6 b" a% w$ R% V  }" D' T
  265.       iCurrSize=0;
    . v" N/ j' K9 p1 ?8 U: M9 t
  266.       iFileSize=UpdateList2.size();  R' k. D! u- s' ^! p# @+ `
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    3 Z# r: Z- ]: Y) I4 H/ n* u. f
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    % {$ j6 D! Z+ [3 C9 l3 M0 M
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + }  Y9 ^" R4 z( o" E" V* e
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # T$ N1 o* a1 n7 [4 F
  271.       Fclearf(".\\update.dat");* E6 Q6 E; S' ?' d1 x
  272.       Fprintf(".\\update.dat","Bloodyf\n");8 V* Z$ `8 b2 ^- O' G. R4 P
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 O. t& d4 e& Z  \) J. d
  274.       {+ l( u0 Q: r6 C4 d
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    1 Z' B) |  {- ]4 S: t1 ?
  276.         {6 i* ]2 N. Q: s6 P
  277.           file=(*p).second;
    ' R$ M" [: S& h$ [2 `" I! n
  278.           sprintf(filename,"(%s)",file->file);
    ' w6 g; E+ b. i* N) e2 c& H
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* c  F2 O' W, N1 g( T
  280.           iCurrSize++;
    * l% A  V0 O1 |! K9 w6 p
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ h1 ~% _) k) R6 d
  282.         }. o/ [6 {4 W0 D7 \; ^  o, w* J) |
  283.       }5 s: W# I& P2 A) G
  284.       unlink(".\\update.txt");
    3 w) s+ E" d- L5 e8 s5 C+ }
  285.       unlink(".\\update.tmp");6 I& [4 Q1 Q% P; X6 {
  286.       Fclearf(".\\checkversion.dat");2 B( d4 S" [0 z5 q7 H
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);8 e+ L9 g) I% n" n3 K6 F
  288.       if(UpdateLocal.size())* x1 g! Q8 a  T4 K* ^8 M8 M
  289.       {
      S5 X0 o8 o' G! `3 D' d( L1 U
  290.         UpdateLocal.clear();0 k( l- M5 i* v& x7 b
  291.       }! A% q6 Z  D+ Y. W
  292.       if(UpdateFile3.size())' ^- |8 S, K" m/ w3 Y8 t. R& L: I0 P
  293.       {7 k5 s& ^% n1 W5 K
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 G1 \8 w+ w0 Y; x4 d
  295.         {
    4 s& b! s  c! d# ?1 }3 C
  296.           file=(*p).second;9 z; m5 i9 t+ I* u, u7 I
  297.           free(file);* a, o7 j# `* G/ c; r' ~
  298.         }4 |, _& V% }% a( i7 K* K0 `
  299.         UpdateFile3.clear();
    5 m0 A+ r. v6 p; o/ P$ E  |0 }& }. g
  300.         UpdateList3.clear();
    & }% F% \* l( B: G) O% W3 e
  301.       }
    / D3 r7 d0 r; O# X4 f, T! R
  302.       if(UpdateFile2.size())
    . Z7 X0 }. u# Y+ R8 h0 s+ `0 I
  303.       {
    + w/ k* _( @8 a- X' Z
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 s) c. B1 F, F8 o9 r
  305.         {
    ) Q4 B: c+ w9 G  u9 @1 [
  306.           file=(*p).second;% g4 U& g; s+ N% k* t
  307.           free(file);
    $ N% ]8 _; W. l5 A7 W( y
  308.         }
    2 ~" g( ~$ |( t7 R$ b  k! r
  309.         UpdateFile2.clear();1 \1 s, ]" f5 W/ p& m# E
  310.         UpdateList2.clear();
    6 K) D. r0 F4 W3 z0 \- D
  311.       }1 ]8 x7 X+ L% _
  312.       if(UpdateFile1.size())
    / G. }4 j1 ]" e; B& v% j: r
  313.       {/ q  a; k$ \  c
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 w: c3 x3 W7 X2 W$ `. h1 a- c
  315.         {
    0 @. P% p4 P$ M. J. ?
  316.           file=(*p).second;
    9 p  w4 B4 c$ e1 j) {: Q4 g( r; \
  317.           free(file);7 L% E: r8 M/ `% |: ]
  318.         }7 O% p- U) d2 |6 `) c' X+ C
  319.         UpdateFile1.clear();
      {6 ?8 E9 ?$ B
  320.         UpdateList1.clear();
    . J6 C, s6 _7 F. m2 ?
  321.       }- o8 v$ o! G1 `6 k* v: U/ A& s
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    + i/ A! u  R. \6 X
  323.     }
    + o; G" [# a* q7 J4 s+ i; [' y
  324.   }% E: I3 \0 `2 e! o6 z& [" F
  325.   return FALSE;4 ~0 S% d6 a1 M. J5 h
  326. }! }  b2 _) C; k; `" s9 ]: u

  327. # u2 Z$ n) u! h1 v5 l
  328. void CRevAppApp::ClearAll(void)
      e4 e. ?; X5 S
  329. {0 J2 _0 b3 m; b6 s7 [
  330.   LPUPDATEFILE file;
    $ \0 }$ E6 q- t5 v' p2 ^1 h- S  X
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( e% f* n0 _( \. M$ D# _4 ]- i

  332. 0 A) t8 j$ _; Z' i
  333.   if(UpdateLocal.size())
    8 |. Z0 O; n- b
  334.   {
    5 r7 B: o: P' J0 y) T
  335.     UpdateLocal.clear();+ I( g! I0 O% \) t
  336.   }
    ' V$ m0 u2 O3 i9 `- p
  337.   if(UpdateFile3.size())4 H. K0 K! f5 i- d) f+ K
  338.   {5 A6 ^/ H* E  _  j0 Q) Q
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 y5 _8 W( K; `3 b& w6 \0 t2 v
  340.     {
    3 e8 E9 K; ]+ c- U6 w
  341.       file=(*p).second;
    , o( A. V/ i+ Y5 S8 ]# _
  342.       free(file);( X% r. ~( F2 W  K8 I: {( G- f
  343.     }
    / ^2 o6 s! J7 i0 Z3 k4 H
  344.     UpdateFile3.clear();0 @* G2 L  ]9 i$ h$ Y
  345.     UpdateList3.clear();
      H  a" c) W# [& |& a: y; K
  346.   }
    / k7 b+ ^& B4 G' O/ {
  347.   if(UpdateFile2.size())
    $ \& H  u  e9 o7 Z% E  d: G
  348.   {
    & b4 [% ^  f! x9 s7 m4 o$ B
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ r2 k7 L* K! g' m: H
  350.     {
    # [/ i2 n7 e; _; Q2 O1 o5 @
  351.       file=(*p).second;( K. x: l2 F7 G
  352.       free(file);
    4 ?  |, ~$ p5 z# C) C
  353.     }
    + H+ |- Q4 h) w( A# x0 M
  354.     UpdateFile2.clear();7 R+ K  b# v" f& B5 Y5 y( w7 g  u, @0 c! A
  355.     UpdateList2.clear();1 g2 {) I7 _  y/ q! s: z
  356.   }  ]. {9 h% E0 ]
  357.   if(UpdateFile1.size())6 `: a& k+ z* ?$ @. ^
  358.   {
    . k& ^) B! e, O8 X! [5 M1 B
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ [: O, w4 y) P( y+ x/ x
  360.     {
    ( E: l2 h& g0 x
  361.       file=(*p).second;; ]5 T3 Z+ X% E9 P( h1 w9 k
  362.       free(file);
    % }3 V& _) X3 ~4 i1 A2 l
  363.     }
    ! C9 U' A, N# O$ E  C
  364.     UpdateFile1.clear();
    ! _. h4 X9 j& R1 o; _& V
  365.     UpdateList1.clear();
    ( l% |6 T3 N8 P* s
  366.   }
      }. x: R$ k) s  c  c* G
  367. }  1 c$ ^, d0 x/ D% L' C+ ~# U
  368.   0 s7 l% s$ `0 x+ \) s
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    + \2 O* M4 ]: c7 {. \, q: w/ E
  370. {# s( l9 p. B( m8 w5 Z8 @+ g
  371.   int c;
    0 d8 Y7 P! _2 w) d7 Z
  372.   LPUPDATEFILE file1,file2;
    : b8 |7 p2 T, K0 ?4 ~+ W
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    $ |- V6 U3 M6 o) w# R' d
  374.   std::list<CString>::iterator l;4 n  o$ O7 K. ~

  375. - e- g; \+ d0 l0 P- R$ Y
  376.   UpdateLocal.clear();4 ~( I; B4 b% d
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    0 }, L. s1 ?1 {% a
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    4 o4 i  y+ C- T  w4 ~/ L$ M- z  X' X
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ; N7 d+ \& H/ R1 O+ I9 X) M  p
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);; Z5 x& p5 o* c+ n2 ?9 `/ k! Q
  381.   if(UpdateFile3.size()): F/ F" {0 `! u9 |
  382.   {
    6 H7 q; R: S9 k2 Z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)! a3 l! v) h3 ^/ @% E) Q9 v3 {0 }
  384.     {
    9 g4 o$ r" h8 W( m- F# [
  385.       file2=(LPUPDATEFILE)(*i).second;
    0 w3 K; d+ P' _% ~1 w  V/ C* i7 D
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' _2 E+ V& X. r; M' c) ^
  387.       {
    % Z; D3 ?. R) g& t8 H
  388.         file1=(LPUPDATEFILE)(*p).second;# i# m$ D" t/ j- x* z7 ^
  389.         file1->vers=file2->vers;0 _" Y) i7 i2 [* W) u. H5 z- V& ~
  390.       }
    * I8 t8 l+ v2 M  s4 _& }
  391.       else
    : @" A* C/ g6 G) O" k
  392.       {
    % n7 q! h- S! `1 T) b& \) @2 d
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % M/ n% v$ L" F) }- K2 _* S  k
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ! R& G$ |& A5 _2 V
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    / c) U  R1 Y, R5 q' v
  396.       }6 ]% U. A$ a& M) [3 I( ]
  397.     }7 F& w' Q" D- ~( d2 ?; H
  398.   }
    + H, F5 T5 x2 b3 t4 o
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++); W5 R% j! L+ t0 Y
  400.   {
    & w) r7 o7 [; l; c$ |1 d
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()): k( o1 {4 m& G5 \
  402.     {
    , i5 H1 }# ^- e6 x# S! l
  403.       file2=(LPUPDATEFILE)(*i).second;
    5 \1 r# L' C( g$ G# r' [2 }
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : C4 I8 w9 O9 @9 a) D: N9 ?
  405.       {: T/ v1 @1 S8 b5 z
  406.         file1=(LPUPDATEFILE)(*p).second;
    / ?" T; |1 p  g* k- H
  407.         if(file1->vers!=file2->vers)
    ! d- v3 v7 b! m- U3 \
  408.         {
    . t6 k, {" _# p( C7 `
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & W# K8 \! J( y; E1 J6 p* L
  410.           c++;
    ; H/ t9 ^5 R0 a  Z2 l
  411.         }
    8 W4 S0 J+ P. {: x. T! T
  412.       }
    8 T1 x$ o8 G4 Q4 _
  413.       else' l: G# V8 Z5 P: v4 j7 V" u
  414.       {
    % M' r7 O/ t4 J0 h4 {) f: b' b
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 c0 x  p$ t9 F
  416.         c++;1 H( O1 G# O" u, {
  417.       }8 M, f7 @4 f, n; c6 Z
  418.     }
      F7 ?" I- k4 z: o1 L2 A5 @
  419.   }
    2 F4 K- _. |' h8 P; }* h; P
  420.   unlink(".\\DownLoad\\update.txt");
    " Y, \$ z( G# z! V2 u+ p
  421.   if(UpdateLocal.size()) return TRUE;
    1 K2 F/ I/ B! ]) N8 E9 z9 q
  422.   else                   return FALSE;3 ~# S3 \, t. x. p: I
  423. }, u6 g) n& c. O
  424. , F+ ?7 ~9 u8 I1 _4 l8 w
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    5 H/ X; Z4 b, E" s, S" T
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"! o  l; C8 |8 z5 k

  427. # r# C. q4 R8 ^0 N* \

  428. * d! O6 v# W' B0 F- M

  429. 5 Y* |+ j8 N& ?1 k' n1 Z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)  C* v, K2 M: A: F; q
  431. {
    $ E" `' w( a* D5 M+ ^2 ~
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;0 q  U' q6 o+ |) f  D
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ! U5 I3 D9 n/ a5 p# u
  434.   {
    ! C& F0 ~3 Z) j8 G* k. R
  435.     char szLanguage[50];( z! L0 \- ]1 q+ z) e0 f, g* \/ _
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( ^8 E+ ?7 K- A% ]& r( i4 Y: w
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" d- V; F" j+ _1 n
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    : i; m& G# F$ @/ r9 a0 s% X. @; i
  439.     else                                   m_iLanguage=ENGLISH;
    : @, q0 Y0 H  N
  440.     char szRegister[100];
    / v1 d5 g0 P5 a; i1 d$ O* L
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- z1 a$ ~, P# G6 U  a) E5 B0 v
  442.     strRegsName=szRegister;+ Z0 @7 a3 a+ c+ P
  443.     char szPatchURL[100];
    7 h$ h0 g% n8 V& d/ Q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ G- ]6 T5 H" c( v' z3 K9 O/ {
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% g, \$ \$ T' p4 N% q
  446.   }3 j: x1 K  I1 E0 h3 Y5 z+ l9 f
  447.   else; x" k& u+ m' z1 c: d  y
  448.   {
    3 K  v- e( \$ I$ B  u
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 N) _3 \3 ~4 h$ s4 @
  450.     strRegsName=DEFAULT_REG_URL;
    ; I! L" W" Q' V9 Q/ Q
  451.   }0 f3 M" i- G" v" }
  452.   if(GetFileAttributes("hosts.ini")!=-1)$ @* G5 Z$ T) {" W, }' J
  453.   {; V7 A; O; p  }
  454.     char szIP[50];2 k$ \6 l1 {9 B# @. h
  455.     char szDIR[300];3 b- t. b* W$ U1 n
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))! u; b8 Z; Q0 r6 M
  457.     {& r/ u4 S2 ]2 k! j% d, J, e5 U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    7 w' R( _7 [$ g$ ?( z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ; h2 M$ V& T5 J
  460.       strHostName=szIP;
    " t+ L. U+ l3 h" m9 g3 Q1 E9 q
  461.       strHostPath.Format("/%s",szDIR);: t$ a; Z$ k2 w7 b4 U3 s
  462.     }
    5 B( Q. v% ~0 x
  463.     else
    ( g5 T! T, }: {( s6 [+ Q, m
  464.     {
    " ?( n) I4 O- Y" K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : [7 R8 M1 o: ~  f9 u+ q; p
  466.       {
    . W3 h) r9 g+ K: P1 e1 j) l
  467.         char szLanguage[50];, ~+ y! M. T+ t+ K" L
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : Y& @5 X& ]3 |3 D  h: }
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! v1 T) ^9 w- a, y3 S
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) Q9 r% U; m  P) z6 ]$ C( W/ f
  471.         else                                   m_iLanguage=ENGLISH;
    / _. e" x: E, k! Z2 ^
  472.         char szRegister[100];
    + j/ Y# o3 y- c( o
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 C; _7 Q' a# B0 ?  v
  474.         strRegsName=szRegister;9 t% r% k, a& Y8 R7 u' e+ a9 p
  475.         char szPatchURL[100];# c6 ?- H& u0 X
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* r2 v2 I' Y( y3 m' b# ]& p
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 R0 S# Y1 m$ j' u% q' G- u
  478.       }
    , x* b7 ~, o0 p- ~2 }
  479.       else; g" Z9 k4 U; k9 C! U
  480.       {, j7 E* K& m5 d! a: p! G
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 Z+ L! z* x( v) n' t% \
  482.         strRegsName=DEFAULT_REG_URL;
    * ^6 k: u8 K( E9 y2 p$ `0 V
  483.       }
    1 u9 Y( ?. I4 O& U
  484.     }6 s4 N' Y- ~( {
  485.   }4 \$ Q  N: w# H7 p% B
  486.   return true;; E! K6 |  V4 X- X; ]
  487. }
    0 q+ g+ J/ }8 b2 v# y& R( B
  488. % n- I/ {: M$ X  F! {+ o  [0 ?! \
  489. #include ".\ZLib\unzip.h"+ m1 a2 B' ^3 h$ H- N
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    + `. w1 k& U( k9 B
  491. /////////////////////////////////////////////////////////////////////////////) D4 h7 M. `7 C& Z1 V
  492. // CRevAppApp initialization
    5 [; U$ c$ U3 ?% R$ l$ A# {1 k9 I
  493. ; }/ K' E% Y3 W6 d; y
  494. BOOL CRevAppApp::InitInstance()1 }- W: ]* a+ s+ W
  495. {) h# G, g" x# A. I
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];( G. d# g5 i0 k. _# Z4 X

  497. ! ]9 }6 y- p& P3 q# j  R: }) m2 s' t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / F& \/ H# Z1 K
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    - Q0 \) ?( S- C! b7 d: Z
  500.   {1 k' b' c8 K* J% j( `( J. V
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");5 }. _* H5 s% }2 M( }# g: J1 y3 r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    8 N5 I/ M% A, s7 G$ t/ g* k$ e
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    & V" ^2 P& i4 S& `4 R1 o, Q  T& t2 H
  504.     {! z( c- d# a* v* Y# |! H
  505.       strcpy(szPath,szPathTarget);
    $ B8 |: s  y! t7 ?* D8 Q0 m
  506.       SetCurrentDirectory(szPath);/ }! s$ Z# d; l* i( b2 p
  507.     }& |) f* x3 Y; U# [
  508.   }
    6 D, x* i/ K0 J: o- |- s- d* ]; F
  509. #ifdef _DEBUG
    + S, _8 V" Z5 j
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ i/ t; |% }! n# L) f
  511. #else
    8 D2 x/ E6 T; |' C0 u
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ |0 ?9 d8 c+ {3 m% _6 Y& U+ `
  513. #endif
    " a6 ^# }; E* U: M5 A" I8 i
  514.   {
    : h" \9 u$ e2 ]) |8 ^' C1 }: x
  515.     char tempFileName[MAX_PATH];
    . Q" @; v  H! j2 Q3 x- x8 r
  516.     strcpy(tempFileName,szPathSource);
    / Y" E5 C* S4 i
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ' r. W5 d$ @$ @& F8 P  T+ ^
  518.     strcat(tempFileName,"\\$CSUpdate.exe");' j  T4 D! v4 b- x$ c3 A+ L
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);: e8 |! J' ?4 A7 L4 E8 Q0 Q5 U
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    9 G, J# {0 [$ G/ M/ s% Q8 K4 Q( M
  521.     return TRUE;5 {: D8 _3 y: d0 \* _6 `
  522.   }7 a  {4 v( [. i: v
  523.   // Nuke 0118: Delete run.exe( A: z& ^1 Q, i5 F' J: Z, r; v
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    : n, b" X/ h; E/ p3 P- {$ ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");' @: t, v- \+ l9 \
  526.   if(!ReadCfgFile("Config.ini"))
    * ^( X+ {4 G2 z, ?7 x
  527.   {
    " T) T8 T) |3 a; T2 S) F6 P8 Y% m
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    4 u+ P+ I1 z' V- e
  529.     return TRUE;( ]! N) w& K4 ?
  530.   }
    1 i2 e& W* x6 E. y1 r% B# e
  531.   HANDLE mutex;1 f% A- E* B; G* l
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))8 |0 D7 U' X- }. Q' F; p& e
  533.   {
    " Q; y) z. R" f  g$ k$ w
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)$ o4 C; s  k% k3 P% m3 x
  535.     {+ G, @. I4 q  K. P8 ]7 w  X
  536.       CloseHandle(mutex);9 k$ @( Y/ [0 \5 O+ p2 M" h
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    - ^9 N# }7 \8 u2 _
  538.       return TRUE;
    . w) R6 `# w* n0 ^5 G! R0 p6 h
  539.     }' Y" _4 X4 h4 Q3 x& o- l3 S
  540.   }  3 Y0 ^4 X$ w. I# `1 u2 U+ T
  541.   CloseHandle(mutex);
    4 z/ f) I! s. E6 G) D( o' c

  542. 6 W# \- h6 j# w. w
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);, j3 r( v7 z' F  a: q
  544. 6 H5 E1 p6 b* n6 I9 Y& Z% k% O
  545.         AfxEnableControlContainer();
      ~) J2 |. @! ]$ Z( |. j( W3 y

  546. 9 L  j* I5 O% l2 T/ |
  547.   bCanUpdate=FALSE;
    9 M* w( h% y3 s/ X+ g. j5 \! u% d
  548.   dwStartUpSteps=1;
    4 s- H! R) c) w
  549.   dwProgramState=AP_NOTHING;
    ) S: n. z, z1 d. R8 j
  550. ! g+ m+ \- P& ]2 P! o6 ^$ e
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" i9 H/ |5 q3 X

  552. 6 ^+ A/ Q' M$ a
  553.         // Standard initialization
    - C0 L9 c7 R# y9 o+ }
  554.         // If you are not using these features and wish to reduce the size
    0 z0 ^- _& ~! S$ N9 X9 ~
  555.         //  of your final executable, you should remove from the following" s* d8 W+ e; @0 i% z
  556.         //  the specific initialization routines you do not need.
    9 m; i! x; Y9 z; m/ I5 }

  557. 3 [. h' g1 ^/ e6 E' m# u* e
  558. #ifdef _AFXDLL$ y, `0 t0 e9 Y" A2 U$ F/ E
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 }. i6 O: l& |: h* Z$ m) w
  560. #else
    9 t3 R" h0 y/ t" d6 v  T* Z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically, v. k9 J/ X6 b4 @! U1 w
  562. #endif
    6 J% o% s$ N; Z# \
  563. $ e' b+ n' k8 D" g7 i. ]
  564.   dlg=new CRevAppDlg;
    : b, n/ i, x3 S/ I2 F
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' J+ a7 W7 M2 H- D7 v6 M* S8 X
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    7 r- v( ~; W; x% ?. C) m
  567.   m_pMainWnd=dlg;
    * Z/ c6 \6 }" B3 f$ M: Y8 |

  568. 9 @9 j& m. W( c& _
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);9 K0 }  _5 r  z+ m9 G
  570. . d1 S* S' ~% b& Z9 G
  571. //  GdiplusStartupInput gdiplusStartupInput;
    1 h0 o$ `' s$ @% d  X
  572. //  ULONG_PTR gdiplusToken;) A8 S! v1 y* b* ], y" y! M+ A5 L
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    / g3 W& a- L$ C& h3 f

  574. & m* f; {( N' D0 M, F
  575. //        CRevAppDlg dlg;' k# R: Z- j. m3 q, m1 @
  576. //        int nResponse = dlg.DoModal();* w0 D6 U4 M+ x* c. w
  577. //        if (nResponse == IDOK)
    ( J! \5 D: d8 y' H2 H
  578. //        {5 c0 f" ~4 l& c) A, h- ^" \
  579. //                // TODO: Place code here to handle when the dialog is
    # K2 X6 k; m- F
  580. //                //  dismissed with OK! E* Z9 a8 m! D' @9 I; `7 d7 g
  581. //        }2 z; M( L; h2 Z, `
  582. //        else if (nResponse == IDCANCEL). c" o& P, e5 D5 b' |
  583. //        {
    ( d2 \/ |& n5 I% X
  584. //                // TODO: Place code here to handle when the dialog is, m6 k( _* d8 r  p* w; T
  585. //                //  dismissed with Cancel
    ( _/ {, Y, h8 v7 X& J; q
  586. //        }
    / P8 }0 K5 [. t! l  a
  587. 2 T! m( X! H9 k3 f
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    9 K$ w5 E5 }" B7 W5 H8 l
  589.         //  application, rather than start the application's message pump.
    $ Q& N7 t$ z$ @0 Q
  590.         return TRUE;
      ~) M3 a7 U6 [- I$ j" G
  591. }
    " _5 ?  X7 }# g) w+ W& E: }
  592. ) O1 Z2 s! G, B* b0 W- x& G/ s
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    + \1 m- G' P6 h9 l# |
  594. {
    ( F4 |  o) f9 D3 {0 z' t/ E
  595.   int i;
    . \$ q, E8 P& C' B7 J
  596.   char *szRet;
    $ J: D) ^9 z7 d0 G: i% j7 L6 t

  597. 0 H# B8 U2 i( M5 j3 z
  598.   if(pSource) { itoken=0; sztoken=pSource; }. P3 D; O  u/ U
  599.   if(sztoken)
      g' p) r9 @+ [% F/ x  I. E
  600.   {; n8 E$ f" E0 s8 E3 ^
  601.     szRet=&sztoken[itoken];' V/ U  h: |! Y. P- b) p! a9 ?
  602.     while(sztoken[itoken])
    3 Q, n6 G7 X" U. k& F4 u
  603.     {6 E- b! l8 b1 [
  604.       for(i=0;i<(int)strlen(token);i++)9 x  P  B, M/ x
  605.       {
    0 y0 h- k3 {! J) G) E
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])4 _, G/ k3 t+ a% d) E
  607.         {7 c- p9 T1 r! `" p0 v& I& ~7 |
  608.           sztoken[itoken++]=0;4 ~: h  J9 o1 A
  609.           sztoken[itoken++]=0;
    7 I. n3 k9 @( U2 O! `) ~! n
  610.           return szRet;! _% X9 T4 s3 f$ F6 Q
  611.         }
    ; [/ E+ n: F( G- ~6 v3 ~3 n$ {
  612.       }
    - E& l) q4 ?! ?# D* Q# i
  613.       itoken++;
    " I- T6 q1 ?* P% E
  614.     }
    . H% b% _, g/ X! D" w
  615.   }2 [9 r& J9 ?* i
  616.   return NULL;
    " @7 O* L! b0 r6 Z
  617. }3 x( ?" A/ Z8 |% f+ _4 Q
  618. 1 o, v, S6 l) k  I7 t# d
  619. void ProcessProc(long Total,long Current)1 Z* a2 Z$ O6 B6 {
  620. {
    : K4 u8 b+ ^. a8 P7 q+ a. X
  621.         MSG msg;. y( P4 t1 a( D3 v" g
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    4 a6 k0 c6 p8 h
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    1 C* q: W# j8 j$ d4 x
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))$ k2 `6 ~9 a. C2 |. m4 O  \% e2 U  [
  625.         {
    & ~7 \9 J: G( a3 b+ s: p
  626.                 if(!GetMessage(&msg,NULL,0,0))
    " R3 _, u: P" n
  627.                 {9 |- \; Z) e3 z7 Y+ `
  628.                         return;
    ; I3 B5 b/ P3 g  B& |) j
  629.                 }+ N  b) K( d0 S+ v8 c% D
  630.                 TranslateMessage(&msg);
    1 D/ Q' O" N' @) v) t7 x7 o. V* _
  631.                 DispatchMessage(&msg);
    7 F6 |# ~  i7 n1 z' c
  632.         }       
    9 H' u. j1 y+ A) F
  633. }
    & r) r* r) f6 X# F

  634. # C* Y9 l0 K( y6 n% }, o  K
  635. BOOL bFirstChar=TRUE;2 |6 x3 E7 w. k

  636. 4 _5 a6 b  Z% i
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    * r8 f3 W% \5 T0 k3 q! ~. S
  638. {3 ]/ @4 V8 y# o# U2 ?
  639.         // TODO: Add your specialized code here and/or call the base class1 Y& f7 Z/ @4 V% S9 J
  640.   switch(dwProgramState)
    0 w2 L: p! W* S# F( S3 D, K
  641.   {
    5 R. \6 f5 m1 c
  642.   case AP_NOTHING:
      B) b1 W' l) f9 G
  643.     switch(dwStartUpSteps)
    ; n7 b+ ?: L" |  w$ D5 L( H
  644.     {
    ! {% u4 L4 K$ B4 R! t
  645.     case 1:
    * g, G) T+ Z+ l: B! `0 z; ~$ X1 g
  646.       {8 ~) A" k3 p. d9 \0 ]  s( l  |
  647.         int i;0 n% S9 }5 Z1 j% t1 V' o
  648.         CDC *pCDC=dlg->GetDC();+ D2 P: F& g. v$ q- |$ \
  649.         HDC hdcwnd=pCDC->m_hDC;
    , ?4 _6 F4 ]9 u! y' f- F; W* G
  650. //        Graphics graphics(hdcwnd);
    - c0 c; b2 G6 |8 m- b5 N
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");9 j; H* P) r5 I$ o3 m) B
  652. //        INT iWidth=bitmap.GetWidth();: T# e, H) r% n% h* q& u" q
  653. //        INT iHeight=bitmap.GetHeight();4 z9 Z( N' H# F7 x/ I
  654. //        Color color,colorTemp;
    : Y" }+ }- @# H% C- g6 \
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)" C7 A, e. c/ D# _% e4 d
  656. //        {
    0 @: R9 d, {: a5 P* r7 N, `
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# v+ V* D3 E; q
  658. //          {4 n9 P, p+ A) M0 ?* w3 Y; t
  659. //            bitmap.GetPixel(iColumn,iRow,&color);+ j; `2 ~1 F+ b7 X
  660. //            colorTemp.SetValue(color.MakeARGB(& G4 X# |$ N' i
  661. //              (BYTE)(255*iColumn/iWidth),' C/ I# |8 Z! @* l7 D
  662. //              color.GetRed(),4 }( D  w! s; R6 I
  663. //              color.GetGreen(),
    . n* F2 A1 P' ^9 ^: u
  664. //              color.GetBlue()));4 l: W" q4 K4 Z# y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    6 }6 a0 z0 E# D7 b% a% ?- W
  666. //          }
    ) C! }: r3 P+ L3 f/ U1 R3 z" G
  667. //        }6 x* s. |  V2 z' q4 a% D
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    % J/ p- \, Q0 f
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% }5 N( j5 M5 {# R7 R  L
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    / A- u5 [8 o0 B- \# L! C; r' |
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ J: ~6 I) z6 I. t6 h# b8 G( x
  672.         for(i=0;i<240;i+=8), }! i2 a- M) m2 Y( b( _7 N5 A
  673.         {
    9 w* b+ T4 f+ w- {* t0 y% A+ U+ k8 [. o
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! P$ o1 m0 A$ @+ t( [& r
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + w$ Z0 J5 E8 f; k: W
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. S, x. z- m! g, G, v3 D
  677.           Sleep(33);; Q) Y, H# H' r" P
  678.         }
    ) o& m2 t7 Y( e# u' V
  679.         Sleep(1000);
    : W8 o# P- e# |( ?6 ~3 R) ]
  680.         for(i=240;i>0;i-=8)$ i, g, z- `) O3 |/ f
  681.         {! [( \* f2 M9 q# ]
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 y( |! z9 d1 e! z5 ?/ o, z
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 y  H: t8 k! m
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) n! ]' z* @6 Q3 d
  685.           Sleep(33);
    : C6 v1 z' K' S2 Z
  686.         }
    + \  [% ?4 k+ N1 ]/ n; L
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    : n5 R* L: g2 Z5 d7 t2 J
  688.         dlg->ReleaseDC(pCDC);! |& n- \# u( h# k4 j) f- V
  689.         DeleteDC(hdctar);- T9 u, l+ T) Q9 p. ~
  690.         DeleteDC(hdcsrc);
    0 ?1 E' G5 m8 T( o5 Z
  691.         DeleteDC(hdcorg);
    5 [9 G) l3 z; y: P
  692.       }
    3 f3 G/ @& L/ o$ k. [4 \+ m4 k% b
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 S' q2 S& W, }  L
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" I! ?" F/ ?# ]2 ?! u% m
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");9 h9 Q9 k9 O: J& m2 H7 F6 s5 d  @
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");5 A1 |. W$ d* ~1 V
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 v' I! b; W7 g, }
  698.       if(!Dn.Connected())! G4 e/ E* w& o( o2 Y. X
  699.       {
    & y) f* t2 e: a& B2 c
  700.         dwTotalFiles=1;# r, A8 _) w" i, a2 }; F
  701.         dwDownLoaded=0;$ r/ |# a2 C8 v' v2 u
  702.         bSilentStep=TRUE;$ @( |7 |( c! e0 |1 u
  703.         bCompressed=FALSE;! d4 d0 U2 p! u" R6 s
  704.         strExtLocal.Empty();
    / r1 _) X% S( |/ W
  705.         strFullName="readme.txt";
    6 A1 M" S9 d0 L: w8 X# v
  706.         dwProgramState=AP_CONNECT;; W' i* h1 t, `& |
  707.       }
    6 E1 }  h6 O! c1 |& R3 s
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();' a! S2 h& _1 `5 c! m) h
  709.       dwStartUpSteps=2;
    * i9 v/ D& @" q) }, |/ M
  710.       break;
    1 k+ U. E. D5 s
  711.     case 2:
    % Q, W- u: h6 {" d
  712.       {) D# r, Y8 L( S' _
  713.         int iEOF;3 j. P  x% I! Q9 c8 q* u9 L; A0 P
  714.         FILE *fp;
      B2 i5 e# W, v" j9 D
  715.         char szString[512];
    / k. J8 E) i( D0 Z
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    + t6 P( Z" ^, D6 g4 o& x
  717.         if(fp)4 N4 S" l7 h5 g, V8 w. C
  718.         {4 G( K) }9 S/ I& K% G
  719.           do! B) C$ {6 Z' `% o& Z! F+ i3 m% i
  720.           {# k6 Q) ]" h4 d. r; G0 {% h
  721.             iEOF=fscanf(fp,"%s",szString);
    0 l9 S9 u4 |4 R, C+ }
  722.             if(strlen(szString))9 \) m- A  ]4 L/ f, W' q
  723.             {8 P# w0 F2 U, F: n
  724.               if(bFirstChar)% i) {( y1 K9 T0 U; e
  725.               {
    8 D9 b, n0 O( P% i* Z- b/ p/ R: Q
  726.                 bFirstChar=FALSE;
    - c+ D/ }# x, d* }
  727.                 bConnectIsBig5=FALSE;
    % x+ |# |) ~: ]) d2 o9 e, p7 W( n7 }" O
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ' T0 d, @6 m2 f+ D2 {! z3 U
  729.               }& P8 a  d/ s6 m* c9 t
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));3 ?( H+ M. }$ Z6 i! V1 Z9 p
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    + B- g2 M4 k4 T5 S1 @
  732.               dlg->m_ListText.AddString(szString);
    / O9 L8 x7 j% E# ~0 i9 H$ m
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / j) k! Q% W  U1 ?+ X, N1 W
  734.               *szString=0;
    # y8 {* [' ?4 v
  735.             }
    5 S7 w; v- x: ~' {* U6 P$ Z/ _
  736.           } while(iEOF!=EOF);
    + {: f. V; r6 ?5 _% ^: G
  737.           fclose(fp);
    , I1 p) m$ f+ H- u
  738.           unlink(".\\DownLoad\\readme.txt");3 w) N; t( K+ J* F
  739.           dwStartUpSteps=3;
    . f% b1 E, h# B7 C
  740.         }. h$ Y$ N7 O6 x! b3 j7 Y* F
  741.       }
    ) o/ I. f$ h4 `  O% f4 D# Z
  742.       break;
    ; r  q+ o# D5 E1 P. N( Q
  743.     case 3:
    3 x6 a4 }# z& y1 X3 U
  744.       if(!Dn.Connected())8 J3 o% M+ \: G& q
  745.       {3 A1 ~8 T$ C1 z2 `
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    & u, ^8 h* n% ?. a. k) V2 ?
  747.         dwTotalFiles=1;$ ^2 l% _6 b* e& M
  748.         dwDownLoaded=0;
    % N( ]& T" ?! X& N8 ~( E
  749.         bSilentStep=TRUE;* \  J2 @- A& _: w. \2 @
  750.         bCompressed=FALSE;: ?0 A/ k/ C$ {7 `$ I
  751.         strExtLocal.Empty();- l, a) H8 q+ N
  752.         strFullName="checkversion.txt";
    : o6 N4 q& Z8 d, k# p! z1 }  h
  753.         dwProgramState=AP_CONNECT;4 G0 K6 D( a/ l  _5 M2 Q% w4 J1 |
  754.       }' I/ b" J# i- X. |$ b3 ^+ B) Q
  755.       dwStartUpSteps=4;& {3 s  C- H) t, `% m
  756.       break;- P# w+ V& X! h: \# k" V9 [0 H
  757.     case 4:  J! |' I* i2 m% C1 T
  758.       {5 r  K. z  e* q5 w) G
  759.         FILE *fp;2 A( a6 M5 o- D0 i  Q4 K/ s! W
  760.         char szString1[128];% w  {4 g+ e. K# ?' y
  761.         char szString2[128];: U& L; k( J, A9 h+ m1 ]
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    5 ~* S. k2 K+ ~" e) j4 \  x9 ^
  763.         if(fp)9 P; O* f* ~; q7 s- B! Y) n
  764.         {
    6 D: B' Y* l5 v' w# j/ R
  765.           fscanf(fp,"%s",szString1);) `( R* O+ u- k$ }  C% w) O+ Z' x
  766.           fclose(fp);- Y! i# t, i6 W: ?3 {' r+ d
  767.           fCheckVersion=atof(szString1);
    5 f, w# |# z% Y0 h6 I: ?7 I4 X
  768.           fp=fopen(".\\checkversion.dat","r");
    1 P  @% x9 W9 @# Q( Q
  769.           if(fp)- S/ L. C3 ^9 e8 G; d7 y; L1 S
  770.           {
    3 p; r& w: X0 r% h7 i$ ^' j
  771.             fscanf(fp,"%s",szString2);
    ' X  a* @- _' ^; w
  772.             fclose(fp);
    2 t* d* V$ V2 }$ M% R4 r
  773.             if(atof(szString1)!=atof(szString2))" T3 z6 O* Q, v( X1 D
  774.             {$ [- J3 L# `% [; q4 Z
  775.               if(!Dn.Connected())
    3 n8 P- d* t0 B% O: `
  776.               {  ?# j/ {0 {% E- z" e
  777.                 bFirstUpdate=TRUE;1 u1 P9 u% g# b  Z7 }2 Z
  778.                 dwTotalFiles=1;# w  a9 L7 `$ J+ w9 W& B
  779.                 dwDownLoaded=0;
    ; q# |: y7 \6 j- j6 w
  780.                 bSilentStep=FALSE;
    , I" z. F: x3 I
  781.                 bCompressed=TRUE;
    8 i& _& o$ G+ _2 x" ?$ b
  782.                 strExtLocal=".\\DownLoad\";0 ]7 H, ?6 T" Y1 @* y1 u1 |. q
  783.                 strFullName="update.txt";
    ; z9 v, l. x( G/ [6 U$ n
  784.                 dwProgramState=AP_CONNECT;8 @: J; Z4 |" c' I, Z; i
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  ~0 \& {. j3 {# j1 N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / Q/ F4 {5 p! g- C- x9 B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");* s" k+ J; x- ?" T" |( P6 b

  788. / ?6 P+ z  I/ p- D% s; A
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 b( E; v3 s* x; M% i
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ) E1 j* ?$ ?) ~& q( z1 v# `7 c
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    1 J& K0 v" A! u$ H
  792.                 {( u( J$ L3 W& r) [& U
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");' B/ T. u' J" J( l
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 Y0 R/ I9 x* m5 \% E. j
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");' d# ~; b$ ^! b% }8 q, N" D
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" m9 ]& q4 J+ J9 M6 u0 {. h

  797. 3 _3 A  k' i2 u9 D
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' y" G# x  u& L2 ?$ D# K8 y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, Y! Q4 }0 `; v2 K
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; e+ t6 A2 ?) _4 c* F% v
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! W1 @+ S; z/ Q
  802.                 }
    , j4 z( f3 E9 k4 P
  803.                 dwStartUpSteps=5;8 }6 R, d& M. ?% R; X' {" w8 x
  804.               }
    5 e4 W% I4 j1 y/ `( r/ L
  805.             }
    ! T3 t+ s+ g0 Q5 K+ _* ^4 c. g6 w$ e
  806.             else
    ! t3 n; K- p% ~# F; }/ k1 }
  807.             {/ t" }2 R; v  O$ Y/ u
  808.               unlink(".\\DownLoad\\checkversion.txt");
    1 S4 N( \. @# Y) y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    7 ]( S9 ]/ {  ^! G' D) t! k
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");6 {( {; n4 U: h4 e" K/ @  f6 S
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    * P5 k: d5 q+ b: d8 R

  812.   Q* s1 @7 C, ^  `# w0 u( d* r
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' c% m4 i6 h5 Z1 E, }
  814.               dwStartUpSteps=99;) ^$ A$ l1 N3 d% o5 D3 t( J
  815.               bFinishUpdated=TRUE;; d* t- T+ t8 S4 c3 r
  816.               bCanUpdate=TRUE;* i; Y/ ~- {6 D8 @, |1 J
  817.             }/ E' Q7 Q( {5 {
  818.           }) p1 K2 U$ {7 n, o/ S$ G" `
  819.           else4 b7 |* ~( @. l% Y/ n" S& B
  820.           {5 Y) u) b2 M7 R1 k) O# W9 z
  821.             if(!Dn.Connected())
    " |$ P8 s# s. {0 @# E: `
  822.             {9 D: r6 s. T, l1 w1 F0 n# r7 n9 n
  823.               bFirstUpdate=TRUE;
    9 u( s# c% h  @. i
  824.               dwTotalFiles=1;
    % e% C% ?  y0 `: x
  825.               dwDownLoaded=0;
    5 R1 V* W6 S2 u, n4 a7 F) r' `
  826.               bSilentStep=FALSE;
    " M* ^8 X5 C! B9 [# B+ E2 m
  827.               bCompressed=TRUE;
    8 Q9 E7 z; T* h; h, o. O' A; b
  828.               strExtLocal=".\\DownLoad\";& b$ l2 y" }6 `) z. n. F5 i' V$ C+ q' B
  829.               strFullName="update.txt";
    3 u. Y/ |/ {8 v
  830.               dwProgramState=AP_CONNECT;# e, ^6 A" B; ]* b8 M
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * v. ^) f2 X& z( F' G% U
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 O2 j: e7 E/ }9 e# i& p0 E# A  t. T
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! k/ b7 r. q1 x* O% ~
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + u* h. e8 A$ ?& W6 z9 i
  835.               unlink(".\\DownLoad\\checkversion.txt");
    2 m: i% G7 i3 G7 U0 v
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    & p- E% K- U& _: m4 }/ k3 Z
  837.               {5 g2 G/ Y  i7 l: P. a# h4 I, O4 |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");! l3 s" c! P, S
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # q1 s* }& q. p8 @& Z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");7 T# i% a) Q  i8 l8 X% [
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # z9 T9 L( F' p
  842.                 $ t& i1 P1 i) `, J4 L/ @, G
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");6 r. s+ N' D, X8 V
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 Z- q6 D8 Y: g) _
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");- b6 m1 e# C* s- V& l- `  S
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 g) a" a3 b) [# x. `: _; I5 |
  847.               }
    . L* Q; n: g' p& G  ^4 J
  848.               dwStartUpSteps=5;
    ( U, q5 N0 `( a) m  d
  849.             }
    / W2 W4 h) m2 D6 p2 n6 k
  850.           }
    6 e  h7 h% s% Q# l; e  X+ ]
  851.         }/ U1 e6 C3 K! ^  W+ g- K* b+ Q3 ]: K
  852.         else
    : S' t. v3 x- X/ e
  853.         {
    7 C- g0 U# j4 ]
  854.           dwStartUpSteps=3;& F* ]: `  j9 R9 H( r
  855.         }
    & V1 F; o/ ~2 @1 S- Y: R* I2 @3 G
  856.       }
    ! T/ X( T3 I0 o9 G4 ^3 K1 d. ^0 V
  857.       break;! I4 w) L$ }% Y% n  L
  858.     case 5:
    + b% _* x1 x" S: ?( E) l  w& e
  859.       {' m! g3 p* j5 F; r6 Y
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); p$ g% D1 C+ ]1 Z/ F
  861.         {$ A7 O5 s$ d! f% p% E
  862.           int opt_overwrite=1;3 I8 P( f" L  h. x
  863.           int opt_do_extract_withoutpath=0;1 r" O6 [. U% B6 k
  864.           unzFile uf=NULL;
    : w6 b! p- t9 S5 F  }& z& b
  865. 0 c0 ~  D0 E/ ~9 J' P6 c
  866.           uf=unzOpen("Wsa.zip");
    ) g1 c% S. o+ ], ~1 o
  867.           if(uf)5 B6 g- ?3 I. ]* O
  868.           {
    ! n' p7 g1 p) Z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    . X: b# T# t: H
  870.             unzClose(uf);0 C/ c4 w. v3 q3 {. G6 @
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ( h3 S* c8 C6 a8 B4 e' [& U  ~
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    0 `8 K' r5 Q( m% ~0 ~
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");; O4 m! L, J% s: k, E
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 ^; L% V. \$ H- C$ W
  875.           }
    ! _# `$ M! M6 V
  876.           DeleteFile("Wsa.zip" );! j# o. }. t. Y1 g8 s- {6 _+ ^
  877.         }# }7 C0 g, d- ^4 ~* v& m) U# n2 v
  878. $ O+ \6 c3 G8 a' W
  879.         if(CheckLocalVersion())
    8 o0 M  `; b/ h9 d8 p$ @& I
  880.         {
    6 ?, b! p5 j. \3 }
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");, T. D, p; [: }. R, w8 g* [' Y
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ) \! d% p9 K; X
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    : w9 m1 a# s" h, t# A) ^: P+ c
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* V9 f. q& \8 o8 A, \  D+ z
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);: Q& j' b: Y- {, I  \! t1 I3 {, E
  886.           dwStartUpSteps=99;: a% C+ t! J5 A7 j, Z# [" w. e
  887.         }' S9 L) Z7 k; [3 @& x  s0 c
  888.         else
    6 S8 M" x) U# M3 h. m1 r' ~
  889.         {
    * d; Z. n6 V( ~3 k" k" i
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    4 i1 A% H2 e+ j- I4 s- Q
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 S4 D1 F/ ?2 N* Q
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");/ n- O0 s+ H) F  G* [& P# m

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

' q7 R6 [2 ]3 `$ l3 D6 a% r; S8 `' w, `/ b

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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