CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
, T  h! i; R9 d3 e4 p, }8 k
  1. / RevApp.cpp : Defines the class behaviors for the application.) D# ?( J# \4 D) W- w+ a9 z/ p
  2. //
    : V$ E! x5 @9 X( u$ t
  3. , ?. f% h! c! }$ t
  4. #include "stdafx.h"* K; M8 q6 ^% ~( w
  5. , A9 Y0 t. f7 m1 M( Q
  6. //#define UNICODE
    % ?6 r, G" B0 w- |6 t
  7. //#include <gdiplus.h>1 g. \8 L8 \; N8 D1 g
  8. //using namespace Gdiplus;
    1 @/ E* r7 o+ h5 S/ D& c
  9. ) z# l' P3 x2 x' v" C
  10. #include "RevApp.h"
    ) Z' b2 G6 R) ~& n8 ^0 n+ \
  11. #include "RevAppDlg.h"  {3 Q5 J/ g) m

  12. ; o# s! t! w5 F
  13. #pragma warning(disable:4786); ]4 _% T' \/ Z) a* [- R7 O
  14. #include <map>5 e# X$ Y8 u, b1 N9 n4 k
  15. #include <list>2 K2 F- Z7 g4 B' C! f- N# h6 }- k
  16. #include <direct.h>3 x6 t' w9 P! ?$ k. a! b2 Y0 P1 r

  17. 7 }- J* q1 D7 }9 P7 b4 U
  18. #ifdef _DEBUG
    * B/ W3 v, A: }% M# E8 Y, i
  19. #define new DEBUG_NEW
    / m& m2 J" q7 y1 h3 @5 V5 H
  20. #undef THIS_FILE3 V5 Y# S' L, W" l( W, U
  21. static char THIS_FILE[] = __FILE__;4 S2 X5 y: O0 m5 Z: f2 ?
  22. #endif; i. f. ~9 S7 K: {. d
  23. #include "SkinResDef.h": N# {) L3 |( [" x
  24. #include "ChangeBG.h"9 L9 f$ k2 N7 x' {5 {
  25. #include "AFXINET.H"
    ' Z# a: R$ B+ u7 M$ W, G3 Z
  26. 3 c) {1 F6 c0 d" h& O
  27. #define TRADITIONAL_CHINESE 05 ?3 T, B) w+ D: j3 m! a: b7 J
  28. #define SIMPLIFY_CHINESE 1& I% p# ]: o9 z0 n& J* ]( g
  29. #define ENGLISH 2
    + y! h* x: e" m; a
  30. int m_iLanguage = ENGLISH;! N* a! S: Z) H; Q0 v
  31. /////////////////////////////////////////////////////////////////////////////
    8 F. x$ s) P/ h
  32. // CRevAppApp7 E" a, E2 c4 T" C6 Z

  33. ; C& q  x0 ^! ~
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    , u% F' c" E+ s9 r3 Z# k
  35.         //{{AFX_MSG_MAP(CRevAppApp)/ A; i* \# Z* ^' m# l' U- g) c
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.6 G8 A6 M" h. ?) W5 o1 L1 t: I
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ! g# M/ P, _4 @! F( g: J
  38.         //}}AFX_MSG
    $ @+ D9 s. a2 y; b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    9 F9 r' ^& d1 F" q
  40. END_MESSAGE_MAP()
    6 W, R. L  t6 d0 x' G9 v9 k/ d
  41. 1 U. J  d9 {. t
  42. /////////////////////////////////////////////////////////////////////////////  C3 P/ B: U7 o" L1 }5 ^
  43. // CRevAppApp construction
    + n! t; U, U8 ^, C- I
  44.   d' [: H" k1 [
  45. CRevAppApp::CRevAppApp()) z$ I; Y) ?, Y* |: y" Z5 i  q
  46. {
    2 a8 p" E$ J0 [* F7 P' J9 ~2 q
  47.         // TODO: add construction code here,! D& P9 O& E4 z/ M: e
  48.         // Place all significant initialization in InitInstance5 Y1 M7 H3 L# N! f+ a% @
  49.   bDisplayIsBig5=FALSE;$ g* j9 N, X- J  ~2 E
  50.   bRestartUpdater=FALSE;$ a/ o0 Y* x9 f7 Q( q
  51.   bFinishUpdated=FALSE;0 S$ j8 l; v# o- K' D6 }, y
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    $ g5 e" v( W* g9 ^, k* b6 m
  53.   InitChangeDataBig52GBKS();
    0 O: w1 M& e' ~$ \; ?: b, u" B
  54.   InitChangeDataGBKS2Big5();
    7 i+ ]5 R1 e. t+ g
  55.         //
    0 n* r6 S* z' p
  56.         bClickRunExe = FALSE;
    . {5 {: [0 U2 z3 t+ _* I( }
  57.         //
    3 M- G* V$ {: a  z
  58. }
    9 w2 `0 \* H: H# Q: V
  59. 9 Z( r$ L2 _3 p' M; ?7 A
  60. CRevAppApp::~CRevAppApp()
    - M  l$ ~6 U1 s) ]/ `; E
  61. {2 r5 _7 J4 r! }1 e3 @2 a
  62.         // TODO: add construction code here,; q8 T, o" @" f: }- u
  63.         // Place all significant initialization in InitInstance- c5 U6 Q" q9 N) {+ c6 o3 h
  64.   EndChangeData();: x9 c. b' R& d7 A/ `* x
  65. }
    5 B. x0 \) P; O( V7 h9 m/ ~# R# f

  66. : \; v- }1 c+ _4 r
  67. /////////////////////////////////////////////////////////////////////////////
    ; X+ |9 [1 h$ E- ]. F: m9 a- ^
  68. // The one and only CRevAppApp object
    $ [( u! F+ H; |* [

  69. " i+ N7 Q1 X. m* Z; B  `6 P! H5 M& a
  70. CRevAppApp theApp;7 q2 x1 U3 \: g3 f* M8 {# \

  71. ( x* x" J" M" a! W' L) G! a
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)- R' H. @! j: k8 e: L# O2 C4 T
  73. {1 W8 y+ M" e% c
  74.   int iEOF=0;& p" I" g3 \1 y% ]+ H" m' K
  75.   char szTempName[MAX_PATH];
    2 b  n/ m" R$ b0 i( N0 f; c
  76.   *szFileName=0;
    ! M3 X2 L7 o8 c1 y7 W/ P  a
  77.   iEOF=fscanf(fp,"%s",szTempName);
    6 |+ k" k7 G, C! j
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')' z# Y4 [, B5 L: d
  79.   {- I+ d+ W. j4 W0 s
  80.     strcpy(szFileName,&szTempName[1]);
    / c9 H/ d. _# T) X4 F
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)/ f+ h6 Q; D+ D% R# y
  82.     {$ j: t9 z+ ]2 G. [2 B& z% g0 i
  83.       iEOF=fscanf(fp,"%s",szTempName);8 y8 o9 @5 Q- `, q3 z
  84.       strcat(szFileName," ");
    % c) Z0 @  T4 c3 V- y
  85.       strcat(szFileName,szTempName);& L. q9 p3 X" U. K! J% i' H- O, }
  86.     }
    5 I, _. G* S' B7 h( H
  87.     if(strlen(szFileName)>=1)3 O1 d6 |/ d9 k0 C8 J
  88.     {: Z4 X- Q' ]& C9 `. q
  89.       szFileName[strlen(szFileName)-1]=0;
      P& \' s2 y  G6 @% O
  90.     }/ G$ T7 y$ @- x: U
  91.   }; g- s, @6 {1 b$ p4 r
  92.   return szFileName;" m# t: A' c: ?5 q3 @" S9 O, B2 ^
  93. }
    6 v, U, @$ D) ^9 X' j

  94. " X- W& X( o( n0 _
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    . U1 m6 A6 m/ e) e* a
  96. {
    5 O- [0 z' z% c/ L9 k! Q" o- @
  97.   FILE *fp;
    : m  y. x6 D% |6 V! j- J/ i
  98.   char *key=NULL;
    0 i& C/ B' ^8 F" Y7 X' B
  99.   char version[MAX_PATH];# Z" g7 u! _6 v3 s$ s* l- l1 Y
  100.   LPUPDATEFILE file,olds;
    & N! z4 W; K' ~6 I. ~& B  g) S+ @
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 |6 k4 Q6 _9 n$ M" h+ }
  102. 4 G1 k( s/ i, J6 F6 s) c2 y1 q& H2 p
  103.   UpdateList.clear();! c  r7 g6 x5 t: M7 L; [: ^* O" o
  104.   UpdateFile.clear();
    - A7 j! q, m+ W. v* \& I
  105.   if(GetFileAttributes(filename)==-1) return false;* y# n1 o5 [. s1 h" z$ A
  106.   if(!(fp=fopen(filename,"r"))) return false;0 `9 i. f6 Z7 ^: f" b6 ~* V/ Q
  107.   fscanf(fp,"%s",version);4 g6 c% D& B7 @/ \5 [9 E
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    $ B, u' U9 |/ h/ e3 _
  109.   while(fscanf(fp,"%s",version)!=EOF)
    + t+ d8 D" }2 p1 B8 r
  110.   {
    0 t: S! W' ?: d  G5 |3 D
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 E% u$ L7 f0 W
  112.     fscanf(fp,"%s",file->path);! H6 R0 A: W& }6 T4 O# y
  113.     ReadFileNames(fp,file->file);
    ' `# S0 ]+ U2 Q9 P' i; ?
  114.     strcpy(file->full,".");/ c( `- a1 @; K; E7 W
  115.     strcat(file->full,file->path);
    + v, t8 S% r2 [6 u2 {" ?
  116.     strcat(file->full,file->file);
    ( ?' _6 i7 c* P
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 {% h/ c  k4 }8 Y3 M% k
  118.     {
    + z4 ]7 Q) e8 C3 X) M# ~) q
  119.       file->vers=(float)atof(version);. L( V3 p# i1 m" T6 W+ j+ `% \
  120.       UpdateList.push_back(file->full);
    : u+ |( g0 P, }- y4 h, K/ z4 u
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    . ]9 w1 `( {' E3 Z( S3 w0 k6 j- X
  122.     }- _- T9 k* p/ S/ j3 r
  123.     else! T) X6 d0 J* [3 q. W+ ~
  124.     {
    / f. ~+ H: x. r' V$ Y8 J3 l
  125.       olds=(*p).second;
    . w) Z& @4 H  s' \7 i5 t3 Y
  126.       if(olds->vers<(float)atof(version))  E1 f9 }# Z% i* O1 C1 G4 @
  127.       {' E6 R5 z1 o$ o8 G* S9 ?
  128.         olds->vers=(float)atof(version);2 a; B* K; H2 H
  129.       }
    + A& y/ Z: k. g- n8 O( P
  130.       free(file);
    / `% s( ]- W6 D9 D; t
  131.     }; ?7 s& ?1 d* X9 k1 ]& L+ W0 b- |) G
  132.   }9 u2 q- X& L, ~" o# v/ K
  133.   fclose(fp);
    : `$ T% z' b9 r! l- C
  134.   return true;. [" a" ]& _% ?3 x
  135. }
    0 ~, \. [1 P" I
  136. ; D9 ^* U7 [# W, K) }
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    3 J9 _0 l2 k6 P5 K
  138. {# T5 D5 Z. `9 n1 C; t0 R
  139.   TCHAR  szFull[MAX_PATH];
    4 ~; A$ R2 z( h- e& S/ e6 j
  140.   TCHAR *token,*inter;; o- h3 Y8 n. ~& ~/ r8 H6 ^2 ?0 S" r
  141.   *szPath=0;: W  J4 w* i- T
  142.   strcpy(szFull,szFullPath);
    * V8 S  A( B& h, E/ ?: W5 h
  143.   token=strtok(szFull,"\\/");
    2 d- _9 l* ~3 G. C) v: o/ f
  144.   inter=token;
    ; N3 ^$ h" d' v+ E8 S- _
  145.   while(token=strtok(NULL,"\\/"))
    + R# J% x+ p! c7 u: C( C9 }
  146.   {
    2 _1 Y, N" M# h$ u0 s7 ~' b
  147.     strcat(szPath,inter);
    2 V1 b% U+ f' T. ^
  148.     strcat(szPath,"\");
    9 ?5 Z6 E" D5 g2 k
  149.     inter=token;
    2 ~! d/ @  c& b
  150.   }  K  l. ]* t2 T" @$ ?
  151.   return strlen(szPath);1 r; n" H# E( A! b1 e+ A1 Z
  152. }4 d" u" w% W. \$ w# [! q3 u4 h

  153. 3 }; M# t$ E/ c2 d# F1 v
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    # K- o  [7 i, ?; L
  155. {
    ' y1 i2 j  O& t4 H
  156.   DWORD attrib=GetFileAttributes(Target);
    ) B8 a5 a7 k% Q, Z( T, F+ `
  157.   if(attrib!=-1)
    # K4 j+ a; `- s+ ]1 |7 k- o, P
  158.   {5 T: \0 j5 Q. R! z  Z! {
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)). }* f- m  {7 {. S: G8 I* W
  160.     {# w% Q5 p$ D$ f  h7 q, u' y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);* f/ z" f+ I: a* V5 F# n
  162.       SetFileAttributes(Target,attrib);; y+ |" e$ T9 x. c( h+ Q. v
  163.     }
    " _& e( u5 G3 p# ]( S- ^; z; G
  164.   }
    * ?; W9 R8 _0 U; ], r: V' b/ E
  165.   CopyFile(Source,Target,Erase);
    & c1 O3 [0 ~& Q* V! T
  166. }$ v% O1 b0 e" q- X0 h1 l

  167. " J! C9 Q- I* g5 \
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)& }' P" h6 M2 U1 r* L
  169. {$ x! K$ t! V0 u. B
  170.      FILE *fp;
    8 E6 k& R& `6 Z
  171.      char  szBuffer[8192];6 e4 ~& D7 z' _$ _
  172.   va_list  argptr;& p% b4 W) i) k# l7 R  m0 ^

  173. 7 O. R% ?" @+ n. T0 C/ S
  174.         va_start(argptr,message);
    % B8 l4 t) {+ h( n- L2 j, c
  175.         vsprintf(szBuffer,message,argptr);0 H; F4 ?! _9 V
  176.         va_end(argptr);( N+ q6 r% t) f  Y6 g& x8 [
  177.   fp=fopen(FileName,"a");
    ) t+ w& u4 N7 F# S9 R: M. R
  178.   if(fp)
    ( k: f, w: t; b0 m- {1 L
  179.   {. z9 m0 E3 [9 c: J. O) C7 x( ?
  180.     fprintf(fp,szBuffer);6 s0 s+ B7 ]2 B* e% P4 V
  181.     fclose(fp);
    7 E" r: a. a6 p$ n' O5 o
  182.           _flushall();, X: b5 B( L% S) |6 i# P" ~
  183.   }5 k$ Z8 R: F  g* ^: x$ G
  184. }
    3 i5 ?( q# p* ]9 ~
  185. & k: k" S' G. O$ @- h8 h
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    9 c$ m! k* e4 _" k9 |- a" v! D
  187. {; }) x8 X$ ?3 q. T2 M9 F2 O2 J% l
  188.      FILE *fp;/ d# f5 E7 k0 O8 B" {
  189.     DWORD  attrib;8 S6 v' [* ?" A0 M0 X
  190.   attrib=GetFileAttributes(FileName);  a* t4 L( x. K$ c0 c# v
  191.   if(attrib!=-1)4 z% i( v; d7 ~) u! L# i( S
  192.   {
    4 X. j3 t" A! u$ K% w3 H
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);( |. B) {! M" F' x+ k6 k
  194.     if(!SetFileAttributes(FileName,attrib))
    & U! H7 [% L% @" b; @
  195.     {
    6 T, N1 K! n8 V. T! Y
  196.       return FALSE;
    0 Q" Z) F4 j& n" H' Z
  197.     }
    * c* s& @, x4 p1 i+ Q: q2 r9 g% I
  198.   }3 [4 O$ K4 B) F4 S
  199.   fp=fopen(FileName,"wb");
    4 D* s( w1 e) P+ m
  200.   if(fp)
    ) P  h, C$ q3 o" v
  201.   {2 u) u* @- d. e8 z
  202.     fclose(fp);  U$ U" o4 f" Q4 n& J7 O* p6 |: P! x
  203.   }
    ( i  _# o2 n* v& k- G6 e+ l3 G
  204.   return TRUE;
      q2 p* e# H( B' \1 ]+ @1 E! ~
  205. }4 L# h% T/ U7 \0 F6 a) c# ]( N* `

  206. # l1 j5 Y' f0 ]
  207. BOOL CRevAppApp::UpdateLocalVersion(void)" l/ p! U1 v! c- P$ F$ S6 J
  208. {( U' [) ~9 G$ H. ~" G& {
  209.   char filename[MAX_PATH];8 g- T6 |2 n; C7 U" v) F3 R! t% w
  210.   LPUPDATEFILE file,olds;' @/ c, U4 u0 C! O7 C
  211.   std::map<int,CString>::iterator i;" f4 S$ g9 \2 x# p
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    , g5 j+ N: e) @! o, k( E) U
  213.   std::list<CString>::iterator l;
    , W, L0 j" q5 m6 Q! J) x7 E
  214. / R' X, m) Q  |! i4 a( f+ p- }% i
  215.   if(bFirstUpdate)
    8 A$ l, N3 X3 i6 }5 z7 O
  216.   {( ~! l# ~5 }! t; _7 @, F
  217.     dwCurrFile=0;
    , h6 X* k5 K( J
  218.     bFirstUpdate=FALSE;
    % x3 P: I- c# X  o$ e: Q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  q6 R1 {% k8 [, ^: u
  220.     {1 J: V) \# v" C1 t8 ~5 t
  221.       dwTotalFiles=UpdateLocal.size();+ R& |3 k* \. y
  222.       dwDownLoaded=0;# H: @# q+ ?# K/ E9 Z5 J
  223.       bSilentStep=FALSE;
    * B% n. l/ |; I2 z7 `8 p
  224.       bCompressed=TRUE;
    + m* n& F8 K8 e" e5 Z& W# a/ b
  225.       strExtLocal.Empty();( z9 a3 Q  b7 p" r. b$ a1 u0 j
  226.       strFullName=(*i).second;
    7 u6 f/ {0 Y- k5 a
  227.       dwProgramState=AP_CONNECT;
    # l! H' D3 s; n' @
  228.       return TRUE;6 \  Q7 I' s0 W+ J, G
  229.     }" l7 Y4 F2 a+ r1 L; N* r- T+ b( m
  230.   }) J* Z$ x) `, a& {5 ^
  231.   else if(bRestartUpdater==FALSE), L5 B$ G1 g7 `- G* x
  232.   {% Z: Z% s$ ^. v; E
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()): \5 w$ l* x- E7 ~. z/ ]
  234.     {
    # g6 ~$ y; Q# L' s
  235.       file=(*p).second;
      y9 I, r" U% {, J
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    4 c7 N! o( N6 f  h/ s
  237.       {3 s9 d6 y& t0 N7 B* ]
  238.         olds=(*p).second;5 `: y2 w: V3 C( n0 a& Z& b* m
  239.         olds->vers=file->vers;
    % k4 l* e. h8 z; o! w
  240.       }/ \% m) O& }" E
  241.       else4 K  F: B7 s, t" Q) r$ B  X
  242.       {
    ' b( W9 d( ]: i
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 i7 L; p2 E1 x
  244.         memcpy(olds,file,sizeof(UPDATEFILE));& b# K( O- K2 U% r- A/ X% v& D
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));- x. G# f0 P( b5 n( H0 B0 A
  246.       }; z0 J) }: N# K9 G
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");% x: {1 c/ L7 |. _. V, H0 P
  248.       sprintf(filename,"(%s)",file->file);
    ; v% w9 \( J  q" e4 X: o- r# L
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. t- v( a0 D6 ?+ I6 ?
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    % m8 k2 d! E+ o1 K5 _- \3 e
  251.     }
    7 W% G0 T$ q3 L4 Z1 r# w
  252.     dwCurrFile++;
    % b! u5 M6 j! }9 S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 R. |6 q9 L$ C" Q- a" l1 }
  254.     {9 _' O6 g9 R( K5 t# i
  255.       bSilentStep=FALSE;
    7 [. j+ a5 q" d/ m9 ?
  256.       bCompressed=TRUE;) ~* |  K6 e+ I  {
  257.       strExtLocal.Empty();
    / Y- z% [. j0 D  T$ d2 z
  258.       strFullName=(*i).second;1 I% R2 [, H( o0 ~
  259.       dwProgramState=AP_CONNECT;
    / p% Q3 k4 ]! j& \2 V5 `
  260.       return TRUE;0 a9 e$ O. M  T, L; z/ V. }
  261.     }
    0 M9 O; N% y5 E' }& W
  262.     if(!bRestartUpdater), i# z5 ]# }: h/ Q! A6 c3 ?$ F
  263.     {
    2 l, W, g6 O$ x, X6 m# o  o
  264.       int iCurrSize,iFileSize;& u% i- F/ M5 ?1 p
  265.       iCurrSize=0;: R2 w' M- q/ ^& v  [
  266.       iFileSize=UpdateList2.size();. n6 }, e$ z$ m5 O$ b
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    6 I$ r1 s% U% k
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");; x6 e5 E  w( _  B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    0 G" N0 _% n/ ]0 i! \! `* f
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 A9 w- r+ ?3 H, U" Y, g
  271.       Fclearf(".\\update.dat");
    , o' O9 F9 o8 Z$ ^- I: o
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    # E: Z: G6 k$ x2 o2 r4 H4 t
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)) J/ c# Q; G% v/ R/ d) ~! {& O
  274.       {+ [$ h' R, w4 _* C6 T/ P8 }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ( d& g+ v7 H6 j
  276.         {2 E3 d2 v; W" F  D
  277.           file=(*p).second;8 f2 O- m; v/ T; {3 C7 X/ c3 s
  278.           sprintf(filename,"(%s)",file->file);
    4 X2 R) o$ _7 J' P. T$ ^
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  ]( e0 s5 W$ \& Q- k) k; h" G/ E8 u5 j
  280.           iCurrSize++;
    . ~1 q& O* U2 Y2 U$ u
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));6 s$ [7 Z% h% q% m6 Y+ V- b. `1 F9 P
  282.         }  g) ~& Z# Y. f2 ?
  283.       }
    9 Q3 c& @  _) R' E
  284.       unlink(".\\update.txt");
    / M- O( N4 L, T9 ^2 w9 Y0 e% G7 p; Y
  285.       unlink(".\\update.tmp");9 Q1 i) F' D2 y8 G, `1 R8 X
  286.       Fclearf(".\\checkversion.dat");& q5 f' r1 S4 o4 q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);1 i) t- y) K+ t, Z. K" E* y% \
  288.       if(UpdateLocal.size())  r: G$ h1 C- N* C* H
  289.       {
    ' E2 x+ G0 G$ u% v2 L( P. R' y
  290.         UpdateLocal.clear();
    $ Y2 T, \% i" U+ I
  291.       }: r7 b1 }% a3 s" c2 x1 Q- O
  292.       if(UpdateFile3.size())
    2 l" u" l$ `; P5 n
  293.       {
    % f# k$ Y0 W9 ]) o1 }6 r1 ~
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . z: f5 |* q, _5 ~
  295.         {* @2 K7 T" G) ]0 v7 W
  296.           file=(*p).second;
    * U; e0 e& ?+ l6 O8 q  ^2 O
  297.           free(file);
    ! B. I8 x3 }4 c4 o7 T' {
  298.         }; ]2 J: p' Y. k1 f2 n& v2 _: G
  299.         UpdateFile3.clear();& s5 l5 q5 T2 N9 Y6 `0 @) G
  300.         UpdateList3.clear();
    3 ?, L1 K9 U5 q7 b& j  [# @2 R) N
  301.       }
    ; K0 L/ ?2 t1 V# A, z% B0 K% t
  302.       if(UpdateFile2.size())+ Q7 Q5 b" O6 |1 D& W$ S- o! f
  303.       {' g* e! t' I6 y7 v
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# u( r  @& [1 J1 a6 }
  305.         {& H* s" z' G& F+ l
  306.           file=(*p).second;4 S7 B: O& y  b- r
  307.           free(file);2 z. n' r& g7 o, O; [( B0 r) k
  308.         }0 X: _- z  ]  S- {' W' K. }
  309.         UpdateFile2.clear();$ b" u2 y( b" Z
  310.         UpdateList2.clear();% j1 u3 K/ ?6 k$ M
  311.       }+ C. O1 O7 }6 ]9 R" E/ h1 n) X
  312.       if(UpdateFile1.size())
    ; P6 K6 K9 ~! |8 ]+ }" v* \
  313.       {5 s! K# e, |4 q2 R3 u- v
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 `4 ?/ l0 t( k$ h3 Z' S0 A# l  m
  315.         {
    / Q( Q# k2 r8 ^: p  A& r" ]
  316.           file=(*p).second;% h+ P' {' Y2 z/ j$ j! i( O
  317.           free(file);
    2 ]/ s7 u, O  m' e; ^. U- W
  318.         }
    * n: g* M" h( q6 {
  319.         UpdateFile1.clear();
    # x8 Z* f* Z6 m% Z
  320.         UpdateList1.clear();
    2 }/ W2 h7 Q$ G( o. D7 [: F
  321.       }
    5 J  ]& r& Z* I' U7 K& o
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));: A9 e1 R9 I9 J2 J
  323.     }/ C+ o$ O: f* v0 u& K% y+ c
  324.   }
    " h  I, _+ P7 F/ r7 N; Z8 p
  325.   return FALSE;9 e$ P4 l8 @6 \4 ?0 L
  326. }
    # `  }" t) T, ^( Y. h

  327. 5 q7 U2 |# }- V: C" p
  328. void CRevAppApp::ClearAll(void)
    # c9 k. ?$ m0 |6 K6 g" _: h
  329. {- W/ t, ~. N/ v5 Z9 a
  330.   LPUPDATEFILE file;
    , `! n: _' I% s' h* j: h! P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    . E: ^# B6 [# i' \
  332. 3 `, e; a+ L5 R6 e' h
  333.   if(UpdateLocal.size())
    0 [5 S+ Z; M) c9 R" l2 f
  334.   {
    ! Y. _2 ~+ M; Y$ K# p
  335.     UpdateLocal.clear();
    / V4 c& ~. L; p0 w: }4 i- B: V
  336.   }/ |9 p: u$ m. N+ f
  337.   if(UpdateFile3.size())
    & {# c" X9 |; ]# A
  338.   {
    ( x) o+ d5 @2 g* o5 b
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 n7 R2 m. d7 e
  340.     {
    : X. k( B# O& g7 n% w) q# ~
  341.       file=(*p).second;# T- |  }4 n# A+ s
  342.       free(file);/ n9 U! V. a; e" f
  343.     }& l! O0 ~7 S% |( T4 ^% ^  Z
  344.     UpdateFile3.clear();
    # V6 T3 u8 h& ~! D+ j: R
  345.     UpdateList3.clear();9 }3 E+ g6 L: Q$ p& _, _* l
  346.   }7 L( R2 c6 {# o
  347.   if(UpdateFile2.size()): j. y) z0 l+ |3 N$ p  `0 a
  348.   {3 D& c* @* n: K
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 k2 e3 [" D7 x! f( u
  350.     {
    6 B) ~% i- R, Y2 k1 T
  351.       file=(*p).second;* r$ ~/ T- ?1 _+ W9 W) \
  352.       free(file);
    ( ?& ~8 q' r5 P3 d3 _3 Q
  353.     }
    6 g: L9 h' x* |
  354.     UpdateFile2.clear();! y# ?' G- L2 r9 c
  355.     UpdateList2.clear();( I5 C. W3 N2 @- Z. ]2 y, S+ |: O
  356.   }
    3 D+ n+ V6 s; Q; C8 X
  357.   if(UpdateFile1.size())- ^1 G' F, @9 c1 @9 p7 G! i
  358.   {# p! Y' [- V2 f$ ?6 X
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! ?/ ], i* s  Z! _4 A$ |
  360.     {9 R5 }3 C: J3 H  _3 _2 v
  361.       file=(*p).second;& O" A: f5 d6 _* l8 F/ O+ `
  362.       free(file);! E9 \. ]8 s/ N/ D" |
  363.     }$ `" Q+ P6 _, ^* w0 D* d+ r' ~  ]+ x
  364.     UpdateFile1.clear();) R5 g6 |. q% x  f
  365.     UpdateList1.clear();
    . k9 G- r* v. i; M8 |
  366.   }# s9 a4 b7 b( @3 }2 j7 s- ], x% D
  367. }  & R7 w/ }4 f5 d) Q
  368.   : ]% l$ i: ~, t
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    " Y/ \4 ]0 [/ h% D
  370. {
    / w: c2 }( b/ m" `/ b  i
  371.   int c;
    , T1 v; J. D! {9 Q/ R' n0 f; m
  372.   LPUPDATEFILE file1,file2;
    7 a' X5 {, |- n3 |$ q( H2 i  E
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;" _- Y1 |+ k( H4 X
  374.   std::list<CString>::iterator l;: w" N8 K+ z5 W# e  H

  375. % k3 U+ \5 W6 E- z# f; u- L- B
  376.   UpdateLocal.clear();
    ) p* K7 v2 |. q6 H3 W- V# G
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ' n4 k1 e8 u: }7 Q6 W, g0 B
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);9 ?5 M, e+ A7 q. a) D% y4 r6 |$ X
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ u2 b! F8 D3 p* l$ k
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);+ p  t. J9 I( \: x4 o
  381.   if(UpdateFile3.size())
    4 {& T3 V6 R3 \6 {
  382.   {5 F2 J* z  A# n. S
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)" `6 y3 D9 P( s( k# _
  384.     {8 i% K" \2 u# m6 h7 n
  385.       file2=(LPUPDATEFILE)(*i).second;" _) B& m1 t0 c- ~$ z: f0 U
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 {7 \9 O0 s) k! o
  387.       {* R' C& T5 o' j* o& s# m( x+ q3 K
  388.         file1=(LPUPDATEFILE)(*p).second;7 R2 _6 y" k4 w9 z/ H  I
  389.         file1->vers=file2->vers;
    + x& {+ O% v+ G
  390.       }, v( O. u9 E& I5 ^
  391.       else* K1 Y9 V, C, b; e4 J
  392.       {/ k! w+ h! U) V7 i' ^; K1 l, z3 ~
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 w5 a' X6 ~; T+ N' ~$ x
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    5 U' l6 g5 b) v5 q8 N- H- N* k8 t9 d
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    4 g, O6 }! G$ ~4 B; R: a
  396.       }! o( Y+ I  A- n* L( t
  397.     }# P; w5 w) F- d9 U
  398.   }
    * v2 G  d5 j+ D/ k' `1 H2 ?4 [$ s
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " M) x8 ]/ ]* `* d" _( U
  400.   {+ A+ P8 V5 U6 q5 J7 b' Z! l
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())  Q: Y2 c. s) Y4 o% i: R/ A
  402.     {2 U) K8 H# z2 Y% X, }+ l9 \4 e
  403.       file2=(LPUPDATEFILE)(*i).second;
    ' d3 a2 p+ @" n5 o% O; N8 u
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) P0 U- ?1 S7 I7 k" [
  405.       {; w9 s" W8 j! _1 Q8 W) o( M
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 H  |* t$ J+ H# T1 u- Y
  407.         if(file1->vers!=file2->vers)3 F5 I3 N/ v" K0 S
  408.         {% P4 ^& [1 r4 N4 J7 _: ]
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 K9 N& O) W3 ^9 H; G" |- T
  410.           c++;5 [% \! [$ w% d( F& h
  411.         }
    ' z/ g* `' _2 S* w
  412.       }
    * B' W, H. E1 h1 {, X8 a
  413.       else
    1 f. |9 d9 x! I- i6 Q
  414.       {& r" l" ^" |( I. C" A/ S
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: H7 U1 }5 h: m( c) s  m
  416.         c++;
    : M7 E/ r) J" B8 D9 v; X
  417.       }
    1 W8 _$ D0 y4 R, M  s- z
  418.     }/ K& D3 ^+ E7 ~: X! l4 b4 O
  419.   }
    6 N* [. S* Q) }9 t
  420.   unlink(".\\DownLoad\\update.txt");+ ^7 j3 X5 m/ P6 i
  421.   if(UpdateLocal.size()) return TRUE;4 g4 g" _. p. x3 F/ `& ]
  422.   else                   return FALSE;
    + {0 R+ l! {* f2 _
  423. }% \1 O5 \1 \/ N* a
  424. 6 W+ O7 V7 I# F& ]
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/") O2 h" ?/ X' r( R' j
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"# p! @$ Y. R, q* L
  427. 6 X! O' ?. b; W
  428. ; z0 y; L2 \& \* I% K
  429. 2 G4 h! {5 N% H0 G/ i0 }  Y' c
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)3 E( U3 @3 Y  t; K
  431. {
    1 t* i+ h6 l/ [# I
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    : k, i! ^8 u1 F
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# ]) p9 u  j8 i. z/ z
  434.   {
    2 @; H" Q$ q! ]  W, p; W0 E" P
  435.     char szLanguage[50];7 R4 Q$ G% N5 u) }/ X
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 ~' |0 S9 I# Q: I4 Y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) s1 [* V' ^- Q) R4 {7 g
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; c( @5 v* V# X, q' y& |
  439.     else                                   m_iLanguage=ENGLISH;
    $ M# f9 ^' r1 @( f
  440.     char szRegister[100];- y& Y1 |; G9 \" [& ^  h
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , }3 P' w1 @9 o% S# z
  442.     strRegsName=szRegister;& _, ^! ?) C2 }' P; X" D5 F  [
  443.     char szPatchURL[100];
    . z- @; W2 ~& w) N$ Q: t" c2 A
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - X1 T- d, r4 [0 D. U4 x$ X# Z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 |" ]: K5 [3 ^( Q3 |
  446.   }- s1 s( J! u4 E( d$ p8 {, x  U
  447.   else$ [# d: x" t6 o5 x* z$ J# }( D' L6 V
  448.   {1 |- P; M. t1 U8 g+ N8 Z* J
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + F8 C6 H* }% [2 ]
  450.     strRegsName=DEFAULT_REG_URL;
    . t9 A" W" V* w
  451.   }9 L" N2 G, E# o' H" P' M
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    / G& O3 N  O% j! |
  453.   {! t6 |+ H" x4 _5 N" z3 o& j+ B$ x, [
  454.     char szIP[50];
    7 r: M5 L. m7 \: D6 ?- {
  455.     char szDIR[300];  X& v% x& D1 [! d( i
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ( r- C5 l# g8 m' v7 [& i
  457.     {
    6 b2 V+ h: t" o7 F7 P: K
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : O' o3 T, p! G6 k1 ^# S! f7 r
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 n: c, d+ |* c) l8 `5 I
  460.       strHostName=szIP;
    3 u. H0 g/ W. h! g" L
  461.       strHostPath.Format("/%s",szDIR);: G* {5 h( o" f+ h/ F0 w) r3 u% K
  462.     }
    ( I4 C& x5 n* K
  463.     else7 r* W& Q' d5 a
  464.     {) ~1 j9 P7 ]# ]. k$ _9 W' \
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 X4 h! [2 u! }. A
  466.       {+ H+ X+ M* v/ B/ [5 b) S5 @7 J: j
  467.         char szLanguage[50];; R: w* V! [& A$ f/ W0 J2 s* P
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  O. M/ Y( l5 D# w7 W
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. {2 L; i2 h& T5 s7 M' w/ `, y* N
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;% ~0 X7 ]' o3 y6 B* Q
  471.         else                                   m_iLanguage=ENGLISH;+ k# {( B7 C6 F- U. Q' _+ E
  472.         char szRegister[100];
    8 a% R9 t1 k2 @+ w+ E
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 @: P. }5 g5 E0 t- @, L# n
  474.         strRegsName=szRegister;- g# W! s* B* h1 F, D8 G
  475.         char szPatchURL[100];/ @9 r% f# w/ V
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 P+ l6 [) w# Z# `* w4 T0 d! Y4 N
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: ]% R! Q# X3 o+ k; t
  478.       }0 y' v# J* N3 x; G% J  \/ p5 e
  479.       else
    , _4 s; P1 n( g& P) D( |0 s
  480.       {
    / h  O/ q3 e$ Z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' ~2 W  ]3 s7 ~1 i8 U1 _
  482.         strRegsName=DEFAULT_REG_URL;
    1 B6 b- a! t4 R- ?
  483.       }
    1 H  z; n7 v1 \
  484.     }
    " x7 S4 n% _7 O3 J/ m7 _! q
  485.   }6 q" ^/ u2 e9 W
  486.   return true;6 [. m, q. t& Z! d0 ~
  487. }
    1 ?0 e. ]: h, W, H4 |0 T) a
  488. $ H" u6 @+ i) j( z4 \/ X
  489. #include ".\ZLib\unzip.h"
    9 E9 B+ x5 I8 D7 w
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);) e( S5 X. [' J1 P- O2 i
  491. /////////////////////////////////////////////////////////////////////////////( l( T9 N0 i5 d. z% q
  492. // CRevAppApp initialization
    6 m7 \1 ]; t( ^% v* t
  493. # H" ?# K  r- v( s4 W. j
  494. BOOL CRevAppApp::InitInstance()
    & F5 P0 a8 U7 H  {6 `4 R
  495. {
    2 ~! W! s3 B! u1 |- T* a2 @
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    0 C! k0 N, H9 {% q/ r. y2 z
  497. & t* h0 r3 G; `$ G9 [$ o; p$ s" G
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; R; j  M2 }1 {: j
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))3 t& E  h  V) `6 p$ E( o5 d
  500.   {
    9 ~- R6 r( H* k1 @
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");- @5 `) P( M8 n# _2 w1 a
  502.     GetPathFromFullPath(szPathTarget,szPathSource);6 w- z/ L5 O1 F6 [1 m
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    2 I- r+ W! Q7 H; G" D0 l8 X: s
  504.     {
    9 f- O  `! r( p5 p
  505.       strcpy(szPath,szPathTarget);- Y2 d5 o, i1 q
  506.       SetCurrentDirectory(szPath);) b8 I- p4 W3 p& k
  507.     }
    % @) f# S7 |$ p$ q- p7 d& @9 R
  508.   }6 M$ [) f  m1 L7 s
  509. #ifdef _DEBUG
    ! u) ~1 p7 _! f1 [
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % }" }: d3 J( Y# w
  511. #else
    ) L  m8 f: t3 g. }1 x( x5 q
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 X+ H! B7 @7 C9 a0 ^2 p' E
  513. #endif
    9 H% l5 N2 Y# B: _$ h
  514.   {
    + ^  q9 H* o+ i1 F( H
  515.     char tempFileName[MAX_PATH];
    / L* R' R- a) f* H
  516.     strcpy(tempFileName,szPathSource);
    9 u+ G" q: h# ^, ?, I6 A
  517.     tempFileName[strlen(szPathSource)-12]=0;% o. K2 G7 J8 _+ f1 ?
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    - D8 c( Q. {+ R
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);1 t4 Z% T! [: ?$ p: t8 a
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);5 \; `; E2 H9 H/ B
  521.     return TRUE;, f! {7 X) u9 d$ b+ b+ t
  522.   }
    / I0 z. g  z" p- C5 C
  523.   // Nuke 0118: Delete run.exe
    0 R/ {* e6 a' L
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    " Z; D. Z: O* t
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");: G) ]+ F  g3 @2 w% b! W& v6 Y
  526.   if(!ReadCfgFile("Config.ini"))
    3 b0 j! V5 g. T% y6 A0 o4 L
  527.   {6 Z( s: x% I4 r6 S0 T  {2 M  K$ ^
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);7 `% v" d1 r+ h8 }; ?
  529.     return TRUE;& R/ I$ ^' t8 }, L: [
  530.   }
    ) L: e; R8 B) m  {: k' \2 f
  531.   HANDLE mutex;
    6 W4 S  j4 h( N. H4 t
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")): v7 `) ?4 Q7 |% W( e2 }+ W, {
  533.   {& @1 a, t1 Y# p6 V/ s
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    7 V3 r$ F4 E3 s0 M; N
  535.     {
    . a, u# S7 h/ j& P# n
  536.       CloseHandle(mutex);" j' L0 C! y3 V; b
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& f. {* _- E. U& i1 b6 S
  538.       return TRUE;
    0 _, z6 A! t$ \) ?  @- P0 f
  539.     }8 X( _" ]. f8 b) Z  R! j3 {- a
  540.   }  5 e1 l2 p* Z. p
  541.   CloseHandle(mutex);) \! O4 }5 e7 a* c0 n- G

  542. 7 [+ k8 E' H5 H1 w. p
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; q% v+ w9 t8 B% S7 i5 R
  544. 1 Q" N5 n/ N2 P% A( E
  545.         AfxEnableControlContainer();
    0 n2 N/ r1 ^8 @5 B# F  \
  546. 5 |% E% L: R$ [% Z. f
  547.   bCanUpdate=FALSE;) H* k; r' K9 w1 S, j3 ~0 u4 `
  548.   dwStartUpSteps=1;. a0 m4 W1 d2 g9 P0 ~+ {; @. g
  549.   dwProgramState=AP_NOTHING;
    - g) e% [, T) G
  550.   r- \5 [. E: [# M% {* o
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. ~, P, k$ z1 M

  552. 6 v- o/ q3 a& p7 Y
  553.         // Standard initialization5 V4 l0 ]+ b; F* m/ S* A% q+ ^
  554.         // If you are not using these features and wish to reduce the size
    1 y; O4 n# W3 @2 V4 g
  555.         //  of your final executable, you should remove from the following
    8 R% `5 b) F2 F
  556.         //  the specific initialization routines you do not need.  y& S, g1 s7 e& s8 v& q# O( b
  557. # ^" t  I6 S) X0 ]2 d. L, E( n
  558. #ifdef _AFXDLL6 i9 I" j( {( d6 w. @, {
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL+ A7 M3 H/ b7 Z( ^5 i% n
  560. #else
    2 s  L: D4 E- q1 v# M% T& y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 v, |) Y( o$ F3 D9 p' S
  562. #endif1 H& U6 S3 Z  Z: q; v3 G! S- x5 c) q

  563. 8 ~3 w8 G, f% u# F' f  e- O4 P/ c$ r
  564.   dlg=new CRevAppDlg;; W+ {5 M' A- R3 c; _
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    / `0 N# M8 L$ f5 `& P# d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ! v7 @; S) @& e- L7 h  B# ]
  567.   m_pMainWnd=dlg;
    % }0 c" Y/ g1 A* L6 |+ W
  568. - |  X/ l! p2 K
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    , K) A- Q, E: ]4 ~3 M, A" L7 E

  570. 8 [' U) m9 P6 m& d! F
  571. //  GdiplusStartupInput gdiplusStartupInput;9 B  K  g8 D' Q3 w( H; F  s) t
  572. //  ULONG_PTR gdiplusToken;
    5 ~9 F+ N' {; t
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    % y# q9 o; P. U1 r
  574. ! b; {' K' g$ v/ m( J
  575. //        CRevAppDlg dlg;
    7 y" w$ r1 n4 }$ k* s' C5 N, a
  576. //        int nResponse = dlg.DoModal();7 P; f) l8 t5 i. P5 q$ n
  577. //        if (nResponse == IDOK)
    : x( y  ~& t/ k/ y, k
  578. //        {5 m; z! _) J5 ]0 W
  579. //                // TODO: Place code here to handle when the dialog is
    , G; b5 O  v2 h1 v6 j) t/ H
  580. //                //  dismissed with OK
    2 |- o& }. r3 `% r- @; c
  581. //        }
    ! [) ]* e8 S5 K8 V' N
  582. //        else if (nResponse == IDCANCEL)
    / }2 v$ W1 {$ @
  583. //        {
    " {. `  m: t& l
  584. //                // TODO: Place code here to handle when the dialog is/ }0 E. y  e( m1 v. X) K
  585. //                //  dismissed with Cancel% D: H  {7 |5 X
  586. //        }
    6 e: b' ^9 D2 k& I. _
  587. 0 j0 T2 h% ?! C2 ?
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . J" X, y9 ]2 j! E# V9 Q. G
  589.         //  application, rather than start the application's message pump.; u. [6 [: m* @8 E1 v
  590.         return TRUE;
    4 q2 ~2 O1 @; ?
  591. }
    - ^: Z" A1 b! i' I  t4 h
  592. 5 {* B6 O8 d: `( K
  593. char *CRevAppApp::strtok3(char *pSource,char *token)) J2 W6 T' G; j
  594. {
    * r% p" V0 A: n8 i
  595.   int i;  O- c6 Z9 E/ g5 b+ d4 Y
  596.   char *szRet;% [: F' q9 W% q" \/ x
  597. 7 L$ b( Q5 h  h& v
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    / N7 p9 r% [" i
  599.   if(sztoken)
    - |: C) o) R7 k
  600.   {; x  R4 `' A0 }$ N7 R
  601.     szRet=&sztoken[itoken];
    9 y- Z* J7 I9 s; f8 u6 f; Y
  602.     while(sztoken[itoken])& }% ?0 ^. p+ e
  603.     {2 O/ [+ @6 h6 T  Z& ?9 X, }
  604.       for(i=0;i<(int)strlen(token);i++); L6 B6 Y, u& m
  605.       {* e. I0 n  R4 A/ |# h
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    $ a9 l2 T5 [0 y" a/ Y  Z
  607.         {
    % p9 q. f* T, D' H$ J* |' F( E3 z3 G  T
  608.           sztoken[itoken++]=0;% V% W% O; L% r
  609.           sztoken[itoken++]=0;( o* N' ?+ M- a1 r9 F
  610.           return szRet;
    ) l2 }5 A. L8 [0 }( e5 |. N) R
  611.         }0 U7 a! S3 x8 c
  612.       }) Y8 Q$ [9 O4 z/ l" T/ ?
  613.       itoken++;
    $ b! d+ V3 n2 Z/ j
  614.     }+ o0 E3 d$ w9 E) a7 G7 b
  615.   }
    $ o" i+ e/ W# n  R
  616.   return NULL;* ]& a# |8 b9 @) V
  617. }
    - z1 p. P  Q5 @( i- z3 l
  618. % R7 F& G0 Z( q8 C, K; y# T
  619. void ProcessProc(long Total,long Current)
    4 `0 L! y( D, z
  620. {
    . V& ^' g) g- C! M' g- T9 u
  621.         MSG msg;/ p4 |/ |! A( `9 r. T, F* A6 K# l
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    # u1 b. `  [7 a$ ?2 s  e; _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));$ |6 O  `) U4 g7 o' d+ W0 b
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    - t- W7 m2 z9 m1 J4 C" p
  625.         {
    2 g3 n! Q; F2 d: \4 ]+ _
  626.                 if(!GetMessage(&msg,NULL,0,0))2 Z# @6 Z* s- i
  627.                 {
    ( s% o$ T0 K& T5 n# x
  628.                         return;: K: U$ {* U# c
  629.                 }
    - c1 L6 q3 M2 x0 s" W
  630.                 TranslateMessage(&msg);
    # n2 j& k% _4 |. n1 I
  631.                 DispatchMessage(&msg);- {2 y9 g2 h) [3 y0 s1 w# E3 L. _
  632.         }       
    . h! L3 |' e5 ]* a  N! ^2 w8 T
  633. }2 i5 T0 h3 c7 U: X3 L, E9 r! ]
  634. 9 E2 P  J5 |7 f- k3 ?
  635. BOOL bFirstChar=TRUE;5 }. c- N- d+ _. k& A
  636. * P, Z3 b; L8 u) H! Y, V: _4 `
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    3 G/ U/ W& w- M4 N( L3 n- _
  638. {- h; O( C$ Y2 V# h
  639.         // TODO: Add your specialized code here and/or call the base class; ?9 S" A' _: y  }2 _
  640.   switch(dwProgramState)9 w: E! c8 n& W8 L( S& }* y9 \
  641.   {5 E$ O$ W- W$ j$ r" b& [) |
  642.   case AP_NOTHING:
    / K8 G) j  l3 _; |' J- l& j
  643.     switch(dwStartUpSteps)( ^+ _2 z$ q0 ]: |
  644.     {
    0 K/ N, s- j7 Q* S& ~# D/ V: m* o
  645.     case 1:
    2 R/ r( Z6 U4 m) q
  646.       {  g+ E/ R% b0 p& ?2 i0 Y* n1 U
  647.         int i;8 n! G: Q7 B- ~5 G
  648.         CDC *pCDC=dlg->GetDC();
    , n( X4 q/ v1 C7 j! [
  649.         HDC hdcwnd=pCDC->m_hDC;
    ' U; c# p2 C6 H3 {+ f: ?
  650. //        Graphics graphics(hdcwnd);
    , d( B  l9 p* J$ F7 T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");" _, v: l6 m  p6 w4 L6 K& c
  652. //        INT iWidth=bitmap.GetWidth();
      Q7 D6 ]! ?6 Z/ S$ y. ]
  653. //        INT iHeight=bitmap.GetHeight();! P# s9 N* Y( D* N. }! |. i7 G' y
  654. //        Color color,colorTemp;
    * L* [- }6 A0 |* ]/ \4 `" Y( U/ U
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)+ I# ^/ q+ h7 [0 w) J5 D. m3 L) F
  656. //        {' d: l6 S, l! u! Z9 |- s; w4 h- H
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++), P, K  {" w+ ^7 l1 i8 a/ B4 [" Z
  658. //          {& s: \) x! F; k0 n( ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);- f) ?" ]- P* a1 v. g
  660. //            colorTemp.SetValue(color.MakeARGB(0 k& T" o4 B4 j9 I- }. V
  661. //              (BYTE)(255*iColumn/iWidth),
    + F" U/ Y0 ~1 ]5 D8 t1 Q$ L
  662. //              color.GetRed(),! G2 u" l0 Z/ G; Z2 j
  663. //              color.GetGreen(),
    * a7 ]$ A& _' K5 G3 U
  664. //              color.GetBlue()));
    2 n! @; d0 Y4 U+ E5 Z. T
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ! w- v( H. Y9 {* O8 s& o) G( E
  666. //          }
    ( g3 Z8 _- [" ^8 B( j
  667. //        }, R# g" y; M, i/ N! K
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);) d  L2 T* f; i& D
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & K+ c  D, m3 |
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");8 p5 J1 E) W% l; T  C4 F
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 N# N# F/ u8 ^% ^3 x3 c# U2 @
  672.         for(i=0;i<240;i+=8)
    : c# C5 d/ M9 t% U: N/ f
  673.         {
    9 x# U# a! Z1 p5 C, y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. `  K! e# x6 u& f# ~- p
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 W+ U, A' O& w1 @! W3 f$ h5 T# r( Z: \
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 `( O" Q1 u  H. y6 j5 P
  677.           Sleep(33);
    ' c' o+ l' Z% K  G  m- U4 u
  678.         }
    # I/ z% X" y" o9 s" E, U$ m
  679.         Sleep(1000);
    - H/ z1 Y8 E* V  ^5 I8 K* `
  680.         for(i=240;i>0;i-=8)( S- W, @; M! C( |$ x# y
  681.         {$ ^3 {" f# G6 R( b1 z* J
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * @1 z& r7 @' Q" N8 G2 D" x- |
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ ?0 l, p) N$ e9 O
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% R, O  c3 }, A4 I1 S
  685.           Sleep(33);4 t+ w9 |- R. E8 t! x- @
  686.         }
    . o& y2 U) D: y1 ?3 N
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 y, h9 T# a( N: k' P) k
  688.         dlg->ReleaseDC(pCDC);5 I2 \" k/ _0 X; g! Y9 Z  x! L
  689.         DeleteDC(hdctar);
    7 a+ j2 A) o! t$ c* L
  690.         DeleteDC(hdcsrc);, D/ v2 r$ C  v0 `9 e- h
  691.         DeleteDC(hdcorg);
    % V. u# K( E1 J; n6 d# o/ E( ?! _
  692.       }  x! V4 C1 u- |$ c2 ^. P
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);& \4 [  r" S* I  [( V
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    # K9 F, x9 X1 x9 y6 L% h" g7 B% `
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    2 T# J5 q8 L0 {: C
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    8 o7 e1 k1 d$ u* g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 `$ y0 x* p  {+ p
  698.       if(!Dn.Connected())
    1 O; U) C& I8 q1 f
  699.       {+ d; j6 x; p0 b* G5 S  t# E3 S. {
  700.         dwTotalFiles=1;
    / K  J8 O) y' A. w
  701.         dwDownLoaded=0;
    1 N6 Q7 {* B- @* m6 J2 r! w
  702.         bSilentStep=TRUE;
    : C" z, z  D4 X1 P6 y. q6 @
  703.         bCompressed=FALSE;
    & v; {; X. i$ l/ a  q) }, k. p; }
  704.         strExtLocal.Empty();
    ( k& v: U4 g$ x, u) f" b5 @, f
  705.         strFullName="readme.txt";& A) \1 Q- n$ y& x- c. {
  706.         dwProgramState=AP_CONNECT;
    8 f2 s# s, w# |1 A
  707.       }
    7 S" `' f/ ?0 A8 J. U9 l
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();1 X) y9 v% e4 H) u% t* ~" P% h% |
  709.       dwStartUpSteps=2;
    # J% `: Y( V) s% E8 F
  710.       break;
    " Q8 ]! G* j8 y( Q) U
  711.     case 2:
    - C. d) M9 y4 d: L2 g- ?  [
  712.       {
    . w& a0 {+ W7 b
  713.         int iEOF;
    % H! K( ~( l) ~- n( j9 P
  714.         FILE *fp;
    , b% w3 v4 q/ K9 k8 W
  715.         char szString[512];  n2 Z3 S  I' {) a4 `5 D8 Q6 Y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ [; d- \' E7 U2 z: I" H: c8 M8 r* z) l
  717.         if(fp), U4 Y1 y9 q1 b
  718.         {
    & f1 |' z3 w! @# u3 e9 R" X* D1 A
  719.           do
    : H2 X8 a6 H- Z  H, f# r* _
  720.           {; Y2 M6 Y1 S0 X% |
  721.             iEOF=fscanf(fp,"%s",szString);  R( [& l* B% w
  722.             if(strlen(szString))' w& p  l+ o4 D  S
  723.             {
    3 ~1 q2 r. A. d' }+ f
  724.               if(bFirstChar)
    , Q# N3 J" W. d" _
  725.               {
    4 a! |. l3 K1 l) s6 S
  726.                 bFirstChar=FALSE;
    + B8 E, z8 K" n! ^* c! w9 b
  727.                 bConnectIsBig5=FALSE;' j/ [# n9 [1 F" e, Z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; q) z# a* g) [* }' ~3 N+ U
  729.               }8 p$ o) f) y1 A  A$ D3 n
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));4 q6 e& F. a# D! [
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));. h# ^# S* \/ a4 _. d0 G0 T( l
  732.               dlg->m_ListText.AddString(szString);* }- V, ?! z6 }  ]( T  ]( B
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; C! |; ~6 Y# t- o; ?- E) N$ b
  734.               *szString=0;
    5 K6 ?* C4 T4 e$ X8 @4 v
  735.             }2 U4 ]0 z' V% h# {$ ?5 S+ k
  736.           } while(iEOF!=EOF);
    3 S+ g5 T  U' t4 x4 |3 T. U
  737.           fclose(fp);$ T% J8 Z2 G, ^; L, d( [5 e
  738.           unlink(".\\DownLoad\\readme.txt");  i, |, y! n2 {! ~0 R3 b2 W# X
  739.           dwStartUpSteps=3;
    $ ~  }9 Y. q/ Q
  740.         }
    6 x* }6 Z% E2 A$ ?& b. r
  741.       }* m+ P9 H7 c/ ?
  742.       break;
    2 c" Y+ D$ @' a; U6 ?* d/ u
  743.     case 3:
    0 ~4 _6 N* K) {, c" H
  744.       if(!Dn.Connected())3 ]- g5 T7 K' ~/ h. ^. D5 X
  745.       {9 y- B" ~8 @2 {- z) z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    / b, V# p/ v8 [9 r: {7 k
  747.         dwTotalFiles=1;5 c9 C5 ~# }: _! G$ f* ]7 K3 z
  748.         dwDownLoaded=0;
      K& u3 w2 S6 A
  749.         bSilentStep=TRUE;
    # u9 @( v4 l- T8 n3 ~/ a: [" `2 O
  750.         bCompressed=FALSE;
    $ l2 E# f) X* g, d( e
  751.         strExtLocal.Empty();/ T4 m: Q, F. i& }3 c
  752.         strFullName="checkversion.txt";( X: U) g6 |3 D4 C+ C
  753.         dwProgramState=AP_CONNECT;: t& ^: m0 |2 J, G6 o
  754.       }
    # y3 G% k/ T9 H! l3 B) ^
  755.       dwStartUpSteps=4;
    ( b' p1 ]  Q6 O1 X# q
  756.       break;
    + x( v9 Y2 U/ u2 S* C" h, h+ ^
  757.     case 4:9 z" T' U/ A8 L8 F3 Q6 ]5 K
  758.       {; C2 p8 a& n4 s' B. f! c& ]' O1 C
  759.         FILE *fp;# k0 `. `. W, H
  760.         char szString1[128];
    ) l. |* m# ~+ x# z, ^0 k. ]
  761.         char szString2[128];" A; G6 g& j3 Z6 A; n$ A5 n
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; L, L) R4 Y, q+ X+ _; M$ g$ [8 R
  763.         if(fp)* R# V% @* \* a3 j: K5 Q& k$ O
  764.         {
    ) [* o! u4 x$ A' _9 Q
  765.           fscanf(fp,"%s",szString1);" C3 R% \1 k7 z; m# t# l  X
  766.           fclose(fp);
    ( _/ ^9 ^0 z) C/ v+ s" y* x7 I6 m
  767.           fCheckVersion=atof(szString1);/ a+ D4 Z$ E& r3 t) y7 q7 o2 i
  768.           fp=fopen(".\\checkversion.dat","r");3 \/ X; r, H/ m9 F- U: G0 w
  769.           if(fp); N% n6 o6 p( S+ f' `
  770.           {  l: ^% F* H+ K- i0 H
  771.             fscanf(fp,"%s",szString2);7 d1 D8 e3 {7 V1 i" T" P! t% X
  772.             fclose(fp);# }- T& W" I3 \, w
  773.             if(atof(szString1)!=atof(szString2))1 }' {) D8 d0 u: u
  774.             {
      M8 Y% a/ T, T' `5 E" g
  775.               if(!Dn.Connected())
    ; s- _, ~% D8 n: |8 G' `. h; M
  776.               {. f6 e) R2 }: j, e; Z% p
  777.                 bFirstUpdate=TRUE;
    5 h' b$ h- `/ W
  778.                 dwTotalFiles=1;
    # z+ N1 \& k9 e# z! K- `3 n
  779.                 dwDownLoaded=0;
    / K! v/ P. E) @# Z  l0 L
  780.                 bSilentStep=FALSE;
    ! x/ z& A  z+ A5 R% W
  781.                 bCompressed=TRUE;  k  Z4 L/ f: S+ R" L! B& X
  782.                 strExtLocal=".\\DownLoad\";
    ; D& l3 I8 p! p2 G$ f
  783.                 strFullName="update.txt";9 [- k4 Y* @9 H8 n
  784.                 dwProgramState=AP_CONNECT;% E7 S* O7 R7 s: R/ }
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" c- V# K- {/ M) P, H0 b( u
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 p0 O% y' ?  {3 C
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");  E! e) N, W( @6 t0 f

  788. , u5 O' C: s( l/ y& V
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 H6 r& o) f- D& D5 p, q
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ C; T- V. A! a  W6 |
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; B) m2 x. Y. a; H! j
  792.                 {' M/ K4 Q# F! z5 d6 {' E# D/ p' n
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    6 v. j9 [+ M+ `3 A6 L5 ?
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ' {$ @: O0 v: G- @- r3 B0 x
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");. s& p! G  j  K( A; W' j
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ v; y: k8 t, g# o3 f: b

  797. + @3 ]( `2 ^* g9 Y' a( U
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & ~+ p; d- B+ {5 w, ?) b7 W
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 r/ |! S5 k; u2 E# A: N& t% ~
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");/ a  l; V; b. u. g( ]
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! J  l) W5 M0 A1 l
  802.                 }" ~% t$ \9 r( W
  803.                 dwStartUpSteps=5;
    ; j/ g9 Q+ _9 Z# t
  804.               }
    7 k' {: R/ r: x; `- l1 |" E
  805.             }
      N4 ?0 ^# J% h7 Y/ X& U
  806.             else
    ( ~! ?; M5 S$ ~
  807.             {$ T2 m( D$ {* n7 Q: a
  808.               unlink(".\\DownLoad\\checkversion.txt");
    1 h, I+ p. y1 Y. n: D) C
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    2 `8 J. L; c% Q3 i+ ?/ r  _* Z- C
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + k" g# N  M4 J
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");# b% n( d, g& J1 {" Q" n3 w
  812. & l% d. i, u2 ]7 V# N1 t/ z" F
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % z$ E! z1 [" J3 y
  814.               dwStartUpSteps=99;
    6 M* Y3 ?# }& X) d1 t6 [. @
  815.               bFinishUpdated=TRUE;
    ' L: r# k/ W# [3 g; w  w- u
  816.               bCanUpdate=TRUE;
    ' _4 R! s" x0 D' c7 q* b/ J5 I
  817.             }
    8 t1 t5 F. M  g0 h7 ]
  818.           }
    & `4 h4 \$ \) h: j; y1 I" I! w
  819.           else
    ! m5 K7 Q' C7 [( K2 c! p- q
  820.           {
    ( h1 a2 E, S6 W
  821.             if(!Dn.Connected())+ U$ z) s* B: p* g3 h5 \$ A; I
  822.             {
      |2 c7 B; ^* `& l4 N- E) y# M
  823.               bFirstUpdate=TRUE;
    0 z. H5 J5 L9 N+ o9 p4 ?( }
  824.               dwTotalFiles=1;
    6 A5 w4 G1 y. `& ~' R; g, i
  825.               dwDownLoaded=0;& ~2 D- J$ r+ n  E( Y; i
  826.               bSilentStep=FALSE;
    $ L& X6 q0 @# E4 g7 L- E
  827.               bCompressed=TRUE;; }8 i/ X3 ?  K0 l
  828.               strExtLocal=".\\DownLoad\";
    ) P. z' Q8 E9 e* t& a' e% H4 c7 i
  829.               strFullName="update.txt";/ t9 T6 i( T" {; a3 `8 z6 c4 N8 Q8 n$ O
  830.               dwProgramState=AP_CONNECT;
    , C0 f, n# r0 y- d9 O
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 o- X$ B5 p  L/ {: \
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: g' J4 Y+ a; w' r; S
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");; {, a1 n% `1 H" U8 h. A& a
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 Z7 X0 L, M: }" l8 _
  835.               unlink(".\\DownLoad\\checkversion.txt");( V0 x9 h( ]6 H# n! n  f4 {+ j9 F& U1 ?
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . |2 y6 i. R3 ]+ l$ |
  837.               {
    ( X+ ]4 i" l+ R# |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    7 `; ~1 Y6 r0 U4 _4 d# e6 z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");, @) H* O3 ^$ U9 K+ l% N
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    % g. \$ C5 p0 T: ]) T
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& x# V0 l( U  n7 }4 E5 v
  842.                 ; U$ ^2 {3 b" D9 r# H
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! A' ^( Z. J+ D8 S
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# G& |3 C# i! \. y/ z  Q) g+ a
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");0 I  |4 C% h7 _4 p$ s
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      w2 A% I$ G2 D+ x6 T
  847.               }0 V3 S1 L0 A2 H6 y* {
  848.               dwStartUpSteps=5;- p) B8 _% t* k% l+ v- H% C
  849.             }; ?) w9 q% Z: O# h. r( t
  850.           }- O: c  i: x/ _6 _" V3 X
  851.         }) D& w$ z$ H4 X1 r3 O
  852.         else
    8 G# U5 U& `: M, Q5 i7 R
  853.         {8 @9 n* R% T! S2 W  j8 H: B
  854.           dwStartUpSteps=3;
    + w9 c- y$ ]! [1 z( A" J
  855.         }$ s: V' ~! Z1 o' n6 A5 [! ^, t1 \
  856.       }0 G$ J$ v) ~$ {* W2 ~6 W$ ^
  857.       break;* \0 u% E7 w& O  P/ D5 g- k
  858.     case 5:2 }+ B. P8 T4 o8 {' w
  859.       {
    " s" I6 P8 N9 h  ~% F; @; }8 B
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)) K, Q+ k2 ~+ O0 z, [# D
  861.         {
    + o- j0 c2 P' ~  t
  862.           int opt_overwrite=1;5 W6 z/ H5 J* c  B5 J0 \
  863.           int opt_do_extract_withoutpath=0;
    - D* _+ g& G8 j2 `; ~
  864.           unzFile uf=NULL;2 V; L) z/ X# w# D2 i: C0 N* `1 W
  865. , L% {! ~( P) n4 j, R5 W
  866.           uf=unzOpen("Wsa.zip");
    7 V7 F9 b) N. E6 o
  867.           if(uf)" E, E* C7 [9 g- Y' N% t. m  L9 ?
  868.           {
    8 M& V% w( E( @+ z5 T; Q
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);' N0 \8 e' F- H5 s$ q4 T- }4 t5 h- U
  870.             unzClose(uf);9 y" Y1 q4 o$ }0 C; w
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ! N' k- S- G2 K' B, p6 A4 L
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    , J0 E6 r: |1 M% I3 _- I" q9 f
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    . k/ Y, U, N; F5 x" A7 Y8 ]) J5 y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / u' i8 T+ ]* l% v4 R
  875.           }8 V! e; {9 i9 D6 S/ K1 t
  876.           DeleteFile("Wsa.zip" );% ~( J% \/ K5 I/ L9 O
  877.         }6 W1 y  Y2 M* e! L: V: L

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

評分

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