CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
0 d. ^3 A0 |8 _% e( `# ]
  1. / RevApp.cpp : Defines the class behaviors for the application.
    2 n3 D- j9 c0 y; D6 W$ v
  2. //
    / Z' t% M+ p" J5 ]& h* v
  3. % D# ^, Y$ J7 N
  4. #include "stdafx.h"
    ; |( W/ N. h) X4 `! ]$ G
  5. + E) X' D3 b7 C  a
  6. //#define UNICODE0 g  P+ b5 L1 G6 N; F: J
  7. //#include <gdiplus.h>! |+ g/ y( F# f* S& ]2 M4 b5 [
  8. //using namespace Gdiplus;
    2 H/ R. V7 ]# K( b" k
  9. - G- k2 g$ H3 o. l
  10. #include "RevApp.h"  c  W: U/ y8 `& `; V; B8 K1 M) J
  11. #include "RevAppDlg.h"
    + X7 Q  @/ k9 ~( B5 g# c: ~

  12. 5 s  Q: c8 A: }( i
  13. #pragma warning(disable:4786)
    3 f5 |% v# z  ^2 i/ r: ?
  14. #include <map>* v" n. C; A. f" w$ v( f$ q+ }( x
  15. #include <list>9 i' \% m) I6 p& s9 h
  16. #include <direct.h>
    7 P  b" g. l5 ~, b( e$ F" l
  17. % R% S2 g  ~* g, \8 L& e
  18. #ifdef _DEBUG% |3 a! {4 C0 w4 i$ z
  19. #define new DEBUG_NEW
    * y1 _4 @% S. a$ B9 ]" O
  20. #undef THIS_FILE" d  t) L& S9 \2 m3 T9 ?8 T5 c& \& O
  21. static char THIS_FILE[] = __FILE__;
    8 h8 b5 i2 B5 q. V7 L
  22. #endif5 r, Z' U. s; m8 R
  23. #include "SkinResDef.h"- `6 E+ M$ Q, p2 e
  24. #include "ChangeBG.h"
    7 q- G% S2 O( m$ W
  25. #include "AFXINET.H"2 M2 g2 |' p  s
  26. : J& W8 K4 U2 _( c6 }1 i
  27. #define TRADITIONAL_CHINESE 0
    % v$ Q+ r% P# ?
  28. #define SIMPLIFY_CHINESE 1' Q% P! r% p9 U8 ?, \% P% b( c
  29. #define ENGLISH 2
    7 ?+ z' n) Y0 D4 z
  30. int m_iLanguage = ENGLISH;& `: S/ W. U1 J  _! r# m# d9 V
  31. /////////////////////////////////////////////////////////////////////////////
    + Z. \, y# u# ~5 e5 M* K
  32. // CRevAppApp
    $ p- h9 e1 F- e
  33. 4 i" }0 x7 G* J  ?7 k
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    - t4 R( A: f+ d# ?4 s
  35.         //{{AFX_MSG_MAP(CRevAppApp)* z8 D- `) u2 n% n
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    " k7 Q6 d' D; Z5 t& k4 i: B
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    + I9 R: j- R, R8 _5 C  S; }6 U
  38.         //}}AFX_MSG
    $ e7 H0 H& [) V; C. A0 ^
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)( I9 ~5 b* V& Q: Y1 I- ~
  40. END_MESSAGE_MAP()/ C, `2 D, ]7 x1 Y
  41. ) k5 e7 P; \+ H" I, f1 v& {# b
  42. /////////////////////////////////////////////////////////////////////////////; {: D9 Y4 Q! }. ^( f0 M
  43. // CRevAppApp construction6 V; y- Y! \" N
  44. 4 ]) }! o7 L7 y0 @7 F" v0 Q+ g# G
  45. CRevAppApp::CRevAppApp()
    4 T% Z8 L$ s2 O6 d6 u
  46. {
    . U7 R% v) y/ k0 o; G& R, S
  47.         // TODO: add construction code here,: N4 U7 B( X- i" ~- v
  48.         // Place all significant initialization in InitInstance( A! h4 N0 {! r* K4 f
  49.   bDisplayIsBig5=FALSE;7 m, |" M: i: E
  50.   bRestartUpdater=FALSE;, h9 G7 N% e2 ?7 r( a; [
  51.   bFinishUpdated=FALSE;
    7 i7 |: v# ]; _6 z% Z+ @  T
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;, z# X  {8 p+ [. I) g4 o
  53.   InitChangeDataBig52GBKS();
    - b3 ?0 O& E1 I: ?
  54.   InitChangeDataGBKS2Big5();
    ; ~7 T: u$ ]9 s/ E" w
  55.         //# ~$ k4 e! C, D. o* c
  56.         bClickRunExe = FALSE;
    % \# k  T9 z5 Q" r6 ]5 l9 p
  57.         //& o( j3 [  z1 {+ @* c1 f
  58. }- B$ [% i: Q% p
  59. ; t, p$ m* @3 p  |' {# M/ o
  60. CRevAppApp::~CRevAppApp()( j- a9 U9 [7 s: U9 ^
  61. {5 f' C3 M0 i' Z
  62.         // TODO: add construction code here,
    9 q( A; l" E: `7 C0 I
  63.         // Place all significant initialization in InitInstance1 Z. y3 e; a/ O# o  T) W  {
  64.   EndChangeData();4 Y0 l  ^3 D' O$ W/ F  p! s1 R
  65. }2 J$ e: O0 M8 j3 p
  66. ( s) B5 C% u# ~  V  W2 H
  67. ////////////////////////////////////////////////////////////////////////////// r6 p. R& p3 O  H+ V
  68. // The one and only CRevAppApp object5 A* ]; W! W9 O
  69. / I$ F( ~4 u" p- p* A1 z( E7 |
  70. CRevAppApp theApp;
    6 o3 M1 D! ~% n5 u  E( p$ G

  71. # b# }, B+ J; C8 |: }
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)8 z7 B1 v* X4 ^
  73. {" _$ M0 v% E; Z7 T) p9 l" L
  74.   int iEOF=0;
    : B( n* N3 r9 Z/ t; ~
  75.   char szTempName[MAX_PATH];
    $ C8 ~1 c7 k5 @% R2 H" o' M
  76.   *szFileName=0;% X# |1 X$ ?7 g2 q4 C
  77.   iEOF=fscanf(fp,"%s",szTempName);
    1 Z6 p, ^9 d- M( ^/ s3 {& P
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ! T" \, m  r7 i/ C
  79.   {
    ' t; @9 ]" I. e% r# [/ E* B) e
  80.     strcpy(szFileName,&szTempName[1]);
    % f$ D- V' {- ]. e- l6 m
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)9 n/ Q7 f9 g( h# G! w4 Q3 `- m( K6 R
  82.     {
    . R% B$ `$ C$ T8 e5 g: |
  83.       iEOF=fscanf(fp,"%s",szTempName);
    4 r. D; q5 W+ n+ \
  84.       strcat(szFileName," ");- m2 a7 U/ p4 u7 G9 t/ R8 |( l5 }
  85.       strcat(szFileName,szTempName);
    * Z! w! `, j9 C) D1 Q" C; a
  86.     }0 C$ K; u' M2 \9 f0 _$ v# J
  87.     if(strlen(szFileName)>=1)
    . t$ z% m; K& I% B  M
  88.     {( C) `! ?* [' L. S9 C! F% a
  89.       szFileName[strlen(szFileName)-1]=0;
    , Z) N3 s# ~* D
  90.     }0 Q5 l$ L- z6 ^8 X. C# f4 ?
  91.   }
    - W3 d5 a" w! N8 t2 p1 G
  92.   return szFileName;
    . `% F8 l+ n; g$ S) M/ j- v
  93. }+ g+ ], @* c) E+ ^# G) w
  94. 5 k% d% m! J1 b' U0 G' h: b) H& f
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)/ ]7 L% m( k& t3 Z
  96. {& N: s  @. Y# X, f# w; N
  97.   FILE *fp;' x; W; a5 d8 ?7 }& C! C4 Q
  98.   char *key=NULL;. T6 i4 I+ _$ F+ l  s
  99.   char version[MAX_PATH];9 A. s( W+ t, V* }
  100.   LPUPDATEFILE file,olds;7 }5 }0 y0 G  L8 ?2 i: S: V
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 v& |1 r  r6 \) v3 B) l; s
  102. . [+ Q) u, A0 f) H! q
  103.   UpdateList.clear();
    # a- V9 S. E4 j7 I
  104.   UpdateFile.clear();2 k# N' X& n7 d6 s( |
  105.   if(GetFileAttributes(filename)==-1) return false;
    5 Q/ c: _' w# m
  106.   if(!(fp=fopen(filename,"r"))) return false;
    - @$ [; H7 e$ i, D; ~$ V  E
  107.   fscanf(fp,"%s",version);* J/ H9 X, w5 k
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }% C0 e3 p( }) R6 R
  109.   while(fscanf(fp,"%s",version)!=EOF)& W/ \5 b- t/ B/ P8 x
  110.   {
    # M$ |2 Z, n( e' n2 X$ r1 l
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( _$ K8 e' J! {8 G/ f0 e/ C: J3 X
  112.     fscanf(fp,"%s",file->path);3 q- o/ E* X. }7 ^
  113.     ReadFileNames(fp,file->file);
    : ?+ [7 m+ @7 y1 [; j* I; a, ]" d" x
  114.     strcpy(file->full,".");% ]" Y4 f0 }8 A/ Z1 t! f
  115.     strcat(file->full,file->path);
    6 }+ S  f) M( c9 n
  116.     strcat(file->full,file->file);
    8 V5 v- L  W' H* V9 t3 B6 l+ L( K
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())# s0 b- W3 v6 F+ M; s0 F, p9 g5 H
  118.     {
    ' ^4 q9 H) i8 t1 l( f
  119.       file->vers=(float)atof(version);
      i' L/ n4 W& a& f& S1 N
  120.       UpdateList.push_back(file->full);% l6 h+ K$ V8 _
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    / F( x( d5 h( ^* |0 r/ X) F
  122.     }
    " j' J( K% S3 A: U. A3 a" L, N: {
  123.     else
    ' g' [- x# ^; z; {! V) E
  124.     {+ p3 {- b* ?4 U! b$ H. x2 ^. Y2 ^9 a
  125.       olds=(*p).second;% I7 `" }; C* R7 `  s+ U9 B* ^; N' s' R
  126.       if(olds->vers<(float)atof(version))" \; O0 g5 m- C4 M. G
  127.       {
    8 P7 s$ H' c  Q; l9 Z
  128.         olds->vers=(float)atof(version);6 k5 b2 \5 A2 _
  129.       }
    0 }" v. N# U9 [4 e$ r
  130.       free(file);; F+ _' G# w' @5 F: j( y
  131.     }3 L  u) d/ e7 m  p# m, g* n; c) l, G7 T
  132.   }
    6 R1 l* I) |/ q. f
  133.   fclose(fp);
    + V+ k% b% i! H' |( S
  134.   return true;
    4 s4 ~! z- c% }% O3 S- G6 m
  135. }5 i. C2 _& J: d8 E% I
  136. 4 Z" ?  }$ ~1 e! M1 t
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)2 y' V* y+ s7 g! s; r/ T4 [* H
  138. {0 @! m, `2 K$ L
  139.   TCHAR  szFull[MAX_PATH];  H; V  ~2 H, N
  140.   TCHAR *token,*inter;3 G0 J0 G' C. o
  141.   *szPath=0;
    / {6 j$ x7 {4 {# K/ v) r
  142.   strcpy(szFull,szFullPath);2 ]" D2 d, t% M- G" {
  143.   token=strtok(szFull,"\\/");6 O9 f/ s" l" t. l
  144.   inter=token;$ Z$ y+ s; B2 f
  145.   while(token=strtok(NULL,"\\/"))
    3 A; W% ^9 z7 p. e( n5 n7 m8 a
  146.   {
    ; F7 U, Z) g6 _
  147.     strcat(szPath,inter);
    * s- ?. _) K5 d$ S  \4 c
  148.     strcat(szPath,"\");! E/ ?" g# m) h: {
  149.     inter=token;
    2 f- s% _+ Z% V$ m% d* G
  150.   }1 O) ~( B) Q' z  B
  151.   return strlen(szPath);
    0 P0 R( g( J5 V3 L5 N! O( I1 K
  152. }5 m# j5 u5 r. n' W, g
  153. 3 `# t8 h# A" s0 z) ?
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    / N! @; r* V! _- D$ C2 e9 D
  155. {
    9 e$ u6 l* G. L/ E% o7 F
  156.   DWORD attrib=GetFileAttributes(Target);3 g" s' C5 U6 u" P) H- @2 e
  157.   if(attrib!=-1)1 ~( P2 r- k; g3 C& y) g
  158.   {7 F7 M6 W+ T  l# t1 G/ q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))( _, `/ G2 R( G# P2 R% i
  160.     {% h' X1 R5 L5 O+ Y3 J
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);* t/ t/ \0 B: Q+ [
  162.       SetFileAttributes(Target,attrib);# S3 j+ X  e, ]
  163.     }
    - S5 b+ K7 s/ k! Z
  164.   }) h3 ~% b. y* p* G0 F
  165.   CopyFile(Source,Target,Erase);
    1 r% s# u' b6 [  Z% x1 m& h! [
  166. }% G( Z2 E: o1 p: h

  167. 9 }3 c  N9 I' y1 g5 Z/ y. v6 o
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)) a; s0 l  U0 @) q/ y' D
  169. {/ H! L0 G1 Q' c" A. {$ a
  170.      FILE *fp;
    9 M! O' b8 q- P! Q5 J
  171.      char  szBuffer[8192];
    1 D. U! |1 Y' u' [6 s
  172.   va_list  argptr;
    ; b  |, _5 J* `

  173. % t1 L2 v* a3 ]- h! h, O
  174.         va_start(argptr,message);( m/ `$ D; X5 b* P3 ?$ u: m3 ]
  175.         vsprintf(szBuffer,message,argptr);
    $ _+ X5 A' y- n4 Y( d0 h9 @; H
  176.         va_end(argptr);
    0 {1 }" S- j/ h
  177.   fp=fopen(FileName,"a");/ W' Q5 {2 e6 J6 J  ~% w+ ^2 _: V" j
  178.   if(fp)
    # O; v" x+ ^+ C8 C# C) L
  179.   {. m4 z/ ~6 _& g, y& h  g9 e; `/ V) }
  180.     fprintf(fp,szBuffer);
    4 X) u: o- v5 Y/ q( ]# K- a: ]
  181.     fclose(fp);
    / Y6 B) ^1 F( [: P' e/ O
  182.           _flushall();
    & H' b( N4 {9 P: R
  183.   }
    6 n' G; [4 h" S, Y9 D  P7 R+ w
  184. }8 B$ E, v: l3 @, ^& F% ?- z
  185.   T- q$ f3 w( q0 O+ I3 H* D, p8 q
  186. BOOL CRevAppApp::Fclearf(char *FileName)0 x5 \/ w$ A# g2 G
  187. {" W0 c4 T6 j+ N& s
  188.      FILE *fp;
    4 ]4 ^2 \- Q1 ?; C" i8 ]8 b% h
  189.     DWORD  attrib;. D. u9 q  X$ U6 ^% E
  190.   attrib=GetFileAttributes(FileName);0 f" N) F7 v6 S  z: T8 v
  191.   if(attrib!=-1)
    , K8 R0 l$ Y2 Z0 }# F
  192.   {
    & x( ?& r/ S/ i( D
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    1 a1 ]( Y) [4 W9 [* g2 l
  194.     if(!SetFileAttributes(FileName,attrib))  P, M/ n' a& }3 A. k
  195.     {2 Z5 ?, m  ?* G" k- s/ d
  196.       return FALSE;
    * r( O2 P6 y0 @; J  ]* k5 a+ e
  197.     }& d: y% |2 d# z5 j- S# B" J
  198.   }% W5 i7 s: \3 o# k; Y8 d% L
  199.   fp=fopen(FileName,"wb");3 O- {8 U$ e2 w* g6 b
  200.   if(fp)
    $ l; h0 {. u) V% m" y
  201.   {1 L5 g3 Z- I/ K/ q3 G. }: y' E
  202.     fclose(fp);
    . {/ c+ k6 d5 e5 E, C
  203.   }
    2 z9 I0 g1 @- V  G+ Y' k3 o) m
  204.   return TRUE;
    ' P* }* Z2 e1 Z7 F3 x- o0 e) d7 G
  205. }8 Q$ B9 Q' N- J+ ?
  206. 1 s  K) o. _9 Y+ u: e" ?- ?5 ]! w$ d
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    # T: `% |# C) T/ X' Z
  208. {
    " [9 _/ D1 D6 _7 h2 C! Z6 T- t- a
  209.   char filename[MAX_PATH];2 T% e. Y0 X# ]9 h# E) Z
  210.   LPUPDATEFILE file,olds;
    ! I" E* k" g$ D
  211.   std::map<int,CString>::iterator i;
    " x6 j+ J3 f# Y' H% g6 |7 _% o
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) G* d1 }0 e. O+ B3 Z- ^* f
  213.   std::list<CString>::iterator l;, a0 G- W) R- T3 s1 r8 b4 _9 E
  214. # @+ d* R+ O- h3 p5 D: U" A
  215.   if(bFirstUpdate)% ^" N' Z& D- ], |* o1 j9 e
  216.   {* @$ _' t. J+ u3 I( j2 i0 b! G
  217.     dwCurrFile=0;
    ; O+ H5 {: d1 V9 l
  218.     bFirstUpdate=FALSE;
    ' v8 O$ t; E, _: @6 L
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 b8 A) b. M  z' H; f) }# N0 b+ t8 O
  220.     {
      T$ g: z* z# o# a# c
  221.       dwTotalFiles=UpdateLocal.size();
    ' O; R8 C  R: ~% O0 t
  222.       dwDownLoaded=0;& {7 W; [$ w$ O
  223.       bSilentStep=FALSE;, |+ A8 g* e* ^2 p' Q4 b2 c
  224.       bCompressed=TRUE;4 n/ u  G7 n0 t" H. I
  225.       strExtLocal.Empty();/ j, |: Y& U" s1 m$ y: `% q* z1 i$ ~
  226.       strFullName=(*i).second;
    & y& z7 G- h! i: M9 ~9 a
  227.       dwProgramState=AP_CONNECT;5 v3 \* S/ q1 v' q8 r3 X
  228.       return TRUE;$ ]) [9 N4 d; s8 j0 ^% t
  229.     }
      v  s1 o; K$ ^, l9 V8 j
  230.   }1 p9 ^1 F# F" Z9 h5 ?2 \
  231.   else if(bRestartUpdater==FALSE); ^9 ]+ Y, E: }3 L2 W: V
  232.   {8 G% j. ?. Y& Z$ y; e$ ~+ `
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())8 V' z# d  D7 w8 p* m
  234.     {
    : v& T9 J2 g7 T0 Z" k7 u: M
  235.       file=(*p).second;5 a. U. E* t0 }9 k0 X( Z0 @& D
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - f  [2 y' V8 c% O4 i( k4 Q
  237.       {
      y  {6 _" d0 w
  238.         olds=(*p).second;+ `2 m% j  k* s' O. j" |
  239.         olds->vers=file->vers;
    5 Z8 {! ~; M; q$ m) B$ @4 B# d, Y
  240.       }
    * O  ?, J" x6 R& ?6 B
  241.       else2 V5 c- ~% }3 \/ O' Z: D6 |% I! Y& Z
  242.       {2 l* _9 ?3 k$ g) n5 R2 c) w
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, [- V6 r/ b# b3 y7 v/ E
  244.         memcpy(olds,file,sizeof(UPDATEFILE));8 q0 w+ P2 s1 e8 m) j, J
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));; n6 d7 l/ y$ ]& d* t- J: [9 `0 C
  246.       }
    : b! I( ^! W2 f" M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    , j  s% L3 b2 \0 B3 @& X) g* c
  248.       sprintf(filename,"(%s)",file->file);
    1 {/ C5 ?" p" B- j
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 f' U- G7 @3 y/ p8 T
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }8 o; i" B3 J4 @  I  R/ {3 x% m( ?
  251.     }
    6 q" E. N* |% D; o2 @
  252.     dwCurrFile++;: ~+ M! Y1 u! u; [% E! B! f0 ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 J8 F, P& Y8 V# b) \9 l0 N. B, x
  254.     {! i7 U0 v# z& E2 O" q
  255.       bSilentStep=FALSE;7 B5 F' a$ O+ n0 b9 o( s' C
  256.       bCompressed=TRUE;5 ^2 G. l6 ]6 ^& c. a( r% i, \
  257.       strExtLocal.Empty();/ N" ?7 F- w" K
  258.       strFullName=(*i).second;, j- q! L" e1 E3 h0 ?
  259.       dwProgramState=AP_CONNECT;# e/ O' m" j+ Q4 z0 P4 P
  260.       return TRUE;
    & c; `! }6 P0 t* H
  261.     }
    " g& R6 y  ~7 O$ w
  262.     if(!bRestartUpdater)8 t& B; a- \) q# |; Q
  263.     {+ ]1 s1 c7 d/ k. A3 i& K) O0 M
  264.       int iCurrSize,iFileSize;9 |/ d( k* e/ U" a/ {. Q
  265.       iCurrSize=0;
    1 h/ o* e; K* P1 l
  266.       iFileSize=UpdateList2.size();
    " Y) }% Z% L2 U- H2 a% b. Q8 l
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");' h+ W  f& F: N8 k/ ^& ]" j
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");2 ^+ W7 z  U- ^
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! X) ^4 f' p; h8 _$ a7 ~! [% V7 _
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# x8 \; M" `/ L+ n& R! R
  271.       Fclearf(".\\update.dat");+ s! k9 J+ U/ _2 m
  272.       Fprintf(".\\update.dat","Bloodyf\n");7 P; _" W5 S( A" i3 v, T6 s  F
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / C& c, Z/ R4 L; I- w# |6 H& ~: l
  274.       {+ v! u8 F. R! `- h
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    3 n; ]) J8 ~0 B/ V0 N
  276.         {
    " o/ l" i) H- c# I
  277.           file=(*p).second;/ M+ `" @4 h0 c
  278.           sprintf(filename,"(%s)",file->file);# u5 f, q; Y* W: g3 n( c- A+ z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 d+ f1 [, O/ Z& e
  280.           iCurrSize++;
    $ H) q  ~5 q! j: A) L8 _
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / Q: g" k2 d, e7 [% z
  282.         }
    6 s. F) }7 ]0 A& H& N" `
  283.       }
    ' q* R* r1 H  `) ~* j
  284.       unlink(".\\update.txt");
    6 p$ w, T* r# i4 ~  M; ]; Q* ]
  285.       unlink(".\\update.tmp");. x& ^, ~0 s5 o5 x8 i  D
  286.       Fclearf(".\\checkversion.dat");5 o4 J/ n6 r- O# \
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);1 e6 t6 h: f; s6 t4 W' ~* M5 c5 b
  288.       if(UpdateLocal.size())% E5 E( l0 E8 c, u4 O) G
  289.       {9 f# V) B6 S2 D5 E
  290.         UpdateLocal.clear();
    , w1 T( m! \6 w! Q. d
  291.       }
    ' P8 s5 @) ^  L  T) b! _0 k: C
  292.       if(UpdateFile3.size())9 @+ f4 n% r* e% K
  293.       {, B+ m8 A6 D8 F3 s. G6 L/ h
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 [* P( K  N; U/ Y1 P$ c0 n
  295.         {
    : d* n, \, q5 m, _$ h8 `
  296.           file=(*p).second;$ T4 t6 W( a6 b  W  y$ m9 s9 W
  297.           free(file);! r: ~# z. x. S- T+ w' U4 R
  298.         }# O$ w" `: |) H/ U- p4 M# K' p
  299.         UpdateFile3.clear();
    , o4 {" h5 G( U
  300.         UpdateList3.clear();" g% Y' \1 \( a- W, n
  301.       }' }5 {6 Z, L& Z9 v7 n; i8 ]& L
  302.       if(UpdateFile2.size())5 `: g0 H- a+ j) T- y9 j) F
  303.       {
    # |' I4 Q& i, J) N
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& V' O. h) m, X" S
  305.         {3 R5 h& A. k" f. m- S; c# X
  306.           file=(*p).second;& B1 }* e1 v6 w4 L3 R7 K4 x3 x
  307.           free(file);2 e0 w# B% f$ ]6 L! N
  308.         }
    # O8 e2 l- j. N! H% c3 j, E* k: t
  309.         UpdateFile2.clear();
    * e( g; V/ ~3 o* z
  310.         UpdateList2.clear();
    ! j, ^+ {4 W. E, b2 D+ {! @! K( F
  311.       }
    ( W! O% m4 c. i2 t: j6 v
  312.       if(UpdateFile1.size())
    + ?. [- x& g8 j8 Q
  313.       {7 o) y( Q( w& _
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 V# d: s- F5 u$ u+ P( Y6 z
  315.         {
    ; e/ }9 J: e2 v  r! Q
  316.           file=(*p).second;9 U8 t, p  b+ a( M$ c
  317.           free(file);# t% J  M5 [  ]( Q# ]
  318.         }# k4 e( Y9 v0 D. ]5 C" m& a' h+ ^
  319.         UpdateFile1.clear();, L, `4 S$ N& d+ q6 T( F9 o7 P
  320.         UpdateList1.clear();
    " D& |9 g  H5 x" V# d: V5 a- A
  321.       }4 q) w7 j. |1 V9 t: ^9 x0 B. W
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    5 z: t+ O' k8 B" H' r$ N' b: x
  323.     }# r! b" C/ K9 d) S+ r; n( Y
  324.   }
    & n1 G) N. y% f! X' n- F) S
  325.   return FALSE;( i2 l, I0 m( ?& X( B. F
  326. }
    8 w2 [; a- W/ H8 K2 R6 }

  327. ! s7 \1 w, o: {
  328. void CRevAppApp::ClearAll(void)! O8 F3 ~# j4 a4 m! z3 l+ S
  329. {
    $ g4 x  W; k: ?3 w8 Z' J
  330.   LPUPDATEFILE file;
    * y  w+ r* }" ~5 k" M& z+ J3 c7 q6 G
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! u  H/ J5 |2 W2 F. K- g

  332. : B: n; d* n6 j7 k
  333.   if(UpdateLocal.size())
    ( W; v. R$ S. Y  @  ~3 V( k6 o+ f0 r7 Q
  334.   {
    6 X& e- |3 Q0 G! x( `3 k" Y
  335.     UpdateLocal.clear();
    : V+ w4 r+ L: e: n# \' F
  336.   }
    0 G; U. O6 E- O# m
  337.   if(UpdateFile3.size())9 X3 u6 H. G. P' {0 ?4 p
  338.   {! H. }% x1 d- E3 b5 |" Y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 U* r# q/ Q7 W% e% N* T) w
  340.     {; O' N1 V' K* e9 j3 Z
  341.       file=(*p).second;6 O0 ?9 |  D# j
  342.       free(file);9 V& s7 Y' u: k1 C9 {: S; O  S
  343.     }
    ! N" p3 ~1 O1 v8 I. a; {
  344.     UpdateFile3.clear();/ B: E9 d4 Q' W
  345.     UpdateList3.clear();
    ) Y  \9 h6 D4 ]
  346.   }
    ) ]! d: R5 k4 @
  347.   if(UpdateFile2.size()); M4 [. s0 P: i- A5 r; H
  348.   {
    " u. i. d6 g% @* u# a) m4 q( z! ?0 A) |6 e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    2 _5 c1 @& a( w8 U/ ~: H! J  _
  350.     {
    4 A* l. `" p* t
  351.       file=(*p).second;
    ' p1 k  d9 v. a( S2 D: p
  352.       free(file);; y7 q: ~$ _! t, Y
  353.     }9 Z8 a5 h  m! K' f0 P! A
  354.     UpdateFile2.clear();  a3 Y: P9 _' d
  355.     UpdateList2.clear();: |" }! P& e8 G* Y  r& J
  356.   }
    . C0 |: c7 Q# X2 V
  357.   if(UpdateFile1.size())
    . ]) i. D& F: ?: S; ?, N
  358.   {* n5 J& s" A+ g4 S. {7 n& n
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 D* A  g' {( e3 e. i/ I. s
  360.     {8 m/ F% T' l8 X( u; w
  361.       file=(*p).second;4 C6 I7 `+ n1 J+ a  v* @  K3 k
  362.       free(file);+ K2 I2 S. j: o+ W/ K9 L; Z3 d
  363.     }6 y, Z0 t" L, `& ^
  364.     UpdateFile1.clear();
    2 k2 f2 E& r# b5 P
  365.     UpdateList1.clear();: A3 B% s. V: e  m3 @6 m3 |; A
  366.   }
    ; _+ N7 g9 _- t5 R' r
  367. }  ! v! E5 F& U: A1 U5 B
  368.   : z  r0 g6 e# r; x8 w  ~
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    $ D- a9 J- k) h
  370. {, c: {9 d* W; Z2 q* U) C
  371.   int c;
    6 a- r! J" t& U5 p: ~7 S& z
  372.   LPUPDATEFILE file1,file2;9 e8 m! C( F+ ]. |; I
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;/ R* o+ n1 S+ i' y
  374.   std::list<CString>::iterator l;% Q  n' u2 R) u- Z# x* S

  375. ) ?& W! m  n2 a' T  |
  376.   UpdateLocal.clear();/ f1 A( T3 L" V. O0 l+ Q) v  {8 D; ~$ ]
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 v% X6 t8 ~0 ?' u' w
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);; u& {, o) L) a9 O7 U8 V/ o7 x
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);& a$ F) ^' p& K: H9 G5 Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);1 F3 i1 B. ~- j9 m
  381.   if(UpdateFile3.size())
    ) r' b" B7 x' W
  382.   {8 E+ [; D+ h( x2 p3 N
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - L& ^' q  E, p
  384.     {6 O9 K) t0 U1 [& s4 O7 V3 p4 P
  385.       file2=(LPUPDATEFILE)(*i).second;3 `) R5 ?1 d2 H9 g
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 U4 L/ a# {' b/ e# Q; ^* ~  w: j
  387.       {
    $ p. D& x" c! V; l1 Z
  388.         file1=(LPUPDATEFILE)(*p).second;1 \3 j/ E+ U# K8 P! m) u& z7 O0 {0 l
  389.         file1->vers=file2->vers;
    ' R( t8 Z5 w% z( D
  390.       }( W# e, P- C0 f3 i' q; a4 u
  391.       else
    ) l  H* S6 t9 l6 `3 H; x2 s
  392.       {- D6 e# `8 z. I: H2 P" w& w
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 b! l0 B: L* c0 @
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));& I9 G- i9 Y' l5 J7 ~- R' c/ x
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& E) h8 S; _5 ~& f! T; V
  396.       }
    ! N, f0 z- n! W2 B: ^
  397.     }
    0 d* w% n' s; o5 {4 ]" Y! z
  398.   }. T* c% v% C, O2 g, ~
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++); c2 W. @2 C! _, d9 q
  400.   {
    6 W* Z3 H1 e7 y5 f6 m" T; J6 O
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ! Q1 b' W" _9 ^6 V
  402.     {! d' ]- y& g: l2 f& \3 [. N
  403.       file2=(LPUPDATEFILE)(*i).second;
    - E3 j$ {5 f( `; f2 z) i: e
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ Y3 N9 _( @& q# T
  405.       {) y/ D) e. d5 W6 f8 \& b( m, z
  406.         file1=(LPUPDATEFILE)(*p).second;
    , @3 d1 o# v2 w. \1 l3 O! `
  407.         if(file1->vers!=file2->vers)- z+ f6 z" P7 b/ U
  408.         {5 u* J# V/ l$ ]8 D* M. r% A# C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : Z3 B7 E2 E0 s, W% n! _
  410.           c++;
    , X) D1 `. }, y
  411.         }' w) R, F1 P% Y7 M+ b
  412.       }
    8 u$ ?' d# m# m. q4 h' b% w
  413.       else4 f3 _& s3 g( C( W4 @) A( @* q
  414.       {
    , `# W/ L9 m( X- W! i
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 |/ `' L# g( ]3 u: n
  416.         c++;
      F, B( L4 e4 @8 W: o
  417.       }( U, e, m1 z. P, o) g" c
  418.     }
    + }5 H& G% V& e2 F; y; N* O
  419.   }
    ! Q& _+ n9 c& |/ n' c/ T
  420.   unlink(".\\DownLoad\\update.txt");. t6 S$ j& D1 c: `. ]2 I7 e6 d
  421.   if(UpdateLocal.size()) return TRUE;! C& [# a: X0 C1 R2 _) b: s
  422.   else                   return FALSE;: K! d0 f: ~+ b+ i8 b
  423. }
    9 Z3 L( l2 ~- ]
  424. $ b  E; J7 P) ?5 w
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    2 K2 O. E  e+ n& t( n: A! O! r
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ s9 c; g/ _( E) e
  427. 9 \: `9 O$ }. x% i2 V
  428. $ {$ b. U5 @; R4 N6 I! \6 S! Q

  429. . T; k* b4 |9 g/ x1 ^$ ?8 X* j. H
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ' b" L$ x( O# K0 i
  431. {, b+ q3 r* \5 m9 m; V3 G, y; d' v! M
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    6 a9 W- p) b. M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  w* L% W1 R1 R, M1 ^  q3 D
  434.   {5 X5 ^3 q/ j6 |* @
  435.     char szLanguage[50];" b. y* o8 \5 X2 x5 m% h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 O- `# Z7 b. C  m
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    6 @% N( V( X, y9 T; u
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ d% D: @( D2 z, b+ x# y
  439.     else                                   m_iLanguage=ENGLISH;  e7 ^% K( C& F
  440.     char szRegister[100];/ y' W. v4 A& W, l/ _6 V5 e* c
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : J, o/ W% l* D$ L3 ]5 P
  442.     strRegsName=szRegister;
    3 `/ D  N' u( l
  443.     char szPatchURL[100];! M$ Z) ^# \, r( s6 ]0 b& D! [
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + p7 ?5 H* V& e
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & ^$ B8 j& a4 m, a' j
  446.   }% E3 u& |+ f6 N1 L1 E
  447.   else3 K, }! c& J; d* M
  448.   {
    * C5 ]" Q$ W% J1 S" v. W4 l5 t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& u& X8 B  p* C! B2 E( g- g
  450.     strRegsName=DEFAULT_REG_URL;  I9 x0 b8 \9 F
  451.   }
    ; Z7 Q( B& ]) i0 ]4 D; W
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    4 X; q9 F" x5 `, {
  453.   {
    6 Q, A! E  i* N. ~* x1 X- {3 d8 Z
  454.     char szIP[50];
    % Z) p7 E& J; u% J
  455.     char szDIR[300];
    9 l) |( R0 h! Z6 W" `4 N
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    1 w1 Y* b" |! @* e1 P: _
  457.     {8 G) \, J8 w+ M% |
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");- h8 u+ L( M$ f( s4 b
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    - ^  [. l8 F  i+ r  ~$ z
  460.       strHostName=szIP;
    1 X$ Z2 [0 z! b. N
  461.       strHostPath.Format("/%s",szDIR);0 d1 \( t! J6 k% ~% I
  462.     }
    4 i# {% J, ?* p" A
  463.     else
    . Q5 ?4 |' ?# t/ u; ]
  464.     {5 b2 _* Z4 r' ?/ d1 x
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # n+ E9 q. T7 g8 w
  466.       {6 |! W3 P5 b, Y7 |  _- r5 j, U! N
  467.         char szLanguage[50];
    . K) ?  K4 [5 W8 y! [$ W4 k3 A
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + m# e+ U7 s. Z+ ~8 s: a
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 h7 p7 T- z% k1 _: H# B
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 m, n5 z7 o+ Q  ?
  471.         else                                   m_iLanguage=ENGLISH;
    / X) ^: H& i- Z* B+ S
  472.         char szRegister[100];( H) C4 I% G; ?9 O
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 R; L* L% V# l  e
  474.         strRegsName=szRegister;
    ' r! p9 v8 r* E  h2 S* N
  475.         char szPatchURL[100];) [- }1 j# t% _* g! u9 r
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 a* X7 g/ X: W- w8 k$ Y& y5 C# ]& ~2 O
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 y- w$ X4 X2 y% u" |$ b1 ]
  478.       }
      I' J8 B4 X8 f) g* ~
  479.       else
    - `' T, p, ^$ J: ]  P& F% _6 i  H! _
  480.       {2 ]/ X0 {6 w, a
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    5 n4 z' Q7 i6 H5 N2 D  T* `1 c
  482.         strRegsName=DEFAULT_REG_URL;
    ' ^( ~9 V. {2 ^: _7 _. a: o
  483.       }
    & x% D3 e/ B' U4 ^9 r
  484.     }! \) y+ ]* d9 G2 L
  485.   }8 y' ^7 |: O5 G( E* J+ B3 e" _
  486.   return true;4 N! w; E) W+ W% \
  487. }8 {& u1 B8 N' w8 x0 M3 Y' x; M

  488. + e! q- @% ^0 E, U) I
  489. #include ".\ZLib\unzip.h"2 R# v% g2 i. L+ b3 i$ N
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);% D. @+ U* G1 M  C
  491. /////////////////////////////////////////////////////////////////////////////4 s0 f9 F0 ]& ]0 V
  492. // CRevAppApp initialization
    $ p% I2 C1 e+ ]% M
  493. / F' ^3 l/ J& r
  494. BOOL CRevAppApp::InitInstance(); u7 l& R& m' a# n0 H) n
  495. {
    & X$ k4 @" k5 N
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    : W; v' y8 m6 Y  d
  497. 1 `6 l/ ?: v6 J5 C* P
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 o* q/ P) V7 Z, c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    " n, [# d1 g' Q/ m
  500.   {* K7 t9 M5 `; ?3 X
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");* K& {* E" U: M$ ]2 ~1 O. y' r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    5 s7 m. y% L% g4 X
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))3 T5 C/ O$ o. q, i4 q+ i  a
  504.     {
    8 F( s- A2 |, p0 ^* f- N+ w" O
  505.       strcpy(szPath,szPathTarget);) V- E, k4 \) A5 Y4 |, \1 ]( B
  506.       SetCurrentDirectory(szPath);' C5 z6 ~2 H0 B* g% c
  507.     }  m5 F# b6 H4 Q- f, T4 w: R
  508.   }
    - ~) G$ a) d: E2 T% H! Y
  509. #ifdef _DEBUG" [4 E# f; T8 d9 V
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 K8 a& a) {" o8 Z& M3 B( N
  511. #else* I0 X+ C+ w, w5 \
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " m) S  {! V# R/ J4 x+ ~
  513. #endif
    9 C' c0 f. q) |
  514.   {
    * |; l* j  \( A& H2 p0 V1 j1 j
  515.     char tempFileName[MAX_PATH];( g3 e! O8 `, \6 }
  516.     strcpy(tempFileName,szPathSource);
    " O, U2 P: p* y( u
  517.     tempFileName[strlen(szPathSource)-12]=0;9 ~, V. u4 C+ M' U
  518.     strcat(tempFileName,"\\$CSUpdate.exe");* b$ `! m3 H6 Y) M
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);; R' `" `0 ?) B$ V$ e3 i) `
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ) V& D$ W+ d& F! a+ M
  521.     return TRUE;
      F. S3 O- _0 p+ Q9 S
  522.   }0 j# L& G; P5 I4 h, T
  523.   // Nuke 0118: Delete run.exe1 Z3 j1 _3 A6 }" b( t
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );" G+ T5 t' z0 o. s2 F
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ; j$ `/ w7 T3 k: }3 h
  526.   if(!ReadCfgFile("Config.ini"))+ r& u/ ^' h6 w. @* ^4 z
  527.   {
    8 o) r* }0 D2 y: i1 U
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    " E: C) c1 r% n- O; h2 t
  529.     return TRUE;
    5 D5 V2 C( c# |1 t3 ^8 v7 l
  530.   }+ Y: u3 W2 y) b! ^' ^: v
  531.   HANDLE mutex;
    3 J, e/ e; U1 [8 T* P3 ^5 e  [; n
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ' k& P3 i% b2 J  o9 w- J4 s& _$ G
  533.   {1 e: A1 f- N7 M1 L
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)3 J8 }" }1 j$ w* d, q) D
  535.     {$ F  j% c% n1 R, x' X
  536.       CloseHandle(mutex);* L% r  P  b( s
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 {! ~& F  b3 z* u, l2 D% }  v6 X" C
  538.       return TRUE;
    8 m- f; m- p! l: ^8 i
  539.     }
    7 ]- o6 J, r. K4 `8 E4 _
  540.   }  
    ! j) q- `. u+ S
  541.   CloseHandle(mutex);/ U: M; G  ]1 Z/ Z, y) ^
  542. ) l* i% }2 @0 I3 t' m
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 l5 J6 q7 _6 `! M4 h/ X1 H: N
  544. " x% t5 {$ S) I; q8 C, R
  545.         AfxEnableControlContainer();( i* d+ D7 L, Q  C/ ?
  546. ! ~- Y3 `9 n: o5 i# h- i! {
  547.   bCanUpdate=FALSE;. h; K; W& l- e: w' i/ V) k1 J7 N
  548.   dwStartUpSteps=1;4 m( J1 Z* R) ^1 _# L  b' U
  549.   dwProgramState=AP_NOTHING;- `; o) L1 G* ]4 U8 x% g% j- K) a
  550. ! ]5 c7 w+ Q- l, t
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    0 C" y3 {" k- t9 _

  552. ) l" L3 ?, V9 ?( u5 g
  553.         // Standard initialization) f5 U" u& ]2 O3 [
  554.         // If you are not using these features and wish to reduce the size; N. K. \- Y6 o* z
  555.         //  of your final executable, you should remove from the following, `8 X2 E8 _& `1 ^# a
  556.         //  the specific initialization routines you do not need.
    + n+ D, w  u0 N( U$ a. j2 z  z% I

  557. & V0 [" k/ x3 J
  558. #ifdef _AFXDLL' z" G- q6 w" ~1 Y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL) k( [3 _  S5 U% y8 ]4 F* b0 f
  560. #else. M- ^" d) F# E
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( W/ P( q) [' X/ ]0 _1 J+ {0 Q
  562. #endif
    - ~' I1 F9 r) }

  563. # a  w2 M* |. e
  564.   dlg=new CRevAppDlg;. _7 h! Q8 B* @( }/ T( k$ @; t
  565.   dlg->Create(IDD_REVAPP_DIALOG);) F9 |; E$ h& Y( v) j4 L
  566.   dlg->ShowWindow(SW_SHOWNORMAL);% Z5 m7 r% C6 `& w8 ]7 R6 Y
  567.   m_pMainWnd=dlg;
    + L0 |" [$ o; X
  568. 6 z6 F6 K! Y* o8 e: q4 o+ x( i. t
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 K. O8 m1 V% L9 e0 W

  570. * U: ^! Q+ ]* z9 W& E) y" x
  571. //  GdiplusStartupInput gdiplusStartupInput;! `) B$ _) t: G
  572. //  ULONG_PTR gdiplusToken;
    , D0 G, B8 l8 m4 l
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ) g/ Z  ^+ \; l5 Z- f
  574. 6 F* D/ G! A# }1 M( f* w1 D- z6 q
  575. //        CRevAppDlg dlg;6 g3 L5 ?( u5 h* ?: A7 y! t
  576. //        int nResponse = dlg.DoModal();  c# J' C) c( l2 ], _
  577. //        if (nResponse == IDOK)5 _3 Z( b2 C1 P
  578. //        {
    5 ^8 N8 q9 U8 `% C/ M. l" \
  579. //                // TODO: Place code here to handle when the dialog is
    ! C8 N) a- x' o/ ]! h0 H1 X; v
  580. //                //  dismissed with OK  C) j3 L% ~6 |, C$ R
  581. //        }
    3 }% \& n/ R/ G2 B2 i
  582. //        else if (nResponse == IDCANCEL)
    ; x- z# g) @2 j; U0 ^
  583. //        {
    # ^0 D  v: F/ w' p7 T7 j
  584. //                // TODO: Place code here to handle when the dialog is
    . k' \9 O1 F# v2 Y  |9 A4 `
  585. //                //  dismissed with Cancel: t) D. V# z! `$ x$ h* G/ F7 J8 h; Q
  586. //        }
    ! q8 h9 ?  j" z9 T# o0 h7 J0 F
  587. ' Y4 r0 r: n* V
  588.         // Since the dialog has been closed, return FALSE so that we exit the8 ]# f, D; \  _( g9 H7 r8 }! v
  589.         //  application, rather than start the application's message pump.# j& ^' R6 s6 g: _6 O
  590.         return TRUE;: t% w+ i* C+ f2 r! r
  591. }1 `9 J% x% c9 l" j
  592. : P% Q; _9 c( D& ?: C- F
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 ]- ]6 X  O8 m7 N8 w  |9 @4 X' C7 D
  594. {4 |! i/ `. M% Y7 M
  595.   int i;8 B; T5 P' U2 S: j; S
  596.   char *szRet;9 @6 P+ X2 I! f
  597. 1 M6 {  {5 z$ K& x- n0 k; f; H
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    . \+ `: d8 o2 s, b' {1 Z/ Q
  599.   if(sztoken)
    ! h* G1 Y" N& P# l# k' I: ]
  600.   {" X7 z& a, x, c
  601.     szRet=&sztoken[itoken];
    1 @; n& o6 g7 z% ~5 E
  602.     while(sztoken[itoken])
    $ s+ `  H; l( [% G
  603.     {
    . i% {( e+ e6 P2 ^* J# P
  604.       for(i=0;i<(int)strlen(token);i++)
      Q; D. f" S  f1 `. ?: l
  605.       {, D: C3 s6 x9 u% H+ @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    6 ?  L+ l1 _% L
  607.         {
    " K- ]* j5 I/ G2 y4 y
  608.           sztoken[itoken++]=0;0 m8 N- _6 P! m$ ?# A# w
  609.           sztoken[itoken++]=0;
    - a# j. D3 k: ]: l) u: v8 a. h! s6 X5 k
  610.           return szRet;8 Z* |1 P9 p5 x$ Q- |; [! }
  611.         }" z/ O, w1 E, d2 B
  612.       }+ E. Y$ v6 I6 L* c9 P; U
  613.       itoken++;
    " L% v. p% k7 Y0 r& ^. A% i
  614.     }
    * B8 a( F/ [' {5 f
  615.   }
    , K- S$ y0 a; d
  616.   return NULL;
    : D* S, Z. W/ S; J' C! z( H
  617. }
    ; J! y# h0 C; H
  618. ' x3 j0 ^% z/ r- i( U4 B1 P
  619. void ProcessProc(long Total,long Current)
    + ?: f- W+ ~) [, e% H0 N: M
  620. {7 v7 j5 F& @' R; H7 w/ _6 @+ r
  621.         MSG msg;6 _5 v; j7 O: I4 ~, w2 T
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);: ~$ ^5 i+ }, b4 G- ~  h7 M% A
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    / w) C* Q. S# k9 h# ?! p  i1 y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    2 h9 L0 L6 u+ z7 u( _% t9 h
  625.         {
    ( }. g  l: y! c
  626.                 if(!GetMessage(&msg,NULL,0,0))* g3 C2 o! U& F- Q& D2 }
  627.                 {- I( ]' `, a) Y
  628.                         return;
    ( ^# N5 b/ G* _* D! J# W! _
  629.                 }
    4 I' ~/ z+ Y4 F5 C! E% K/ V' }: P9 u
  630.                 TranslateMessage(&msg);
    1 \! D  l/ ]% s( u3 x
  631.                 DispatchMessage(&msg);* X* _: q& W2 l6 D4 O$ \
  632.         }        - _' L* w  F; P# D6 r" s
  633. }
    . a4 ?$ m6 r3 _* `' B2 a8 ]
  634. 6 s1 R1 `3 x* b2 Z0 j. o1 A
  635. BOOL bFirstChar=TRUE;
    3 r0 E3 j% y$ N
  636. & ]  s* e! A6 p( ]7 a0 T
  637. BOOL CRevAppApp::OnIdle(LONG lCount)0 y& s7 m& A3 ]" R: C" _! d
  638. {
    + B1 ?0 A- x, I+ _' u0 M
  639.         // TODO: Add your specialized code here and/or call the base class
    " v  f+ ^! H1 D9 Y
  640.   switch(dwProgramState)
    8 L, ]1 y7 }1 Y  T4 H1 t! V2 w
  641.   {. ]5 c8 h, r+ Y; h, P; v5 o
  642.   case AP_NOTHING:0 ~# e! B7 D) D( g% {
  643.     switch(dwStartUpSteps), Z6 N( D+ S" V5 z+ u8 ~  ?3 h( t5 b
  644.     {% _. q3 d' y- m: Z  F8 F
  645.     case 1:4 w4 P: H* d- z, e- P6 U' w0 r
  646.       {' t1 X2 A: {8 e& P. l5 P2 G9 K5 N
  647.         int i;
      z' F4 b( E7 h0 _. o4 g
  648.         CDC *pCDC=dlg->GetDC();0 a# L2 D' t2 w" y9 C5 r+ g/ Q
  649.         HDC hdcwnd=pCDC->m_hDC;  O. R5 z9 |6 v, `
  650. //        Graphics graphics(hdcwnd);
    5 H3 N( ]6 P' X% t6 z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    0 n" {) V* f1 L- R0 P5 |
  652. //        INT iWidth=bitmap.GetWidth();2 H1 F, v1 b. k7 H% v( a
  653. //        INT iHeight=bitmap.GetHeight();5 \5 W9 ?) \4 ]' }) V: P' Z4 y
  654. //        Color color,colorTemp;
    9 k- N, f9 g3 Z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)" U* p$ U7 X8 Z/ s" g# C1 m9 u
  656. //        {
    " q4 {  v: U+ M1 n: C2 q6 g* J8 [
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)" S0 \0 a% [. j- q7 h, F  ?3 ~
  658. //          {
    1 a  `: \/ y/ F+ m7 ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);( Y% M2 ?7 g, l' K' I; W
  660. //            colorTemp.SetValue(color.MakeARGB(
    - R9 a+ k7 H2 x: G+ ~
  661. //              (BYTE)(255*iColumn/iWidth),
    ) F/ p% l# A+ j& t. X6 b
  662. //              color.GetRed(),
    * \9 r! ~8 ]& a  R# p3 z8 P
  663. //              color.GetGreen(),; Z* q& c; w7 L
  664. //              color.GetBlue()));6 p7 ]) `( z6 {
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);% u- |( {* E1 }* c3 S6 x4 y$ Q0 ^2 p
  666. //          }6 m, |* i+ @+ \+ a0 N
  667. //        }. i; \3 |! G, J
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    0 ]% n0 O7 U" e6 `6 Q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ }7 }; j- W0 D" y# E( G( @
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");2 j4 D( M$ a- t/ u; v% v: l5 ~( b
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 j: U  C( n( @. K1 W& D+ x
  672.         for(i=0;i<240;i+=8)# _" Z6 T; q! B( Y
  673.         {8 D& v$ v1 Y$ S' h2 ]; q" b
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! }6 i6 k6 p5 u& T4 `
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; m, n. @9 W9 X; G
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( ?# y8 x4 m1 _
  677.           Sleep(33);; y: n8 X/ m! N2 A3 C
  678.         }
    ! R2 G. h' g7 k  W1 C+ ]) m( F
  679.         Sleep(1000);
    0 I. f- {) P3 _9 y
  680.         for(i=240;i>0;i-=8)" h, Z, e- c8 {/ o& [. e. {( j6 o- \
  681.         {0 ^  Q# _; V8 \$ Y8 f, e
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ |! M0 n& p( U6 b: g6 y
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 T  y2 D* Z6 D5 q3 o1 g' e8 C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : s2 ~' S) |# ?. X4 C6 K
  685.           Sleep(33);2 r' B+ O, r3 h1 `
  686.         }
    0 o3 ~) M# o# P/ Z+ |  O
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);/ T$ B+ }$ @2 o* O9 K
  688.         dlg->ReleaseDC(pCDC);
    $ o; f$ M* h( I4 W
  689.         DeleteDC(hdctar);
    / V* }3 t# _" i" K
  690.         DeleteDC(hdcsrc);
    * O' X6 B7 s& q$ b
  691.         DeleteDC(hdcorg);
      ]5 H! r, q6 S0 G
  692.       }
    ! h3 F3 \$ x* B; L# D5 k. d
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    9 y0 _; V( H" T, @6 j" W! y6 a2 D
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 {% N* K9 u/ j
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    9 K7 I% ?! C& f5 S* _
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");2 a/ B0 b2 J9 A
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - r+ K4 ?6 s( ?$ G9 a5 v/ ]4 Q
  698.       if(!Dn.Connected())
    # ^& U* y3 D' a" ]6 j) c- X
  699.       {
    , j7 R) r/ B0 {6 m& ^  ]( p
  700.         dwTotalFiles=1;6 s+ D% r9 V$ ]$ D3 |3 |9 U
  701.         dwDownLoaded=0;
    8 O8 J; w- W, d7 N/ `: g
  702.         bSilentStep=TRUE;0 E  Z3 P; u6 K4 `2 L
  703.         bCompressed=FALSE;
    $ D+ |. M1 F3 C: F: a
  704.         strExtLocal.Empty();
    $ C- h  A. X' u: C9 L( Q+ w
  705.         strFullName="readme.txt";: h( U& y/ \2 P* m. e/ W
  706.         dwProgramState=AP_CONNECT;
    & C" r. Q7 B5 @8 U
  707.       }$ R! v3 r' Y2 \( ]( `1 U
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();: N+ I1 W2 l: c$ U5 \
  709.       dwStartUpSteps=2;
    ( p7 d- a1 X8 R) G) l
  710.       break;
    , ~, n5 x! @2 ]; M/ Z3 @
  711.     case 2:
    ( ^/ s5 l' q4 \5 j
  712.       {% {. H0 ?9 {! ?
  713.         int iEOF;
    % l8 @( n) G/ @1 j1 V+ ]1 b
  714.         FILE *fp;
    + b  H) Y& r5 v7 X$ r; W7 V- B' P) t
  715.         char szString[512];
    ' o: ^$ S; C$ Z# f! h! \* T/ X" b* q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");1 O7 P( ]/ I9 \, ?8 j
  717.         if(fp)
    : D- m: [: n) {0 @( F$ p5 k
  718.         {
    , @6 f# {  c: [8 Z
  719.           do
    - T- m4 K: S4 h- |! R9 w0 U
  720.           {7 G4 U) G. ~( R. T% Y" m
  721.             iEOF=fscanf(fp,"%s",szString);7 s1 {0 j7 N) L) X9 {
  722.             if(strlen(szString))8 N8 ]* k0 ?4 N& P
  723.             {
    - a2 E6 e7 S4 H" B# F
  724.               if(bFirstChar)
    3 [* h4 @9 k! {0 r$ H8 X6 e* Y
  725.               {
    , }' k  d) b' A% d4 w* U, e: _
  726.                 bFirstChar=FALSE;* e3 q, F' a4 O( x, I* C
  727.                 bConnectIsBig5=FALSE;. ?0 ]' s2 U) b
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
      W# ?' z) D& A% \9 j
  729.               }7 S4 [+ R: h7 F: h: S: {( k
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));) n2 h1 |* m( W! C
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ( Y+ v6 y2 i  B' Q6 Q  x
  732.               dlg->m_ListText.AddString(szString);
    $ p8 b8 J7 c1 u9 Z6 X$ }' V+ P
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' F- o' j7 y# Q2 {" ]7 U
  734.               *szString=0;, M, U0 E' t8 e$ u$ o
  735.             }
    2 \/ m# m& y& |+ t
  736.           } while(iEOF!=EOF);
    5 l4 |( J  y! z" _6 I( `
  737.           fclose(fp);
    9 l9 k( I7 s/ C1 i4 F- X% T
  738.           unlink(".\\DownLoad\\readme.txt");: B* V1 M' ?4 ?: Q- L7 \
  739.           dwStartUpSteps=3;
    0 e+ }* y3 e! E) h3 e
  740.         }, J! D5 L3 u5 _' G4 B% Y# B
  741.       }& |: f7 \4 K9 T' h( p7 s
  742.       break;
    / b! }, k# J$ Q- n, c$ {
  743.     case 3:
    , Y1 c4 B/ _& H, Z0 A
  744.       if(!Dn.Connected())
    * ?4 v/ b  H; d8 x
  745.       {
    # U& u5 ~; L: }: V3 k
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    " S( S$ b' r9 C- g9 v4 f6 D
  747.         dwTotalFiles=1;0 _$ V9 O9 {; N& Z' B9 i4 d. C, h8 c
  748.         dwDownLoaded=0;
    ) K  @9 D4 E& e* o& }; y
  749.         bSilentStep=TRUE;
    ; k, {+ V9 D0 H* ?
  750.         bCompressed=FALSE;
    - [% F' E( v7 Y3 z
  751.         strExtLocal.Empty();
    ( A6 K/ i, B. R. w6 R
  752.         strFullName="checkversion.txt";- y* G6 t% O+ Z) I# g5 n: E# I
  753.         dwProgramState=AP_CONNECT;/ K& m5 l! y* i- J2 P5 l7 J
  754.       }: E9 I3 A( {2 {) U  \  ~8 J
  755.       dwStartUpSteps=4;# B6 j% M3 K* ?. F7 S7 z' e
  756.       break;7 a& u' A/ _! \& n  @2 g, }( ^% q6 h
  757.     case 4:
    , e7 {; L: t7 g$ c$ U
  758.       {
    ! O& ]' r* U1 A: @
  759.         FILE *fp;
    % P! v9 Y: @2 t, J+ s! e) d0 u
  760.         char szString1[128];
    ! z6 {* u7 V1 @
  761.         char szString2[128];
    ' Z, R- T) L2 i2 _7 E. ^/ `  r$ }
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    + o! q% [# N- ?$ U) K' T
  763.         if(fp)
    , R" v9 M2 |/ M4 p& I
  764.         {
    ' R( V9 E8 b( r3 W  `+ S
  765.           fscanf(fp,"%s",szString1);
    ) i$ P2 T8 _+ z1 R' {* l
  766.           fclose(fp);4 K( y9 L. E' x9 k4 ~5 J5 y
  767.           fCheckVersion=atof(szString1);
    * E2 d3 P8 e% j  F% L
  768.           fp=fopen(".\\checkversion.dat","r");, K( Y- j; `% ^; b1 l( s6 S1 z
  769.           if(fp)
    & D! N  a4 E1 m- b9 a9 {  k
  770.           {. r2 }# A7 O; l( ?8 ~4 N* y; Y
  771.             fscanf(fp,"%s",szString2);% R3 A6 M1 G5 ]$ w( t( q
  772.             fclose(fp);
    , `5 u( H/ W7 u5 N; S
  773.             if(atof(szString1)!=atof(szString2))
    - Z  X: @# Y  B7 j: R
  774.             {
    . y, u+ `% Z3 ~" a* Q: N( e
  775.               if(!Dn.Connected())
    1 o5 P5 J3 x5 [  q/ e
  776.               {
    9 V( m% b( _- E2 P) ?
  777.                 bFirstUpdate=TRUE;
    ; |2 t' Q7 f/ [" s- a
  778.                 dwTotalFiles=1;9 g0 v& x9 N) N8 N# V! ~& O9 X- X
  779.                 dwDownLoaded=0;3 O6 K' k0 S0 Y; `+ |
  780.                 bSilentStep=FALSE;
    ' E6 ^3 J" Z, @: {  x' f0 Q2 r
  781.                 bCompressed=TRUE;, N3 Z& I: h( O& I
  782.                 strExtLocal=".\\DownLoad\";
    ) w& w# _1 x9 Y5 R; O
  783.                 strFullName="update.txt";
    ) i# X& D# u, ]5 {: v0 N, a
  784.                 dwProgramState=AP_CONNECT;9 W: h* ~4 C# R5 o
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , R0 X3 l8 v) Z+ f' C/ L
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 O0 C! L. N; K0 @' s' o
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");9 ]6 M; J9 \5 a6 }* l0 q! T

  788. " ^4 s$ P( l# D. `" S
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 _5 H8 h0 d! ]3 b" {6 p
  790.                 unlink(".\\DownLoad\\checkversion.txt");# `) u8 l4 m/ o: J& T! s: {3 q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)) B; G# N/ _( t6 w$ j0 w+ i; ?
  792.                 {
    # J# T' C$ t8 c( O8 H1 q' f' O
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");% l5 i3 Q# Z  ?' Y; v% o5 W0 f* Z
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    3 u" X" }4 o, l, y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    2 C1 w; p$ e1 Y8 _. C9 r. R
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 h; b3 x3 @  E; q3 U( |

  797. 8 b: Q& P9 G, E6 l: z
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; _8 M5 `' E1 x9 c, b# s
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. q- d8 Y% c: G8 d% X/ k( j
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 M) w6 `" |- m: j+ I
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & z8 z( f0 Q, E7 V" X7 O$ r
  802.                 }6 `# l8 z" A5 u7 Z- R. V
  803.                 dwStartUpSteps=5;" Z$ s( q& Z+ N+ c' ~2 f7 [! g
  804.               }7 t9 Y1 v. d2 i8 r
  805.             }* h1 v2 [  ?. r' y
  806.             else3 ^* ^3 p% K6 W* \! [; X" p
  807.             {
    , g5 P$ }7 T# C" B- ]9 H
  808.               unlink(".\\DownLoad\\checkversion.txt");
    7 v$ S' p7 h5 O
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ) w) Y4 U  F3 Y/ L# U/ G$ @" k# X
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- I! m% c/ s. h  N6 V0 Q
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ ]  U# G& ^8 H* Z

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

評分

參與人數 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客服返回頂部