找回密码
 立即注册

CSUpdate.exe源代码

[复制链接]
洛小枫 发表于 2018-1-26 20:48:40 | 显示全部楼层 |阅读模式

. P; h6 s6 K# j# ~% e! @
  1. / RevApp.cpp : Defines the class behaviors for the application.
      O9 Y& G5 Z* D
  2. //) a) |$ s1 U' F" f1 P3 V

  3. ' `' M7 w5 m! ]$ i3 s
  4. #include "stdafx.h"
    + j9 z: s% v9 L& a

  5. + c+ i* n$ W8 x( ^: Y0 S4 J
  6. //#define UNICODE
    : ~9 e  l3 A# f& ^! g1 c
  7. //#include <gdiplus.h>
    * j( W9 x+ K8 @; ]( s
  8. //using namespace Gdiplus;7 M9 u: J3 f# g0 X$ }

  9. - L; A. }8 v2 X" K7 L3 B
  10. #include "RevApp.h"
    , B0 T: n' A% {1 z0 c
  11. #include "RevAppDlg.h"; Q2 w8 v) r+ g# V6 H
  12. + y1 r$ ^) R' c. m  v
  13. #pragma warning(disable:4786)  ]8 o) i0 ?) c: o; @
  14. #include <map>
    $ G5 p7 c* g' y( i
  15. #include <list>" k) N& q5 r& _
  16. #include <direct.h>
    + o" C: ?5 ~# |9 X9 Y% K& ]9 J

  17. . A3 ?: z: R' C0 Q$ I
  18. #ifdef _DEBUG
    ; q' T( g" I% E5 T& d9 h: l
  19. #define new DEBUG_NEW# n9 X; }* |$ a$ I4 z
  20. #undef THIS_FILE$ F) W7 L. Y# S% i% c2 a
  21. static char THIS_FILE[] = __FILE__;
    * z" P2 Z- L% @
  22. #endif
    6 d+ _; z9 c. x% H' ~+ o5 Y6 l
  23. #include "SkinResDef.h"8 ^$ Q, I8 E4 p1 ^; j; g* y1 ?4 p
  24. #include "ChangeBG.h"
    9 @1 B& a9 F& p; [+ Y
  25. #include "AFXINET.H"
    6 y1 T# k/ P; J1 x' w% q

  26. , C: X1 }' [* T6 z- Y5 T
  27. #define TRADITIONAL_CHINESE 0
    ) H2 k7 Y: f; f1 b7 C. c
  28. #define SIMPLIFY_CHINESE 10 G' W4 I: j0 [
  29. #define ENGLISH 2+ `9 d5 z6 r1 F4 ?' a2 G8 |: G
  30. int m_iLanguage = ENGLISH;+ ]0 y* j9 S2 W$ r
  31. /////////////////////////////////////////////////////////////////////////////( o7 G( M$ h* P" P. i; ]
  32. // CRevAppApp
    9 m  h: e- x4 ^9 b1 \: q0 P. [+ a3 R- A

  33. * f) e' u% i- ~, ^9 Z1 b
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    5 F, e% B# v6 C1 @
  35.         //{{AFX_MSG_MAP(CRevAppApp)
      f# Q4 n- t/ Y: r* {. i' g
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ) a& V$ V2 h  y9 v
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!, ^& T& g& x4 G7 k  F
  38.         //}}AFX_MSG6 r) l/ U: T- W1 j! I
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    + T" T0 \0 N8 t4 A" g3 U) ^
  40. END_MESSAGE_MAP()8 v; r/ m% A; X( |1 v" Z

  41. & O1 A4 }# F; J8 R3 m. K: k$ B  S  q
  42. /////////////////////////////////////////////////////////////////////////////9 I" B$ C2 J- M+ P: ?
  43. // CRevAppApp construction1 |6 o5 h( ]7 Z, h' G* E

  44. + x" I  H) W/ @" V/ b$ @5 H
  45. CRevAppApp::CRevAppApp()
    / V1 m; G9 d2 b4 w, B
  46. {+ e. g' S3 x% r+ E2 Q1 N! J2 l
  47.         // TODO: add construction code here,
    6 g0 i/ k5 ?7 ~# k4 h; A5 k
  48.         // Place all significant initialization in InitInstance
    - g' @1 b1 S2 h, D7 V
  49.   bDisplayIsBig5=FALSE;
    5 h- M+ X7 D) F: j- Z9 h7 G- o
  50.   bRestartUpdater=FALSE;* p( t5 I- a5 h( z* g
  51.   bFinishUpdated=FALSE;5 r8 ?! B  \; g0 j) g
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    5 h5 B) H% U; o
  53.   InitChangeDataBig52GBKS();, p4 I* p* K" s/ W% q
  54.   InitChangeDataGBKS2Big5();
    ( |7 P1 a! ?7 z( ?, @! U
  55.         //$ E1 ^* `% E! J9 `
  56.         bClickRunExe = FALSE;" d; n, n" c+ Q6 {
  57.         //
    4 T+ r7 p) W; s* O/ G* Z2 F
  58. }! b( p2 a( R3 A

  59. 1 S3 B7 I5 s7 y- C- S" v: R0 R7 }
  60. CRevAppApp::~CRevAppApp()
    ) T2 \  M+ S0 g9 o
  61. {. f0 _) W/ g4 J2 r" n
  62.         // TODO: add construction code here,* T, P) x3 o* ~
  63.         // Place all significant initialization in InitInstance$ G/ m% o/ C% T% l0 G  a' H8 S
  64.   EndChangeData();
    ( c2 z7 X: a5 k9 a0 U
  65. }
    / R+ u0 T& N9 p
  66. 5 o$ c  B, Q& |2 ^2 x
  67. /////////////////////////////////////////////////////////////////////////////- Q( A$ A6 g4 u1 k5 z( y) c
  68. // The one and only CRevAppApp object6 i; M8 X$ q- N& S

  69. $ z* {' d! g9 T7 C8 [+ y
  70. CRevAppApp theApp;
    : E: v; A. I. P* e- j4 M
  71. ( h6 t, n! g# V* o7 g
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    & `$ k$ v( p& O) _* o
  73. {1 S% [$ L) c/ h, S
  74.   int iEOF=0;* d) f: X3 b  a2 N! v
  75.   char szTempName[MAX_PATH];: S+ w# V& ^$ a( b# W* u- F
  76.   *szFileName=0;, X( @3 e" C" U
  77.   iEOF=fscanf(fp,"%s",szTempName);4 @- m0 X, y) b* A2 v
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
      A; h6 O, C0 @$ Z6 J7 F
  79.   {
    , K2 |# z+ d1 @# d( o
  80.     strcpy(szFileName,&szTempName[1]);
    9 P1 E) V/ G# H7 x4 ^
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    8 a! Z% f7 L" a! ?( f, l
  82.     {0 ~6 h3 b) @# I" o
  83.       iEOF=fscanf(fp,"%s",szTempName);- D$ `* E- l! q* c' r  P2 \5 D
  84.       strcat(szFileName," ");  b5 k. B% N% |5 u0 a
  85.       strcat(szFileName,szTempName);
    8 T7 b& _6 ^9 w  e7 d
  86.     }2 _4 Q' W# Y0 @. Q8 _! h
  87.     if(strlen(szFileName)>=1)& @. ^5 _: U6 t& a
  88.     {6 J) r  ^, O9 A9 m: K
  89.       szFileName[strlen(szFileName)-1]=0;
      s+ \( }$ U! n+ f1 p" T( S
  90.     }9 q- _/ i4 Y& Q. H& a
  91.   }
    ; ^* e% f1 Z: q/ T6 ?
  92.   return szFileName;1 X. z. c& h/ F- b9 {5 N
  93. }' }! f! i$ Y2 e8 j) T% Q! ^) `4 W

  94. $ o7 Y# K1 Z7 }5 h. i
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( y! {9 o4 i4 U+ e. B0 s% ?
  96. {% S* i8 Z, j, X; M9 X5 |
  97.   FILE *fp;- R- ]/ R6 s8 x2 `' J- B
  98.   char *key=NULL;
    , u. m# J# Y8 N' Q$ j' l
  99.   char version[MAX_PATH];* w$ x# J% M% \9 `
  100.   LPUPDATEFILE file,olds;
    ( Y& e4 s' o/ L5 I, u& y  O$ w
  101.   std::map<CString,LPUPDATEFILE>::iterator p;4 ]) |! Z+ `  U( b
  102. + m8 M; A3 b9 u; g2 x. t; x
  103.   UpdateList.clear();5 y! @1 Q, ^" {+ h
  104.   UpdateFile.clear();
      y) ]" p, i! a" \
  105.   if(GetFileAttributes(filename)==-1) return false;
    & i+ I. a: T2 L* A/ b! P& b
  106.   if(!(fp=fopen(filename,"r"))) return false;
    - b. R  W- t0 `. f9 M- k
  107.   fscanf(fp,"%s",version);5 U+ Q' j9 f* C5 i; I* f, a9 h! Z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    - n8 |! L7 Q4 P& U2 K8 d/ T
  109.   while(fscanf(fp,"%s",version)!=EOF). @) U* V9 v0 ~
  110.   {
    " v9 y+ J0 r% I5 ?
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 w1 |/ Z! v9 Y/ A8 O' u
  112.     fscanf(fp,"%s",file->path);3 w  _, y; t& I9 G% x
  113.     ReadFileNames(fp,file->file);
    7 L/ p7 w" B: a% Y: z2 c% B. f
  114.     strcpy(file->full,".");
    / a& d2 C* Q' J* u6 T5 j
  115.     strcat(file->full,file->path);
    9 c. {4 D& J, S/ k) q2 F2 @# b
  116.     strcat(file->full,file->file);
    8 E+ [3 X- W" b1 d! U3 I) F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())$ l3 B- {+ J) X+ A
  118.     {+ A4 @) V& C) n& V' Y
  119.       file->vers=(float)atof(version);/ V: r( [; g; k3 ?) |  U" I$ E5 }: P
  120.       UpdateList.push_back(file->full);  [* Q" k( Z4 M
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , c: w0 B3 s9 }) [: u
  122.     }" Z& P+ J+ d: N
  123.     else7 q$ Q% h/ K8 X, M8 l
  124.     {
    8 A; S# T" z8 o4 o
  125.       olds=(*p).second;# A2 B7 a2 d  r, s* T/ g6 d5 \
  126.       if(olds->vers<(float)atof(version))
    1 R/ ~5 C$ c! @4 {, W+ _
  127.       {* q1 }! Q& w* K3 M  X- v
  128.         olds->vers=(float)atof(version);8 K+ E1 {9 V: U" |+ w5 |
  129.       }
    ' g0 ]9 V7 {8 B/ _/ R
  130.       free(file);
    : z: Z. Y$ C% d* H
  131.     }3 o$ A/ p8 W7 D7 k# _* U: a2 v& n% w
  132.   }
    $ z! N3 A' k: P, Z- P4 j% A
  133.   fclose(fp);
    " B9 W  }. O8 v3 Z
  134.   return true;
    0 m1 t1 ^* a* _+ H1 `4 g
  135. }5 t5 d  ]! }2 R6 B% ]+ `- Q; w5 A

  136. ( }  j+ |, E" ~: ?
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)! v; j" n: D, ]% i4 e
  138. {
    : O3 d2 I$ r& k. \/ Q
  139.   TCHAR  szFull[MAX_PATH];
    6 S  y6 J+ D" p6 t/ t! ]* z( q
  140.   TCHAR *token,*inter;. J5 v' `7 @9 S) J5 A
  141.   *szPath=0;
    + T7 Q- s  p1 r2 G% r
  142.   strcpy(szFull,szFullPath);# R. x" Y* S2 Y) ~3 P( s- N
  143.   token=strtok(szFull,"\\/");( ?! @2 i+ y7 c, b5 \" Y  R
  144.   inter=token;
    $ j7 F; L. g) x+ [7 Z
  145.   while(token=strtok(NULL,"\\/"))) D. N# r+ V, e. R( e, ]
  146.   {
    / ~. x) Q  w0 G: y
  147.     strcat(szPath,inter);) U: ?/ o; b+ c! o
  148.     strcat(szPath,"\");
    5 v! J6 [- J( }5 t4 r2 V
  149.     inter=token;
    : v& ~: X: m# g$ w3 a7 i- U
  150.   }% Q9 {2 g* T3 S: J- B' g  s
  151.   return strlen(szPath);
    * Z& t' V: l9 M# O! U6 R( K- z0 t
  152. }
    5 z; c, @" n& p

  153. 2 d" r! @4 Q3 g! g; v6 m
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% |$ U" J% T6 S( T
  155. {
    3 x7 v3 T( O% A  ~5 X0 p6 Y9 h+ M+ C/ N
  156.   DWORD attrib=GetFileAttributes(Target);
    . l$ K; ?! {( _7 j1 a9 a
  157.   if(attrib!=-1)
    ) ]! p8 P0 T) W' A1 g
  158.   {
    , O) T) _6 \( E- \5 K
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))& e# N" H- `, K
  160.     {
    # E( m! ^1 E+ h
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);$ Y' Z, F5 {, ?& U5 T# j
  162.       SetFileAttributes(Target,attrib);
    * G* s/ [0 i; E+ `* F3 B1 J, ~
  163.     }1 d7 P0 w* E8 L8 b; h
  164.   }  H: z3 y( z+ ?3 R) Y, F8 T
  165.   CopyFile(Source,Target,Erase);
    / p+ G: W+ p, e# }- i7 I; M! k
  166. }" d8 ^' k5 c1 N% F! ^
  167. 1 ~0 d* o2 ]8 p' E
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)" i0 Z: M( u9 h' ^* E+ f" w
  169. {
    9 N9 O* P* V" G" ^, k
  170.      FILE *fp;
    5 d, K5 y7 ]& z6 Y, C
  171.      char  szBuffer[8192];$ \& m5 H3 z- }: [
  172.   va_list  argptr;
    " a4 {) v5 C8 a0 f7 o

  173. $ j! E$ p; g$ ~. `. A+ @
  174.         va_start(argptr,message);
    , t1 n, j/ \, _1 B
  175.         vsprintf(szBuffer,message,argptr);0 C( \6 \$ t  Y7 {0 j
  176.         va_end(argptr);
    ( y/ V$ Q; N1 _" I, |: H; p
  177.   fp=fopen(FileName,"a");
    1 }: |  o+ k1 ~: v2 v
  178.   if(fp)( b& A: X7 U* f3 m' ~1 n
  179.   {
    8 ]% R) m( P/ O& Z$ s. ~; u
  180.     fprintf(fp,szBuffer);' n" w$ L3 W/ t( @
  181.     fclose(fp);
    4 O( @& m9 c* D. c  z% l9 M; d
  182.           _flushall();/ f) M& H) ~+ f7 V' H$ Z, y
  183.   }
    , P) S4 H# F  @0 P, F
  184. }
    6 z9 W/ f- G& i7 d& i6 J! v, J. e; X
  185. 3 P& l' H7 x) Q+ A
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    - U5 i) A4 q: D7 R. ^$ x
  187. {& h/ P" s) _; P8 e6 ^
  188.      FILE *fp;+ D0 f, ?( G9 g. g6 {+ M
  189.     DWORD  attrib;
    + q6 T" \8 s( X; O; l# P
  190.   attrib=GetFileAttributes(FileName);
    % z$ I8 a/ w7 x
  191.   if(attrib!=-1)
    1 E& H: U/ z) q, ^
  192.   {0 z$ F, w3 s; D# x
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      m) w. W2 a9 X  q6 x
  194.     if(!SetFileAttributes(FileName,attrib))) I" X* N; B( P$ L% _# ^" z
  195.     {
    ( H6 [3 L9 O7 z1 Q
  196.       return FALSE;. ]/ L' _* ]/ l+ U
  197.     }) R$ V" d+ W. i' \0 m
  198.   }3 S0 j2 u9 m# W7 Q- y
  199.   fp=fopen(FileName,"wb");6 o, g7 N: D9 w; q% D3 q: W4 v
  200.   if(fp)
    3 |9 ?/ E; P6 i5 a
  201.   {% l/ ~6 `( E& \- i1 d' ?8 @% N
  202.     fclose(fp);, D7 }  ?  y' f* Y) S( x( r
  203.   }5 W7 ?" G  w4 s: p: e3 r
  204.   return TRUE;0 u" E9 i0 M- t: R2 S* A. W
  205. }
    $ U+ f+ p6 Q- u4 R! |
  206.   B) o/ \9 m; j# V$ [
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 R" F! I0 t, z9 z
  208. {
    6 t  V: E1 M8 E
  209.   char filename[MAX_PATH];
    5 k+ g4 n2 f! ?2 M4 J
  210.   LPUPDATEFILE file,olds;# V7 V/ l2 v1 G- y: j3 ]; ~7 O
  211.   std::map<int,CString>::iterator i;& M0 k$ \& o! t( t* w. K1 y: o
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 k+ D( E% l- s+ z
  213.   std::list<CString>::iterator l;
    / O5 I& E% m5 j8 |4 p" N0 ]; U
  214. * Y$ u, }5 i$ h/ M/ b$ w
  215.   if(bFirstUpdate)
    $ Q3 d/ ^, L! ?3 t3 \
  216.   {
      s" A; T3 N9 P# @# w
  217.     dwCurrFile=0;. a& {# t4 t( ?0 p, F
  218.     bFirstUpdate=FALSE;
    ! q4 x6 u  V8 N% }
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 T# f( x) J) T
  220.     {
    5 S5 Z/ P5 r0 F  b. H' x( W2 t
  221.       dwTotalFiles=UpdateLocal.size();
    % R. T, O( {6 i, m6 ~: c. b
  222.       dwDownLoaded=0;
    # b. q$ t$ O1 `/ }
  223.       bSilentStep=FALSE;
    * J4 g4 y) L  ~7 {0 k
  224.       bCompressed=TRUE;0 \+ m- Q) n1 a6 {8 u
  225.       strExtLocal.Empty();" k# ^, T  @' H1 v3 C
  226.       strFullName=(*i).second;3 P+ c4 h, k% ~/ B5 X. g4 I4 s
  227.       dwProgramState=AP_CONNECT;5 C! L% i" `5 Y& D* |/ A- e
  228.       return TRUE;
    6 u$ h# Y6 C2 C, H! u6 R- R# \
  229.     }% e+ W; M4 K6 K; d4 g: t5 I" r& V
  230.   }1 M, B+ c; ^  ^2 x( j- U  ^! f5 E0 D5 ]
  231.   else if(bRestartUpdater==FALSE)
    6 ]5 {" \& m5 e4 R# [: t2 l
  232.   {8 i6 W! B( v# G5 _1 u
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    % m0 e; q  N# h5 z$ C) v
  234.     {
    ( ?7 F9 f2 w& i0 Z, [% @
  235.       file=(*p).second;
    1 H. q) a9 s# |! _
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())8 O: F( B$ U( M& N8 H* V
  237.       {
    2 e0 A3 P% a  `! H' k9 w3 W* S
  238.         olds=(*p).second;& X) F8 h0 M, V
  239.         olds->vers=file->vers;8 ^5 \3 I; L8 n- V
  240.       }
    ' ?3 e6 J6 t7 m) ~5 O/ P3 L* g  `
  241.       else0 w3 x8 \; C) ]8 M, `3 d$ h
  242.       {
    % T% k0 E2 Y7 d) v) ^  x4 x+ ]' H
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) _5 a1 e4 A, K: e: B/ y* ]
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    7 `# o% {/ u6 d- b0 t: L. G* R
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));: D, J3 ]# p. @( D5 Y* D5 y: Z3 ?2 j
  246.       }  \" F! `# t! x
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % Y8 l5 l0 w9 x. w) c- h
  248.       sprintf(filename,"(%s)",file->file);2 I9 ?. ]6 d1 y  t2 \
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 f& K' K* v2 r% i
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    * F9 e+ z' a' l5 f8 v
  251.     }
    ( d% Z3 q7 c! V* h4 K" I! A
  252.     dwCurrFile++;
    . Y/ }; P" p9 P& r8 X$ T4 g6 N+ a
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# C9 Z7 c: L  G
  254.     {
    ' J" ?+ e3 E" _# Q. b! E) z+ R
  255.       bSilentStep=FALSE;1 c5 s8 @' R0 R: {0 ]
  256.       bCompressed=TRUE;) `; {( L/ b4 k
  257.       strExtLocal.Empty();- E1 u  e1 H8 A
  258.       strFullName=(*i).second;
    $ g" Q# W" p0 D5 |# H
  259.       dwProgramState=AP_CONNECT;5 A# E; o" t/ s
  260.       return TRUE;
    ; ]/ F; V. h/ ]; T2 V1 }4 h
  261.     }2 s6 p9 Z1 \: e; ^8 D/ w
  262.     if(!bRestartUpdater)2 U8 ?- w1 S8 i; @7 c
  263.     {3 i- l7 j) ~! O5 N, B; P, \
  264.       int iCurrSize,iFileSize;1 }5 k4 g" O% I$ U- k0 ~, Z. S
  265.       iCurrSize=0;
    5 W. h% |3 G0 U- f. C* U6 ]3 M
  266.       iFileSize=UpdateList2.size();  O5 t+ J( u/ X8 }5 L2 l. V
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    # t* r, |5 n, C" A& X
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");! w- [& x7 {4 w& P  h( Q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    " J; V( _3 n# ~: h
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- w2 J6 g9 `% C
  271.       Fclearf(".\\update.dat");! L3 K0 E: F1 e7 M* l" ^  B
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    - \, a" U. t0 `" e' l3 H" ?3 a/ w
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; e& W6 K0 d; |- w3 P8 g  R
  274.       {
    1 w  Q9 L5 k  M( r# D
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())+ E/ h8 z6 v% \
  276.         {
    : O$ r- g/ w' c) v; O2 ?
  277.           file=(*p).second;
    " G8 O. T+ p  r5 W
  278.           sprintf(filename,"(%s)",file->file);) _$ N  ^1 h) K* U+ T% w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' I2 s0 p; a8 v$ S; ^. e
  280.           iCurrSize++;
    , s  A, {# |! `5 ~. z& C7 i4 Y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / R  U3 _2 c" H' c
  282.         }+ h% z' ]# ]' s! f' m8 L
  283.       }
    6 d5 X; \6 ~" N" c1 H! T
  284.       unlink(".\\update.txt");
    & G) O# _! @* S3 e' v  {8 _5 I
  285.       unlink(".\\update.tmp");: \4 A" E  v; l, n4 x, y" ~" B
  286.       Fclearf(".\\checkversion.dat");' X  _9 d: J4 P) y# f) h8 `9 a, d' P% F
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( e- e3 u, ~1 p4 l" I& q) z  k
  288.       if(UpdateLocal.size())9 z$ z" m! a) a2 ^! ^
  289.       {
    0 v, D% g6 m6 \; `& Z! m7 W
  290.         UpdateLocal.clear();
    ( J5 p* s  B, r1 t2 ], [, Y! r
  291.       }
    2 k6 o) ~, r( R) w" z
  292.       if(UpdateFile3.size())
    ; N, f: ]$ X! W! G% r# ?$ ?
  293.       {, O: S( U4 Y+ |: \$ x0 l0 k1 j& s
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % B# D. x7 |6 H, ^. F
  295.         {# F' P# }  d9 k) z  }2 O
  296.           file=(*p).second;
    8 L, h/ M' w3 r% M! H9 n% T. K% k$ p
  297.           free(file);
    ; a9 U5 w8 u9 p( I; v6 L. |
  298.         }3 v' y8 L. p/ D1 B( W
  299.         UpdateFile3.clear();
    ( ^8 g1 f* q2 }9 K( D0 b: H  H8 ]
  300.         UpdateList3.clear();
      M5 o* [2 n3 j% v5 o# B1 X
  301.       }
    , _$ J+ M2 }+ X! k4 s; q
  302.       if(UpdateFile2.size())
    8 `# @0 @# E0 z: \* ~
  303.       {  |2 [+ E4 [% G8 S$ S+ Z8 o
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)) j0 N# U% G9 V4 Z
  305.         {% \+ i. P* x6 \2 L6 e
  306.           file=(*p).second;% ?" n- R# N( N( E7 Z
  307.           free(file);
    / M1 Z5 W1 g  Z4 i  Z& G* B2 j
  308.         }
    , e6 X' c; F  z( R* E5 Y! g# ?
  309.         UpdateFile2.clear();: G4 L; C9 X% p
  310.         UpdateList2.clear();+ G) Q" L& A7 @% V8 f9 c+ ]: K
  311.       }
    ( o  O5 Y; g3 ^. w1 ^$ O8 H
  312.       if(UpdateFile1.size())) f: h! m7 k4 E0 D
  313.       {
    9 j& {9 f. m% p% s# P
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # M+ I* v: r2 v: Y8 b# F
  315.         {- g# D3 J3 ?- T$ e( Q! t& Y6 q) K
  316.           file=(*p).second;7 x8 l- d! s% t
  317.           free(file);
    3 m) B7 a" I/ K3 G
  318.         }
    9 e1 M+ E; ?, ?( c$ y
  319.         UpdateFile1.clear();
    6 I; Z5 e1 ~8 E5 M' [7 E
  320.         UpdateList1.clear();
    ; x+ [2 \% [- [1 y
  321.       }
    6 G( K% G/ b5 R; S- T9 C
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ @/ C, K8 M6 x- B$ @/ r
  323.     }2 B$ o7 b) w+ ~! b& ]4 d
  324.   }
      W2 J! E2 D3 g% ?$ o% Q" {5 T  A/ Y
  325.   return FALSE;8 A9 V9 ]: L- n5 T
  326. }
    0 g. Z+ Q8 d( j6 d0 D" A. j5 C
  327. ! }' l$ t+ m, K0 ]# Q! s4 N- n
  328. void CRevAppApp::ClearAll(void)* j9 c: c6 e, ^" W" h+ h. b
  329. {
    : q/ X5 }- f  d5 y+ Y& }# r/ T* T# ?
  330.   LPUPDATEFILE file;
    ' x9 b  [" {  S) S- H% o) s
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 L  g) Y) z. v9 o! b

  332. % e8 V9 x; F( N! D6 d) X6 S3 w/ N5 R! N$ k
  333.   if(UpdateLocal.size())5 Y- i5 S' _  \; q# P$ w2 p% c
  334.   {
    3 D: Z+ K0 n) ]$ H
  335.     UpdateLocal.clear();
    + V6 M: j' B# N2 H
  336.   }' b6 F; a- H7 e
  337.   if(UpdateFile3.size())
    ) C: ]5 y' Y1 [) z6 t4 F- u
  338.   {
    , h; T. g& t, M7 b8 N: V$ M, t4 [+ m7 K
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% _# U$ M& H4 M7 C0 _
  340.     {0 f$ ?$ D4 I4 D6 f% \
  341.       file=(*p).second;
    , Z1 A0 ]1 J* k* C$ w# b
  342.       free(file);
    5 G% \0 ~+ O; i9 A5 d' O, m' r
  343.     }
    % j! P8 R: I* T; Q
  344.     UpdateFile3.clear();
    9 C* ]2 f# K; }* h2 M
  345.     UpdateList3.clear();
    8 p1 A7 G; R2 V" i4 _
  346.   }# ?' y; |1 ?' h3 ^9 D
  347.   if(UpdateFile2.size())
    $ O0 I$ G$ H6 Z$ u, K
  348.   {* N% J: o6 I. \" ~
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" d, y# Z9 N: Z! @  b: C- M; q
  350.     {0 X1 G% u( B. z
  351.       file=(*p).second;" b$ `2 E% U" |- e/ K/ _4 ~2 s
  352.       free(file);" Z" n% E% o; s  m7 k/ g/ r
  353.     }
    # l' r  M6 D1 N- q$ ^% c
  354.     UpdateFile2.clear();+ _: s5 E/ S" Y& Y9 a3 M: j
  355.     UpdateList2.clear();! f7 Z- t2 l5 ]' [
  356.   }
    7 f+ }! x& r# Q: \' Q2 K
  357.   if(UpdateFile1.size())
    . b- N! F9 I( r
  358.   {
    1 y  F) K+ g& f. [7 R4 A" J( |
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* R$ B5 f4 Y. C: G
  360.     {
    0 {. ?: o  h) k  _& @- E4 y
  361.       file=(*p).second;
      @/ X/ }4 L/ g2 l
  362.       free(file);) \* o; m% A0 `1 t
  363.     }
    ! {! |7 M4 |$ N5 |5 c1 G
  364.     UpdateFile1.clear();
    7 A) q1 P% |/ w) b2 s
  365.     UpdateList1.clear();
    & W. m& a5 m  Q9 S
  366.   }
    1 i' N. {: `* d* _# x& G: }3 K3 H
  367. }  
    ) g. Q& M0 A. ?( l) _
  368.   ' c+ R3 S+ [7 D) l3 m' n
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    $ A) G2 h/ u/ t: A
  370. {- e9 C/ d. H0 e+ V/ }* ]
  371.   int c;
    + b0 ~  T! x( m# k
  372.   LPUPDATEFILE file1,file2;' }8 C  F" g+ [! K( K" m
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ; A3 ]  m1 e0 M6 L" ^3 R
  374.   std::list<CString>::iterator l;9 N0 S) _8 ^8 q" Q

  375. 4 U: M- W; O) D9 B
  376.   UpdateLocal.clear();1 u, W9 |, c/ ^' {8 c
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);) p. r* |  {. W; n5 p8 w4 z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    6 _' ?; P* _3 ~- g" U- Q  d8 ?
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    / R0 I$ i; I5 n. \$ F) [( Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);: j7 j8 Q) z% {  g% T' j9 w
  381.   if(UpdateFile3.size())- |8 f1 S  p0 j5 o# v( j
  382.   {
    * s6 @2 Y, s" W7 ?* P6 N! |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)1 @$ v, V5 Q( t' ~" l, |
  384.     {
    2 d2 Z3 D8 `; }  C7 _
  385.       file2=(LPUPDATEFILE)(*i).second;$ O6 P% q/ X1 Q2 @
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' S2 i* Z/ \0 u# b. v) G  C& e
  387.       {
    ; r1 o* r, ^( Z3 K) E3 h& L8 p7 H
  388.         file1=(LPUPDATEFILE)(*p).second;
    8 e" l( Y$ }4 T/ o+ S5 O
  389.         file1->vers=file2->vers;
    1 a# T" X$ [6 @3 r8 x0 j" w
  390.       }
    , H$ F, J: c" V. E, q5 K
  391.       else7 g- ^6 R! ]9 e. V9 G
  392.       {0 ]) b3 e; q) J  m0 R
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ h6 r: [# A% G$ ]) W, J. ]5 m
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));1 e8 j, W( z' M/ W' k5 j- t8 A
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));) x* Q8 E5 C$ n- n, n" h/ {
  396.       }* v4 ]$ Q1 ?  Q& e+ q' m8 W
  397.     }$ p% e) j* ~$ A. @
  398.   }
    * U5 E8 ~1 P" r2 _9 j4 w
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , c5 b0 ]9 C2 }" T5 L% C& f
  400.   {' A' y6 l3 m6 y4 Y) m
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! q% H7 Y2 T, A! t8 I
  402.     {
    3 Z9 u: z1 _" N! A" {* N' J& Z
  403.       file2=(LPUPDATEFILE)(*i).second;/ |8 N: j8 B  F8 i4 P
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - d8 L! W6 W+ V
  405.       {* \' P, d8 w* s
  406.         file1=(LPUPDATEFILE)(*p).second;
    5 x) O" ^8 s  T
  407.         if(file1->vers!=file2->vers)
    6 j6 N; l, L1 P
  408.         {1 i1 {9 |! ?5 s; n* m6 w
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 k/ v0 G. Z1 O5 W- f
  410.           c++;
    ' j9 x0 g& ?$ D& m4 `, {* y" l2 d$ Y
  411.         }4 d# J% z  \" P; {& j0 Z, r9 o: Q8 e7 n
  412.       }, P. [$ I5 ~: {
  413.       else$ S' Z$ [5 }" u' P
  414.       {4 b5 A2 w0 Y$ L& N/ {
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ G' y* Q% m1 g  F3 G
  416.         c++;! B0 s7 X- X0 H: M& I4 `
  417.       }
    & `& t4 u" |# E6 D1 J( C& p# ^
  418.     }! v3 {4 j$ a! c4 X! M9 M9 m
  419.   }( R4 `( B9 w8 E  l" T
  420.   unlink(".\\DownLoad\\update.txt");
    9 k* Y- Q. Y* \: E, H
  421.   if(UpdateLocal.size()) return TRUE;
    1 ]8 b4 J1 _0 {# t* j, B4 u+ Z4 g- u
  422.   else                   return FALSE;& C9 H3 d& X' l4 o  b" Y  h1 U
  423. }$ d0 P! r& O- k  @7 C

  424. 7 D7 W3 A" i1 w: T# B* {! T
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"  A2 `4 C! ?" {
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ! m0 T; A; k$ G

  427. 4 w$ }! R& ?: F1 T0 X1 [  v6 W. w" z

  428. ; n8 ?5 D" ?2 f5 }) N. J( c
  429. 5 J! ]4 B+ O+ E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 y- ~$ M' c: F
  431. {2 {) w7 @1 l4 H- [
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    5 e, Y) k% F+ N, I" r
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' T8 O5 Y' q4 p6 y5 O! ~
  434.   {1 c$ r7 n. e) ]/ R& P
  435.     char szLanguage[50];
    , E9 @' Y# R2 u/ j
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 W  v6 K2 v/ Y9 z# ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' O0 n9 Y, ?7 l) W- v9 a* o
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 }1 y  [7 f. B
  439.     else                                   m_iLanguage=ENGLISH;
      d1 a% l" y7 e4 |" l
  440.     char szRegister[100];
    - o& \. i& E' w+ a$ P0 I; E* d
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");2 u! U: A  V  h' m& [5 L
  442.     strRegsName=szRegister;
    " x2 q- q, O+ k* ~' }
  443.     char szPatchURL[100];
    " F% n7 H/ n* D
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- f6 f! h2 [* n  f
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# a( k3 q5 E0 `2 a
  446.   }
    7 `3 a) l9 E2 L+ I, k1 J
  447.   else) z/ }8 H4 H, u* W( x1 ?& h
  448.   {9 b# a, h4 \' ?" P. Y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);, f# r. {' F/ \8 s! d+ h
  450.     strRegsName=DEFAULT_REG_URL;
    ! e  a5 Y% Q0 [; _( U" B
  451.   }$ ^1 Z+ _; j3 q: R0 p& m+ W' P) r
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    / I$ U* Z4 F1 r4 k; C
  453.   {
    ! M% o0 o) N/ j) c
  454.     char szIP[50];' Z' R. m# X) Z5 w8 `) V4 C
  455.     char szDIR[300];  J$ f; \3 e- v( S  o, x/ ]
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))8 Y  k# |* x& Y9 O) |) Q! B
  457.     {
    ( H% Z4 v5 z4 P' o8 ~
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    - E! T1 u6 w) Q5 p1 ?; Z7 P' w
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");' B& p1 i6 Y  Q& y. l; i
  460.       strHostName=szIP;
    1 k  J9 h) h3 N9 ]: O) p
  461.       strHostPath.Format("/%s",szDIR);
    6 E7 d  d8 j$ Q# U* b' O
  462.     }5 a" j' K+ p# ]3 }. O- P) r
  463.     else
    5 R0 b$ n3 ]8 v3 C8 R
  464.     {
    ' Q& @/ M$ L) |# f: ]* h: o2 u
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / T& |4 }) g1 c$ l$ E. z
  466.       {
    - H7 U. W3 W$ Y) B
  467.         char szLanguage[50];
    6 p0 f/ X( D3 w
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 E$ p1 V5 C5 N: I# [3 G: K
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 T! L+ g) R8 }. }
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 @( [. ~6 E6 H+ z% w. d
  471.         else                                   m_iLanguage=ENGLISH;
    $ f! E* ^# W4 S! k! b
  472.         char szRegister[100];& h6 s) a* B8 H5 k2 \
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 N5 ?' E4 Q& u  O" f# e" ?% i
  474.         strRegsName=szRegister;$ j+ u. }. I  Y5 W2 T
  475.         char szPatchURL[100];) H" g5 H3 l' T+ y- O. V
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% ?& M3 x6 G3 k1 x7 z' j" s! z" s
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 T* Q7 ^& {' p- q
  478.       }
    5 Q& n$ L( c& v. v- [1 u
  479.       else
    ; a4 P2 f* @& a; o; F* K% G' \0 h% B. U
  480.       {
    ' M2 ?/ M; V9 @& ]7 a
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- a. y% a1 J; D
  482.         strRegsName=DEFAULT_REG_URL;' K' m( Y3 j9 A, H4 h4 E
  483.       }3 a+ E( m2 L; T- q3 B# A
  484.     }7 A9 p* Q# {/ Q' U! S
  485.   }2 w! J% v1 n5 n, P; f5 X- \- f5 A
  486.   return true;
      f2 f6 X# L6 A+ l8 Y
  487. }
      \6 E' d8 s; d% n
  488. & I( d/ i4 o  F
  489. #include ".\ZLib\unzip.h"
    ' w1 L! [8 q6 ]1 k0 \9 j
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    5 Z" V, B" f7 t" |/ x: q, C
  491. /////////////////////////////////////////////////////////////////////////////
    . s; E: e0 ?+ P- f& t
  492. // CRevAppApp initialization
    % J. R- L/ f: s6 }0 U+ m: ?" Z
  493. : r- R, F, z3 D
  494. BOOL CRevAppApp::InitInstance()
    6 F9 ]1 o" x$ e6 B1 y
  495. {
    * V) x0 c$ c/ H  M1 ~
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    4 }' ]8 ~/ a4 \/ b( u. w: L
  497. / U6 _2 w  w- t& p2 \
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);5 P  |5 }  V8 A$ @+ b- D
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
      ?$ x$ t+ x( j. ^* Y
  500.   {. ~( m( @; e1 S
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    # t5 f0 ~& ~% V* D0 s8 I/ H
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 }2 l" I$ y) d' v& \, `! u9 `, W5 v
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))- Y" v% w+ L7 I) A2 m
  504.     {
    ( b0 O+ b- t2 o5 \$ Y3 D- Y* q
  505.       strcpy(szPath,szPathTarget);
      e' R  H. M( X8 e4 x( E
  506.       SetCurrentDirectory(szPath);
    " `) E# z1 p) p
  507.     }$ `/ a% P4 M4 y, y
  508.   }
    $ q; M+ [3 x' G$ R9 A
  509. #ifdef _DEBUG4 B, b6 Q2 k1 h$ `# J8 S& c
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 Q! Y6 q* G7 C5 D4 \) @7 Y8 g4 r
  511. #else
    6 z6 L/ {* T* o1 _2 _9 s
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    : ?( f! c3 _6 e7 M. _3 ]* E" @1 r0 g
  513. #endif$ w) ~# I. r0 c3 E$ ]
  514.   {
    ; W& Z7 Q. P1 N, P
  515.     char tempFileName[MAX_PATH];
    ; z6 `9 G6 g! _! B
  516.     strcpy(tempFileName,szPathSource);
    : J% N1 ~2 T3 E/ c& p# Y
  517.     tempFileName[strlen(szPathSource)-12]=0;
    $ c& n2 t5 ^, K5 V8 a( B
  518.     strcat(tempFileName,"\\$CSUpdate.exe");' q; j$ e& j# Y" S0 x0 c
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);. U9 |3 d0 c: }0 B0 K+ P
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    * p' I4 g5 V( V6 K" O9 v) \
  521.     return TRUE;9 |$ a, d' Y! e4 k. }6 \" r! l  F3 D$ C
  522.   }
    0 W. j! D7 A$ Y/ C
  523.   // Nuke 0118: Delete run.exe
    8 P) ?8 |: {- K0 N7 Y& D* G
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    5 e+ A2 E6 a+ G6 S3 V
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");! U  u. o2 v: Z, J- D
  526.   if(!ReadCfgFile("Config.ini"))2 m" B( g+ L0 I" F8 F. l% V2 ]/ [  O
  527.   {5 a5 u! M! a) l
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    0 l+ l# ]# O5 w7 M# S1 H% R7 o) A2 H
  529.     return TRUE;
    " k! m1 c" B) H0 G; x  b
  530.   }7 K9 G2 q6 o, @% o) n
  531.   HANDLE mutex;, Z" x* ^6 @& a9 @8 C* \/ g
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    / b- _0 {% [: T9 C4 n
  533.   {6 K) p+ w. t5 S0 ^
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    - J/ T; W9 f8 M8 C/ R4 [
  535.     {$ R4 P2 P* i% C9 m3 `
  536.       CloseHandle(mutex);# u, m/ H5 n9 C& H  o# C/ J) U
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);1 t$ e. A  d. j$ b, L
  538.       return TRUE;& v4 v% O5 ^8 q! b  s* I
  539.     }: G+ B, A  p6 m# D
  540.   }  % m$ O2 ~. T: B$ v
  541.   CloseHandle(mutex);
    ) F& l. t3 T( c4 Y' j  ?. r9 D

  542. . h3 R  W* m5 `- u2 M/ p6 a2 Y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);& ?. U" O6 f" @0 U
  544. $ c  T( C" p- x1 ~) @! i
  545.         AfxEnableControlContainer();3 H- n$ i  q! {5 ]5 r

  546. 3 o9 K( }1 f4 \+ s( _- Y
  547.   bCanUpdate=FALSE;
    5 N; }* p& c% n& N
  548.   dwStartUpSteps=1;
    * `7 o; k1 O" d5 ]  O  U* |" g8 @
  549.   dwProgramState=AP_NOTHING;
    : V6 N, B( r3 K7 n9 A' Z# L

  550. $ R6 K# B6 X# l5 l$ k
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    % c% ?4 Y) w3 |: j! u9 P4 N

  552. % L+ x! Q  K/ G
  553.         // Standard initialization
    + G) M) T/ F% I. l2 V6 y6 u7 }$ E
  554.         // If you are not using these features and wish to reduce the size4 m2 I2 [8 a1 N2 u
  555.         //  of your final executable, you should remove from the following
    $ @0 S6 R$ \; g: Z! [
  556.         //  the specific initialization routines you do not need.
    : H  C. S. q! y4 S
  557. * b, J6 r/ I0 y1 [" E9 x* ~
  558. #ifdef _AFXDLL: F! q/ g; c; r! J6 |
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    8 _/ C/ q" P! _, i4 Z
  560. #else: U. V9 D. y% u  v* G
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    , ?) g( `  m/ A7 }  d0 ~
  562. #endif
    2 y) C' u5 Y3 E% Q& D" N/ L

  563. 5 H& O) R1 C& ^1 N+ H1 m
  564.   dlg=new CRevAppDlg;
    3 Z+ Y* {5 u7 d, s4 g
  565.   dlg->Create(IDD_REVAPP_DIALOG);- S/ K* t( w# v/ I' C
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    - I9 |8 x0 n9 O# W" V
  567.   m_pMainWnd=dlg;- d' h4 B( v& g  f

  568. : S6 f# P# ^" A' M
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);  f3 c7 R, q. E& j9 u0 ~; f' X

  570. % u' N: x* G$ j2 g
  571. //  GdiplusStartupInput gdiplusStartupInput;
    & w5 G" H, G$ L' v
  572. //  ULONG_PTR gdiplusToken;
    + J$ \5 o: b  R5 M* C2 ]( E3 O
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);4 Q& u+ M5 I; v( Z4 t1 q
  574. " o2 U. A6 }& h* i9 T! {* f+ q
  575. //        CRevAppDlg dlg;
    & Y: M& r- b- @
  576. //        int nResponse = dlg.DoModal();$ N+ k: B- S* j1 T
  577. //        if (nResponse == IDOK)# X+ l. k# N- B( D/ _
  578. //        {3 W% x% D, j$ \4 W8 M6 {, P
  579. //                // TODO: Place code here to handle when the dialog is
    ! X' d4 |. R# ?: u* Y5 y; m) w& r% e
  580. //                //  dismissed with OK
    ! b8 ]/ H; {+ c, f
  581. //        }, O: R7 e; q; n: |; D
  582. //        else if (nResponse == IDCANCEL)/ g. D4 {/ o; g3 q! e. e
  583. //        {2 C6 G2 V! X0 p" a) [! {( K$ g( {
  584. //                // TODO: Place code here to handle when the dialog is4 j7 Z  h8 |, A; H+ R: v6 s' C% v
  585. //                //  dismissed with Cancel
    . X+ _+ [$ D( f$ F  V
  586. //        }4 Q( X! T- ^, z% L6 o* H
  587. ' {/ Q% \, c- w  f0 K) g& |. T& y: g
  588.         // Since the dialog has been closed, return FALSE so that we exit the$ p1 q% h- i, ~* T$ ]1 ?
  589.         //  application, rather than start the application's message pump.
    " O" _. Q+ u: D8 a7 H1 Q
  590.         return TRUE;0 w8 c1 w( y# y2 ~5 d
  591. }
    + O" S9 D. U2 t
  592. 1 Y' Z4 H+ t. f
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    8 \9 Y* m7 L2 l
  594. {  y# @/ Y# I, B
  595.   int i;0 Q$ p$ E  `4 l. A$ b- d& b$ I+ Q7 e
  596.   char *szRet;. y5 ^- ~) f1 ?7 Q# S& |, Z/ c
  597.   P* A1 ?; y2 m* E
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    % f; B, c+ d* ^1 k+ l
  599.   if(sztoken)
    / P# d: h" u8 W9 H3 q: w% ?' O3 L( }
  600.   {
    2 r/ P. c# w( F/ v7 J
  601.     szRet=&sztoken[itoken];$ f, F$ W) a" E+ ~9 u0 b* Y
  602.     while(sztoken[itoken])! [5 F/ E( u1 y( R/ L8 }# W0 }& i
  603.     {
    & d" X  M' [4 ?2 g
  604.       for(i=0;i<(int)strlen(token);i++)( L& l" u4 b& P
  605.       {1 f- b. i* A! B% }
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 o+ ^" Y; Q& F
  607.         {
    / G" I) D7 O8 X- y9 S6 o- }* S
  608.           sztoken[itoken++]=0;
    6 o0 x$ F2 _& [! U1 u: }
  609.           sztoken[itoken++]=0;
    & H" m6 L+ d9 O4 r8 f
  610.           return szRet;
    3 n% m0 ^  L& P$ }$ Z5 M
  611.         }6 R! V; Z' ]9 p- P  x
  612.       }% @- Q) b0 e+ L) x
  613.       itoken++;
    " w% ~; q/ l) A: b4 w" Q5 d- D
  614.     }
    4 ?/ n! }. g! D) O, G
  615.   }
    ; G- M% j( V* ?/ @
  616.   return NULL;
    ; U3 c& B- S0 a0 t* r# h8 c
  617. }& `" F; z0 w- a0 [" f
  618. % q5 L  q9 i' o% p# g
  619. void ProcessProc(long Total,long Current)
    7 l& q  M  I. t; q
  620. {" _) q  P* \4 F: f1 m& @2 z/ r
  621.         MSG msg;& Q8 r, k2 p5 s- [' R
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    8 f8 r' j" f2 q# [: [
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    . Y' j8 S' t4 Y' u; r
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))% x* z; o2 l  ^, Q% m
  625.         {+ A- s+ P- E5 d8 ^5 U' @2 R
  626.                 if(!GetMessage(&msg,NULL,0,0))% G: y7 _0 e+ H! h
  627.                 {+ F, P: b. w( V; I7 Q; g
  628.                         return;
    - |+ g# \, q3 n$ W% [# o% i9 x
  629.                 }
    , r" k, W/ h9 o8 T" H+ A' P
  630.                 TranslateMessage(&msg);1 ?9 h: n" U+ E
  631.                 DispatchMessage(&msg);
    " N8 N3 N% t- x7 \- ?! w
  632.         }        7 ^$ V) }3 I  \$ H
  633. }
    ( [( Y4 F7 p) L, z& N

  634. ; B% k  G; l. T2 t/ J
  635. BOOL bFirstChar=TRUE;
    9 k9 b3 ?3 f+ J

  636. 2 A+ z! r5 ~- L$ N, U6 [
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    2 N' \/ a% I3 K! {+ a7 j
  638. {
      W" y/ A$ c% L+ x7 k2 K
  639.         // TODO: Add your specialized code here and/or call the base class5 |; S$ S2 \/ c4 ~! ^( `  _1 S8 Y- }
  640.   switch(dwProgramState)
      q+ E) t4 D% T6 p
  641.   {% b' }+ U; `7 t" D, \
  642.   case AP_NOTHING:% R! M/ d) S# g9 M& ~! @4 }
  643.     switch(dwStartUpSteps)
    4 Z4 S4 G! o0 }  F# x
  644.     {/ P$ Z+ \4 |5 J) ^7 P2 Q8 }1 x
  645.     case 1:' _! z* z. o9 u' b6 b
  646.       {
    1 [) w1 C; m& L! c+ T" N
  647.         int i;
    2 A5 w" }; R, ~
  648.         CDC *pCDC=dlg->GetDC();  ^1 F# B9 P- f! t9 I, O
  649.         HDC hdcwnd=pCDC->m_hDC;
    8 |7 j5 R8 E, G/ b9 _8 I
  650. //        Graphics graphics(hdcwnd);
    ) r& G9 U  M! _  W+ o- @+ x
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & k5 ^5 _0 V7 i; h" p9 |
  652. //        INT iWidth=bitmap.GetWidth();' }7 F6 d6 H' }9 u, i
  653. //        INT iHeight=bitmap.GetHeight();
    5 n- V$ f( x4 v0 ^& y
  654. //        Color color,colorTemp;0 V% L& h3 l, F- t4 s6 K( I
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    0 y& o- ]+ d; h% J; s7 L' G
  656. //        {
    + x0 g6 P" `& O. f  T& u
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ' J( k- `; S  ~6 {* Y- z; \1 _
  658. //          {) |+ }% E. w4 h: `
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ) ?: y, a, |5 B  Z+ P! E
  660. //            colorTemp.SetValue(color.MakeARGB(
    # u9 I5 ]* ^0 u: q
  661. //              (BYTE)(255*iColumn/iWidth),. S# M% N, Y! q8 Q
  662. //              color.GetRed(),* g1 G- k" F# v6 M
  663. //              color.GetGreen(),
    ; w9 R; q2 ?: Y
  664. //              color.GetBlue()));/ S! w. K. I1 e% z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);1 a( U- k8 i+ c/ ]9 d
  666. //          }
    1 F& a$ N( s- F: Z' b" V$ S
  667. //        }$ c7 E% x, E1 O$ e1 ]
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    / D& v$ S/ C# W3 c1 `. H5 Q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ ~7 g/ X8 U. _2 y$ Y* Y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # c0 \3 D" T. k- n0 J+ V5 E
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# K% B2 H$ z, v  |8 F" B1 ]9 R
  672.         for(i=0;i<240;i+=8)0 H7 \! ]2 V3 l# U5 n0 N0 K5 _9 U! \
  673.         {, ~0 N% p" r+ b5 C
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : r4 g* o: c7 D, |
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * K6 K9 e- |4 O1 Q4 p
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - v+ f- V' C' Y2 \- u1 @- B7 ~
  677.           Sleep(33);
    ) |, o! B% F! M6 J' ]6 J
  678.         }# A* l- B5 {# U7 ~1 E0 [
  679.         Sleep(1000);
    & @9 T+ N& x7 D% ^5 Y
  680.         for(i=240;i>0;i-=8)2 z0 T; W& U# W# w# Y$ d
  681.         {
    . ?2 c( ^1 f$ m& O- F- P0 y  b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , E5 b6 p8 ]& D) s
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 {% `. r' k, D
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);9 L" K' s. v9 U9 u7 f. }% q
  685.           Sleep(33);
    ! B. s8 R; q3 L" q3 ]
  686.         }! j0 K4 P$ |+ \- Q& r" E0 g8 E
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    " b# s$ B6 L1 D
  688.         dlg->ReleaseDC(pCDC);& G7 Q6 Y& Y; x$ v" J* o
  689.         DeleteDC(hdctar);
    9 K. u0 i7 Q. b+ r# Q
  690.         DeleteDC(hdcsrc);4 Z' ]  U( B" h9 G$ q8 |& N
  691.         DeleteDC(hdcorg);* Z8 z4 j9 e7 H3 C7 k4 T
  692.       }
    4 O6 q, a2 w5 K
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);1 Q  l) y0 @4 s
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    $ m+ y8 X3 I' A
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    7 h% C6 `' G% h0 ?& a
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    % G; j& x$ p- [# U1 r2 u/ q7 `8 H
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* k$ q) y9 K9 h8 Y% h
  698.       if(!Dn.Connected())
    9 V8 g2 ~5 n  O! m, A+ L* |: G4 Y
  699.       {) ?8 T: E: G' U+ [2 O" R$ z# e  U
  700.         dwTotalFiles=1;" J) r- b- J+ t$ ]5 t- o5 m
  701.         dwDownLoaded=0;
    5 P2 M' Y+ z7 A
  702.         bSilentStep=TRUE;% |1 V/ ~9 M, B: V
  703.         bCompressed=FALSE;0 z2 R& V( w3 I) n. P
  704.         strExtLocal.Empty();* r) C9 E5 a$ Z( \1 V, X$ I
  705.         strFullName="readme.txt";+ d. A( G; X' i% ^
  706.         dwProgramState=AP_CONNECT;. L) H! b! w( g2 F3 F! z8 Y
  707.       }
    * Q/ [: m, n$ M' ?. N
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();, h# _5 {3 _# Z, M( V/ c9 L* S5 |  }
  709.       dwStartUpSteps=2;! d0 d' S8 W8 c/ r
  710.       break;
    5 d- `; t4 A4 l! B
  711.     case 2:
    - ]$ ?. S, j- ^
  712.       {' D: c9 a, P. E. L
  713.         int iEOF;" e7 Q) \3 n2 O" v; Q" U
  714.         FILE *fp;0 e9 l) J$ _& f% u
  715.         char szString[512];
    ! Q% G" L- N" E# [5 {! `0 ]& B8 h: g
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ) \6 ^4 g  O- {% j4 G& x0 L. F
  717.         if(fp)$ b( e# [% m! @
  718.         {
    6 c+ Q5 V: H" E
  719.           do
    ! f. x- K9 D& d3 I( R
  720.           {
    7 h) g' x" z( Q2 M
  721.             iEOF=fscanf(fp,"%s",szString);' |, Y4 y- y+ G$ E& l! a) R& \
  722.             if(strlen(szString))2 [' _! I! j/ R$ H& j
  723.             {# Q& k, d. R5 u9 A
  724.               if(bFirstChar)
    9 D+ S. N1 C- c# P& f
  725.               {
    ( z6 G7 C2 X+ x! O- P7 F( e
  726.                 bFirstChar=FALSE;# N, ~, Y* `5 L  d  E4 ]
  727.                 bConnectIsBig5=FALSE;3 ^* @& j0 _( o* x) f6 W2 M
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;8 K. y( }  I: E8 ~0 z
  729.               }4 y: D+ B8 c1 ~" p& F# g
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));( }1 o0 V- F5 i7 O5 I" F
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
      N1 l4 H. P6 d* d% i
  732.               dlg->m_ListText.AddString(szString);
    / f3 b0 H& J- y  M8 b: f8 O
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 u" {6 U) T+ L" ^1 u6 d
  734.               *szString=0;
    ) H, f3 v' C" i# F8 P1 D+ D6 W
  735.             }
    8 J; U1 Z1 m; O' v1 L0 w+ Y
  736.           } while(iEOF!=EOF);
    ) B. c% P# ~+ B; n+ X# h+ [+ w
  737.           fclose(fp);$ d- e; X* k5 |1 i, }! _
  738.           unlink(".\\DownLoad\\readme.txt");
    / i% u7 a1 V5 k
  739.           dwStartUpSteps=3;5 a2 N0 J. w0 X, A+ d
  740.         }9 f2 o- P3 o- F$ }- h% f4 N/ @2 o
  741.       }
    ) C# y- }, Z4 r" q/ g( e1 C
  742.       break;
    0 p  P& x: l, u' s% N( S
  743.     case 3:, }# R" x: R5 m1 T, Q
  744.       if(!Dn.Connected())
    / @4 Y8 ^& Y2 u4 H
  745.       {! h; h$ O+ _: a
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);# N( }( I( L( z1 ^. K# z
  747.         dwTotalFiles=1;. L1 k5 `2 f! z) E- b7 \3 R
  748.         dwDownLoaded=0;  ]) |/ j0 y/ ]# O
  749.         bSilentStep=TRUE;
    " Z9 t6 `  Q/ U1 o$ [/ W* U. @
  750.         bCompressed=FALSE;
    ; \: n  [* A( j7 i! J
  751.         strExtLocal.Empty();
    ) d9 \3 B" ~4 r, u, h
  752.         strFullName="checkversion.txt";6 u% V6 B: b3 @1 C2 k7 i% s
  753.         dwProgramState=AP_CONNECT;
      _9 m! t7 d0 f2 g# e; c
  754.       }
      O' G' o) P7 X3 B+ ~6 x
  755.       dwStartUpSteps=4;. c; S2 P" K6 F! I% d
  756.       break;
    * d) N! h0 r; A% [4 v& I
  757.     case 4:
    / p( Y6 |0 _& `0 r( l0 O
  758.       {
    % G( i6 p$ V. r6 P! Q, U5 |
  759.         FILE *fp;
      t- H! @  I; X
  760.         char szString1[128];
    7 v: A/ o: H6 X2 |% d0 N# |
  761.         char szString2[128];' @- M5 m/ a: `
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ) M  v. c& T* a5 ?  e& g9 B& n
  763.         if(fp)" F0 n) N4 b9 L5 q
  764.         {
    ' Q' Q- K) I4 u& Z7 \
  765.           fscanf(fp,"%s",szString1);
    . V; p$ Q, S7 t
  766.           fclose(fp);
    , Z3 N0 w# b3 v' Q
  767.           fCheckVersion=atof(szString1);
    * X& X) @* G$ |% U7 P4 t
  768.           fp=fopen(".\\checkversion.dat","r");. c  J9 N/ I' s4 b5 D2 F
  769.           if(fp)8 Q( d7 s$ R. D$ K
  770.           {
    7 f) ?$ ]& m2 S0 \7 H# I
  771.             fscanf(fp,"%s",szString2);
    8 O9 e4 a4 f* p
  772.             fclose(fp);& X) f% K2 n0 O" P/ a( ~$ K/ [& b
  773.             if(atof(szString1)!=atof(szString2))
    - p% ]; r5 S( K3 z! x
  774.             {: N/ u+ E! d) [" s+ m/ I; o" ^
  775.               if(!Dn.Connected())
    ; e/ Z! r; @5 ^9 q, [: ]6 L, A  g
  776.               {
    $ V" ]$ Q% W% i! n
  777.                 bFirstUpdate=TRUE;
    ' j5 U' s. i1 I8 i0 {
  778.                 dwTotalFiles=1;
    & M. U, p" `  t) p( `( B2 S/ G% h
  779.                 dwDownLoaded=0;) }6 ^' T# A0 _, U2 [0 N2 P
  780.                 bSilentStep=FALSE;
    0 J4 x7 M, m7 q2 L4 w
  781.                 bCompressed=TRUE;6 b1 n6 f1 j4 E9 N
  782.                 strExtLocal=".\\DownLoad\";
    : i2 E" p; _4 t) l
  783.                 strFullName="update.txt";
    # f* e6 O8 C% v' U+ y9 t0 X$ g
  784.                 dwProgramState=AP_CONNECT;
    2 ?* \. J% _7 O; q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # j2 @5 Y) F" z- V7 M- U
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 o% r# P. ?2 s( C, a% J
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");! x3 H; |0 x/ d: q1 P/ k
  788.   b. W; U) n" [. Y3 V* w0 A8 W
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - }! y9 n3 a! j5 [
  790.                 unlink(".\\DownLoad\\checkversion.txt");* j8 ~8 [2 `6 P. F6 W
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)/ z' I9 x( u8 H  _
  792.                 {
    & O$ ?( Q. D4 i' L
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");0 Y- G- d7 |0 x+ c4 J) ^' [
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");# t9 i( Z0 B- {3 _
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");( k' l* b, X6 d3 ~. k/ s: J
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( K- H5 U5 c# C" k4 O* v
  797. * X3 R' [3 c+ Z4 o% P. j: U
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");* F% _3 r; p, n0 q5 X2 j  j
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # m/ Z* I9 Q1 y* ^1 Y7 {
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
      r. z  c% o( r* X6 o% c
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      H4 n0 ]7 Q3 X$ H
  802.                 }
    : |, E$ C* b% y
  803.                 dwStartUpSteps=5;
    8 ]' o1 J, J/ L9 C% u
  804.               }
    , _5 k, o5 g$ t# E9 x, e; m
  805.             }6 Z1 r# V4 S0 A2 d
  806.             else7 w% e" W5 b/ n# d" R2 [; Z, t6 H
  807.             {2 K1 x6 |7 A1 T' H( k
  808.               unlink(".\\DownLoad\\checkversion.txt");  }; q3 F8 ~/ i8 o6 o
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");, E! y; }1 F- h% a, T# Y0 Y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; \$ ~( o4 Q% \; B+ @$ c. a
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");+ G' [0 Z. y* ~, E' O% ^2 B3 r
  812. 2 p5 r, Y* M$ L, C" ]  i* _; l* k
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& U2 K' Z5 c- h' a, H
  814.               dwStartUpSteps=99;( {8 W. h9 {9 [7 n2 Q
  815.               bFinishUpdated=TRUE;, }& e( L3 G3 k8 Q
  816.               bCanUpdate=TRUE;" P/ A0 e/ O, p5 I' r) r* {( T
  817.             }
    ) V4 U3 b2 C0 c& `' g
  818.           }
    2 o' @$ g* x8 h. V1 Q
  819.           else
    + v. }; O/ H3 n3 ]; B, p
  820.           {
    5 C8 v/ Y) V2 m: h
  821.             if(!Dn.Connected())6 `! }: A$ F% X$ b) ]* l
  822.             {, e8 b% B" m# c8 L  y+ Q$ A
  823.               bFirstUpdate=TRUE;$ S5 m$ x- E  U- J" Y2 D  _6 n" f
  824.               dwTotalFiles=1;, f& b/ M6 i2 K# g
  825.               dwDownLoaded=0;( x! ~, ?+ W# f! |5 t
  826.               bSilentStep=FALSE;2 @+ _3 u  u! m7 n. c9 Y
  827.               bCompressed=TRUE;& M5 w5 n* J0 Q( @
  828.               strExtLocal=".\\DownLoad\";
    % p  e+ X4 G# i
  829.               strFullName="update.txt";
    0 P) ~& P8 s& A# U6 n. z
  830.               dwProgramState=AP_CONNECT;
    9 g; M' P+ g. v  v2 I
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");9 \( x4 K$ _1 |+ n) M* ]8 W& q% g
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 O* r5 u7 \$ A9 I" f
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + u5 a2 ]9 m8 h
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 u. |) ^0 J% Q* N) \; ]
  835.               unlink(".\\DownLoad\\checkversion.txt");) ^. P: K5 ^, ]* o' a) N
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- R% F7 h- n2 y, D1 _3 f6 x
  837.               {
    " r, z: h4 T- x
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    6 m3 v- P, E( ^5 x  S
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");) s4 f% Q9 J: \
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    4 m8 C( Y* w1 T- ?' S" M
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + v+ F8 [4 B( O, [) Z- H7 E* _& m
  842.                 & h7 H9 t5 F* j7 k
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: [' @) U6 I$ B- R" H0 J. e0 y/ M6 M
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ H: t  x' ^8 ~# J' x3 ]: g
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");" ^; N9 L: M4 C2 |
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: ~# ]' t) G6 c' i; k1 @
  847.               }
    8 E5 f3 M( Q+ u5 @+ k; s$ q
  848.               dwStartUpSteps=5;6 @% L& m4 q0 }1 B/ p/ z
  849.             }
    ) [! B# e2 u( s2 q7 O. |$ T
  850.           }
    " O/ Y* {, w0 O$ _/ ~# q
  851.         }! v: T' Y0 [( I0 U2 z
  852.         else
    4 t/ W2 p, v! J! }& J
  853.         {
    # X8 u8 G0 |( P. ]7 A0 t
  854.           dwStartUpSteps=3;' t* w$ I2 {9 C' v" O
  855.         }
    ( X6 V6 x$ x4 W
  856.       }; {8 x9 X6 U/ I! M  [
  857.       break;
    . Z' t& i2 r) e% Q9 M+ i
  858.     case 5:! K, t+ [2 f/ m& w8 d: X
  859.       {6 c% |: Y6 E1 ^9 b2 Q. q, J' O: `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)/ K% f9 s5 Q# F* T6 v. Q% ^4 ]0 u- X
  861.         {
    3 T& ?5 Q8 ?% H$ \* \; ]
  862.           int opt_overwrite=1;
    ; M: Q, w/ R% T1 A8 @( e
  863.           int opt_do_extract_withoutpath=0;3 S& p6 [  R! {" E+ a. Q
  864.           unzFile uf=NULL;( L+ O" O5 j+ I9 X# S. Y$ A' U  A

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

评分

参与人数 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部评分

wuzhenpan 发表于 2019-10-24 09:31:51 | 显示全部楼层
1111111111111111111111111111111111111111111111111111111
回复

使用道具 举报

15820046275 发表于 2019-4-18 21:00:55 | 显示全部楼层
555555555555555555555555555555
回复

使用道具 举报

15820046275 发表于 2019-4-18 21:00:50 | 显示全部楼层
555555555555555555555555555555
回复

使用道具 举报

yun5520245 发表于 2018-1-29 21:25:42 来自手机 | 显示全部楼层
东西不错,只是现在研究的人少了。
回复

使用道具 举报

寂寞在_NBC3C 发表于 2018-1-30 18:08:32 | 显示全部楼层
东西不错,只是现在研究的人少了。
回复

使用道具 举报

qutebaby6309 发表于 2018-1-31 08:29:25 | 显示全部楼层
來看看囉 謝謝大大的分享 ~
回复

使用道具 举报

advsolarpower 发表于 2018-3-17 13:42:22 | 显示全部楼层
热爱他肺癌热锅额度都是感受到
回复

使用道具 举报

提莫 发表于 2018-3-23 17:17:22 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回复

使用道具 举报

提莫_k6Zum 发表于 2018-3-29 13:30:35 | 显示全部楼层
dddddddddddd
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-3-24 08:40

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表