CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
/ H; I& I/ a' V2 P+ ?) ~- x) z
  1. / RevApp.cpp : Defines the class behaviors for the application.
    * Q+ k/ u0 H& a2 t1 l
  2. //' o5 ]2 Q( {1 }; O2 ?% E8 _

  3. 2 n# b* l- ^7 _+ A0 ?, W+ I% J: w
  4. #include "stdafx.h"
    5 }* m& S! u) l# W% I+ P6 T( H

  5.   j3 |/ U+ ], w7 \3 C7 \: ?( }# ]) ]
  6. //#define UNICODE
    9 r& J* b  B' r
  7. //#include <gdiplus.h>4 l  t* n: c, @4 o4 y
  8. //using namespace Gdiplus;
    / g/ d( L% G# D

  9. 1 z4 T) B: g8 D) u, y
  10. #include "RevApp.h"  ?1 Y1 m9 y+ H- K% r1 V$ N+ K
  11. #include "RevAppDlg.h"
    3 I! k+ k; k2 S# A: X. Q8 C

  12. + A' ]  c5 |4 E: K- [7 ?: x( B- @, N
  13. #pragma warning(disable:4786)( u' `  _% a; o
  14. #include <map>
    # j3 V& D% V4 ~* L+ L/ c) ?# m
  15. #include <list>
    . g, w6 \4 d! Y- b9 t- @
  16. #include <direct.h>  _2 e" o$ V+ F, s8 U, o: Q; P" _
  17. ' x6 L2 N- K: k  g  o& Y) |7 q$ h& F
  18. #ifdef _DEBUG
    , d& o2 u5 F1 C* {$ h
  19. #define new DEBUG_NEW
    ! l% R5 U8 E8 a% q# U
  20. #undef THIS_FILE
    . g7 Y8 H- a0 ~( _) C' z- A1 Q8 n
  21. static char THIS_FILE[] = __FILE__;
    " J, }( [, ?9 q6 q6 \/ [- t
  22. #endif
    ! e( _1 N  }' ^: z/ m: f% ?
  23. #include "SkinResDef.h"
    5 A9 A( |1 v! k# a
  24. #include "ChangeBG.h"
    , R. w# m. h1 [( e$ Z
  25. #include "AFXINET.H"7 o$ a6 r7 }( H+ F
  26. # T2 d6 e  [) X% I8 j6 s
  27. #define TRADITIONAL_CHINESE 05 J& Z9 ?3 p+ C& G
  28. #define SIMPLIFY_CHINESE 1) [; Z! T1 Z0 S% l1 U+ I  r8 z) m
  29. #define ENGLISH 2
    0 X- ^0 q) L4 [8 L2 E; V
  30. int m_iLanguage = ENGLISH;0 ]1 V' s3 Q4 a5 g: w
  31. /////////////////////////////////////////////////////////////////////////////. [: v% H  a- _6 a) H
  32. // CRevAppApp1 c9 f' s& V& ]$ q) L" U% \, f

  33. . i. z1 X0 a  N
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)3 K* l/ q) a. U( P: i$ p! u' B
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    1 w# z$ S0 y+ _/ i/ x: y3 H; S
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.6 V. J  x9 X  n. e: u: \
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    8 y3 S  ~+ e8 M6 Z
  38.         //}}AFX_MSG
    : e, U1 o% W" n" Y5 t
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    5 h% j, A/ U* Z9 D
  40. END_MESSAGE_MAP()0 f: J7 m% m$ Z1 L
  41. ! U/ H  g3 D# j9 n# n, x) ]+ ]: H
  42. /////////////////////////////////////////////////////////////////////////////1 r7 ~& x- K5 c
  43. // CRevAppApp construction7 S8 T4 E1 D" G" C4 c2 w. i! y8 l% B

  44. ) w9 v* s. |9 u2 t0 `
  45. CRevAppApp::CRevAppApp()
    9 T+ I$ h! |) Q
  46. {& F7 l( v0 z1 F& a' m! ~4 X2 n' G/ |
  47.         // TODO: add construction code here," |, K+ R& U. O: z5 x
  48.         // Place all significant initialization in InitInstance
    / t* ?% F6 S% M+ N. B* g8 ]+ J! Q
  49.   bDisplayIsBig5=FALSE;6 h# {; m, h+ J- V2 \
  50.   bRestartUpdater=FALSE;7 r( [# s" n9 ?) @& e% I2 P
  51.   bFinishUpdated=FALSE;
    ' l% H, ^3 q+ u  j7 N1 Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;$ r4 l: S  ^+ [/ a7 t4 q
  53.   InitChangeDataBig52GBKS();. t8 X9 [5 R" Q6 T# }4 m" `9 ^, Y
  54.   InitChangeDataGBKS2Big5();
    . v' {! g+ i7 B5 K5 s. ^) [4 o
  55.         //
    1 q% v1 E- Z9 B: F
  56.         bClickRunExe = FALSE;
    6 V$ `" \' Z, ~& E1 O
  57.         //
    8 f7 B; n9 V5 |6 b
  58. }4 {! v* f5 y# H5 ?1 V. @

  59. 0 u& j8 g: d  o# G( W0 e& s! E& r( j
  60. CRevAppApp::~CRevAppApp()$ q4 m' I: Y0 _0 i9 g
  61. {
    # k5 R" f  D7 Q( {
  62.         // TODO: add construction code here,& W6 c- c9 u! S0 S* u# M
  63.         // Place all significant initialization in InitInstance& f2 \* r& G: l: |- S
  64.   EndChangeData();
    7 k" k' z# A. m: @& @6 F
  65. }( k6 {# f. _: R* [1 s$ N! ?( \2 R% |

  66. ( r; t7 p+ |8 g' W* c2 x
  67. /////////////////////////////////////////////////////////////////////////////
    % Z1 [/ @! @4 }+ c
  68. // The one and only CRevAppApp object6 u$ g$ B% `5 N" O1 `

  69. 4 i3 f. q( p0 w( `4 Y/ @2 S( p
  70. CRevAppApp theApp;
    - t- ]$ f# o, x3 k. r2 S

  71. 8 E. ^$ j& Q) @  R
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)2 m+ m- ?- H% Z2 q
  73. {! A+ o4 q& u$ q" {8 ]4 |4 }
  74.   int iEOF=0;
    ! O# b. \7 ^6 G$ m7 |" |; Q: E
  75.   char szTempName[MAX_PATH];
      y# A2 @! o/ V: N
  76.   *szFileName=0;0 A3 m- l. [3 u
  77.   iEOF=fscanf(fp,"%s",szTempName);: ~7 @  M% v1 I# |3 y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')* P3 R8 h/ x6 p
  79.   {
    0 o! s8 J9 P) Q5 o2 k# [
  80.     strcpy(szFileName,&szTempName[1]);
    ( t+ g/ u' Z7 L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    , g. N  O$ e+ N' w
  82.     {2 a, h3 W' ~0 |* l% |7 ]
  83.       iEOF=fscanf(fp,"%s",szTempName);3 ^( v) M! Y/ g  A3 i* v0 {
  84.       strcat(szFileName," ");$ [* t; w0 O& f4 K6 F6 D& F5 A3 E. d
  85.       strcat(szFileName,szTempName);/ {7 v) |6 y9 P$ y
  86.     }
    * _7 y8 ~, W2 K7 P4 z& m4 d
  87.     if(strlen(szFileName)>=1)) Y  e$ N6 Q" ^! S7 C
  88.     {! @8 h0 ~4 s' s7 ~* b: j- l9 U, V
  89.       szFileName[strlen(szFileName)-1]=0;) E3 ]: }- n9 @! d" y- C3 r1 }
  90.     }
    8 Q3 U7 D* v4 }) f2 U
  91.   }1 e* c, I: o8 d
  92.   return szFileName;/ q& a5 k! v, {. D5 n
  93. }3 ^5 r1 j: a9 R' M/ y* z& `% n

  94. ! ~. G1 G  U7 l, R( y3 V
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)" t1 H* g6 L& T* A( T6 N
  96. {& V' {  E0 i& n. @: \6 Y
  97.   FILE *fp;* {% U, X# `! o3 b% k
  98.   char *key=NULL;+ Y, D; p7 V% i3 J( d, b
  99.   char version[MAX_PATH];3 {& x' e* U- S- K! s
  100.   LPUPDATEFILE file,olds;
    5 w' q' \& O- O. I' Q  @+ e4 v3 K
  101.   std::map<CString,LPUPDATEFILE>::iterator p;! H3 W5 V6 ^+ R

  102. ! n" y! e3 A% _
  103.   UpdateList.clear();
      |" n4 J3 x& N! V4 i. S0 f5 x3 J  Z
  104.   UpdateFile.clear();
    , L3 P* Q: W5 b" ~0 a5 }  Y
  105.   if(GetFileAttributes(filename)==-1) return false;) N( T- f! P* ^3 M- @2 s/ ?
  106.   if(!(fp=fopen(filename,"r"))) return false;- g4 @- d" W  D! Z6 ~, r! l! ?. J
  107.   fscanf(fp,"%s",version);
    ; ]# {6 I; `( a3 L: V& I
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    6 _  O1 f8 S$ }8 W+ P9 P0 X& b9 U1 C
  109.   while(fscanf(fp,"%s",version)!=EOF); v- h: f6 @. S! X$ M. E
  110.   {
      E0 J2 B) e; I' V" ~, C* U' y& s
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& @: z" B( n4 g: {& A% E
  112.     fscanf(fp,"%s",file->path);; q5 v( P: I) F% ~0 z) w& Q9 _
  113.     ReadFileNames(fp,file->file);* ?% |: t8 |, I# k6 ^  u
  114.     strcpy(file->full,".");
    ' D, M! }" f! }, h. X: t5 D
  115.     strcat(file->full,file->path);% X- F3 D: L; ]
  116.     strcat(file->full,file->file);/ t# X; }, f3 b/ D1 f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())/ Y6 {8 j& I+ C
  118.     {
    ' f/ _( W* j1 G; d' w
  119.       file->vers=(float)atof(version);
    % x8 U/ _8 I* p- D+ Z; Q
  120.       UpdateList.push_back(file->full);+ p' \1 s5 j+ V" E- J; ^+ _
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));( E$ t! H! ^& D3 L$ v
  122.     }8 Z3 |$ P" F" k9 k: y2 t; P: ]0 U
  123.     else
    / ]( ~, Q* m# E
  124.     {
    1 M. ~  a, `2 ~# l# Q% ^+ h
  125.       olds=(*p).second;6 j, \. }4 H, k) }& e0 W: T
  126.       if(olds->vers<(float)atof(version))
    " ~, }, i7 x! m; ^  m/ O1 u- Q
  127.       {/ \* a; p& t" Y
  128.         olds->vers=(float)atof(version);- P' I" Q2 z+ p0 Z; F4 J/ r4 V9 O
  129.       }% d1 `" K4 M, m+ {/ ?
  130.       free(file);% ?* A$ f% \/ Y8 J9 Y- _# c
  131.     }4 q  B* @! V0 Z0 V  S5 t  X5 [2 D
  132.   }
    3 x" t5 l- d- C; P0 V* b3 Q& u4 G; H! D
  133.   fclose(fp);% p% U& Q- L+ c! h! \( b6 _
  134.   return true;! Q! y( W/ D5 u0 m. V
  135. }# j3 l9 C* K5 f

  136. " k% p! l# y; y0 e; v+ z! ?
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ( T4 a/ w9 C( g. o. ~2 P+ x: ~
  138. {
    2 I  y7 W) Q  y1 J" E
  139.   TCHAR  szFull[MAX_PATH];5 {! Z% g8 d; M, `+ K. T$ z
  140.   TCHAR *token,*inter;
    ( _* I" N7 t7 E7 _
  141.   *szPath=0;
    5 [* X$ t, @2 o; K
  142.   strcpy(szFull,szFullPath);' s9 A6 I9 {0 _/ O2 v
  143.   token=strtok(szFull,"\\/");
    ; B5 b# A3 k; r
  144.   inter=token;
    ' ^: r1 }, h/ F0 `  {  ]
  145.   while(token=strtok(NULL,"\\/"))
    ) Z, @% j! q4 \
  146.   {0 Y( E! H( V# [; M  b. q
  147.     strcat(szPath,inter);
    0 ~, E% f. w& a8 V
  148.     strcat(szPath,"\");
    ) S, Y' x% e4 s2 [( s2 F1 O. R
  149.     inter=token;5 {9 d3 n; [6 Q
  150.   }4 R* ?/ n! W6 F$ ]  `$ V
  151.   return strlen(szPath);$ T" {) }$ ]5 ^' D( e
  152. }
    - c8 n7 \" ~7 N: [
  153.   V! j3 T1 t; h$ W' S
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)- E; z$ ^1 a, ]9 `4 A
  155. {
    7 m% h9 Z4 U, G4 k! G/ b
  156.   DWORD attrib=GetFileAttributes(Target);9 B1 j6 A0 y$ j6 g' E* v0 \( X
  157.   if(attrib!=-1)4 ?6 X% \$ d5 w( a' N% ?5 P* y
  158.   {
    ! Q3 q- _8 J% J7 E5 ^9 d# n. H
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    : h. a( J* w2 B; f9 B; J# m/ d
  160.     {
    ! F3 I# X0 \1 n
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ; {4 ^6 q( G! K' U7 c5 ^! q8 J
  162.       SetFileAttributes(Target,attrib);+ b: ~: y( z2 {- Y7 i
  163.     }
    . f) J. P3 J, N6 f
  164.   }
    4 H, \9 I" x& v' R% t+ w
  165.   CopyFile(Source,Target,Erase);/ F4 p  A5 m( W, K+ e
  166. }
    * W: V; N( ]- v, w

  167. 4 p; b5 X9 Q: `5 k+ ^, q, s
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)* k/ e! t, l9 Q% D. ~4 P+ ]
  169. {3 _" r! ~. U8 H. V! B
  170.      FILE *fp;
    / C' z( ]: s: N! h$ p2 T- V
  171.      char  szBuffer[8192];
    ( z1 A! p9 N2 x' B9 q3 W
  172.   va_list  argptr;
    * \! F2 m  D9 d8 {8 P" B, y9 @
  173. 6 E/ f+ j7 d' L
  174.         va_start(argptr,message);1 F; k4 E6 a( c$ ?
  175.         vsprintf(szBuffer,message,argptr);  w1 r* k. e! |/ J
  176.         va_end(argptr);
    8 p+ v. ]8 d/ \6 ]
  177.   fp=fopen(FileName,"a");
    . W" m3 d$ m! I. ]
  178.   if(fp)8 L3 _3 Q8 P# l- c
  179.   {# h3 V; F6 K. h3 }
  180.     fprintf(fp,szBuffer);$ v1 M. S: U: H6 e* C* Y8 T
  181.     fclose(fp);
    0 r7 l# b/ x) W$ k
  182.           _flushall();6 f0 r- t5 D8 j4 j/ X9 Y8 D
  183.   }) e" n5 i& |1 w# M/ N  S# V9 ^, C. r5 J
  184. }
    8 u. q  g( F# f' `
  185. ; r# n2 W2 R8 x2 f, i) D+ a2 y( ?
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    % p6 O! b  [$ o! N' g7 q* A
  187. {7 B9 T- c" s3 Q. d) i6 K
  188.      FILE *fp;
    " _  j4 z7 T4 L) p! s7 o/ [" C
  189.     DWORD  attrib;
    : Y6 o+ A3 G1 q7 p0 W
  190.   attrib=GetFileAttributes(FileName);
    4 Y2 G9 l0 c6 Q" G3 O9 H
  191.   if(attrib!=-1)
    6 {$ b: r# Z- Q- O6 e
  192.   {
    2 h* C3 ?' w: O, m# N
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);8 e2 |( R0 K/ g
  194.     if(!SetFileAttributes(FileName,attrib))
    + [8 O2 I. d; Q
  195.     {
    ( s8 j) X' s. Z
  196.       return FALSE;! A, n6 @" \$ ^
  197.     }5 g0 G. `# p* p1 b$ M) M
  198.   }
    5 h  T5 i* V5 i3 R  j1 @; G
  199.   fp=fopen(FileName,"wb");
    % y0 c0 l; E" p8 m8 ~3 x
  200.   if(fp)
    3 t/ Z# m- h% r
  201.   {
    $ G9 G7 w( `7 e0 e( D$ o
  202.     fclose(fp);
    6 ~2 Z; ?$ ^% ?( m# w: i
  203.   }7 H. {! y! z" E, n" G
  204.   return TRUE;
    + M) f5 l* p* O; L
  205. }
    : {" J3 a: D+ ]9 Z* w8 V

  206. 5 u) }: U! J, }+ e+ R
  207. BOOL CRevAppApp::UpdateLocalVersion(void)0 i: u! Z( l: P  t" W" c
  208. {
    " {' p/ y5 g8 P) {! R( W3 C. k
  209.   char filename[MAX_PATH];
    + }" N& D# w. r9 l$ E5 e7 [
  210.   LPUPDATEFILE file,olds;
      c. {! p3 M, Z7 Z* \# L% W
  211.   std::map<int,CString>::iterator i;
    - q3 _" g+ X' Z. z' E5 X8 b) ~
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 `4 H& r! q2 Q5 [2 ^3 L  N, m
  213.   std::list<CString>::iterator l;
    * }) w0 S; L" g3 W
  214. , n+ K2 Q4 R/ g- L$ c! B5 }" g
  215.   if(bFirstUpdate)
    6 Y- @2 }: t9 i( H# {
  216.   {
    $ {) ^1 z( ]0 E/ R2 [8 s
  217.     dwCurrFile=0;
    5 A9 T% }  N& g9 L( m/ A
  218.     bFirstUpdate=FALSE;, Y: n4 U; r0 d" O% Z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 \" \# B- L! K& }* }
  220.     {" ~# ]% p4 ~8 M) P% n4 X
  221.       dwTotalFiles=UpdateLocal.size();
    / G- F& G2 R+ W) O- I$ c( |8 V
  222.       dwDownLoaded=0;7 Q, E1 R3 ]: m# M7 {$ W( X  m2 u
  223.       bSilentStep=FALSE;
    0 T) k* h. {. F* b% V- Q+ y3 b
  224.       bCompressed=TRUE;
    " E7 P$ P- U. {$ x
  225.       strExtLocal.Empty();- [, H' E+ j9 ]# i4 c( f1 J4 P4 A
  226.       strFullName=(*i).second;
    + t; q: S3 G8 ?) j
  227.       dwProgramState=AP_CONNECT;
    $ A5 H" N4 e4 b* A
  228.       return TRUE;
    . G9 x8 ~; _2 M& @2 j- i3 c
  229.     }
    - `* G  k% l7 f3 _
  230.   }  R* G: F' N% I4 K6 M, M, z
  231.   else if(bRestartUpdater==FALSE). Z. [1 r# _" t; W9 V* |( F
  232.   {
    4 s) ^3 R' T; n: {+ |# n
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    2 E8 Z" l& ^+ [' k$ y  S' X! P
  234.     {4 O2 s0 ]' [5 Y' h; ]$ w( R
  235.       file=(*p).second;/ {$ _  z2 w* h6 K
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ! i3 k& L2 F: L3 h
  237.       {# y: ~) W8 d8 M: q9 S' l9 m1 L
  238.         olds=(*p).second;! y) F0 K1 s: E# D
  239.         olds->vers=file->vers;
    9 s- M$ f( @5 R
  240.       }0 v4 b. T( G! W$ `: g1 P4 e0 Q
  241.       else
    & D4 O; k9 q9 D- W$ [
  242.       {5 m1 d- v( c; C- G# o5 l+ i
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & {6 @- R5 m; t2 A+ o- X0 v& b
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    / l* m  A. }3 G) |% X
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));0 ?3 c$ k+ C$ n; q
  246.       }7 A/ u. |. b9 E/ M9 E
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");" V' W3 M7 P+ `. l' m
  248.       sprintf(filename,"(%s)",file->file);6 S( ]8 M# d4 ?# E/ M
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; G( y" H% d, V* C
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    . a0 a  T' [- F7 r
  251.     }7 S5 m9 e8 O4 E* ^
  252.     dwCurrFile++;, ?: n3 N1 w; S1 V( L4 l) Q/ P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 J" d% f3 S8 o& v5 Y% k( u' v2 C
  254.     {4 l* k& L1 i( P4 W" L; x' G5 G8 r
  255.       bSilentStep=FALSE;
    4 n, ]8 ?# L% f  A( g* l
  256.       bCompressed=TRUE;" ?! a1 T+ P, e- j8 @5 s7 ^
  257.       strExtLocal.Empty();
    # Q7 U, d) j$ h+ l
  258.       strFullName=(*i).second;0 W+ S* k' ~+ k& ?# p
  259.       dwProgramState=AP_CONNECT;
    0 v( r" w& p* h2 ~' ?  Y
  260.       return TRUE;
    0 Y/ f  E* V" f+ B# y
  261.     }
    : m$ O. F7 u5 X1 Z5 C' ^; s  B8 x
  262.     if(!bRestartUpdater)
    & Q! U2 h) Q/ L
  263.     {
    $ c, _3 b5 U, i+ x8 y) ?2 [6 ~
  264.       int iCurrSize,iFileSize;
    ! u1 [# R# n5 q8 j4 K2 }2 s' b% x  |
  265.       iCurrSize=0;
    3 B2 g) M$ L7 k4 W5 ~- S( J+ u
  266.       iFileSize=UpdateList2.size();* V! ?. ]' v3 `* u1 b% w
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    2 ]& @3 V, P/ k$ N
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    0 _* S' [% ]8 _1 p4 X5 d
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    $ \: p* W# I" U  L$ q4 v0 N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. E3 H8 J! a4 |% ]- L% r4 Z
  271.       Fclearf(".\\update.dat");% ~5 h5 j$ B3 e+ i" Z+ K, e
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    7 w4 M$ U8 u' w2 N# E4 K
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; _' `8 B5 i6 A  f6 }
  274.       {
    4 c: g7 o" g# G7 E- y" s
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    1 M% C& F7 p8 N; ^( X
  276.         {, b- q9 i9 b3 a. K" i3 ?& O; a, G( R
  277.           file=(*p).second;  }2 G4 Q7 l" q: Z1 P
  278.           sprintf(filename,"(%s)",file->file);% d3 a2 d  B7 [( }, D
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);/ ^! s. Y) N9 t. a# X  \% y3 ^
  280.           iCurrSize++;# d# @* @; ^# ^) l3 ?
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    8 `- V, Y8 c7 I) H
  282.         }% U5 @% [8 J6 J0 S
  283.       }- |  O  U, H8 ]% R
  284.       unlink(".\\update.txt");! V& e8 e- j( J/ M9 s- d1 a; U
  285.       unlink(".\\update.tmp");7 I! K. j, U8 P1 ?( [9 e% o! B
  286.       Fclearf(".\\checkversion.dat");
    0 e0 a! j$ t+ O; v
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 q3 l' p' u5 ?2 U% G6 r; o
  288.       if(UpdateLocal.size())
    # i! M# O* D; A# I
  289.       {
    ; f' C8 q0 o- S" O
  290.         UpdateLocal.clear();
    / `3 g  O4 }7 Z) L; S9 B0 z
  291.       }  R2 W( i  ]2 g4 t* c: ]/ w
  292.       if(UpdateFile3.size())* b: o; @3 g) H: Y  `' O' c2 v
  293.       {
    1 H. x/ X- H+ `* n9 m/ o5 y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + n" a8 B) j- x
  295.         {
    6 S: f" ~, X, W$ ?* }8 t
  296.           file=(*p).second;
    : \! W1 N3 g1 c! S9 Q( E$ }
  297.           free(file);3 e( l) M& t! a2 }: P
  298.         }' Z% C$ D* |+ G- l
  299.         UpdateFile3.clear();
    9 I4 t# j/ a- E
  300.         UpdateList3.clear();+ F$ O2 D4 l2 w$ l5 X7 j/ k+ L
  301.       }
    % `2 G( X. p$ y6 r) |
  302.       if(UpdateFile2.size())
    7 K  T0 }) {, A
  303.       {
    8 _$ o9 j9 x$ @' z/ Z) x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# F1 r$ A' m5 F# S
  305.         {
    ' o& H  F( A- ]" X1 m1 a* i
  306.           file=(*p).second;
    , e. @+ U$ v; v- m2 _! m& w: m
  307.           free(file);
    # I4 |8 O, M2 @8 O; i' z
  308.         }
    * H4 ], @/ E, M$ s0 o
  309.         UpdateFile2.clear();+ K$ `* G/ S/ @' m
  310.         UpdateList2.clear();8 U# [0 q1 z% F. n  }" s- H
  311.       }
    $ w9 K3 k+ _6 `7 A# _
  312.       if(UpdateFile1.size())" W$ B0 T7 |$ Q, @9 z" ?" L
  313.       {; w7 A9 j6 S2 z8 r0 |. X
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . |4 ^; l! c* y6 J1 p& Y
  315.         {! j* R3 L( s; F/ x
  316.           file=(*p).second;4 ?4 U: ~. Z( _& q+ {' D; k  E
  317.           free(file);
    : H6 @; S' ^, j$ `
  318.         }
    / I8 H2 F3 {- W" i
  319.         UpdateFile1.clear();- B" p! f0 J4 x* C- F
  320.         UpdateList1.clear();
    # u# c0 u  `; A/ I, U4 L5 j5 Z
  321.       }1 G# {! u8 ?( R5 g8 y6 s* }
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    7 R: ?! E! W2 I- l9 D, J
  323.     }7 O& Z& c. x2 j& \8 w) h% s
  324.   }
    ' j( q/ }6 z3 X4 s( i  [
  325.   return FALSE;
    & B. S5 {$ v; U' R: `
  326. }
    / P: n+ F9 X; J: P% c5 E

  327. & }3 s9 }, c3 R* s
  328. void CRevAppApp::ClearAll(void)
    5 b& B) _# P" G$ a
  329. {
    - d+ c. q7 E6 h0 J$ B- C* o7 J
  330.   LPUPDATEFILE file;8 }+ o0 L& i' R3 B7 U% i7 Z4 l1 A
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; Q+ Q" |; Q/ R9 M8 a

  332. 6 Q; Y& w3 F1 ^/ s
  333.   if(UpdateLocal.size())/ [: G4 y3 S7 e: H7 ?8 d- L% z
  334.   {: v' a% Q( M5 X# x
  335.     UpdateLocal.clear();
    $ s1 c7 u( Z) B8 }
  336.   }  s- M- s+ d+ r4 I  x/ o3 L, Q+ T1 P1 {
  337.   if(UpdateFile3.size())
    8 F8 w3 ]5 Z# P" t2 L- ?! H7 L
  338.   {+ O; R* B, W9 A8 @* a1 C- q; z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    / P  K. u; e- b: }/ K& ^
  340.     {+ |- a/ n, L7 @# \# d" X8 F* i
  341.       file=(*p).second;+ n8 b6 }; x& W) {# L% q; ^
  342.       free(file);
    3 w  X* r9 X0 Q! b. M4 i' B
  343.     }
    4 X' C7 Q) h8 W( V" l* n
  344.     UpdateFile3.clear();
    ; S( D3 c9 \' T5 ?) L% Y) \
  345.     UpdateList3.clear();) D1 w$ ~: G: P# L1 O- g8 ~
  346.   }
    - E. x( e1 ]% H- t6 X
  347.   if(UpdateFile2.size())
    : K7 e! E* i- {& u
  348.   {
    " L, e* ^" U8 q& M" ?) w" r- y& G
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( X1 a' S# R: \( D
  350.     {8 R0 e6 d8 K+ q
  351.       file=(*p).second;" U3 Y& Q0 f! [9 q& L
  352.       free(file);5 }6 D0 }3 m" Z; Y) k
  353.     }) s. T) Q+ J+ `4 q
  354.     UpdateFile2.clear();
    , h' ?* A, H4 d1 L+ y3 e
  355.     UpdateList2.clear();
    & R- c* p: @( U0 a/ {
  356.   }' j# t) R0 g! W$ g; @. g
  357.   if(UpdateFile1.size()), G$ }- _3 }4 A( `" M
  358.   {1 o5 e' [0 ?3 P% T" A
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ a: |8 @6 U; z! l8 B' d
  360.     {
    & f4 T1 B- B- K
  361.       file=(*p).second;
    " ^8 s) E  r- `7 {) X
  362.       free(file);
    6 x7 {" J7 t/ ?6 R; e3 j3 }
  363.     }* B9 o9 [% C/ N, Y
  364.     UpdateFile1.clear();
    $ s' {) M+ k# x1 S( o
  365.     UpdateList1.clear();9 G* b7 i' ?# n; u
  366.   }: p  I  i8 }* C& q2 I
  367. }  6 |" \, M& t$ A+ w, [8 c2 g( P
  368.   1 g; A1 Q* F  E: z
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 ?0 u6 ?" c; w5 V8 z( a0 P! t
  370. {/ Z# i0 b# @6 W1 {
  371.   int c;& [9 E8 h) S9 o+ y
  372.   LPUPDATEFILE file1,file2;
    2 ?: S3 N& }: @# W
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ; m8 f3 x! I; y8 k0 e" N
  374.   std::list<CString>::iterator l;
    4 C% E0 r7 h9 c5 _5 _& f

  375. & O4 t, `# E4 x. J, k, h
  376.   UpdateLocal.clear();6 Y: H; K5 ^1 S" R8 E) ~
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);0 l; P3 p) ]: l# S  o1 p" Q
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    # o' b$ F5 r6 |' M
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : @8 |' n* `; Z' c# c
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);- z2 D/ t9 u( r1 Q6 V4 A
  381.   if(UpdateFile3.size())
      m7 m2 q4 ~  f
  382.   {; }) s* B: `' l! T8 M$ U  Z7 t
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    6 ?8 q# z; L7 H
  384.     {
    " k1 [8 q9 k  M6 @, m  |
  385.       file2=(LPUPDATEFILE)(*i).second;2 Z4 T% S. s  g2 b* W
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 ~- n1 }4 ~% ~0 n8 h
  387.       {5 _9 n# ]2 k4 f3 n, O% V
  388.         file1=(LPUPDATEFILE)(*p).second;
    - ^7 |7 `$ C: l1 y/ q
  389.         file1->vers=file2->vers;; F7 R  X8 A9 P
  390.       }
    2 {/ \/ L& g& L3 G6 T" g4 P0 v6 e
  391.       else
    # M4 N( B& ^: Z! `3 T, p/ T$ o
  392.       {
    - r1 t0 }$ i) K( p8 S9 F7 A
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, _6 n, R. B$ r. Q  K' z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    4 ?2 ]9 ?# d+ v4 x/ Q
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - \% O2 ^: K) V0 I* y9 I: |
  396.       }
    0 f+ Q) l; h  Z9 c, T; x
  397.     }
    0 d5 t' c) @0 T7 z* t3 X% [. X
  398.   }
    ( ?9 u3 V+ S; F5 d( O1 |1 \
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 Q! }7 f: d" S, @9 P
  400.   {
    $ K$ A' y$ f! \2 L
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ! r" z+ v& o( L2 R
  402.     {$ q, x# y  Z" F! z3 P
  403.       file2=(LPUPDATEFILE)(*i).second;
    , Y4 n* Y6 D1 e
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); @& v( z( Q: K6 t1 K$ ]& N
  405.       {
    : K5 ^7 L: g3 I$ W7 `6 U% |# e
  406.         file1=(LPUPDATEFILE)(*p).second;* i0 i& q; d2 C+ u
  407.         if(file1->vers!=file2->vers)2 J& L5 u8 I& D2 Z: q8 X# R: g
  408.         {4 B1 r, b2 w9 }1 o/ d; A, b7 {. j& T
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # s6 J# ~% Q. [. ~  y2 M+ E
  410.           c++;) j" e! w  I  F6 @  M
  411.         }
    % P! f; n+ G9 o, j7 G# \. C+ T
  412.       }1 E" u) I3 b: q& O" d2 h! g
  413.       else
    8 \) J9 t: `8 E. W1 ^5 u
  414.       {& k; M. J2 O. ?( y- c3 k
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . ?0 B8 h6 j3 C, B+ [
  416.         c++;
    $ f8 }  g  @! s/ H: K4 N, E- ?6 E
  417.       }
    6 t5 k" Z3 f8 a% t, ~' y
  418.     }' k  ?2 n$ R, @6 J: X8 u
  419.   }& f4 z# |! X1 R9 P; }
  420.   unlink(".\\DownLoad\\update.txt");
    8 ?" T7 H2 ~0 J7 |* E
  421.   if(UpdateLocal.size()) return TRUE;" M, I+ {* f# }# T4 d
  422.   else                   return FALSE;
    8 {7 Z+ e- k" l" t4 `* _
  423. }
    , L* g4 `2 u% y$ }3 w
  424. ; \% A8 v* Q+ l
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/", r  `7 V, a* l% g
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"% T/ \1 a4 }3 L3 ^! y7 s! T# Q
  427. 0 b9 r+ v+ t" d% i$ x2 T
  428. 6 c& U. R8 O; V2 S1 U
  429. 6 A8 o0 x" A1 B3 x' J
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    * H5 i! K/ [8 i5 X3 }
  431. {: V) x. f9 K, V4 l" W' J; Z1 w1 A
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    6 H' _! B1 n/ n6 v
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 m, A. W* e5 T; p/ w& r
  434.   {) }1 m4 a1 [! e' {7 Y" B
  435.     char szLanguage[50];
    - a5 z+ u6 i. r6 B6 e8 A6 b
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 |0 p) W8 V; H5 M( y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, i0 \; D: S5 }2 _8 M' z
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    , i5 L  R, `. l
  439.     else                                   m_iLanguage=ENGLISH;; T5 `4 N& k/ T
  440.     char szRegister[100];* o# B& m) c8 A( n! g
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / O" u- T$ }/ o% u3 a: D; l+ K
  442.     strRegsName=szRegister;, d" k; R; d) K
  443.     char szPatchURL[100];
    # W" ?# o, c& f( c0 w
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% u$ A0 B. o: w( A. _
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 [# V* a6 w# ?, M9 T# P
  446.   }& C# k0 n( A! [  L
  447.   else, x/ w9 _' M' ?( O
  448.   {( R4 d5 D) k. S8 e$ o
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 ]. e0 Z; A# L0 `% y& c& ~# u( r
  450.     strRegsName=DEFAULT_REG_URL;
    ; C9 F: l) j4 A+ L1 I
  451.   }
    * P2 t# U) i9 e% S
  452.   if(GetFileAttributes("hosts.ini")!=-1)( b  H0 W# P8 f4 A9 C( X
  453.   {
    * g0 ]8 L( J- I5 u
  454.     char szIP[50];
    8 S8 Y* ?; }% B1 c2 v# {$ d
  455.     char szDIR[300];9 ^7 S9 }# c4 q! R( D
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    + \7 D$ C$ g! t- p9 d1 v
  457.     {
    4 p: a% y/ o4 R& a
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      y3 }  d1 O$ X6 d9 a3 N4 ^9 |
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");4 l% D& c8 [+ o
  460.       strHostName=szIP;
    ! l- q8 V# f: |7 e
  461.       strHostPath.Format("/%s",szDIR);
    - r# H- e0 ^9 B$ w
  462.     }
    8 ]7 L3 Q; t: a* d, L4 y% Q3 o
  463.     else
    ) q% V, [* t. |' h6 c! e
  464.     {# ^  ]9 H; D: X* ~9 l- G0 C  ]" `
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( C" w& K4 k9 v) F, h
  466.       {  |( x( O9 [) a8 }5 m+ D( D! S6 r
  467.         char szLanguage[50];
    / r0 K2 r) {4 w: D8 Y$ Q* s
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + c' G- a* G- b9 y, @
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' y& {! k. g: x$ }) d. a& C) w
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + [, B8 r1 B) L3 P% V( a/ m9 y
  471.         else                                   m_iLanguage=ENGLISH;
    % m' L3 a' \: A- O
  472.         char szRegister[100];
    ( }/ E! y, P+ C2 z8 R3 ~1 P' q6 _
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! B( n7 m8 q9 l5 S* F3 D2 c
  474.         strRegsName=szRegister;
    # F) Z( ]! @+ V
  475.         char szPatchURL[100];
    " E! @9 e; L3 W! ?# {, z3 j; m
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 E  G- b7 G' j3 a8 b- |. _: Z- G5 ?
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: I. M9 W7 Q. Q/ y" {
  478.       }* u1 k) i" ~2 A, g# C5 F# ~9 {
  479.       else
    6 H& v" w' P8 r* T3 W9 ^1 v
  480.       {
    : j4 d2 a& j3 S9 P$ Z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ o9 _  J, I8 X
  482.         strRegsName=DEFAULT_REG_URL;
    3 S  @. i5 i  C# a2 k+ J
  483.       }/ r! a- h, M: h8 g5 L) [
  484.     }  L' d" J- o) y
  485.   }
    ( B. d/ j/ s; P6 p% b1 l
  486.   return true;
    " G$ Z" ~$ v- R8 _- w0 x, N
  487. }
    $ w$ O# x; m" V' y
  488. , B7 e3 P/ b1 ]
  489. #include ".\ZLib\unzip.h"8 H7 G5 C; T& I6 A& ?& u
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);, e1 F+ I2 i! u6 g0 G
  491. /////////////////////////////////////////////////////////////////////////////& m, U  j, k4 c# }+ n4 K! N  F
  492. // CRevAppApp initialization* C& i9 O% I  Q% R

  493. 4 K- C; q* h0 G: G2 U% j
  494. BOOL CRevAppApp::InitInstance()
    1 R  n- X" E5 k- ^" r" z
  495. {! F: J$ {% F) e! d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    5 Y6 Y( G6 D% y% R8 d4 ~

  497. 8 S6 ^. {) z. @2 R0 |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);, g. C9 z* z. p! w+ ^
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    7 R$ g" j. t& @: K7 j
  500.   {9 r. _+ S+ N6 l4 o$ N: O
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");/ N% o; u6 z1 c; f
  502.     GetPathFromFullPath(szPathTarget,szPathSource);8 B( R3 a1 b# r: y8 q8 D
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
      y( I1 q# }# S2 b7 {
  504.     {, R" f. _8 S3 q# r" b
  505.       strcpy(szPath,szPathTarget);5 `( y# H( I& r7 y
  506.       SetCurrentDirectory(szPath);0 I8 X' C, a# t+ B8 d
  507.     }
    * q- t6 z4 m! F3 u: R" u, e7 {
  508.   }
    3 Y! B4 s5 n' C! |3 s# p4 c
  509. #ifdef _DEBUG2 G+ ~) y% x, {
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- ~$ }- Z* ~4 _' p# j8 b
  511. #else" k* C( y$ @+ o
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 H9 W( j( J$ e
  513. #endif5 H$ c2 c) ]0 t/ }3 Y* @) @
  514.   {/ T/ ]- [' Z4 O) ^3 s
  515.     char tempFileName[MAX_PATH];
    8 p7 U5 r; b) `
  516.     strcpy(tempFileName,szPathSource);
    # U( ^9 O( P! c. j. B' ?$ A
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ) g( ]+ x  N1 Q3 _2 l0 B
  518.     strcat(tempFileName,"\\$CSUpdate.exe");$ A& C: k2 Z0 \' v
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);0 J" o9 Z2 E* n: f
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    5 u  T+ k1 O9 }' f* H
  521.     return TRUE;
    ; H9 D( }3 ]; n+ E3 r" }9 Z
  522.   }
      v, Y6 L8 Z2 K5 ~6 S
  523.   // Nuke 0118: Delete run.exe+ A9 ]! s8 j& C- t" {
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    * S4 |1 u( F  t) |' V$ O/ C! R" w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    2 Q3 x( y' g+ |6 L
  526.   if(!ReadCfgFile("Config.ini"))
    3 c7 N  @2 [, H- _
  527.   {* N8 p. \# Q' e! Q) D$ f+ D( c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);/ ~5 s- e& E0 @: X
  529.     return TRUE;
    7 Q" k: {8 X; S: I  G# }$ V
  530.   }
    # m; z+ E  S  ]* J
  531.   HANDLE mutex;
    7 w1 J- p' R+ j; k4 L2 |) R
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ W2 t  M4 k) A* L8 }
  533.   {  C2 L' y" h# q& m$ K% p$ U
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)- z* V3 X6 _& M2 K+ a, x+ @' [, d
  535.     {
    - O- E! P5 g, t% t( x5 n
  536.       CloseHandle(mutex);( y$ U3 k' @0 I% ]
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    4 s3 F0 t7 v* P: d) x& l% ~7 K: G
  538.       return TRUE;
    ) s( ]- D! @0 w# Q. A, j' J- B4 a, `
  539.     }1 e/ U! m1 D& W: u" d! f* @2 \
  540.   }  
    " \+ M- v: C: d. P7 z; F! V
  541.   CloseHandle(mutex);
    0 e" b# P1 z& \9 i
  542. . M* s8 {9 M( R5 Y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    1 M! e- r, K. q+ I7 a. z

  544. - C/ N" F  s# P/ M1 I0 e
  545.         AfxEnableControlContainer();; {6 V. \" f  y- E
  546. : L. x4 [) L( u- ^; y- K; J/ h
  547.   bCanUpdate=FALSE;- j" J" r  S2 I. j) h! K/ {( c
  548.   dwStartUpSteps=1;
    ( Y+ O! O9 U0 @. A5 j7 G
  549.   dwProgramState=AP_NOTHING;! E5 c% [2 L, `3 ]2 U

  550. 0 v0 h% k9 a4 P, p' M
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);# `* `- ]/ U- b# P3 ?. w
  552. ; V, A; b* a; R& @
  553.         // Standard initialization$ I% h! L4 C: D! H$ G& d& }
  554.         // If you are not using these features and wish to reduce the size
    % E' n9 x% B. m3 R
  555.         //  of your final executable, you should remove from the following6 `  \! |, G) J9 l
  556.         //  the specific initialization routines you do not need.& S8 z) j+ R" F7 D

  557. , z8 g5 X6 S, ?& j
  558. #ifdef _AFXDLL- m# q( T! Z6 R- _; z+ s
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ! P4 a% U' ~7 X9 x( F* O" e8 w
  560. #else
    ) }5 l# a" S; Z6 k  v. _
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ v+ @/ ]; d, Z' ^' k0 \) y; K
  562. #endif* g' D, ~" p& X
  563. . I9 R* ^: ?# o8 E  t; v
  564.   dlg=new CRevAppDlg;- B: m3 w8 C. T4 v: `' {
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 y& A2 h$ J) S# K5 p5 p, ~' i
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    - v1 N0 q; F: Z- C5 V4 F7 E9 }8 o
  567.   m_pMainWnd=dlg;
    $ ?: ~" \2 w$ O  Z$ h- }2 z

  568. 2 E$ |# d  A/ k8 l
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    3 Z4 k' d  u- ?, A
  570. : O3 F7 R' o+ D3 U" A( r
  571. //  GdiplusStartupInput gdiplusStartupInput;
    4 Z7 r# ]  D9 U
  572. //  ULONG_PTR gdiplusToken;; R, K' e  e/ _) Y/ b7 o
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);7 M6 w7 z! X: V, k2 S+ o6 J

  574. 2 }: a- }+ r0 e9 N) E$ K% M
  575. //        CRevAppDlg dlg;8 E4 ^+ E/ D0 A0 ]* Z+ f
  576. //        int nResponse = dlg.DoModal();' Y  E8 i. l4 h4 o
  577. //        if (nResponse == IDOK); S$ ~. a; s0 @, ^3 |
  578. //        {6 {) d6 H3 \, N, [
  579. //                // TODO: Place code here to handle when the dialog is  I5 ~" S+ w7 g6 g; I2 {5 x
  580. //                //  dismissed with OK
      C' i$ @9 z) _  g# E" b
  581. //        }
    2 T, B! Z& p- u9 ~' f1 F2 n6 N8 |1 u8 v
  582. //        else if (nResponse == IDCANCEL)
    / m( a2 ]  d. M, q- B
  583. //        {" _8 L9 s9 D5 _$ y" d$ H% Z% a5 u' B
  584. //                // TODO: Place code here to handle when the dialog is  B, K& L  S0 B9 S
  585. //                //  dismissed with Cancel1 q6 e. C$ }  [+ F3 K4 E& S& @
  586. //        }1 `) {9 U. }; K1 c, i- p* G

  587. 5 l0 j+ ?9 l: E# t3 r. z: ]
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ! v3 S, [4 w' R& P$ Y8 S$ Q3 u0 [
  589.         //  application, rather than start the application's message pump.
    ( l' C7 Y+ p5 _* u  |: T- M
  590.         return TRUE;  b! P' A: y% M$ R8 g4 {. L
  591. }
    1 _* L8 i4 S' C
  592.   Y7 y; I/ ^' d0 l
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    0 |. ?  k9 s7 a' z  c3 [
  594. {+ I/ W- A5 |  R/ l: H
  595.   int i;
    3 p4 Y, A, h1 S
  596.   char *szRet;
    : e+ ?5 ?/ a. B+ o* e# p) h& `

  597. % ?1 b* j! R; n; k/ E( v, K+ P
  598.   if(pSource) { itoken=0; sztoken=pSource; }# L) n4 m' ?) \% F1 q
  599.   if(sztoken)8 x# g2 U; |' b1 U0 Z
  600.   {/ s7 t0 Q* J' G# z
  601.     szRet=&sztoken[itoken];
    ! v) l- M9 K" m3 B) A+ J4 A" \
  602.     while(sztoken[itoken])! i5 n# `0 ]: E7 J; }
  603.     {
    - ]  c* {9 j2 c4 w7 C+ M
  604.       for(i=0;i<(int)strlen(token);i++)
    $ n! H) r0 X3 Q
  605.       {; w# [+ }- F2 e# l: r9 n
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    1 J1 u7 l) V. J  ?1 M7 m( f
  607.         {
    7 S. U3 e" z8 I0 _
  608.           sztoken[itoken++]=0;9 `) e& o1 L& x5 @; R9 T
  609.           sztoken[itoken++]=0;- X# v" P, E; D/ y/ h& ^
  610.           return szRet;. M8 Z5 |/ M7 }( Y  @
  611.         }
    . G, v! V2 O4 t( M2 i
  612.       }
    , s( O" J$ `7 }5 M( d  _
  613.       itoken++;
      a2 C! a. f- |( n
  614.     }2 L( }4 l$ j# {3 r/ K
  615.   }7 m2 [$ l) h. L# k5 n
  616.   return NULL;: c& Y  U1 t) ?$ f# O) Y, \5 B
  617. }5 A8 I6 T; y  \5 r, i( y; A1 ]
  618. . Z8 `  }2 h$ P3 q: d- k
  619. void ProcessProc(long Total,long Current)
    - q6 P7 }9 j. h- q
  620. {2 |+ F# q0 i0 D5 i, _1 {& P
  621.         MSG msg;
    , E* R( w9 {* l" N
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);& i2 e7 U" ~- _- v7 f- D  }
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    1 j5 F+ {& w. i
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)); E& r( @. E$ {4 x
  625.         {( e) Q: x3 S" n$ w' V0 V: v
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ' T5 }+ C8 k+ R) a3 T: M$ R
  627.                 {4 T, g3 e) M+ z, G/ U, r
  628.                         return;
    , l8 I9 p& G; s( i1 E* ^
  629.                 }
    5 c2 O1 \5 q; i3 K- e/ u0 `
  630.                 TranslateMessage(&msg);( G# Y4 a* K: ^
  631.                 DispatchMessage(&msg);
    # g9 v2 m" T5 @: l, @
  632.         }        % y, R1 ~5 E) N" O0 r
  633. }- u+ L3 Z2 [" q- H% {# O6 [
  634. & t9 H7 g& D3 v, F
  635. BOOL bFirstChar=TRUE;
    3 y7 T8 n* ]1 s( s
  636. ' L6 ~1 U* J, j% p. `  h3 ]# U
  637. BOOL CRevAppApp::OnIdle(LONG lCount)% |7 i' u' c3 ]
  638. {" f4 E5 v; N' u1 a: y) J) Q% v4 m
  639.         // TODO: Add your specialized code here and/or call the base class
    # G# s8 T" H: \& n! _
  640.   switch(dwProgramState)
    2 U2 N* ]3 Q2 Y$ S: n
  641.   {. K+ k' `& |9 M0 p
  642.   case AP_NOTHING:
    9 {4 H, u% F8 r7 Q9 E. Y
  643.     switch(dwStartUpSteps)
    & p3 K9 g0 z8 g% V8 Q
  644.     {
    % L, \, a0 P4 H+ e$ q; i
  645.     case 1:; O! k* K* s' O$ z& a
  646.       {; v7 y- g7 T1 e  t
  647.         int i;
    3 m9 A6 f/ q& t2 D5 W
  648.         CDC *pCDC=dlg->GetDC();
    ( n& P# b6 i0 w/ w- n$ H8 u
  649.         HDC hdcwnd=pCDC->m_hDC;( L' I0 \3 a/ j* Z" o, V3 _
  650. //        Graphics graphics(hdcwnd);
    3 z6 D  T1 ^" I
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");' S- f  K- Q0 i4 H6 D- `& I* i
  652. //        INT iWidth=bitmap.GetWidth();
    2 ~1 L  s* O4 n( k
  653. //        INT iHeight=bitmap.GetHeight();
    : _/ l& W" J9 ^* H4 u- R
  654. //        Color color,colorTemp;( T9 Y2 l- e# H. v! a
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & i# a6 G+ U  x( b1 a5 v* u7 y
  656. //        {
    3 N4 Z: m. H( C2 ^9 v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)" m8 V2 d5 v- o$ S
  658. //          {
    0 y5 U, q9 x( q5 t; [1 l0 w
  659. //            bitmap.GetPixel(iColumn,iRow,&color);% {8 g  x$ F$ J
  660. //            colorTemp.SetValue(color.MakeARGB(
    - t8 Q" x" b* Y9 y! ~' d) |6 c
  661. //              (BYTE)(255*iColumn/iWidth),# }6 {$ z: A# `0 W+ S- f$ I
  662. //              color.GetRed(),$ Y) |! t& w0 ]4 A4 e+ x
  663. //              color.GetGreen(),' g0 i4 [  w& Y. T! @5 R: }$ X
  664. //              color.GetBlue()));
    , N" d- g2 T1 F
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    7 W1 Z+ [& ^. {% [* K% l) g! x
  666. //          }5 A; O+ [" m; h& \2 l
  667. //        }
    . O) ^) b* E! `8 b# O
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);) w+ L; k4 p1 o5 F/ Q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: h; T/ }, w+ i0 g( v9 f
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");. @4 {0 ?( ^2 S' W3 d7 C- u
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ [: i& R) n* v2 ~4 T
  672.         for(i=0;i<240;i+=8)7 w3 s# R! {8 o1 [& Y
  673.         {" b1 b, F: y/ c1 T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ C  h' A8 n6 p# h
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 x8 `9 R+ H* p& K# u7 U4 N0 K* P  v
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 X* o3 ], ?) w/ N, `6 P2 J
  677.           Sleep(33);
    - S5 k$ w/ d6 t; E
  678.         }
    % I* ?3 z  r# P8 {% |7 k: L
  679.         Sleep(1000);8 ~  J4 U: p' t7 E
  680.         for(i=240;i>0;i-=8)
    2 x$ T+ I# _/ u8 A0 w
  681.         {
    ; C1 A; G4 x  g' E
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ j: j4 A: p# R
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 q" A& @* m, `1 R$ ~; h( S( |
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 K. B. K5 e& ^$ [0 R
  685.           Sleep(33);: ?3 p/ f0 ?, S+ F6 h3 m; l0 ^
  686.         }
    ) a- W. G% N& K5 d, V* K, t+ N1 A
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);/ z8 N1 c# Q5 \& u5 b) q
  688.         dlg->ReleaseDC(pCDC);
    : H  b% I. m, s8 b
  689.         DeleteDC(hdctar);. b3 E2 y) Z% A0 h( ]0 @: p4 i
  690.         DeleteDC(hdcsrc);
    ' Z2 ?+ X4 Y3 y
  691.         DeleteDC(hdcorg);# j) ?$ E, ]7 g1 G# e
  692.       }# K- f; R8 A, s& O, g
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);% r1 {# Y" X3 ]5 }7 q0 t
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");1 y& t. B0 Q6 @6 N+ f  M/ g  f7 F( R
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");+ ?& |* C( _7 S
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");2 \, N; _4 a0 ]
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 x' C+ x. g* N& h
  698.       if(!Dn.Connected())
    2 A0 E% d; `( `5 p; |* {7 B# S* s
  699.       {9 B9 J) Q" U. A0 I
  700.         dwTotalFiles=1;! u" p; ?/ _# V4 y
  701.         dwDownLoaded=0;
    . B0 {$ q, @8 V5 F0 o: ~) c9 I+ Z
  702.         bSilentStep=TRUE;
    * j) U5 \! b' A) G$ `7 X
  703.         bCompressed=FALSE;
    : R0 ~! h3 A) l; r) J$ V
  704.         strExtLocal.Empty();
    $ Q0 }# o: \( _& V/ \6 x
  705.         strFullName="readme.txt";
    ! D* A, D  O3 R( g6 ]; M, e
  706.         dwProgramState=AP_CONNECT;
    9 a+ {- m1 e( D( m5 D2 L1 c# W
  707.       }% s  P$ y% L0 i, l: L
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    3 e6 [# N5 N4 }0 E
  709.       dwStartUpSteps=2;% r5 O* e8 g! Q
  710.       break;. D0 j; F- j7 p: [7 J5 s* U
  711.     case 2:- ~0 U# f0 `2 P+ d4 Z- d
  712.       {( H6 ?3 n& `2 c% q* G" R! ]4 A
  713.         int iEOF;
    2 H& M$ k; L, d, U' J
  714.         FILE *fp;
    8 g8 C1 ^* d+ M3 C
  715.         char szString[512];
    5 I/ U5 F6 @: a4 V$ ~
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");$ A7 b7 |. b4 g3 N6 V* g7 z. V  g- [
  717.         if(fp)
    + S7 M+ [: W4 T& J
  718.         {4 ]9 k7 ^8 @; L4 V  k
  719.           do2 \4 K  o# X* \0 B; F7 J
  720.           {
    ( q3 Z, {8 P3 p  e7 R( E* {
  721.             iEOF=fscanf(fp,"%s",szString);
    # y4 K2 ^1 V+ X$ ?" D/ p0 X" m
  722.             if(strlen(szString))0 T/ V( X2 S  C: U0 F# I, p
  723.             {
    ; i" {& }* r' `0 O, l: W( {
  724.               if(bFirstChar)
    3 D' |2 D3 Y: m$ @# f  e
  725.               {" g! Y  n( Y7 |- V
  726.                 bFirstChar=FALSE;
    . j# b( W3 J; X2 A; w; F3 `
  727.                 bConnectIsBig5=FALSE;
    * Z. |" p/ i: t0 U  p  l+ @) ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    * a' b# J( e% A$ Q$ p$ @
  729.               }+ r! T7 N# Q% t5 N5 x
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . c. D  t/ Q' Q- l* V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));! j' S- A% N9 g3 V2 ?; ^
  732.               dlg->m_ListText.AddString(szString);
    6 l' G2 e# l$ p' C/ v5 y+ ~' w
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 ?2 F' n1 {9 z& d7 n+ w
  734.               *szString=0;- o  X1 z* W" k
  735.             }% N3 \# O9 n2 i% G0 j
  736.           } while(iEOF!=EOF);2 q  K) F  ]! Y
  737.           fclose(fp);* n# P- n( j6 G( Y8 E3 D8 g' m5 C
  738.           unlink(".\\DownLoad\\readme.txt");
    1 Q4 o- W$ \) Z9 N/ [! p; E! r% ?
  739.           dwStartUpSteps=3;
    ; ]: h  i7 @) O% a7 T# p# D
  740.         }
    8 t3 @+ @/ R+ t" f" u6 k6 e) T$ m
  741.       }$ d8 |! W# y/ `2 @# O
  742.       break;) v9 u% b" F9 [! L$ t9 j( q8 A3 \
  743.     case 3:/ o  e7 }1 c# ]4 V+ O, m
  744.       if(!Dn.Connected())
    ( v; V( a0 j# n. j! c
  745.       {
    % `$ M8 d6 H. y, y5 N
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    / `" h6 m2 h1 ^4 F3 c
  747.         dwTotalFiles=1;
    # l$ v; f7 ~2 d! H- v" W  t3 d
  748.         dwDownLoaded=0;! P  J0 G) ^* k$ U7 N0 D0 E, [# D* ~
  749.         bSilentStep=TRUE;
    : |6 H( h0 h) {" o  p+ z
  750.         bCompressed=FALSE;
    2 u1 X( Q6 m# |4 n; O
  751.         strExtLocal.Empty();
    4 |  K& ~7 d  B5 n$ m# h
  752.         strFullName="checkversion.txt";% K1 H* X6 ?1 P, z# d8 R: Z6 d
  753.         dwProgramState=AP_CONNECT;' o' V9 T2 \# L5 d( A
  754.       }9 s0 i$ C: d0 s, @
  755.       dwStartUpSteps=4;- W7 @$ _, Z  K4 R2 h$ H! f
  756.       break;
    9 ?: `3 Q& b6 ^
  757.     case 4:4 A1 E& v2 M8 R( S2 U$ Y% K' F& L
  758.       {
    / v/ B# h( z* n
  759.         FILE *fp;5 C( N' z3 X/ A& I, P5 [' a
  760.         char szString1[128];
    ! j" c2 |, R* f, L8 J8 P/ k( `
  761.         char szString2[128];
    $ b2 j3 t1 `% ^) R1 F; d! v; r2 K
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");$ y5 I! D0 z- b# s. w" c' @- o
  763.         if(fp)# b  G+ e' O' o7 E# |) [/ A
  764.         {+ [: }- f) W- F% X" T& f
  765.           fscanf(fp,"%s",szString1);
    " n* x+ E8 S* l4 g5 @
  766.           fclose(fp);* q' l2 Z  `  Z5 I  z
  767.           fCheckVersion=atof(szString1);. c4 G7 [/ U+ G; ~3 ?. T$ N, k9 d
  768.           fp=fopen(".\\checkversion.dat","r");
    ! }+ y2 p  H. G5 j- U
  769.           if(fp)6 C$ w: \( f! R/ k3 s' X3 R
  770.           {
    7 n% U2 o: |; U' N+ t* h
  771.             fscanf(fp,"%s",szString2);) C' x+ Z- c8 S' T! }
  772.             fclose(fp);
    4 S9 Y! l) W  D/ _( \# g
  773.             if(atof(szString1)!=atof(szString2))
    ; _; ^3 ]' \1 ^0 q
  774.             {/ I! s5 P) X7 n8 D7 ^1 Y, p
  775.               if(!Dn.Connected())
    ) j( T6 X" e' H% B& D/ M0 G  D
  776.               {7 X8 ?. S8 k$ F- v) R7 Y8 C
  777.                 bFirstUpdate=TRUE;3 p1 w0 C1 l' c: b8 e
  778.                 dwTotalFiles=1;
    0 D/ z7 B* l' ~  |2 M6 m  b
  779.                 dwDownLoaded=0;$ j0 K) v8 w& A% G( N/ F+ ]; j6 i" `
  780.                 bSilentStep=FALSE;
    6 K* {7 w& s# R# ^8 v4 l1 {
  781.                 bCompressed=TRUE;! J, x7 V0 `, c1 a- j2 E
  782.                 strExtLocal=".\\DownLoad\";, K- C! J$ K8 H9 Z5 j8 F) G
  783.                 strFullName="update.txt";9 y" ]; J9 W7 I- P2 F
  784.                 dwProgramState=AP_CONNECT;
    . E9 z" V( P5 y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- f2 X* n; o+ q! E2 r5 D
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) l* h7 ^6 }9 ]4 E* U( ~
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");7 x5 s; G5 u1 a# o9 }( j
  788. : i5 I' P4 G" o! J
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ F# m" f! D2 {( K
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    5 v3 S3 s# g- y& @5 r
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)! @% B' y) p% K3 y5 S1 s& }6 }
  792.                 {) f& @0 [, [* Y9 P8 [6 C- M& s3 q  c
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");, O4 Y" v4 K) f
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ! `: j! z7 [, Z( ?' Q/ r
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");$ I* T3 N" y0 d7 u; a4 c7 T
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 I5 U  Y/ y0 z+ _& X

  797. / y. B( n' N4 b: Q! g% M1 o
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + E9 h, e: d% m" y( ]- O; J
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' O' n4 v5 V# D  F5 E: `
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
      N# p8 q$ W. l" D  e9 R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 W  q  ^1 \2 a+ x# m
  802.                 }
    " D+ f. A3 n8 K8 D# C  v; `4 p' ?0 H
  803.                 dwStartUpSteps=5;
    : X  w7 M/ y7 x& V+ L0 B7 g" N" {/ Z) \
  804.               }" V( ?# L2 a. y- d6 w: E* Y/ n  c
  805.             }: ]5 a2 ~$ q; [: U$ O
  806.             else
    + s# A+ I( n4 e& c/ L  _& ?4 ]; a9 j" G" ]
  807.             {
    ( S# S4 f" W9 h/ @" p, h: r! }
  808.               unlink(".\\DownLoad\\checkversion.txt");
    : @9 u" g" v; i9 H! i
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      t3 e( ?, `# |: d! p* _8 D3 O- w7 B
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : I9 _( z, ^1 h: |
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    8 a! j' u/ K" w1 n' ?

  812. 7 j5 Z+ l' V5 P) B+ E6 E
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , \% t- O* ?+ X4 C  H
  814.               dwStartUpSteps=99;: U4 @' O5 P- l  {" `- }# I
  815.               bFinishUpdated=TRUE;
    $ W( A4 A  X( j/ R7 \) N8 n: ^
  816.               bCanUpdate=TRUE;
    ' V. x8 I3 w) I+ _% E
  817.             }1 q* s3 Q# o! M7 [; o
  818.           }# x, M; Z# x1 k6 e
  819.           else8 i& W- ?6 @# q1 B/ A
  820.           {2 f' [2 v% K! y) D
  821.             if(!Dn.Connected())
    4 D: w3 q( D9 i
  822.             {6 z4 w: s/ N; ?! c, z* R. E
  823.               bFirstUpdate=TRUE;
    + f9 C) \$ e. V+ |# G- P9 ]
  824.               dwTotalFiles=1;
    4 i6 H" E7 [+ B1 i" K/ [! f
  825.               dwDownLoaded=0;* t# B& I& @* O4 _
  826.               bSilentStep=FALSE;
    " [2 B. c$ r5 z3 R
  827.               bCompressed=TRUE;  f7 o7 T; e; @! `) z( p! i
  828.               strExtLocal=".\\DownLoad\";6 y% E2 h5 ~- f" U) B5 o, L- z
  829.               strFullName="update.txt";
    + P6 B" h' }  Z" B
  830.               dwProgramState=AP_CONNECT;
    & R( `$ m: a' i
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 c" q' p3 B7 a+ e' d
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & d/ `3 x1 G7 {* T
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");# {' T, l0 A! r- B0 G/ M- [; [
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ q5 i$ L) l7 ^) Y# `) ^6 o. t
  835.               unlink(".\\DownLoad\\checkversion.txt");6 s0 Y: f- y- j& t) H
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ! e, C; y6 [- R6 c* K7 g! i
  837.               {* ?* }. V1 M1 w: Q
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");* ?% M) A- w1 X" Z) T7 r
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");' _; I0 d% P2 u- t5 q* J
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");' I8 Q/ R7 i( N% o+ _% l
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      Z- X3 ]5 I* c" v4 e# e
  842.                
    3 K, L8 _$ P1 h* Y3 o
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 M* g- N0 T8 u  \  c1 e: L
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" ]9 o1 o) j" c% h/ o
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 X3 [* |6 o/ i3 }3 o
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . s) U. v; I; G
  847.               }# b+ |+ d2 w. p1 d3 p
  848.               dwStartUpSteps=5;4 Y( }3 r) l# |; {
  849.             }; B. w% ~: B: R0 M- d
  850.           }
      N. B% V2 Z/ a5 ^9 g0 x% e
  851.         }
    " V- a8 `3 l8 h% ]& m" X$ l9 J
  852.         else5 }' D5 O+ s& B
  853.         {
    * x+ }) i9 r* G+ W1 F* V! C
  854.           dwStartUpSteps=3;
    5 P8 _5 {4 I+ F+ D4 |' O1 c0 }
  855.         }
    8 C! t- d  }' D2 J
  856.       }
    0 b3 m6 P: b' |5 q2 W: z" i
  857.       break;
    % u& A0 s: w' n, ^
  858.     case 5:6 S; @( W: t7 k  `  k8 Q7 O
  859.       {, i& H# n* u& T% A# E1 s
  860.         if(GetFileAttributes("Wsa.zip" )!=-1). H5 Q5 Q, b2 H3 F+ N3 S
  861.         {
    # a) y2 J* N. C  r. f* p
  862.           int opt_overwrite=1;. V$ s& c: ~! s4 U
  863.           int opt_do_extract_withoutpath=0;
    . u$ L2 L+ y; d2 ]5 O
  864.           unzFile uf=NULL;; `- J) A1 r" U% o2 E0 V

  865. 6 T0 o% U6 a7 C$ @* G4 ?; ?
  866.           uf=unzOpen("Wsa.zip");7 t+ k" k! E6 m% I5 w& {$ j
  867.           if(uf)
    & {& [7 g3 _  T  k) h" y
  868.           {
    $ |1 M0 U& S: g6 x+ f% |
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);4 v7 @1 ~! {/ p, F; }
  870.             unzClose(uf);5 {- t( e( K) {3 I/ S% L
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");! e& y9 m  T" w& D' \
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");7 e* Y5 ~% f: o# v* J; s' u- ?, l4 o
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");7 j9 i1 d! C& u% ]
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 @8 l% `! o1 D* W2 p
  875.           }0 m( b# k: r  k6 |
  876.           DeleteFile("Wsa.zip" );
    # f# r% h3 z) n3 e* O) A
  877.         }* {" Q' Z1 e/ \

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

( }, i9 W$ T% S: E/ e* `- Y

評分

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