找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
0 ~: G% i, z0 o4 r
  1. / RevApp.cpp : Defines the class behaviors for the application.
    6 U% A% A) r& F, W. w: n' ?) k( b" `# O1 N
  2. //
    6 u7 Q3 |! A' s7 y5 f' L' v1 b

  3. 7 i" U% N2 @3 W5 |0 U0 z
  4. #include "stdafx.h"9 h8 c* T) c# d, ?) F$ F
  5. ! N' a5 |8 _. n; n5 d: w8 e
  6. //#define UNICODE
    ' C$ ^$ B5 [. a" s. A4 y
  7. //#include <gdiplus.h>
    $ y; t7 O. N5 }" X) l/ x  w5 V
  8. //using namespace Gdiplus;
    ' q% G6 M; i  Z5 @
  9. * K3 ^- r3 h% ]& `
  10. #include "RevApp.h"  Q) a* _. T5 Y$ q7 q4 o
  11. #include "RevAppDlg.h"
    : x: a' i0 H* c- Z3 v0 m7 C0 ^

  12. 5 e% a# S1 O( c
  13. #pragma warning(disable:4786)
    & v! }* M% z/ G0 N. j
  14. #include <map>7 D, D2 v. N* g* ^# ~* c" n
  15. #include <list>1 L, r0 [3 O* d% V" L5 F
  16. #include <direct.h>) T, M6 \% `! l! n; N/ Y5 a4 Q

  17. ( y* T8 i0 ~$ f* T* u3 l; S$ s
  18. #ifdef _DEBUG
    & `& p9 m# z, B8 A
  19. #define new DEBUG_NEW
    # x  J  s9 q( J+ J' B
  20. #undef THIS_FILE
    4 S$ u' n8 c# I* i$ G3 I4 p" {) y3 s
  21. static char THIS_FILE[] = __FILE__;5 w- A/ i# ~* h- @; k
  22. #endif
    ( d3 l+ h, f! o+ [1 H4 |
  23. #include "SkinResDef.h"7 O; ?( _& p' M4 U; O5 Q
  24. #include "ChangeBG.h"
    . y7 b, E$ x7 @2 Y5 S6 s; ~( M8 p
  25. #include "AFXINET.H") D0 m" L" x# ?" y

  26. 7 ]& }- k0 @& W( U( b/ @
  27. #define TRADITIONAL_CHINESE 0
    , {& L  R2 F; A# Y7 Q
  28. #define SIMPLIFY_CHINESE 1
    $ f) w; O1 |9 B
  29. #define ENGLISH 2
    ; V" S3 }3 R  T4 f7 l( g0 X
  30. int m_iLanguage = ENGLISH;
    5 u# ^" M0 r4 q8 A. E+ `
  31. /////////////////////////////////////////////////////////////////////////////: n/ E0 }( T6 q' b7 p! q' Y2 V
  32. // CRevAppApp" |( m% P# A" s4 E
  33. # K5 p( U5 T0 \2 z- O6 x+ m: N
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    8 V( X- g3 O5 }  p, F  M0 V
  35.         //{{AFX_MSG_MAP(CRevAppApp)1 A! X! p8 R, s, ]  |
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    & h/ [, g! N# P; l
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    1 K$ F$ G; K' d5 w! x/ [
  38.         //}}AFX_MSG9 Y7 F0 ^, B6 U* D5 Y2 j; L4 A4 h
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! k" c: O# q3 s  |2 e( A3 F/ v2 }
  40. END_MESSAGE_MAP()" h& n- g- n( P

  41. / ]9 R& ^; O  j2 C
  42. /////////////////////////////////////////////////////////////////////////////
    & O0 z) m9 t& y
  43. // CRevAppApp construction
    + @% y* X& K& g3 J

  44. ) ?  u; P# p+ J" d: i
  45. CRevAppApp::CRevAppApp()
    1 C# ]5 N. [% O. p
  46. {3 }" _( \: E# T7 G+ k: d+ G( P
  47.         // TODO: add construction code here,; j6 _; V( [/ f" a
  48.         // Place all significant initialization in InitInstance# h0 ~+ q. U. }! Z" m: V
  49.   bDisplayIsBig5=FALSE;2 }" f! f- }2 t+ j" }8 n  w9 I
  50.   bRestartUpdater=FALSE;
    6 j! V+ H/ h  F+ [8 b# s
  51.   bFinishUpdated=FALSE;
    * W6 F! J, e7 e4 w9 `5 g1 @- s) R) w
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;5 f" y  T; q1 t! p/ G9 M) J- I8 \
  53.   InitChangeDataBig52GBKS();* }- `3 Z0 j7 ], c+ K: y; ]
  54.   InitChangeDataGBKS2Big5();! \7 M2 }1 u7 c- Z/ t
  55.         //$ O9 _3 x" b1 m; k$ W0 M6 g9 c" K
  56.         bClickRunExe = FALSE;
    ; {/ I2 A* K, x
  57.         //
    5 e0 G7 d& H" C' D7 Z
  58. }' {5 z! i% t6 B$ w2 n$ N
  59. ' M$ B4 f$ S0 x# A
  60. CRevAppApp::~CRevAppApp(), J3 k, O( n- m# j1 K& }; Q
  61. {  a# f+ l7 n% p0 W- g/ a4 P  E# c
  62.         // TODO: add construction code here,
    * N' Y% ]5 t* Y# S2 ~3 q
  63.         // Place all significant initialization in InitInstance
    8 J( h5 ~8 b! m9 D+ k3 Q
  64.   EndChangeData();5 J1 e" h9 B9 v% P" }7 Z
  65. }
    5 C' {/ P1 \! Z  C

  66. 5 Z  e% Z% N! i: v
  67. /////////////////////////////////////////////////////////////////////////////  X4 R$ {/ \% x6 t$ t; Q) {: J( j
  68. // The one and only CRevAppApp object: S' h) _& m5 n& A  _+ R

  69. / k2 O  U5 Z2 t( B# s9 V- b" ?  g  S
  70. CRevAppApp theApp;
    . V1 _( m) R; u) V
  71. $ i6 Y) m; r- K+ j! r5 J
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    2 n# h( a0 L) z3 i
  73. {
    : h  [  V! s/ x; f
  74.   int iEOF=0;: w* _3 E/ }9 V' O& _4 }8 {7 Q
  75.   char szTempName[MAX_PATH];
    ) `7 Q" y3 q6 m$ z
  76.   *szFileName=0;$ l# n/ O' }2 V; d1 O( d0 \, \
  77.   iEOF=fscanf(fp,"%s",szTempName);
    # y8 |; s0 a, L
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')5 s4 z: k" h; \+ d( \! t
  79.   {
    1 ~4 V0 x9 L1 E5 J) E  w- u
  80.     strcpy(szFileName,&szTempName[1]);
    ! E3 Z" l& d; I1 V  l
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    6 f  l9 k" x0 |1 X- \+ k* b
  82.     {) v% |( z# p0 c' B
  83.       iEOF=fscanf(fp,"%s",szTempName);, p0 H6 Q7 u# b0 v1 n% }9 ^  O! P7 @- @
  84.       strcat(szFileName," ");+ y/ B; y. u: }3 t/ u( y
  85.       strcat(szFileName,szTempName);. U. s* S7 w' ?4 S
  86.     }
    9 k' W- Q& t% g3 i; |
  87.     if(strlen(szFileName)>=1)
    8 n% Q7 d4 R# l$ t* @# o
  88.     {0 X$ c( o# b3 }, f% z' D: E# ~
  89.       szFileName[strlen(szFileName)-1]=0;
    " B* b7 Y$ |2 o9 S! q
  90.     }' c; y8 h* ]  ]; e, F3 I
  91.   }
    1 I1 S2 b. R  Z) V1 }
  92.   return szFileName;
    3 e- y7 R6 I- [1 O. \: Q
  93. }& y- s( r( k' N, d$ q# I  n
  94. - X* `3 ~! K- b2 Q
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)- }+ q5 ^3 M) n: H9 C" w* X
  96. {- g2 V8 }; n3 J+ c
  97.   FILE *fp;& D, `6 F5 ?& ?5 S( y+ h
  98.   char *key=NULL;
    8 v: q  k0 X  T9 A. j/ x3 ~* `
  99.   char version[MAX_PATH];. u3 `# u# N8 ^" x. e
  100.   LPUPDATEFILE file,olds;
    8 c( g* }8 [; N* g6 v. W. r) x
  101.   std::map<CString,LPUPDATEFILE>::iterator p;6 J; N" ~& \4 a6 D/ }
  102. - O8 P* h5 _6 r
  103.   UpdateList.clear();6 W& w7 U; Z' R, Q
  104.   UpdateFile.clear();2 ?) N) V) a+ z9 T: A+ P' m+ k
  105.   if(GetFileAttributes(filename)==-1) return false;, O7 W) r5 d: K. q
  106.   if(!(fp=fopen(filename,"r"))) return false;
    & R4 z( }1 e' _  E
  107.   fscanf(fp,"%s",version);
    5 m& `3 Y& q" e4 d' y: f
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ! B) l4 w2 X# ^8 t* w6 G5 @- L
  109.   while(fscanf(fp,"%s",version)!=EOF)1 K% x! ~. F, G8 u& X
  110.   {
    . m( v" M' U; F2 _% a: z1 U
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, _# Q6 ^2 k7 S3 g
  112.     fscanf(fp,"%s",file->path);0 y0 Q5 F# M5 I. E1 x+ p
  113.     ReadFileNames(fp,file->file);
    ; M' G0 Q- ]4 A/ b2 a$ M
  114.     strcpy(file->full,".");
    ' r9 U; R) v$ W7 q# h5 p
  115.     strcat(file->full,file->path);
    ( J+ T8 t7 T1 t! f6 o: p/ x
  116.     strcat(file->full,file->file);( ^+ y4 S: ~: v. S  _# A. D
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())$ \2 L1 u1 N# v: I+ |. _
  118.     {4 C& V7 y. H2 H
  119.       file->vers=(float)atof(version);6 a! F: t7 P! R# @  f4 o( L
  120.       UpdateList.push_back(file->full);; M; R) h  w2 z8 H' ]# t
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));4 W; G; ^+ H* ^- z- O- l
  122.     }+ Y+ F1 {8 I  N' a7 D  U
  123.     else
    6 |/ l4 ~, ^/ f) `7 M  C+ c, X
  124.     {: [3 l. A& P. R5 V1 a
  125.       olds=(*p).second;8 x% W8 S. S" J& W
  126.       if(olds->vers<(float)atof(version))) t: I; B5 p) T7 D/ J
  127.       {
    8 C( ?. [* ^. s% {# h/ }% z
  128.         olds->vers=(float)atof(version);
    7 Y# W0 R# R$ [
  129.       }
    * E5 u: i& L4 H
  130.       free(file);
    0 M$ j( ?" e' y1 Q9 T( t* _! m
  131.     }
    ! N9 Y1 F" C( @% ~4 m; @6 k7 \
  132.   }; k" k1 L8 ^  D5 K
  133.   fclose(fp);! P) ?$ m: X: s5 W' A& r3 m
  134.   return true;
    ' E( }3 t  r: [/ v5 k! A! j4 q$ J
  135. }
    # C( F6 @' \- q$ w

  136. 8 x, D/ T% R4 q$ t6 t
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    $ _5 {3 i0 S2 @& f! V) e
  138. {# y8 b4 q, r7 G' P
  139.   TCHAR  szFull[MAX_PATH];: E0 v0 i" a0 v/ y
  140.   TCHAR *token,*inter;! g; D8 w) j& H( n1 O  _3 [
  141.   *szPath=0;
    ( ]. V# r: ?! K- L( g
  142.   strcpy(szFull,szFullPath);" d2 l' m6 C+ Z5 {3 U
  143.   token=strtok(szFull,"\\/");  B  r$ \# k( u+ l# }9 Q
  144.   inter=token;
    , F- C8 c8 s5 Z8 I: S
  145.   while(token=strtok(NULL,"\\/"))
    ( R, ]. m5 Q6 _) O
  146.   {
    4 G, t9 P) `9 C3 I9 f. @
  147.     strcat(szPath,inter);  e* ?% T9 x- k' P
  148.     strcat(szPath,"\");
    ' N9 p8 k' Z4 P. y( P' T4 X9 L
  149.     inter=token;
    6 J/ y. {1 \1 m( c2 d0 C! O" n) v1 I
  150.   }
    4 F! o+ m% {  c- }6 [6 I
  151.   return strlen(szPath);9 v" |. ]0 X' `+ s$ i% e% s
  152. }5 D: j" w8 y+ r& `; Q3 f. \2 H3 O
  153. , y% ~- V% W+ j' ]8 \0 R. ^5 ~
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ( k; \& S- }. T* K1 e* c- t
  155. {
    " {, ~; L( ^  ~! b6 r* M& y' I& h8 G0 C
  156.   DWORD attrib=GetFileAttributes(Target);6 g( v) }5 q' ?! F
  157.   if(attrib!=-1)
    ) m, w+ e* \4 w& r, [8 D- ^8 t
  158.   {1 u* p, Q& t) H$ J! x
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))$ A( D8 C' U- D' s
  160.     {# c) x5 H% u; g" P$ U/ n. P) f
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    * y7 @5 {& ^, T# A+ U6 \, O
  162.       SetFileAttributes(Target,attrib);: o# o' ?1 p& C& [7 X4 i( }
  163.     }: B. k; L* ?, D
  164.   }
    : ^* R; O0 W/ K" c4 k
  165.   CopyFile(Source,Target,Erase);' g$ R, g% c! L5 C
  166. }
    % @3 ~$ Z. y, F+ m0 Z+ U
  167. 2 k5 X. R) @5 F
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)9 f0 i' W5 S0 g: t6 e  @+ \# `
  169. {
    6 \/ ~/ r" k9 v' R) `" x# L
  170.      FILE *fp;1 c4 b8 D; T6 \1 f/ S; ~
  171.      char  szBuffer[8192];
    ' e- P+ J) x" A
  172.   va_list  argptr;- L7 h+ b& K+ M$ S8 ]

  173. & w8 B! }4 _( _8 f  m
  174.         va_start(argptr,message);
    " E* c, m2 n# F# a9 v
  175.         vsprintf(szBuffer,message,argptr);3 l0 n# |/ {8 r$ U7 E1 v2 i
  176.         va_end(argptr);
    + a2 u* Y! O* N2 b! J' d
  177.   fp=fopen(FileName,"a");" F) ?* L- ]5 d/ r( o
  178.   if(fp)! b; W& ^0 h  q+ I
  179.   {7 J6 p* a9 T) o' J- A( I/ M; E
  180.     fprintf(fp,szBuffer);
    ( f2 l; q9 A, Q
  181.     fclose(fp);
    7 |/ B5 w; H0 l* l) p: a2 w
  182.           _flushall();: w2 _  z) f$ N! g4 F
  183.   }
    % m  \9 F8 z& L9 _# d5 U: X$ x
  184. }
    ' V8 p# B" R  Y, T( X, X

  185. ; l) G) e+ {" d- r4 t5 s
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ' J4 _8 @- s( L4 m& d4 m/ _
  187. {
    ) @- c0 K6 H$ c* r$ r0 V3 ]6 [
  188.      FILE *fp;
    . x  H7 v% s( f0 p: |5 p9 ]
  189.     DWORD  attrib;; k$ l" n  p/ N7 [
  190.   attrib=GetFileAttributes(FileName);) l. ], T! a& o  `. Z8 c5 R
  191.   if(attrib!=-1), M, S8 L, ?; {, s
  192.   {, z9 C( L# [2 d1 C2 b, x
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);, U! T( u! l; p6 Y6 M! o% Q9 x$ W
  194.     if(!SetFileAttributes(FileName,attrib))
    : K+ }( T0 \( T% c' c
  195.     {
    : o: S" n0 G  ?$ c+ a
  196.       return FALSE;
    + O6 O, z1 ^. c
  197.     }
    ! [$ c& e' P5 j  F4 m
  198.   }$ x8 x$ X) i! z) v5 I
  199.   fp=fopen(FileName,"wb");: g8 x8 A* c3 F% B5 Q
  200.   if(fp)
    6 T) n; c$ U$ B# q1 H: h5 s
  201.   {( r% ?2 W8 Y* Z8 H7 Z: u1 O
  202.     fclose(fp);
    + |5 r5 ]9 D. m) w7 s
  203.   }! B! [) [$ a  Y1 X
  204.   return TRUE;
    ( E+ r, {" k& C! V& O# d
  205. }
    # p, K4 ?' \  l/ t. l$ h3 [

  206. + R+ x  ?7 F9 ]$ ^! H
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ \; p: w/ U4 i3 |
  208. {2 B9 ?( W9 N" S/ W& l# T. t# o
  209.   char filename[MAX_PATH];# g. r5 S+ H' l) ]3 h* j
  210.   LPUPDATEFILE file,olds;8 M( t( G: M! R6 L: z8 P
  211.   std::map<int,CString>::iterator i;
    , N7 k/ ^  l  l' c3 V6 C
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 N5 U$ X( a/ |' ]- O2 x4 W
  213.   std::list<CString>::iterator l;
    0 n5 n: A- O7 U/ F8 e- D$ }
  214. ( O7 \# O3 a4 N( u9 Q! B$ ^
  215.   if(bFirstUpdate)
    3 [' b! n4 L+ W+ O. f) P1 Y
  216.   {
    5 ]+ u+ ~4 y4 W7 Y! x9 ?
  217.     dwCurrFile=0;* J/ X% L2 `, m
  218.     bFirstUpdate=FALSE;
    + X) ?# r+ j0 Z3 B. ^+ m! r
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  v8 o7 _: ~4 E2 U: s* ~3 c( O
  220.     {
    / F: x. t# v& X$ E1 p! T
  221.       dwTotalFiles=UpdateLocal.size();
    4 D7 x8 L3 @5 \; Y! ]  M3 u
  222.       dwDownLoaded=0;
    5 K4 c- t9 ?  s+ p
  223.       bSilentStep=FALSE;! e: o6 u& ^8 T/ b; x
  224.       bCompressed=TRUE;5 P# y; o) z& W
  225.       strExtLocal.Empty();' h* C: \( @: B5 c9 T; K4 P0 D
  226.       strFullName=(*i).second;2 z1 l- Z! O5 c$ @, V
  227.       dwProgramState=AP_CONNECT;
    9 t5 d: t' _1 A2 D. t- ~
  228.       return TRUE;
    ( F% |- N, s9 n" U& k: C
  229.     }8 w8 H2 J2 N4 d, f" }# L
  230.   }. z& K* q8 C4 `+ H$ e% x) }
  231.   else if(bRestartUpdater==FALSE)$ W2 n8 i& Y+ {* _7 f( Y/ k
  232.   {: [  ~" ]" \8 J& y- N
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())5 r0 }3 o  Z- L, l# P. x
  234.     {) ?; ?, E; A6 g- f* _
  235.       file=(*p).second;9 E! S8 E2 ^2 u7 \" b
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    4 Y( N% Q: q7 C8 ~* s- G
  237.       {
    # j/ `1 u' z$ f: e
  238.         olds=(*p).second;
    2 `( p4 t) w- r6 H8 }
  239.         olds->vers=file->vers;
    % K0 n) G. K& }; f
  240.       }2 C$ A0 I1 I) g- c
  241.       else
      k' @& B! a' l$ X
  242.       {3 x4 ^2 W/ v- P
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 J" A2 Q  M9 t8 f  `" [* V
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ U: S# K4 n$ t( f% e
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    & l+ d+ {! B6 Y, L- I/ R" v' I
  246.       }
    ! c# G$ u6 ]# I9 w6 B
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    6 W+ Z7 d0 x9 R/ U  O( H! @
  248.       sprintf(filename,"(%s)",file->file);
    * P! m* h! U0 }/ f4 t1 @3 B
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 e! F  N. S% [
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }4 K9 T8 V( Y& J( r$ v! C: s
  251.     }
    - m) W. ~$ _! F5 l- M
  252.     dwCurrFile++;
    ; I( J' T) j0 p- k" k- s
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())( d* T3 y% D$ P  K
  254.     {  O1 h! w2 V3 A7 t
  255.       bSilentStep=FALSE;9 `' T4 |, S0 M& Q# X" U: k; p9 U
  256.       bCompressed=TRUE;
    7 X. m  ^7 ~! E9 ~. L2 J% f, t- _; A
  257.       strExtLocal.Empty();/ {3 L$ p5 ?0 O/ R
  258.       strFullName=(*i).second;
    , ~9 \7 K# b, v9 `7 Y8 H
  259.       dwProgramState=AP_CONNECT;
    " c& j) K( U; N1 s0 R5 N5 B. u& d
  260.       return TRUE;1 \3 X) b& s7 Y% f0 f  e0 s
  261.     }4 l* D4 [% Z9 Q  I. M# E. X  ]4 z( Y
  262.     if(!bRestartUpdater)
    : M" N- P0 \" Z
  263.     {9 F/ A) O0 b5 M& q0 b( I
  264.       int iCurrSize,iFileSize;. e2 q) S4 B; r, f  H5 h. X) O1 L
  265.       iCurrSize=0;! Z9 Y. `. d5 y* k7 r' C
  266.       iFileSize=UpdateList2.size();8 ^9 s4 a# ^5 z" w+ b
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");' r- i2 G5 G5 V2 ?$ n
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");  w  j# W+ }( y2 {* m2 Y% u
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    / Z0 h  x. t7 N) ~6 u8 Z3 {
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 q  v. z/ J/ B- U5 ]
  271.       Fclearf(".\\update.dat");
    ; q8 i4 ^$ z, Z
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 R/ W& w/ g. S' `! ^6 S
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)! K. l' i* p; n$ L& k! G) U
  274.       {
    6 n; S9 y) G" X0 @
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    , R3 ]# C) t0 u. D6 x
  276.         {
    + g" q. j8 O+ J8 x. t
  277.           file=(*p).second;
    3 _; h! \$ p% l! ]- G! N' r0 D! P  l
  278.           sprintf(filename,"(%s)",file->file);/ _; ^* c7 n, o7 H7 L
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 A8 y/ j. G  d* J
  280.           iCurrSize++;# A0 c' d9 l! m5 V4 }- E0 j
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ! r2 T: J3 |7 s( y& {+ F5 t7 u
  282.         }! ~4 X* E: c6 U4 u" a
  283.       }
    ! L4 X9 R8 }) B9 @+ R' }4 K
  284.       unlink(".\\update.txt");. }( Z- X3 O& C" I+ L8 k
  285.       unlink(".\\update.tmp");
    7 x) D5 A; ~( t9 Q
  286.       Fclearf(".\\checkversion.dat");7 u. ^1 j3 P) d/ }' y2 N. ^% W5 \
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);/ Z  p7 R1 A2 r
  288.       if(UpdateLocal.size())
    " h0 r9 G2 ^# d9 v. G6 A/ y
  289.       {+ l* l2 B6 e2 o) G
  290.         UpdateLocal.clear();
    . H$ Z/ W& o! X8 l
  291.       }
    2 G. ~  V9 h6 ?$ [
  292.       if(UpdateFile3.size())  E$ H* B5 p' h# i2 g' V
  293.       {3 z4 \4 x# b8 l, z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) n8 v. T: P; x' Q% E! n
  295.         {5 @4 O" x" D, C" X2 e
  296.           file=(*p).second;5 x8 |  t# A' E; Z
  297.           free(file);9 z/ v  r2 T& J1 ^% a9 F5 \
  298.         }" l, R1 b* i/ k: {" w: N
  299.         UpdateFile3.clear();6 D8 w2 Y+ }0 g. u$ j; p
  300.         UpdateList3.clear();2 g4 k7 J3 ?: U
  301.       }  u% M' S$ U) P' _3 j9 l
  302.       if(UpdateFile2.size())
    " o; R* J7 ]( C3 ~0 ^1 d) d
  303.       {2 Z7 a0 x. r5 S9 x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : Q" V/ ?- A4 O3 K8 K
  305.         {% q- w/ L2 E; u5 B
  306.           file=(*p).second;2 N% d3 s! K5 H  Y$ k
  307.           free(file);
      L. D' @" \; u4 s7 ^6 Q
  308.         }8 m/ W1 h1 G) j5 v/ A4 Y
  309.         UpdateFile2.clear();  W2 M% {3 h2 T$ I
  310.         UpdateList2.clear();% j6 l& R6 T/ r5 J, j1 y4 c
  311.       }
    8 z) i0 {5 m' P2 X# C5 C) T
  312.       if(UpdateFile1.size())3 e+ |, G+ W* v7 ]# k  d; v6 J
  313.       {0 t" N- o% R" ]+ C" F: l
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : \. F; L# }) Y' q& I
  315.         {
    9 t0 V0 N7 S/ c0 n; m
  316.           file=(*p).second;/ U+ g- B8 R+ p- C) i, w* [% O* q
  317.           free(file);
    ! `0 a1 ~3 Z( j) [# r; ]
  318.         }% i5 ?5 I; t+ [; \+ ~$ e
  319.         UpdateFile1.clear();6 {; s# G7 r! F$ g- |7 x1 p' ?
  320.         UpdateList1.clear();: i5 K6 T8 T* \' d* G0 H$ W
  321.       }
      D5 ]! b9 t2 ?6 |
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));: @; y2 i3 _. y& ^7 _; u- \% [+ k
  323.     }- \0 Y0 ~- S) `( X/ M
  324.   }3 y8 ~4 n$ M2 F( I$ ^" a% y- k
  325.   return FALSE;& Q% `( `# N  K& r
  326. }
    1 `4 ^$ }/ r. W$ t$ ]

  327. : c6 p& i! W  I1 r+ s* T
  328. void CRevAppApp::ClearAll(void). {. w( h3 u, v) i3 E+ o' a
  329. {8 q) u3 \5 P: G  O8 I
  330.   LPUPDATEFILE file;
      @  V! L. J* z) Q1 n
  331.   std::map<CString,LPUPDATEFILE>::iterator p;9 v9 M" L3 W4 @0 [- ]) G
  332. ; Q* }2 v" D: C
  333.   if(UpdateLocal.size())
    1 {' f! q$ B( `; C9 a; R3 @/ ^
  334.   {
    % K+ Y% N. _2 Z4 Q5 a2 t
  335.     UpdateLocal.clear();
    2 j' F% b) Z! G. I
  336.   }, _3 l* K: k2 l, E! d6 R
  337.   if(UpdateFile3.size())0 c6 V/ F* ^% z8 o$ \  A9 Z
  338.   {  X" p+ L+ w1 N/ I7 |
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 @. F6 O3 I2 _7 H3 n* j' @/ ^
  340.     {! }# }1 _7 M2 y  o$ E* a* e
  341.       file=(*p).second;& Y6 H. ~+ u* O
  342.       free(file);
    & ^; ^' ~3 s: j  Z! K
  343.     }& K( n4 `5 B: ^+ o2 h
  344.     UpdateFile3.clear();9 z! e5 B# Y; _+ Z3 y+ W! Z
  345.     UpdateList3.clear();- X& Y* O$ P6 B) R. q0 p
  346.   }
    5 [% E9 A/ A8 H, T0 B
  347.   if(UpdateFile2.size())
    , d% v. C9 L6 k
  348.   {
    1 P- @$ K. _+ {2 T, B* E7 B$ ~! G
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 s" F8 y" e  ?- {
  350.     {
    ( P& |1 H' _. o( n' h0 p
  351.       file=(*p).second;  u! e  g" C; i: f3 Z" L4 H
  352.       free(file);7 q- t: t8 D0 H8 F0 G/ _
  353.     }7 l4 `: m' e' x; V; Z* H1 N
  354.     UpdateFile2.clear();
    4 B4 O! y4 Z' y% D7 U
  355.     UpdateList2.clear();
    * {( P$ ~, X2 [, A8 Y
  356.   }/ ^: Q7 F3 a* Z% v0 o5 }( |
  357.   if(UpdateFile1.size())
    ; X  w/ X+ \8 x) m
  358.   {' j. R+ y) n) J& V" S
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) `" q8 A" }4 i; k5 a
  360.     {
    3 m2 w* ~. W. W& S% m" v
  361.       file=(*p).second;0 j% L  b7 {  \5 n1 j+ R; f
  362.       free(file);
    , G* i3 V4 e2 b, ]0 [) |% `) b: d
  363.     }  k6 Z/ ]0 W: s; v+ N
  364.     UpdateFile1.clear();
    9 @  H. D! M7 w, d' `" v6 i. k
  365.     UpdateList1.clear();- l5 T8 @6 l& G% M2 Z! B, Y! R8 \0 w
  366.   }' e. [4 @" E- a6 |4 d
  367. }  $ p2 w/ O0 S2 g* E
  368.   " l9 |& @- i: |" j
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    , o( u2 Z5 e, G5 _- s
  370. {% E9 F( h0 P# W( J
  371.   int c;
    ( N4 e; a/ w8 _( {, o
  372.   LPUPDATEFILE file1,file2;
    0 @/ ?" W9 J! w# b% j( v+ P7 E
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;  m8 [7 `1 S: x
  374.   std::list<CString>::iterator l;; O4 U0 m+ D" z$ \1 P4 H) [

  375. / L) N+ M: g  r  H( \$ y1 |
  376.   UpdateLocal.clear();
    ' |5 W4 W0 z; F( E
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);: F, \" I9 Q- Q- W) Y. Z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
      y/ A$ L* a4 J) z  a' z% w
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) y' [. D# o* b. r
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    9 b, X; w3 A& n2 _5 U/ @. n- ^! `$ X
  381.   if(UpdateFile3.size())9 x; i8 E6 O7 q, L) s5 v5 L5 X
  382.   {5 S% Z) C5 i4 s) l
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    4 p" \7 n8 U3 C! r* C3 n# K
  384.     {" B; y4 D8 e9 j% W6 c
  385.       file2=(LPUPDATEFILE)(*i).second;
    % q- F/ V: _8 [5 [
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ H; w4 ~. O# B% J
  387.       {
    / S+ Q. v$ d( s
  388.         file1=(LPUPDATEFILE)(*p).second;* F6 s* h: a1 @- j2 Z% J2 v
  389.         file1->vers=file2->vers;5 f  f/ M/ i! D" z( E- m8 O
  390.       }
    0 G9 d) ~6 x. M
  391.       else
    + d# f0 d, R0 h' i7 J4 u: A
  392.       {
    8 e; I2 Z' x5 _" ^) ^- W/ q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , m% K. A* b' P0 S5 J
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ) [1 f) r/ L# K# o
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    . v6 Z& n- ?# E: ?* q+ X
  396.       }/ i* _, D3 X8 V
  397.     }
      j  f& }9 @& E& i0 @
  398.   }
    ( c2 ^+ U8 C+ Q
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 P5 P, ?/ Q, `2 r4 h2 G. i, D
  400.   {
    % M; s" ^9 W! j; E( P; `
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ) t& `8 `- P* H/ a; U
  402.     {" Q& H. P' ]; G( I( K
  403.       file2=(LPUPDATEFILE)(*i).second;' j5 ?8 X( G" w3 i  c$ t" h
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) B. ]. L' `; p0 D  r( ^9 \
  405.       {& F( {. z% c0 m" z( I
  406.         file1=(LPUPDATEFILE)(*p).second;& `1 ]9 g0 f1 M
  407.         if(file1->vers!=file2->vers): n+ v9 M+ M' ]/ a
  408.         {
    ) m8 s% D4 p, y1 N) ~4 f4 ~% ^" M
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 A% X" C4 S: g9 A: q1 Y; k9 Y. z
  410.           c++;; a4 D$ [/ q) z
  411.         }
    , l- B$ {! w0 N" U& D* Z% w
  412.       }
    ) v/ i1 a( e# |+ |% E0 M' I1 I
  413.       else  ]. R4 y4 [. M( v9 K
  414.       {
    6 l3 `# w) ^; x+ E, o2 r- G
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 H" R# F5 R% _
  416.         c++;
    & j, g' t/ y0 F
  417.       }, t) u0 R. r! m  D
  418.     }
    4 t$ @) |1 l' G7 ?0 i
  419.   }7 F' n4 C( c8 ~! o- d5 L; }/ f
  420.   unlink(".\\DownLoad\\update.txt");
    . Z0 m% r7 d( I1 m' a$ i
  421.   if(UpdateLocal.size()) return TRUE;
    . f4 m& @$ B0 U0 O9 v0 h/ f
  422.   else                   return FALSE;
    8 N/ z( {/ Q$ Q# z( S9 }. T
  423. }
      O9 _1 `  w' S& V+ B1 ^
  424.   o# ^4 C8 y6 r* b9 M
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    1 B* L1 Q. c; n. p3 J; }
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"8 p' C) P# M9 y2 ]/ I2 H+ N: {

  427. 7 V2 y( k( q7 `( N( v; m- _

  428. / f$ Q0 z+ }1 c% }

  429. ! ^+ G- q8 p. r
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)% |3 K' @  k3 ?; M
  431. {. T3 d6 h. \7 s" ]
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;/ X/ H; z$ B! \* ]( \, I
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * h! r: K1 h$ o7 E- H8 r5 m
  434.   {
    4 [9 k4 W8 P$ ^# w3 O6 c  a) g
  435.     char szLanguage[50];/ A9 ~8 o' p1 p% D' u
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 X, G  b5 y/ G  O# L/ s
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 o1 t6 B) p* A( b. w
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 C6 E& Y& K- X5 P, A2 F
  439.     else                                   m_iLanguage=ENGLISH;
    & R2 {0 i( v9 `( i
  440.     char szRegister[100];
    # }$ m9 n" o: I$ P- R, r- O
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' u" j7 N# Q- X/ o) d$ Q5 ?
  442.     strRegsName=szRegister;! j+ D1 B/ g2 p: O! w4 l1 `
  443.     char szPatchURL[100];
    2 t3 |8 Z' ~& o9 |" T8 [  ?* u  A7 i8 N
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! l2 x+ ]: g. s7 {5 R6 E
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ G( m, b4 F- g
  446.   }; d8 m  E# z. o$ c) K" x, ~
  447.   else& E, b3 S0 z. p* y. G
  448.   {
      _# Q8 T+ i8 O5 M
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    " p$ ]2 K( Q! x" S* L
  450.     strRegsName=DEFAULT_REG_URL;( J0 {( Q- q# n3 s6 s
  451.   }
    ( n; E7 _4 H9 O( O, x1 q  m
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    7 T7 q: d6 P/ f! s' [3 q8 ?4 s
  453.   {
    / U" l, m( m( Y7 K" J
  454.     char szIP[50];- R2 I& ~  C0 r! J! w2 l1 f
  455.     char szDIR[300];
    : O" w" N( R- m# l5 M6 @$ }
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 p  A6 c% g4 a; w/ E
  457.     {7 f8 G# y/ P' }2 z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    - ?  ?- ^9 @+ y, q" Z/ x
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ! V2 o1 y2 y5 |- Q% N+ n
  460.       strHostName=szIP;
    & {, q2 D5 o" a+ ]2 V) {9 w8 A
  461.       strHostPath.Format("/%s",szDIR);* J  l" C! e$ i- v
  462.     }/ C% v4 r3 G3 w$ w
  463.     else2 c' l9 s  o: _* V; d
  464.     {
    " ?/ }3 _+ t1 ]3 _, U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 Z# K! f' k/ \$ q8 y# g
  466.       {5 X$ e* o4 u+ }
  467.         char szLanguage[50];# E, K% Z$ A6 W' t1 t" s% p
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 ?9 H: D' ]5 v+ k
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! g- A  h2 U  Z+ T6 ^, ^* x# Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 d9 Y7 j1 L' Q
  471.         else                                   m_iLanguage=ENGLISH;
    & ^0 E3 `* S! ^  H" e% x
  472.         char szRegister[100];
    , X8 E: I' x/ ~- O& W+ b+ h' ?% v# ~" S
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' }$ f. ]  Z. a7 i8 ~, X
  474.         strRegsName=szRegister;( A: x% K3 s0 j2 @/ ^7 v4 Z" B: A
  475.         char szPatchURL[100];
    - u( ~( v, }. Y- ^' V2 I9 w
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( U/ C: o' Y" K  s) f  k
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 {8 l; E! D$ U9 @
  478.       }
    6 P9 D* @& W% e1 i
  479.       else
    9 S+ Y" m' u2 v/ U
  480.       {+ m1 O% J1 x: V2 G% a5 z  z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  U* h9 R7 h3 m7 F' b( W
  482.         strRegsName=DEFAULT_REG_URL;
    ) {% ~) q$ P# w! {1 c6 s- }8 b
  483.       }& I0 G" b% i1 E3 `
  484.     }
    & ?- F. f6 h' ?' }& ]% U7 m
  485.   }( P  r  G; R; L/ f2 t, {$ m9 `& M
  486.   return true;
    , C9 C- r* B, ^' }0 w# G" b
  487. }
    4 K9 N4 `+ W" B* z5 o" l

  488. ) R, b2 O; Q  V6 x/ @* T: L
  489. #include ".\ZLib\unzip.h"9 K8 O+ [/ ~1 n# P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# v8 r4 t; _/ g5 B; X
  491. /////////////////////////////////////////////////////////////////////////////
      o0 f' T7 q( s" a% v& T( p
  492. // CRevAppApp initialization# s$ m4 U1 F+ P: u+ Z

  493. 9 w3 g$ ^" @  Z
  494. BOOL CRevAppApp::InitInstance(), J4 ?3 a! J" Y
  495. {
    : M4 P" n; Q" i, Y" ]! D1 f7 D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 t; y) t7 t% p# [+ `* x& K
  497. & T, w3 |% x% z7 n2 T- K
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);+ _( U8 H) V; t5 f8 ~. Z& }
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    7 J2 f$ X+ @# [
  500.   {
    : c7 S. q+ O2 M) l' X% ]( L. t' A
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");5 J( H) k% O* H6 D0 c$ p2 e
  502.     GetPathFromFullPath(szPathTarget,szPathSource);) H0 P. ~$ D7 l1 P1 B# y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( D& C- C" n+ r9 R2 r5 |7 Y5 g
  504.     {! D  [2 m, i. O* Z, l
  505.       strcpy(szPath,szPathTarget);( G% j5 P' Y& g" O/ \) T
  506.       SetCurrentDirectory(szPath);3 o7 E. ]7 d! }5 d  c5 s
  507.     }
    7 `2 t/ t6 F4 M3 f) F' n
  508.   }
    " M* l, h' m, ^7 r
  509. #ifdef _DEBUG1 H- {' L+ K1 N0 R: D8 f. s) C, O
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 j: k! C, ]' `" R( J% _
  511. #else; O1 J7 E3 ?& v% ?7 X) t
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ d/ L* U9 k- n5 s
  513. #endif
    : p5 f- N7 Q- P8 d; ^% d
  514.   {$ ]. I7 ^( W* t0 {& m" Z
  515.     char tempFileName[MAX_PATH];7 g& I& g+ X% ?
  516.     strcpy(tempFileName,szPathSource);
    $ _: [' r2 l! z! y
  517.     tempFileName[strlen(szPathSource)-12]=0;
      r7 h& O9 ?2 |: z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    + o+ G1 j- }0 e+ |' [: u
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);9 G; L! |( c6 i% Q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    . s' p' Z* z, Y6 j" {0 F& `
  521.     return TRUE;: \3 q, W8 I4 O: c2 g
  522.   }1 K% b+ c  z) ~& h
  523.   // Nuke 0118: Delete run.exe
    ' W# e% y+ w: p: `* g% [
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );: L5 G9 }+ A2 \% V1 R' V2 R' W
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    - `% n" j% p8 y0 U* m; o
  526.   if(!ReadCfgFile("Config.ini"))2 `9 M! _+ y! |: J! f% P& d" S  Y
  527.   {9 Z# |4 [5 f( r4 @3 {% D
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);; {4 r% N5 S/ V
  529.     return TRUE;
    7 T2 c9 \+ V9 ^8 r; ]
  530.   }2 e/ B& Y* y7 ^4 R) p. e
  531.   HANDLE mutex;' N5 }1 p, c  k1 L/ t4 q8 j
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    8 v: R) `: p( o2 Z! F
  533.   {7 {" x" ~3 f7 p$ A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    6 ]3 C4 H! d8 G! p
  535.     {  ~0 ?5 H8 k# A9 z+ m) ?
  536.       CloseHandle(mutex);
    ( C8 A8 |( S- u( x+ T) D% k6 x
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ' `  P& P! M7 d# h
  538.       return TRUE;
    9 z: S+ D5 E$ V1 C; s1 S6 G
  539.     }
    9 t$ A& z9 O% a2 B4 \7 O
  540.   }  $ M# V" C* _$ T2 O
  541.   CloseHandle(mutex);
    6 }$ b# B" Q7 t* v0 [1 R; g

  542. $ G* }; m7 B; I$ K! J8 ]  K
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; v, ^% F8 W* {! d6 R  c1 ^

  544. ' v- c/ W* y$ t4 A9 m! b* i2 ~/ z
  545.         AfxEnableControlContainer();$ g+ H! A' C7 z4 F

  546. 8 f; b& m5 p$ _( U& T
  547.   bCanUpdate=FALSE;
    1 p- O: g- `5 |) m+ b( \
  548.   dwStartUpSteps=1;
    ; q3 p- r4 f5 y3 u
  549.   dwProgramState=AP_NOTHING;
    : z) i+ ~* x  j$ [! j, i
  550. 6 M% b, x6 U) I5 d5 j7 ^: F1 J
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);/ J7 ~8 u5 H/ b1 ]: H& G) ^

  552. 2 U; Q. v8 I- r; R' {* v+ L
  553.         // Standard initialization2 [4 h1 k1 E$ {
  554.         // If you are not using these features and wish to reduce the size
    . l" S7 L+ Y4 U4 n
  555.         //  of your final executable, you should remove from the following; s+ {! q, m' \* R
  556.         //  the specific initialization routines you do not need.; ]* l( x1 J* r0 a+ @9 V

  557. & w7 E0 e  W8 h* c* ]3 A( r, O8 f
  558. #ifdef _AFXDLL- K% z7 h. e4 h# k9 U2 a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    . X9 N* i* N; B  q
  560. #else
    2 |: N; T  l8 \: C! V
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically' V+ P6 r/ g& Y( v  Q- l5 t3 x
  562. #endif* S2 ~( Q, h& P; d
  563.   P3 d3 o* n+ e# G" n
  564.   dlg=new CRevAppDlg;$ i) d' h/ k/ ~9 ]3 D
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + f: O& |! _' e) c. P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ' }) g, y8 K: ]/ z* L
  567.   m_pMainWnd=dlg;( `. v2 n/ }- K1 F/ k4 R6 J  O6 {
  568. , {. t4 I/ y, T
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);) }( Y( L" k5 D& y7 Z" K) b% n

  570. - w" Z* _& ~. I) d- j
  571. //  GdiplusStartupInput gdiplusStartupInput;1 x" I+ V. r; h& l1 i" r, y* H
  572. //  ULONG_PTR gdiplusToken;) p- j: [, U7 s$ g6 k" n8 A1 b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    1 q8 W1 Z) j8 z+ ^: X; J
  574. 5 R3 K) X7 x* \; x1 A7 t7 l% }
  575. //        CRevAppDlg dlg;5 K9 q0 e+ K/ V4 V' W- }1 x  N
  576. //        int nResponse = dlg.DoModal();9 k. r8 H3 Q3 P' j, Y# z2 w0 }
  577. //        if (nResponse == IDOK)
    ) ^4 ^: ]6 q: N2 p6 I3 H6 Z7 p/ Z) a
  578. //        {
    % _  S) B, f# l# L  w$ I4 `! c3 _; w
  579. //                // TODO: Place code here to handle when the dialog is
    3 E$ y$ m5 m/ c0 h8 V- i7 j
  580. //                //  dismissed with OK
    ( U$ y1 p: ?( I: s) c
  581. //        }: R/ Z! X1 l% e4 B; Z) v
  582. //        else if (nResponse == IDCANCEL): k+ g$ ^4 R3 ?
  583. //        {
    $ l  |. g5 p7 R
  584. //                // TODO: Place code here to handle when the dialog is
    $ Q- p/ r( F! y8 Z: c
  585. //                //  dismissed with Cancel  z. m+ D- }) ^2 b) |& j& [0 Y0 q
  586. //        }
    ! U7 L' L2 |  J% T6 T2 r0 l- A

  587. ( j) Y, i. V# c6 W  v
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    9 _/ U/ B/ h+ n3 L+ d" f! D
  589.         //  application, rather than start the application's message pump.9 F  `& ^. K/ b
  590.         return TRUE;$ v+ Z' I$ G/ J3 [" c( m  O
  591. }- i7 l# \% T9 D, U0 v0 n/ ?" E) H
  592. 6 E, D; e$ {# `) F4 ]" n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 o. I% b" X5 R
  594. {
    % h! R- b' A5 e/ R! x7 y
  595.   int i;
    : A. e6 w) I6 V6 ^' k
  596.   char *szRet;
    + B8 C& e" C! z4 ?+ s

  597. 0 G; s/ L* l3 U+ c
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    0 s* C. m5 a6 W
  599.   if(sztoken)( P. a( O, f2 @
  600.   {
    8 y! B! X) F7 o. v: z# j1 u
  601.     szRet=&sztoken[itoken];6 f3 F4 N% [( i' v- j
  602.     while(sztoken[itoken]). @8 O- N% g5 P/ ?) J
  603.     {
    ( u4 R/ j( k, n, I' k
  604.       for(i=0;i<(int)strlen(token);i++)
    - q/ H* M0 e- H# l& h
  605.       {
    & b! y* @/ k+ c- Z- z7 q# T& F( d
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    1 f/ g* G# d5 X2 E( k
  607.         {" @* t' N4 x( q! c9 t
  608.           sztoken[itoken++]=0;3 j- Z! ]: ~/ \% l, @
  609.           sztoken[itoken++]=0;7 \' r4 k6 H' D, Y$ |
  610.           return szRet;
    8 D" n7 |) Q3 o& x
  611.         }& a$ [& Y: i& M
  612.       }2 S* }8 a. c( N  R+ F
  613.       itoken++;
    # c$ ~6 ]; Z6 r7 x( }4 m3 R
  614.     }2 U( D5 N& g5 G8 ]
  615.   }
    8 U2 X1 E8 `) h& g
  616.   return NULL;7 E2 r. d% f+ ^# d
  617. }8 G1 b+ ?* e; U
  618. 4 z7 {  {  F- t4 S4 t/ p! |4 J
  619. void ProcessProc(long Total,long Current)
    ( f/ m: g$ o0 G) J# J& u$ v$ r- N
  620. {/ W( A$ v! w1 {& c2 ^. [
  621.         MSG msg;$ X9 N. @; T+ c
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ( [  l1 f4 o6 R
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
      a, h3 x/ g: m) H. ?* O, f8 L5 h
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    4 V+ ?; Y7 H- l6 l2 i* a1 w
  625.         {
    1 z  I7 `! y9 P
  626.                 if(!GetMessage(&msg,NULL,0,0))1 C& v$ k5 Q: L% h8 j8 ~
  627.                 {: W# h) t3 O6 O5 N" m; z- ~- [
  628.                         return;
    ) p0 ^+ q$ i% o9 e+ A- r
  629.                 }, ^# L' b" P1 Q* {6 J# a2 K
  630.                 TranslateMessage(&msg);
    " w2 x: l8 x) Z$ ^
  631.                 DispatchMessage(&msg);
    9 z% d) Y, Q. Y( r: m5 m: b
  632.         }        ; {" _  ~+ {8 V! Q9 H: G# S
  633. }
    7 }7 b! ]. O! |- l- X0 v

  634. ! c1 ?7 i, g9 M$ m2 h
  635. BOOL bFirstChar=TRUE;/ }8 v- n$ _4 f# Y# Y

  636. 2 N" H5 x) N& q1 _- ^
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; h# y. [6 k( Z1 {2 y$ ?2 f
  638. {' a# Y, ^7 k9 v
  639.         // TODO: Add your specialized code here and/or call the base class
    ' L. a! _( K9 H5 q$ l! G
  640.   switch(dwProgramState)
      S5 D4 I1 b; t9 x4 g
  641.   {$ e% O" J" [! a3 g/ M
  642.   case AP_NOTHING:
    2 ~0 S$ o! l' h5 x; W9 R, G
  643.     switch(dwStartUpSteps). g( j& H0 j9 q0 G5 f# D: G& w0 R
  644.     {( V5 E& Q9 [% H6 y
  645.     case 1:
    0 s: q! y. k/ s3 h3 }- T
  646.       {
    ' H. q* l, U2 u% h1 P4 E
  647.         int i;
      y2 q; ?5 ^! m1 k7 p% b% q
  648.         CDC *pCDC=dlg->GetDC();% M& U. z8 H: v2 F8 Z+ L$ A. n! s
  649.         HDC hdcwnd=pCDC->m_hDC;4 c7 y% `2 N9 b: A6 X
  650. //        Graphics graphics(hdcwnd);1 H2 |) N* P% q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    " ?; T% R& v: {. t1 O" K
  652. //        INT iWidth=bitmap.GetWidth();
    6 k5 n; B- j' G0 L6 w$ z; Q
  653. //        INT iHeight=bitmap.GetHeight();
      L5 b2 u- v: ]  M/ U' U% y) |* h
  654. //        Color color,colorTemp;! b7 j* x9 m2 {$ C! S8 U
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    + }, t6 C2 `* d0 K
  656. //        {
    / s1 K- K3 z  ^/ D* |+ S( e; {5 O
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)9 r7 h( P$ i( X
  658. //          {
    % R  D& r# k, s4 K
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 i" n( Y$ X( V
  660. //            colorTemp.SetValue(color.MakeARGB(( S) c- E7 x4 J4 ]$ A: [8 v
  661. //              (BYTE)(255*iColumn/iWidth),
    8 F& |4 H5 t& F6 z" D
  662. //              color.GetRed()," h) H/ V- ^) C( M$ v1 P* A
  663. //              color.GetGreen(),5 r6 \/ \- t* z+ o
  664. //              color.GetBlue()));1 W4 g  q/ w- {* p' K5 w
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    5 l7 x: V. |  g
  666. //          }6 e: {7 Y0 B' I* n' l# k
  667. //        }
    2 p8 v* E2 ?* X" r8 f% P: B
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);8 N( B: T( a0 S- ^6 b# I0 j
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' L9 L: U- l1 M1 y* ]) _  W
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # D7 X' N5 Z9 N
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & {% I' c' `3 z
  672.         for(i=0;i<240;i+=8)( Q, K6 g# j4 P
  673.         {. t! J3 P0 x+ o8 v
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' a1 D6 ^# Q' }2 J/ S* ]
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. I! ?0 N" K( p1 R
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 F9 Y( s% j  K  p
  677.           Sleep(33);
    ' a6 }2 a1 v% q9 z& @8 A6 Y7 I4 k7 I" f
  678.         }
    ; ^/ d1 N8 e; q" ]' _4 L
  679.         Sleep(1000);4 W  N6 ^7 W0 S8 N5 ?
  680.         for(i=240;i>0;i-=8)# N3 B5 U) R9 o( F, A/ z6 k
  681.         {: o& K1 c$ ?# \
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 }. R; G) Q8 _$ T5 a* z5 B$ [
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: d1 L7 A2 w# L" P
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    2 M, f$ m6 z  M, q9 ]6 c
  685.           Sleep(33);  r; U# p: Y) c" ~
  686.         }
    4 Q4 _# M& y6 _9 b& S& y7 Q/ L  r
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);  x. J7 ?& M. o
  688.         dlg->ReleaseDC(pCDC);! z6 s" _" R( n
  689.         DeleteDC(hdctar);
    9 }; @8 r, J4 m, _0 G5 j4 P4 x
  690.         DeleteDC(hdcsrc);
    9 ^' F( p; T& U+ ]9 s+ z; x/ V
  691.         DeleteDC(hdcorg);. L3 E# \& j6 }; v: ~; D: v% l
  692.       }: E9 L* ]: f: e4 Y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    0 o0 G* o: r6 t+ x8 X# ~5 L
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    0 t* }1 D1 ?7 ^( c: V) J# v
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    & L7 F  o4 r" C% u2 U2 l
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    & ^& H' m6 C0 Z, _* U. @8 J
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' o$ e0 l( R" Y9 H! n6 P2 w5 V% z
  698.       if(!Dn.Connected())
    ( B6 ~. _. `8 e4 E
  699.       {
      E9 c; s4 b5 X$ v
  700.         dwTotalFiles=1;
    ' B3 i7 I6 q: g! o; @& l6 U7 K) n
  701.         dwDownLoaded=0;$ ?! g' h: `) R, `5 `1 }2 M
  702.         bSilentStep=TRUE;% N/ D) Z4 r1 R4 p
  703.         bCompressed=FALSE;0 n6 m: I- g4 S; w1 W. ?- ?& h
  704.         strExtLocal.Empty();
    6 `( m' c( H; `5 B" y0 w
  705.         strFullName="readme.txt";: c8 R0 C' v0 s- S% b- Q( ]/ T
  706.         dwProgramState=AP_CONNECT;
    * }0 x$ k, b0 s5 z3 v+ y4 q$ r+ p4 {
  707.       }
    & }5 W0 P/ {' i$ u
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();& x/ B/ q. [$ r( Z
  709.       dwStartUpSteps=2;) w, e* m1 c: ~+ Q+ b
  710.       break;- O$ k9 A. O: i4 k* w
  711.     case 2:
    & a& g' P3 [$ Y9 \9 n) S- D3 |
  712.       {5 T! w+ i0 b' `, y9 k& A' z6 ]
  713.         int iEOF;
    " q3 B1 }9 d6 \% x
  714.         FILE *fp;
    7 c& U- V8 d, E6 H! C; l  b" v' R: V
  715.         char szString[512];
    7 j9 m, T5 J" z% p( m
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    " h* l0 W  G! U, m  |
  717.         if(fp)4 q6 D3 p& F0 a% [% n
  718.         {
    / D; X& {* m4 H, T& C! [) U3 a
  719.           do' P8 w3 Y. ~$ ]0 b
  720.           {6 j# H9 x% |' _1 M
  721.             iEOF=fscanf(fp,"%s",szString);2 W) `: Z/ s: J. n6 p; N
  722.             if(strlen(szString))
    0 z7 }. N0 x8 f2 P
  723.             {/ Z( K& ]9 u& E
  724.               if(bFirstChar)
    , ^& U% Y8 V' n5 l
  725.               {+ e% `3 {! q7 X8 H! u/ P1 Q* E/ K2 I
  726.                 bFirstChar=FALSE;- e& X3 Q- H" P) \
  727.                 bConnectIsBig5=FALSE;5 v! Y5 |& t9 O4 S# G1 \
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    7 e( i) o, c0 s$ d6 ]: h  U
  729.               }
    / R1 T& C# B# Q+ F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 c* k4 f: n) @* I3 s/ m* R  S, d
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));' J7 I  N4 e- V8 ?' n( T5 r3 k
  732.               dlg->m_ListText.AddString(szString);
    , a, a# U! W* F3 w
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; {& s  y6 A1 e. t5 w4 ^
  734.               *szString=0;3 T$ S# @6 t: R
  735.             }
    ( R5 v& ^4 {( i9 U
  736.           } while(iEOF!=EOF);: r$ [- u2 T* G
  737.           fclose(fp);8 _9 ^6 d$ j7 \% P! j
  738.           unlink(".\\DownLoad\\readme.txt");
    ( P6 b, D" F% b0 M/ L3 g
  739.           dwStartUpSteps=3;
      ?- p3 H9 u! Z$ }& [% @( D
  740.         }" T! d  G: U$ B* n- x. n
  741.       }
    : Y: G- E( x, [0 T
  742.       break;
    + v7 N& \' U- f# T* s# \; w7 q
  743.     case 3:3 |& t1 A( J- X. L) [# S
  744.       if(!Dn.Connected())
    - H: L  U' R( p3 H& i" N4 b3 C+ l$ M
  745.       {
    : }. F( t6 W8 @4 K, S
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);( g3 _2 G8 X$ x9 ]4 `3 j
  747.         dwTotalFiles=1;* \2 h3 F/ {0 V0 F' s
  748.         dwDownLoaded=0;% n& _/ s2 w( A! X
  749.         bSilentStep=TRUE;. w1 o7 z- o  i" N7 Q: S. B
  750.         bCompressed=FALSE;
    ' V6 V5 X) `) M- U8 i3 S/ D6 m
  751.         strExtLocal.Empty();6 c7 q) W' f. Q
  752.         strFullName="checkversion.txt";
    9 g# [/ ^2 M2 y, t2 W  A
  753.         dwProgramState=AP_CONNECT;
    ; ?, u0 g/ o5 d. m5 k: G$ Q
  754.       }
    & _& z4 S5 }% B8 o% \
  755.       dwStartUpSteps=4;
    9 H* M! q8 m5 G- b1 N! n
  756.       break;
    1 S) E1 U. v+ Y/ r7 }6 E5 w
  757.     case 4:) W7 @7 [- R- k$ }( J6 P
  758.       {
    % H: W1 h5 w  a5 b
  759.         FILE *fp;
    5 N# Q& M5 w* ]2 h! h1 y3 f5 p. F
  760.         char szString1[128];1 G" {9 M) e( Y) D
  761.         char szString2[128];
    " i: Z" J% \5 O, T
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # l. X- y$ p$ |3 D2 w* T
  763.         if(fp)
    2 s" k% U! g4 J% l" }
  764.         {& ?7 }! h7 x2 [, d2 s- x
  765.           fscanf(fp,"%s",szString1);4 q  K. M4 ^7 k# E2 \# J
  766.           fclose(fp);
    9 b# I, {5 ?4 R$ \9 s' i
  767.           fCheckVersion=atof(szString1);+ D+ y( i) r  W1 j  y
  768.           fp=fopen(".\\checkversion.dat","r");
    , s. |9 i. I8 u( o" ^+ o* w7 @
  769.           if(fp)
    ; Z& M( ^0 o& O0 l' v" C
  770.           {
    & W1 {7 D! _/ w- K- V
  771.             fscanf(fp,"%s",szString2);
    7 ~8 a+ w4 `4 H- m- X5 j
  772.             fclose(fp);$ A2 g9 g' h7 O8 \
  773.             if(atof(szString1)!=atof(szString2))# U; \- f7 @4 ?, P& I: B
  774.             {
    4 O& @7 e9 c: u
  775.               if(!Dn.Connected())4 M. G( b# n$ L, u1 ?% W
  776.               {  Q6 G5 w/ D0 F
  777.                 bFirstUpdate=TRUE;: ^$ {5 Q! D1 I" g
  778.                 dwTotalFiles=1;9 o$ S0 B6 B; L; A0 u( ]* s
  779.                 dwDownLoaded=0;/ i, G4 D* B3 l0 t
  780.                 bSilentStep=FALSE;$ D% E' a& o( x2 ^. d) o. ?
  781.                 bCompressed=TRUE;8 ^; P9 _' r, d
  782.                 strExtLocal=".\\DownLoad\";6 P/ `0 U' C4 f7 \: G6 k/ B
  783.                 strFullName="update.txt";) ^3 {) c/ A) o3 K1 q' o
  784.                 dwProgramState=AP_CONNECT;% t. J/ X* a$ E7 u6 d1 |- ]% H
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 y! f5 ?3 o" h
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' `* D6 [6 y" W* ~8 ^7 v- Z- M! _
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    7 X* {* G& ^/ F/ b' w0 M. }

  788. ) r) y4 L- D; J  B3 A
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' |( _/ J2 {8 y# Y) P
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    4 U3 Y7 H' Y$ X* S
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)& W$ {1 O# ]4 B/ ]8 U/ F
  792.                 {
    9 r  b2 N* f8 V+ `2 ~6 ]8 l
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    $ `6 C1 j& }1 h- [) j
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    9 w+ O* Z9 F4 E+ e% V9 t# P
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    4 V) k/ M# R4 S; |4 R$ g! b/ _/ J' l0 r
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : D& e; ?: F3 W  D5 H! F
  797. % c4 _  J( y/ W) |$ h" I& e
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    8 I$ A8 i: I6 {- }
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; K- s9 d9 \4 f1 s+ b# y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");) G$ b: ~1 E7 B$ O& R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! k5 ~; f% `% k0 u+ q: n. T
  802.                 }$ P5 r+ D9 y, K' l3 `
  803.                 dwStartUpSteps=5;6 q) G1 u, s# O- X1 W5 U
  804.               }7 O9 O! ~- V( \. B
  805.             }: H, ?9 R, k. O! Y4 |
  806.             else: t/ {  F+ x0 h! k
  807.             {* J9 K: w' k+ i$ g
  808.               unlink(".\\DownLoad\\checkversion.txt");  h. A  p. m1 h
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");, D0 L! p5 H- Y9 R2 L( p! D( p% U& T
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; Z* w" {0 c7 F9 W6 S, a4 m
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; _+ a. D1 o8 ^, v. Y: j

  812. ' h4 B; Z0 M& O2 t9 F& w
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. M" ^8 x5 @7 X5 }, k4 i( X9 N8 P
  814.               dwStartUpSteps=99;
    . U0 v2 d! y  ]7 h9 N8 G& x
  815.               bFinishUpdated=TRUE;3 Y: n# @4 C# i7 S
  816.               bCanUpdate=TRUE;/ o% v& T1 n. R4 }' O& n8 y  J
  817.             }# e1 d8 q. X0 z1 I) J( X+ I
  818.           }+ j" Z# ^* P. U) x5 U
  819.           else/ ~0 }5 N% n( d7 t' f$ e4 C; D1 t* l
  820.           {' c4 B. u! B7 N& y% s5 I  ?# b
  821.             if(!Dn.Connected()): J/ l! j7 B: }. x2 b! V+ n
  822.             {
    4 U* y& f- i9 ]3 }6 k% h4 [- Y4 M
  823.               bFirstUpdate=TRUE;
    3 I# W3 n: V& a8 a+ a5 w# z4 Q
  824.               dwTotalFiles=1;
    ! ~5 I4 Z6 J; a& k. F/ Z
  825.               dwDownLoaded=0;& f1 t$ ], r# `9 D  {
  826.               bSilentStep=FALSE;
    + N; {/ p# B' y# k/ C. a0 U5 r
  827.               bCompressed=TRUE;  I' u' d9 L' f5 P
  828.               strExtLocal=".\\DownLoad\";
    6 `* j+ l* T3 K* K, |
  829.               strFullName="update.txt";
    - z3 w3 r" x( g# N
  830.               dwProgramState=AP_CONNECT;, o0 \2 s  H  c
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 t9 z3 ]/ S" F5 ]0 Q4 F* c
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, c; n4 J9 I8 E" i2 [; f# B
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");( w/ Z2 W" l, [
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 m6 p4 z& ~3 q, u
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 y& N0 x3 Y9 L2 v5 d
  836.               if(GetFileAttributes("Wsa.zip" )!=-1), v- T% V& G$ Z8 ^  z, ~
  837.               {8 i7 l" J+ ?5 y9 d6 R) n. T
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    : K& Z, o# c3 R. E6 O" N
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ! P6 s' [# `1 S( W
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");; b: l7 ?2 k/ k; e# x
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , @( J1 B: g0 O* r& I" n8 `
  842.                 0 Y7 a, Z# z" _9 L/ A# |& l! Q
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - ^5 F- N# x1 z' J8 L
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, k. r+ G% c4 h4 V, ~! }
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    * R3 ~2 G# M1 c- k8 L
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! {* f# e: u7 H3 \" b3 k6 }- A# e- t$ F
  847.               }
    # D& j+ P4 r0 Z- M* ~. I5 {$ X8 P
  848.               dwStartUpSteps=5;' x$ p$ `: v4 Z
  849.             }, I5 F8 f& J" Z3 r- s3 R
  850.           }" Y  z- Z$ c  R
  851.         }
    4 O; b# p% y6 Z  V
  852.         else
    ( v4 y2 G1 T2 B1 s& z
  853.         {  }7 [0 U/ ~( R9 f! K
  854.           dwStartUpSteps=3;
    ; f: r9 g9 N8 F3 w6 A
  855.         }3 g( P. i* F& I; p% P- ]
  856.       }
    - u6 c. p5 `; G! B: v) j6 F
  857.       break;: B$ l# F% w5 N
  858.     case 5:
    5 D/ |  c+ T7 o4 h1 |2 X; Y
  859.       {
    3 {: }' U; U: T# w
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)0 X- W7 z3 ~, V( `$ M
  861.         {. u2 q8 q7 J3 M" ]: r: q- m
  862.           int opt_overwrite=1;; {% W3 J: y# s  Z
  863.           int opt_do_extract_withoutpath=0;
    5 L' A& }  c2 H$ W6 U
  864.           unzFile uf=NULL;
    ; C2 }( r* h7 v" e$ L! J

  865. : M3 `1 M( V) u: j+ r; B3 c0 C
  866.           uf=unzOpen("Wsa.zip");
    + V- o. m2 s- Z6 y7 H
  867.           if(uf)
    . S% U3 u& Y- p0 t; r1 o
  868.           {
    ' s( R2 {7 E) {
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    : j. S& X  d& U0 a( I
  870.             unzClose(uf);& |+ e% X4 C. F, J- J2 T
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");! ]1 g% c7 q4 _& O2 w' x+ D  t6 r
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    6 [3 O2 t; d; n0 f) l4 E5 Y
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");4 y2 X8 |8 K- z. P! Z- W8 U
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" X) q/ F: _5 [; `
  875.           }
    & W7 @- Q9 f& `4 D# `5 v! f
  876.           DeleteFile("Wsa.zip" );
    0 m8 S$ D. U( t& g0 ~$ U
  877.         }
    $ k, _0 j* T, ?8 }/ O: z- V$ z
  878. . D) B3 d$ W( d: E  b& I! X
  879.         if(CheckLocalVersion())
    + s, y4 y$ l: k$ I. C! ~0 r3 G
  880.         {
    6 r7 Y' D1 Q, Y% ^+ W8 w$ ^- q
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    6 ?" }2 K$ Z# K1 n/ j# u
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");7 H( r/ m( r& D8 g4 i
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");  f8 q! ~; }( @( w4 P% f& E
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 F5 t4 c7 }+ I& {! E3 y) s
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    , F- q2 c& f; ?  Z% H0 ]
  886.           dwStartUpSteps=99;
      l/ ?1 \& o0 Y- n2 W
  887.         }
    * q2 e& e* x, n* L
  888.         else+ F" p( |0 W: {. \; i
  889.         {. n* j% _* P5 Q" \6 `& H
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# {. w# b1 i0 T
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ I0 K; n7 Y. @% w. x$ L" \& `
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 y( j& q: C5 R' H$ n

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

1 c6 C; H# h% H( J4 d) H5 _2 g4 T& x

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

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

GMT+8, 2026-1-15 13:56

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表