CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
) o; y( X- H1 o6 b: C
  1. / RevApp.cpp : Defines the class behaviors for the application.) T# [4 R4 {2 h7 }: w5 ~1 U* k6 _
  2. //
    ' z9 v& j* P0 b7 F' A8 m" b3 Q+ P6 q3 Z

  3. 4 x4 _, w( q8 h# D- F$ y' Z) x
  4. #include "stdafx.h"8 f1 b3 j3 F7 z/ u% N, d" X1 Z! R
  5. / h1 m" U* m# m/ g
  6. //#define UNICODE/ I. t9 K9 j7 {6 B% l
  7. //#include <gdiplus.h>( c! n* v) q2 j3 R
  8. //using namespace Gdiplus;
    , _8 s. d& ^6 t% }# @
  9. + {# @# w. x* s- F% u' F
  10. #include "RevApp.h"$ t/ a4 C( G( k
  11. #include "RevAppDlg.h"$ O& w# g* j2 t4 u* l( H! z

  12. 5 W* S5 j) |+ _* l2 o- g1 f2 l
  13. #pragma warning(disable:4786)
    : o" |# p5 y( s% O
  14. #include <map>
    ! }# n6 \" c2 U" N5 Z4 c
  15. #include <list>* t2 l7 g4 U! c6 W5 `
  16. #include <direct.h>( \! k3 A! ~' z

  17. 7 Q$ U2 F, S2 K+ ^
  18. #ifdef _DEBUG
    0 _  T- k. I" D7 B  w5 s
  19. #define new DEBUG_NEW
    ) x7 p1 l" y6 I
  20. #undef THIS_FILE; i7 T: e, Z8 _2 Q
  21. static char THIS_FILE[] = __FILE__;9 v1 x2 }# j3 r; V  m
  22. #endif
    ; I" k; \. m$ I" u7 x' X
  23. #include "SkinResDef.h"5 ]( Y# D0 t2 e( t; a1 K5 V5 ?0 ~
  24. #include "ChangeBG.h"
    7 a8 U) ]: x, X/ m/ c
  25. #include "AFXINET.H"$ A8 [+ s$ |! q; Y' D7 d

  26. # W3 {7 k; K: Y, @3 @. A: ]
  27. #define TRADITIONAL_CHINESE 0) D% U, X, I1 E5 D, ^; N8 j  e7 U( D
  28. #define SIMPLIFY_CHINESE 1; o  T" J+ Q! M& J( @' f( x
  29. #define ENGLISH 2
    * Y  G3 D6 P+ G: P
  30. int m_iLanguage = ENGLISH;; ^5 _+ h% x$ M8 G/ }: R
  31. /////////////////////////////////////////////////////////////////////////////5 n! \' `, U2 I  V/ [
  32. // CRevAppApp
    8 M. o8 O) M( O( ]0 _+ x

  33. 6 r% H3 W6 m# Q7 I0 h0 ?/ v
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    / @9 z4 c6 e1 o& _0 B
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ( [5 ?  ?# U$ z/ ^* g
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.4 A& R3 B" K" x8 Y% P* v
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    : S  o) q8 Q: S
  38.         //}}AFX_MSG' `6 \4 y6 y( n5 P
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)" t* ]3 y9 Q  n* _/ d
  40. END_MESSAGE_MAP()+ g5 |2 O  ]- o' l4 H2 D1 v3 r. x& h
  41. ) W# f8 y  _3 e  J. {
  42. /////////////////////////////////////////////////////////////////////////////
    9 C6 }' w8 c5 T
  43. // CRevAppApp construction
    + N6 m/ d. v, F& T! d( \  L
  44. 4 A# W5 J( l! i/ ?/ G  m  \  ?
  45. CRevAppApp::CRevAppApp()* J( L& M3 |' [
  46. {
    " a" r& W1 q: g5 h7 X5 y" x
  47.         // TODO: add construction code here,
    ; P0 m, M2 N5 ~( o
  48.         // Place all significant initialization in InitInstance
    1 d: A+ u" k6 `0 t
  49.   bDisplayIsBig5=FALSE;
    ( C& a, @' P( Q8 {; J# W# b
  50.   bRestartUpdater=FALSE;5 n3 T' n+ m+ f5 y" m
  51.   bFinishUpdated=FALSE;! u! K9 g0 X( U: \2 i
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;7 g' t1 `5 m2 |# K, F: U
  53.   InitChangeDataBig52GBKS();
    7 y& C) ]+ R0 n" k+ h8 t
  54.   InitChangeDataGBKS2Big5();
    " i' ?6 R% a6 t7 K. |* \8 l: T
  55.         //
    , x# R+ t2 [. n1 m) W  w4 I. ?
  56.         bClickRunExe = FALSE;
    3 E# H) B) A* W9 e2 C/ q5 y/ T
  57.         //( N+ C8 @' j1 {5 Z8 W! W) [
  58. }5 e- T2 L! t' H/ P& p" e- q; B/ n; R

  59. 0 K4 [6 [8 C3 _1 I$ c
  60. CRevAppApp::~CRevAppApp()
    ; }% ^) \) X* b! e9 ~( s6 ?! I
  61. {
    + O8 _: o" B1 C7 O9 a
  62.         // TODO: add construction code here,
    4 ]6 _: _% M$ J2 B# |& x, v
  63.         // Place all significant initialization in InitInstance5 k+ p0 P4 @& c; u: J9 d  b
  64.   EndChangeData();
    ( T4 C& `: e- A1 |# @6 R# [$ V
  65. }
    9 k  n! k+ p: e
  66. 1 _% M7 V. x% j! ]5 m$ o: V
  67. /////////////////////////////////////////////////////////////////////////////8 Y% |3 l9 a: z
  68. // The one and only CRevAppApp object
    ! ?9 i+ K6 U3 F
  69. 6 y. T7 n! E7 ]+ z) I
  70. CRevAppApp theApp;( O* ]6 X1 B+ w" e$ [

  71. 2 j. G+ h/ A: p- M
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)/ i5 [) G8 `8 q% A  C
  73. {
    + C- |* P  K8 O; y0 A, j
  74.   int iEOF=0;
      A# M9 ]1 c$ N
  75.   char szTempName[MAX_PATH];
    9 ^6 `3 a& d9 c2 {# P' S9 ?
  76.   *szFileName=0;
    4 @) m5 i/ s2 C2 J5 q6 z1 n# j: ?0 C
  77.   iEOF=fscanf(fp,"%s",szTempName);
    , G8 q; D( M( R
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    - Q; h! l3 W7 o3 s, |) k) u1 R
  79.   {
    ; E( T4 D4 T, S8 a
  80.     strcpy(szFileName,&szTempName[1]);4 e: m  f/ l$ ^9 a" d3 y6 Z, u
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)4 C! f& ?) F$ U3 Z
  82.     {
    ' `+ C( B- ]$ @* Z- Q" C
  83.       iEOF=fscanf(fp,"%s",szTempName);" ~4 s3 u- F5 {2 {6 q! Q% P* R
  84.       strcat(szFileName," ");
    & P( h$ ]9 M. R, k
  85.       strcat(szFileName,szTempName);
    $ Z  |: |. p+ D2 |  h2 w# h
  86.     }
    ( @3 H1 t4 {0 J& c# ]$ K. r
  87.     if(strlen(szFileName)>=1)
    ! o" [, t. |5 T5 R5 u$ ?# [
  88.     {' b4 `# Q8 H% J) R' |* i' f4 F0 H* M4 h
  89.       szFileName[strlen(szFileName)-1]=0;4 o# O5 A) G; N1 P7 i( Y
  90.     }' l% b8 d) ~6 y5 _# G4 ]
  91.   }8 V' G* [! z1 e, e' n' ^6 A
  92.   return szFileName;" e' N. ~7 ?5 ?7 V# w8 Q; d
  93. }: f# }5 K# i$ B5 x

  94. + i' x' s! J" L4 ^6 M! A, x! m& l
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    & H0 W6 d; V- P0 l" G
  96. {3 g* N* P; U( ]
  97.   FILE *fp;$ T, ?; }: z$ u$ S. F
  98.   char *key=NULL;
    ! X) D* }+ {6 h6 G0 z% L, w; U
  99.   char version[MAX_PATH];0 `* |( A( ?9 R+ ]2 P
  100.   LPUPDATEFILE file,olds;
    ; f2 ]8 y. G9 J  A6 p) V3 s2 o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 ^  W% v+ I% U5 W  X  Z2 X3 M# X

  102. & [% X: U  v  S; X4 j2 z# @& x
  103.   UpdateList.clear();
    1 C! B, b/ h+ @, \; n/ r& @
  104.   UpdateFile.clear();
    - o* f; n9 H* ~& L
  105.   if(GetFileAttributes(filename)==-1) return false;
    & k; g7 b. N7 t  g8 s
  106.   if(!(fp=fopen(filename,"r"))) return false;8 X+ c" G$ k. Y; U# K- L; C* m
  107.   fscanf(fp,"%s",version);/ d& N+ [% t% E& R! Q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    " B  ^% j3 p6 u  O& s( B2 H/ u: m2 g% s' N
  109.   while(fscanf(fp,"%s",version)!=EOF)5 J, F, X. j  T+ A
  110.   {
    6 \9 U6 D4 w/ l3 c/ m! \$ l" s6 t
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* \5 c6 a- m- r3 P/ t
  112.     fscanf(fp,"%s",file->path);2 E' k3 e4 R5 {8 s! j+ }: Z8 T
  113.     ReadFileNames(fp,file->file);
    4 ]. N5 j* W4 ]
  114.     strcpy(file->full,".");
    8 g7 y* k/ |3 T5 P
  115.     strcat(file->full,file->path);
    8 ^) Z' R% t. C
  116.     strcat(file->full,file->file);
    6 _0 K1 z  u* i6 Q6 m2 H% F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    # b  J4 c. h/ ^2 u
  118.     {4 }0 n; `( g5 X( K& W7 V
  119.       file->vers=(float)atof(version);( }3 `9 a% E& \0 o: z
  120.       UpdateList.push_back(file->full);! m) s6 r- J( s- a0 |, o- F
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ; E, c  N- a1 s
  122.     }
    9 }9 j5 C% @: D
  123.     else: c3 B2 O- ^( h2 Q  L
  124.     {" e( ^9 D" {% B: F
  125.       olds=(*p).second;0 H; q& n- k8 s6 @
  126.       if(olds->vers<(float)atof(version))
    9 J4 F* k: s9 V! I, v; E: n
  127.       {
    ( z$ w% j1 e( X$ V0 j1 T
  128.         olds->vers=(float)atof(version);
    3 l" j0 A3 P, \1 m8 n( t5 p
  129.       }
    ' ?2 F. h/ U( y
  130.       free(file);2 c+ W' o4 }* v* |
  131.     }
    + h( D' H* I, t2 h
  132.   }
    5 k4 U9 b/ s' f  Q! X. Y/ H. V
  133.   fclose(fp);
    + i+ n: v" S( f# x, s* u. g
  134.   return true;6 x! E1 ?0 N+ M8 h3 l/ a0 Y
  135. }8 B3 ?) t" d* s, P8 p0 o
  136. 8 M" K% v. T( c# w. D2 ~0 Q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    # z- H3 l! O7 m5 [: h) N
  138. {
    1 l. z. Q. t* o$ Q. c5 E, U
  139.   TCHAR  szFull[MAX_PATH];
    5 G, ^& |1 t# z$ ~) k) N* x  x
  140.   TCHAR *token,*inter;* k8 t; S1 o2 O6 }; _
  141.   *szPath=0;# p+ A8 \! }. p/ ?! I0 _/ P' r0 |! j
  142.   strcpy(szFull,szFullPath);
    7 N/ B7 r" a  e* |; b
  143.   token=strtok(szFull,"\\/");, @1 r3 a4 ]2 ^9 k# j  T
  144.   inter=token;
    4 o& _+ L" c4 P/ b/ i% g0 Z4 @, W
  145.   while(token=strtok(NULL,"\\/"))% R0 o: c6 C- L
  146.   {
    4 z8 D# M9 c9 w' V4 C" K' R" j% F
  147.     strcat(szPath,inter);8 K  O& V0 N1 w$ x( Y2 h
  148.     strcat(szPath,"\");- u3 |6 g5 B. ?4 `5 d8 m
  149.     inter=token;
    - C% i) U3 V& K6 S" [$ G
  150.   }8 p4 {% H/ A) i7 F" A) E: E
  151.   return strlen(szPath);; M" u% v' Q8 g! D% `
  152. }9 z) Z3 P  |( Q! T

  153. " Z6 I/ F: v) x3 ]9 L1 b
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    6 p  Z3 k, l8 }+ g+ @
  155. {
      f) d$ M0 P2 L9 ~
  156.   DWORD attrib=GetFileAttributes(Target);7 x2 d) q# I1 l- ?5 g
  157.   if(attrib!=-1)
    ; ]. r6 V9 O! {% v" Y1 k7 F
  158.   {  E# Y: i: t, h( O$ b
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))" p1 T# s2 a  a* f+ r  j
  160.     {
    : y5 p$ w- _- L' E3 i  \" Q
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    " \; H+ z4 F1 }3 |: }& @
  162.       SetFileAttributes(Target,attrib);
    ; h4 q/ G4 @. u
  163.     }
    - @5 o0 I2 l& T. ^% l  G' k
  164.   }
    & w* I- ~: ]$ o7 Q# G4 B
  165.   CopyFile(Source,Target,Erase);
    $ f6 I! A3 D3 [: N
  166. }
    $ G+ F8 ~3 \, d% M1 j1 t

  167. 8 n) p8 B" |; p6 D7 E" R
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)  k4 k% l& t& l  a5 Q9 I. C/ F; N, C
  169. {
    9 D5 \8 W$ d6 y9 R
  170.      FILE *fp;% `, F- s. `1 d: ?0 }
  171.      char  szBuffer[8192];0 N% s# }4 v0 g* ^$ i
  172.   va_list  argptr;
    3 ?* q+ `* o* N9 k) Z$ L& L
  173. ! |/ @0 V: F! [+ x
  174.         va_start(argptr,message);
    + k, s% e% k4 L; i! L
  175.         vsprintf(szBuffer,message,argptr);
    / K6 y2 V$ k2 i3 j, x& P
  176.         va_end(argptr);
    1 r5 M$ I5 y( l. t: b
  177.   fp=fopen(FileName,"a");& ^% _+ A" W/ V& N/ D
  178.   if(fp), R% H& z1 |7 N2 f+ m# {
  179.   {
    : F# `( [4 q6 G& C
  180.     fprintf(fp,szBuffer);
    . b) \9 e" b( S. w( f
  181.     fclose(fp);1 m" N: c! D. t2 \, p/ ~7 }9 Q4 g* ~
  182.           _flushall();
    7 `2 `4 u0 h0 O; X5 l1 E8 r6 y; T( ^  I
  183.   }
    7 {; Z( j# W6 X' ~" j2 j4 R
  184. }
    % L( ?/ q  N, _% ?8 O: q6 E2 u3 k& }* V
  185. ; g. R4 x" E  ?3 \  L; E9 U+ [
  186. BOOL CRevAppApp::Fclearf(char *FileName)2 A9 t+ d6 i  S! R8 F
  187. {  g, {& N8 Y: Z8 H9 B% j- G
  188.      FILE *fp;
    ! U, V. y/ O( Q9 n" X
  189.     DWORD  attrib;
    & }/ V# Y6 \6 E4 H# ]1 c' i
  190.   attrib=GetFileAttributes(FileName);! s0 @% F! D, X  v  P$ k7 l3 k% N
  191.   if(attrib!=-1)
    ; R# k9 F& L3 I" o: F
  192.   {
    2 m" O9 D( L, m" C! U) M6 T
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    : k  p7 F  K' {
  194.     if(!SetFileAttributes(FileName,attrib))6 }' s9 A1 I% g9 i- r. H
  195.     {
    1 a" ~/ L: ]' F3 \* g
  196.       return FALSE;
    + B6 B- Y2 N! g* o# J$ }
  197.     }8 ^: \5 l4 Y3 z4 v5 |
  198.   }
    7 `& Z8 D' ]3 {
  199.   fp=fopen(FileName,"wb");, ]+ [; W1 X6 c' |- W
  200.   if(fp)
    8 R# y8 n" q) p" w: Y4 r6 i5 x
  201.   {. ]) D$ |! o; S. w2 ?
  202.     fclose(fp);
    ! d* y. t% d+ j: ]
  203.   }8 x) H8 y0 {  I3 o' N
  204.   return TRUE;* z* F2 o5 E3 l" g6 G* E$ N
  205. }% _7 n& U2 G4 M" O7 t  r
  206. ' l9 D. [6 W$ @1 A+ X8 h- O
  207. BOOL CRevAppApp::UpdateLocalVersion(void)5 v* j4 F1 a; u* M$ \! ]1 ^# _9 |4 T$ r
  208. {: |+ H7 v- s% ?0 W; x. q9 o
  209.   char filename[MAX_PATH];( E, `4 ?7 x+ P% p6 y" g2 |4 y
  210.   LPUPDATEFILE file,olds;
    % L: C8 K+ z- W; q* }
  211.   std::map<int,CString>::iterator i;
    6 q5 h. d7 E. g7 s; ]0 f& ^/ c
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) H. E$ z. F& @( n
  213.   std::list<CString>::iterator l;( j% G, _7 ^8 l) p  X) b2 T
  214. / e; d4 }* H5 @: K
  215.   if(bFirstUpdate)7 m  m5 @5 j( S7 z$ l) A1 D/ c: Z
  216.   {
    2 U5 S$ p, u- h9 a
  217.     dwCurrFile=0;
    4 A  H7 D: P/ g1 p: v4 z6 h0 n/ S
  218.     bFirstUpdate=FALSE;
    8 V2 h/ ]7 F6 J5 R  |3 ?
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())2 P% |7 j6 L' x3 L( T# q) d
  220.     {! h# w. F& o; B: P
  221.       dwTotalFiles=UpdateLocal.size();- i1 F: k$ Y( F7 i+ o7 t
  222.       dwDownLoaded=0;5 L8 w  c7 B6 t3 w1 Q- y
  223.       bSilentStep=FALSE;
    - j. W5 g  J9 w# F3 O
  224.       bCompressed=TRUE;
    6 r- y3 }: j# ]
  225.       strExtLocal.Empty();' `4 g0 i: |) f+ l3 V
  226.       strFullName=(*i).second;7 x7 M: F; |, l1 V# n& E! a' R
  227.       dwProgramState=AP_CONNECT;
    $ V+ E' G  }8 R0 g, x- _
  228.       return TRUE;& u; F; q- q% k2 K' U) B
  229.     }/ v3 d# b$ E* x: ]- f  n
  230.   }
    % B+ O3 B' g% N* s
  231.   else if(bRestartUpdater==FALSE)1 _6 M9 @* N( y
  232.   {7 G( `* {% V: y. v
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()). S0 D0 E# x  ^6 _% F& Q6 t2 M
  234.     {
    $ k! J8 b4 i, L  n; [' a
  235.       file=(*p).second;: w! R; ?6 g! X, J# ~- |
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())1 h% o% x1 |: W* h8 y
  237.       {
    5 A% s+ n6 `% ^0 k
  238.         olds=(*p).second;5 {5 ]( L  O) P8 U4 I- k0 O/ G, D
  239.         olds->vers=file->vers;, l% p5 _- T0 L+ w1 w, a
  240.       }
    7 {8 l: F, U2 r
  241.       else
    % O1 v1 N$ Z# q0 I0 i
  242.       {% g; @% [6 U! N; [" y9 A
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 p' A# V1 |) _: Y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    0 x& n8 O9 \0 Q- r
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));# M: N6 G/ S  M/ ^+ h/ }
  246.       }0 [9 i6 ^* w' t- [
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ' ~3 d" w, y- O( g3 ^! |6 }
  248.       sprintf(filename,"(%s)",file->file);* n. c; E5 v( r# F) S
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& n6 e; s$ ~' A
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }3 h+ Z4 t6 R0 u
  251.     }0 @( ?! w  {' X  P+ e6 X- J
  252.     dwCurrFile++;9 A; @# v- ^7 P- g; l! m/ Y5 u% T
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 [! l" @# h" n" \
  254.     {
    4 w) B$ ^% j7 e& D, y* \7 `
  255.       bSilentStep=FALSE;# Z! g. N; z/ Z* J$ }7 y, W
  256.       bCompressed=TRUE;
    ! L+ E" q) E! U, _4 ]6 F
  257.       strExtLocal.Empty();
    0 l3 o! A1 O8 u% k4 \
  258.       strFullName=(*i).second;
    3 U4 n+ W0 _5 L% b: M- l5 z. y& a
  259.       dwProgramState=AP_CONNECT;# u; I% {6 n+ Y( m% }
  260.       return TRUE;
    4 e  l, @  {: I/ T
  261.     }: k3 o: M( h- w3 D+ J4 ~
  262.     if(!bRestartUpdater)# T) G' L; a9 Y" Q0 H
  263.     {" h$ J4 [$ J9 Y
  264.       int iCurrSize,iFileSize;
    ( y5 J. W( v, @7 Y
  265.       iCurrSize=0;
    0 m( U' A* _0 @- g" V- \9 c
  266.       iFileSize=UpdateList2.size();
    ; U: {9 h  |. e2 c  t
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    + k9 M* [2 e8 i5 @  P$ Q& B9 e
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");" r* K! `" i! w, A
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! b5 e; m' n; \2 N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 [& B- Z- D1 |( I6 M  f
  271.       Fclearf(".\\update.dat");4 M  C6 ~3 V9 S0 R6 F
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 g: Z2 W  J5 `6 @4 U5 J1 l
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ r: r5 G& O5 K7 T' p
  274.       {
    ; i; ]9 j4 z- z1 R4 ~2 d3 `
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    0 M/ G7 I0 E4 j7 V6 I
  276.         {3 R4 r5 ?4 i; C) \6 E
  277.           file=(*p).second;* r$ X6 [, b: }  d' q
  278.           sprintf(filename,"(%s)",file->file);+ V9 m3 r! [+ @) D
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * Y  S/ B7 ]1 I7 s" n  I+ p( m
  280.           iCurrSize++;
    + ?8 {: B; r* x, E5 J, V
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      E6 p- }  _* x, a! c
  282.         }0 e& @& |( \' ~6 v6 U. H
  283.       }
    9 g, u2 }2 x9 J* Q& X
  284.       unlink(".\\update.txt");
    0 B8 y( G4 D1 \, A- U1 x
  285.       unlink(".\\update.tmp");
    ( w6 {" {4 `5 _2 t5 S. @; p
  286.       Fclearf(".\\checkversion.dat");  c, s/ g/ t( X  o! w% }
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);8 F/ O$ x* x& D7 S! Y
  288.       if(UpdateLocal.size())
    : s! _) B( }+ X5 E: r' ?" o
  289.       {* W! b: s0 w5 c+ o
  290.         UpdateLocal.clear();
    $ _( x2 w! w6 J; C. J
  291.       }
    " Y% o5 u% n- x" B9 a- a8 Q5 I
  292.       if(UpdateFile3.size()): C8 {8 k8 _' m4 n# \) ~
  293.       {. a5 J, Y% g2 z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + L% d* j% s3 t, n
  295.         {
    * C! U  V! J- c8 Q% U( y# W+ L
  296.           file=(*p).second;
    2 g9 ~5 |# K; C* N0 `8 _* E, [
  297.           free(file);
    : U2 v5 X( W+ T8 x7 `
  298.         }) C1 B! A* W/ m  [# W& a* N6 }
  299.         UpdateFile3.clear();( m6 y: |/ Y. U  |  w
  300.         UpdateList3.clear();: f2 k: @" \0 m3 f! @0 J/ k" ]
  301.       }
    % j8 x5 {% V& m  R
  302.       if(UpdateFile2.size())% Y; H3 D5 J7 N. e3 n! O4 o$ e- x$ G
  303.       {0 e; U3 r( n9 E! ]' r. b
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & v9 s- l$ Z4 \/ J+ r
  305.         {
    $ d2 E2 b) u* R# ]: \
  306.           file=(*p).second;: ^* S* |! C2 J: Y, g- h
  307.           free(file);
    ' c- f* y7 }$ |- i
  308.         }. w" a) S6 G' j/ [# [5 a' P5 _/ _; [6 M
  309.         UpdateFile2.clear();. j7 M) N) D! N8 g7 W
  310.         UpdateList2.clear();- m. Q1 j* g) _: k! Z& d* H
  311.       }
    & t1 |9 L/ y1 R+ J% u
  312.       if(UpdateFile1.size())
    ' Q8 U# Y# F2 ?7 @
  313.       {: z7 L9 F: \. T
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- C- P" f4 _! o2 l! e% Q
  315.         {/ B: ?0 A7 p/ ^+ r
  316.           file=(*p).second;
    * E: A9 M; R6 k) \# q3 e6 D7 I  j
  317.           free(file);
    / t% R4 N4 `) _* x' ~; a7 {
  318.         }
    " v4 V0 A8 w: D( x
  319.         UpdateFile1.clear();
    " A# }7 b) x' F0 {6 W/ s0 W' K
  320.         UpdateList1.clear();
    ! n( ?! E$ R7 k. x5 M
  321.       }. h, j3 Q* _( q3 \) M& z- q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    # A$ n! R; ]& U$ R. b
  323.     }
    8 |. v, _; H* D% j, w
  324.   }1 E* ^' R$ Y/ c9 W6 ^7 p- G
  325.   return FALSE;7 p; P6 B  E; k' u/ p8 t; n( Q  E/ O
  326. }
    & N5 k  y4 f' |  V! T. ~% F9 s
  327. % n6 }8 h# m1 m; Y7 [: }7 k! f
  328. void CRevAppApp::ClearAll(void)
    7 u+ \$ I9 Q, W; x2 Z0 {% N
  329. {0 @' P( e3 A9 K: |  Q& C
  330.   LPUPDATEFILE file;
    ( U8 N9 j9 V, f1 o1 C
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * ?, Y+ O. \3 i0 o. |/ L
  332. & b/ Z) @" l+ j$ K) i
  333.   if(UpdateLocal.size())4 d; G: X$ s1 c& g, r+ q
  334.   {
    * t: [: f8 F8 D
  335.     UpdateLocal.clear();; r6 J% m9 E7 o: Q
  336.   }2 R6 g% u1 d: H& B" g2 _" ^  V
  337.   if(UpdateFile3.size())  s3 N7 {% H* T; c4 k
  338.   {
    ; A# p2 P" [8 C/ [" N% n, a+ L3 J: |: K
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * v5 A4 W. S8 J( U2 b, Z* t8 ?
  340.     {
    : D  r7 p! R' ~& x: y/ z, T; b
  341.       file=(*p).second;
    ) o" G/ M7 [- k6 `$ m7 [
  342.       free(file);
      ~# m) Q7 C6 r
  343.     }' ]" A* G: _" m5 z0 W
  344.     UpdateFile3.clear();
    3 `& T% ]5 X8 N' r
  345.     UpdateList3.clear();
    9 F+ M/ O, U. P; ?
  346.   }
    6 F7 O3 Y( h" q; V4 m
  347.   if(UpdateFile2.size())
    2 K' a) D4 W1 W2 G' C9 ]+ Q
  348.   {; \2 D+ U. d% \1 o7 M! M3 H
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( l& C0 S# t- M4 T3 T5 E" l
  350.     {: l# c! V+ s9 O( A# q9 z
  351.       file=(*p).second;6 h# m# e2 v: l4 `0 \
  352.       free(file);+ A+ @8 ~! U  U# {
  353.     }
    ' x5 E/ b; r* \9 ~
  354.     UpdateFile2.clear();
    ! Q) M! Q" |( g+ h  E# V+ u
  355.     UpdateList2.clear();* p( P( H% m  [/ d/ J! C
  356.   }/ d7 v% Z) I& }5 [
  357.   if(UpdateFile1.size())
    7 o0 O* `" H- x" t8 J- |3 ]
  358.   {
    . @. q) G- O; @/ D
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , t# f7 `! H7 L' X( P0 K; \8 D
  360.     {
    & s& W# y3 o: j2 j6 m: {4 Q
  361.       file=(*p).second;2 ^) ]( X" ^. L* m2 w
  362.       free(file);' |! F" u! q7 _" r8 u/ J8 N
  363.     }
    0 m' \$ ^) r9 p# l( v
  364.     UpdateFile1.clear();
    0 y# s, @4 w% {* C
  365.     UpdateList1.clear();! F# K3 F3 s3 i' D6 _' {
  366.   }+ ?" t; [) @- k6 |8 o
  367. }  7 b" @0 e! U' c7 A- k
  368.   
    5 o2 J" f# @( _3 e* \1 L5 Z
  369. BOOL CRevAppApp::CheckLocalVersion(void)5 q* j# H% m  M* w1 D
  370. {# S9 e) L/ b* d  m+ s# O
  371.   int c;0 j/ w, J1 @" i
  372.   LPUPDATEFILE file1,file2;; I0 ~" {" E2 L+ o0 N) V* _% R1 x9 m
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;8 U% a/ H4 ~1 P' O
  374.   std::list<CString>::iterator l;! ]7 Q5 A) ~1 c7 C  S

  375. # D% S/ B' _0 t2 S" C
  376.   UpdateLocal.clear();9 m1 V% G  U/ \9 m) }6 _+ A
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);6 E+ Q* h6 r3 v3 o) h
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
      W" L+ P1 ^/ B$ n1 S
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);! H+ J& g+ ~3 E1 ~# e1 ]: Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);, E5 W% D  d' S3 m: j/ I. q
  381.   if(UpdateFile3.size())* O8 {) i3 G1 U4 A6 [: T
  382.   {3 ~; C; c" b7 T! b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 [" c% y- e+ ^) K; `- K8 d2 m
  384.     {9 r2 C4 X# \1 j+ W* G
  385.       file2=(LPUPDATEFILE)(*i).second;
    3 C! l, M3 C* S  k' B: W7 F6 y! F
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) L; I' \& a, c: Y+ W  ^, I4 Z8 j2 R
  387.       {$ [, @& z- C+ Y/ b% V
  388.         file1=(LPUPDATEFILE)(*p).second;
    6 z" W5 g* c5 {- d4 V& L. y
  389.         file1->vers=file2->vers;3 w. M. u1 O/ {: F' J$ r5 H) x% b
  390.       }1 f5 u; @6 j6 @& v' m% t
  391.       else
    1 X! \8 \" ]8 i5 }
  392.       {8 R5 R$ T# p0 s* E1 P7 E7 N* Q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 h. H9 \' k) u
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    2 B/ V# D' W8 g, [
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    3 c8 l& l8 q5 Y4 F4 w
  396.       }
      ?& r: m; v  O: O; X3 n3 a
  397.     }( N1 {- }: t, p
  398.   }
    . d5 L. D, y) D
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)2 |+ S8 Q1 V7 l) }
  400.   {
    : H9 m0 z* ]1 K5 q. `% N
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( A% H9 k. l8 ?" S+ c+ h
  402.     {( n7 C! ^7 h; t+ ^: G
  403.       file2=(LPUPDATEFILE)(*i).second;/ n' \/ C) Y4 a9 t2 X- I
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 S1 ^: [1 R- L0 w  f
  405.       {6 k# m$ a2 O3 h) d4 }
  406.         file1=(LPUPDATEFILE)(*p).second;& Y8 t1 H: r6 b* G4 y. ^0 B' t) s
  407.         if(file1->vers!=file2->vers)9 d- J% W- u3 @0 l  J3 I5 M
  408.         {
    ( B$ }" U8 |& A" G5 Q6 M
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 |( v+ K0 t" U( N) t
  410.           c++;
    ) H1 G5 K6 `* V4 P+ _
  411.         }$ ~* E* H0 ?1 H9 C
  412.       }# C2 y9 G& j: Z# _$ q5 t- \1 _
  413.       else
    + j8 B+ ]# K5 x& v  Z+ L
  414.       {" r% ?; S7 q& T; T8 a
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / N  [2 k7 |5 i( w" L
  416.         c++;
    1 r, V0 Q) h9 k0 {( P% T7 ?
  417.       }
    6 [: B7 |/ y  ?" P: U
  418.     }+ m1 V! Q2 S4 T# B6 J$ _
  419.   }. h/ u" _9 P+ R! H! m# a
  420.   unlink(".\\DownLoad\\update.txt");
    $ @2 X* ~1 ]$ v  M8 [* j4 X. S
  421.   if(UpdateLocal.size()) return TRUE;
    & O$ t; w+ O* h4 I2 _6 N) m
  422.   else                   return FALSE;: k  n- P9 H( n/ T! A' V: o0 B0 B
  423. }
    3 p& l: n" N; ^( T( N$ {
  424. ! D7 `# J- _4 K/ S% {
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    0 }! _- e. e4 G/ V) A
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * \( F( z2 a4 E0 d  K

  427. & K0 ]7 n9 m5 w) I9 e2 [

  428. & ^% L" L# n/ S! N1 I5 S
  429. $ c2 k+ O  e. K6 R
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( a) ?3 _, S) c& s" D' i
  431. {. g. s& T5 g4 o4 y: y* F
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;, L! E! p' h$ C
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & z. I+ m  u- H$ p. j( j
  434.   {
    5 G; n# o2 {$ C  Y! _/ Q
  435.     char szLanguage[50];
    # J3 ]8 r1 P2 m7 B# e
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( Q. Z- T1 U0 y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # b. O1 v) B+ h0 i  O
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 q; _2 k4 v4 J2 ?9 }: v* H; C" r- d2 e
  439.     else                                   m_iLanguage=ENGLISH;
    1 l8 F0 r& Z7 j1 N
  440.     char szRegister[100];
      i5 s, [; k  ^! p2 n
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; A1 o, B+ J/ x; V0 k0 P
  442.     strRegsName=szRegister;* x! T2 x+ Q6 n9 u' g) V
  443.     char szPatchURL[100];
      l$ X( F4 M6 E5 P$ }; a2 \7 R( Y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 J$ |1 F/ S6 ?
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ P. n( n6 a5 {- I7 C
  446.   }
    % @- S( P0 t4 \7 t
  447.   else
    * W- B" E0 r1 P+ l, ^- f
  448.   {
    7 e# P- @; u# f: P5 z+ A& `: V# Z
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - X2 C2 H" N+ c" ?3 W
  450.     strRegsName=DEFAULT_REG_URL;
    % w, j, V( f8 {# C
  451.   }2 ~$ ^: N' u  [! i5 G' z
  452.   if(GetFileAttributes("hosts.ini")!=-1)
      w3 l$ _) F: `9 y' D2 v0 G
  453.   {
    1 h; @4 T1 Z' K: ~+ Q& r4 w
  454.     char szIP[50];/ T! h! A& O; T) x3 s5 K9 P+ ~4 E
  455.     char szDIR[300];+ Q* h% x  ]# W9 j  x: g9 L" p
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    1 |7 Q  }% P- g2 y/ K
  457.     {. {$ y6 y* ~! F8 h
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");9 x4 O: ~5 m3 T" ?9 \5 V9 N
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    1 c& q2 ]7 A. p2 X! X' i
  460.       strHostName=szIP;0 @1 u' u, [6 g( F
  461.       strHostPath.Format("/%s",szDIR);
    ' _/ {( \: C/ D* z! u
  462.     }
    : v$ A# }! G0 Q5 k
  463.     else
    , Z4 i8 E( Z6 r/ D! C
  464.     {
    : P& n( L7 C' Z' X3 P" B, H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 g' C/ X, }. E
  466.       {
    ! J3 X  T  P- c9 {
  467.         char szLanguage[50];0 v8 w5 I- e- L. D, ~7 a
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ |/ w0 m( G- U$ e* u- k
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% @, F: |+ R2 Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / x& d6 V4 r" r0 W4 x; W* y: t$ [
  471.         else                                   m_iLanguage=ENGLISH;* K. l8 e$ A) t( l$ O( W
  472.         char szRegister[100];
    5 |3 w8 F& y- K8 X
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 |, ^" z$ O# Z" j5 o0 J. U% n
  474.         strRegsName=szRegister;
    . u, K3 K; X1 z  D3 t" {
  475.         char szPatchURL[100];
    " d& }# K! x2 u* T2 {% B. g
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- ^6 T* [! t7 D' x& z; v+ C
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ {  Q' J7 ]$ l, n; n
  478.       }
    1 z$ G9 \: @6 @; v
  479.       else1 p2 J. Z/ p+ ]5 i  O3 s
  480.       {3 R. ?/ Z1 n1 a0 n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ f) y5 r" V  Y
  482.         strRegsName=DEFAULT_REG_URL;2 e/ u* q% }4 y. X3 b: B
  483.       }
      Z5 U! A% l( L7 \7 d$ g
  484.     }
    8 ~3 d9 S# x  b. p1 d) {: D
  485.   }1 A6 k1 o9 O  h  X$ M: Y% U
  486.   return true;0 Q6 m% X" F  n5 x; D. v
  487. }
    % ?! [# p+ L! Q" r
  488. 3 I* l. b, [- R6 |) E% e1 I' G: ]! g# k
  489. #include ".\ZLib\unzip.h"! R6 x; P( {6 K  m9 T6 g' ~" L; L
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);/ ~+ G0 W* R# p3 M; K( k) A" t9 I
  491. /////////////////////////////////////////////////////////////////////////////
    8 @- `  [# z8 A  F- U& N
  492. // CRevAppApp initialization: F- p' B6 n3 t  L( {( B
  493. 9 ~' B, D$ E0 L0 U9 N. y7 @" h
  494. BOOL CRevAppApp::InitInstance()
    7 u( t9 y+ l2 d
  495. {  {1 h' ^! g0 o! t
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    % ]/ M0 [* o8 l% T& Z- P

  497. # s, D2 g/ ]$ `; K6 {/ [
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    8 R. a- Y0 m: ~( ]+ p0 x% ?
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    * t- U+ V3 x+ N$ b
  500.   {: P0 H! ]( L9 }0 G" \7 |+ v
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");; [# d. Y- f. K5 S/ C
  502.     GetPathFromFullPath(szPathTarget,szPathSource);5 }* K, D' \3 R6 r
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    0 V$ e: h- ~; t  S: n
  504.     {
    7 ~0 Z& A9 }  A6 k6 Q, G% R8 r7 ]
  505.       strcpy(szPath,szPathTarget);; i- \& h" I5 q0 Q1 j
  506.       SetCurrentDirectory(szPath);% T8 \: k* C, z+ B  P
  507.     }7 h; L, P, _9 D4 |, D% [5 ~  c* l
  508.   }3 F) L0 @# E  K5 h% |) [0 i
  509. #ifdef _DEBUG
    4 s# M( n5 n! j; j- S: ^# }' T
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / z. y1 w3 L8 Y2 i& G, b
  511. #else
    7 _2 G" F2 W5 W
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 a! q4 ~3 P3 g0 ^/ O3 b  M* ?
  513. #endif
    , V$ a: }/ H$ P1 G" ]7 {* O4 C7 k
  514.   {& p  n5 j. [' Z3 d, i3 V; o3 c- m
  515.     char tempFileName[MAX_PATH];
    7 k( P; F0 W; u: |
  516.     strcpy(tempFileName,szPathSource);3 \; f' T1 M- v3 N
  517.     tempFileName[strlen(szPathSource)-12]=0;
    , J0 N5 W& `$ ~2 y' e" i
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    - T* \% L; A2 o
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ; [  i+ O! b" a* d; A
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);: |" z( |7 Y) U: I5 N
  521.     return TRUE;
    $ `0 D  E9 W, _1 `6 T0 l
  522.   }+ \8 Z; x$ r! ~. F2 t' d" `1 c
  523.   // Nuke 0118: Delete run.exe
    0 q# d% j# O! B) _3 ]1 V9 n& i. z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );) o! C! p! ^) ?. g  w" R
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ! m& ^) K+ k$ D, @* Q
  526.   if(!ReadCfgFile("Config.ini"))
    + @( }, o0 j7 j. F* Y8 B! X- B# _
  527.   {
    ; p& W: p1 q8 z' ~
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: G* d' @( K/ c! E2 R8 g3 I
  529.     return TRUE;% Q' x! q' v8 r; \8 T
  530.   }
    . J2 U+ U& o% a. N
  531.   HANDLE mutex;: `/ W. ]' m8 Z+ ~! X3 _
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))( K: r0 q- h6 f9 a3 ~
  533.   {, b! `& Q+ V9 z3 g$ P7 L* M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)  {8 W7 z" f& E% d& M
  535.     {
    ; h$ \; e$ z' c& y1 J
  536.       CloseHandle(mutex);2 A3 A6 e/ d3 s: h" b! h
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    $ _2 o" {) v4 E5 p) L& y2 L' s% D0 u
  538.       return TRUE;
    ; j- b8 N" X# ~
  539.     }7 o: w7 q2 ~# t; F6 p! T
  540.   }  # G9 R7 S3 c( A3 T
  541.   CloseHandle(mutex);+ j  A" ]0 X0 g$ l

  542. 9 t, \! s# ~, C9 _" g- {# t# E
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
      r4 o  F/ N0 m0 [+ n2 A+ Q

  544. # }3 ?7 Y0 y$ q, D& \
  545.         AfxEnableControlContainer();
      M2 v$ Y3 D; S$ o; G6 p

  546. 1 M; S$ y/ j1 }* E
  547.   bCanUpdate=FALSE;
    7 J1 N2 L& O1 v+ K
  548.   dwStartUpSteps=1;
    ' s  N2 M& U5 L8 ]5 j
  549.   dwProgramState=AP_NOTHING;
    % M2 r# k+ R9 I* p8 N1 }" ^2 ?

  550. $ ]0 ?0 K1 L3 u, G5 c
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);( p7 q) s! O9 W/ G" X: w1 X

  552. 3 g8 k4 a. l% s" k( m. d
  553.         // Standard initialization
    / q7 m& J0 R2 Z# Q1 t2 V/ ~2 t, H
  554.         // If you are not using these features and wish to reduce the size7 [0 e! \0 ]1 K* v5 a! G8 c
  555.         //  of your final executable, you should remove from the following
    : n# `% g! M- Z4 _% Q. w; T4 ^
  556.         //  the specific initialization routines you do not need.
    # B$ c, E3 p4 k: o
  557. 3 u  }7 m8 f/ y) h8 |: V
  558. #ifdef _AFXDLL& S$ Y; h" p4 b/ w, v
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL0 i$ R/ u2 D+ J; v, P
  560. #else
    ' l( t  b  c# m/ g% \
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    # [) ]  r1 U+ e$ E3 }( s; l
  562. #endif
    " U; I2 R4 L! A8 I% p

  563.   A" a  d% p& u& q  A. d5 o! u
  564.   dlg=new CRevAppDlg;
    " X) D- _( d. S0 M
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    5 U% c  t, ~8 b5 ~9 y
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* B: n; L2 W# A2 [! O$ U
  567.   m_pMainWnd=dlg;; s+ F. L. |; d* [4 l9 O8 Q
  568.   p  ^4 d+ w! J5 N3 ?. E
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ [( q! r* r, ~

  570. & Z! z( W7 V. v5 A5 J* N) B
  571. //  GdiplusStartupInput gdiplusStartupInput;! J( D0 y9 v& x/ c/ }  b! F
  572. //  ULONG_PTR gdiplusToken;7 K  C. ^: u+ _9 n$ |
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    + ]  Y) g7 n* x
  574. ; V( K; b% C" k' d3 h
  575. //        CRevAppDlg dlg;
    4 I* a# b& x7 S% @! w/ r1 s
  576. //        int nResponse = dlg.DoModal();3 I3 R- V7 R& h* L- B# o
  577. //        if (nResponse == IDOK)
    ' [' Z0 Z/ T7 q, t  ?$ x7 |
  578. //        {
    / U) E# \$ W+ f& x" N
  579. //                // TODO: Place code here to handle when the dialog is' x  M+ a4 y6 I# J
  580. //                //  dismissed with OK
    5 X/ d: s: M: ~5 i/ l
  581. //        }
    ' j) G0 A$ g8 S3 H; S+ F
  582. //        else if (nResponse == IDCANCEL)
    3 v" @8 L" T+ O( y
  583. //        {% H; D8 Y& w3 k& f
  584. //                // TODO: Place code here to handle when the dialog is
    # Z3 n1 [0 M4 U+ X6 U
  585. //                //  dismissed with Cancel9 a3 K* O, p2 g8 g' e- S
  586. //        }
    / a% J; n6 c* x+ p  y7 c* T3 `. Y

  587. % j$ a, ]; W# l  F  Z! A. L
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ) b0 W" y0 ~- Z# A
  589.         //  application, rather than start the application's message pump.
    % t' g& Q1 N" t& T+ B1 \* x
  590.         return TRUE;
    / z* R4 r5 M/ t! i, ^0 @
  591. }/ v. J9 U5 U$ K& U
  592. 4 r8 S  z/ {) M. N+ _4 ]
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    - Z1 h# ~, F. N) j% ?( C
  594. {% a! }9 X  {8 r+ x! u7 _
  595.   int i;# W  H) d- e: i+ Z1 a' O  C
  596.   char *szRet;7 H% o9 _3 a4 O+ Z# Z! i
  597. ; ?( x1 o7 v8 V( W# d! O8 h8 Z
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    & n. ?2 P. T9 K* \
  599.   if(sztoken)0 D2 Q: y. `0 ~  S4 b
  600.   {$ p: c' w: U" J. _
  601.     szRet=&sztoken[itoken];
    - {0 X( K+ s- \8 W$ h4 ]  x  Z
  602.     while(sztoken[itoken])6 ?: S5 p& I2 j; R& F0 g& \' k( I
  603.     {
    ' ^9 d& E2 S$ ~1 E" g7 c
  604.       for(i=0;i<(int)strlen(token);i++)
    4 \" P8 p4 {* h$ G3 l% R9 f" O) _
  605.       {
    4 e" o$ w% L# M3 w) f
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
      x& b; ]7 d4 @
  607.         {5 f$ `. A. |  e' ]
  608.           sztoken[itoken++]=0;1 a# T* Y: h4 L7 \# \$ Y7 a
  609.           sztoken[itoken++]=0;7 K5 q$ t6 W1 _8 p) x( N" _$ `
  610.           return szRet;
    % V# n8 d( u  q6 y8 L- S* x5 \# q2 G5 H
  611.         }
    * P+ k- S  f9 M6 K: R8 w% F
  612.       }
    7 t9 q4 H" D* f. m, i: J
  613.       itoken++;
    3 c. ]  q/ E2 n$ H3 O6 q9 [8 q) R
  614.     }6 b3 }0 R& C( ^
  615.   }6 e6 }! T/ f3 B- o
  616.   return NULL;# {4 [' x) ?' V: Y* V4 u
  617. }1 G0 d8 w. B9 S3 A) z
  618. * e( Z" O$ I& g1 A! ^5 a
  619. void ProcessProc(long Total,long Current)+ \3 t* v+ ?, N. B, R
  620. {
    1 S2 j" @% c$ L9 C) q) ^
  621.         MSG msg;; z2 [& o2 y; {. k$ j# z
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    # D& d3 w1 b2 z, t2 N' w# C; K4 k
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));/ Q2 G! N. g6 S  t; ?
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ! D1 G* M# g  W: D/ W1 f, `7 _
  625.         {
    % f8 ~; {, Q6 {$ q7 e# ?: a# y. H
  626.                 if(!GetMessage(&msg,NULL,0,0))( L4 x) h% w; `3 {% V
  627.                 {9 s$ B! n% ^1 F7 g+ q" t! g  s
  628.                         return;7 Q+ @3 y; f+ _. Q8 D+ |
  629.                 }6 a# R0 M* `* n  M
  630.                 TranslateMessage(&msg);4 ]9 U) n1 K- E6 _$ f
  631.                 DispatchMessage(&msg);
    & ^; A: M: j9 X2 Y5 N6 ?$ b" y4 K
  632.         }        ! Y# q0 |2 O( n+ G! U
  633. }
    $ a8 J- ?! J, f
  634. 7 {$ |0 e; d5 c0 A$ u: s
  635. BOOL bFirstChar=TRUE;  L; K" E6 w% `& v0 m1 W+ z. M6 n4 y

  636. 5 _# A8 H+ Y0 q) [0 v0 U
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # t2 g4 N/ ]# s  D% G, j
  638. {
    ( J9 {0 l) v6 {0 A  f6 V
  639.         // TODO: Add your specialized code here and/or call the base class1 R  M* `0 x" P6 G5 n3 k1 M
  640.   switch(dwProgramState)
    8 `* V, O7 h; B
  641.   {% {0 ], x# g- B& e5 ~
  642.   case AP_NOTHING:" n/ m: z7 y8 X7 ?. [
  643.     switch(dwStartUpSteps)
    , x9 Y2 B8 \! @# \4 x( i1 M
  644.     {5 N' }9 Z1 R! F5 l" d
  645.     case 1:( [: n' r  x% Q1 C1 K9 _4 Q
  646.       {8 d! e' k* g6 W+ m
  647.         int i;
    9 z, @" ]: Z! D. G; ]. K3 P
  648.         CDC *pCDC=dlg->GetDC();3 @" o' e+ T$ w3 z
  649.         HDC hdcwnd=pCDC->m_hDC;
    & W4 j/ W1 |4 A  b- {
  650. //        Graphics graphics(hdcwnd);
    2 ]7 Z" H$ W) ?& h' b6 x# j% X
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");' l+ U# P6 M# J7 M' O5 g
  652. //        INT iWidth=bitmap.GetWidth();5 ?: a) l" H; J" K
  653. //        INT iHeight=bitmap.GetHeight();; G% a8 N5 {# D3 N7 d) o/ _
  654. //        Color color,colorTemp;
    % z# M6 h; H) j% W5 ?
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)6 U/ l) y' a- w, K* R: t- O. S
  656. //        {
    # @# l1 j: K5 x( E( b1 @$ o
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# M% ^* k2 u! Z' t* }
  658. //          {" F' u8 p2 C! k, j/ R0 f9 L
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    : Y. O; o9 N3 [% _0 y
  660. //            colorTemp.SetValue(color.MakeARGB(
    3 {9 x' i. i: P, r- P
  661. //              (BYTE)(255*iColumn/iWidth),
    8 d& l) Y) o. h) p0 a' C
  662. //              color.GetRed(),$ Z3 R- o& i1 }8 r0 |/ j- K
  663. //              color.GetGreen(),
    6 Z7 @; w& t0 [
  664. //              color.GetBlue()));; I; [" w: I, }) I: R
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);. U6 n# ~- _6 x2 G  k
  666. //          }
    9 ?/ j4 a' N1 J) f2 I# _' b2 f
  667. //        }9 t, X6 d0 D7 Q' G0 r
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    6 n0 W, D% }8 A! I) q  `/ g
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) t9 c1 t( n/ b, Y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");7 i' M# b3 Y% [/ I8 t
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    * B) \; m% l, T, C' A
  672.         for(i=0;i<240;i+=8)
    1 \3 t/ p, F. K  b2 z$ C
  673.         {! u5 P* t( c2 u, s
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : e/ [7 A; Q7 r# o$ [& M5 C
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" a" R: D7 r) X/ V9 f
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( O, ^7 k1 t/ ~4 t
  677.           Sleep(33);
    / x3 D0 ]! a; W, }9 _
  678.         }
    2 }9 R: z6 H1 o
  679.         Sleep(1000);
    ! |) l  P0 ^% i
  680.         for(i=240;i>0;i-=8)  ~; M8 ?6 j$ U2 k0 ]. T
  681.         {
    & b  @* U% B) _# W5 Q) H0 F" C/ [
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 D& p* n& V! i$ f3 k
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);( D, C. ?" x- K  X
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( F+ B, _+ `2 u+ @, _- t4 r, ~
  685.           Sleep(33);
    $ X3 f3 C) e( B8 p! P/ W+ H
  686.         }0 \& M, t2 j/ C' v7 }
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    3 f+ d) R, u( B
  688.         dlg->ReleaseDC(pCDC);2 T, l2 @2 {* K
  689.         DeleteDC(hdctar);' ~7 n( X% e9 A
  690.         DeleteDC(hdcsrc);4 Y# f! j* x3 O8 y4 \0 z* N
  691.         DeleteDC(hdcorg);
    6 A+ [  b6 \7 D! O; m2 ]$ n# N6 q, ~
  692.       }
    ! ?) c* P9 U/ j# t2 @. x
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    . n* l! b  i( U0 B
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    $ A& t7 K# y; U$ Y% I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, N5 S5 y5 l) d) @, Z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ' ?2 l4 g7 a  \/ S2 g" a9 m( ]
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 m3 \0 B1 P  \: w9 Z
  698.       if(!Dn.Connected())5 Z9 L8 {& L. F! W
  699.       {0 ~# C5 E& J) s
  700.         dwTotalFiles=1;0 |: e9 Z9 f1 H" x& u
  701.         dwDownLoaded=0;& c0 @4 T' \( Y
  702.         bSilentStep=TRUE;  h$ a, L, }$ e4 u0 ~' y0 h4 u
  703.         bCompressed=FALSE;* Z5 Q$ X3 o, {4 ?% I
  704.         strExtLocal.Empty();; y# U, o6 J3 l* \# C
  705.         strFullName="readme.txt";. l' {* v3 ~% s6 B0 `
  706.         dwProgramState=AP_CONNECT;
    - l. B5 H: `6 j  p, {, F0 |) O
  707.       }
    ( f5 ?+ j, y/ t& k; N- ?
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    : N! X3 D; r8 |+ z6 w3 E5 R
  709.       dwStartUpSteps=2;
    2 ^  i$ @. p9 X; l8 l' w. V
  710.       break;
    3 n$ o0 A# o( e. T0 `- ?
  711.     case 2:
    6 k( A* R% E( X
  712.       {7 S6 I9 _# {! M; X4 B
  713.         int iEOF;) r2 q" X! h6 _% s/ [/ h, q! a
  714.         FILE *fp;
    - {0 t8 f! J2 i. l9 l
  715.         char szString[512];1 W* Z' \$ w' Z
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    $ I  f& l! }3 H1 o3 d
  717.         if(fp)- V" l3 ~4 h# d: W
  718.         {
    ; B7 Q" X; p' [1 M; @
  719.           do
    9 U/ o$ f* {, n9 g! K8 I
  720.           {6 ^( C+ L6 L, @2 n5 }$ _! ?
  721.             iEOF=fscanf(fp,"%s",szString);
    * @6 H+ t  O2 ?2 x' t5 A2 Q
  722.             if(strlen(szString))
    # {8 `" K2 D9 x/ M/ e1 Q
  723.             {" f$ m/ T: ?2 G7 p: I* T2 m
  724.               if(bFirstChar)
    ) D& \1 ]" `; e4 D& J
  725.               {5 @) X9 v" A) f- x+ x
  726.                 bFirstChar=FALSE;6 n! m) q' i- e  U
  727.                 bConnectIsBig5=FALSE;; Z: n( j% m8 Y. ^
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;+ K3 W1 N% \4 L' \
  729.               }
    0 y9 s  g% l0 I, X# F" m9 H6 }
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    6 B+ e4 b6 A4 x: M8 _
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - B  p$ }. y7 t
  732.               dlg->m_ListText.AddString(szString);/ U9 `( o* X7 b% r
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " Q/ b$ f6 [8 O3 W: P1 a' X
  734.               *szString=0;
    & G+ _" q" J  M3 N; _2 ?4 _% g
  735.             }
    # x0 J3 C1 Y$ s5 \2 t; l  D
  736.           } while(iEOF!=EOF);% t" I7 k" f5 l% N+ K
  737.           fclose(fp);
    0 T% [4 z( J) O$ ^: J
  738.           unlink(".\\DownLoad\\readme.txt");0 n) a0 P# K1 F) {9 o1 k1 u" l
  739.           dwStartUpSteps=3;
    + G0 k! F: C& e1 L! Q& s$ c
  740.         }( K* M4 N3 N6 G% m
  741.       }. m, P! H6 R7 g: I" }1 W
  742.       break;# F* B( d( h4 L6 Q8 d" C  q
  743.     case 3:1 H# O1 A7 Y' N9 H7 d' M. E. _
  744.       if(!Dn.Connected())/ @8 z. K# @; @- x/ d! u( d
  745.       {" A: M  V2 M6 I  x, u9 Q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    / u4 J9 |1 d. z6 m4 n# o
  747.         dwTotalFiles=1;
    + A& x' z2 B6 J+ Y
  748.         dwDownLoaded=0;
    ! N9 p6 U& W( \
  749.         bSilentStep=TRUE;
    & L% D( }& _8 t: c4 {
  750.         bCompressed=FALSE;
    - N) }( o+ T- ^  m3 o# Q2 q
  751.         strExtLocal.Empty();1 M( ]7 `1 w% P
  752.         strFullName="checkversion.txt";5 Q9 g5 r. u$ G8 b2 @+ A( ?( a6 y
  753.         dwProgramState=AP_CONNECT;
    / V. z( [3 g) S
  754.       }0 [( l7 c4 y5 H
  755.       dwStartUpSteps=4;
    5 O# b% x$ m6 d) ^% S
  756.       break;
    ( p  t1 X& S  o; i
  757.     case 4:
    # \9 J. ]& k6 ~# j9 b: l" q) k6 l( e
  758.       {8 i& S: l% W& P% i! y+ r
  759.         FILE *fp;
    & [, C; ^8 v* ?, P4 _
  760.         char szString1[128];, A% ?& B" o! ]1 Z) F$ G
  761.         char szString2[128];
    0 G2 n! T6 m5 ]; S& e
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( r. s% D7 o' D7 r/ g
  763.         if(fp)
    1 f; H5 h5 l, o9 i* x, ~
  764.         {
    : r0 A5 U7 @3 T& |- n7 I% |. a! c
  765.           fscanf(fp,"%s",szString1);9 U, S& c  v+ p2 Z
  766.           fclose(fp);
    7 h2 M/ u# c% F+ L/ H. K4 M2 B
  767.           fCheckVersion=atof(szString1);, \! |& ]  z% h5 G# r/ p8 L
  768.           fp=fopen(".\\checkversion.dat","r");
    . G) h; C+ Q8 q$ z: B
  769.           if(fp)
    # d) x% Z5 b4 {8 c
  770.           {
    ; h  j2 j2 S/ e
  771.             fscanf(fp,"%s",szString2);
    ; n$ [. r/ X2 a
  772.             fclose(fp);
    . E) c. v7 ~# G( h2 P+ i
  773.             if(atof(szString1)!=atof(szString2)); T6 M- H# a. d. m, j
  774.             {
    . i/ V& k; }3 d- K0 O# }
  775.               if(!Dn.Connected())5 W1 f4 e$ U- t( o5 R0 U
  776.               {
    $ t) b1 @2 a3 `- S5 S" W( Y
  777.                 bFirstUpdate=TRUE;& W" Z1 _5 e6 t, ?2 U* V# R# n
  778.                 dwTotalFiles=1;
    * s7 n/ Y4 ]5 b! K  l3 q$ W; B8 t
  779.                 dwDownLoaded=0;# j( `# t) A* L4 Q
  780.                 bSilentStep=FALSE;
    % {  H" p7 `! T$ _' j
  781.                 bCompressed=TRUE;/ V* g" z" T- X" S. ?
  782.                 strExtLocal=".\\DownLoad\";2 W6 t( F  H# }2 ^1 p
  783.                 strFullName="update.txt";
    7 f! v3 @. J5 Q' ~( r8 ^, E
  784.                 dwProgramState=AP_CONNECT;4 b+ i! @2 P- s4 a& Y4 j
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; s% Q0 T/ W+ C0 X2 |3 D
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# `3 _2 n* G2 h; b7 {
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . \8 H) G* B, ]" p# n/ G% ~/ D

  788. 8 v3 g3 g/ V: O- Y4 t
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 e. _3 E. P% ~/ j
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    . x. V8 A8 |2 R" y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
      k) i/ Y! i' |" E) K/ S, s4 s# Q
  792.                 {' ~6 g* R; z- s0 z9 u
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    9 F, O% {" V; Z; f! _9 a
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");6 r# l$ n; H4 {/ S
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");8 l( ?3 t: F$ W& C5 `8 a* @7 c
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 M) n7 e  D) C% V! g% P1 o* ?

  797. 2 H8 `" ]/ K. W/ I+ E; s
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 P$ l' \& W3 ]8 H+ v" [) `
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    / W% k# c; R- N6 R2 v
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");/ k+ l; Q/ x3 S6 m) B
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 ]0 l& _0 t4 ?2 x5 R$ Z) A1 L
  802.                 }
    " a% m$ F3 A0 p! H' _: V
  803.                 dwStartUpSteps=5;
    " G4 |9 T# f/ o/ w
  804.               }: W! f/ m  h3 ?% Y0 d: P
  805.             }' I# r7 _2 G5 E; E' `
  806.             else
    ; y) Q+ |" j0 m: B0 p
  807.             {
    ) e- J" U( e/ m3 u& }0 {$ x" L
  808.               unlink(".\\DownLoad\\checkversion.txt");
    " i$ m, e- Y& l6 w* R3 u+ G) H
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");) o/ `" M1 J- C# ]) O) D* m
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) D; ~/ I+ U3 |. `* Q7 k
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");  n. I" B  l* x- g2 a. u

  812.   E# i+ k- [8 H5 W' B' q  ~* ~1 h
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( y6 U2 U+ F0 t, L2 }
  814.               dwStartUpSteps=99;
    ' j: _& C5 _% o& e! U$ }1 n
  815.               bFinishUpdated=TRUE;
    4 j) c+ E, p0 C9 V& |8 e3 Y. A
  816.               bCanUpdate=TRUE;
      A5 v; h3 {7 I; g
  817.             }7 R5 G# d4 s9 ^5 h8 W9 T3 [3 Z5 k. W) ~
  818.           }9 `% n8 F* ^$ R* b% Z: W& C
  819.           else
    , m# k# d+ c4 J: h+ G6 W+ _) k  h
  820.           {
    ; E: v) I  G1 L% Y0 c) r
  821.             if(!Dn.Connected())
    4 ~0 l3 E, c8 Q; a
  822.             {
    3 H0 k# h) G! o5 J2 Q4 G/ h
  823.               bFirstUpdate=TRUE;
    ) n) Z8 H* S1 @9 R5 W; g( a
  824.               dwTotalFiles=1;' F( a7 t$ }" L$ P/ ?+ W/ c, ?
  825.               dwDownLoaded=0;
    1 ]  a! H4 |% }$ X  _. i$ `: M9 s
  826.               bSilentStep=FALSE;6 M# F% N* I$ q2 t0 p) ~! ]4 c/ Y
  827.               bCompressed=TRUE;) r0 J. K) c4 y2 ^  Q  q( U6 i
  828.               strExtLocal=".\\DownLoad\";8 c! H4 d6 ?6 D/ \6 C
  829.               strFullName="update.txt";0 X+ h+ h, k) b3 v% H
  830.               dwProgramState=AP_CONNECT;
    : ?) N: ?. i2 E& Q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 k% s3 h2 }: W
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      u( V# Q6 A1 j6 q$ K
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 O3 G6 A1 |' f5 j/ u$ |3 ^; S- l
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - S( x  m* b2 J) x$ C  K( c
  835.               unlink(".\\DownLoad\\checkversion.txt");6 P2 X1 {5 x0 b  x; I' n
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)6 U/ \$ X8 z) K0 H( \$ n% r
  837.               {" k: j3 {- t( n) F9 Q6 V
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    0 `! F4 s4 i6 b' k5 G1 k( u' s
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");4 F5 o# E6 p2 P& S9 M
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ; Z/ F3 r* B6 }
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 r) [" k3 U  z+ V- J
  842.                
    % m( f: R. O* q
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , s2 Y8 I: q5 S
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; C4 H% I2 C1 y0 \. p3 |
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");. g3 Y, ?, g1 M1 V: F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, B# h' p, T/ s* s$ e# F, E  @
  847.               }
    * u$ D1 F. u$ k. R7 P" o
  848.               dwStartUpSteps=5;
    $ J+ I. {9 U/ N1 }
  849.             }4 ~: E* o! \  H" d3 E3 N
  850.           }
    ) }- u1 Y/ E* g2 d4 e# |
  851.         }* e. e9 r9 o( [" K, U
  852.         else
    * N2 B% I! y6 w" \7 @% _4 f
  853.         {9 S& ?+ J) l3 c: ]: ?
  854.           dwStartUpSteps=3;: @( e; S8 {2 M7 R% n: q- \
  855.         }
    : f6 p' M$ w) I/ x
  856.       }+ n! P' t/ U7 v3 Q( p& \& r+ R
  857.       break;; n5 P7 n/ ?; ~. l& {' T7 A; @/ l1 q
  858.     case 5:3 b- h1 O, x) h# e
  859.       {
    4 y9 ^5 u5 A8 J
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& g3 C3 A# T# O3 z" w0 |! O
  861.         {
    , _5 r8 _9 f( V; A0 C
  862.           int opt_overwrite=1;7 o- |5 y# v4 S) R, Z; M+ l
  863.           int opt_do_extract_withoutpath=0;
    ; e# h* J4 k, L: A* m, F
  864.           unzFile uf=NULL;
    / k3 S: {& S  w7 O) Y
  865. 0 J" h4 K  E/ |) h* w0 w
  866.           uf=unzOpen("Wsa.zip");( ^  O0 [: {! B& c' X
  867.           if(uf)
    0 L" t7 t* D9 T2 J  Q# j1 `( [
  868.           {2 [% j* A3 J; g
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);# A1 d) V9 P0 \+ w
  870.             unzClose(uf);( |& C3 w  A9 O+ w, t: i
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    * F( L! w* f  M+ d# |0 q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    4 x" z7 M0 C; Y% h
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");, j4 l8 P1 @: J" A' p
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ x5 h2 L9 N, R; S* O1 c
  875.           }
    7 }1 K! M$ _; B5 K" g' v
  876.           DeleteFile("Wsa.zip" );) q( F) @  L8 ~! l! J1 |' `
  877.         }% ^( m9 S8 p) p4 t& k
  878. 4 g  C9 ~4 O# x2 r' Q# w' l9 C
  879.         if(CheckLocalVersion())4 Z; B$ [3 ?' U6 U! Q
  880.         {2 `+ D# h/ \; g* f
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    9 J9 N* k0 w# o) {9 L3 O$ E
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");& e) }0 u0 _: j9 P1 z
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");- Q8 c8 Q: x3 u& M5 G: `+ O
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- T% I$ `, G( k% q5 J  A8 y8 i' m
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    * X/ c9 i0 R7 `& R
  886.           dwStartUpSteps=99;( c2 E, M/ e* U
  887.         }
    + ~7 |, o/ J5 |
  888.         else
    8 e( }. w+ B1 R9 K6 D
  889.         {/ i1 ]( p/ |; K* z! d$ V
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 w/ L* F6 \$ V0 @( n' G
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ J1 |! I- o6 o$ E) L/ d
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");( r9 }+ R4 }/ B/ ?! V/ o( D2 x

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

: l  i" E% n6 B3 n' C
6 F! l" F0 e3 B

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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