找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
1 x! ~6 _7 A3 _
  1. / RevApp.cpp : Defines the class behaviors for the application.9 o* F. A& q* U5 h6 p; m9 D! ~
  2. //5 n, C. M( P) _/ [. }+ ]! h
  3. 1 l: I5 ?3 a- F: K, S  i
  4. #include "stdafx.h"" I. V1 G; V( K; ^7 b  `- l! e3 x9 u

  5. ; D, s) O& _+ X: f7 j( A- l6 q. S
  6. //#define UNICODE
    / K$ V: {/ y9 t" k1 D' M
  7. //#include <gdiplus.h>
    # {' W, @2 q. S) C; H# B+ V3 q" p
  8. //using namespace Gdiplus;+ j, w2 P; A8 B- p! M% @
  9. 0 }1 [0 x6 r* ]+ T/ z
  10. #include "RevApp.h"
    - Q  D8 P& ]( O+ h* N$ w
  11. #include "RevAppDlg.h"
    , K+ J: C, b( j' W

  12. 4 @9 T* Q$ m. N; S1 D; }  q
  13. #pragma warning(disable:4786)
    , e# c; J# L* A4 _3 x9 J: v1 I) \! m" W
  14. #include <map>
    0 Y/ [: L- _& _: Y  \9 Y) O
  15. #include <list>
    " p5 f! c2 F. _2 S& w. t' r
  16. #include <direct.h>( x+ _$ K5 N/ E' }' @# ^# d. }! M

  17. 9 ~* K( U% m. F/ ?) x/ @. F
  18. #ifdef _DEBUG
    ! b; [7 r# n' F" j  Q
  19. #define new DEBUG_NEW$ C1 E! E" }! _) s
  20. #undef THIS_FILE" U$ J* W( X6 R0 a9 M& v
  21. static char THIS_FILE[] = __FILE__;
    1 s; q; b8 p- `# Q. t) r
  22. #endif% \/ R+ m+ O+ Q% [) s) o% D
  23. #include "SkinResDef.h"9 _$ T( s+ l! H! [1 _
  24. #include "ChangeBG.h"
    2 C3 D' y0 P# J! j3 ]" B3 q' Z
  25. #include "AFXINET.H"
    2 n/ N. k7 S4 I3 k1 y  t

  26. $ w) S5 ^+ g3 w4 Y' Q/ [
  27. #define TRADITIONAL_CHINESE 06 `& ^7 t& A4 K) y: F3 \
  28. #define SIMPLIFY_CHINESE 12 ?8 {5 ]- a  O/ ?8 I* w
  29. #define ENGLISH 2
    3 C, O$ g8 q( p+ {" ~, ^
  30. int m_iLanguage = ENGLISH;0 g3 i0 q7 d8 V+ R& `# [% H# H
  31. /////////////////////////////////////////////////////////////////////////////
      R5 d4 }! p' Z( E
  32. // CRevAppApp
    , u7 J% V) V! A9 K
  33. # O: K% m' K, I7 S
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! j3 e0 n  l3 Y6 G# K4 T$ O1 {
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    1 @( Q8 F2 T5 v; ^" x0 }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    $ ?3 n% d& @5 q' x# V
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!" m) k( V6 s' `6 G, M
  38.         //}}AFX_MSG
    ! I( o. `+ j9 ~. i5 v: U
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)6 A+ k+ M4 J4 F) n. R6 }  w4 i. ^0 P
  40. END_MESSAGE_MAP()5 h/ {2 p$ ]8 P" |$ v, T
  41. $ h/ h# g) A  Q7 R! q
  42. /////////////////////////////////////////////////////////////////////////////- C. F7 ]5 n* ?+ A9 I" R. v
  43. // CRevAppApp construction& z/ K7 u4 k+ d. E* S$ E" R6 P4 h, S
  44.   c) ^( A' h1 q# v' I  a
  45. CRevAppApp::CRevAppApp()
    3 @' ?7 O: T6 }9 y8 s0 B
  46. {% z+ R/ M8 z! g8 i: y+ F
  47.         // TODO: add construction code here,
    ' b$ u. _, T, a& W* f9 ^
  48.         // Place all significant initialization in InitInstance. s) R) Q7 e: s0 F
  49.   bDisplayIsBig5=FALSE;
    + J8 F" W8 e, b" z5 A5 D
  50.   bRestartUpdater=FALSE;0 s2 [. n) [2 S
  51.   bFinishUpdated=FALSE;
    % |! r4 o# A) z3 Z+ v1 D
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    2 U! U3 X: [3 `6 `6 C
  53.   InitChangeDataBig52GBKS();$ o9 S- c1 a* x! m1 m2 R  Q. A* w
  54.   InitChangeDataGBKS2Big5();
    , F, X( l! Q2 H/ }) Y7 A
  55.         //
    0 }1 x1 u( H9 c  y- W9 S6 @3 L" O' O
  56.         bClickRunExe = FALSE;
    6 H# B( Z, O  H+ X
  57.         //
    0 l( Q6 b7 N$ p9 v# s) W* T) y
  58. }0 n; n" |' v* f6 k$ l! Q  `: q
  59. 7 W( b# f0 x. P! w. q/ b$ Q, E
  60. CRevAppApp::~CRevAppApp()! g- H! k8 M* b9 X' K
  61. {! R+ K! V( b5 J7 z: y9 \4 P
  62.         // TODO: add construction code here,9 m! _0 y1 K  g! o! W- @/ |. q  K" l  q
  63.         // Place all significant initialization in InitInstance8 S$ D" q. K, K1 P4 y* A2 s( `. E
  64.   EndChangeData();
    6 R! z2 ]" K- B% N# x$ i/ |
  65. }
    . _, V5 B: u! b7 g& H6 `" x

  66. $ L/ B( h  x3 O4 n" o
  67. /////////////////////////////////////////////////////////////////////////////$ A( C" X+ \6 X6 K
  68. // The one and only CRevAppApp object
    $ y3 k( L3 x* i; |' ~

  69. 6 u6 [3 |, `8 m7 n' f2 T
  70. CRevAppApp theApp;; y" C+ _5 x& P* k

  71. 5 s( @5 m, i$ ]6 C% l
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)3 C  B1 o* X8 b$ a! B: ]% k$ @
  73. {
    - \1 t: V( R+ b
  74.   int iEOF=0;* k6 @1 x1 t/ r7 {- e
  75.   char szTempName[MAX_PATH];
    9 N7 z' J0 n6 D7 y* X) C/ F
  76.   *szFileName=0;
    - t: r' i7 P8 p6 ?, n) K% r
  77.   iEOF=fscanf(fp,"%s",szTempName);
    , L: _- p( N8 z3 S9 v; U
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ; ]( a& b9 g, Z0 U
  79.   {
    5 T) F, N+ T8 o3 I( ]( Z
  80.     strcpy(szFileName,&szTempName[1]);
    ' Q9 x; c; l* X3 {
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    7 b& G3 q( ~5 K$ U( j6 s8 y
  82.     {4 L, _6 e) u3 o( b
  83.       iEOF=fscanf(fp,"%s",szTempName);
    7 D" o$ s' |0 J! n: a$ [) R
  84.       strcat(szFileName," ");
    + a1 [' d; h& s
  85.       strcat(szFileName,szTempName);1 G3 y; e! d" _# j6 p( y
  86.     }' I( d& h+ z& O( I
  87.     if(strlen(szFileName)>=1)3 C! m9 a, ]$ O
  88.     {1 Y  k7 f  a" T! ^
  89.       szFileName[strlen(szFileName)-1]=0;
    0 I" J( v' C" v" h
  90.     }
    9 _" Y+ J6 P% _7 Q
  91.   }
    / {8 c, ^( b  _, \0 H  u
  92.   return szFileName;
    $ x9 d3 Q9 x! E* n- _
  93. }5 Z+ `# R4 Z9 q7 X

  94. $ t  x, e7 M# O5 L
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    7 v* \* S) }) @
  96. {7 l& l/ |  t' M7 d/ [3 J
  97.   FILE *fp;  u8 a; h0 Q8 W4 N& _4 e
  98.   char *key=NULL;! a3 `) K0 i' N! v; a7 P% |
  99.   char version[MAX_PATH];
    ' v. N5 D+ T! C+ ^8 v( Q! H/ e& }+ A% G
  100.   LPUPDATEFILE file,olds;
    6 E$ z& O- T% C; M* L
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    + h  e% ]: s7 }2 F, k0 x9 S4 G2 v
  102. : R' m) g0 ]9 V
  103.   UpdateList.clear();
    : N+ H$ K% U3 z- Q5 B/ r
  104.   UpdateFile.clear();4 a6 Y& \" o6 ~  O  B0 m
  105.   if(GetFileAttributes(filename)==-1) return false;
    - Z7 t# \- k6 ]) K7 @! d* j- k
  106.   if(!(fp=fopen(filename,"r"))) return false;1 q. [: i+ g' O
  107.   fscanf(fp,"%s",version);
    ( w! v) k6 M, |0 }
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    $ s( m2 X2 E! j( _, x7 A: ?
  109.   while(fscanf(fp,"%s",version)!=EOF)
    % y7 \- F; D# \
  110.   {% F5 K1 s) Z& X- ~
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 f  f9 d7 |3 q) F, {$ ]
  112.     fscanf(fp,"%s",file->path);
    ' h2 K0 I, k: F# {" A4 f) h
  113.     ReadFileNames(fp,file->file);
    ; [7 B' ]* O# W( @, c- p
  114.     strcpy(file->full,".");
    + U% h5 D/ o3 e+ P  R. o  O
  115.     strcat(file->full,file->path);
    + j) f5 Q6 n7 |2 }: ]+ f
  116.     strcat(file->full,file->file);
    9 }* ?. Z" w* J) K0 Y$ e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    / q1 a. X; }- T
  118.     {
    # D, y7 S: _& L. P, L. o
  119.       file->vers=(float)atof(version);* q' }8 ~" J2 |! q  j
  120.       UpdateList.push_back(file->full);+ G6 N. w4 r1 @% w
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    3 \: [; n3 m7 z
  122.     }, w3 D' M' V$ z3 Z' ?- V4 B. B
  123.     else0 f) x8 R; x/ S* B& w5 W
  124.     {3 M2 j( g+ `# Z' r& ]' m
  125.       olds=(*p).second;& t$ s9 W6 G1 u
  126.       if(olds->vers<(float)atof(version))2 O0 T/ n& R  n  y
  127.       {; r2 r7 ]5 v  J& c
  128.         olds->vers=(float)atof(version);2 H& Y- X5 E" b/ \. S6 }
  129.       }
    6 P: I' K, V9 o6 x, B
  130.       free(file);' @! }6 W: \' x3 p
  131.     }' ?' p: A8 h' s( f; N5 W
  132.   }
    $ p$ ?% q, @, Q2 j5 O1 G4 d
  133.   fclose(fp);2 L/ K0 _, n; G7 [+ b5 R  W5 ~8 N/ D7 M
  134.   return true;
    2 e9 v' S( V& M5 B7 X
  135. }0 s: n+ L: Z1 i( G. u5 P

  136. 3 R, i! X5 y" I4 w
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    7 w$ b: G* X5 D; o
  138. {
    - _0 G5 m' V  O4 @/ r( t/ C3 L
  139.   TCHAR  szFull[MAX_PATH];# ]0 J% `, v, ~& r* S6 v% D
  140.   TCHAR *token,*inter;! w! d+ R9 W0 Y2 q" g
  141.   *szPath=0;
    ! _. N  j' @# ]( R* k& |9 q* l
  142.   strcpy(szFull,szFullPath);+ A7 k2 G$ H  n& x$ b; @/ l
  143.   token=strtok(szFull,"\\/");
    - e( P3 @9 a0 i/ G8 e  ]& y
  144.   inter=token;  c1 f& J: N3 Z/ _5 F. Z
  145.   while(token=strtok(NULL,"\\/"))
    0 L& I& `; _# J" ?. ^
  146.   {
    - z) S/ `1 e7 _' ?. H2 Z
  147.     strcat(szPath,inter);5 U% U) X/ \6 y' O$ ~# c' L
  148.     strcat(szPath,"\");
    - `7 \3 p8 b) d% |/ C8 D! h
  149.     inter=token;
    . Q- d* x% v  M7 U9 Z8 r3 R
  150.   }
    ! T' ^6 p/ Y( Q$ K  N
  151.   return strlen(szPath);
    3 d, }$ U# W9 j
  152. }. i" s) Y4 X) d& A

  153. 7 h8 F# ^! I' }
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase), s9 W) p4 k- z8 z3 D1 J
  155. {
    ! y6 l' {  z; V2 n" }
  156.   DWORD attrib=GetFileAttributes(Target);+ A: W% V* \0 Y8 J
  157.   if(attrib!=-1)- F; R) U: ^: v, Y9 `
  158.   {8 r/ J3 Y( l* J- n0 C4 N' d4 K# ^
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    6 R4 Z! b2 q% B, S2 p8 _
  160.     {, l. v/ [, }  l( k$ U9 g( v
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);/ s& k; L1 }: q- \0 F
  162.       SetFileAttributes(Target,attrib);
    6 f- C. U) N; X+ t# i. l/ N
  163.     }3 q6 l% ]8 I. l( d* t
  164.   }
    5 O# G' H$ ?5 E* l# X# U
  165.   CopyFile(Source,Target,Erase);
    + C6 \/ m; y4 X. u# P4 i+ w
  166. }" [0 z8 b$ h1 x

  167. : p! J& O/ q" c3 |5 B* q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! V4 a! a1 u5 T$ d, }7 k4 `. S
  169. {
    8 g" Z. ?7 @% E- j% h: ]$ Y
  170.      FILE *fp;
    ; |" m  ~1 i5 p0 p/ ?8 j
  171.      char  szBuffer[8192];: e9 M9 ]0 Q! I: r2 i
  172.   va_list  argptr;" ~0 n+ ~& j6 x! j* F8 V+ ]
  173. - g* \. x8 [8 v. z4 b( |/ O
  174.         va_start(argptr,message);0 r  d$ T. c" o: b' [+ W4 S( v
  175.         vsprintf(szBuffer,message,argptr);
    5 e; T* e% |$ S4 b
  176.         va_end(argptr);; U4 T% }' S) ]: _2 x$ ^5 N9 V
  177.   fp=fopen(FileName,"a");
    9 `. B) Q! T+ c6 I0 \
  178.   if(fp)) k. c* l' p9 T( K7 B, y
  179.   {' }5 q, q1 ?5 y  m2 T- B: u/ }& a
  180.     fprintf(fp,szBuffer);* \2 h3 [* |2 Z8 S6 f- E* g
  181.     fclose(fp);" v' Y; t: |2 r' \
  182.           _flushall();
    ' m3 m5 R; |* y- m
  183.   }
    0 ?5 c5 G; Q- {0 D
  184. }
    7 A) g( g9 C. `
  185. # |! w, F, }8 F. J; ]
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    0 |" m4 t# j0 r
  187. {) P0 {, H3 U6 b3 }* T' z+ K* d( Y
  188.      FILE *fp;
    ; g( M. X' `  t7 c$ r+ ]
  189.     DWORD  attrib;4 b, V. e# w6 ?
  190.   attrib=GetFileAttributes(FileName);& T5 ~6 `' t1 z0 M
  191.   if(attrib!=-1)
    ) O% ~% ?$ P4 j; w2 O# L+ ^4 N; {* t
  192.   {0 M7 S( |8 q8 W5 a- {3 s# N
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);. R5 b& L8 }. Q, y6 r1 K  r" q
  194.     if(!SetFileAttributes(FileName,attrib))
    4 h! c* x6 [1 E6 W
  195.     {) ^& S  y( I3 v4 I$ r# c) p
  196.       return FALSE;' u( Z( l9 s- \
  197.     }0 O. `) A/ @1 Z) ]
  198.   }9 X. v- f9 h& `1 I& N% M
  199.   fp=fopen(FileName,"wb");
    1 H$ _2 w4 C1 C2 X6 h
  200.   if(fp)
    ! y% B* |" A- V4 N* o
  201.   {& G- L8 Z' k3 c& Z7 e' N
  202.     fclose(fp);3 n" J: {& q; b; M
  203.   }
    : w6 d* J. H1 l. [4 j/ C1 e
  204.   return TRUE;
    7 D- [# Z! i3 X* Y# f% S
  205. }0 d& X5 v+ `! v" g# t1 q

  206. 8 B; c! C3 ?- g3 J6 E
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ V% p9 r& f2 F" r
  208. {  [0 V1 q. C, W. J
  209.   char filename[MAX_PATH];  ]: N0 I* F, C5 q2 u7 S5 q# @+ e
  210.   LPUPDATEFILE file,olds;
    ! @0 `% A' M+ I" |2 S5 n. t
  211.   std::map<int,CString>::iterator i;
    ! o/ W. w( E2 U; T
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ T8 R1 ]8 a; c# x
  213.   std::list<CString>::iterator l;1 V& U# Z+ q# W2 x% t! H% L: c0 `
  214. 9 c) Z" o0 ~, k- C
  215.   if(bFirstUpdate)
    ! o: r1 P% p% N9 h
  216.   {  T; Q9 E- j+ n7 u( T
  217.     dwCurrFile=0;7 [' `- H$ N) N7 E# N: A5 h3 [
  218.     bFirstUpdate=FALSE;; R3 x7 g: p3 f6 t" v4 k
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  U0 o/ h* }' Z& v
  220.     {0 g  @- i" T1 k& h/ W
  221.       dwTotalFiles=UpdateLocal.size();
    ( ~3 z" ?: V/ `" O1 e& H5 z0 Q% H
  222.       dwDownLoaded=0;1 I& Q# ?; \/ q9 J% \
  223.       bSilentStep=FALSE;8 W  U0 S  t; H" `6 _- ?
  224.       bCompressed=TRUE;
    ' I& g- m6 [1 {, f/ U
  225.       strExtLocal.Empty();
      P* h$ [$ I# h+ ^* w2 v
  226.       strFullName=(*i).second;
    : [: F0 j9 Q3 r" H: b) ]
  227.       dwProgramState=AP_CONNECT;
    1 C0 a) ^( N/ F3 x& ]; ^) h3 _
  228.       return TRUE;" A0 d: f5 v$ V' k+ I" m
  229.     }$ @2 R7 W+ g% k* h1 L
  230.   }. `: E$ p  n) U' w; g5 S2 c
  231.   else if(bRestartUpdater==FALSE)7 ?8 G* a  H; s" S1 K' a
  232.   {
    , {5 v+ b7 C& j9 B* a
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      k( H- P0 g: v4 N
  234.     {
    ' S) c: r0 g3 o" T, i% ~: V( E
  235.       file=(*p).second;
    ) H) A+ m. K9 {! b4 ^% ]( u0 ~
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())/ o; K# n( u+ _: z. \* _
  237.       {
    , N5 l) R' ]9 k+ p) F$ |
  238.         olds=(*p).second;9 s* f1 v) O+ m- z' v* S% {
  239.         olds->vers=file->vers;& f; Z4 D- C  x8 p# o8 Q
  240.       }( m7 g+ {/ h: _' M0 U0 t, r
  241.       else
    4 h$ T0 K+ Z; C, Q0 U
  242.       {2 t0 J. l) [6 k7 u
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & C3 V3 n; W' u5 a
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    & A/ O/ a4 Y% L% A+ ]7 O
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    0 C6 Z) z/ O. t6 w% q. |: C: [# R
  246.       }+ D3 J( q0 h3 Q1 ^& H; x
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    . T4 K/ K8 d" ]% b- `
  248.       sprintf(filename,"(%s)",file->file);
    ( V- Q! v- m7 c0 f* i
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % I# \# f# }# T9 K& G* g0 H
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    , U* x9 T) `9 z3 k3 m
  251.     }4 `1 t( N( E  q: q) n; [- A2 `
  252.     dwCurrFile++;
    7 W' O9 Z0 [  A" o2 `
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , o! d1 Y5 z  E# v  }
  254.     {0 q2 d; \' q" l* e) E! R! k; a2 _
  255.       bSilentStep=FALSE;
    ) i( x- h% {0 L: \( z
  256.       bCompressed=TRUE;
    6 A  F9 n& P& i. Q9 a5 m3 X% P! g
  257.       strExtLocal.Empty();+ Z' @9 L& o5 M7 E' Q0 U' h
  258.       strFullName=(*i).second;
    - `# f( f+ _; q+ Q9 `3 O4 p
  259.       dwProgramState=AP_CONNECT;
    . S% }. V2 ~$ `4 Y$ l
  260.       return TRUE;- s) v' `3 N$ J1 w
  261.     }
    & @: T7 Q9 i5 F* o5 _: k4 `7 ~: v# {
  262.     if(!bRestartUpdater)4 m5 n/ K5 S; t- V9 S
  263.     {
    ' H: e5 K9 Y; W; N3 m& g$ ?
  264.       int iCurrSize,iFileSize;) P+ {5 y6 \, i$ @& m1 m
  265.       iCurrSize=0;
      ]9 j+ `" {. s' _# f. S3 ?
  266.       iFileSize=UpdateList2.size();
    / o+ Z+ `. K+ B" v% ?: h( L* n+ |
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    + U4 ?, s7 T7 M# S1 k4 ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");( r" g# s# |1 a
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");  n! Y, i# h6 E7 w$ r' m
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; P/ z8 Z; Q9 n6 |; A- e
  271.       Fclearf(".\\update.dat");8 ^0 e  M2 g( s7 m
  272.       Fprintf(".\\update.dat","Bloodyf\n");* p8 \7 X' S  E2 v
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)/ ~( t5 t/ r* s" U1 W7 k  ^* X
  274.       {% q7 ~+ E5 {# r
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& C+ _: X/ c2 a7 t
  276.         {# u3 r4 z& B& a  @; w9 _8 k
  277.           file=(*p).second;* H! Y" W" f4 t7 r0 {7 |1 l
  278.           sprintf(filename,"(%s)",file->file);( h; w  J( I8 k+ j" s, h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * O+ C5 [+ j1 B0 {1 T  {
  280.           iCurrSize++;
    7 y( a' }, n2 |; U4 u
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));4 E* w/ h& T+ c# P- Z% Y
  282.         }
    - r0 K3 E, d" ]' g2 ^. ]8 Z! l
  283.       }
    8 Z6 K- y3 p+ o6 K; A! Z: B
  284.       unlink(".\\update.txt");
    9 G0 a) }5 x+ H/ @
  285.       unlink(".\\update.tmp");: c) Z3 f/ \) `5 I
  286.       Fclearf(".\\checkversion.dat");( L) |. H' f+ l, _
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    $ a% B+ Y( v  T5 [3 ^
  288.       if(UpdateLocal.size())
    # K, y" @. K* Q/ d# i$ R* N% S
  289.       {
    ! e% Z0 @- i" l# V/ a; L0 R
  290.         UpdateLocal.clear();
    9 ~( Z2 w& D# w
  291.       }
    # }/ \. q6 }# H6 a" |# Z4 C3 x3 h
  292.       if(UpdateFile3.size())
    " b- V+ n, _2 H, t; c4 r
  293.       {6 |- e* g7 Z+ s
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); f$ n; I. v2 ?# [% b$ I, ~% f
  295.         {' A% h2 H% C! ~! h3 e8 x
  296.           file=(*p).second;
    " H( T5 v. i+ C/ F% i
  297.           free(file);
    7 t$ V* z- J0 P8 N
  298.         }8 G! |! w5 v$ E& F
  299.         UpdateFile3.clear();
    - b& O; t+ c5 G2 H
  300.         UpdateList3.clear();
    / u% q7 i4 [; r. v6 h
  301.       }
    * M% W* [" h6 \+ E8 @$ S$ O3 v4 W0 }3 _
  302.       if(UpdateFile2.size())8 T2 }' |# b  H
  303.       {
    * h0 D! u, }& m1 ^9 F% n
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * L- a2 d) G- E
  305.         {
    2 |* _& ?4 W' C- i$ Q
  306.           file=(*p).second;
    ) Y- t# R6 G: G0 P; N! e' q
  307.           free(file);% U/ c8 n! W/ I- ^0 S9 M
  308.         }1 ~+ S. P: G3 L
  309.         UpdateFile2.clear();: A  X; M/ ^; h7 g2 P
  310.         UpdateList2.clear();
    ' f" L" n2 j2 G9 @: R
  311.       }
    7 a' U! ]; f0 c1 F) o" ~. V1 d7 [( f
  312.       if(UpdateFile1.size())
    0 z7 B  s4 c, J, ]' g' E- }
  313.       {* ]% P& B, j7 a( b: n
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    2 q, C2 G  Q- b$ _& a' Y! z
  315.         {2 m2 R+ T( {. i
  316.           file=(*p).second;" H' ]% m/ r% t, A" ^& I$ H* K
  317.           free(file);
    $ w. V( Z/ A) [3 v8 Q# ~
  318.         }+ H: t3 R+ J" u7 e5 o
  319.         UpdateFile1.clear();
    8 o. K' E' [" V6 [& R* U
  320.         UpdateList1.clear();! S+ u5 t' L: E" ?! j5 E3 h
  321.       }
    $ v/ ^7 I0 J- E( ?
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    3 B" ?: F" R. r" v. P5 W
  323.     }
    & n! K$ q! s' t8 Q; I2 V+ @  ~& v+ D
  324.   }
    " \/ n2 w8 k2 `# s- g1 J- b
  325.   return FALSE;/ Y5 w9 k7 V0 T+ t2 k1 Z
  326. }
    7 h; N* ]& ~( e; E7 n3 ~: E

  327. 1 `7 }. [# X4 z6 D& U! |! k. ]
  328. void CRevAppApp::ClearAll(void)" I( Q6 F2 f3 ?& i8 G
  329. {
    # }0 ^5 z8 _+ g! q9 b- g
  330.   LPUPDATEFILE file;
    7 b7 s" f  z8 i1 Y) @* [
  331.   std::map<CString,LPUPDATEFILE>::iterator p;8 p0 D# r9 q0 K+ J
  332. 1 d# d. l+ `5 T. c2 N
  333.   if(UpdateLocal.size())# W' W0 ?. t7 T- F" \: }
  334.   {; `  `# N4 e$ J: U
  335.     UpdateLocal.clear();
    - G. @4 S. q! p/ O( {9 [
  336.   }! k. j6 V5 f! d. y$ @
  337.   if(UpdateFile3.size())
    / Z: J# _7 x: D" l
  338.   {' Q- Z$ f, @+ x# J2 ?8 y. H
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . Q: B+ P8 q5 s6 t; B: z
  340.     {
    7 P8 P2 d% `8 t1 h  M5 ]1 y$ C
  341.       file=(*p).second;
    : p/ a& I# W& {5 i
  342.       free(file);
    2 E( K  l+ B: U0 N/ V7 B  F
  343.     }! ^/ o$ i$ }0 V0 h+ ~
  344.     UpdateFile3.clear();
    $ Z( n8 H0 Q/ Y( a6 a5 ^. W
  345.     UpdateList3.clear();
    ) D1 y/ j: Y" [: p! K
  346.   }
    8 Z$ _. C$ ]6 k) _6 M
  347.   if(UpdateFile2.size())' G0 h/ ~+ R* A1 W9 s
  348.   {8 `& b4 q& L0 e' c3 o' j/ ~6 q2 ^7 o6 F
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - a9 K: o- O. i& t9 v* b
  350.     {
    1 F) i! I6 l' @( U: j
  351.       file=(*p).second;: K; O# V, a! a
  352.       free(file);5 w+ n" U: F; L/ |% L
  353.     }6 n5 ]/ ?( o+ T) f! W
  354.     UpdateFile2.clear();7 q9 F: l. M0 A- X9 l3 h
  355.     UpdateList2.clear();# |- Z6 E7 Z5 z+ u+ T
  356.   }
    3 D$ a- `: n, S! g1 n4 o
  357.   if(UpdateFile1.size())$ @2 y0 j0 ~4 N: W4 k* {# f
  358.   {
      ?9 ^1 H- {% W4 T
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  X/ [# _8 p" R+ R  w" \/ x
  360.     {, d  n; k' J" B5 |/ B! j; Q; u
  361.       file=(*p).second;
    3 g! Z/ m/ E4 G# U
  362.       free(file);
    ; s: A4 {: }5 }) p& l
  363.     }) m  D. p7 t+ E* K
  364.     UpdateFile1.clear();
    ' ^8 A0 V: ~7 g5 i. D) _9 R
  365.     UpdateList1.clear();, X; |  F% p( `' V: P; W; q' x- q
  366.   }
    6 a' T7 n  q& v- R
  367. }  6 v/ `4 l1 ^8 g5 l* ^
  368.   
    / d( j& G0 V4 K0 m; o
  369. BOOL CRevAppApp::CheckLocalVersion(void)+ X$ x& ?& H. N8 f$ J2 j1 d
  370. {
    & \0 R0 e4 f5 E- y
  371.   int c;- v- S( N2 a0 r2 ?
  372.   LPUPDATEFILE file1,file2;
    ' P2 N; w2 J' X) E
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;0 d5 K0 u% d/ T! A
  374.   std::list<CString>::iterator l;, r9 [8 y. w+ C4 p' e
  375. 1 r! k0 a3 L: N: ~: V) u
  376.   UpdateLocal.clear();" O' {) S# v6 S7 y/ t2 {
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    . m' E/ s' E& U6 d/ U
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);0 X* }( Y+ z0 w7 Q7 W" h
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : w/ p* M2 s' h. I* d- Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    % C2 V4 F% i9 `/ L
  381.   if(UpdateFile3.size())
    ' o( S& R9 s. V8 C$ \( Z% T
  382.   {, N: |9 `, K/ x9 L6 Y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)3 `6 ?6 D1 v, z" a2 X# c9 v
  384.     {: t6 ?# ~! y- q& p
  385.       file2=(LPUPDATEFILE)(*i).second;" u. a  O( S4 _0 E' A; ~& Q2 ]  [7 \
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 F/ j" p& L3 V$ q9 e( h
  387.       {
    4 e  y4 |, y5 M
  388.         file1=(LPUPDATEFILE)(*p).second;5 o; b% i/ ]4 S+ }/ J* |
  389.         file1->vers=file2->vers;6 P! b& d0 m! m; N) J! y
  390.       }# `5 p( y4 \, J" h* g* M' d6 Q
  391.       else
    : W3 r7 p3 G* H. @% u! g8 u) P
  392.       {
    ( I7 B, X7 s; @8 h9 E4 F
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 S/ F9 ~* ?  Y- }
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));$ @+ ^- K2 ]$ L8 u& }8 v0 b' p
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));' L  t, ]; R; W5 a
  396.       }$ w/ O2 r9 b: H" o' J
  397.     }  }! H# G6 [+ g
  398.   }
    4 p: K2 \) |; Y* }0 X: J1 ^. C
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * l( q% Y* i: W1 C$ `2 }2 O5 r
  400.   {
    0 v$ c! z8 |. R
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( U/ r* Q3 F: c$ Z  \; H
  402.     {/ ~" S8 p+ V1 O# s; {
  403.       file2=(LPUPDATEFILE)(*i).second;/ I0 j# M- i, V4 \  k( c6 D
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 v1 k( u9 P4 @/ f) S
  405.       {
    4 b! V. w( ~, u' k9 R
  406.         file1=(LPUPDATEFILE)(*p).second;
    * w6 [/ z1 l& ]  C& P2 ?# s+ D
  407.         if(file1->vers!=file2->vers)
    9 \$ b; V* s+ U$ A3 G/ }9 a
  408.         {
    . E5 A% y$ ]& \' D4 w* j
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 w2 u" a' z6 \% b) Q% t) F
  410.           c++;
    . z; S' y+ e3 M1 A0 y0 z9 q  x0 e
  411.         }; W4 c7 h7 r$ I7 ], E  X
  412.       }$ O. P& w. N6 m" q! O7 J
  413.       else. V9 s) X3 j! H& t9 w
  414.       {
    + N5 F( H8 E% `% C
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ; `# o4 c) x) e4 u
  416.         c++;6 l. B. s0 e$ C2 G- w
  417.       }
    # l2 o1 {  Z: _* r# Q% O. g3 {
  418.     }& x; M8 P0 F6 |0 \/ N
  419.   }( P+ J4 c3 ~  b3 S2 H9 u
  420.   unlink(".\\DownLoad\\update.txt");
    5 i; W* `3 I7 o7 [2 C4 m5 E
  421.   if(UpdateLocal.size()) return TRUE;8 H/ m6 I: G. N/ y$ Z
  422.   else                   return FALSE;
    7 U, s' J# v' c2 w) s2 Y0 u
  423. }6 A) Y& Z0 b# _7 k' J
  424. + O8 w+ z' M' v( U6 ^% L. d
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    - [! q. i( t% Q  G- \
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"1 B1 n0 t3 j4 ^

  427. ! d! p* i# ~: L; _* K
  428. 7 `4 Q* g% Y  |
  429. + O+ R6 ?6 ]6 `3 |6 |
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)% c$ G, Z6 T+ ^1 e  x3 [
  431. {
    1 l  @: Y: j& W" _. ?& b) ]
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;1 \) s9 q5 ?& m/ n
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 S7 S+ l& A9 Z7 {* j; ]
  434.   {. ?- t2 S0 N8 k% l9 P" Y8 \
  435.     char szLanguage[50];
    0 d4 v) N" k) d9 O
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( j2 v' T) B+ {  ?2 v9 d
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 P& g& F* L0 Z- p
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % r4 ~& H0 U' T/ I8 _" f
  439.     else                                   m_iLanguage=ENGLISH;
      Q# [% }& Q  {/ o: F
  440.     char szRegister[100];( d1 S$ y6 r4 F9 y' }. k/ E; P4 i* K
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 ?2 @5 ?7 \: {, N
  442.     strRegsName=szRegister;, U# H) h- i8 E2 U
  443.     char szPatchURL[100];
    " _- R, d3 E  ?! ~
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 Z! @% n" h6 f) u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + Y6 U. c6 c1 z+ ~: h- `" s5 e( |
  446.   }2 r; F; x4 z9 d. o0 q0 s2 b, E+ h
  447.   else, [  V7 Z0 J, a+ @/ s
  448.   {
    1 P. [$ @& ~# [6 u  g
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' y5 L3 N2 E# }# t
  450.     strRegsName=DEFAULT_REG_URL;
    ; Z& B3 w3 s+ C9 M
  451.   }; o" s% \8 X1 i8 F* h8 X
  452.   if(GetFileAttributes("hosts.ini")!=-1)* q$ T! g. g1 d. W
  453.   {$ R2 C# t) P- W9 V) |
  454.     char szIP[50];# {6 t: [/ Q4 W( a0 p" ~2 s
  455.     char szDIR[300];
    ' Y) Q/ X& `: b) f. Q
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    $ i. U  _, ]0 @9 R  D) W
  457.     {( ^' {3 ]0 E7 P4 |1 K' g2 ^* F2 |' a# V  h
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ) f3 Z% z8 ], O; O0 |0 ~
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ! ~+ j: a6 `7 P- A1 o" F( |. ]6 J
  460.       strHostName=szIP;
    ) `; p8 e' z) `/ _8 l/ \/ J5 q! d
  461.       strHostPath.Format("/%s",szDIR);; u$ J/ x- F- a+ |
  462.     }
    0 s1 O9 s: _: g3 M; V. ^
  463.     else
    ; s: T- H6 q7 ^, a# A* {4 J
  464.     {) A! t  s) @, C6 t& i' M: }$ I
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 g5 ^! E9 t9 P: U$ |3 f2 C* [# k
  466.       {) A+ h  V' P7 _( w) Y2 M
  467.         char szLanguage[50];
    ! n! l  c: l% f* H1 j
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; l1 U/ o$ N6 L) Q/ H: B! f
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    1 }  P7 ^3 x; R
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ B, W* W* y/ m& ~7 m
  471.         else                                   m_iLanguage=ENGLISH;
    7 d# A3 i7 P4 J
  472.         char szRegister[100];
    . T8 x* h6 J5 k/ U
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 f, c, Z, P0 A# ?, E; \
  474.         strRegsName=szRegister;+ Q' G1 u; R. ^% N; D
  475.         char szPatchURL[100];
    ! ^- \7 [& n+ K4 g' S" x+ N* P7 V
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 q+ _; v( a. V: y/ P- @
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) W: U7 {$ n$ {* ?# W! j1 E9 M  \
  478.       }
    % Z- `7 y5 I9 H' A9 s, Q
  479.       else, q8 y0 h! l. U1 k, I
  480.       {. Q! d: R0 I& s2 D/ u
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 t8 g' t2 f/ t8 K: @
  482.         strRegsName=DEFAULT_REG_URL;- k& Q. {+ ~8 A6 o
  483.       }! s) f0 j* z7 v: L4 I( U
  484.     }
    3 _* l' v% j0 s1 o9 L5 `
  485.   }: V" G* s& ]5 C) T4 |% z- a3 z
  486.   return true;
    ! s0 g9 g) V. o, H: k3 w
  487. }) \6 h1 X- ?7 J3 V7 T7 Q$ e' B
  488. ; h1 F& z8 F: I6 I; L) D3 P* x
  489. #include ".\ZLib\unzip.h"2 H% r+ @0 k; [- C7 k. z
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 J* H3 y. P9 O; i- ?9 M  n9 Y
  491. /////////////////////////////////////////////////////////////////////////////
    & N, O) y  _; R; [- }" d( I+ e
  492. // CRevAppApp initialization6 W; }% L  L1 F$ z0 I
  493. 8 D! ^, v" u: Y
  494. BOOL CRevAppApp::InitInstance()
      U1 b$ X& V' }. X9 g$ e2 P* W- k
  495. {' ^6 O6 {: V6 G3 c8 H5 }
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];/ N, n$ {9 h. [4 Y
  497. 6 e; j" i6 t, J! q4 H: Z. j/ b8 W
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);& b% J: r; L& Z( @, p. x' Y6 a& E) M5 w
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    8 C! S- m8 |# Y7 s& z  ~
  500.   {
    5 f. q8 d9 Q7 r4 ^9 G
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");6 n- u% \% _. L( j5 T
  502.     GetPathFromFullPath(szPathTarget,szPathSource);$ H5 ?. x% K8 i* m9 u( V/ w# b5 p
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))), a. v: v; [" }  h7 ?6 F- I% v! M
  504.     {
    ( H& T+ z: X: Q# J, F  l8 @
  505.       strcpy(szPath,szPathTarget);3 Z0 S+ }3 z# `9 y! r
  506.       SetCurrentDirectory(szPath);! H7 W; R: [  o" o6 K
  507.     }
    8 S: N2 n. p* H- C+ F* Y% g4 X4 t! }
  508.   }% t) d0 y- i- l' E% x6 X
  509. #ifdef _DEBUG
    5 p6 t6 m. F% T: r
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% Y: ~- I% ^& |9 f1 _4 Y
  511. #else- k9 B4 G* q6 _6 T
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 P  r; d( \  f0 B6 e7 \0 [9 f
  513. #endif
    5 r* L4 J+ _" T8 a8 m( v) t
  514.   {
    . }$ n0 Z$ j# P7 m% V' P' X
  515.     char tempFileName[MAX_PATH];
    + J; T4 a# E% ?& R% u* i9 M9 T
  516.     strcpy(tempFileName,szPathSource);, D9 z$ ?$ p; M1 O+ g
  517.     tempFileName[strlen(szPathSource)-12]=0;
    5 Z2 Q  V! d' \, @. ~% M
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    6 l3 v9 g& x4 p- X  g
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    : F# j2 K% B( b. v+ O
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);3 z/ b! \2 w. n" B! C
  521.     return TRUE;: b+ D/ A& \8 P- R, ]: v+ }
  522.   }/ H' X) g" i# f. [" _. K; T
  523.   // Nuke 0118: Delete run.exe& \' ^1 G/ T$ ]2 d, e1 H
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
      x5 g: W9 ?# `3 a9 q% m* V
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    0 i& D5 a0 q7 G  L
  526.   if(!ReadCfgFile("Config.ini"))3 z! A+ r5 G! `" V$ r$ t/ I6 }
  527.   {' o. x+ z5 `. C
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);. Q, x7 u6 W& D: e# D4 v- \7 f
  529.     return TRUE;7 R" ^" l/ T" D3 `1 q+ n4 I! I
  530.   }8 d% d6 c+ U0 m' b7 |  W
  531.   HANDLE mutex;* j8 R5 y/ M* d5 s( y
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))* q0 c& D+ X0 }( S3 a
  533.   {$ H. h3 ^# J* [
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    4 ~6 V) x: c2 k) P1 h" b% s
  535.     {0 q- w6 |( F4 K1 I$ J# ^8 T
  536.       CloseHandle(mutex);
    3 R1 v" Z, I: _+ v
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);, a/ Q) G( t2 X7 u8 l7 o) K
  538.       return TRUE;% A5 h$ s# s% R3 k% Q* q# f- f
  539.     }% @  C9 T6 |1 L! }
  540.   }  
    ) [4 U" Q4 G4 s; R6 }: b
  541.   CloseHandle(mutex);
    5 U  u7 s& E$ g) x

  542. ) k' u$ f2 I1 i$ K. g
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);( p" Q/ q: t4 }1 q
  544. ' a  H3 e* a3 K
  545.         AfxEnableControlContainer();# p- ?/ ~% d1 o& o! V

  546. ' o3 [+ o! r# Z4 p. h
  547.   bCanUpdate=FALSE;
    4 R1 |7 V8 `: w/ R7 t& l
  548.   dwStartUpSteps=1;- D8 f+ A1 t8 r+ K: K
  549.   dwProgramState=AP_NOTHING;
    9 x% m5 @/ e/ S% r3 U9 ?. f. y

  550. : q& N+ c+ p1 @$ a( C, D9 H# Y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    " W8 e3 w0 J4 x0 f2 Z
  552. # T( V+ `- h! A" F+ L. b
  553.         // Standard initialization
    * h  ~  @5 H9 c8 F9 `! l, a) l: V
  554.         // If you are not using these features and wish to reduce the size' o/ v  j5 d/ Y! b: r* K
  555.         //  of your final executable, you should remove from the following
    - l: g0 }% N0 F
  556.         //  the specific initialization routines you do not need.
    / ?. {9 k. S0 M1 ~9 I  n
  557. ' \' f4 Z7 @! ]: P2 g
  558. #ifdef _AFXDLL9 H  y% u2 O& ^) m4 y0 x1 Y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    $ ~' t3 d5 @' ^
  560. #else. J' Q% m2 i% C7 }% _- J- w5 H
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    $ T% ?% k. ]; G! r; Z) ~  g# _
  562. #endif
    % b9 u- w% z- \0 S

  563. ( L4 D2 p; ]& v: {5 }
  564.   dlg=new CRevAppDlg;
    " k/ _& l7 d) C: R( b5 r
  565.   dlg->Create(IDD_REVAPP_DIALOG);/ J' ^- d: i' G7 ^
  566.   dlg->ShowWindow(SW_SHOWNORMAL);. u1 B% B, x* r% n0 f
  567.   m_pMainWnd=dlg;
    " n) Y" U$ s1 z

  568.   H  Z& j9 t$ ^- H& T
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    4 t- M- C$ E* b4 ?8 J

  570. ( v5 `1 m) y  j
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( A/ e8 b- l% ]
  572. //  ULONG_PTR gdiplusToken;+ D; t9 p, r2 W. c+ R
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    % w" w( F! J; ?/ @; O

  574. . [; ~9 V) [; X) B. S# ~& m2 Z
  575. //        CRevAppDlg dlg;
    - [8 @5 V0 M: R( Z
  576. //        int nResponse = dlg.DoModal();
    " i$ `! q3 e* l' Y6 i
  577. //        if (nResponse == IDOK)
    8 K5 S4 t, u/ D! u8 L/ o: I
  578. //        {& t: P$ {2 U( c: k  p7 l
  579. //                // TODO: Place code here to handle when the dialog is
    5 @  e$ `& D4 ]4 W: `! `
  580. //                //  dismissed with OK6 C; E7 @2 M, _: {
  581. //        }
    ' ?# L/ e4 p0 ]+ n& e9 q
  582. //        else if (nResponse == IDCANCEL)
    2 z3 g) \+ @" r. j1 t, I6 [! z9 h
  583. //        {8 F. u% L. E- S! x" y2 _. V! o
  584. //                // TODO: Place code here to handle when the dialog is  Z" g, z; C3 |9 g  m+ B
  585. //                //  dismissed with Cancel
    ' J# o( o  i  ~  J( X* X
  586. //        }. H# E. v; r5 e! z
  587. 4 k% i; s3 j" H6 W( h7 V: z4 t
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    9 _& x/ m0 _9 e/ w
  589.         //  application, rather than start the application's message pump.
    8 \6 I% v' D" t# v2 {/ g8 b4 Y' g
  590.         return TRUE;
    3 x% ~- I+ k9 n  |- |( f
  591. }. M7 j/ O( r1 s+ \( K
  592. ( _; U, t- e# s3 J% l8 y8 r
  593. char *CRevAppApp::strtok3(char *pSource,char *token)! l0 n" T) u  b1 P
  594. {% R6 Q* ~& ?/ P( L
  595.   int i;
    + c2 n# l" t) _" o( b
  596.   char *szRet;
    ) ~4 n; S& D4 @/ {# h
  597. 0 |( G5 L; B' b+ j- g: ^8 ^
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " w2 a6 U0 v$ e6 W
  599.   if(sztoken): A; W) J* |( s8 L  E
  600.   {% F3 \' a* q5 p5 @
  601.     szRet=&sztoken[itoken];
    5 P6 \! n( B& x% a, T7 @) b
  602.     while(sztoken[itoken])# q7 L$ K- a: d: P5 G, t
  603.     {, U# n2 _, Q, z- }# q8 F1 _
  604.       for(i=0;i<(int)strlen(token);i++)
    + S# y( T; ^" x. ?4 {8 P7 B8 u
  605.       {
    ( |* ?* [- v2 P/ q* s- {2 a: J4 B
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 U4 M- L' T# F' g5 ?: _
  607.         {( J# R1 z  e! e; q
  608.           sztoken[itoken++]=0;! K7 X3 x% w# Z& D9 A
  609.           sztoken[itoken++]=0;! \$ C$ S+ Q& k# z
  610.           return szRet;
    : j/ O2 V& B" `
  611.         }5 j9 h$ c4 |) s! d; m4 w% F8 }& n
  612.       }
    - p% `+ R+ f) w, @9 q; |
  613.       itoken++;
    # E1 U- u" o# p1 e
  614.     }; u8 B% q0 n2 v: y( h2 Y8 C8 a  f+ ?) H
  615.   }2 v) T8 F: ~. m) }# I8 O8 b
  616.   return NULL;6 P0 u  ~: v7 d7 q/ \
  617. }, B# s1 s. o" N& U

  618. - r" @4 T$ F7 C0 M1 ~
  619. void ProcessProc(long Total,long Current)& i, Y! o. K# E; y& B6 ~9 W
  620. {5 o1 v! Q- `# O( P, T: O  _
  621.         MSG msg;
    + V; Z! F7 o- w  _  B$ g
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);0 T6 n" v7 a' i! Z8 G  D% i
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));1 R6 M% n, b/ s& N! y* \' k+ \
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    % b9 O9 N8 q5 X7 l
  625.         {1 x' M( Q- E3 u9 _& i5 Y
  626.                 if(!GetMessage(&msg,NULL,0,0))4 {: C- x% ?! w! V& z+ @$ P, M
  627.                 {. n( O: @; a- D- J
  628.                         return;- [1 M1 @4 f: r, Q
  629.                 }
    5 I, u2 H8 I3 V1 {5 h% B
  630.                 TranslateMessage(&msg);" x6 S; l1 n& Q) w
  631.                 DispatchMessage(&msg);2 w- l  i6 W' M9 L% |& p" c
  632.         }       
    * H) }' y9 k( {
  633. }
    * R9 Z2 L7 u! j) a

  634. / L* F7 X5 e- L# C% E2 A
  635. BOOL bFirstChar=TRUE;
    - G! a( m  }+ p5 c
  636. ( I* q* r$ L2 b* b; }
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    9 `/ G3 S1 Z5 s
  638. {
    ' z0 C9 j4 y8 ?6 R7 q1 G1 U8 O) K
  639.         // TODO: Add your specialized code here and/or call the base class
    8 g; s0 V! f8 e
  640.   switch(dwProgramState)
    # v/ \+ M, u, O8 v3 \
  641.   {: q. ^3 [2 f4 [- g: }
  642.   case AP_NOTHING:
    3 h2 Q6 n0 q/ i6 G% V/ V& b
  643.     switch(dwStartUpSteps)
    : [3 p2 V' A. R9 ^+ v+ E
  644.     {
    * M, `' i% n* g5 r; j# Y: g0 r# `
  645.     case 1:$ K# F- f! i! D; @* A
  646.       {+ q8 J2 E3 }) Z& E2 h+ g  V) U
  647.         int i;% B( K6 X) L# K+ u5 k& f5 k
  648.         CDC *pCDC=dlg->GetDC();
    ; z: P0 \' \& ]) j+ u' B- c
  649.         HDC hdcwnd=pCDC->m_hDC;2 k$ P0 f/ a7 e- j6 W+ r1 W+ o: u. O
  650. //        Graphics graphics(hdcwnd);
    ' ^3 a  ?+ W3 a/ i, ?
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    , L& c4 \( Y! }' V
  652. //        INT iWidth=bitmap.GetWidth();
    + ?6 I7 U7 v: g5 Z+ \6 V
  653. //        INT iHeight=bitmap.GetHeight();
    5 N. g8 |0 o7 l% B: j3 B9 t
  654. //        Color color,colorTemp;/ D9 i: R4 H5 |7 _( s. c# @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)1 x& o, Y1 L6 {/ {  |; G
  656. //        {
    0 B; U2 ?8 I0 o. t% h1 e/ q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
      g2 A2 e$ ]! M6 U# G6 C
  658. //          {, p( M7 ]! t- F1 D6 y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);- c; r; G& I* g  Y0 A( w1 I
  660. //            colorTemp.SetValue(color.MakeARGB(3 w9 N+ f- C2 O8 a8 B4 I4 m
  661. //              (BYTE)(255*iColumn/iWidth),8 E) \8 B6 q: m6 F
  662. //              color.GetRed(),/ M( [$ S/ x; ]5 ?  S# |8 c
  663. //              color.GetGreen(),
    # t* }; q8 h2 r9 J7 B8 p' J8 P
  664. //              color.GetBlue()));
    5 b3 `# K8 s' N0 W% v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    / K, i7 g0 i, m( s3 r" c0 X
  666. //          }
    & G) g1 e- T/ }! E/ y# O
  667. //        }
    & }" f( \# _8 v5 `9 `
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # d& U" Z" u: w& O3 B6 s1 U
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ t) `+ n9 f' v, i
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    + h' i# l- z: ^8 ]" _
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 h0 N" B( T+ w, e2 g8 R" {
  672.         for(i=0;i<240;i+=8)5 c: ?/ T, r' c2 b, f/ _. X5 x$ q
  673.         {
    " ^/ }4 P1 ^) n5 g
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 F) G6 p1 E4 x% K0 X
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* n; Z, v! d% W$ d
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % p) k3 z) U! c( r& P
  677.           Sleep(33);
    9 q+ ?: P0 }- E. ~/ O2 ?* _
  678.         }) I3 s. |" x2 _7 B% ]
  679.         Sleep(1000);  ~: l7 |& H7 n) q5 a
  680.         for(i=240;i>0;i-=8)7 }# w8 D; M0 }' m  u2 ^1 a8 Z9 U
  681.         {7 Q) F9 C" `# O3 }
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);3 o7 u+ X( J8 @+ N7 F
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 }& c7 D% C9 G; J1 M3 W3 r
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) _! d9 U) e/ C7 z9 c+ }3 d
  685.           Sleep(33);" C2 a' P. ?& N" |9 J- C- ?
  686.         }
    6 ~0 G! Z. X9 L1 m- [+ ~9 m
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);( l) X+ Z0 a/ G3 h* a* L7 k
  688.         dlg->ReleaseDC(pCDC);- u8 {# X- K- {& l9 s
  689.         DeleteDC(hdctar);
    5 S! M" V8 p6 d
  690.         DeleteDC(hdcsrc);5 q7 }8 ~" I. A; I0 N6 A
  691.         DeleteDC(hdcorg);; R2 t  g3 e# k
  692.       }
    ; b8 D' g. l- u. n0 R7 A
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    2 X0 K- `7 R' j( b8 V& @
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");. j) i  a, N8 f# q) e, I& _6 j9 u
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ) Z( K$ h+ E& [) X3 I
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");6 ?$ z0 S  J. u0 E
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 o8 h! G% f, W6 @, Q
  698.       if(!Dn.Connected())! F' w5 f! `# ~: Z
  699.       {' }6 E2 t  o  w  g4 e
  700.         dwTotalFiles=1;
    0 U5 ?+ f. B% d. }
  701.         dwDownLoaded=0;
    4 Z; n5 N! O) O/ z) |0 p
  702.         bSilentStep=TRUE;
    ) e% E  ^' l2 L/ Z, H; k  }/ S* F
  703.         bCompressed=FALSE;$ U+ ~8 a3 C( Y  c
  704.         strExtLocal.Empty();, j$ \% S2 i2 Z5 O
  705.         strFullName="readme.txt";* w; o& S$ t0 G# g8 j4 a6 g) f- Q" j9 l
  706.         dwProgramState=AP_CONNECT;# y8 D+ g7 R4 n' C
  707.       }
    6 E; f: E; k% P$ Z
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 V. l4 R7 H; L
  709.       dwStartUpSteps=2;
    # F: R6 l4 u, c, I: @8 I
  710.       break;
    3 R$ e4 E6 F% i+ @1 ]5 {8 U  d. n6 y
  711.     case 2:
    ! E3 R& y8 y2 k& f9 w9 W
  712.       {3 f+ k  [' n6 Z/ G
  713.         int iEOF;
    7 ?6 D$ y1 o5 F) `
  714.         FILE *fp;" Q* V- b0 l. |2 o+ V  Z
  715.         char szString[512];
    1 u3 J) }0 C% I" D1 M
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");( c; C# @: M& X% `4 I
  717.         if(fp)
    / S# e3 N; V/ l- x/ S# W
  718.         {3 d' |1 V9 ]/ c: o- r
  719.           do
    0 x( Y3 C* e. k4 d$ ^/ |8 J: J
  720.           {
    " M( F3 e3 R1 |' y& K
  721.             iEOF=fscanf(fp,"%s",szString);
    5 L& z$ I6 L  R( d* N9 t1 I/ p
  722.             if(strlen(szString))) z9 R( `) {9 u9 }: T2 U
  723.             {) R0 \6 i% v& Z3 e: M: o) Z
  724.               if(bFirstChar)' S5 t5 \' u' I/ S/ E8 v% y
  725.               {
    5 O" {3 k" l; Z+ J( x
  726.                 bFirstChar=FALSE;! _! ]; Y& J  N6 h8 ]
  727.                 bConnectIsBig5=FALSE;5 T% \) P/ a3 p: E; {1 |4 B0 w% M+ e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    6 W+ m2 r8 ?  E# X) o8 P/ {
  729.               }& W$ v" J& G' ^; Y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));7 C8 d' f; S/ |* ^
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    8 e# r9 ~  k% _/ D* `
  732.               dlg->m_ListText.AddString(szString);
    * c: P2 E5 o0 V% J0 D
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 ]* M: f- F/ H' ~
  734.               *szString=0;
    1 m, y9 O! Z, S0 a3 [# ~
  735.             }
    7 l, N: [  S6 q) g
  736.           } while(iEOF!=EOF);
    ) ?: x" X" d, Y7 F
  737.           fclose(fp);
    3 i' ^' n1 O, R6 Z
  738.           unlink(".\\DownLoad\\readme.txt");; ]5 }7 x+ _6 b1 @$ R6 J& E
  739.           dwStartUpSteps=3;- H. C  j, o4 c) W! e& Q$ Y. J3 L+ V
  740.         }6 V$ z$ t* G( J- V- \. ]; I9 u6 ?
  741.       }% y4 l/ G+ o6 E
  742.       break;
    + y! n) f7 O3 a  |1 e5 q
  743.     case 3:. Q' a6 f$ q0 w: P+ C* K% Y- f* g
  744.       if(!Dn.Connected())
    - h/ r9 L! `2 [$ r- r
  745.       {4 q) v  e1 Z' [1 ?* E
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);8 K! ~8 ?! \; t% P% _4 |6 }
  747.         dwTotalFiles=1;
    8 `# |0 Q& h) e" l& n0 e
  748.         dwDownLoaded=0;
    ! Q: q$ _) q; g2 b6 K& ~! Y
  749.         bSilentStep=TRUE;+ L+ ~; E$ e$ l, I' b
  750.         bCompressed=FALSE;
    2 W2 \! M1 D) H' g6 ]/ g; g" @& t
  751.         strExtLocal.Empty();3 q6 ?& X, g1 M
  752.         strFullName="checkversion.txt";  z# E' t( Q* Q' q; g8 z
  753.         dwProgramState=AP_CONNECT;
    ' G9 a% ], v; |7 @8 E
  754.       }
    * i" c6 d% G1 e% K. h
  755.       dwStartUpSteps=4;2 `3 P/ |1 o3 @- o9 p5 x+ s9 Z
  756.       break;+ Z1 K2 T5 k* `7 O/ p0 f
  757.     case 4:# |9 {+ O6 t# P! a2 f/ G" T: r
  758.       {& q% _3 l  O2 R0 F! q
  759.         FILE *fp;$ A5 \$ }! G0 L8 O: {" `+ ^
  760.         char szString1[128];
    ; L: {& S% o: k# u- \
  761.         char szString2[128];
    % |& ^( x, f% r. C9 u( n% `4 }; t
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( g. y9 ]) l, R, f6 n! x6 {. v
  763.         if(fp)# j5 m) ]3 m( |2 ]- k  P
  764.         {6 Q: U6 }' |  e4 W. z; P0 d
  765.           fscanf(fp,"%s",szString1);8 s* B2 V% S+ Q7 n5 l8 E, z' |0 K
  766.           fclose(fp);; z8 {0 B9 t' y& y9 Z6 O" Z
  767.           fCheckVersion=atof(szString1);' D" M+ h' F+ K; I" k( g  S+ {" }
  768.           fp=fopen(".\\checkversion.dat","r");
    ' @! Z- h6 C5 {  Y7 G
  769.           if(fp)+ R4 P  K7 f' v0 L
  770.           {
    1 V$ V8 m- g9 V5 T- l7 k
  771.             fscanf(fp,"%s",szString2);
    2 V! _: H) j  z) t6 e* ?
  772.             fclose(fp);
    . R* r, y. C  A5 X& ?
  773.             if(atof(szString1)!=atof(szString2)); J6 z1 R% q  `. L- |
  774.             {; D. m% _/ Q7 ]! j
  775.               if(!Dn.Connected())* ], l+ \1 @2 W: y9 N  t! z8 s1 Y  E
  776.               {
    $ J2 C$ C2 f# G0 C
  777.                 bFirstUpdate=TRUE;
    ' n: V. j3 m; M7 W% p
  778.                 dwTotalFiles=1;
    # Q$ Y3 L8 }1 `: S# l* Z
  779.                 dwDownLoaded=0;! J1 u8 I* E: ]/ D
  780.                 bSilentStep=FALSE;
    & J" z. u$ L% D4 l1 ?3 `
  781.                 bCompressed=TRUE;6 u! d' I  ^( z  I/ Q$ _
  782.                 strExtLocal=".\\DownLoad\";
    + |# K9 ^, K& ?- l
  783.                 strFullName="update.txt";0 U. b0 n7 Y8 `
  784.                 dwProgramState=AP_CONNECT;. I) K. t) E% ~; O
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" e# o$ ]( N1 ^3 T$ e& T
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - I# W% A) w  q2 z2 U) @8 f
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");' k: e7 r# K; q0 m. n

  788. ! J% @# R; M4 N! E5 Y1 Z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ d+ \+ j# t) j: e! [* T% }% c
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    : D. I" h  N- B5 T+ ?
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)2 J+ W3 E: P& B8 e
  792.                 {
    * m! r( l. t6 C" k& y" y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    6 D4 o) Z; \* Y$ h
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");2 ~2 Z5 _/ V+ I4 \4 U4 ~0 Y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    9 f# ]+ P; m$ A: v5 N- `- b3 z8 w
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 j+ J+ ?( {6 P" R! E0 Y
  797. + y8 J; V3 l& t3 a3 p# s! o
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 N& J* M% {+ S
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & [2 @' s; j8 R4 |" |4 C$ A# T
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");1 h: k( y- j7 _# Z' i
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 o; j- U/ K/ A! k! A
  802.                 }% e5 x* L4 W, y' ?+ S
  803.                 dwStartUpSteps=5;& q( Q5 o- I1 i; z+ o
  804.               }
    5 v% ~+ r4 t6 A, ?9 V
  805.             }: r3 y( B5 f8 W# a# R% ~5 K
  806.             else. n: X. Q- j* V' i
  807.             {
    4 q$ z$ a4 F& I. M& E3 g4 q
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ; ?) x; i/ M/ ]
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + p, X" b' U: M  M# E8 Y  N
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 A0 c; W' m/ {' a
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" D& B6 ?8 N* \" D. ]; U8 Z- I

  812. ! c. y' k6 h0 ^3 [; W" L- X  s6 W
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % k/ l  P1 k2 O7 g" V7 r- S3 l
  814.               dwStartUpSteps=99;
    3 t% q0 {" b7 d. [/ y! O' B
  815.               bFinishUpdated=TRUE;
    , z+ h/ W; \2 ]4 ^
  816.               bCanUpdate=TRUE;
    & G1 c) W0 W  v5 @: b- F2 J
  817.             }
    + s- b! ]- N5 J" H& D
  818.           }3 e0 s# C/ D% `
  819.           else$ _, D4 Z: N5 k- k8 T+ F7 v; b0 [
  820.           {
    % }) Y! K8 w1 `4 e9 E& {* n# l
  821.             if(!Dn.Connected())
    7 s  \$ x7 Y$ C9 R( E  N# h
  822.             {
    , c% z& L9 a9 S6 F
  823.               bFirstUpdate=TRUE;" P4 h4 L" Q0 U, U" x) x3 X7 X* _! C
  824.               dwTotalFiles=1;. p. H  u$ V4 X9 f' d! L- `0 L
  825.               dwDownLoaded=0;0 T+ I" @8 Y7 H6 z* a9 @" j
  826.               bSilentStep=FALSE;
    ) F3 p; z; P9 x8 p+ ]% X8 p/ v
  827.               bCompressed=TRUE;% H& ^3 y1 p, C" k; Q/ ?) R
  828.               strExtLocal=".\\DownLoad\";& [$ ]* T+ }* u3 _' ^" C
  829.               strFullName="update.txt";
    2 l# F/ s9 i; p
  830.               dwProgramState=AP_CONNECT;
    + R4 x& h* a- A3 b; z: `
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- b+ t1 h$ l7 A, r6 E% m
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 I2 d# p5 q0 a! M9 Z# @" |$ ^
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 Q) B# i: u9 f, g" R" V# r; }  L
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' e9 ]+ \$ Y. i- i
  835.               unlink(".\\DownLoad\\checkversion.txt");
    6 d* L8 P# B7 y: d; B
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)' U6 ?  ~8 c+ V6 l9 a
  837.               {
    1 F6 k. {5 r! ?" K( q' G/ [/ [
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");1 J. Y& Q$ T' `6 V* V; N
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");/ W% o% N/ A% Y6 P- C: f
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    4 r. _) |3 W/ x9 g
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 o. j9 i' N3 G5 q- ?  B  B
  842.                 6 {3 Y: y) L; O$ D6 c, Q
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! @7 G9 q% z) {7 L9 g
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" i" T1 i8 {9 b7 E
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");' O0 s4 a/ Y# u6 M3 X
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ ?! Z/ l- `, d& b  V6 a
  847.               }. {3 W+ i8 ~1 w* S. ?. i
  848.               dwStartUpSteps=5;# L: N9 C9 x; l, p* k
  849.             }
    - e& z4 u6 s6 [2 \9 C! G) G6 y
  850.           }) P6 q- n, s% ?- \- B" S
  851.         }( ~+ h: K( m$ v5 F" X9 j
  852.         else/ M( K$ D6 H- S8 K- {  [& X
  853.         {
    ( R, r9 }; s4 n- @
  854.           dwStartUpSteps=3;
    * A- w& r$ a0 z6 G+ _
  855.         }1 W* P  y" D9 x% ?" Y  x  u
  856.       }
    ( C( t/ L$ W( D, K% U) f- s5 q
  857.       break;
    8 M0 F/ _( ^' b- v5 q% g
  858.     case 5:
    & h9 D8 Q7 d- S$ y! B: P
  859.       {: p$ j9 |" _) _; q) O
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    & G! W2 |$ W% D$ t% J% ^6 D
  861.         {
    2 f# f2 S# F- O0 I; \8 o! G
  862.           int opt_overwrite=1;
    # |6 [8 T1 s& l- o7 x; B  P
  863.           int opt_do_extract_withoutpath=0;' B3 d' a5 z& m8 Z  z) `
  864.           unzFile uf=NULL;, c" B' o/ e0 T1 }' W

  865. & K1 f& P( B( L$ ?& V  e
  866.           uf=unzOpen("Wsa.zip");; T, j0 U$ J) A
  867.           if(uf)
    ; }  E/ u7 z7 s
  868.           {% y( g: G2 {$ b) u) k6 |2 N* L
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);- U. B; X6 Q- {
  870.             unzClose(uf);% W9 B& L0 u. R4 P/ b* w6 ^
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* Q$ P/ v& r5 |
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    . X8 B* P8 j( _) W
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    - ^0 V7 S) t3 T* ^: i# G5 Q9 \" v
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ x" B( a* }, p9 V/ ~' f8 u
  875.           }( }6 V+ A" u# D9 ]$ X8 T& }
  876.           DeleteFile("Wsa.zip" );
    9 A! \- r5 V$ ]4 R0 ^
  877.         }& V% ~. q0 _0 Y- z$ a, O; d

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-13 10:46

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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