CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
  m  f4 S" a- g$ m, i, {
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 B2 I4 e7 O# H0 g
  2. //
    4 x7 \3 E" k- s" Z
  3. 9 e; c9 W0 `, O. w3 h5 e7 |
  4. #include "stdafx.h"; w( b- [5 @: A8 a
  5. & P% M* H; F+ g+ ]
  6. //#define UNICODE! V5 ^9 p4 V: U* ]: u  w
  7. //#include <gdiplus.h>
    & P! }5 E) l# g$ U% @* G  }
  8. //using namespace Gdiplus;
    ' _6 R# X( t- t; J
  9. $ B. Q) ^1 c! \/ p
  10. #include "RevApp.h"
    2 ^" z/ _- ?5 e1 C4 y. Z. V, ?7 G
  11. #include "RevAppDlg.h"% R9 y: P. K- T) C$ ~

  12. & y5 Y1 g- |$ m
  13. #pragma warning(disable:4786)
    7 E4 V, F& s1 l. D5 Q/ ]- c3 h1 K5 J
  14. #include <map>2 |! z* c8 s9 [: U; O
  15. #include <list>
    ( S! C9 O+ o  v" _4 X
  16. #include <direct.h># c$ u$ I( W1 d2 Y

  17. 9 g8 ?% ], f5 B) I( K/ g
  18. #ifdef _DEBUG$ z  I2 H2 q  E6 I7 N, x
  19. #define new DEBUG_NEW
    5 c; D& d% G  j* P3 ^+ _9 z9 v
  20. #undef THIS_FILE
    : c" b8 v& z' V! \
  21. static char THIS_FILE[] = __FILE__;' L/ ]  w( _! @$ e9 @
  22. #endif
    7 g3 c; s8 Q( i" [1 T& k, P/ N3 I  e
  23. #include "SkinResDef.h"
    , e) x8 q/ a' E7 T% T) E2 S' T0 t
  24. #include "ChangeBG.h"
    * }0 f' O3 v- N
  25. #include "AFXINET.H"
    1 d/ B, @. ?0 x: V2 D

  26. & G  T% s" Y" h3 J! ]
  27. #define TRADITIONAL_CHINESE 0' t4 r: l! ~4 U
  28. #define SIMPLIFY_CHINESE 16 Z( a& p; }+ P% H! }4 C4 b
  29. #define ENGLISH 2
    2 J5 ~' }+ C3 s3 U, a
  30. int m_iLanguage = ENGLISH;" G1 F6 J/ [4 v; t: J' o
  31. /////////////////////////////////////////////////////////////////////////////+ Z3 c- z" W/ j- V: `  s" W& O" f2 E: e
  32. // CRevAppApp7 x# m2 l  j* Q& c1 v, p$ L

  33. 9 z9 o8 F5 e. B0 F, {% x. w' w: ]6 c" ^
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    2 _  I8 H) z5 R% g+ o5 i* h0 ^2 T
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    - [& w& u  g  c- p7 l
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    & }- I, n3 T, X2 a1 P2 p, t, K" n
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!" k+ h7 q4 s( V2 F2 W! V) Y
  38.         //}}AFX_MSG
    * H# ^& i8 p/ f; H# |- W
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)" E3 d% u. ^0 |
  40. END_MESSAGE_MAP()- d' o( |  c, O

  41. $ z9 q. j& ]  s! J. F8 l
  42. /////////////////////////////////////////////////////////////////////////////5 c- ]( U; y4 Q4 C# J2 \
  43. // CRevAppApp construction! t: d1 C/ X- K7 C# U
  44. . H  `. `, a3 V3 l8 J- P
  45. CRevAppApp::CRevAppApp()0 Q% x, E: }9 p) ?4 U9 Z! U
  46. {
    + l) J! U: b% E
  47.         // TODO: add construction code here,0 }3 a: _! ]$ r( `6 M. k( g, n4 @8 t
  48.         // Place all significant initialization in InitInstance
    1 f% X5 Q2 q. B! i. n) O  S; i% t
  49.   bDisplayIsBig5=FALSE;
    ; [4 P* g/ ~1 f: T, ~. m* ?
  50.   bRestartUpdater=FALSE;
    2 u" m! @- [3 r
  51.   bFinishUpdated=FALSE;  j7 O; y3 |+ |0 Z8 V
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;: U; _3 i( E( O5 @
  53.   InitChangeDataBig52GBKS();% E* P+ l6 Y! I8 G! ^3 c% d
  54.   InitChangeDataGBKS2Big5();& n, E* d4 K3 f& m
  55.         //1 n5 ]3 g2 {1 e. R' T
  56.         bClickRunExe = FALSE;
    ( O: q# t2 L8 O3 W8 D! o
  57.         //
    3 W) O. M3 a5 d) y; p6 [$ Y. Z1 i
  58. }  I+ z( J" t, J4 m# M: u, l, q& O
  59. ) x  Q3 K4 z, A" D: {' Q4 O
  60. CRevAppApp::~CRevAppApp()# v; `$ D6 |/ T
  61. {
      }, B5 t/ E- F4 X5 i2 g; u
  62.         // TODO: add construction code here,* n/ M% @$ Q0 Q$ @' O7 k
  63.         // Place all significant initialization in InitInstance
    0 g' e( L$ b% O/ L! c% @2 s
  64.   EndChangeData();1 ~( C8 O4 `- K+ N5 U
  65. }
    : ?" u4 A& _% T5 V
  66. ' t  q3 ^, y0 @8 P9 D+ A& x7 E
  67. /////////////////////////////////////////////////////////////////////////////
    * P" O7 f* x% a) @' `+ P
  68. // The one and only CRevAppApp object
    / i& i; O; a  _; e8 ]: D4 k8 d
  69. * s" e2 y! T% Q( g4 h1 h- s) u9 R
  70. CRevAppApp theApp;( m" Y7 _( b& R& E

  71. $ x/ L$ k* n% ^2 h' h! O& C
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)* _& m" K. [" x- Z6 l# L, F/ q' i
  73. {
    * p: L0 F# x& |  J* c
  74.   int iEOF=0;
    4 n4 ?- S; c: C2 O7 w! q. A
  75.   char szTempName[MAX_PATH];
    ! ^* F! j. ]8 O. y  Q  h. m
  76.   *szFileName=0;
    ! d9 o# G( ^! d5 ?
  77.   iEOF=fscanf(fp,"%s",szTempName);+ l1 b8 N2 I+ Z, [; I' v2 ]; U( b; Q
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    0 P6 J. `% f. \/ {1 d9 I
  79.   {: i! m3 o4 ^# N+ |' p9 C
  80.     strcpy(szFileName,&szTempName[1]);
    ( w! A$ }9 l( y7 L$ Y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    4 e% ^0 [5 H7 {% _( K
  82.     {
    & U4 r* u3 @. k! d: R2 O
  83.       iEOF=fscanf(fp,"%s",szTempName);
    1 i+ Y, Q( x$ t& `
  84.       strcat(szFileName," ");: \( k& U( b1 A4 v+ [6 N2 D
  85.       strcat(szFileName,szTempName);
    & k' M8 |0 |( J; A
  86.     }
    # j8 d" F1 }, m9 ]7 m* B: ?
  87.     if(strlen(szFileName)>=1)
    9 W! N9 N" A. m$ c% g0 I9 _
  88.     {
    $ o5 B% L) B9 }# M
  89.       szFileName[strlen(szFileName)-1]=0;& P) U6 l# g1 D
  90.     }
    6 H  k0 d9 K  W) v  S, F' R/ _" H
  91.   }
    6 p( p9 l7 X$ j0 l
  92.   return szFileName;
    - G+ F9 F# I- r( a. s5 w
  93. }) P: V7 f6 w7 g  a6 i
  94. 3 }# {% h) W9 L8 M) f0 x8 A
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    % D$ m4 {6 n# F  S3 u
  96. {; u) ]8 V4 u3 M0 a6 v( E8 o' k6 p
  97.   FILE *fp;# ]* m- L3 y, g$ A& W6 J" x& i
  98.   char *key=NULL;
    ( V( r) |9 J! ]3 V! u! v
  99.   char version[MAX_PATH];
    + w5 |% T" K. o! y! U" U0 a) p# U
  100.   LPUPDATEFILE file,olds;
    * ]2 l) n0 R9 q! }1 e0 j5 U
  101.   std::map<CString,LPUPDATEFILE>::iterator p;6 Y# U. y/ f' \* t; G

  102. . n8 Y  N3 M- c7 w, V
  103.   UpdateList.clear();) C# i- q* u/ x1 J  q* |% C
  104.   UpdateFile.clear();! x# g# d+ n+ o' }& e
  105.   if(GetFileAttributes(filename)==-1) return false;
    + C, l6 ~' o$ _3 k, l7 ~
  106.   if(!(fp=fopen(filename,"r"))) return false;* S" B- j* p3 `2 Z& Z
  107.   fscanf(fp,"%s",version);
    ; L1 t; t4 G1 X( |
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    9 L" @) x0 ?8 B" b* o4 P# N
  109.   while(fscanf(fp,"%s",version)!=EOF)2 |( p4 R  V3 @! ~% C
  110.   {" o# g( \2 m+ ^2 w- y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 q; b8 w' Z; V1 \" s4 I
  112.     fscanf(fp,"%s",file->path);+ k3 @2 _9 |) x0 D6 P& [4 S
  113.     ReadFileNames(fp,file->file);
    0 @8 E5 I7 R# b$ b- V# x! e- G
  114.     strcpy(file->full,".");5 y' R# X4 p2 [2 D- o: B
  115.     strcat(file->full,file->path);% y8 Q( s2 o# q2 W! I  y' C; B  b
  116.     strcat(file->full,file->file);- e% s3 M0 }3 Y  k7 }
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())% }9 A+ w+ @7 T' V+ v& h6 K; F$ F
  118.     {  l$ }8 B9 h# k5 v, u, L( k- R+ I
  119.       file->vers=(float)atof(version);
    . u4 h* V( U! K6 {; _" [
  120.       UpdateList.push_back(file->full);! a5 @5 o& `! Y: s8 p+ J1 F; f
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 p3 T' L- Z8 t' {% |, E
  122.     }
    ! @# u  Z% Y( e) A+ \) @# B
  123.     else( l4 K2 F) h! W; H: c6 B1 _
  124.     {
    & U2 S$ B+ K4 U4 i2 E# C9 W/ L- }
  125.       olds=(*p).second;3 H/ O% d' ^+ X2 p7 A
  126.       if(olds->vers<(float)atof(version))
    8 N* v7 e. }3 {( V/ f
  127.       {2 W5 n6 J' c2 q) O- B0 {
  128.         olds->vers=(float)atof(version);
    % o. O( a  @( m+ i
  129.       }
    : _# k% _' @2 v' J
  130.       free(file);+ C# ?; x: S5 l+ ]7 E
  131.     }5 p+ N  w" |9 b, T0 f8 f' h
  132.   }
    ' Z# o# \, }  E7 q9 \' _
  133.   fclose(fp);! H1 y0 ~3 ~& o% ~/ F: R/ P
  134.   return true;8 d+ n4 }' q/ T, z8 [6 ]  T& k2 h
  135. }' H) T: X! x0 K. D1 d9 `
  136. 0 u! g/ S# p1 O( A7 D! \, ^& K
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    / L9 Y! f* y8 g3 {- I  ~
  138. {
    ; z; `0 }) E" u1 n( _
  139.   TCHAR  szFull[MAX_PATH];' m# G" J! X, h* @3 h$ c5 x  t. S/ i
  140.   TCHAR *token,*inter;
    $ o# g2 w2 A& d0 c2 `, P
  141.   *szPath=0;
    - z  T3 J' {* [* [
  142.   strcpy(szFull,szFullPath);% [/ t$ W2 ?. V1 {
  143.   token=strtok(szFull,"\\/");" u6 y( B# ^0 O% ^+ Y  k/ i2 u
  144.   inter=token;: w2 F1 r  a4 o: k. ^
  145.   while(token=strtok(NULL,"\\/"))
    % `& b2 o( _' v& t! {' [  N( }8 r
  146.   {
    1 G4 _, v7 q5 V6 Z% ^7 P5 D  Y
  147.     strcat(szPath,inter);
    , n; d, P4 j- `0 z: _
  148.     strcat(szPath,"\");
    ! ~8 ^9 j& O1 O2 q  w5 h
  149.     inter=token;" v/ f8 R3 K' R/ h) _
  150.   }7 _( w  @# K- }& K. Z& w( c
  151.   return strlen(szPath);! h  w/ F4 K7 M4 c
  152. }
    8 v  s& B% e5 M. L  S

  153. 8 X( m9 b6 R" V2 @. g! [. u
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)( b$ e/ d# f+ W5 \/ r, W, ~
  155. {
    2 Y0 Z. z7 Q( F8 n+ l
  156.   DWORD attrib=GetFileAttributes(Target);, _) q8 I2 F! `" s
  157.   if(attrib!=-1)8 z& P% L! L0 B# G
  158.   {
    0 R7 o- r4 q4 f* C- H7 \( d
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)); [/ J9 c* M- h6 H4 `  Q
  160.     {
    ( K7 j6 |0 K7 }. R# t$ J
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);0 h$ G1 `; _- t/ |" R
  162.       SetFileAttributes(Target,attrib);7 {; Y) E0 @9 W  O
  163.     }
    8 u7 Q; W0 W  `# u- h% Q
  164.   }" J6 q1 e+ O& _/ Q
  165.   CopyFile(Source,Target,Erase);
    ( r  a8 e, D8 ~! \$ c$ S
  166. }: V& w6 n/ p! ~& x+ C

  167. 4 m' c. B3 s- b
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)2 h9 L, t3 c( U2 j% }3 ?
  169. {
    3 j7 W- e, P  @1 M7 }8 H( g
  170.      FILE *fp;2 ~1 j/ B) n$ Y7 T0 B4 C
  171.      char  szBuffer[8192];" y7 L0 f" _0 N# S
  172.   va_list  argptr;
    8 G+ C; v% W- c+ l0 u8 e4 o. a
  173. . j/ y. }- ~- _! t& ?
  174.         va_start(argptr,message);: q$ m* d. f' d0 b: K- ?6 g8 R
  175.         vsprintf(szBuffer,message,argptr);+ C0 V2 i: B- ~3 F9 i1 X
  176.         va_end(argptr);
    & g# z; j) d: ^/ _3 ]9 }
  177.   fp=fopen(FileName,"a");
    ; e$ E6 B: M4 M
  178.   if(fp)
    & s0 |5 r2 D" Z3 H
  179.   {
    ; b, ~1 E" H/ C4 i9 V
  180.     fprintf(fp,szBuffer);+ \: z8 Y4 t5 _: i3 i  H
  181.     fclose(fp);( L' Y4 b  x7 l' c* T
  182.           _flushall();
    ; [5 I* @- Z" F" L7 L
  183.   }
      b& B$ h) L3 {: {5 A: C
  184. }1 E1 r! ?3 d  T
  185. . Q7 c# g) o7 d4 W2 j: G. n1 T
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    9 \# p& d' A) E2 ]# ?% f: D5 ?
  187. {% [2 x# i, `$ B* b
  188.      FILE *fp;
    2 z: T2 w5 r; p+ ^' ^
  189.     DWORD  attrib;' q. x8 d- i0 l2 a
  190.   attrib=GetFileAttributes(FileName);0 H- a1 _) U* [$ k+ d
  191.   if(attrib!=-1)/ M; d" z7 l- n* _( k
  192.   {
    2 e% x- H  r, M1 I- ^8 S, @
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);+ A! D4 Y1 k! M6 \' q, M+ d
  194.     if(!SetFileAttributes(FileName,attrib))
    7 C8 P2 P& y1 K" G8 t' R
  195.     {" k1 }6 E" \: F: Z  R
  196.       return FALSE;# x+ m4 _- E8 K7 `+ _/ G3 W
  197.     }8 s4 w6 X+ e, ]4 R0 B% c
  198.   }, X, g7 l$ A# _5 L6 _& y
  199.   fp=fopen(FileName,"wb");
    / [) h0 r# C- C- @; r# B% b$ m/ l
  200.   if(fp)  S  W5 J! d: r, w" S- q6 d5 T; O& [
  201.   {: G0 V; |: [2 \) r
  202.     fclose(fp);, i! I" a, |0 p' u* u% T6 s
  203.   }/ T  N6 p2 m8 @9 D
  204.   return TRUE;
    & m+ r/ h( B- c! E
  205. }9 ^$ L5 L$ e# o" s2 c7 x7 J
  206. ! q# D* u# C$ y
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ( Y0 t" O6 G$ p9 @0 i' [
  208. {1 s1 [8 K7 U4 O9 Y
  209.   char filename[MAX_PATH];6 b0 s" w; G: c0 N7 I& A3 w4 X& \
  210.   LPUPDATEFILE file,olds;2 p- [4 ~( m- Q
  211.   std::map<int,CString>::iterator i;
      S7 i3 `+ [6 Z$ m
  212.   std::map<CString,LPUPDATEFILE>::iterator p;/ \1 U/ d* N% z8 u
  213.   std::list<CString>::iterator l;
    9 w+ I9 @& J. h& K7 A2 Z; O* J
  214. 1 h+ n& i. m8 u$ L) a$ K
  215.   if(bFirstUpdate)
    4 r4 D3 U- T4 H4 P( k
  216.   {) z2 `1 o( K) A3 a- H
  217.     dwCurrFile=0;8 Y/ s7 n$ Z0 N4 y' T
  218.     bFirstUpdate=FALSE;+ R- X2 o- l& L7 `5 L7 g$ M
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- @# r& s2 Q6 a- d
  220.     {
    1 D- J7 T2 Q  z0 P
  221.       dwTotalFiles=UpdateLocal.size();# ]8 l( q7 M! U9 f  L7 a' {6 i
  222.       dwDownLoaded=0;0 ~* h% \. `4 h1 w
  223.       bSilentStep=FALSE;" J8 {7 W- |9 B  [3 o  w- ~
  224.       bCompressed=TRUE;
    ) [# g( q1 O! R( J, L
  225.       strExtLocal.Empty();
    2 L. f) T. j4 C+ |( |
  226.       strFullName=(*i).second;
    ) h% _/ Z" P6 B6 w2 }
  227.       dwProgramState=AP_CONNECT;/ i5 v) V$ E- V: u4 X7 B& [% y
  228.       return TRUE;
    . K5 d+ r/ R) [2 X
  229.     }
    % s( U0 Z; O9 P# M8 t  M
  230.   }( o. E4 `4 k( v/ {4 Y+ s, c
  231.   else if(bRestartUpdater==FALSE)& B$ G8 h: {$ Z( ~
  232.   {; G9 Y5 y5 V0 ]. G
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()), F% i& Z  q9 F4 u' `3 t; i( v
  234.     {$ L7 F# ~1 R: U( z" d! i
  235.       file=(*p).second;+ M; E5 k! a. f( y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())( q4 W( Y# |  ]! y% C0 w7 f' p# w
  237.       {
    6 q2 R: @* H/ I0 u
  238.         olds=(*p).second;; \5 S* b! z* P8 e( ]$ l3 b
  239.         olds->vers=file->vers;
    ' y7 C' }+ j; N: ]; w) m+ F. I
  240.       }/ z8 z5 d+ v! Q+ A4 _0 U! g
  241.       else
    ; O" M! f$ f2 Y- s
  242.       {
    : A; o5 N8 z. K: q2 I8 c, ?
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' F+ T8 r" Z$ K" i# M
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* K- E" Q5 [2 B" ~5 j
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 O; Y9 p6 l' N7 R7 {5 z5 w
  246.       }/ X9 \* ~7 v# R% D7 T  Z0 a
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- L: h. w4 G" G3 a
  248.       sprintf(filename,"(%s)",file->file);5 c. [+ {- D( V# Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      s: q) _8 x" a# d- [/ n
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " |! ~5 D7 x! e
  251.     }2 u0 d& t6 q) E2 K$ J6 y2 q8 _
  252.     dwCurrFile++;. I3 s) y$ f9 x1 Z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / V8 {4 b; h7 V7 s/ C
  254.     {
    " L* W# n, j5 \3 s
  255.       bSilentStep=FALSE;
    : n) B. `9 K7 N% j0 m2 A
  256.       bCompressed=TRUE;
    7 ^) C0 [) o$ O9 C
  257.       strExtLocal.Empty();
    9 k. y: U5 F6 q1 m  o0 g
  258.       strFullName=(*i).second;
    6 j. P! C+ f" R4 Z2 B' \
  259.       dwProgramState=AP_CONNECT;
    0 L% K! ]- U/ m+ O* x5 r; n) r
  260.       return TRUE;
    3 W4 Y' v% {4 p6 V
  261.     }: \6 G$ T8 x) a* E$ g" o- B
  262.     if(!bRestartUpdater). P! |7 n. r! l- A
  263.     {
    , o1 e  v: n5 C4 O
  264.       int iCurrSize,iFileSize;& s- T4 _0 \& R7 V1 ~+ T0 I: H
  265.       iCurrSize=0;
    + W; Q- {3 n6 _# F7 R* C: N' r8 e
  266.       iFileSize=UpdateList2.size();
    . c; p# D) ^4 d% o
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");$ P/ b- c' C. R$ L- _
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");. B: F6 P' N! V+ {
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");# u; K2 U0 Y( Y% D! r* I( E3 i( z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 ]' ^) B" A  V8 ]9 Y. O) v3 Q
  271.       Fclearf(".\\update.dat");+ ?! B  g0 ?* Y; c( i# r" T, S  |4 W
  272.       Fprintf(".\\update.dat","Bloodyf\n");* H1 s, N9 p: F
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)6 f2 z: s# g' M$ A
  274.       {
    * t$ [/ ]. N* i9 |9 M
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ! W9 S5 C% j# @' ]. K
  276.         {
    - J* {& P! I6 |' K
  277.           file=(*p).second;' y8 }: u9 [" i+ a( J
  278.           sprintf(filename,"(%s)",file->file);- A  b/ u& f- u) O  d8 W, B# H
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 g5 g4 l. L4 W2 M# s
  280.           iCurrSize++;
    - r* @& R8 i2 [4 D4 e
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));( t! I5 e5 ~9 _% Z2 V. M3 q
  282.         }
    / n6 I& R6 l0 j& c2 d4 P
  283.       }
    " ]! M; [# t* g, l  P! m) E
  284.       unlink(".\\update.txt");/ @  k7 }1 v' J
  285.       unlink(".\\update.tmp");
    7 u$ \  P+ P, b& Q
  286.       Fclearf(".\\checkversion.dat");' \  h* e  A, \, R' w& e3 E
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);; g1 f" [$ R" d; D: D
  288.       if(UpdateLocal.size())9 i  o# [+ p. r0 W3 Y9 g
  289.       {5 W" l1 X: u9 d6 F' X% H
  290.         UpdateLocal.clear();! G8 ^* V6 K. M$ Q
  291.       }
    : e4 ^/ p3 V/ O9 z: L
  292.       if(UpdateFile3.size())" z5 i2 V0 L- U
  293.       {$ i4 l& C, r, v$ L$ r. ^* K
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ j) r( j# c* g& w  K. B+ a$ x
  295.         {
    ; N$ C/ z6 J+ x; A. A% R4 z8 P2 b
  296.           file=(*p).second;% y0 Q( L! ~) f
  297.           free(file);
    # ~$ V* K/ c5 M! d( z# V  t( G& ?
  298.         }, ~9 o- M8 Y- N  V
  299.         UpdateFile3.clear();; ?8 ~9 Z1 z4 E: O: J' _1 ?
  300.         UpdateList3.clear();
    ' S' Q$ D  ]' z8 m7 v" w/ h" F, g
  301.       }: X% q8 H  G3 x. K2 ?* z
  302.       if(UpdateFile2.size()), r0 i* Z- |( c& q/ a3 Q
  303.       {
    / [* `- X6 t# V" i" b4 q7 _
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)0 Q1 A% `7 J/ ~* r
  305.         {
    : ?9 A( o& U. |. \8 V
  306.           file=(*p).second;& w' s0 t) T. a8 F+ Z0 L0 h
  307.           free(file);; x" G$ s6 K7 m% F6 }) J
  308.         }5 V" u+ G8 `/ v4 j
  309.         UpdateFile2.clear();
    % a0 P  K. d9 t* P. W9 T! d0 o3 [
  310.         UpdateList2.clear();9 Y; I$ \5 d! b4 O
  311.       }
    3 r3 w' f  S  |: ~" B4 @% n3 K' j
  312.       if(UpdateFile1.size())9 O, V, |0 H2 a; U# x# L& [; A
  313.       {0 a$ z& D6 _: E7 |9 C5 s  C) C$ R2 S8 x
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* ?. [- Z- K. w" @' Y# r! z& r
  315.         {
    1 H" D  q# A. Q, r, J
  316.           file=(*p).second;
    6 b/ P. _* Q. \, B5 Y2 n/ R
  317.           free(file);5 u9 O. T, e( ~7 o7 S) u
  318.         }! N1 P/ L; b* y9 {2 w) m
  319.         UpdateFile1.clear();
    + |1 G" U( j0 b% j9 l4 E. M3 k6 ~
  320.         UpdateList1.clear();
    % D2 a, d1 @; i( k5 M) `" G/ a/ D
  321.       }
    , d: F1 r5 }( r0 L. ^8 K# f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    - `, Q7 ]" v% k
  323.     }
    7 K  t* T2 B# ^0 q' u" [' [' S
  324.   }
    * c2 w+ A6 m3 p
  325.   return FALSE;
    - k) e1 a" E. G0 I# O
  326. }
    " P; e8 d! w- J$ d4 T6 F
  327. 6 a' H6 R0 j8 P6 z. H8 P- u
  328. void CRevAppApp::ClearAll(void)
    9 }8 D7 n$ X+ q, D$ l% D
  329. {
    ; D6 U$ @8 K0 R8 |
  330.   LPUPDATEFILE file;+ [  f( p3 o9 B( i5 s5 ^
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 y# {1 x5 h4 k2 V1 ]

  332. * a4 ^+ S0 Y) `, V
  333.   if(UpdateLocal.size())$ I' _2 p. J% P7 N- J1 Y/ Q
  334.   {% z1 d& ?9 S# n; D
  335.     UpdateLocal.clear();3 Z! @# S: `% S# ]) q8 ?
  336.   }
    4 k0 Q+ A+ T2 U3 F) y; `
  337.   if(UpdateFile3.size())/ [6 {$ H2 g" T
  338.   {, r& V/ q3 h- C
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). _& c* X- i2 V- J! |
  340.     {& k- e3 O) h3 b9 j) F
  341.       file=(*p).second;
    ) o6 ~7 t+ C1 n8 Z) m5 S* z
  342.       free(file);
    / I! E1 i0 R2 i( T
  343.     }
    ; s5 m, r; j; l1 {
  344.     UpdateFile3.clear();' Y) j6 M' q/ g+ v: ?# e( Z3 _" S# D
  345.     UpdateList3.clear();
    7 A% e, j6 M4 ^) v
  346.   }% x- s4 s" {: [. C* |
  347.   if(UpdateFile2.size())- q& ~: j4 t; {
  348.   {
    9 D" P( S5 M+ n$ v
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# i$ Q  L1 h& @  J
  350.     {8 o& R4 g9 G% ~* T
  351.       file=(*p).second;! Z2 c9 C0 ]/ y1 H
  352.       free(file);( ]; Q7 x$ _( l  B3 d$ r0 _+ [2 K
  353.     }
    - s4 N' k; O& g9 s, p
  354.     UpdateFile2.clear();$ ~/ c6 J' }; H$ _
  355.     UpdateList2.clear();9 }) [: v! W: s( A; Z0 P
  356.   }7 b8 H' ^" n* {5 e9 C. ~. n7 {
  357.   if(UpdateFile1.size())2 P4 D; l/ w4 G. @
  358.   {
    6 g$ j2 i# J% @# A
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ f+ r1 r8 Z; C( C; ]) k2 z
  360.     {0 C6 C* w% p- a% w4 t) Q
  361.       file=(*p).second;
    3 j) Y4 V& K) R4 a
  362.       free(file);  i6 `, e3 {* D1 ~
  363.     }* \: b- W2 N1 Y! i
  364.     UpdateFile1.clear();
    & f! o# }. I9 c
  365.     UpdateList1.clear();
    5 h  p0 d# s0 H
  366.   }
    2 M8 g3 O" D# ~4 y- L6 Z
  367. }  % q3 P# M5 {8 b0 D  r: I5 e8 w9 ^
  368.   " U6 |2 B0 G5 ^% L
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    $ N' @6 R1 x' A# S
  370. {' Q5 z4 ?5 t+ x( E
  371.   int c;
    ) W! A( f1 Z+ \3 Y& e
  372.   LPUPDATEFILE file1,file2;! R' i/ f& L8 F! L; H$ P! T  [& v; `
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 I6 u! O# x, a6 R
  374.   std::list<CString>::iterator l;
    ' D) O- m# C6 g( M

  375. 6 c  O0 F7 l/ Y! q7 B7 I" m) |
  376.   UpdateLocal.clear();% |% {0 Q. @) W' @$ V: i
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);  N' a- S8 R5 C7 Q: b4 ]& U
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    # x; O( _+ p9 p5 e& f1 O, E2 W
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);2 Y* b5 N1 w- b' t. T" Y9 o; y" x
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);5 I! K' u) e8 n2 [
  381.   if(UpdateFile3.size())$ r7 m; |* `8 \& t" O
  382.   {$ Q' ^+ r0 Q5 ^) k
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)6 ?: F  {" X9 G9 H, I6 D- E3 U
  384.     {
    - l4 N" F: Q* ~0 t8 y9 G
  385.       file2=(LPUPDATEFILE)(*i).second;& |6 [! m" T* V4 V
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : S4 P6 ]) K$ ?! w7 J# A
  387.       {
    ' J; M$ m( z2 |/ }* ]
  388.         file1=(LPUPDATEFILE)(*p).second;
    & i2 e5 p. X$ _+ c9 x$ Y( x0 Q, ~
  389.         file1->vers=file2->vers;
      j; r7 o$ l: b' p; B$ B& m
  390.       }, r, x/ {; Y- f+ L/ Z- P7 Q2 [0 Q
  391.       else7 U' j$ r2 B8 Y/ L! t  C" q0 }/ d3 W' L
  392.       {. J1 C! A$ x( Q. i! a0 ^5 {% E
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; v9 [7 R- q* P: ~
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));$ e0 ^) ?+ m% i, e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ! Y6 ^- d# t/ [1 r. r9 ?! d
  396.       }* e; b6 H3 S9 b( i
  397.     }0 G, X; t. T: L1 E( ^3 B% M' D7 C
  398.   }
    * ?: ?0 _  B% M* _) t6 Z/ U
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 V3 ^2 W  Q0 _3 y4 Q, _
  400.   {
    3 I3 V9 r: B# @
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ) e# l. I  w6 y) s7 b4 j
  402.     {6 _7 j! e* `- J# a0 a/ Z5 N
  403.       file2=(LPUPDATEFILE)(*i).second;' E, Q( j3 @; H# T1 U& h, T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  x3 C  z/ _6 W) c  ?% ]# w
  405.       {$ T+ W; l5 ?4 F3 I# G
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 @' B" [1 a' _9 z. o# n
  407.         if(file1->vers!=file2->vers)
    - Z/ J% {' @' ~  x, T
  408.         {
    0 R2 F0 _4 ]2 u
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 J5 F) t, A# N/ {8 x
  410.           c++;
    7 N* b* h/ ?, s5 B$ W' z) F
  411.         }8 l) f. Z1 d/ z/ G; U1 ?4 S
  412.       }$ F5 K) x9 u. I+ _! ^- R! g
  413.       else
      {. S9 v9 c. `
  414.       {: [4 y; J1 V; b7 ]& h8 Y+ J
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 N% Y1 \2 v1 s( y
  416.         c++;5 I( f) n: Q4 O0 }6 u
  417.       }
    . c# C! J7 X: R+ [0 E4 \
  418.     }1 v9 x$ F3 ~  A
  419.   }
    ; N* e7 U. I$ ^/ J! j- ]
  420.   unlink(".\\DownLoad\\update.txt");3 Y, K) ]3 ~0 O6 q2 q" u
  421.   if(UpdateLocal.size()) return TRUE;
    8 G  H* d; B6 K/ r8 v
  422.   else                   return FALSE;6 q4 e8 Q4 g* Z9 [1 V: a  |$ f
  423. }
    7 K3 R( ?, _9 P+ m

  424. " T5 p1 H2 n/ k. R
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"7 l$ f" n  L3 K. d9 K0 i
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"# n' h8 k7 T5 J7 p& p4 o

  427. + y. J# f- n/ c/ s3 b3 G* x. ?
  428. ( s+ [% V2 }( F3 K6 Z& f
  429. ) i. M4 o& z0 |3 [+ _' B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)8 V7 W. h! |( O5 s  U6 @* l. m
  431. {
    ; k" ^. l7 X( q% p! R3 W
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    8 o8 h3 X, r1 X3 z; A( h* ~+ U9 ]
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 N/ {1 m0 v3 R/ H
  434.   {
    . j: Q  {  B! `- }- V
  435.     char szLanguage[50];1 U1 p2 a2 q6 Q$ x! O
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 O; N% \/ ^8 A. l3 l. [2 g/ {
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. G6 `/ _+ [' s9 J6 Q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* @/ {. H3 o- U9 J
  439.     else                                   m_iLanguage=ENGLISH;" c5 \  b# u9 }* K
  440.     char szRegister[100];: Y3 _9 A/ B/ E
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- ]% l. a5 }: ?) f7 L2 i8 j
  442.     strRegsName=szRegister;
    6 p1 u: V% Z9 r0 W2 d7 F5 x
  443.     char szPatchURL[100];5 j0 Q: d; h9 \1 R4 j$ r% v  h1 _9 c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - e( n% i4 D( P" r3 E, f  y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ f. O/ X. J/ V  d$ H
  446.   }( f7 x4 b1 b5 r5 M; r8 G3 y
  447.   else9 C7 A8 F# d1 t1 B; @) A
  448.   {
    9 c' _& `. t; T3 S# P+ O
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& i# ]  L( o* z2 }2 c
  450.     strRegsName=DEFAULT_REG_URL;& b: w2 ]% T( T* [% W5 F% O) J2 I
  451.   }5 X7 q( W: C4 |% r: c! I; K
  452.   if(GetFileAttributes("hosts.ini")!=-1)# |+ [2 T; H  C
  453.   {
    % X! P/ v) M0 ~" b! M1 V
  454.     char szIP[50];
    ( F" S9 B* V1 f: y/ B" a1 }) T2 G
  455.     char szDIR[300];
    ( a3 i& S( i0 r8 P: t
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    # x) ~0 p; [- l6 P. R3 B  U
  457.     {
    3 _' }+ R8 V6 e9 _
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    9 e! b0 |( g" Y7 f+ c9 L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");! _( b6 d& j( G: n9 _9 M  K, U
  460.       strHostName=szIP;4 A. Z: k$ x2 v
  461.       strHostPath.Format("/%s",szDIR);
    0 J6 G# X# [$ L/ r, @
  462.     }
    - c" C. ~9 K/ L8 y. x% D, q
  463.     else
    - n8 f: @2 f( d+ e3 V* @
  464.     {& j  S& i5 {. D/ e' z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 `/ X, _9 S+ d/ S, h
  466.       {
    ! f8 }( [% U  |2 x+ s2 [
  467.         char szLanguage[50];
    8 W) t- i6 |* N+ v. v
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 _' S% E. Z0 [& u8 p- }
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ d% Q4 ?# l: }* S6 t
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 \' ~' M% L: [5 |2 I/ x
  471.         else                                   m_iLanguage=ENGLISH;
    1 i  H9 X" ~- t/ Z1 Q! U. t: z
  472.         char szRegister[100];
    ; ?; v" m/ e: N9 Y
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 E* z' b+ |4 f0 E6 ]* ^
  474.         strRegsName=szRegister;
    ; G% z6 c; s5 k9 ~2 o  N
  475.         char szPatchURL[100];
    2 |7 N1 y3 {3 a5 U1 [
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , C  o, q; p# |' Z' I4 L
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 N" r$ U: Q) ~$ s8 v  }
  478.       }
    / [& B# k/ ^+ |  i1 `) l1 R
  479.       else
    4 v' s5 R7 ?. N9 E7 b
  480.       {) n: h0 {4 a5 n  \: q& j. ?
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) @2 B% P; K9 G: o/ a5 [
  482.         strRegsName=DEFAULT_REG_URL;- w2 U9 r: H! e) u2 v% P, h' {* W
  483.       }
    # w$ N' n0 m: c: p7 T
  484.     }, C. ^: f5 |' v$ R0 D/ K
  485.   }
    0 P9 x  |7 D' S8 O
  486.   return true;' B% C- i8 E3 e3 N& S$ \7 T
  487. }" i$ e; t& \+ a, c- G/ j

  488. $ X2 m" u0 k5 N' t6 I% T
  489. #include ".\ZLib\unzip.h"7 [) _2 Q) s6 `3 T7 [6 k4 N, A9 \
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    " a* [1 V( u* J& `8 W0 M  P
  491. /////////////////////////////////////////////////////////////////////////////' @1 j# H% C: r$ R# i$ m0 r- B, ~$ u
  492. // CRevAppApp initialization
    . Q& u+ w) m5 H. [# U

  493. , ?! }/ {+ v$ i% J' Q9 M
  494. BOOL CRevAppApp::InitInstance()
    7 N3 e, T) c+ w# y4 {/ _8 @
  495. {" |% C7 Y- A. }3 L5 g! p% P
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    8 K* o# ~4 \) N: W; l
  497. ' q* B0 ^4 X5 c2 b2 ?- G
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);' m9 f" X% e( x
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" k; B9 c- X+ N! F
  500.   {
    , d' O, a- c7 Z: E9 k, s
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    $ d9 c' [. h- S! a; g
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    " H! p  a% p9 x2 C
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    + O  r& H( O' W8 ^* i; Q1 J
  504.     {
    0 O* M4 E7 c8 f' @' }
  505.       strcpy(szPath,szPathTarget);1 R. b; `! u! K
  506.       SetCurrentDirectory(szPath);) L1 Q' m, O* _+ w; Q6 {1 c
  507.     }
    , E5 ]5 t8 _; x: s2 Q
  508.   }% z# }1 s- h5 n
  509. #ifdef _DEBUG
    8 z* p% ?& R$ Q9 t6 G1 x( x% V+ j
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 F  r9 F( C# k) U
  511. #else
    ! p3 M0 C4 H' h9 m/ q3 e
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))# V  d0 A3 a0 ^4 B. _, }' s  ^
  513. #endif- \% F# h# Z7 B  R7 W- V* F8 Z! g
  514.   {
    2 G! o+ W, t' d9 v3 y
  515.     char tempFileName[MAX_PATH];7 H' n: }& i. _
  516.     strcpy(tempFileName,szPathSource);
    ! q& f0 x6 l7 V8 J- z
  517.     tempFileName[strlen(szPathSource)-12]=0;- {3 I8 D' v+ v) r/ w
  518.     strcat(tempFileName,"\\$CSUpdate.exe");$ ?( |. g% V$ O- ^! x. i
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);- U' u8 u, v0 _% x; H8 V
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    , P& p' c& Q2 W8 q4 {8 x
  521.     return TRUE;
    - T0 S9 Z' q2 H' o2 i1 `7 s
  522.   }
    ) E( U9 ^. Q- I+ X
  523.   // Nuke 0118: Delete run.exe
    3 E: G+ b/ _$ T$ o- P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );: z) B/ H- O' U. U
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");5 M. o5 P/ z+ N1 R7 n1 L
  526.   if(!ReadCfgFile("Config.ini"))$ C. U$ C+ N3 ~
  527.   {8 D6 e  D' b9 o) x4 Y% q' k# x
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);. ~' f2 V, `) T8 ?8 G! T& l6 \
  529.     return TRUE;9 \1 S& O$ y: y) V( h
  530.   }
    7 d, K# R$ o; ]( ]3 d& {/ i
  531.   HANDLE mutex;
    / q& @0 m4 m+ c  n; Z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 ^9 A) U4 x" a# R$ u0 L
  533.   {* Z  o; l# U- I% W& q# o  u' K
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    # W& H8 S7 P/ a( l7 z" O" _
  535.     {% X/ b) t' u. n8 b
  536.       CloseHandle(mutex);
    " o' Z% W2 k$ \
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 M! q: R1 ~1 Z" [6 [  @2 m
  538.       return TRUE;
    0 Z8 v* U: {4 z7 p3 I
  539.     }# v) v! B8 ~- a: u
  540.   }  # Y% b+ a; N6 |
  541.   CloseHandle(mutex);
    " E7 z# y$ q, R# b4 U8 r( H
  542. : B* }1 E/ `) h8 `
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 C( A5 Q- p7 _- v' g) e

  544. : d4 S& z! U/ B* u* Q
  545.         AfxEnableControlContainer();* f; n( h" A) b) L2 M) g$ `' Z
  546. , {5 T/ J) P( I4 [7 J- F/ b5 K+ ~
  547.   bCanUpdate=FALSE;( R9 ?0 l2 t! ~' @
  548.   dwStartUpSteps=1;
    5 _& ]4 n6 D9 [# Y& Y- @) A
  549.   dwProgramState=AP_NOTHING;9 M3 [, u. u4 ~6 B7 e0 X

  550. ( c& {$ m7 Q! q7 J
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ; V: e7 J( ?/ e( \1 W" j4 O7 v
  552. ) Q) D* b2 M( P$ }8 z* u
  553.         // Standard initialization% @5 j1 B5 i' X8 d- i
  554.         // If you are not using these features and wish to reduce the size! G) @1 ^7 s, [4 X3 O* j
  555.         //  of your final executable, you should remove from the following$ u' a: \/ C0 Y/ F; T8 Y9 [
  556.         //  the specific initialization routines you do not need.! x! l8 h$ s* \

  557. + n6 }2 y# d0 p7 n
  558. #ifdef _AFXDLL
    % J& n8 K7 Y; K6 C- v! ^7 Z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL# S* }6 r8 h  w, X  u
  560. #else
    & [0 [4 U$ q- ?# i7 m9 N
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ ]. ^- G: p. q) k# b
  562. #endif& R  N7 [2 n4 f9 [

  563. 8 p( g$ \. U9 m; L6 _+ S
  564.   dlg=new CRevAppDlg;
    2 Y$ ]2 s1 Z3 V. R; p0 T
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    3 q) \) U7 ^5 W5 o0 `
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    4 t3 Q- n( |6 z1 Z
  567.   m_pMainWnd=dlg;* X4 j# T. l5 @. G  O

  568. - h# U7 P) `* X, z/ ^
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);# r/ l, L" }. o( r) q5 j
  570. % {- J3 _' g- _# `) g- E
  571. //  GdiplusStartupInput gdiplusStartupInput;2 u5 @. d( k- W- q  l
  572. //  ULONG_PTR gdiplusToken;, z; R8 Y' d! A7 q  f9 {* b. K
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    + ^& Y  h3 t, O) Y5 v6 e

  574. . P" N4 x6 q+ ?- l; {4 Q  Y1 m' a& `
  575. //        CRevAppDlg dlg;) ?/ [- z5 K; F# m
  576. //        int nResponse = dlg.DoModal();4 ~6 L( c6 Q2 q7 K; c2 H$ C' e* @
  577. //        if (nResponse == IDOK)) `; j8 p! K  C
  578. //        {
    ; B# p: |. H- V- c, `
  579. //                // TODO: Place code here to handle when the dialog is; Q& @* i0 H3 b/ N
  580. //                //  dismissed with OK
    3 H) t4 Y- O1 e0 q
  581. //        }" u0 ?! H2 K5 r3 z1 |
  582. //        else if (nResponse == IDCANCEL)
    # C" R" }+ B8 B) U) g! S$ u
  583. //        {
    1 E7 K; s- R+ i4 _% R
  584. //                // TODO: Place code here to handle when the dialog is
    / w' y" z5 Z% x- i% c1 O7 _
  585. //                //  dismissed with Cancel
    ' D" ]. n, Q2 c0 D  O  }9 I1 V
  586. //        }# \" o  j" \% ~0 x

  587. ' r! X) L, O; G8 n
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ) F2 o8 ?: k& D# c0 M
  589.         //  application, rather than start the application's message pump.
    3 p: D2 ]" \7 q
  590.         return TRUE;
    ( e" S( [' @) X: j- h
  591. }" _/ b+ _% h# u7 O) Y
  592. 1 ~0 T$ R% B4 P) c
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    9 j/ D) w8 Z6 ?* D8 U8 n9 i
  594. {
    : l/ J$ e/ O! L
  595.   int i;
    " Q1 M/ a8 r* y
  596.   char *szRet;
    ) v  a) c1 ?7 F( _0 c& p( l
  597. ( f* R1 I$ N! @
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # q/ g. u: j# |+ u! G! \
  599.   if(sztoken)
    & ]9 ^2 ?8 @2 ^# n  ~* v
  600.   {$ O4 q: @0 ?/ S7 B( s
  601.     szRet=&sztoken[itoken];
    . q5 P& r+ t. H% Y$ s
  602.     while(sztoken[itoken])8 ?9 N) D7 U3 F
  603.     {
    , Y; r6 H' {1 L1 k- a1 |
  604.       for(i=0;i<(int)strlen(token);i++)4 C1 X$ }- M) x3 I) {4 t, x) N
  605.       {
    ( n# \0 a0 d% u; r$ @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ( \& Y" U; i0 j# |4 w
  607.         {
    ) W: ~8 ]5 |$ y6 Q# w& a
  608.           sztoken[itoken++]=0;
    ; }" w8 ]" J3 ]1 g/ Q5 z  }
  609.           sztoken[itoken++]=0;
    . t* m) c3 d' G: q- i& U" w8 U' Q2 a
  610.           return szRet;
    . m. k, M4 ?. u) b( D
  611.         }
    # K$ m- n* N2 m5 n6 w# I6 \; v
  612.       }
    ; [1 T( F4 W1 a" F3 d
  613.       itoken++;- c0 E& n4 ?/ }; T: b
  614.     }
    " v; N; Y8 e# p: e' Z
  615.   }( [, ]; B. w* Y
  616.   return NULL;
    # u* Z9 N+ a$ ]8 J; N
  617. }
    9 L: n& x3 P5 J9 l5 s9 t

  618. # S6 U. t: i# o' G6 X
  619. void ProcessProc(long Total,long Current)+ [( E: W. i6 d
  620. {
    ! @& r% J8 M$ z
  621.         MSG msg;
    1 ?# J- q+ L2 a8 L2 ?! t
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);2 q! A5 {: t( k' K. K
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    8 s( [  N% p$ z+ z, ~4 y2 z$ F
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 W, c, z" O" W' S
  625.         {5 J* v/ T& D3 k" d0 y' w
  626.                 if(!GetMessage(&msg,NULL,0,0))3 a4 N$ j6 c3 R- o) P1 `8 z, M
  627.                 {
    & ]8 p, r! I4 o5 d
  628.                         return;& j( U2 L& U; e% v7 |* d
  629.                 }
    , p2 C# \) E- V2 q2 m5 I
  630.                 TranslateMessage(&msg);
    3 J% |6 h* N  _7 ~8 t% U
  631.                 DispatchMessage(&msg);' J) x' o0 Y( ^. l4 ?. K
  632.         }          Z3 a/ K6 ?- l5 t! y# W0 t( e! H5 k9 s* o
  633. }
    7 m. s( A# b$ I0 Q& k

  634. # v/ N9 f" t/ C# B3 [; t
  635. BOOL bFirstChar=TRUE;
    + ^- [, S4 {; ]

  636. - i9 K4 z! {! b& c1 P- }# d
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    2 }( M3 e2 v/ @2 j2 C
  638. {- e3 |& b; s0 Q. Y
  639.         // TODO: Add your specialized code here and/or call the base class1 R! \/ I! K5 R4 g* ^
  640.   switch(dwProgramState)
    7 Y# Q/ ~3 I) z8 _/ N8 b: y; u
  641.   {
    ' }/ v* T# Y7 N3 B
  642.   case AP_NOTHING:
    * a( H1 v! E: o. D3 o6 ]. t
  643.     switch(dwStartUpSteps)
      {% [0 u$ p$ d' p1 P) ^1 o( g
  644.     {3 T+ \! U- g" p! J' o( d
  645.     case 1:
    ( i' \* K  t0 @0 N% B( ?! N
  646.       {, B5 w& m7 k2 X
  647.         int i;! w3 u( D7 P1 h  P6 G# ~
  648.         CDC *pCDC=dlg->GetDC();" q" ~- f+ e" Z  P1 p
  649.         HDC hdcwnd=pCDC->m_hDC;. W# ^1 N" g# F. \
  650. //        Graphics graphics(hdcwnd);
    + E" C6 Y) t0 j6 y+ ?: T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & L6 l) ^3 H7 k% X0 q! \0 ?) |' ]; y* Y
  652. //        INT iWidth=bitmap.GetWidth();" @: |; i3 H) @: g
  653. //        INT iHeight=bitmap.GetHeight();  q+ O. d3 K3 ?
  654. //        Color color,colorTemp;% ?, Z# q! u- R' r" H8 m* e
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 e! d8 b( Z5 Q2 E" Z
  656. //        {. J5 e) S! w5 O2 ^3 P: z& G+ c, G
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
      A  s2 z. j# J3 C
  658. //          {
    , ?3 F7 d: O! ^' u! p
  659. //            bitmap.GetPixel(iColumn,iRow,&color);* b; S' ]/ m/ C9 X" f
  660. //            colorTemp.SetValue(color.MakeARGB(2 B% h. y# {  D$ P: P
  661. //              (BYTE)(255*iColumn/iWidth),
    3 K2 R& E$ |, H$ ~  k6 L: n$ x
  662. //              color.GetRed(),
    1 M( [% D/ g" t0 y( p! D" _
  663. //              color.GetGreen(),
    " Q- O- ]; x! ]& E
  664. //              color.GetBlue()));
    9 [( D& a( |: h) u! R8 c/ q6 Y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    2 s- p) x- ?! x9 L1 _
  666. //          }( F' H7 L+ ~, N, z" [; |, u
  667. //        }
    4 X0 y  t; Z; L7 }, a/ ^1 o. |% e
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);1 |, M4 g/ \5 C4 Z2 P3 O
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" ], g9 n% l, g' }  N/ e9 A
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");; Z: o; e! S  ~" H$ l
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . {6 p& I  m$ S" i8 c3 p
  672.         for(i=0;i<240;i+=8)1 J# C" V8 F' t/ T  t9 o
  673.         {+ _6 B$ ?& E( S# Z6 F
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " j& m0 X/ E2 |' K6 g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - |  R) k( O/ n+ c, u' {! r8 I
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ; [- _$ R; J9 b3 G
  677.           Sleep(33);+ U; \" t4 T( T1 h% y1 D
  678.         }
    ( v0 i- t; w7 _$ ]
  679.         Sleep(1000);
    ) Q' G1 i) G3 C( E5 {& A8 g
  680.         for(i=240;i>0;i-=8)1 V& f6 m! t4 Y8 F$ l2 h+ ~' |
  681.         {6 ~+ ~5 t: l: ]: a5 U# f
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. ~8 ?% A8 b  X0 k+ `- w) [
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, N2 x5 k( x, t  B: C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);, t0 k# T. C% s6 A+ u4 d* r
  685.           Sleep(33);
    + e1 Y) v4 B+ ]1 Y
  686.         }
    6 b, m+ M; ^  d, u
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);) k5 E1 e' \( X3 d# j
  688.         dlg->ReleaseDC(pCDC);8 m+ e; @" w: w) ]) ^
  689.         DeleteDC(hdctar);
    ' I7 C8 i1 D0 e
  690.         DeleteDC(hdcsrc);' }7 T: k4 q5 j
  691.         DeleteDC(hdcorg);1 A0 z. X7 s& p
  692.       }  i) C' w) D% z$ z: v. x% B; K8 h
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);& {9 b* e; m, q5 V
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" {% n; k# z. F, a7 b
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");( f8 P& @4 x2 {* E- w# j& W% L
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' q2 T- }2 Z/ u" R
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: Y( ]& X- X  [  i$ G  `' @
  698.       if(!Dn.Connected())5 I7 i* ~) K0 ?- Z6 R* ?
  699.       {) a( F+ D& S7 v/ W' c
  700.         dwTotalFiles=1;* t+ k1 F5 t  o/ Y
  701.         dwDownLoaded=0;' D. m' @/ E) p! U7 j0 k' ?2 `4 K, M
  702.         bSilentStep=TRUE;' T& D' k7 X% _/ a4 Z6 H- I4 h  @8 d
  703.         bCompressed=FALSE;5 }* h) J9 _! W+ I- Z& M/ J
  704.         strExtLocal.Empty();) ?" i9 ?0 m6 o) A, l
  705.         strFullName="readme.txt";
    + M6 {" k8 v7 }" `7 G- i5 |* g1 d
  706.         dwProgramState=AP_CONNECT;
    ! |, [: M( t1 o% v2 }
  707.       }$ f' I8 R% ?- a  N% \) y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();1 r& k$ {! o( F- [+ [
  709.       dwStartUpSteps=2;, j0 [3 r3 g& \1 C) `& {0 R5 ~
  710.       break;
    $ h9 U; H! h. Y0 I- _9 h
  711.     case 2:* j  [$ Y) B) s  n
  712.       {# ]' O: \1 [- J: G: S
  713.         int iEOF;: U4 M5 G) `0 R; e" Z/ v. `* s
  714.         FILE *fp;0 @- P& b5 ]3 J+ Y$ P1 f7 K3 x
  715.         char szString[512];! K3 }' @& u5 l
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ N0 c7 N5 e- q. m
  717.         if(fp)
    * R- z5 ]5 i6 @: i
  718.         {
    0 ^' q) @$ {3 a4 w+ |
  719.           do
    2 s5 z5 h' m$ p' U
  720.           {
    . a- V& Z) M6 f( M
  721.             iEOF=fscanf(fp,"%s",szString);' m8 ^/ y% ^3 j& h, y
  722.             if(strlen(szString))' _$ ^( }% G; ?
  723.             {4 g% `* O, _. c" ?8 c9 ~" z* s" S
  724.               if(bFirstChar)8 o( d8 v4 t4 C1 `( ?: N5 f- U
  725.               {8 D. M9 ?1 I7 q! |" T
  726.                 bFirstChar=FALSE;- |, w$ Y0 s" _' W  j/ S
  727.                 bConnectIsBig5=FALSE;* Q' e( e& s4 \1 ]& l
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ) f2 L# a* ]* @3 ]+ i" i
  729.               }
    : b0 \' J+ x/ d
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));' ]4 w9 Z) o( a7 W3 u5 D! C
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    5 y/ `% v# S! F/ w- U
  732.               dlg->m_ListText.AddString(szString);% {. }, a+ D2 {2 ~* S  C8 {
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + D2 r2 B' v3 ~) t
  734.               *szString=0;
      G+ P2 x( Z/ r) z& ^
  735.             }
    6 }3 s' q: q/ c- t
  736.           } while(iEOF!=EOF);9 |0 p+ b: e6 v. U+ f$ L7 V
  737.           fclose(fp);
    ; i* h: e4 y% D2 t2 W$ V& B$ V5 }9 j
  738.           unlink(".\\DownLoad\\readme.txt");
    $ q6 a3 @8 U: ?1 a3 o% |
  739.           dwStartUpSteps=3;) l$ Y2 ~/ A/ h6 m8 B
  740.         }0 U: n" y4 H- g5 h) ^! e' l
  741.       }
    6 L8 F3 s+ P% v4 u" q' ]
  742.       break;; L' d& L. X) P. ?, K$ o# P1 W
  743.     case 3:0 M  b; s6 B( D
  744.       if(!Dn.Connected())
    2 d" B2 s; a3 {  c+ g3 ^" E. j  H
  745.       {7 J* w+ V+ ?/ }
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    : k" ~* L2 Z7 Y
  747.         dwTotalFiles=1;1 O! K5 r& p% h! Y
  748.         dwDownLoaded=0;8 G! J4 L% z. O6 c$ a2 n
  749.         bSilentStep=TRUE;
    3 {( x: i# y! S6 e' q
  750.         bCompressed=FALSE;
    1 e4 s6 d5 H/ w: H. q2 P; \
  751.         strExtLocal.Empty();
    - c- ^3 n; V) F
  752.         strFullName="checkversion.txt";
    & B. c" ~+ n) h/ P& T+ `
  753.         dwProgramState=AP_CONNECT;
    4 x; b2 p/ B1 \" o0 ~  j! C  r
  754.       }
    ; t  n4 _7 J8 K3 P- n9 h( I  w4 ]
  755.       dwStartUpSteps=4;8 H1 I4 K4 }6 v, i5 g
  756.       break;
    - t8 i# v; Y' ~; Q+ `* f
  757.     case 4:
    7 Z$ ~9 A! l; {4 W1 {
  758.       {( @- Z0 e) k( @- A$ A, b2 x6 P
  759.         FILE *fp;! r" z$ T  q6 F" J% B3 B
  760.         char szString1[128];
    1 ]7 K9 _" m1 F* Z
  761.         char szString2[128];: @1 E) X) Q0 ^# _+ {, J
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ( Z$ X- g8 [* O, y) L; O0 }
  763.         if(fp)" `$ Z# H. s  X: L- j
  764.         {
    3 t- _0 [% m" g5 i! A* Q' G
  765.           fscanf(fp,"%s",szString1);
    9 U' \+ v2 P. O
  766.           fclose(fp);
    & |9 m4 k5 L1 z
  767.           fCheckVersion=atof(szString1);# u7 [9 W6 K- u" z% I  v
  768.           fp=fopen(".\\checkversion.dat","r");
    " P+ g' [% d. l& n( p1 b9 M  r) X
  769.           if(fp)- u# T# O1 R5 Y# n
  770.           {, p: Z8 R- ^( S- w* ^- l' M
  771.             fscanf(fp,"%s",szString2);9 S2 Q) ?: B+ i, L
  772.             fclose(fp);1 z4 j3 D, y* h. H$ d3 X1 i8 a
  773.             if(atof(szString1)!=atof(szString2))% X$ ^6 X% w: B2 Z- K) I3 t% g
  774.             {' r5 i7 e& @+ G- p: D
  775.               if(!Dn.Connected())* I8 M- f9 g) ?: u0 ~
  776.               {  {' q. Y7 d3 m  D- b: Y5 c$ m+ ?
  777.                 bFirstUpdate=TRUE;& v# y4 y$ T& q/ k; @; f! ]
  778.                 dwTotalFiles=1;: a" W) e; U& n8 ]. f8 @4 _; v
  779.                 dwDownLoaded=0;5 c6 A( v8 C2 u0 ^. L
  780.                 bSilentStep=FALSE;
    ' w: N. V; Z0 |8 X
  781.                 bCompressed=TRUE;
    9 e3 h$ `! X6 A3 M
  782.                 strExtLocal=".\\DownLoad\";
    1 A) j. s# L4 Y
  783.                 strFullName="update.txt";
    2 i8 I( h5 `* B1 n; O* R- V
  784.                 dwProgramState=AP_CONNECT;
    : n' C; |- y3 x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* U0 m$ j: \" j
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 A1 p9 t: X7 j6 Z( s3 {( p- X/ q# ~. P# K
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! K1 o; m1 P2 W; g+ W
  788. 2 ^( ]* |- x- C  {' n. X
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) a& d6 r1 ]1 a; U9 h
  790.                 unlink(".\\DownLoad\\checkversion.txt");, Y" q% F' K  r5 \
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)# p% [$ U0 [% G. L- B) g
  792.                 {2 s, Y7 a8 O* ]1 i- R6 p
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    $ g( T/ i( |" G5 k
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");; g: u4 n( H5 C/ j
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 H& g6 x4 n$ G! |' [6 ^
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# S) a6 s9 m6 b+ p( I8 A' x: [: Q

  797. # u+ J$ F% O, b7 Z2 O
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # K/ L- i3 j) S- J
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");+ g7 v6 x* l+ J2 r( {
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 u3 l9 i: s6 Q% Q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) p# @& p( m" u- l# ^$ _
  802.                 }
    $ U) `* |; j7 u& X4 T
  803.                 dwStartUpSteps=5;
    / Q1 P* S- C+ l+ p
  804.               }
    3 ]% ~+ G" @# r# T- d, v9 `
  805.             }7 l: ~' I& u' z+ c
  806.             else3 `( y1 {9 y3 G  T9 Q/ G
  807.             {
    2 e- ~1 V+ ^# }, }$ J9 z
  808.               unlink(".\\DownLoad\\checkversion.txt");
    2 d" v6 A2 V, u) T$ R2 V" b
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ a" K6 G0 g4 ]1 B' n
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 p/ q& C2 q! V
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");+ e# Z: F  b. }' h* E/ ?2 m  v

  812. - r' f# h$ c8 ?3 c
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* @" W, J; E% A  ~0 ]/ ]4 _
  814.               dwStartUpSteps=99;" b/ c3 W' m, Y6 f
  815.               bFinishUpdated=TRUE;; u! G7 d! Z3 r) S* X' M0 y* c
  816.               bCanUpdate=TRUE;% G& y# q$ \" p* x, W7 A
  817.             }6 F& u+ G* i& a' C* B7 K  P7 o- Q
  818.           }
    0 X9 S- j, f) d' G5 b% W1 c
  819.           else( S1 \( N( v6 p: }; _5 `
  820.           {
    7 S" d' I( U$ k3 N
  821.             if(!Dn.Connected())( J" {: r7 P% W
  822.             {2 m$ M) d8 j- W: S* t0 P% x
  823.               bFirstUpdate=TRUE;( L  `) v8 }/ I. x( O- U
  824.               dwTotalFiles=1;5 ?8 G/ @6 @, k- E" P  ~5 M
  825.               dwDownLoaded=0;
    0 @' W) |6 d/ W3 A+ t( d
  826.               bSilentStep=FALSE;- W" @" h7 `& y5 K  i) |
  827.               bCompressed=TRUE;
    8 v% |! Z. M$ B4 l6 o3 C6 E0 J
  828.               strExtLocal=".\\DownLoad\";/ k4 v4 R6 e( t
  829.               strFullName="update.txt";: P; z2 ~+ I3 O# w" W; j
  830.               dwProgramState=AP_CONNECT;1 D" N+ O4 t- }3 ^6 Y7 R( ~* |$ }
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; `1 |+ O7 q5 V+ n5 N/ q2 v) [6 @( o
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, F- T2 o% s& u% U" G
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 u/ E/ N# J- c# ^
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * ~* |3 G6 p  M; @3 z& y+ O  X: G
  835.               unlink(".\\DownLoad\\checkversion.txt");: u: l9 e2 X1 u  c
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
      ^# F- M$ {4 `! X6 Y2 Z; ]
  837.               {
    / k& G: B% L% ]; L
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ) `, W% L0 |, O0 w" M1 U
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    8 t8 v2 P5 a- i8 K0 a0 ^
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    4 l5 P6 X2 n9 u' n0 g( O  Z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 F" c3 Q; H3 d$ ?
  842.                
    5 P' |8 ]  v$ o" K3 D; D
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 v5 p& J) t1 q+ ~. P7 T5 O; Z7 k
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. r/ s% _6 |: [* T
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");  A# ?4 w1 s' ]# m  L
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! A6 m8 ~+ |+ `5 \1 T4 @
  847.               }
      [* k7 b! c4 P5 V4 e* C- a( Y
  848.               dwStartUpSteps=5;
    2 U, V  ]2 T; Q
  849.             }0 u6 O$ T& i6 _, E. X6 o  M4 `
  850.           }
    8 z. L) Z' l7 {
  851.         }4 j  u8 `' a" t% `
  852.         else
    + a- X8 J4 r) Y7 s/ G$ l8 p: I1 u
  853.         {
      d- q6 ?2 l/ K2 h; X1 {5 w* k8 u: T! h
  854.           dwStartUpSteps=3;1 W& k+ }6 p' ~7 y5 e. l0 Z
  855.         }
    $ h+ [6 s6 }2 q' ]' G
  856.       }
    & c* G; N% p/ z0 z/ {* i
  857.       break;
    5 {, Q( S6 T: C6 N" @' f, p
  858.     case 5:
    * ~2 s  j- m3 O, E
  859.       {" z" O$ u% C: B6 ~, z2 A5 U
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)1 D- i: N$ f% \& E0 h) }* _; {
  861.         {% b* w+ G2 A2 W1 I
  862.           int opt_overwrite=1;! c4 A# f0 F& _) O5 C, P
  863.           int opt_do_extract_withoutpath=0;8 e( x: n( v  k/ j. v" c* L
  864.           unzFile uf=NULL;0 n* a2 `& F( \9 }

  865. + j. t) H, b/ N! ~; \1 y
  866.           uf=unzOpen("Wsa.zip");
    : {. y( }0 ]+ h. \
  867.           if(uf)
    9 m; _2 f4 c  E* I' I6 `
  868.           {
    ( I& X/ X7 H/ v% e' P- V2 A
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);% u7 m9 s5 T* E% ?% }8 @) Z* }8 _
  870.             unzClose(uf);
    9 r; S" O) {& r9 Y% [; F( c3 u
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    / D& ]' L; S) @" ?
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");$ _$ D1 L& {8 g5 @+ ?- @' j
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    2 `! j; s7 N6 V; p: o/ X/ f& {
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 n( L* n4 r$ o4 b
  875.           }
    + Z6 m0 x3 J4 [; H* ~8 Z% t, X
  876.           DeleteFile("Wsa.zip" );
    6 |7 e/ e, V/ Y9 c9 S. B
  877.         }
    8 N- |* h% u9 ]0 R. N

  878. 3 e8 s+ f' G8 I6 t5 x
  879.         if(CheckLocalVersion())
    ) u/ N5 \7 u; H+ k( U" B* y$ h
  880.         {
    * ?8 R( q5 v  k  N5 D- z
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");7 h* O9 r. i) c
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    $ U1 M5 D9 F, M4 B  S# O3 o
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");% h* {+ O9 E. h# E7 Q
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( j# p! @: F9 L% _- q
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);! ~1 o9 Z3 ?) v# ?2 R# ^
  886.           dwStartUpSteps=99;
    7 Q! {* W7 @* e0 M7 N+ _
  887.         }
    $ M+ p+ I' }8 Z, S  c. ^' Q
  888.         else
    . d: ?% p/ |! {) x& s* h6 [
  889.         {
    6 j" G9 c! b9 v4 `& Z" i4 F$ q# k
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");1 |$ [# c, N$ t% [! d" g, \% U
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 [/ P8 X4 k8 T3 l
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; X2 n8 H9 L9 X+ ?, A5 I

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

# \: g6 ~9 H+ H# |& R8 A8 T8 Y4 T' u
# z7 Y$ s  t& a: m& [

評分

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