CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
! N  g- P/ j4 Z# x- X
  1. / RevApp.cpp : Defines the class behaviors for the application.
    3 O' H) B" S! {* k' X
  2. //
    7 b3 }9 s6 I; @# q4 y

  3.   ^" Z: L  n( F1 k6 f
  4. #include "stdafx.h"
    # F  e! {& m: c

  5. % L) l6 d3 z5 }" R% b
  6. //#define UNICODE
    5 T" o" u% E  Y9 |5 B
  7. //#include <gdiplus.h>6 K8 W/ r3 j& s8 p- z9 {" i
  8. //using namespace Gdiplus;3 s9 w9 S; j, b9 m4 j; v

  9. & ~3 X1 X1 J  F6 m2 t
  10. #include "RevApp.h"
    3 l8 f: B( I6 T/ O/ ^
  11. #include "RevAppDlg.h"
    % C/ K- S9 ?2 y+ J# [$ C: V
  12. ! X- {( Y% [+ [% N/ }, I
  13. #pragma warning(disable:4786)
    & R5 e- a3 V2 ]* L5 k6 B- \+ |
  14. #include <map>
    0 `7 s/ v, o1 j1 {# {) x1 J( u
  15. #include <list>
    ! f  @/ Y4 ?# D# J( A
  16. #include <direct.h>3 {4 H4 e8 n% m" w
  17. 3 a2 J9 m* W) o" a6 p4 B
  18. #ifdef _DEBUG" D5 i4 r; q) H' n
  19. #define new DEBUG_NEW3 O5 r/ b' O8 s0 X, s3 ?$ H( A
  20. #undef THIS_FILE& y1 i7 c& b* d" H6 {# _/ T( X: T7 q
  21. static char THIS_FILE[] = __FILE__;0 |2 M" W3 `9 n' d
  22. #endif; q$ p; t7 y/ h# E$ ?& M
  23. #include "SkinResDef.h"
    2 O, P8 v6 l# @2 B5 V( @
  24. #include "ChangeBG.h"
    ! Q/ |# w' n- h6 \4 N
  25. #include "AFXINET.H": `) U4 }+ O$ L$ ~2 I. Q8 K9 _

  26. 4 B* b1 x  ]7 G- N/ X
  27. #define TRADITIONAL_CHINESE 0; n9 M: l  n9 M4 N! W
  28. #define SIMPLIFY_CHINESE 10 ?) ^/ n7 Y7 Z8 m5 {
  29. #define ENGLISH 2
    & {8 @2 T7 S. T- K
  30. int m_iLanguage = ENGLISH;
    3 p) p8 W# H. ~. Z$ ]$ ]' ?, A
  31. /////////////////////////////////////////////////////////////////////////////+ c6 N4 ~! @; @6 s1 Y  c
  32. // CRevAppApp
    ; |+ W! S! w: \$ [% w

  33. 0 ?/ v$ e" }0 V. y; ?2 h7 a; o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    + L, q) b7 G+ V5 q
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    : P# Q' j, B: Q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
      J* X; d4 o) h. f3 g- J6 s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ! `' ^# W5 b. f6 s8 G+ u
  38.         //}}AFX_MSG
    ) p3 t+ O3 j+ g  O. H
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    - w, X: M- X* F0 ?8 p, d+ ~
  40. END_MESSAGE_MAP()
    3 g8 i8 c* m% u- @! T4 q

  41. # y. k+ ?2 `/ l+ N/ Y
  42. /////////////////////////////////////////////////////////////////////////////7 Y- P+ ], e4 B
  43. // CRevAppApp construction7 L+ Y; |4 f: z  n

  44. , n) n: _9 O5 K
  45. CRevAppApp::CRevAppApp()
    : i; B# d0 v  g- ~
  46. {! T1 C$ {$ h: r* {% `+ ^2 N: D
  47.         // TODO: add construction code here,
    & R! ^0 G8 t  ]4 ]8 h9 Y
  48.         // Place all significant initialization in InitInstance2 t; N0 q3 ?# G, L
  49.   bDisplayIsBig5=FALSE;
    8 `: i) L8 R$ {8 E" I
  50.   bRestartUpdater=FALSE;% [+ ?3 O: x3 D4 S4 d: q! y
  51.   bFinishUpdated=FALSE;
    5 [( w# S, _' m0 K6 @
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    4 s3 H) ~6 Y4 Y# a
  53.   InitChangeDataBig52GBKS();
    ! F+ R0 J) B$ a8 I, \" n
  54.   InitChangeDataGBKS2Big5();
    0 I" C( C! O7 H9 ^3 X2 U
  55.         //
    + G  d4 L* O7 I% m
  56.         bClickRunExe = FALSE;
    1 w! v" {8 e) S
  57.         //
    & B$ W  f+ m; P- B
  58. }/ o3 T$ F) p4 X6 |9 W; d/ d

  59. - x4 p4 c& h/ f  I
  60. CRevAppApp::~CRevAppApp()
    9 g8 h, B# a: g$ w& m# `6 o
  61. {' j4 v' A3 w/ v$ H5 a: y# `* M
  62.         // TODO: add construction code here,: q& ~4 n% T9 x& g- o
  63.         // Place all significant initialization in InitInstance* I2 p& F; r- F! F; L& `
  64.   EndChangeData();
    ; ]1 u+ g  y0 ?: T, d- B# U
  65. }
    . Y% i  p, H0 f5 J% r2 l
  66. 4 P1 r3 n7 n8 e/ v3 P: G1 Y
  67. /////////////////////////////////////////////////////////////////////////////9 O: z* C! S( o( l' p7 x
  68. // The one and only CRevAppApp object3 G) D; z  y, p$ L  W3 c
  69. / A8 b$ [" B% w& H
  70. CRevAppApp theApp;
    ; a) P3 T. X* K- ~5 ^" Y# z
  71. 6 ~0 `, Y9 E3 }, w$ P, s8 [
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)/ g+ f, x. D) l7 v3 ?6 M5 D
  73. {* }- L8 u0 E7 I! a
  74.   int iEOF=0;
    3 C* Q7 S' ?  ?4 R; H
  75.   char szTempName[MAX_PATH];
    7 e& m, @, F% N5 c" Y; t: D- e  ]* i
  76.   *szFileName=0;
    ( j0 H: A# w% J# d/ P. \% c
  77.   iEOF=fscanf(fp,"%s",szTempName);* a4 D/ ^; V+ D* w! e1 ^2 c& r
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')' J2 l  d1 o  ]+ B' R4 B7 l  C
  79.   {; V1 x, Z( u. J7 q: g
  80.     strcpy(szFileName,&szTempName[1]);
    ' r6 V- C& _* X" q0 T6 f: A
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF). k" I, M0 {' I0 G( L6 w
  82.     {
    ) l* M- G( f* a( m) K" O
  83.       iEOF=fscanf(fp,"%s",szTempName);
    3 {3 S9 j" S& h5 e# n
  84.       strcat(szFileName," ");
    ) J0 v- v, L* ?
  85.       strcat(szFileName,szTempName);
    0 G8 v' Q- E, Z: ^5 ?/ v8 p
  86.     }7 x: D8 H0 i, ~+ }7 u+ m8 r9 v, h
  87.     if(strlen(szFileName)>=1)
    3 i  F# z$ [# V4 p
  88.     {
    & L+ t# p$ p2 `1 C+ a% ?
  89.       szFileName[strlen(szFileName)-1]=0;9 Z( o% Z8 J4 r$ w
  90.     }
    & i& M' o' [) L3 E
  91.   }7 H5 q% }1 r5 B2 i
  92.   return szFileName;
    + g1 N( G2 M3 p
  93. }. W9 u) S# @2 X; C; D+ h

  94. 3 `3 L. x/ O; S( Q' ^4 V  y# I
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    4 b& W3 E* B4 d' S/ f% l: d
  96. {2 g3 X/ r- f1 ^
  97.   FILE *fp;3 j: }( {3 U/ t( X* e: P2 X
  98.   char *key=NULL;
    / r. E! C) z4 w6 B, j
  99.   char version[MAX_PATH];
    $ K/ ~9 T: k0 M+ h8 w9 O2 A
  100.   LPUPDATEFILE file,olds;
    / W( F" Y5 `' w' Q1 ]
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    # J2 z' i' p  N
  102. - X6 W2 h: X- T. K$ N9 Q: [: ?4 G& C) W
  103.   UpdateList.clear();9 B. x4 g: {8 o7 p9 }5 }
  104.   UpdateFile.clear();
    $ U; H# l/ Z' N% w0 V& G5 o" N) I& b1 U
  105.   if(GetFileAttributes(filename)==-1) return false;* m+ M. y* E, I" F
  106.   if(!(fp=fopen(filename,"r"))) return false;( }, v6 {8 R3 N2 o: r4 S
  107.   fscanf(fp,"%s",version);, p3 r1 b5 D8 j9 k1 j
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }' P" ]) J9 d9 q8 g4 s4 w$ {1 |0 j1 ?
  109.   while(fscanf(fp,"%s",version)!=EOF)
    * `$ @3 |: }# q5 a
  110.   {
    2 Z$ D: w2 A& o) E3 [8 q
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 g' k7 f) K1 H' R0 [
  112.     fscanf(fp,"%s",file->path);
    / U/ ^" h3 m  y( y0 [- e, X
  113.     ReadFileNames(fp,file->file);: @4 I! z) X( S. e# J, z
  114.     strcpy(file->full,".");
    + U3 T% H" O$ K, t: Y9 U
  115.     strcat(file->full,file->path);0 b' ~$ H- O! P
  116.     strcat(file->full,file->file);
    - y# ]6 _" p6 w- f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    + X' [( M7 P8 j: W* Q0 L0 y
  118.     {0 l1 E$ H$ n( Y: P+ O9 Z
  119.       file->vers=(float)atof(version);: j' A* ], e  Z  X9 T
  120.       UpdateList.push_back(file->full);
    : M2 [" v6 Z5 v  G, n
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , n/ @# L  Z( q- f# g
  122.     }
    - s, Y. o, _0 T6 ~0 V( F
  123.     else
    ! j& y2 j- a; T  ~
  124.     {
    ; `# }% V2 ], O' ]2 x, g+ y
  125.       olds=(*p).second;1 n  \  E% |, d3 C$ g$ r& C" ]- s" _
  126.       if(olds->vers<(float)atof(version)); ]3 s2 ~4 P( v8 Q7 e
  127.       {
    * i4 w3 W: @  A' z" q
  128.         olds->vers=(float)atof(version);
    # z7 R0 I, j" C6 d* P  p# H
  129.       }( v7 r4 i' Z/ T
  130.       free(file);' E4 m) M9 v4 f
  131.     }
    + Q6 m$ ~$ O0 l/ K. ~5 u0 d
  132.   }4 U5 q& x" L/ p+ ]
  133.   fclose(fp);, B+ A& n3 ~; a# K$ o9 X
  134.   return true;) z7 p9 \: L3 c1 j& y0 v
  135. }
    3 p% e# X9 \% E! O$ \

  136. # `+ G; f3 e+ x1 k' e" S7 h
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)3 \0 G; ~9 u' Y0 Q
  138. {
    " l; J+ W# H; l' f7 a
  139.   TCHAR  szFull[MAX_PATH];
    4 t2 q0 c3 z, n& ^& z4 S" Q
  140.   TCHAR *token,*inter;
    % `, s7 V) j6 C  x! v% b
  141.   *szPath=0;
    4 h- @1 \8 U7 L6 b2 x% [
  142.   strcpy(szFull,szFullPath);: k7 _% L) a7 _$ W
  143.   token=strtok(szFull,"\\/");
    , Y) T8 d( i% \& Z% i
  144.   inter=token;
    ! L6 g) M) A+ q6 }( T; ^
  145.   while(token=strtok(NULL,"\\/"))% k7 ]$ M5 V$ L2 t3 {7 @5 @; j
  146.   {4 G. x2 X2 ?; G
  147.     strcat(szPath,inter);3 n2 }5 C5 B- x7 P
  148.     strcat(szPath,"\");
    " ]9 X  M' U+ o1 e* y
  149.     inter=token;
    3 F  I# m9 ~  a. N7 d
  150.   }9 E$ k& D3 v6 F+ T; u- Q" E+ W* {
  151.   return strlen(szPath);# J: S* V# X3 M8 O5 O. b1 g6 v
  152. }. {% W4 N, o+ h+ y
  153. ) t8 `) F. @) t) D9 p8 W
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)# u0 V8 i5 a$ t- i
  155. {8 z  O8 s6 H$ Y& ^' c+ Q( U; G
  156.   DWORD attrib=GetFileAttributes(Target);
    * k/ C8 `2 V" W
  157.   if(attrib!=-1)4 j8 i* k9 `  y
  158.   {' I4 H2 Q, Z; g, J8 Y# f
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))7 ^. }7 u& R8 \2 R# j
  160.     {
    ; R7 G+ f6 m; C) n, i7 I" x" `
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);% U9 j& v& x. T/ n% S, n
  162.       SetFileAttributes(Target,attrib);9 [% V4 W( y- s% |4 `% A( c
  163.     }
    0 h2 _% }' S4 S/ s& {% u, U, s
  164.   }
    , y$ g% s' I. R
  165.   CopyFile(Source,Target,Erase);
    ; ]4 \  c6 q$ g$ r7 V) Q2 W
  166. }
    # P" m, w: H8 q
  167. + |3 J# `5 p: q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)3 Q; r: O0 |' u" D
  169. {. m* z& G  b: k& M/ y
  170.      FILE *fp;
    8 _; J& c+ w, t
  171.      char  szBuffer[8192];
    . L& D3 `+ C: C7 S+ n. }
  172.   va_list  argptr;2 `7 x3 |4 F, A) x4 W% g- b

  173.   c* Y/ p; }5 a7 J" p2 X, J
  174.         va_start(argptr,message);6 m' x$ x/ E6 r# V2 _; n/ l
  175.         vsprintf(szBuffer,message,argptr);2 R$ |0 m! W& x+ `" {
  176.         va_end(argptr);4 {/ a6 Y( G6 I8 |
  177.   fp=fopen(FileName,"a");  y2 J* u" @* f! Z; S
  178.   if(fp)
    ( ^+ x+ C( ^% X9 }
  179.   {2 |. h3 g+ k  o6 V2 k$ J8 I4 \
  180.     fprintf(fp,szBuffer);
    & m3 Y& P7 N; Q
  181.     fclose(fp);
    ( ?7 x% Z2 ]8 [+ |
  182.           _flushall();
    ! c) k5 R* D/ d! q% Q
  183.   }
    1 [- H# N! V3 l6 I5 m
  184. }- t5 k% r& X8 e

  185. " q' J, Z" C$ @  s
  186. BOOL CRevAppApp::Fclearf(char *FileName)) C9 H" ]  n% t: l7 p0 _: U
  187. {
    , B; z3 L* [' U7 ?+ Z! U
  188.      FILE *fp;4 y2 ?( U9 u/ ~+ q5 X6 ^( _
  189.     DWORD  attrib;4 A% [: U4 U$ ^$ [! b
  190.   attrib=GetFileAttributes(FileName);' u4 d% r$ C4 H/ h0 l
  191.   if(attrib!=-1)
    : Y3 W" Q' E) M0 g5 q: V
  192.   {! x9 _. V7 n3 c& d
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    : C. A# o1 R( }6 Q2 R. _7 ?
  194.     if(!SetFileAttributes(FileName,attrib))
    ) X1 a3 r- {, b; ^2 C. W2 E
  195.     {
    * s- E+ `$ a5 Y3 |
  196.       return FALSE;6 c! t6 E' w) F
  197.     }) t' |" [" ^, L( o" y+ D
  198.   }8 V% ^" ]& V) V+ @2 \& R0 d
  199.   fp=fopen(FileName,"wb");- l8 v8 o& }, \9 |& q& j8 c
  200.   if(fp)
    3 O: ?/ p+ w0 i
  201.   {
    $ S5 l% s% g8 Y2 H; ]0 o
  202.     fclose(fp);0 ~) ?2 [5 l( \: b  Q
  203.   }; C0 [# [& d# [( Z) c" @8 o' S
  204.   return TRUE;7 D9 k: f/ d  x; z3 y' V7 F
  205. }6 M& B4 W! i$ l- ?+ g: Y' I

  206. * E, Y& N: v7 Y) V
  207. BOOL CRevAppApp::UpdateLocalVersion(void)8 O3 k' E7 b: H* H! U6 u- Z" w
  208. {, p$ C6 R- ~/ _3 P+ L* W
  209.   char filename[MAX_PATH];: j3 d8 ~$ p2 |- l* L$ K: l4 N. {
  210.   LPUPDATEFILE file,olds;
    ; N3 N% p/ y/ H7 N
  211.   std::map<int,CString>::iterator i;& d0 k- Y/ T& e, Q
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    + A( O( @$ o9 o9 V4 v% `. C  v
  213.   std::list<CString>::iterator l;
    ( [/ m& v1 U% h5 w) n3 N
  214. 8 r! |  M# K1 I
  215.   if(bFirstUpdate)! W& w. k% I4 \3 h$ W& _
  216.   {
    ) j. A: ~, E6 U
  217.     dwCurrFile=0;$ w  C! z' ~2 C6 @2 W1 I3 n
  218.     bFirstUpdate=FALSE;0 A9 C+ Y) ]0 x. h1 s/ e
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; ^7 l4 i% s3 }1 Z. Q) G" J
  220.     {
    % j7 f: t, T/ M: }# W
  221.       dwTotalFiles=UpdateLocal.size();
    3 _3 q  g& a7 N
  222.       dwDownLoaded=0;
    % L" E* k8 D, ?8 z; `6 c
  223.       bSilentStep=FALSE;, J2 ~; K/ A5 Q; v1 Z
  224.       bCompressed=TRUE;4 A' q* X8 S; k2 N1 _
  225.       strExtLocal.Empty();6 D: d1 E: I' s3 v9 O8 @' d. G' J
  226.       strFullName=(*i).second;1 U3 t; e  {6 Q2 H7 G1 u
  227.       dwProgramState=AP_CONNECT;
    , v+ `3 ?  ]0 P, Y
  228.       return TRUE;
    5 o9 O3 h3 x; F8 t  U* N- B
  229.     }
    - V6 z. `3 G' b
  230.   }" }# T! ]8 c& q6 L7 j/ x
  231.   else if(bRestartUpdater==FALSE)% N4 h- ?0 E4 H5 j5 R+ H, p- S( Z
  232.   {7 I4 A8 h( z# k" p3 p  {
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())* p! q# b( P. I3 z) p) @9 h
  234.     {+ `0 y( x3 r+ C6 O$ a. Y: h6 f
  235.       file=(*p).second;
    / ]! o! Q  b. D( ?
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())  I7 ^. `- x8 s# G
  237.       {; T  y5 `" A* c' Y' r5 ~
  238.         olds=(*p).second;
    8 ]' H, w0 h8 |1 i
  239.         olds->vers=file->vers;$ U9 F& m  d" C6 l) V* H( X& \
  240.       }
    ; P8 C6 h$ U/ F8 l/ j3 w, z
  241.       else
    ! B! i  l% P: g6 p5 f$ f* P7 I/ p/ R
  242.       {: z% Q" L2 M6 R, Y1 e. w" A
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - P* [1 j# R$ F4 Z, f# f
  244.         memcpy(olds,file,sizeof(UPDATEFILE));9 |6 ]1 `) v( a3 e
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
      L1 Y# \' o! k$ Y
  246.       }$ ~0 z  P! R# H5 y; h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");' T8 x& V9 F% H7 ?$ `* |1 ^
  248.       sprintf(filename,"(%s)",file->file);- y- [0 @$ l# W/ ]8 ]$ N4 M
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, u3 a5 J7 z( E" c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 X# Y) w& N4 I3 _* U  R' H
  251.     }
    ' }/ S/ |6 t( W
  252.     dwCurrFile++;
    # S; z  v- r5 L8 ~% J
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " U9 R5 y7 Q+ |1 ~) @
  254.     {7 [/ t$ Z) L# @' U: v# |9 M
  255.       bSilentStep=FALSE;
    6 r+ N8 [' F" q3 k/ h8 Z
  256.       bCompressed=TRUE;: a" m: C3 J2 a7 \$ V% r; K
  257.       strExtLocal.Empty();/ S( U: ]2 D$ c/ d: V
  258.       strFullName=(*i).second;9 x" j- }8 R) V& z9 {+ g1 B+ S8 _
  259.       dwProgramState=AP_CONNECT;
    $ a+ s& [. E! J3 l6 k3 Y
  260.       return TRUE;
    & @! y- G, X$ i$ e
  261.     }
    ) _6 z# t* P2 }  B. {
  262.     if(!bRestartUpdater)4 E& U2 P$ t- I3 I9 Q( n2 g5 c
  263.     {5 O8 I9 x" f) E
  264.       int iCurrSize,iFileSize;
    # _1 d* X1 a& b* M* ?
  265.       iCurrSize=0;
    ' j1 V# Y9 l1 |1 N
  266.       iFileSize=UpdateList2.size();
    ( G  e) k6 j0 T& {2 [9 x5 b
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");+ O! e' M1 h* A/ n; E3 J0 ?. ^( |
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");4 J6 F0 o% F0 i/ i
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    7 {: O$ o. r  K3 z1 w
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; C4 F1 D; m4 ~  }3 D, j0 `
  271.       Fclearf(".\\update.dat");
    8 G1 k4 o1 s: ]0 M. [0 v" }: t* I, M
  272.       Fprintf(".\\update.dat","Bloodyf\n");) p% q- F, j6 z% i
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)" e2 W, w: P, Y" W
  274.       {
    9 o; V2 j: Q3 F1 W  G) J; b
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ' I# R! [( [( {6 ^: m
  276.         {
    . x# F7 \9 M: O! e; k- w
  277.           file=(*p).second;+ p! Z; ^- x' O& [) F7 d, w+ c4 p
  278.           sprintf(filename,"(%s)",file->file);, d3 E8 C. _" K; F
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 o' V. U" d1 T  Y0 i
  280.           iCurrSize++;
    , ~! z3 h( z0 D( E1 h" U( U$ r
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ c/ R7 Z9 T: N+ z/ _
  282.         }
      u1 r8 a+ H! p2 E1 N! {( {9 U
  283.       }0 u+ ~, ]9 ~7 m- M% C
  284.       unlink(".\\update.txt");8 a" s! l$ |/ b* c+ e& k5 ^
  285.       unlink(".\\update.tmp");& m6 Z7 f3 |2 Q8 c8 F! P5 y/ E
  286.       Fclearf(".\\checkversion.dat");
    3 L$ d/ s( |2 f" `
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    4 I0 m9 ?. g3 ^" g: e- A9 ]; {! {7 g
  288.       if(UpdateLocal.size())+ e# Q8 P# S+ ^  D+ a. p+ S
  289.       {5 e' x& M" O0 P% a* N2 A" j
  290.         UpdateLocal.clear();0 Z8 K- t8 Y& }- u, M
  291.       }
    & ~: p* x% o* G0 q! f
  292.       if(UpdateFile3.size())
    1 _5 F* B  t3 S5 J2 H
  293.       {/ L! P1 v7 @2 Q  n8 o
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)3 d- M9 Q' w0 _* \3 M
  295.         {
    3 E; _- Y- S+ e' |' {4 U# ]
  296.           file=(*p).second;
    8 m: W% D) s, Q1 i& ~
  297.           free(file);+ _3 d4 e0 d# t$ t2 H
  298.         }
    - E% Z' ~6 r8 l0 B; k- }9 g
  299.         UpdateFile3.clear();4 [/ ], s& i! a! J# t
  300.         UpdateList3.clear();3 e4 ~3 N/ I& i7 C8 O- @( d# y
  301.       }, I. w/ l' K  ?. K
  302.       if(UpdateFile2.size())
    7 z/ J* t; p( a7 K
  303.       {  s8 b' s; V3 X% z$ r& ~' m4 f
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ; k, v1 t4 e- z4 H: N
  305.         {3 T4 c+ }% `6 B; g
  306.           file=(*p).second;$ k% T' o  v# E
  307.           free(file);7 U& Q7 h: G3 H5 K5 a
  308.         }
    9 e" A5 d  T+ |/ P9 l
  309.         UpdateFile2.clear();/ ]- G5 x9 L8 I, f2 k+ _2 S! H
  310.         UpdateList2.clear();* S5 D6 z; w: F5 _
  311.       }
    $ |% }4 e+ D- q1 I, `: j. K/ m: I) ]
  312.       if(UpdateFile1.size())3 g- A) I4 S4 d9 O4 K' Y; x0 w& C
  313.       {
    & R1 p# @& z& F2 k& H, `
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)  |; x& V1 y; m& D* p0 A
  315.         {
    7 y% _# W, n6 u7 ?
  316.           file=(*p).second;
    ( Y2 H/ c2 e. M! v6 f( i* g
  317.           free(file);
    8 J; J5 O$ J/ l" x" X! I; q: ~- T$ a
  318.         }3 G4 w; Q% _9 o
  319.         UpdateFile1.clear();; b9 p; q. k! W) x& Z
  320.         UpdateList1.clear();
    ) a2 {7 Q% b7 o/ A
  321.       }1 ?/ G9 f+ i1 x( l; E, N
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));" B% @) e3 q/ I% `0 z( G5 O
  323.     }
    4 F2 Y7 x' ]; a% t
  324.   }
    $ }0 Y7 k: \- \1 e% s6 C4 {
  325.   return FALSE;
    1 D! n0 \# l. D4 P& y  r
  326. }
    4 x7 {; e. P5 b0 B. ~+ R
  327. 6 u% ?- J; k6 d8 l* _
  328. void CRevAppApp::ClearAll(void): Y# H& {: {9 q$ s
  329. {( g' C1 d. M' y+ p
  330.   LPUPDATEFILE file;
    + u, E" w" I% Y) i2 ]7 k
  331.   std::map<CString,LPUPDATEFILE>::iterator p;/ X8 k# I" E6 y9 I, w

  332. 4 D  i3 Z( J: }# |' L" v+ |! V
  333.   if(UpdateLocal.size())) H" D3 T! C# l$ F/ o
  334.   {
    & @) `" r! e9 Y& ~& w+ n% Z
  335.     UpdateLocal.clear();9 ~4 \6 ]# Y# [
  336.   }5 m7 O3 ?* K9 S2 j9 Q# h( G$ \7 f
  337.   if(UpdateFile3.size())
    ; i6 t( u1 K# \5 R( h  p
  338.   {
    # q8 |  t* r% j# w/ z$ H4 Z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 V8 F: I3 r5 ^
  340.     {
    ( ]* @1 B0 r% E: v/ P4 d3 y1 k' i
  341.       file=(*p).second;* p  v; V4 b, E( _* r
  342.       free(file);; c* l/ a# b5 B* d# w" s
  343.     }) W6 x* J' w4 w
  344.     UpdateFile3.clear();
    3 C& w5 f, J8 w0 Q
  345.     UpdateList3.clear();
    . Q. m- p( a/ q5 m- H# S6 f6 }- r
  346.   }
    * k* _  z7 y0 D( n" q8 m7 l9 X- h
  347.   if(UpdateFile2.size())/ ~! J8 x) b3 |& u
  348.   {
    0 c5 e- P3 I4 [) N
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! {6 t: s' H5 G8 b5 o3 d8 b
  350.     {8 j! g' a: S4 B1 Z  j
  351.       file=(*p).second;
    0 e. S+ m0 x: H/ u
  352.       free(file);9 s$ V; z' j. Q
  353.     }# L9 r% h$ x4 k1 a& J9 }6 x" z9 ^
  354.     UpdateFile2.clear();
    ! k- b0 G" L" N7 h
  355.     UpdateList2.clear();
    0 i; p/ y( w1 B: s4 Q7 ^. `
  356.   }
    * Z% A- O( j- R! ]6 m% {
  357.   if(UpdateFile1.size())
    8 v9 U/ Z* `+ |9 I( N5 H# p9 k, {
  358.   {/ V1 t2 U, y$ v0 c) b. J
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    * h4 I' X  d2 k9 ^! x( a( l9 V) G1 `
  360.     {2 x8 P0 M/ O" L2 [
  361.       file=(*p).second;
    7 l3 I7 G/ g1 n$ J% _* L
  362.       free(file);2 Z% A' r( x4 ?+ _1 [$ P: I: ]
  363.     }# P4 {) N0 ]4 ?# N( Q% K0 A" {
  364.     UpdateFile1.clear();
    ) P5 N/ U/ D; h
  365.     UpdateList1.clear();
    ( ^" A6 q1 V7 G, |2 \, @" f
  366.   }$ y* y# c8 g1 P
  367. }  
    ; T7 S8 b! l( I& s* C5 N
  368.   
    # Z5 c3 [% \) U: u9 `5 ?
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    8 h7 i0 o2 d) M2 E
  370. {1 K  t4 m+ _. s4 `- [4 U( H5 {
  371.   int c;
      u0 X0 K; S% L6 w2 A
  372.   LPUPDATEFILE file1,file2;+ u9 o: [& R. N- X
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + x7 g$ F* w! J$ |
  374.   std::list<CString>::iterator l;, Z" ^$ j. B' F

  375. 8 S4 ~, I7 {. {! P* g/ U9 u
  376.   UpdateLocal.clear();1 A! U4 l2 i$ W( E0 A8 f# v
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ) ~8 w1 D! b) f' R6 f8 j
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ' u2 a: g/ i) n4 @& y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);( X* J$ P" V# H" g0 \
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);+ |7 G6 f! P( }8 f5 }1 D1 H
  381.   if(UpdateFile3.size())0 ]0 c3 f: s; ~- j1 A
  382.   {
    + e3 K. h7 h$ v1 l
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)" M" B3 V; j2 E5 l* K
  384.     {; C9 g" i1 J- T% u
  385.       file2=(LPUPDATEFILE)(*i).second;+ S  P/ l# k: D
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! ?, @& B) u8 j0 S" v. D" Q3 F0 m
  387.       {
    3 A1 g, a& L8 y+ L
  388.         file1=(LPUPDATEFILE)(*p).second;
    9 O" A1 |$ H- K
  389.         file1->vers=file2->vers;" o" Z' S5 N( T% i7 d
  390.       }
    $ J* V+ S9 h$ n  X
  391.       else. C* _( r" ^& k: _0 ~, |
  392.       {
    ) Z9 d' i  G5 x
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 F) L  d# i" l1 w' C9 [- H, {
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ( M9 M0 B! s( j7 Q  q5 f
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ) O8 m+ ]: N& J2 n6 u/ ?
  396.       }
    9 i3 _# [6 c7 M2 x% N. s
  397.     }
    ; M) I6 h( |3 F3 v- Z4 D/ q
  398.   }
    1 Y5 Z* g6 Z+ b8 M
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)* o, y" R* R6 \1 D' ~
  400.   {# R$ p. \5 d7 a) N1 s$ A) W  z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())5 C0 E/ D! z  y1 h, V8 n* T7 |
  402.     {
    . F$ H+ T' q, @! B2 N/ p
  403.       file2=(LPUPDATEFILE)(*i).second;
    1 Q& N% y3 S8 T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + ]9 c! _1 r+ i' e
  405.       {
    ( H, T% n. m% j6 C) c0 U4 B$ e& d
  406.         file1=(LPUPDATEFILE)(*p).second;
    % J7 S0 U( u' l6 }/ |3 v
  407.         if(file1->vers!=file2->vers)& `- T& R8 E; W! p' E/ G
  408.         {' n6 s* b* y: L
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) @. T% n/ t8 Y* }4 W. c
  410.           c++;7 J+ V) H5 O# c  W# R8 C4 n; s
  411.         }/ {6 k+ H1 g$ F. [' w' q
  412.       }
    . N2 h' _( I; Y9 {1 R
  413.       else0 }( d4 Z' `* B4 X# x6 d. c
  414.       {
    ) ?# J6 O" s4 z( c* _. w* e, y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . p* z% E1 m( s3 H( v# K( L8 Y* J
  416.         c++;
    - Z9 C9 k1 m8 U; W! }
  417.       }
    . |, c7 {( W  \4 _  Y, G5 R
  418.     }& H3 [- f7 y+ p0 c1 R/ t' F
  419.   }  h+ q; i5 G# T2 R/ _! U* X( y# u9 }6 |- _
  420.   unlink(".\\DownLoad\\update.txt");  o2 S6 \4 S3 z( }+ t$ ^' |$ E" h
  421.   if(UpdateLocal.size()) return TRUE;2 T) U$ V2 Q9 v0 `  y+ N: c$ ]
  422.   else                   return FALSE;9 L8 F6 A) E6 o. W
  423. }
    ! U+ X7 d$ j- Q/ P
  424. # D7 ^0 n* D) w( Y( s3 v8 |
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/": R3 S7 S$ w( Y0 I5 B  A5 P
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
      \  |5 N1 R5 z, _( e. `! e. c( R
  427. # X- u* w0 @% j9 r: y

  428.   O/ x( Q4 M5 Y* f3 t3 F6 o3 U

  429. * o' n- [/ ]1 @1 V) s0 B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" o  `6 y% X& e. O2 C
  431. {! e: N  \3 A0 Z  }+ H5 A
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 d$ t1 d; c! i) v8 |$ a+ M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 x  X* }* J/ W  a; x3 j- C, p" K0 K
  434.   {# [4 H! K! V% I
  435.     char szLanguage[50];
    * _0 y% F4 |  `
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 h3 ^( X" y6 {  x6 Q2 m  f' }, h
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # ~3 C6 D4 D+ |# @& P3 B+ A  `: X$ K, ~
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. ~/ ^- R$ Y+ ^+ p3 p: N
  439.     else                                   m_iLanguage=ENGLISH;
    1 H9 ?8 H$ B: v  m; T! H+ p) \
  440.     char szRegister[100];3 v. ^4 {2 R( }5 l# U- O# V
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ T8 ]: D! Y* ]" S
  442.     strRegsName=szRegister;3 E. E3 Y, B6 w0 b; [: S% w1 l
  443.     char szPatchURL[100];
    8 ~7 Q: a( W% t( R4 ]* Y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / E; c: \$ W- v. C7 M4 a
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 Q! ~  w4 K: {3 {) u2 t* @5 I
  446.   }& I0 h( E$ l0 J9 X4 c- A) ]
  447.   else
    ; f3 ~! N7 F, N
  448.   {
      q; e! s5 \; U; _/ b" `
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : n. V  J& V" W
  450.     strRegsName=DEFAULT_REG_URL;# \* V$ n: y8 |/ x* h( r% U
  451.   }3 u( K% M' Y7 t
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    9 e6 d. n3 E! a8 b3 |5 W
  453.   {
    + {9 ^$ x7 [- @" y
  454.     char szIP[50];
    % P# }! e4 m" q6 W' M" ?! _
  455.     char szDIR[300];4 u- a. Y% F6 C! d+ b3 [  \
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))8 L+ X8 L# z* b7 m  z; b. X
  457.     {' h7 t0 `2 c2 V' n' B
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");/ n. o/ @. d* o  ^
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");0 r0 x. [1 K" B' G, h/ a
  460.       strHostName=szIP;
    : A& y0 @/ P/ M
  461.       strHostPath.Format("/%s",szDIR);
    & g  }, d$ \  H+ E+ F, `; D- w0 E8 O
  462.     }2 g+ M& d$ k( C
  463.     else
    ! d" D% g& Q- @% ?; U
  464.     {
    # y9 Y% ?1 W. [+ |6 y
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), U1 S! V/ b! O3 M
  466.       {! F1 r1 o5 e' \" ]  ^# y4 B
  467.         char szLanguage[50];% n( j: c; J8 ?. h( `* V
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " t: d* c6 ^+ T2 C8 r! E( ^5 {
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ( ]/ ]3 T7 Q5 J" O9 X! s) @
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! C$ m( j) w5 F/ C: _
  471.         else                                   m_iLanguage=ENGLISH;4 [/ @! R1 v. v3 a& y4 E# L/ e1 s
  472.         char szRegister[100];: ?/ J* V* E4 x1 v! I
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: |2 @! B( C7 [9 m& K. \
  474.         strRegsName=szRegister;; T) X7 I! }, d* `/ j
  475.         char szPatchURL[100];
    / y! O' Q  O; |8 i3 n8 O
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 W2 N1 j& Q3 v  @- y$ g
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - K0 ~0 m# z* M1 q! y& ?( f1 X
  478.       }
    3 p3 ?; x' B& w/ D; u# b4 J
  479.       else
    # Z+ |/ R8 H/ b& p9 J
  480.       {; f+ _3 e6 B$ p/ Z# P" W# f
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ s0 s# u8 n0 m; ~. r
  482.         strRegsName=DEFAULT_REG_URL;
    + T8 d* E7 C0 ~* }1 H+ R
  483.       }
    - U8 m, g; Q8 D7 q5 I+ {9 z
  484.     }
    + D8 J; G+ e' V9 S) [
  485.   }1 W9 J1 v+ U9 Q8 @. Q1 r8 \
  486.   return true;" k2 R3 @* U+ t/ _$ }
  487. }
    ! z$ e! f1 J$ {% \9 J

  488. 7 e$ G5 M6 H7 L% X- s" o3 R
  489. #include ".\ZLib\unzip.h"
    5 H& L# O- B' B' V; k. o
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);$ p- I3 Z  Z6 h0 c9 \: B
  491. /////////////////////////////////////////////////////////////////////////////
    0 s4 M' M/ J' G
  492. // CRevAppApp initialization) K. N0 ^% ?4 D/ k0 c
  493. ! U5 z4 s$ z! a; g
  494. BOOL CRevAppApp::InitInstance()
    1 R. C5 X) w$ u; d$ @, [* o
  495. {
    0 Y# z% i; W! q# V
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    1 l1 p8 N" t. C4 q3 A) D9 [
  497. 2 E/ Y! e6 z1 ]- q' h
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);% y7 ?% d2 o: M" @3 W
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))+ S5 M! P' \3 U+ K) S
  500.   {! ?, R2 y/ h9 H: R$ `
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 @7 M' i- P8 m) M
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    * F. h  w8 v% L% `; S' {! ?
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    % K3 c- K0 U% h! D+ ^5 ]
  504.     {3 B5 F! ?* R" @4 s8 N  n
  505.       strcpy(szPath,szPathTarget);* S3 q. v4 e- k  [' R& q
  506.       SetCurrentDirectory(szPath);
    3 H' [8 F) |5 R2 i1 l
  507.     }
    & S7 E" m0 [7 T
  508.   }  |! n. E0 ]$ `, S- U& E
  509. #ifdef _DEBUG: d4 \- ^9 F! C6 C2 H
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 L* P% c  J. Z, D" B/ J1 r
  511. #else1 u8 U( `. Q5 X* L* K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' n- n5 K$ B6 a0 u
  513. #endif
    * O( P8 f! q& s
  514.   {
    : ]" F" Y. v& u. b) Q8 F
  515.     char tempFileName[MAX_PATH];* y( C& k% M  |0 n9 D- S3 H
  516.     strcpy(tempFileName,szPathSource);
    : A% d: ~& M  d1 K1 X; G2 _* ?$ h
  517.     tempFileName[strlen(szPathSource)-12]=0;) |) A6 K( @0 r1 t; c
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( E. p; o" \) u  x. K
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    " B. W! }3 J5 N# G/ R7 Q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);" j+ U. y% S$ j
  521.     return TRUE;
    5 ]* U0 s1 H# b' \2 F$ ?" S
  522.   }
    : F! n3 H) H. L% P3 O
  523.   // Nuke 0118: Delete run.exe/ E6 r# ^  L4 L3 Y8 j
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    / v4 H. U/ Y1 T& t7 Q( J+ N6 N* g
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    1 q/ a8 J( `. u' }7 F" p! T3 r
  526.   if(!ReadCfgFile("Config.ini"))8 K4 ~: J+ B  w! s4 _
  527.   {
    8 ^8 y4 p! l. g' E& X0 K
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);9 y/ `# G5 Z. m0 |+ y
  529.     return TRUE;7 L* N  X% V9 y; M
  530.   }# j. I/ b7 V4 N! s4 I* J& g
  531.   HANDLE mutex;3 o- n& O- X' ?+ D* M6 L4 w
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    $ A% u6 h4 \3 @# G9 [3 w
  533.   {
    + l1 Q6 X7 _" R, D* \
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)& n2 [# X7 ]) c* r1 P  a
  535.     {
    $ r8 V) B) Y3 R/ P* U
  536.       CloseHandle(mutex);
    * f4 `( O2 M; r( o
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    0 @5 ^) b, u  [# L3 t. R
  538.       return TRUE;+ f% s8 e$ h% I" y8 Q# R/ U$ R
  539.     }! G# f# a$ l8 X. ]
  540.   }  
    3 @& d! ?* b* @7 _
  541.   CloseHandle(mutex);, ?) G2 E  ]2 I+ k+ Z

  542. - a/ V* k# }4 W; z& ^+ f
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);. k* g$ I/ U. {$ `2 j" o
  544. . G+ T. @" p# b9 s5 O; p
  545.         AfxEnableControlContainer();4 z9 K" `, }+ n4 m. ^8 Q- L

  546. # I: t( J7 F( }+ H( O9 X
  547.   bCanUpdate=FALSE;0 ~& L2 B2 x6 G! `) V( U' B
  548.   dwStartUpSteps=1;1 D+ e& @: W. l
  549.   dwProgramState=AP_NOTHING;
    3 v1 F2 H/ e- \2 ^

  550. # t4 r( w7 ?* O/ x4 z5 g
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);4 U' q# s5 U4 V  d
  552. 3 V3 u. S4 D$ D2 U% I
  553.         // Standard initialization9 c7 g. ^+ Z' H- B3 `- X
  554.         // If you are not using these features and wish to reduce the size; P0 m" }' b0 h  k3 U9 e% J
  555.         //  of your final executable, you should remove from the following
    6 U! e0 v6 a, l3 l- ?; X8 v; _
  556.         //  the specific initialization routines you do not need.
    ( K3 C; D; x( h3 ?  o  w

  557. 6 \  Q+ d$ f! D2 Y
  558. #ifdef _AFXDLL4 y% F1 ?% E) d# t
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    2 M6 I3 }+ P$ T1 d! g6 C, t
  560. #else0 b3 b$ H* f8 J
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically2 L( I# S2 N/ {9 d' x
  562. #endif7 B/ a9 w7 t( A
  563. & S/ ], u# H& L' A; I& K% N
  564.   dlg=new CRevAppDlg;- q6 W" W! A8 w% V/ B8 X, w
  565.   dlg->Create(IDD_REVAPP_DIALOG);3 Z. I" }0 @0 B3 X$ B
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    , y. K/ ~% Y4 G" O( |; n6 c! S
  567.   m_pMainWnd=dlg;2 F7 {1 r& c7 t

  568. 4 A. p, I9 B9 L. V8 a; G
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 g8 ?8 S9 ~, p. h
  570. 2 ^( D# ?0 V. K0 X
  571. //  GdiplusStartupInput gdiplusStartupInput;
    4 F" p* m" z6 ]& y7 b
  572. //  ULONG_PTR gdiplusToken;' `; w$ F* u3 Q  s4 F- k
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);. t4 n8 w- P- }9 c

  574. 9 E1 m9 v& Y8 Y  Z# A
  575. //        CRevAppDlg dlg;' ^+ Q) G! a4 w& Y1 R$ K2 M
  576. //        int nResponse = dlg.DoModal();+ P+ G4 k% P6 U6 V, G
  577. //        if (nResponse == IDOK)9 Y! d; K! N- Y2 k: l
  578. //        {& [- I5 p3 e( P- U; x0 a3 P: @8 k/ Q
  579. //                // TODO: Place code here to handle when the dialog is
    : `$ S* H9 N1 ]
  580. //                //  dismissed with OK
    ; A  T$ t/ b+ s; a+ s' `
  581. //        }5 {* \) b# j. W+ Y
  582. //        else if (nResponse == IDCANCEL)* o9 A! ~8 {" z; j
  583. //        {
    # w1 D* a# B+ y* o; q- B$ I7 u
  584. //                // TODO: Place code here to handle when the dialog is
    1 m9 O; o' I" Q3 Z0 ?- I1 s, z: n
  585. //                //  dismissed with Cancel
    # I4 e6 O1 K) G+ N7 q1 c& Q
  586. //        }
    , x; I% Q) P2 y' {; `3 `

  587. 7 n7 v  E: o; O
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . n5 A; B- B5 m# v8 g/ R9 B5 \0 M4 W
  589.         //  application, rather than start the application's message pump.
    . Q5 }5 C) e1 {8 p/ n) a5 h
  590.         return TRUE;: f6 _( g6 a. T9 r' t9 A
  591. }6 Z$ H- z& S' `! Q% l

  592. * r+ M) ?6 C1 q0 n6 m
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* t6 p) p( t% l9 j# t/ i# H
  594. {$ p* k. @) P6 J# J
  595.   int i;  R+ a5 b2 [3 Z
  596.   char *szRet;
    # s% h; L9 s( W* Z7 j  ?
  597. * M- k1 V& W; ~( p! h
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ) I& }& b, `; {4 M. H* Q7 r
  599.   if(sztoken)
    : L# E3 e3 U1 a2 e& {. O) f# U
  600.   {4 o% {% a# ^3 G+ J
  601.     szRet=&sztoken[itoken];0 S% D1 a5 f2 W! b! p6 u
  602.     while(sztoken[itoken])1 e" U7 m0 e( H6 ^3 [
  603.     {6 O, u1 k4 H, ~. X2 A
  604.       for(i=0;i<(int)strlen(token);i++)
    " g3 V8 T4 X& u1 r7 [
  605.       {6 r6 j6 C$ z1 E; q2 g, b* g) n
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    4 q9 `! z' O! k. L3 I, S
  607.         {3 t$ f% k$ A( B
  608.           sztoken[itoken++]=0;" u3 R2 e) d, O- H: \$ s
  609.           sztoken[itoken++]=0;2 A& a. l7 F$ R% b" I. j8 ^2 x
  610.           return szRet;8 e6 g1 ^. f: F. q* n
  611.         }
    ! U$ v7 n* J' e, g" j4 `/ X, h
  612.       }: @8 \" }& `0 K/ E
  613.       itoken++;
    ) n! O5 z5 y0 K) v- L% x+ ^4 F
  614.     }' k$ [! L: Z1 `7 H
  615.   }
    7 ~' _$ s$ \) n! U' d  o
  616.   return NULL;
    6 |3 i8 j+ `+ O3 b0 h: S
  617. }. f9 ]/ }* d) s
  618. ) q0 W- @4 |- V, I+ Y% D
  619. void ProcessProc(long Total,long Current)
    " Q8 F! I( K+ \" W8 c
  620. {# H& k: l7 e4 q2 V7 m' M# B
  621.         MSG msg;. w6 E5 @, S' f" n0 ?. M' x
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ! |, _" k) k$ w0 e
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    % Y4 j% \! E% K! o& W: w7 L% r
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    0 X2 e. ^+ G; o% y
  625.         {
    4 Q) r$ u  i- r( s. T/ Z9 E
  626.                 if(!GetMessage(&msg,NULL,0,0))
    + B" M% L4 D0 O" a" g4 [
  627.                 {+ K1 D( U$ ~( ^$ b% h! P
  628.                         return;" Y& }. N$ v+ v, {3 }
  629.                 }( T1 ~3 b3 i$ {& o. A, x9 G
  630.                 TranslateMessage(&msg);
    : L9 ?7 [4 J9 P2 {$ }
  631.                 DispatchMessage(&msg);' j9 U- I8 K+ Q* Z! `$ k
  632.         }        ; O8 W0 v. z+ s  y1 F7 G8 z: `
  633. }: x- c+ _! A+ i6 x

  634. 6 _0 U9 d& `: c. I
  635. BOOL bFirstChar=TRUE;
    % `4 m+ V. s2 e1 ~0 c5 }
  636. 4 u# e, N$ N$ i- h6 L: v; n* F% e# v4 R
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ( E6 c$ R# z& e4 F, ^
  638. {' \1 x$ k( I1 g1 l
  639.         // TODO: Add your specialized code here and/or call the base class
      V5 [2 O0 E" i3 N/ P' e
  640.   switch(dwProgramState)
    - N' o# K/ P& m+ s2 _
  641.   {
    # ]& ~! B  s: i; K+ \) I
  642.   case AP_NOTHING:  N  T. K* g, \) m
  643.     switch(dwStartUpSteps)
    7 \' }  C6 q4 F& [" o: S
  644.     {
    % I( i& C9 o! [8 B+ Z% z$ O
  645.     case 1:7 c" X  Z- R9 x+ x
  646.       {9 B/ Z6 a# c5 q3 j3 b( j
  647.         int i;
    $ m8 k+ z" Y/ Z  u6 @- ~! d+ e& o
  648.         CDC *pCDC=dlg->GetDC();
    - s4 ?0 l6 X2 `) l* n: {
  649.         HDC hdcwnd=pCDC->m_hDC;
    . p! t5 I6 Y# P; O, P
  650. //        Graphics graphics(hdcwnd);* O+ V' Q5 j8 P4 N& }  N) r* X
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    9 L! X, D. m/ d: K% B9 z, O
  652. //        INT iWidth=bitmap.GetWidth();" l* |0 q: _7 i2 }& F, q
  653. //        INT iHeight=bitmap.GetHeight();
    0 v1 w6 g2 ]* U! r. P. ~4 `$ w
  654. //        Color color,colorTemp;! ?/ z7 I* C& Y. F+ c. j1 C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)# P5 C+ L  E& d3 a! |; q
  656. //        {6 b# n; v4 x- }  C# Q- Q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    # V4 g% q+ {- G7 H) n0 j
  658. //          {6 h( E1 c( r8 F% B" [
  659. //            bitmap.GetPixel(iColumn,iRow,&color);# i$ z1 x$ @. g( l5 d$ {) \& ]
  660. //            colorTemp.SetValue(color.MakeARGB(
      V% [" e/ S3 v6 K1 i) l, l; Z4 t* k
  661. //              (BYTE)(255*iColumn/iWidth),* @' e( s0 Y, i5 h: D# R$ Y
  662. //              color.GetRed(),* }7 U7 f) Z" N# {
  663. //              color.GetGreen(),
    ! [& P8 I9 }& X9 S+ G
  664. //              color.GetBlue()));, U, X5 e# x+ V; D
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    1 o0 V+ U) G- s) X6 I! J& M7 b
  666. //          }* z4 y0 k7 P6 s' p' j' C& c. ]
  667. //        }
    ' H  o  H. }3 H& @! K. [8 H6 B' ?
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    , `# T0 P1 q# m8 T* j
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; u0 i* J/ L6 ~8 J7 g" D$ w$ r
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");8 A* b& C& x4 O9 j" s
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 v4 l7 E. h9 z5 Z/ @5 e& z1 y
  672.         for(i=0;i<240;i+=8)
    # H2 @' T9 P" {) b
  673.         {& r" o# w3 v! X% d: ?
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    + [; p5 a  K' S6 K
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , b, y' M! ~1 t. @% R0 F
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ n$ B7 w3 p+ X. }; ~5 P
  677.           Sleep(33);
    $ L/ j" V  l* |% h" M" G6 o: Y
  678.         }+ p. L- E- I, {6 N" l1 [, P
  679.         Sleep(1000);
    ; W) l, k% C! @9 L+ o9 L# V; U
  680.         for(i=240;i>0;i-=8)9 z3 S7 ?8 h# o
  681.         {
    . z5 n* y1 p, s
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / h) t, [% K# h8 u
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * J, K; z6 Y5 s
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);8 C: V& x1 ~. o/ P' [
  685.           Sleep(33);6 E" q* S' m, w: \: z2 d; U
  686.         }
    4 }) V1 g* F. t  S  V4 u
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    * G4 ~% u) i! w/ F6 G  c5 F
  688.         dlg->ReleaseDC(pCDC);
    0 a, z  I9 N: |
  689.         DeleteDC(hdctar);9 ^+ [4 e9 |2 k$ r
  690.         DeleteDC(hdcsrc);0 g; g9 }. L, c5 O5 v% |1 z
  691.         DeleteDC(hdcorg);
    * n3 n( C3 h, m4 y  r
  692.       }# o! q  ]% k1 v
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    9 W- a: L& P  u( D' A8 J7 u
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    3 }6 `% I) i1 A+ n4 F# X( p
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    / [+ |+ a4 V/ Q6 Z/ S
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    0 T' v, D* }, R* P
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 n# N% c4 ?: o- t
  698.       if(!Dn.Connected())( L& G' ?! ?2 @1 V( d8 c  P
  699.       {6 A, _; w, @$ |: n. A/ |1 O! |
  700.         dwTotalFiles=1;
    * H) `/ Y+ T2 B6 K, n& w
  701.         dwDownLoaded=0;0 w2 _7 \9 l  S5 a% D
  702.         bSilentStep=TRUE;
    # }- V9 v% U, h
  703.         bCompressed=FALSE;
    0 i' _' @5 b& Y& v' |9 i$ ^+ O: ]
  704.         strExtLocal.Empty();, Z" P0 x2 Z' }7 D
  705.         strFullName="readme.txt";
    0 a4 ^- a+ N# e1 d; V. O
  706.         dwProgramState=AP_CONNECT;6 F# m$ h8 g! e( D
  707.       }
    5 H4 a8 F. n) h3 ~6 Z' p9 y( B+ S3 l
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    % g4 ]! |. a3 B
  709.       dwStartUpSteps=2;
    9 u# l7 `) t, H9 X/ {
  710.       break;! Q7 q+ S) o  b% J6 h; V
  711.     case 2:
    & z& y& U- h# _2 P& W: z
  712.       {' o; g! ]0 M1 H1 z8 l; b: {
  713.         int iEOF;* U. q$ `3 o! @" c4 |
  714.         FILE *fp;
    $ e2 |6 N' E/ C+ T# n" E/ y( t; m
  715.         char szString[512];
    9 f$ u" g- u/ a* s/ e& T
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    5 t% l* |) n7 r
  717.         if(fp)
    ! L* m" Q8 U" w
  718.         {
    . w. G9 f; Q4 J% G7 u6 {" [
  719.           do
    $ [2 S. _1 c; M! f
  720.           {
    5 M; Z: x3 b6 h  V$ ~& B
  721.             iEOF=fscanf(fp,"%s",szString);
    , G5 i) |8 R& e$ ]6 f4 X8 @
  722.             if(strlen(szString))
    ( x3 ]5 y6 Y; J) m
  723.             {! E8 m" \( U; k) c+ o) M+ X# M
  724.               if(bFirstChar)
    8 s) M1 g  Z. ?- j! u' F# `. J
  725.               {
    0 q' E3 P0 P7 H  b3 K4 v
  726.                 bFirstChar=FALSE;
    6 b$ o) J0 W3 p5 J$ Q1 G
  727.                 bConnectIsBig5=FALSE;) q) Z9 j2 G0 c' f4 y: ^5 \- M
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;/ }% Q/ O5 s3 M9 n3 Z* x$ b* H
  729.               }0 w' u$ x$ j3 F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
      d) T: T. q. Z! r# S2 ^% P& Q1 `
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));  `4 u' G, z$ K
  732.               dlg->m_ListText.AddString(szString);: q4 u& `1 L+ u+ P. Z# N# l
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" z4 D# r/ |3 J* _0 ^4 ]( L
  734.               *szString=0;9 G- x" v+ s( }" K3 J
  735.             }0 [% ]' {2 V/ R/ V+ Z  c
  736.           } while(iEOF!=EOF);
    - U6 w" H4 y% E; R) t& }
  737.           fclose(fp);
    1 ^" N8 ~- {/ E) P7 d7 _3 Z
  738.           unlink(".\\DownLoad\\readme.txt");1 U5 {; K4 q6 F8 Q' y$ D5 u
  739.           dwStartUpSteps=3;
    # e* ]  G6 }* L  s& R
  740.         }+ A4 z: l* S, E) C
  741.       }) z! q2 R$ V8 u9 n, U
  742.       break;) k3 E. U! s. i% n9 I3 t8 {
  743.     case 3:
    * A/ q4 Z& {7 G3 V/ G# i2 b( n8 [1 k
  744.       if(!Dn.Connected())0 T4 n3 _8 o9 U" t
  745.       {+ e" T& }; D7 I. ?2 U1 J8 M  F
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);) u# Q& U9 P. C- s) ?/ ~
  747.         dwTotalFiles=1;
    % {( r6 \1 K& j
  748.         dwDownLoaded=0;- a4 T; X) z* C% F) \! C1 L5 @
  749.         bSilentStep=TRUE;
    7 C. B* Z4 q$ U* c4 O8 K
  750.         bCompressed=FALSE;- U% Y. N& [; r* q- @7 ^
  751.         strExtLocal.Empty();3 }1 l" x4 g) O3 n
  752.         strFullName="checkversion.txt";. ~, P2 i+ v0 I5 d* H
  753.         dwProgramState=AP_CONNECT;
    " t( g, z; o0 r- X# \  ^: y( W
  754.       }
    $ I- Y3 ]8 E4 _8 x$ i) a% P) t" i
  755.       dwStartUpSteps=4;
    8 ]) ^# X7 V9 Y/ G- K2 A% J: W
  756.       break;
    8 D$ u( V2 T/ a4 {# w  m
  757.     case 4:  Z5 q1 H' t. }' n0 ]: {$ _% @
  758.       {
    + E+ h9 P2 B) g5 R! j, U' e2 }
  759.         FILE *fp;4 \0 h* f5 q9 W! e2 g+ Q. I
  760.         char szString1[128];( o+ b+ Y: Z- d- Z
  761.         char szString2[128];
    ( F' w. M7 K, k; t* ]
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");3 g$ B8 w0 y+ m) L) j# Q
  763.         if(fp)+ i  Z! L5 e- R' k; W& Z: I
  764.         {
    $ l0 {0 R" M% R8 U2 K
  765.           fscanf(fp,"%s",szString1);! j% o9 V' T; ^. C/ N# L
  766.           fclose(fp);# x# A1 r7 V* i$ j2 j; c5 s. F! U
  767.           fCheckVersion=atof(szString1);
    2 {) w. i$ @4 J! _5 v2 O
  768.           fp=fopen(".\\checkversion.dat","r");
    - D, S3 F- {; k6 m
  769.           if(fp)
    9 q2 k  n4 o6 `( X7 z$ H5 [
  770.           {
    # N0 Z0 V+ `1 l! K0 ~. w
  771.             fscanf(fp,"%s",szString2);
    % U8 @7 \( I3 h
  772.             fclose(fp);
    ( P* i8 p) l9 s- Z2 K' |9 P: Z' J
  773.             if(atof(szString1)!=atof(szString2))
    3 [+ Y0 k5 b( [8 B' s
  774.             {, \7 X: o: k% x( r3 i9 G
  775.               if(!Dn.Connected())/ U6 I, k* `, w* D4 R% t
  776.               {
    9 z# v* Y+ }" F# C8 n2 `8 m, h7 Q
  777.                 bFirstUpdate=TRUE;
    # T; B# a4 V* R3 E/ p9 D' h+ d2 \* n+ y
  778.                 dwTotalFiles=1;& N) h4 i6 |, ~! N) s
  779.                 dwDownLoaded=0;
    ! r0 j/ j" A0 y6 a6 Z
  780.                 bSilentStep=FALSE;1 F: G" ~% }4 f4 j  a2 l
  781.                 bCompressed=TRUE;+ u9 x6 e) b' ]
  782.                 strExtLocal=".\\DownLoad\";- u7 _% F) \; B+ N
  783.                 strFullName="update.txt";% l( y& o; u2 u7 C$ }" @; ^- Q
  784.                 dwProgramState=AP_CONNECT;9 c1 n- j4 d! q7 M
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  T% t; n9 m: j
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ S  p  p( b2 N: A/ G
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , ^/ p. f5 a. G' w+ O; ~

  788. ! ~7 p0 L/ U$ K" n' @( @  I
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 M) A4 D0 i1 b0 Y0 J% c3 z
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    : r0 U7 X# {/ ?# }& z
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)' u5 O9 v! _3 G1 r+ Z
  792.                 {* U- [) `" E- J( i8 V
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    6 X  W; D2 `7 m+ j* i+ ~
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");; D- l& E% b: p. s( s/ V
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    & \" v; a/ f5 C$ h' y  x
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - |. ?  J7 t' V7 {8 z& x$ p

  797. ' K( @( d! Z/ F4 g+ N0 W% w7 q9 h( ^
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. D  K% U0 [/ Z3 c6 h, r7 T
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: q) y& x7 l3 {$ {6 |$ W! v( Z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( S* b( M- B. V9 r$ U% e  J" c( R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 y, i9 D& K( E3 V4 Z
  802.                 }2 l9 N1 q! z; w
  803.                 dwStartUpSteps=5;9 U0 ]+ E# m8 _: }
  804.               }- u+ F! j3 x( w& K% {  l) B8 ^
  805.             }) r7 T+ a7 a" Q5 w/ h  L$ [
  806.             else
    3 U) ]. Z7 v0 A: `! }
  807.             {% a7 z9 K% ~* r' D6 A
  808.               unlink(".\\DownLoad\\checkversion.txt");
    2 y/ S3 m, \8 k# x( ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    # d; d/ D8 Q, N* l0 E! [3 h9 @
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# c5 `! E& L1 }
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");- `! o1 U* W& W3 _

  812. : ~( r: o6 M4 O8 B) R: t6 K
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 Q3 u" d, J* h8 X- ?
  814.               dwStartUpSteps=99;: l0 p! I$ m* L, ~7 u' k
  815.               bFinishUpdated=TRUE;) t+ f) m; B/ K5 e/ V2 q5 h
  816.               bCanUpdate=TRUE;
    % C9 B" y4 X' {
  817.             }
    6 O% j  a/ I: J# D2 }
  818.           }
    % W5 `: \- `4 t' O  k+ D
  819.           else
    0 f; _4 J+ g) d
  820.           {
    ; l2 v! e% H% t, k# c$ m& S! c
  821.             if(!Dn.Connected())) I: a8 ?: R. F2 o' o
  822.             {
    " a! a9 ^( n8 Z( z* l, a/ j* k
  823.               bFirstUpdate=TRUE;7 _0 k4 V3 z5 W) ]
  824.               dwTotalFiles=1;% @2 ?8 v' k# y/ H" A. G, V, i
  825.               dwDownLoaded=0;. r- L' |1 u' s7 W
  826.               bSilentStep=FALSE;3 B3 z' L+ e9 K1 Y4 Y2 x, @. H: x
  827.               bCompressed=TRUE;' K0 b/ q0 W5 A- f- y
  828.               strExtLocal=".\\DownLoad\";: K; b' Q1 i" v! h$ u) f7 F3 K
  829.               strFullName="update.txt";
    ; A  {% z2 G1 K6 A) t- ^( j
  830.               dwProgramState=AP_CONNECT;
    0 b4 }2 P8 r+ p1 K- U9 X- G/ v$ k
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( y- k" `* F3 P
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 y" m3 [6 }: n- Z& v* p7 b
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
      i8 i  i. j" M" I- q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 ^) B# ~+ ^* Z  ?; J0 ]7 `
  835.               unlink(".\\DownLoad\\checkversion.txt");
    " B9 H9 m: a; W1 M$ A' u  V' Z) v
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)5 F( b5 `8 s5 a, k0 j
  837.               {
    5 l- ~) \- u* `% r8 t
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");$ r- S0 w7 N( ]0 L' A
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    3 a; A0 D$ g; K
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");( E; t1 C, y. |7 O: |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! s; b( ^! P0 |5 n! T. ]- _
  842.                
    ; W' b4 X" Q8 d8 v$ d
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; @1 A, ]8 _* D) {
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 {/ R6 F! t! k* [: v; o8 f2 [6 p) M
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 T) P# w" s4 K4 x6 X2 U
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . u' A0 n; P. a% Y& a
  847.               }
    8 k3 u1 \8 e/ F& o
  848.               dwStartUpSteps=5;
    2 {" \( s, `* }
  849.             }
    + {! L0 N& P! U7 w0 `% _
  850.           }
    1 M1 @- A) W- b5 t
  851.         }( m& G- t% Q& e# ~
  852.         else
    , f7 r! `) T& K6 Y$ W# Y. e" Q  V3 d
  853.         {5 I0 W* G; E1 A- {. }6 q, E  n
  854.           dwStartUpSteps=3;$ a* L( r  J. D( J# p; o' k, V
  855.         }( m+ u. v6 Z4 H2 x3 T  H& P
  856.       }
    5 H* a; Y( m5 a# I  w9 @  n1 K  h
  857.       break;9 A( t  y: a7 v5 D$ f1 p" _6 J# e
  858.     case 5:
    * e" k0 Q" F0 S6 {2 F
  859.       {
    - f6 R, W& z: Q) P- h1 F+ F! u. X
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)/ L5 T; x* Q7 P. b/ Z4 R0 Y' I
  861.         {) d' n1 x; f0 Z3 e9 Y
  862.           int opt_overwrite=1;
    6 l$ B- G! |! d6 s
  863.           int opt_do_extract_withoutpath=0;
    - Z1 N- z  o4 n" ~
  864.           unzFile uf=NULL;. ^4 N. r  R7 G' \
  865. 8 I7 c. x! g8 w+ i# f
  866.           uf=unzOpen("Wsa.zip");* m' ~# D0 k8 M" R/ ?
  867.           if(uf)
    2 n2 G6 _( E$ U
  868.           {
    ( v: v/ @* E  I* y
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);: B. Y: K2 k. Q: g3 ^9 ^
  870.             unzClose(uf);8 k/ L. m$ e8 H" F7 ?  r1 f& u9 x6 G
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");! j  A2 k0 \( r5 W
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    , Z# ?. i9 _/ W& g
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    8 N1 Y# v4 \% C
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 c9 X, h8 E" g7 m6 L- R
  875.           }4 @! g8 n2 f  ^+ D/ c
  876.           DeleteFile("Wsa.zip" );
    + @+ K- w/ t: Z1 y
  877.         }
    - W* @' W7 v) Y. x* l4 s8 O" t3 y

  878.   L) I6 n8 f+ p8 m/ _  k& F
  879.         if(CheckLocalVersion())
    , X/ y( B( ?/ z6 A
  880.         {
    6 a- Z/ _- n8 e$ }8 z: s- \. y
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    3 `3 g7 ?# \% v. n, c; C
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    + e7 J, |: \4 T+ D& T/ Q
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    % ?* x) ^' f) a' Y% A7 k
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. A  r1 t3 f% \: T: J, o& e# {
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);) ^* q0 T! X% P; ~
  886.           dwStartUpSteps=99;
    3 }0 O2 o9 N4 o1 A9 D( s
  887.         }
    2 t' V( n. F6 l; W. S7 X8 n4 M: w4 N4 w
  888.         else  @* X( Q( `0 T1 d/ V" j
  889.         {
      A. F( t6 L1 p1 L
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 T7 z2 ]* S7 T) r. A9 e. f7 ]
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    1 s8 b# a# @- R! c
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 U3 Q. ^+ w  i+ ]( i+ @

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

評分

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