CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
- S, C5 a" C  p1 n) C/ M$ w
  1. / RevApp.cpp : Defines the class behaviors for the application.
    5 J  e8 h1 a3 v5 A5 U4 h5 ^) Y. [5 Y
  2. //+ N1 u0 g! d0 A8 W% C) |

  3.   ?% ~. e; A6 e% p* K5 [  _
  4. #include "stdafx.h"
    4 Y8 |, i9 a% |

  5. 5 g" i9 v0 S2 _+ b1 ~. ~2 Y
  6. //#define UNICODE, o- h1 o% w* J5 d" i) O7 v
  7. //#include <gdiplus.h>) S- O# T4 r. g0 C/ A/ p! m
  8. //using namespace Gdiplus;
    5 |" Q$ z/ e6 b1 Z) e8 m, N# r4 C

  9. ; s. i# A+ u5 ]+ l' Z! A: @6 H
  10. #include "RevApp.h"& X& \( f! y! \3 j% i2 @
  11. #include "RevAppDlg.h"6 ^& K% {7 _1 _4 S; L
  12. ( X4 J* J# P! G) E* C8 O$ A
  13. #pragma warning(disable:4786)
    : V% V  Q7 x& i7 R/ C
  14. #include <map>+ G+ _  U" R. Q
  15. #include <list>/ r" x0 n. r1 i* D* |
  16. #include <direct.h>
    ' p1 q8 _( a: f2 l; A2 v- j$ Q

  17. , B% T* X5 Y( C) T* \  ?
  18. #ifdef _DEBUG) ^$ E2 T' I# s9 E, g! b$ }
  19. #define new DEBUG_NEW4 j" f1 k5 ^  R9 E
  20. #undef THIS_FILE
    * q0 @. i7 G; h# x( W5 _. f$ l4 z
  21. static char THIS_FILE[] = __FILE__;
    0 h4 D1 m2 i- Z
  22. #endif$ j: |0 b7 R" P* L* x8 ?6 @7 c3 p
  23. #include "SkinResDef.h"6 ]$ C& d0 n2 L. v
  24. #include "ChangeBG.h"
    $ F# m) k) U  p# w5 W
  25. #include "AFXINET.H"
    ; C0 m* _8 B3 Z8 Q5 s+ ]

  26. ) |6 G% Q" f6 W% K  A
  27. #define TRADITIONAL_CHINESE 0
    ) @# J9 Y3 i- C' c& R) N, l
  28. #define SIMPLIFY_CHINESE 1
    & h) y( g& A& i8 |5 }" |
  29. #define ENGLISH 2% t* s3 Q/ Z7 J8 a3 e& R
  30. int m_iLanguage = ENGLISH;
    , V$ {- `: t% K$ t9 u( \" Q& ]
  31. /////////////////////////////////////////////////////////////////////////////
    + l% p" H8 ^1 j+ v! I4 \8 V
  32. // CRevAppApp8 e! P8 H; Y2 L8 Q: j" d
  33. 3 e' n6 |$ L( H$ l  Q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    - Z5 B$ E  @# H
  35.         //{{AFX_MSG_MAP(CRevAppApp)4 f  e' ^1 A: Z" ?% e  t
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    3 g8 M  v5 R3 e, E2 G0 @
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!; P9 v5 a3 M9 g
  38.         //}}AFX_MSG# I$ a4 K5 {+ I# b# h
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp), B5 L/ u4 M  L/ ^# P' j6 \7 k1 }
  40. END_MESSAGE_MAP()
    $ u& }9 x2 d, ]5 g' t, V5 }4 A

  41. * H, ~5 g, [2 V0 x$ q" Y
  42. /////////////////////////////////////////////////////////////////////////////
    : K( |5 J1 U2 a5 x" \
  43. // CRevAppApp construction1 e0 e- O. q! J: S! Y5 U
  44.   v' U. u6 r4 C: K3 [4 B6 H
  45. CRevAppApp::CRevAppApp()
    - Q. [5 d! D, W$ V9 `" B8 U
  46. {% Y) {& D  q, f7 A; t
  47.         // TODO: add construction code here,
    1 y4 U" j. \; H3 E* J. i$ Y) b
  48.         // Place all significant initialization in InitInstance
    4 K7 p$ E' \& f  U/ |) z  r
  49.   bDisplayIsBig5=FALSE;$ J# D* w5 ]- i: R- K& G
  50.   bRestartUpdater=FALSE;
    8 `1 _+ p& @  w1 j' r
  51.   bFinishUpdated=FALSE;
    2 p5 {+ g, Y2 s; c  f
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ! ]" R0 @9 E4 b8 j
  53.   InitChangeDataBig52GBKS();" ]7 S5 o% Q( o: W( m* A$ ?
  54.   InitChangeDataGBKS2Big5();# E/ h) c+ [4 W2 q. M- d! Q- q
  55.         //, f; q$ i2 `9 V+ ^& r* @
  56.         bClickRunExe = FALSE;
    " S" ?0 E8 i5 a: X; J; r  _
  57.         //4 w" d' b7 |- V7 V! M
  58. }
    ; Y4 L4 M( h& \4 i
  59. 1 P8 G5 G0 g8 D6 }& J0 o' r$ d
  60. CRevAppApp::~CRevAppApp()
    + q0 E6 E: ]) Y; Q; Q( T
  61. {
    $ z4 ~6 a) \# G" P1 c
  62.         // TODO: add construction code here,
    ; T7 P% s2 n; K7 X; m
  63.         // Place all significant initialization in InitInstance0 C# }1 T$ C; k1 `. I6 g
  64.   EndChangeData();
    ! z  D! r' I6 h& [% w
  65. }
    6 I5 r, R# J+ S" b9 m5 ^) |% G- n
  66. " s3 s) E% I& I- l6 k6 ?
  67. /////////////////////////////////////////////////////////////////////////////$ `1 J' \) c; `4 U/ C" y6 o: B* @  Z
  68. // The one and only CRevAppApp object( V7 e) \( P, B* q. f2 O

  69. # p% F& I; N8 v2 R1 [' p
  70. CRevAppApp theApp;
    ' W3 q0 t6 Q2 x5 J3 ~
  71. - N. W' X0 R* J. \
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)1 k. x& Q  k5 X& _
  73. {
    ) I2 J7 K% h; q# y1 ?4 Z
  74.   int iEOF=0;
    ; T2 m6 Y! v0 A" T" G
  75.   char szTempName[MAX_PATH];
    7 w4 h  x# p9 d6 }
  76.   *szFileName=0;
    % g4 ^4 v$ p( j7 s
  77.   iEOF=fscanf(fp,"%s",szTempName);8 R2 J! e: I% V
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')8 `/ j3 o* e; B# H- |
  79.   {
    5 G. g( o! f4 G* h3 j
  80.     strcpy(szFileName,&szTempName[1]);; p$ N" a' K9 y  D" Q: H% o
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF); Z1 O2 v7 P+ w) @/ s" u
  82.     {
    - z1 z$ K8 D! H6 e: ]* R' S
  83.       iEOF=fscanf(fp,"%s",szTempName);
    / x( R4 N' i/ a( ]
  84.       strcat(szFileName," ");, ?' ^) \4 N/ N) L( d+ x: Y- f! P5 l
  85.       strcat(szFileName,szTempName);2 h2 H, j% R, ^' O1 O
  86.     }
    # x+ {' T1 F2 D: N6 v! Q) Z2 i  ?- Y
  87.     if(strlen(szFileName)>=1)5 ?2 j1 f7 r4 C6 {! Y
  88.     {
    0 \; t! Q, A* @, e" W4 z6 b( H
  89.       szFileName[strlen(szFileName)-1]=0;
    9 s) P) D: f8 f. O# M
  90.     }
    1 m7 H: r9 w3 O2 u5 B
  91.   }$ \6 X/ q4 |; x8 L6 i6 X, I
  92.   return szFileName;5 V/ K6 V9 [% Z& w( T+ i- H! B$ \4 Z
  93. }
    & V  e) j; t- ]2 A

  94. 2 N8 l6 m! b8 I; R* P5 P
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ) ~  c3 u: k4 \) |; ?6 `
  96. {
    6 i1 w# m8 z2 C+ l
  97.   FILE *fp;
    # b% z; p, s* {6 Y% v( {. O4 B
  98.   char *key=NULL;2 i2 E. a& r: X# Y  V4 Y
  99.   char version[MAX_PATH];" k& {5 j( S1 A( T3 j7 I' x8 z
  100.   LPUPDATEFILE file,olds;( c. S9 Y/ B0 Q5 b0 Z6 G2 S
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    . M+ T2 K5 d/ L" u: y

  102.   r: T3 }7 i& m, E; f
  103.   UpdateList.clear();9 e/ Q) b1 S/ W* V- F6 L1 C$ T
  104.   UpdateFile.clear();
    & w3 z% `1 b. G
  105.   if(GetFileAttributes(filename)==-1) return false;# u7 E! C& _6 ~' F
  106.   if(!(fp=fopen(filename,"r"))) return false;8 @: A$ D2 e  w  ~
  107.   fscanf(fp,"%s",version);3 T" Q+ D$ D% B- I! a& y6 Z4 {. |
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }7 Y# q: \7 f' s/ p$ w
  109.   while(fscanf(fp,"%s",version)!=EOF), |: h5 z' c- a2 Y9 G
  110.   {
    ( f! b5 _5 a* q+ }
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 i  l+ s6 e2 B6 \. f2 _
  112.     fscanf(fp,"%s",file->path);$ m1 b( q7 y- A% p3 M
  113.     ReadFileNames(fp,file->file);5 O  u; \8 ?4 |2 s7 ?0 L
  114.     strcpy(file->full,".");
    ; U5 j  O$ n+ f; Z, ~! ~, D; z
  115.     strcat(file->full,file->path);/ Z0 X0 I" l( a  ?4 s  [# a# C9 y
  116.     strcat(file->full,file->file);
    ' H7 }0 P; {% R+ v- o% q! j% H  ~
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())7 ?8 r: P! ^" \! {* X+ d7 B# H" }
  118.     {
    $ D% i" |/ v# v$ @! o& q0 F
  119.       file->vers=(float)atof(version);2 N+ f9 T/ ]+ I
  120.       UpdateList.push_back(file->full);
    $ |: S# Q& y' y0 i/ X) \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    9 Y9 Y* B/ F" {' R+ w& R
  122.     }
    / g1 |; ~  ?3 D- U
  123.     else9 n& d2 z* E2 \/ N3 c0 u
  124.     {
    8 [4 \& y* g( `- o
  125.       olds=(*p).second;
    $ ]) O4 K- P% d% h# {0 P
  126.       if(olds->vers<(float)atof(version))( @3 Z7 i  t9 }+ Z8 _" p
  127.       {
    0 C1 @! H& ]$ K+ x9 [6 L! d  U, ~
  128.         olds->vers=(float)atof(version);  W$ ]7 p4 n' q+ O
  129.       }2 _5 ?: Y7 X* Z. O- M2 S/ Z$ T
  130.       free(file);# h! [  @, g2 I
  131.     }; n. N2 d$ {& }+ C5 l
  132.   }' r3 H1 j+ {: @4 H9 Q
  133.   fclose(fp);7 J* O/ e3 i9 D  ?4 p0 `: f4 B
  134.   return true;% h) ~/ e0 u" _) J( F# p- J
  135. }0 r& B  j% r, c: `; }2 X% c
  136. & C) s9 K2 W5 i0 l1 {( K" \; l/ y- U  d
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)1 k3 n8 L# c+ `) @
  138. {6 G( }  v2 [% U: a
  139.   TCHAR  szFull[MAX_PATH];
    . S0 S. U" }$ j# l. I
  140.   TCHAR *token,*inter;9 K6 E/ [, ]7 d/ c4 H
  141.   *szPath=0;
    8 B# z0 Q! {; k+ S
  142.   strcpy(szFull,szFullPath);& B( h+ K# j0 Q; G
  143.   token=strtok(szFull,"\\/");6 f+ H" m" j4 H2 t
  144.   inter=token;, C$ @- o. d9 m6 ^1 h4 D
  145.   while(token=strtok(NULL,"\\/")): k& j5 i  d. l/ Z3 x# K! i# F( v
  146.   {. \7 g7 f' O6 @  v6 M
  147.     strcat(szPath,inter);; X# e: P- ]/ }* m
  148.     strcat(szPath,"\");
    9 a: Z4 L$ c; C  r
  149.     inter=token;4 g/ q* M0 |1 E
  150.   }) {1 ?/ U" x: W" ?& b( F1 K
  151.   return strlen(szPath);5 n( b0 a$ J2 _
  152. }
    7 v1 c1 }3 k9 }  Y% x0 i

  153. * I1 ~: v, o4 G9 p
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    # F- ]0 R. h- G0 Z( e" ^
  155. {
    , U! `- ~* B  K6 J4 H
  156.   DWORD attrib=GetFileAttributes(Target);
    * u4 C6 i9 W6 U
  157.   if(attrib!=-1)
    $ c1 \6 Q2 F& r/ u& Y
  158.   {# P% l! L! x- g  V3 F# S
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ) ]" d" J. `  h# ?
  160.     {
    8 U' B) K1 v) R6 r5 a4 r3 ]6 a
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    % h$ ]3 f) ]7 c$ A* _
  162.       SetFileAttributes(Target,attrib);
    3 d, `7 m  G9 r6 Q' X7 m8 H! T
  163.     }0 c- C( _3 X* b, l! b( n' g
  164.   }
    ! D. E& N" s, c( w3 c
  165.   CopyFile(Source,Target,Erase);
    8 Z! n, z! z! h' K
  166. }. W' N0 h" @) L- H# R5 `' l5 f6 H

  167. ' \0 `. p& J' k) b# p/ w; Z& u
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . B1 H( @" \$ i2 P
  169. {; F6 I# }+ w5 f. i* w+ g
  170.      FILE *fp;
    2 ^" v9 ^+ F$ a2 T# J: o- N
  171.      char  szBuffer[8192];
    7 Q7 ]) T4 e! T# ?3 O) [& g
  172.   va_list  argptr;
    0 `" B9 u+ o( [  j& G

  173. $ n3 O  d& I+ K' E
  174.         va_start(argptr,message);9 N/ y& w! n0 V& I3 a& u; x
  175.         vsprintf(szBuffer,message,argptr);3 }* S2 S$ \/ P" O" j1 C$ w; Y- \
  176.         va_end(argptr);" H9 L! h* |7 g$ K% i0 M
  177.   fp=fopen(FileName,"a");$ Q& O5 X9 {0 b5 P0 @5 i
  178.   if(fp)
    * z. I/ N$ Z: P8 f
  179.   {
    7 X% p) j# Z( v  t
  180.     fprintf(fp,szBuffer);! I. ]8 [$ \* a" @" A7 N
  181.     fclose(fp);' ]  {- }6 B% q8 l' m, `
  182.           _flushall();
    7 a4 n) }6 j. W, D
  183.   }
    ; e3 T3 X8 ]* R0 Z) ^" ~8 F
  184. }1 y/ m' O- q, S: N! {
  185. 3 L5 f9 X1 l" x  l. @* e
  186. BOOL CRevAppApp::Fclearf(char *FileName)$ E5 x" W3 H& B3 }( g2 {# y
  187. {
    7 K8 @1 e, F9 l) B7 ^# a
  188.      FILE *fp;
    . k! d# o( r, `- ~' ]& d+ }
  189.     DWORD  attrib;& C3 N& Q( O8 f$ F$ A1 {0 t* c
  190.   attrib=GetFileAttributes(FileName);( k( N- K  H: Z4 z3 P6 h: |$ X* s
  191.   if(attrib!=-1)
    8 [, ?8 J0 i3 R# {4 |/ L
  192.   {- r3 Q* Y* r) R( E; O" L; I) a
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 Y) P/ x' A  G" l3 `
  194.     if(!SetFileAttributes(FileName,attrib))* r1 D/ X  p: \$ [/ j* G* }( _
  195.     {
    % }9 F/ `$ A2 W4 ~% G- E& a
  196.       return FALSE;
    7 q( L$ |1 c# c0 Y5 X6 n
  197.     }
    * O  v7 s; y- G) ^+ ~: Y7 k
  198.   }
    $ ^8 j& r' `/ ~! J! ]+ C+ {
  199.   fp=fopen(FileName,"wb");, O$ P# s: G) M8 J% w* x$ A% v7 u
  200.   if(fp)
    " v% h9 t/ O- x9 Q8 b# s, X
  201.   {; C4 @  Y- M/ B- {. @5 U1 Z& X4 n1 L- h
  202.     fclose(fp);7 v! F' {8 q" R
  203.   }9 o5 O' m, p! h
  204.   return TRUE;! R7 H) i8 t, T! \, z9 [
  205. }
    $ ?& [( V  {1 I9 R/ S" t* _. l) o
  206. & _, q5 y: M! f/ V7 K- }8 w6 w
  207. BOOL CRevAppApp::UpdateLocalVersion(void)4 S* Z( I1 e* ~
  208. {/ \+ W8 L4 j* ~% w1 f
  209.   char filename[MAX_PATH];
    ! F5 b8 c8 ?3 M$ O8 z) N5 ~; Q
  210.   LPUPDATEFILE file,olds;
    1 d5 A9 o& \: [2 T
  211.   std::map<int,CString>::iterator i;
    5 {1 C4 s/ G% ]6 C
  212.   std::map<CString,LPUPDATEFILE>::iterator p;3 }) R" _) k) ]. m
  213.   std::list<CString>::iterator l;+ P( N5 O  |5 x5 J0 y  q
  214. . ]* `# h9 X0 F" e' V
  215.   if(bFirstUpdate)
    ! F' m  v* U3 Q; O! t
  216.   {& ?( D! K$ j. x# ]( I
  217.     dwCurrFile=0;4 W& Z) |! n9 o" M5 R; C- _* `( I3 G5 X
  218.     bFirstUpdate=FALSE;( m) x5 L$ B. e9 V9 q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- A' w: I# o9 ~8 z' Y
  220.     {
    1 Z! T! C( @+ \7 M5 b  s
  221.       dwTotalFiles=UpdateLocal.size();  s( s  B& @. `# h. q0 R
  222.       dwDownLoaded=0;) L7 C% R, r2 m9 b
  223.       bSilentStep=FALSE;" B4 e% j9 d7 h3 ~- C
  224.       bCompressed=TRUE;& I& x& l8 z7 Z3 K
  225.       strExtLocal.Empty();8 }8 F5 M% n6 Z- _& h; `" |
  226.       strFullName=(*i).second;
    / f( `- `) z' `. S/ |1 l; ~  [
  227.       dwProgramState=AP_CONNECT;" [+ _6 O! _) _! g- x4 S2 e
  228.       return TRUE;# F- J) W' }# b$ U
  229.     }0 m5 D, a6 m" ]- z! |
  230.   }8 F4 b+ L3 q5 m0 _2 @
  231.   else if(bRestartUpdater==FALSE)
    ' E5 \( O4 x6 M# f
  232.   {4 P* @4 }6 P! G' B* S
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())2 y7 o/ r* Y  s
  234.     {' z6 n" J- {+ i% r: r( ?
  235.       file=(*p).second;
    " u" E9 d( r$ H8 \9 d+ m. g
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    1 `0 b4 w$ w$ D1 [1 l- @
  237.       {# @- t" T3 _; i
  238.         olds=(*p).second;
    $ N& b7 \  v, G' `
  239.         olds->vers=file->vers;3 h6 n+ c/ C3 P8 g
  240.       }7 d& I8 I7 U1 F- V0 z& x
  241.       else/ u. w* f# i8 Y/ m3 N/ Z2 f/ h
  242.       {
    ; E* I5 C9 H, T: Y4 I* u$ W5 M
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & s8 ^7 y% C( |$ g% T
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    # k, z6 Y  ?! e5 w
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));$ V( O7 T" k. O: G% y
  246.       }) Z, N3 e& L1 C( T
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    1 P% a# X8 H* K6 I: W
  248.       sprintf(filename,"(%s)",file->file);/ {& b" M1 }/ P) R  a
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " r5 i5 Q9 D8 q2 q7 b. L
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }, X: n  d, G. a
  251.     }- I5 h3 @5 d/ w7 J' N) x
  252.     dwCurrFile++;
    - W& ]2 T: U7 T0 V7 N; o
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    1 y- L* K. Z- I; E
  254.     {
    6 ~1 V; q( n- P' {& V
  255.       bSilentStep=FALSE;
    / w9 \9 v2 n0 \7 T5 D
  256.       bCompressed=TRUE;
    , e# S  y$ e' u# g9 ~% n  @% A+ }) O
  257.       strExtLocal.Empty();  o8 `) k+ b. Z+ O
  258.       strFullName=(*i).second;
    " [; t7 a) t5 X' X' j! o3 S
  259.       dwProgramState=AP_CONNECT;
    4 R1 \: U5 B4 P
  260.       return TRUE;, E* U$ D( ^& S" @9 B# g+ M
  261.     }
    8 z7 S. k0 P6 u+ k$ V
  262.     if(!bRestartUpdater)
    & G* P3 ?6 g: [8 t0 @+ O
  263.     {
    7 l' z9 B1 y8 \  ^( I
  264.       int iCurrSize,iFileSize;
    9 v/ u( q! D7 a" i- w  {/ E" P
  265.       iCurrSize=0;
    : d' b$ t0 f1 W) M. B9 r
  266.       iFileSize=UpdateList2.size();
    5 q3 S5 s: L; L; x& g$ H: h4 T; E
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");2 V% G# |% H: |+ y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    " u5 s' H, B0 Y5 r* Y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");( _/ C% w% W  _$ o: H. i1 W
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 g+ q- z: @! c" e  U3 ?
  271.       Fclearf(".\\update.dat");0 _. B$ _: g* K# u4 G
  272.       Fprintf(".\\update.dat","Bloodyf\n");; }. g/ y7 |' h4 m; f1 a
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 i$ Q5 p  C& P+ s% a  m
  274.       {' q% F, |5 W1 ]1 I5 N  c
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())6 }- \% Z9 m, ^5 U% {3 q* t
  276.         {
    : G2 O, n2 a2 J% r( B7 Z, f
  277.           file=(*p).second;9 Q7 G4 J5 S8 c
  278.           sprintf(filename,"(%s)",file->file);: O3 @. x9 d0 A0 {
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ x- l$ T# o$ M8 \" {
  280.           iCurrSize++;
    + e3 I! ?  u" N
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ! n+ o7 _/ I. R. z  C% \" H/ u9 X
  282.         }
    # o  j, _2 B; I4 q' F0 Y" Y; J# g) J
  283.       }2 i: a/ b: @' E* Q) R
  284.       unlink(".\\update.txt");- V0 U$ u+ ^  u1 I' f) t9 P
  285.       unlink(".\\update.tmp");
    " _$ x) B" d" T2 v
  286.       Fclearf(".\\checkversion.dat");; V3 \" f/ a& f! \5 Q* j
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);/ d$ i+ s% |6 J9 N+ W3 g
  288.       if(UpdateLocal.size())
    $ h* H' R1 e) \, P& |0 z& b
  289.       {
    . M  y) q& S% N. D; X, S
  290.         UpdateLocal.clear();$ q) X0 C! j, ~
  291.       }
    # ?1 b6 D& ]7 h: l/ H
  292.       if(UpdateFile3.size())7 y- V- S9 Z, e
  293.       {
    ; {7 m7 r' r# e; F0 h7 Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) h% }6 e' Y- I7 ~+ ], y6 d! z
  295.         {
    - {" O+ d: F7 L0 e
  296.           file=(*p).second;
    ' y; J- l9 I8 ?: f+ ?  T
  297.           free(file);
    / w! n" i$ c8 E
  298.         }! _6 ?- z2 z% a3 t
  299.         UpdateFile3.clear();" ?. v# G6 w4 p; v' X$ a
  300.         UpdateList3.clear();
    1 u! W( ]) _$ S! J- {
  301.       }" u( _; P& u5 p! }0 ?
  302.       if(UpdateFile2.size())6 N( ]& W! m; |3 s6 h
  303.       {' M$ R( i( ^6 J' C' y  W
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & e" m2 V3 J( }; l8 Z
  305.         {4 V3 k- f) q! H8 C+ a
  306.           file=(*p).second;+ V  `( ?$ I9 U) q+ Y+ Y5 U2 i' r
  307.           free(file);
    8 T8 o# f; I* E2 r& |
  308.         }
      o$ }( r5 a% I" W
  309.         UpdateFile2.clear();
    7 U$ u# H& C; f3 h, Z
  310.         UpdateList2.clear();
    ! j1 R; @! S4 u
  311.       }* u% }: m5 U3 w' ~: I, g
  312.       if(UpdateFile1.size())
    # i0 f. X) O+ j5 c' Q" O' j+ i
  313.       {% e2 j8 f6 ^2 N
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 i. r8 J# h* c, N* k3 v
  315.         {
    & y; u! X- s$ [7 B2 ]. [
  316.           file=(*p).second;
    8 x6 r4 Y6 U1 K* D5 z
  317.           free(file);* {5 j: J* I; s; @+ c0 A7 ~( p
  318.         }) X: U* b% a# S
  319.         UpdateFile1.clear();% k# @( m& M) s6 W1 J& e8 n: H% c
  320.         UpdateList1.clear();  P. j( O( f7 N! z  v+ w$ S
  321.       }7 W; p* B$ A+ h4 Y- f1 A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    . w5 F+ F2 A( b& J- W
  323.     }
    : f6 c; M0 z1 v8 \+ {
  324.   }
    # [' D7 T/ i5 z7 a# x1 t1 Z
  325.   return FALSE;0 w% z9 N7 V  b1 I+ f
  326. }
    ( n5 B$ q9 e  S$ p

  327. ' o2 m) R% [- {6 {( l) Q
  328. void CRevAppApp::ClearAll(void)( P9 q, v6 d/ L! l3 x( i, x! g3 t
  329. {/ P  c. ?  @' z0 h; y2 n# O5 N
  330.   LPUPDATEFILE file;
    4 Z- G. g8 w/ Z) ?: m: D0 E+ t
  331.   std::map<CString,LPUPDATEFILE>::iterator p;  r: }+ q( F0 i; [; U4 v; L& L( p

  332. 0 g6 u/ {& R& t/ A4 s2 Y" Y5 G/ P
  333.   if(UpdateLocal.size())
    ( n0 i) |/ w/ H( ^8 }+ `1 m0 Z8 Y4 E
  334.   {
    ! L1 V1 m( k7 _! S
  335.     UpdateLocal.clear();1 V& p1 M: }! y4 @
  336.   }, G# v2 B* N- r4 A$ j& a8 W" b
  337.   if(UpdateFile3.size())  j; }+ l% `: R9 y  H# w9 d5 U
  338.   {
    . E- O" @, ]5 r5 ?6 `( m
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + ?& F" J9 H( Y: w% k# `( X8 W) _
  340.     {
    8 s' x. Q5 Y4 m4 A
  341.       file=(*p).second;
    " B! t/ a1 ]& g$ X. Y" d' x
  342.       free(file);4 X7 D! K3 O2 o! T
  343.     }5 h- ^! F! W# k% A$ h
  344.     UpdateFile3.clear();
    4 w+ }( N' G4 |- l9 _
  345.     UpdateList3.clear();
    " C3 H8 N6 A  [+ S, G" ~
  346.   }4 k! P& Z) P5 @
  347.   if(UpdateFile2.size())) {4 Z( g  Y+ T+ P( m1 Y( Q, u
  348.   {# t. m( C4 c5 ]2 {. [
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 \) t2 x7 I6 X3 w8 h
  350.     {
    ) z2 c; _$ l. w5 i- _
  351.       file=(*p).second;
    7 a& G. T  f7 ]: H# Q8 E
  352.       free(file);
    + e- s, s4 G& h
  353.     }4 ?. p) {, v( R6 f: e& C# o& M
  354.     UpdateFile2.clear();
    ) x6 d0 T* ~5 U% h" u& G, `
  355.     UpdateList2.clear();; I* a( R6 Z, |
  356.   }) M( B% g/ }$ H. }# k2 r: h9 _
  357.   if(UpdateFile1.size())0 C& V9 o- {2 J9 t2 [' Q7 _
  358.   {
    , `" Z7 g' [4 u' A+ x1 X6 P
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 i5 L  d* G* i
  360.     {' R7 P% k6 Y0 Q) Z, k
  361.       file=(*p).second;
    & ], A- T& Y) s4 T# @' |7 c$ c
  362.       free(file);
    & F  b& S& g- E5 y/ C" |$ R
  363.     }
    8 G* S2 ^5 s" v5 B3 E% ?5 z
  364.     UpdateFile1.clear();
    1 E: O# o/ F+ x% t
  365.     UpdateList1.clear();
    5 \: G6 g' _, v, m
  366.   }
    . ]# o# ^, |8 O. @  m/ p$ [, \
  367. }  
    7 U2 Q( V4 g+ o& x' C, U
  368.   
    # B6 e% {" B' a. _6 b0 h
  369. BOOL CRevAppApp::CheckLocalVersion(void)/ P7 J; H1 `% F" T
  370. {
    : L9 _( _* W$ Y  h
  371.   int c;8 q/ r' j3 r9 K0 x. Q( @  S
  372.   LPUPDATEFILE file1,file2;
    2 W8 ]) I- ~+ R% t# w7 g
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;8 p. r1 h! Q0 O4 P
  374.   std::list<CString>::iterator l;
    / }' K) \, W0 R. D5 \6 S
  375. " U) B4 m5 r6 E! f* a) S: M
  376.   UpdateLocal.clear();
    $ M5 T4 i5 O/ n" m' h4 @
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);& m3 e8 L% N( {5 D$ G5 |% v6 e7 Y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    0 D- s/ L6 L# b3 b- \- x/ o% c7 W. B
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);* O5 i+ ^, W! I6 V* j
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    . m. i" f% h/ o/ m4 s* D0 V
  381.   if(UpdateFile3.size())
    + g3 z0 M3 _2 ~4 d) Z, F: O
  382.   {
    $ U# I* ^: J# x- y" x4 L
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)$ A, I  c5 p  g* u
  384.     {7 m2 |3 t! ]+ X: ?4 ^& }: |
  385.       file2=(LPUPDATEFILE)(*i).second;
    2 t7 ~/ |4 Y% ]$ q' b
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 ~: [3 c# T) V- u
  387.       {3 t. h3 T! u/ U9 a4 D, Z
  388.         file1=(LPUPDATEFILE)(*p).second;
    7 B) D% W6 j- g
  389.         file1->vers=file2->vers;
    / H4 S' b) m: c* R- W
  390.       }
    & i9 E0 D0 Z3 ^3 W9 ~2 }
  391.       else+ s8 @. e) Q1 N! P5 b) I, L
  392.       {  M- {9 y8 {# f& ?
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! B/ }7 Z8 @5 h% g) ?3 C; ^/ H
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));$ V. t9 Z6 I7 A0 x% B
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));* e: A* z: m! W$ e5 r4 {
  396.       }" d& |8 v$ }+ G7 P4 m) F, p. I
  397.     }6 {. E: E. q: _+ z5 D5 l: C7 T
  398.   }
    3 h% W2 U5 |% `6 h
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)  Q9 H8 b. ^& R7 r# m4 [
  400.   {' |/ I1 B; ]- t' S0 x
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    # ~, ^, ~( L: T, r7 X/ }
  402.     {$ g) S; N- E: r" |9 u$ b
  403.       file2=(LPUPDATEFILE)(*i).second;) K$ b3 F: T8 A! h+ m. N' v
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 L. p+ Y0 F! ?9 |" J! o" _8 u
  405.       {6 D' \# _  k4 b/ A( v$ s
  406.         file1=(LPUPDATEFILE)(*p).second;4 X4 P  v8 s0 J6 \& G5 B5 @* m
  407.         if(file1->vers!=file2->vers). i( X# Z1 p9 W
  408.         {# [! F, z  a2 [( R
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # X2 `# [+ ?8 S) a
  410.           c++;: i3 M* v& _/ Z2 W- u
  411.         }
    . q( f" F; h6 G$ n) T. A
  412.       }  |7 e7 q7 s  c4 g, f2 |0 j
  413.       else
    , B8 I0 }/ s% i" I, b
  414.       {' }! g$ Z, e4 c( y' ~2 P( O* a  Q
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 d, N. N7 v+ |- T
  416.         c++;
    + N/ O2 o, ^6 W2 ?1 b+ A
  417.       }3 [' T7 t( o6 S$ {2 J
  418.     }
    & v9 s, l' q, |; j
  419.   }# _. K- H1 {- F2 S6 j2 S
  420.   unlink(".\\DownLoad\\update.txt");  Y' O5 K: ~9 l% T* K
  421.   if(UpdateLocal.size()) return TRUE;3 w1 k' v2 d  G7 l1 L2 S
  422.   else                   return FALSE;; g1 D& q4 h+ ~$ e, d- ^
  423. }( w! m9 m+ J$ M! Y
  424. 5 i1 l$ K: a4 n9 d! H. b9 ]7 c
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , v5 W% O. M0 h2 U
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"" j( ?) Y5 _& E- G
  427. , N3 p9 u3 h$ k  Q- U2 h
  428. # E1 C/ Q& f2 \" ?# A) N) ?

  429. ) o( c/ P# {) e+ A! _
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ( u% J% Q$ H3 S+ `$ ^$ @. x' f
  431. {! P' `; W, ]4 x
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;* y6 M6 Q/ u5 k) A
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), e2 y: ^2 p3 h" J& {
  434.   {0 `" u7 n7 Z+ p, M* U3 q
  435.     char szLanguage[50];5 x" T: }& |( u" _8 k- S
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    , f0 R( ~# l7 O  G6 q) a
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" x  m2 S/ P0 }6 i) G
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ N* m: {$ ^% T7 R
  439.     else                                   m_iLanguage=ENGLISH;* r% e" u4 ~- L& q1 \5 [3 g2 U
  440.     char szRegister[100];
    7 G, A" i1 w, Q# u( U
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 r! m$ t$ S. Q# X
  442.     strRegsName=szRegister;
    1 }! `, \) O' G5 o
  443.     char szPatchURL[100];' Q+ v4 B% b, Y3 |) v
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");  X* n1 k& \, z+ s7 m
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- k9 A9 o! I, p9 a! V) V# E
  446.   }, c. m5 d! E- H& u" Y
  447.   else
    . f( i# c9 N# W6 l0 E+ E; D
  448.   {
      N7 G5 a% F5 C2 x1 p4 T1 P. l
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 y1 o# a! m2 H: u. }# k! |
  450.     strRegsName=DEFAULT_REG_URL;. R7 @* \0 }! w3 o; {3 U
  451.   }2 u# f; D* d2 D8 F
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    " a" Z9 v" ~  {: B
  453.   {0 D* f' z0 L: a8 H; B
  454.     char szIP[50];
    7 Z4 p7 j7 ]9 h# m7 p
  455.     char szDIR[300];
      ?& l) N( f- X3 d3 F9 }+ ^
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    . D! I0 H4 Q% v" l6 I( }! S
  457.     {
    ) m6 Z% k) |; f& V6 M
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");  s. m- o- w  n3 I
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");0 ?4 U% q+ g" m7 j: F) `
  460.       strHostName=szIP;9 X3 m' q. t# @) I1 G% b7 v8 b1 H
  461.       strHostPath.Format("/%s",szDIR);
    ' ?8 W6 p& [4 T; @, J4 A1 f
  462.     }
    - I" ~' Y0 p! I
  463.     else  q: J4 c; h' o. S8 i
  464.     {- f3 x$ x1 R3 I- C8 s2 _
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - {8 [, s7 F  D" K: a
  466.       {3 u8 W  a" n5 b
  467.         char szLanguage[50];
    / m3 e3 g* S( _* f/ ]/ f
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 e# y% F5 u2 [2 K/ L* p  m
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;5 J1 A: L1 F* [: ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 b8 o+ _& y- h, B8 Q
  471.         else                                   m_iLanguage=ENGLISH;
    % s# ?+ `# z- ?) V# f0 J9 o
  472.         char szRegister[100];% S5 u" o8 w. Z# w- i& P2 J
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ l" w1 k- \1 f7 o; g# \' e& y. i9 v
  474.         strRegsName=szRegister;* H- N, h# \( \* n" B% i
  475.         char szPatchURL[100];
    $ J8 T6 r7 B: a8 M3 C9 N& f
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - E* @; f* N: \5 I
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 v7 K( b! f: f+ g: |# `3 i; ~" X& l& e
  478.       }
    3 Y3 Y* u+ U8 u1 q$ Y, f. d# @
  479.       else
    ) O& U. v1 I- S
  480.       {
    & d9 u( F7 y6 ^1 U, J  A% `6 K
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 v" v, j8 D" y. _5 J+ P3 u) |
  482.         strRegsName=DEFAULT_REG_URL;1 |/ Y, c8 W% y6 Z
  483.       }
    ! p0 a$ o9 e9 i/ c- D
  484.     }
    ) W; F' s/ d, }$ w. [; c
  485.   }
    & M" j. y3 ?  c) s+ z
  486.   return true;
    / P. W" c: X. p2 c- r
  487. }7 z/ ]6 J5 J* c$ [6 U
  488. 7 n: q$ p3 M1 E  U' t
  489. #include ".\ZLib\unzip.h"6 W1 L* p- e1 H9 c6 V/ U
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);" u9 |% j7 e4 i" l
  491. /////////////////////////////////////////////////////////////////////////////: w2 s9 c/ e+ \6 e. l
  492. // CRevAppApp initialization# R5 d0 z0 U9 z5 U

  493. 7 R6 z; @5 S( B. s3 `4 f* l
  494. BOOL CRevAppApp::InitInstance()
    8 |2 a) a# r8 @9 y, ^2 B
  495. {
    ' x) u3 j0 h, U& b  x  O$ o
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    5 ^/ {! p) K6 _+ h
  497. ) q; E$ E  K: I+ y) ]
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ! T2 J( b7 @3 R2 O# z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))7 S; a9 a, z# ^) u6 P# b4 x! T
  500.   {
    ) X0 ], S+ t2 x& Y4 K
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! p& x, w2 Q6 G+ f4 ]+ j& d
  502.     GetPathFromFullPath(szPathTarget,szPathSource);0 g7 D8 K4 w+ o3 U8 U0 s) q6 O/ M
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))' S. {$ X) @+ i0 z  _1 w
  504.     {
    9 s9 J" E+ g$ q
  505.       strcpy(szPath,szPathTarget);
    , a1 S* d" v9 h0 c" V. w. o- F
  506.       SetCurrentDirectory(szPath);
    : U1 R  w# ^9 ~$ x  R
  507.     }
    : _0 H: K& J. B' T- S
  508.   }9 u1 h9 J$ M3 R  E2 G
  509. #ifdef _DEBUG
    1 c7 x3 Q4 L0 h# ^; }
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 H+ \" H: B. T* l
  511. #else
    ) @( p4 _0 m7 T- s" R
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , E- |8 P8 O' H5 |
  513. #endif
    2 n' A9 n3 t" _. e9 e5 A
  514.   {$ A8 \/ n! S. N3 _  u: U
  515.     char tempFileName[MAX_PATH];
    , X9 n/ Q+ b! F( i3 u* c
  516.     strcpy(tempFileName,szPathSource);
    " L  a0 h  D9 ~- s" Y" [
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ; j9 [; [+ l8 r0 u
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ; v  x6 Q0 R) i8 Q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    # Y! V7 g2 U# d0 l
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);$ F* H: M+ [7 a0 |8 Y7 B, f. o
  521.     return TRUE;7 d# }; J' e/ J+ r- i4 ]
  522.   }
    $ w$ p* [2 u9 ]" w  L5 O1 R* ^
  523.   // Nuke 0118: Delete run.exe* Y% l/ C! _: D" A
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    7 v2 i: R5 I: K. r  t" v
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");  s& u" @& |- |6 g9 ~* j1 u
  526.   if(!ReadCfgFile("Config.ini"))* |1 {* |! x/ N, Q, a* u
  527.   {
    . k6 N7 N. K1 ?: p/ k
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    & l% y2 ?5 A( x: d) Z( l
  529.     return TRUE;
    8 J" f0 ]3 C/ b. ?1 p7 \
  530.   }
    ; ?, W( C8 f+ x' t$ D5 [, C7 Q
  531.   HANDLE mutex;
    8 C2 @* ?. g$ D
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))6 E3 i9 _* H/ a2 S) o
  533.   {
    " o+ V* `. s. i# `9 K0 U
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
      {5 P% ^, l% M; N( y, M
  535.     {% C) U$ x. t5 k3 Y, k
  536.       CloseHandle(mutex);' m7 |% I( E& S- k& ?
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);$ J: Y+ f& e6 X# r5 ^
  538.       return TRUE;5 I* P6 I# _* j) ]# V
  539.     }
    , p, N; f- i- t/ B
  540.   }  8 y% v& t" }% U: Z1 @' B  @8 L
  541.   CloseHandle(mutex);
    ; u  x- X$ x* I
  542. 8 }+ z2 ~8 H- D# q$ X
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);7 ]; R, o$ F, z6 ]& ^

  544. & U4 l: O% a. }& y5 J6 H0 W+ S
  545.         AfxEnableControlContainer();
    9 b. ^6 |' t: B
  546. , w/ J4 C6 l( @3 f5 e2 }# `5 h
  547.   bCanUpdate=FALSE;( I3 Y' E* J6 H
  548.   dwStartUpSteps=1;; t/ P: ~6 x( q, ]# }( J9 C
  549.   dwProgramState=AP_NOTHING;- Z- }+ l. t- B% m/ C* O

  550. 1 l" x4 c. k+ _+ L1 r: O% ^
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    % ~2 @* Z: W4 D8 Z

  552. ! r6 w: J* k$ }1 b8 F- T
  553.         // Standard initialization
    $ [, p" M2 _* s5 g+ C$ D
  554.         // If you are not using these features and wish to reduce the size
    " A" V0 ]0 v. p/ s: a' S
  555.         //  of your final executable, you should remove from the following
    ( j3 G" ^& q" h8 G' @+ g
  556.         //  the specific initialization routines you do not need.
    % V, [5 {0 q3 O5 r

  557. 7 Z, i+ J% H) J3 f  b  V/ j" E6 t
  558. #ifdef _AFXDLL
    2 w2 I& b% n" h$ P6 a- }; V
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL) d1 s& m5 d  R. c# Q
  560. #else# }" x0 @3 n" u$ V/ z3 `6 H  ]1 c
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    4 T6 `5 y, L- ?$ F4 Z2 {1 S
  562. #endif
    0 P& Z/ a$ K3 q5 k

  563. ) `+ @4 a- E3 c9 e
  564.   dlg=new CRevAppDlg;7 \5 j" j4 U- j$ r6 J$ M/ Q
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    3 T  |# H" D+ Q& r4 B5 o( _
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) }; N+ f9 p. r+ ~. o
  567.   m_pMainWnd=dlg;
    8 o" B- l7 b# b; a2 u0 ^1 r
  568. & i( H2 F4 s* x
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ( k8 A+ G& p5 @5 {' ]3 K

  570. ( e  W- o& y, w1 a' H  M
  571. //  GdiplusStartupInput gdiplusStartupInput;
    $ c+ [: ^( A) `: \) B. K2 W
  572. //  ULONG_PTR gdiplusToken;
    , j" D' ~' @( m; p4 A+ x& g
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    2 g, ]" [3 D; i! \& Z  a

  574. ) x, v5 g$ L9 K0 ~; _
  575. //        CRevAppDlg dlg;4 r3 k5 w( v( x# s  }
  576. //        int nResponse = dlg.DoModal();
    ! b- F$ |) x2 N
  577. //        if (nResponse == IDOK)  u: `. R" N- N, m0 G, {. J; y* s
  578. //        {- u3 J2 t, U" W) n( y5 |% p9 n
  579. //                // TODO: Place code here to handle when the dialog is0 V1 [* P+ A& r% y. A0 U$ J  p
  580. //                //  dismissed with OK
      m1 T4 X7 L0 _% D- O6 X+ D
  581. //        }* i+ k: O, K- @0 w2 L6 l. _9 |1 W
  582. //        else if (nResponse == IDCANCEL)
    8 w: F' Z* d" ]/ p
  583. //        {
    & R; H' A" L! t
  584. //                // TODO: Place code here to handle when the dialog is
    % `+ S3 p5 o* I5 _7 Z& N
  585. //                //  dismissed with Cancel  z+ `5 l4 p4 E- B: B. e
  586. //        }
    7 z( s1 t& u% q; @1 Y! H: T' ]
  587.   L8 C8 W; f: J0 E/ \
  588.         // Since the dialog has been closed, return FALSE so that we exit the7 `) [! E. r5 H$ c. \
  589.         //  application, rather than start the application's message pump.
    * a2 V3 c" w1 O9 i) `: y
  590.         return TRUE;; r7 f* ~) h# H( }8 o
  591. }5 j0 V3 B; z/ g3 N: _7 Z/ b# @
  592. 1 J  r% H7 @+ V5 ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    1 q3 L7 D' ~& {" a) M6 U
  594. {7 s: {+ W) z6 p8 Y3 v
  595.   int i;
    8 d; P" r& R6 i, v8 v, s. Z
  596.   char *szRet;/ J- A* ^2 z$ r# U- T5 M
  597. ) u: a% s9 @1 y$ I6 E/ D9 |
  598.   if(pSource) { itoken=0; sztoken=pSource; }, X. E4 l2 Q2 ^
  599.   if(sztoken)
    ) O* H. N7 v+ n4 D
  600.   {
    3 F+ ^  i1 ?5 A
  601.     szRet=&sztoken[itoken];* S( I: m( q, ?" S
  602.     while(sztoken[itoken])) b. J3 e& x4 A% B+ S3 G
  603.     {+ s: q" ?, _* o$ k: p3 |7 I( Y- K
  604.       for(i=0;i<(int)strlen(token);i++)
    ) A' k; g0 Y% T; ?/ `  P) N
  605.       {6 K1 I/ X3 ~# N
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; B3 g" r7 o2 O' I  I# l
  607.         {1 Y9 r& o# I$ E' @+ E
  608.           sztoken[itoken++]=0;
    6 M4 W5 ?" Q# N! y$ X+ B# ^
  609.           sztoken[itoken++]=0;% ?' l! t' q1 p
  610.           return szRet;
    ( L7 r% ^2 m+ C0 v  H& T% f
  611.         }
    2 G( e! ]- x. Z' \  e5 e: w
  612.       }' W) ?# r1 I1 ~  _* }
  613.       itoken++;
    4 o* k6 F1 ]0 a. m
  614.     }: h+ z9 |2 Q' @# v5 G
  615.   }$ P  X8 [% d$ q) @
  616.   return NULL;
    8 S" f& Z$ _3 x. U6 V4 J2 y
  617. }
    ( `5 m0 |$ D4 J5 |2 s# U% h$ B8 B  t( J0 l
  618. 6 o$ V5 N8 r1 N( i
  619. void ProcessProc(long Total,long Current)$ i: `% H, s$ [5 X; b/ O
  620. {
    : a( b: B" D9 b' N% E0 x; h
  621.         MSG msg;
    9 w5 K, a4 e" w% e- H3 F9 B
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    6 i4 e# }6 G2 K( D. V7 R: V; c. O9 q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));: f, s- U  I( V  F+ ^, G
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))7 E! S$ d4 }; c( G1 H
  625.         {
    $ v# }; {* c/ y) |$ K/ h
  626.                 if(!GetMessage(&msg,NULL,0,0))
      x" x0 z" y" z; \8 g9 f, _
  627.                 {3 n: ]7 `  C8 ]) M3 t; d* D
  628.                         return;
    $ j2 ~2 I: ^) p2 [0 V* |* S
  629.                 }
    0 {) Q% I, u, L' J, A
  630.                 TranslateMessage(&msg);
    5 o! t- d( k# E! a- u
  631.                 DispatchMessage(&msg);' J( \$ ~; V; \
  632.         }        0 d: q) h* h8 j6 e
  633. }2 j2 y8 |2 J! ?$ Q- H# k
  634. 4 L- y8 X: E9 J' @, {
  635. BOOL bFirstChar=TRUE;
    8 T* o7 r8 ^* R+ n, m' i6 i0 T

  636. : ], ^* Q* L2 W
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    3 o/ V+ u5 w/ Y  z% D
  638. {
    / D; }/ C/ ~  p. A8 j
  639.         // TODO: Add your specialized code here and/or call the base class+ K8 k8 ^8 a' z3 T6 \0 q
  640.   switch(dwProgramState)
    6 a' p) ^- X/ V( r
  641.   {
      @7 c0 W6 g) k. d) A
  642.   case AP_NOTHING:
    ) c4 }0 C* I9 N3 y7 D; R
  643.     switch(dwStartUpSteps)
    ( ^! y- ^4 }. P4 `( `
  644.     {
    & @5 g, u* N  Q1 n
  645.     case 1:) n  s4 T4 p, x, ~7 m4 h
  646.       {
    , J; p8 d7 x' f6 O1 f
  647.         int i;2 A& g- l9 u' |2 M2 F# X
  648.         CDC *pCDC=dlg->GetDC();3 E# b5 j; @& ?) `$ \
  649.         HDC hdcwnd=pCDC->m_hDC;
    " E7 g- X( F! z& g
  650. //        Graphics graphics(hdcwnd);& x4 q3 ]4 [- L4 v1 A4 b/ Q& {- H
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");% @- p$ n. M1 {8 z' q7 t! t. Y' i
  652. //        INT iWidth=bitmap.GetWidth();( m5 B8 [0 o+ Y, c9 ]
  653. //        INT iHeight=bitmap.GetHeight();# _+ Y! F" K" m8 h7 v
  654. //        Color color,colorTemp;: x8 r% z/ H$ p' S" L, z/ [/ b% b
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% g+ @: c/ a& T6 C3 c
  656. //        {* a2 l6 Z" Z. H. i: z2 C/ m' n0 F
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# _' ]6 s  U$ b9 o2 f
  658. //          {/ f8 J, A1 T6 l* e5 s" H6 c. \
  659. //            bitmap.GetPixel(iColumn,iRow,&color);. J* v9 r7 ?8 S
  660. //            colorTemp.SetValue(color.MakeARGB(1 V7 O8 d% K4 I' c# |2 C4 E& N8 ~
  661. //              (BYTE)(255*iColumn/iWidth),
    ) _% `  G  Y1 y( G
  662. //              color.GetRed(),
    5 K; x9 E) Y- n6 k* n' F* |0 t
  663. //              color.GetGreen(),
    ) s% s" _& U4 j+ @! @. h
  664. //              color.GetBlue()));$ [2 T+ g, V1 {* e, w
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    + N2 \; B* z7 Z# T' b! Y. @
  666. //          }
    ; A3 p$ T; a, E9 }" q
  667. //        }
    8 F6 e0 `5 v) c$ M* O. U2 V
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);7 o+ J. K4 W% \5 x0 }. c  U' S
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ t5 z" c- T7 E  z! H: ~
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ) G# V* {! n+ h5 k4 S5 L; |4 Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- J% l  l6 T# d8 }+ L4 g
  672.         for(i=0;i<240;i+=8)3 J/ y, c4 a6 O5 U9 o. X7 p9 {
  673.         {0 y5 y* u( [, Q) E& e; i% P  x$ y: d
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 d* o* a8 R  r  k2 m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- g: n( }' u/ W( R
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 v. P! _/ a( @& ^, s6 D
  677.           Sleep(33);1 f& d& u! i% D( @; t
  678.         }. K) l5 @" T- r4 Q
  679.         Sleep(1000);
    8 t- t. w, X9 r" k$ D
  680.         for(i=240;i>0;i-=8)
    + R# W; M) q& t. _
  681.         {+ m# a+ G( i, d9 C
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' T! Q" h( A) R2 o& {# o" T4 i, \5 v
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . {1 {0 R! p: W  r
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);9 R1 a/ M$ T  N; `- b
  685.           Sleep(33);& ?& I1 J- g& C, v
  686.         }8 s( D! w) h- Q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);: X- s5 ?& F% o% O$ n
  688.         dlg->ReleaseDC(pCDC);- E+ Q4 P( t5 g9 W( C; a: m. c% A# Q* k
  689.         DeleteDC(hdctar);
    , ]6 ~/ V; G. ~& x& x9 u* b
  690.         DeleteDC(hdcsrc);
    6 A; f- y. }, C* C  t
  691.         DeleteDC(hdcorg);
    0 P$ G( ?/ C9 D; I# K  ^/ L
  692.       }9 a) e( J' z& A: N3 k& w
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);& ]) i( @9 G) S5 s9 A& n
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");) p- i6 A3 p, O5 f6 [
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");- L* D8 ]' x. S5 n1 ~3 e
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 s5 t2 z  e9 u1 J" K
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 M- j- V4 G( m. i# w/ w2 \- K
  698.       if(!Dn.Connected())9 |0 A4 o' I# M
  699.       {5 h3 Q2 k/ A9 m8 i- Q
  700.         dwTotalFiles=1;9 y0 j8 u7 z! ]3 f, m
  701.         dwDownLoaded=0;
    % X$ [( |* n. L
  702.         bSilentStep=TRUE;
    * J; n2 W1 R% o6 \/ S
  703.         bCompressed=FALSE;
    ' {$ p" R1 D. r2 p
  704.         strExtLocal.Empty();' R1 v+ c* t4 x& `, t& s; i: K
  705.         strFullName="readme.txt";  x0 b7 O, \+ ^( _
  706.         dwProgramState=AP_CONNECT;0 T* Q' @# M7 w6 J6 a! o* f) \
  707.       }' `0 l2 N6 t/ F* |( @/ e% X
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 W5 v$ G" w& I% j/ c4 V* W  v
  709.       dwStartUpSteps=2;
    5 a4 V2 y+ A' ^( D
  710.       break;
    $ h9 z3 l$ X* T- e
  711.     case 2:
    - D3 ?# |& W' N" _0 ?/ r
  712.       {
    # x: l" }& E4 v' Q2 W, D
  713.         int iEOF;$ ^/ ]& Q! r: P) y
  714.         FILE *fp;0 z/ Q9 b- `! e% d( J' R5 B
  715.         char szString[512];
    5 V1 S5 c) x8 }( ~3 F6 R  Q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ! c1 L( _) h+ {8 g% {
  717.         if(fp)$ l2 u4 R8 p4 W, ?( N
  718.         {  u# |- @2 }4 B5 P+ ]# y
  719.           do& ?8 S/ i1 z! ?
  720.           {& g6 z! R4 [. s" \% J5 F
  721.             iEOF=fscanf(fp,"%s",szString);2 y# U, T: c- l2 @
  722.             if(strlen(szString)). Z# }7 I; }5 u7 G4 ?
  723.             {5 h/ q2 a7 p; E  p# d$ O6 v' Q
  724.               if(bFirstChar)/ n( \$ D1 O5 i# e- }
  725.               {
    6 B  w% J! n9 x8 P
  726.                 bFirstChar=FALSE;
    0 `) V+ R7 J2 n1 F
  727.                 bConnectIsBig5=FALSE;
    : d! D5 p0 e6 \4 @' W
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    " j8 U- d+ @: j. R
  729.               }
    + U& ^2 V0 Y7 r  n0 G$ \
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    " m& i! l; k8 D: E
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));0 y/ G; I) Z. Y5 I  C
  732.               dlg->m_ListText.AddString(szString);$ [& @0 T; m" P
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 s4 K  A$ @9 ~( b% i" b# ?
  734.               *szString=0;
    9 r! B- ~2 J4 y) i2 n
  735.             }6 e" Q5 v5 x$ r. _* g* q" y) c
  736.           } while(iEOF!=EOF);
    , |4 x9 _- E2 X# U2 [
  737.           fclose(fp);% j. ^) w4 i6 W8 c$ o& C# Y6 S
  738.           unlink(".\\DownLoad\\readme.txt");
    ' n5 x  p( l8 s1 T  r
  739.           dwStartUpSteps=3;9 l3 |" c: A( v
  740.         }
    - i6 f2 |4 c% P, [& e/ T
  741.       }
    - l0 A9 I" m* A( j) K( s+ u' t
  742.       break;9 Y- y& y& F% n/ F
  743.     case 3:* Y. X9 {3 s# A2 X# x# X! p2 E' t; j4 [
  744.       if(!Dn.Connected())* W$ ?; D1 o7 b" _1 [- c" R
  745.       {9 b; O9 \* e, I. e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    3 U% U/ _- e9 X3 e  T3 G
  747.         dwTotalFiles=1;
    # q, L% O; b5 T/ W3 p: m) ]
  748.         dwDownLoaded=0;' E: R/ C" k& j! f
  749.         bSilentStep=TRUE;
    / C7 l2 @: ~9 |7 u2 T: G4 a
  750.         bCompressed=FALSE;6 c# l+ d& T. J6 ~# f! u
  751.         strExtLocal.Empty();5 t# L. h9 Y0 W) t8 F8 K
  752.         strFullName="checkversion.txt";) S6 r2 J6 ?# p/ ~: Z, c
  753.         dwProgramState=AP_CONNECT;
    0 e2 E3 @7 Q3 g+ P, P, ^  e( B9 E
  754.       }
    0 I+ Z' _; v9 G0 v1 F+ X6 o( ]0 }
  755.       dwStartUpSteps=4;; [: i3 ]; d) X8 x" C$ i
  756.       break;6 B6 @1 Q  j- v2 y0 G7 N' Z' g
  757.     case 4:* E' `; u; a0 j
  758.       {
    , F7 Q' G4 z& l+ ~. K# |
  759.         FILE *fp;6 ~8 y' F& M  J
  760.         char szString1[128];; |% k2 E7 p' Q
  761.         char szString2[128];  f- I. M4 r" Z6 N
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    1 @) X1 A6 I' J' U% W8 c: X+ i7 U
  763.         if(fp)  V+ ]" p6 v$ A! `
  764.         {! N0 {+ p. ~1 b4 x. F$ I0 Y: a% ~
  765.           fscanf(fp,"%s",szString1);& i) `% c1 r) T6 ]4 s
  766.           fclose(fp);
    % g% G* a/ m$ A- r
  767.           fCheckVersion=atof(szString1);
    9 u# R: ^% A" M1 S/ n5 V
  768.           fp=fopen(".\\checkversion.dat","r");
    # _0 u5 ?7 }5 p( Y7 T
  769.           if(fp)
    " Q; J4 E6 e; F4 {. e/ H
  770.           {/ k9 a( X; B$ u: c3 }
  771.             fscanf(fp,"%s",szString2);3 V8 g# Q- k9 R. \: |
  772.             fclose(fp);- U) t0 L6 V2 g
  773.             if(atof(szString1)!=atof(szString2)); z& X9 N' T+ }' L" B' F
  774.             {6 `: K0 R) f) ]: r7 g+ n
  775.               if(!Dn.Connected())) j7 _9 ~1 |' M  X2 Z' S
  776.               {" j! p  U; y8 w3 G* s; w5 x
  777.                 bFirstUpdate=TRUE;3 ^  Y( b  f, U% D  b
  778.                 dwTotalFiles=1;: \; j) Q" a& w- y4 ~
  779.                 dwDownLoaded=0;
    : D0 @2 P4 w+ j- p% j
  780.                 bSilentStep=FALSE;. \0 }' a, |7 L! u4 q) n& t: X
  781.                 bCompressed=TRUE;) `/ ~2 Y$ d) x; L
  782.                 strExtLocal=".\\DownLoad\";; i1 q5 P1 K8 d/ G, D
  783.                 strFullName="update.txt";
    % Y3 [3 X$ O! }8 Z/ G1 P/ p
  784.                 dwProgramState=AP_CONNECT;4 e. w+ J$ S4 c$ c: Y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      w$ r4 a; K2 a; r! O
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 b& g4 k8 X2 O4 B. v6 r- m* y" s+ I9 d
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 k$ H! j! e$ `
  788. 1 W& F+ x( a, U6 z! ^3 d
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 |" S6 K) z: ]
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    2 i/ [9 |! q! t
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 K+ h! \; ^0 d) u1 c6 F
  792.                 {1 h3 H; H4 d+ U/ ~1 A6 c& ?
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! Z9 y+ w' O4 P1 w9 x' K
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");4 y. y$ G* w7 E
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");( O2 ~. N5 X- w( a
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 C( d& ~- e; R, [

  797. 8 W+ Y" K$ |: X- ^( n# r
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");6 M$ p$ F" r7 _  r. j
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    1 c/ _# c8 x$ B) x" Q* \( w, w
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) N+ X& P: {& B$ h: P6 U* k+ b7 K
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 L' X4 ^: \# W5 u9 q" B
  802.                 }# s4 b: J) O7 y# Z8 N6 n$ y+ U
  803.                 dwStartUpSteps=5;; A, G: u9 H+ ?! C& k: }
  804.               }
    3 X5 F( |7 ?* e8 v
  805.             }
    % N& S3 e6 R& ^3 u/ L2 K5 j) V
  806.             else
    ; q: t! P! G" z, _$ l, u
  807.             {
    0 t8 V! f8 {5 v$ V) }7 V; s
  808.               unlink(".\\DownLoad\\checkversion.txt");- J% I8 F, Q2 Q+ m6 K' c+ c( Z" P4 w
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    * i- D1 t& W6 O+ v) s& {/ F+ b
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");* Y$ ^( P1 o& t" G: g
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
      H; y6 `4 k3 D1 |- W9 s

  812. / n! t; s6 l+ j  \9 o/ c
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 M: ^1 w# F- C% R
  814.               dwStartUpSteps=99;( R2 u( n0 {. C% P( x( D7 B4 W2 I
  815.               bFinishUpdated=TRUE;( }! U5 |: T( w+ _7 M
  816.               bCanUpdate=TRUE;
    $ N6 T) e) \/ J
  817.             }
    6 m6 g( N  o; x! L, p2 K" c
  818.           }
    " V( q8 l4 z4 J$ U( c
  819.           else
    7 y) A) J2 ^' o* h. ^2 v' R
  820.           {4 Q4 C* ~+ p3 \. b" T. c8 m/ T
  821.             if(!Dn.Connected())
    , N) U3 n, ^% y$ ?/ m5 J. w" p
  822.             {/ }: I. t+ E3 b8 t/ _
  823.               bFirstUpdate=TRUE;5 o+ w: X! _" ~' u
  824.               dwTotalFiles=1;
    ! ^2 G3 u; L9 Y' t+ I5 ]- `& e$ c' {
  825.               dwDownLoaded=0;# ]: c+ o2 u; R" r( o
  826.               bSilentStep=FALSE;  b2 g% M+ U( T$ |
  827.               bCompressed=TRUE;
    . Z; O7 A# Z' V! i0 D' r3 X2 e% w
  828.               strExtLocal=".\\DownLoad\";
    ) E2 q  n) u1 p+ ]* p2 C# W$ A. o! j! M# N
  829.               strFullName="update.txt";3 m% z% J$ E; Q' q* y
  830.               dwProgramState=AP_CONNECT;
    , S/ l( V" h+ q4 ]  [& V( D
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  b6 K) x- Z& F. m' Z( [: d0 ^
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ t1 |3 U5 J+ z9 C. I& _- ~
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 H- @# O7 J; k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% P% M0 E% L/ M) g+ V' w
  835.               unlink(".\\DownLoad\\checkversion.txt");) w- Q) A# Z1 V" c# K
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)5 u3 e; p1 P, O, i
  837.               {
    5 U: A# C  E5 G) T8 _
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 D, w) e2 R9 u3 M) R
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");; b9 X+ p4 H$ E$ Z: L
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");( I- r  z- ~0 O) C6 n
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) _, }+ s9 T/ k2 Q* y
  842.                
    ! R+ W- G% w, N- C, u- g
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 T2 H; L6 j3 f2 }* a: u
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. A/ M7 b5 o% w+ t" a; I
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) Z8 @2 e* F) L0 w
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& K8 M! t! `3 o  y7 W) h
  847.               }
    5 G2 G0 u. h- R% t% S0 L
  848.               dwStartUpSteps=5;
    ) s1 [% A8 c( r; M, Q
  849.             }5 d9 q: N( {( W6 L+ I: O/ x
  850.           }
    , h3 u' `6 N# R; c, V5 C
  851.         }
      J" L. D6 ?; N, a
  852.         else3 L0 b8 t5 V5 g
  853.         {! q4 Y1 G1 o" p! P  N. K
  854.           dwStartUpSteps=3;" O7 \$ Q5 x! N& Y2 [
  855.         }
    ! c9 d# Q2 c" }9 Z' A( a% }
  856.       }
    & c! B- s- j7 a( P( z8 l: J5 ~, e+ n
  857.       break;
    ' @& P2 q+ E2 t
  858.     case 5:
    7 v; R, t* U/ a) F% v# c
  859.       {
    ! W+ ~- E* R9 ^% H9 O) m
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    : W; D' ], @% U) H. S
  861.         {: ~, N- X% D# E0 Y( i+ l5 G6 W
  862.           int opt_overwrite=1;
    7 l0 ?' n8 v1 S1 P# r1 v
  863.           int opt_do_extract_withoutpath=0;: }* q9 X7 ~, S
  864.           unzFile uf=NULL;' n5 u- f9 W. f+ O7 a

  865. % Y7 {0 u7 W9 m8 c. E/ K  s' ]6 H
  866.           uf=unzOpen("Wsa.zip");( s$ k8 Y4 c6 s- d
  867.           if(uf)
    1 B; b' Z9 u# Q. V* \/ ?& v% Q
  868.           {  ~0 G/ f5 D! h! }: J* H  O- D
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ' N, {6 v% q3 T, e5 ]
  870.             unzClose(uf);2 Z8 N, J* g0 G- ^- J$ X
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    6 Z" ~! N" T* c& v' H! P5 F
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    - r$ x) S- z& u. n% M
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    / V8 Z' u2 j) x# {) E$ u, J- j( @' T
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 T/ D+ C$ a; Y4 {, C( Q0 }) d
  875.           }7 k. Y4 h: F9 o4 Y8 o6 R6 ]
  876.           DeleteFile("Wsa.zip" );+ l# M0 U9 m8 {: |4 M( j
  877.         }  \/ I' N5 G! Z3 t! \

  878. ! q2 k4 H. X2 Q* }3 B, g. D7 e
  879.         if(CheckLocalVersion()): l; T9 `+ K/ Y$ p; g
  880.         {0 ?: z" M' p$ g* P, G7 [
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
      A1 n* M' m( z
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    4 r) R: {% ?; t# Z+ H
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    2 a& L. A, |* d! z' u6 ~$ D7 }
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; U0 M" T0 _/ K+ F( q6 q
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);$ v; F+ m1 N/ R  x
  886.           dwStartUpSteps=99;
    " h6 T& W. w$ @( S! j. t( J3 Q
  887.         }: w- T' V3 ^( Q; L$ H
  888.         else2 l0 O" H" @- _( U" A
  889.         {
    & H, n6 u6 g. _/ b3 \! u6 u0 f( U, y+ M+ U
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 b7 n$ O7 g5 F0 L+ d1 E! p" p
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    # `3 c" X) I" _' r+ y
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    % l( g. b* u' m5 C5 H

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

評分

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