找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式

1 n( E9 v  K  Z+ e. R# V( w7 H
  1. / RevApp.cpp : Defines the class behaviors for the application.5 n* G0 G  C. T) O5 s2 a
  2. //. e6 D) l% Y6 i
  3. 8 W0 j0 K2 h' r) \: E4 k( H
  4. #include "stdafx.h"$ R2 H, T0 v' j% h- B- _
  5. ) C# @! }7 t! J" Z4 T
  6. //#define UNICODE3 S8 g5 Y. V/ n9 t8 n
  7. //#include <gdiplus.h>
    0 n6 u6 s; g) }/ C4 z
  8. //using namespace Gdiplus;
    - F4 E$ V7 r4 C

  9. " v8 |5 o& d8 q
  10. #include "RevApp.h"
    4 g$ ~7 D2 \3 _7 w, O
  11. #include "RevAppDlg.h"
    $ u4 B* V" c" z. ~" e/ \9 ^
  12. # y0 e7 }$ ~' @1 }0 k* y
  13. #pragma warning(disable:4786)
    . Z: D% w  a& m' t2 V1 ]
  14. #include <map>
    & C+ ?4 J. q5 ?  g' a5 c& T3 @4 d
  15. #include <list>( p) M- h" @) Y9 @( Z: g
  16. #include <direct.h>3 ^, o- L# m: Y
  17. $ `0 K9 r, u2 H/ n9 l+ ^7 R
  18. #ifdef _DEBUG
    7 r  o. b5 g5 x! }' t( p# k0 {
  19. #define new DEBUG_NEW
    - G% H8 n0 ^" D& H
  20. #undef THIS_FILE
      o+ J7 s# o" S" W2 o
  21. static char THIS_FILE[] = __FILE__;$ Q% q5 A! i# d5 ~
  22. #endif
    9 k, c1 Z$ [, z- @0 ~2 l7 ~
  23. #include "SkinResDef.h"
    3 F, v, \7 L- z3 e  S! p3 s
  24. #include "ChangeBG.h"# L1 n- d+ K* U5 r& r: K
  25. #include "AFXINET.H"
    , v0 S# M- F0 p0 ]# L$ `
  26. . T2 E( Y* X/ |: q
  27. #define TRADITIONAL_CHINESE 0
    1 l; l4 `( q" y6 z+ s; C
  28. #define SIMPLIFY_CHINESE 1: f5 M7 p% r' V# G& l% R7 Q! X
  29. #define ENGLISH 2
    : ~' y9 W" ^+ ]( A1 Q
  30. int m_iLanguage = ENGLISH;5 Q7 q5 [( J" ^9 B) w
  31. /////////////////////////////////////////////////////////////////////////////+ H# E/ W# k8 E% r' W
  32. // CRevAppApp3 t/ @# O$ s/ Q4 O0 P  E$ [. a

  33. ( V+ K1 I( ?) X5 Y7 V, \
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ' A8 c. e* `# R. U8 |& M: J
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ( f. C) {$ ]# l2 c9 B
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 ?" Z1 q  ?" V8 d% ^  m" |# t3 ^
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    3 `& c/ |6 V4 E
  38.         //}}AFX_MSG
    ( B4 K2 T3 F# d! t1 r5 I' \9 z, G5 ?; i
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)( C$ C* s+ \; V0 o* Q
  40. END_MESSAGE_MAP()1 @  g& P; {( O% y. ]
  41. ) e/ L* L! i! p' f9 f
  42. /////////////////////////////////////////////////////////////////////////////
    % a) n- z5 e, d& [% o9 S0 o
  43. // CRevAppApp construction: ^# \' Z& V0 s

  44. 8 V/ v/ x, v; Y
  45. CRevAppApp::CRevAppApp()+ ]7 K" n. Z9 N6 s8 _% o
  46. {
      ?" _, q+ a& }8 O8 K0 H: \' d
  47.         // TODO: add construction code here,2 e! V8 H" X: A/ @8 I5 Q5 n
  48.         // Place all significant initialization in InitInstance
    - U5 S9 U. G" a! f1 M, S
  49.   bDisplayIsBig5=FALSE;. a% ~! C7 o9 |: o/ L
  50.   bRestartUpdater=FALSE;
    $ J: K1 G& ~: b& f
  51.   bFinishUpdated=FALSE;
    7 E+ i) y5 r* q2 x8 @
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ! s4 N2 U8 t. w0 ?8 n7 N. U0 P+ i
  53.   InitChangeDataBig52GBKS();0 N# n4 b' L; g- |
  54.   InitChangeDataGBKS2Big5();
    6 c' U  Z2 K' t# W! W& K
  55.         //
    * X7 m( l% y9 k  x6 \
  56.         bClickRunExe = FALSE;9 V% F$ M4 o+ V" C) o" y& v
  57.         //, V, N$ H! z# a" v" D' Y
  58. }
    " N+ q- B) `& l
  59. 9 ~- Z5 ?! B: X9 ]
  60. CRevAppApp::~CRevAppApp()
    4 e8 |$ U6 D  y# z
  61. {
    ' o9 D. j& G4 H7 l+ ^; p
  62.         // TODO: add construction code here,7 t  q0 ~9 d7 E) U! F! J1 \+ P
  63.         // Place all significant initialization in InitInstance% w' h" G+ t+ a, Z3 _4 D- v( ^
  64.   EndChangeData();# Q* \/ a4 \9 a0 R- T3 s$ L& \8 ~0 ?$ J
  65. }' J0 k! ^* R' p& o0 I$ N

  66.   M& B( {1 \7 o* B6 D( Q6 }/ U
  67. /////////////////////////////////////////////////////////////////////////////
    / T3 o. q7 A4 L! p4 x2 q
  68. // The one and only CRevAppApp object' J* w# g( v6 i" b" P- g5 }
  69. # E( x( I1 y! x! E( }1 w* \
  70. CRevAppApp theApp;
    7 c: G+ b% C  ?; ^' \$ F

  71. - r4 g# H9 d4 M; j9 _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    4 t) i* W$ L- f
  73. {
    2 N; b7 v. Q+ ^+ @0 k  \9 ?) J" @
  74.   int iEOF=0;
    1 _! P4 s  t; a$ Z# @
  75.   char szTempName[MAX_PATH];
    # t9 k: I4 T+ s
  76.   *szFileName=0;' g; H5 {/ E+ `, }
  77.   iEOF=fscanf(fp,"%s",szTempName);
    4 G; \0 F# ~3 v- N8 S' u7 M9 Y0 \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    & [" j0 R) G' N* E
  79.   {" @6 A3 r7 @- I: j1 r8 Q( N4 l  x
  80.     strcpy(szFileName,&szTempName[1]);
    8 c$ x; s5 {5 d& y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    / {& i, W1 [+ F' [) I
  82.     {
    2 z  h  z& P1 a" E6 S
  83.       iEOF=fscanf(fp,"%s",szTempName);) [  }( b! |2 k# T1 E7 C3 J; J
  84.       strcat(szFileName," ");
    + i+ x4 y4 t! ~
  85.       strcat(szFileName,szTempName);( M9 a! \9 [+ @. g. }7 \
  86.     }
    3 V- ^& N( y' Y+ \
  87.     if(strlen(szFileName)>=1): |! y8 K5 H( D' V1 G: P6 c
  88.     {% ]3 D, R  A. }, o- D
  89.       szFileName[strlen(szFileName)-1]=0;
      N' I: u* M9 r+ J
  90.     }
    6 n) Y" `% h) C+ p4 ]& K% D4 [
  91.   }4 w4 C2 Y" w. m7 T( F5 V/ G
  92.   return szFileName;
    ' ~+ H" ~* r6 [1 c1 r& G
  93. }
    2 j3 w$ S  w" o" J+ }7 }4 R
  94. / _9 ^: F( n! |# C. u8 V3 J
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)" y1 e; W% Z+ Y1 `4 z
  96. {
    2 x) L0 C1 N7 L- M4 y# v5 z" S
  97.   FILE *fp;
    , r7 M/ z; T2 M; p- l
  98.   char *key=NULL;# U3 N' W; m5 o# d3 V- i3 L! Y
  99.   char version[MAX_PATH];3 G& d8 u' E$ M9 T9 o% l$ T2 F
  100.   LPUPDATEFILE file,olds;
    " ?( P7 C8 ~2 B8 q* j- y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 M! P  j0 P& S4 E! V

  102. 0 f1 y3 p- l( m
  103.   UpdateList.clear();
    ' `4 u8 F) \) D8 H. R: f6 n8 m
  104.   UpdateFile.clear();
    3 m# q2 G" Y( U+ L4 P1 h
  105.   if(GetFileAttributes(filename)==-1) return false;2 K( B* e  \1 X3 K! u
  106.   if(!(fp=fopen(filename,"r"))) return false;, W- f' f2 x1 `" ~2 z* A. ~% N! I* E
  107.   fscanf(fp,"%s",version);
    " W$ t! c9 m# a
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    % K' a. M  S# Q. g0 M* ?. T
  109.   while(fscanf(fp,"%s",version)!=EOF), L4 h3 p$ w% `
  110.   {
    " e; ^3 w' V- {+ m
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : L' r. F" k7 m$ V
  112.     fscanf(fp,"%s",file->path);
    " x$ M! Z" ~6 e4 s
  113.     ReadFileNames(fp,file->file);* H* W, b' ?2 ]- ^
  114.     strcpy(file->full,".");* {' E! Q! Q; m' K1 Y, A/ `' {
  115.     strcat(file->full,file->path);
    4 K* r) p0 R8 _& I7 F5 W1 d
  116.     strcat(file->full,file->file);/ g* p* r: @1 ?: g
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())% V2 r1 n7 z! g& N! t! }
  118.     {/ S# E. d4 e  b# U
  119.       file->vers=(float)atof(version);0 K& l/ l& j+ |$ W! M# S
  120.       UpdateList.push_back(file->full);
    & K/ N8 N* b, i
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ; j, P3 F( v& N0 C$ g4 t* B4 m2 g
  122.     }
    , ?  F- ^2 f( p
  123.     else
    / |# a" Q. L8 ^& C4 C7 }& A
  124.     {! q% }! D. f% y8 Q5 A/ V
  125.       olds=(*p).second;0 k# ~' u  w9 a
  126.       if(olds->vers<(float)atof(version))6 N9 d1 v2 ], {/ p! A* f0 }
  127.       {
    5 _; f4 m2 {  q  ?; \. \
  128.         olds->vers=(float)atof(version);
    ) T" y# D# n3 H2 h/ u7 r8 v5 O
  129.       }
    3 Y; e+ R' f% @9 {' a
  130.       free(file);
    , R7 A8 @# D% _' J; O
  131.     }- L1 F/ y( Q# }2 T0 Q4 l. m
  132.   }
    2 Y* p: w2 D- n# t( K
  133.   fclose(fp);9 s% C+ B  l/ \! k# v* L
  134.   return true;) H1 O9 s) G  A/ j0 I0 {# {/ E
  135. }
    , Z; @( u: N3 V# w  U
  136. $ B5 k' ~9 E/ a- c7 a8 x
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ; h) ]+ z# F3 A* M, A6 w% g2 m
  138. {
    ! X  J; w. B. r7 T4 ~* k; U
  139.   TCHAR  szFull[MAX_PATH];9 _" C. X/ a, o
  140.   TCHAR *token,*inter;
    : o+ U/ y1 K7 W7 g* S$ z
  141.   *szPath=0;
    ( ^6 E8 L9 j2 p  w" I6 Q
  142.   strcpy(szFull,szFullPath);' m5 r& C1 c: G0 j3 \4 D& _/ T$ p
  143.   token=strtok(szFull,"\\/");6 K; i6 E1 {9 _: @. w  R8 @
  144.   inter=token;. w5 A+ D# i" V( V
  145.   while(token=strtok(NULL,"\\/"))
    # F' x6 W. D. f' l. o
  146.   {) F. k9 L! w3 R1 x# g
  147.     strcat(szPath,inter);
    3 I6 _) Y4 z6 W6 T4 D$ p1 g9 _
  148.     strcat(szPath,"\");( e8 p% D  `8 i: O
  149.     inter=token;
      d. r: W  D; z. W. i/ b& Q
  150.   }/ w' S# Q2 `4 k. l4 ^
  151.   return strlen(szPath);% N- V* \! z% W) G- y( W. z
  152. }
    6 ~+ a3 d( i" I( T( V! w% k4 F: e( Z

  153. : ]+ d( g- S) \7 x4 l# C- A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 t6 j% O: G5 O4 S+ V7 Q, c
  155. {! r9 e/ C  V; D
  156.   DWORD attrib=GetFileAttributes(Target);
    8 Z" b6 z8 L/ c! O' K
  157.   if(attrib!=-1)4 k0 O1 S& ~& G& |7 _( X
  158.   {2 T8 q) B  t( C* X
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' B/ I7 d  I$ o7 i3 e6 M
  160.     {4 o4 u9 G) q: g- v. q8 Z1 t  ]
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);$ e6 m; w; @1 e% H  ^  n) V
  162.       SetFileAttributes(Target,attrib);
    4 h' X  ]- v2 y- q1 F
  163.     }3 [  f* f. |+ D
  164.   }$ U$ j7 C9 `8 H4 ?! o  k
  165.   CopyFile(Source,Target,Erase);
    ) [5 H8 [& x& _% f. F; Y
  166. }
    - o' W4 ~2 i, s
  167. 8 P/ l5 m, t* @+ K$ l/ Q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ F1 r9 j! G7 R
  169. {7 O2 A0 k" S0 Y  Z% l( A" ?/ L
  170.      FILE *fp;* M3 J0 \" o' W+ r: z
  171.      char  szBuffer[8192];- o: z5 ]+ g  |& P
  172.   va_list  argptr;
    ! I) O5 w7 T8 M/ _" @
  173. 9 j+ g5 M( t2 S' y! g0 H
  174.         va_start(argptr,message);! _* ^9 L  b: F# V1 X8 u, {
  175.         vsprintf(szBuffer,message,argptr);* }9 j& @$ G3 f5 {' U
  176.         va_end(argptr);+ B2 N  A( s7 o  i! }
  177.   fp=fopen(FileName,"a");
    4 F& q7 B1 L. E& [! S
  178.   if(fp)+ ?( e" f+ W- K* Y' f" T5 V5 @
  179.   {
    ; y$ H9 N) ~3 O2 y* M8 P2 s
  180.     fprintf(fp,szBuffer);
    $ U. w% F& H9 f  b* y/ }! s
  181.     fclose(fp);% e4 U5 D3 z, O; E% X
  182.           _flushall();1 m0 W  `/ I1 L" T
  183.   }
    . e. a6 j( U  {  w) R7 W' b% M
  184. }& v! m- U' J4 R# a; C0 h5 F

  185. 4 H6 |3 h& ^8 g8 G8 G
  186. BOOL CRevAppApp::Fclearf(char *FileName)4 j9 w7 V& P3 }) n
  187. {
    ( ]9 H; I# e* Q9 Z
  188.      FILE *fp;% {0 l& {5 I6 m3 R8 E
  189.     DWORD  attrib;2 v3 r7 ^3 X1 T
  190.   attrib=GetFileAttributes(FileName);
    1 @8 r+ [) k" O" C' j  V4 m/ k  _
  191.   if(attrib!=-1)
    " k3 p9 ]' n, |8 E! I
  192.   {, q! q1 b& E# D7 S6 I& s
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);) N( X8 s: T% f7 U) y$ x
  194.     if(!SetFileAttributes(FileName,attrib))
      Q& U6 A: |! _6 D
  195.     {3 c5 L: N1 a9 j0 M. V& E
  196.       return FALSE;
    , r- R) b3 F; U! ~% p
  197.     }
    2 S1 x( z* V) O' f& d
  198.   }
    0 i$ r5 U* F* y! v) z
  199.   fp=fopen(FileName,"wb");
    ! I7 s, P& p1 r
  200.   if(fp)
    & l( i% X5 Y/ e9 J% p  R
  201.   {% z1 W6 `. j  t, A
  202.     fclose(fp);
    8 N' {1 a: q4 m4 M$ q( p7 `
  203.   }0 Y& e! |" _( ^/ x' c0 Y; w
  204.   return TRUE;/ v2 z% E. V1 n4 T: d5 M
  205. }
    ) {1 _, h# l! s5 Z9 n- d
  206. 8 r7 T/ a9 m# y% _; c
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    8 b& N3 m9 b4 B" k' ?) N7 T% C
  208. {; x# u6 g6 {  X# T$ x$ |
  209.   char filename[MAX_PATH];
    6 o: i. w2 E( y' K9 Z- F
  210.   LPUPDATEFILE file,olds;
      u2 e' B* b" k/ l" w5 T
  211.   std::map<int,CString>::iterator i;: H8 `+ o6 e1 P' C5 E+ k
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 y" j" F4 a. k3 B6 |
  213.   std::list<CString>::iterator l;5 }& `' M  O" U; n% `1 T
  214. . ~4 ~" w( G- ]5 o2 s% @! l
  215.   if(bFirstUpdate)0 }6 X: K* C$ G* r: v' e' }5 l+ L
  216.   {
    + c4 l/ F% I: [0 R% W8 q
  217.     dwCurrFile=0;; i/ c- N* c  ^
  218.     bFirstUpdate=FALSE;( ~' U/ Q! Y. N( v) r# a' \
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! |$ h; O/ c8 |7 U# d3 G; g+ E8 w
  220.     {
    * p. p8 \( J' w6 v0 P
  221.       dwTotalFiles=UpdateLocal.size();
    4 M& u" e3 j3 F1 a/ s4 x8 F
  222.       dwDownLoaded=0;
    / `' u  }4 X# b! [2 U
  223.       bSilentStep=FALSE;
    2 i, {! w3 I# F- L0 F. U. B0 ^
  224.       bCompressed=TRUE;9 L' J% {/ R( ~
  225.       strExtLocal.Empty();
    % d% F1 s6 W# n: t# s
  226.       strFullName=(*i).second;5 r+ n8 x, S( c" g$ o1 O
  227.       dwProgramState=AP_CONNECT;/ `9 w9 Y6 @0 R
  228.       return TRUE;, i/ x  [$ E4 |' h
  229.     }5 ^) u& l$ Q- w  F  o& h
  230.   }$ D( N: l6 H2 r: W. w
  231.   else if(bRestartUpdater==FALSE)# _9 a7 I& ]: d7 ^3 o8 \4 g0 y& P
  232.   {0 N" S" y. p+ f6 C+ ?
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())( n! D6 I( q4 D3 ^
  234.     {
    ) ]4 P; j3 c3 i, T$ T* B
  235.       file=(*p).second;' _8 |0 p) x* f0 G% P+ Z5 k3 |7 m6 b
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())+ B% K$ O% ?+ M5 ]! U
  237.       {* o% r4 t: `& _9 Z! k) ~
  238.         olds=(*p).second;5 @' ?5 l# y$ q
  239.         olds->vers=file->vers;
    ) p* R3 W: E* I: w1 B/ w
  240.       }  n8 t& y  D3 `. b; t! ]5 H4 }
  241.       else
    2 R0 R3 t, C4 l5 S0 k2 g
  242.       {
    * F4 Y) d( J7 a0 q! P5 A& Q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 N2 V6 A' Q8 W' [  ?$ m
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) O  t: W) G: o8 _: C; }
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    # G  D. @/ s8 `! o
  246.       }' S+ G! S6 l) c3 p( g! c
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");8 t5 d5 r; P1 U1 V& p/ v
  248.       sprintf(filename,"(%s)",file->file);
    & }2 E  J/ A1 i) O
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( E9 K) l6 V6 G6 s8 N7 m
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : J  N- x- h' J( j) j8 j2 N, z6 |5 _
  251.     }
    6 x. Q4 r5 ~0 T3 u6 A" U8 w1 n3 U4 c
  252.     dwCurrFile++;
    4 v1 R7 R8 M6 [7 `" n" }
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) O9 U" Q- w3 K/ w
  254.     {% r+ z! f; C$ U: O& O
  255.       bSilentStep=FALSE;
    ( j4 Y- N6 I6 x9 s
  256.       bCompressed=TRUE;
    0 A7 H# V, o3 z5 }* U
  257.       strExtLocal.Empty();
    2 \6 p2 I! a0 M: R4 R; M4 g
  258.       strFullName=(*i).second;
    ; H) J2 q! [3 F2 `( r. I
  259.       dwProgramState=AP_CONNECT;9 X  e$ w9 R4 z7 E: ^% z
  260.       return TRUE;
    % ~8 b$ O$ `) I7 y
  261.     }
    . L7 V+ i( k$ W( X# Q
  262.     if(!bRestartUpdater)
    ; [# m4 d- t8 Z3 W
  263.     {
    ! Y, Z% T/ ^  c5 c! v
  264.       int iCurrSize,iFileSize;
    1 A* y* h* S" A! J, D) D
  265.       iCurrSize=0;
    : }* |5 _  g, h
  266.       iFileSize=UpdateList2.size();# G7 ^, O4 r6 u% ?  S0 _
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    2 h+ g" q# [: {* ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    0 {+ y8 w0 {6 ^( x' h
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    1 G: w& g( y5 ^* L% \' A5 S% G
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* [; m' \2 q# L
  271.       Fclearf(".\\update.dat");" K& H6 w+ P* k+ x3 s8 f- b2 I! |
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    $ E/ l1 A8 c7 K9 J! u8 w2 r
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & ]# Y3 I, u! n2 w  F' x, a0 u
  274.       {
    " k$ k6 I% p6 u/ L# s
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()). k% X; [$ ?& V! z+ \
  276.         {
    - Q. s9 m1 Z8 N% p9 o' }. X/ q( A
  277.           file=(*p).second;
    : [7 [- d: |! C; F
  278.           sprintf(filename,"(%s)",file->file);
    6 Y! I) m$ x, A/ A; |2 b4 @$ m
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  L& d1 p4 t/ f; H) h
  280.           iCurrSize++;
    3 W" c6 g7 @/ p! t, S- p  {
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    1 J6 X1 S2 G: t) ]
  282.         }6 Y* [- `2 ~0 K/ a$ z# J8 P$ d
  283.       }
    8 n1 M; P. U1 M& K" Y
  284.       unlink(".\\update.txt");
    5 ~9 E2 @& W% [" ?
  285.       unlink(".\\update.tmp");/ g. Q0 G; E# Z, e, q# a+ F1 ]
  286.       Fclearf(".\\checkversion.dat");7 |8 p7 e* O; J6 U' N
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( ~9 _# J* g! n! n; q) D$ O
  288.       if(UpdateLocal.size())
    ( ?( S0 U$ B) b: O+ {2 l, b5 n
  289.       {
    8 q( p& ~( @1 R& J; d  h! ]) d
  290.         UpdateLocal.clear();8 j3 X8 T" T" L2 ?7 w
  291.       }
    . \4 ]3 f: E/ N2 L9 b1 G, ~( }
  292.       if(UpdateFile3.size())& i0 c9 Z: _5 ^2 \  e/ e1 d! ?
  293.       {
    7 [- W% d$ _3 M% m
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    $ y# @( w& S) H9 a- n1 c% ~: G
  295.         {
    0 _% |) l' O; Y- p2 D& O
  296.           file=(*p).second;
    : }. k4 r6 F* a
  297.           free(file);
    ! F& ]5 Q8 e4 i) H1 B
  298.         }5 e5 h7 [, f6 @5 {3 ?
  299.         UpdateFile3.clear();& f. r9 N1 O$ ]5 g! E6 ]. ~' g/ Q+ A
  300.         UpdateList3.clear();
    ) K$ c) ]  a& t! ?
  301.       }$ z3 L+ S+ W0 c& t
  302.       if(UpdateFile2.size())& i' d# P6 M1 C& L* N/ E3 o( ^/ l' M6 t
  303.       {0 R2 o6 s: w2 U3 \; ~7 k0 U+ E
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 L! {8 v: r2 V! F
  305.         {7 X+ X" n4 o7 F% n/ @
  306.           file=(*p).second;, F$ K( G, M' p: S  I! Y- q: Y
  307.           free(file);, Z7 K+ W+ v0 }* H2 W; q. u0 X
  308.         }
    8 ?$ F5 k3 q2 O. a9 K: B. O% I5 i( e
  309.         UpdateFile2.clear();
    # {: m. o% O  b# v1 L
  310.         UpdateList2.clear();
    $ y* f. ]' ~% f6 o! J7 y# \( H! t) a
  311.       }
    " k( `! _4 X! V4 d8 J' ]: z
  312.       if(UpdateFile1.size())
    3 `/ u# ]+ a2 g# M* \8 h- Z5 N
  313.       {
    5 i- Y* v7 c" ?2 ^( G
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( q8 `' ^% F/ O) Z" y- U; H
  315.         {. v! H0 H+ r) m! v  x$ H
  316.           file=(*p).second;
    9 _% ]3 y+ Z' f7 g* \
  317.           free(file);
    8 H8 R' I1 b/ ?' y( B9 K5 G
  318.         }8 ~: K- E# v! z9 A) j" b7 A
  319.         UpdateFile1.clear();
    + i- L, s2 |) {+ @" c
  320.         UpdateList1.clear();7 Q3 ]; O0 ]8 r3 r# L7 c: Y
  321.       }
    ! @& r$ M0 r& L, h
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & ]1 N2 `* s- L9 f: D; r5 p) E! r
  323.     }$ V. A8 f# a: n9 Z' }7 S4 w  g
  324.   }
    + q: Q3 A( \% E7 Z
  325.   return FALSE;6 `3 B/ s5 g. |8 X8 d* t/ ?6 c
  326. }! X3 U' ]) b9 M5 G

  327. " d7 ~  r: k; @( k. o! m$ A: q
  328. void CRevAppApp::ClearAll(void)4 a& i5 X0 _; I6 x; M
  329. {
    4 ?0 p" w8 f& f, j9 D! F  }) X" U$ o
  330.   LPUPDATEFILE file;
    7 j+ L+ U3 |, w. y9 J; ?
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 `7 I* @/ z1 y$ `5 i) B

  332. 7 x) A$ o! b6 q! N
  333.   if(UpdateLocal.size())' L8 c3 H' B' W1 z; a1 m$ K! E
  334.   {
    * q' t5 ~1 Y3 \7 h
  335.     UpdateLocal.clear();
    & |" q. b: {0 |( Q7 ~
  336.   }
    ; E; l2 Z6 n# Y! a' L7 Q' x
  337.   if(UpdateFile3.size())8 `0 ?/ H3 m0 _9 S7 ?  y# N) b
  338.   {
    0 w5 |% _$ g- [$ j2 j
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 W. y( a0 h- y% G3 `
  340.     {5 i  _. s& s8 M1 {8 ?* S# F1 g
  341.       file=(*p).second;
    , r( k( [$ a' F% \
  342.       free(file);+ B+ l$ k( y4 K$ D* F3 c7 H
  343.     }
    " ~8 ?  z# T- P! \2 M# u* f
  344.     UpdateFile3.clear();
    $ A$ @' `! {& F- s" B4 f
  345.     UpdateList3.clear();
    , W! @2 r: ?2 @2 f3 G) R, T1 i
  346.   }$ W) F) t# u' j, H7 G$ E
  347.   if(UpdateFile2.size())$ ?- a5 q/ {6 \/ ]3 S8 U0 B
  348.   {2 l* _. t" [" V: p  K2 Y9 E( ~
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    2 B, w% F$ A% o* b) A+ t3 m
  350.     {
    + ^+ x6 }7 ~0 f' E3 f& j
  351.       file=(*p).second;
    5 [; G, b! P( M0 g% \+ w- W" K7 v
  352.       free(file);3 {' y9 p7 B' c0 V2 }; l
  353.     }
    , \( M8 V2 Y  K$ Q" [
  354.     UpdateFile2.clear();
    5 C; e% L" [9 Z9 P
  355.     UpdateList2.clear();
    % V8 ?$ K7 |/ g7 A) S
  356.   }
    9 u/ n& t, U7 a1 u  ?+ o
  357.   if(UpdateFile1.size())7 U5 H, r# G" J6 g, F+ w
  358.   {
    " W% ^7 v( K  i/ n" Q$ z" i9 s
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 m0 R7 R! R1 B& x9 ~% O% z: W
  360.     {& O8 f) N& p  d* X/ h
  361.       file=(*p).second;
    / W+ I# l( P! L- K4 j* ?, i# P
  362.       free(file);" i+ u4 x  S$ A  @8 e4 |
  363.     }: l# j* R4 P, o. W( q6 P
  364.     UpdateFile1.clear();- x% a/ D0 n! H- V$ c) d2 h3 W
  365.     UpdateList1.clear();
    : G* y3 c; r. B( H" T( f7 P- Q& R
  366.   }
    / T* r# L! S2 |8 G; T5 o* f
  367. }  & W3 z: Q5 s5 e8 m$ x( o, B
  368.   
    0 L/ F5 M5 k. l/ k& o
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 t( F; q/ `7 T! g3 X2 c! w# x
  370. {& a( h( s; P6 o2 n/ n, w) I$ t
  371.   int c;6 D- {3 {2 ^& O
  372.   LPUPDATEFILE file1,file2;. ]/ H& K5 o% J! V8 _
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;1 o* v4 q  j7 X; s  e# I9 ?
  374.   std::list<CString>::iterator l;) g$ w' i- V. U2 P8 y2 J; S
  375. 3 w0 R7 o9 z/ ~& d' v8 @1 c, B9 G
  376.   UpdateLocal.clear();5 p) _. e1 E- l
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    + u0 v/ E/ ?2 |' P. j
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ( |, ~. W* h% X, K6 G: I3 G
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    $ d- A# k" ~: i1 G: ]$ R7 o
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    . `5 F, k- y: K
  381.   if(UpdateFile3.size()): H/ M- B+ l& q+ c5 d( |
  382.   {8 y* W( B/ u! P. Z, J( \% y/ a$ B
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)9 `1 R* P7 T/ l) f4 Z
  384.     {
    ; O% @% \- I3 D- ?4 _
  385.       file2=(LPUPDATEFILE)(*i).second;" z; b, o: v" C; v8 O) X# |2 v7 Q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    % v5 z2 [' H/ {8 k$ X$ w$ u
  387.       {8 }4 Z+ j+ \# k* y
  388.         file1=(LPUPDATEFILE)(*p).second;2 H- A6 N: j. e, ~! G
  389.         file1->vers=file2->vers;
    , N  M" e# X' y$ o+ B
  390.       }1 v' \1 a1 s6 C6 |, F. m3 W( Y& T
  391.       else" E, |: E) U6 o, K
  392.       {, L; m5 g% J" C! p( z: W: N$ k
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " R) g& B& e& Z# H7 M1 b
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! E9 X  I: z, t' C. p
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    2 \  l/ p1 A+ S1 f8 z- c5 z' |( z
  396.       }
    ' v5 S1 G, o, d) L. f, i5 J- p& k
  397.     }3 N  h5 P, [2 E5 x
  398.   }8 |+ J! U  B; j; p; \% a
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% C9 [: I& e5 t& E
  400.   {
    0 l! b5 u6 p" N0 s# p  T9 L) I
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 P9 v% K$ E& ?5 z0 q$ c" y
  402.     {
    1 g# F& v6 W; a4 ~; r) g3 Q
  403.       file2=(LPUPDATEFILE)(*i).second;3 `; |5 T" l$ \; }7 m
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 D5 K( }/ y" K6 H0 a/ B' a
  405.       {5 q' t# D& O$ N% x$ a- ?6 r
  406.         file1=(LPUPDATEFILE)(*p).second;
    - {3 v- B1 c% K4 K( g
  407.         if(file1->vers!=file2->vers)1 \3 P; l6 H8 W% R
  408.         {2 [0 s9 H" B: l9 J: ~* n* A; h
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 d3 o9 N  e5 c% a( U' n: B; K
  410.           c++;% b& Z" n1 k; j2 A+ f- N
  411.         }: s' T- S: E* h4 U; A0 k
  412.       }
    6 p/ P, [- L1 N/ I  L
  413.       else/ E8 T0 Q$ Z- T  I
  414.       {+ d! P% v. S: ?! ^" k8 G
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 {. {) B/ Q8 X
  416.         c++;# V& u+ C0 j3 n: X' c
  417.       }
    # q" B8 x+ ^# y! w  z
  418.     }
    6 n  u& {1 U" B1 w; [$ O  s- @7 Z2 c
  419.   }
    0 W  s8 m, ?) W
  420.   unlink(".\\DownLoad\\update.txt");$ M" E  P7 N% c( h" L1 z. `: U
  421.   if(UpdateLocal.size()) return TRUE;
    3 ]1 a0 r$ `9 s9 ~# `1 F4 H1 h6 h
  422.   else                   return FALSE;
    8 C4 b$ a7 W1 E2 x# K# ]3 q
  423. }: `8 C  L. I2 ~; w+ w! F

  424. ' R0 Z7 k: ~* B& n
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    8 p0 Y; U" N9 B4 g4 @: Y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * [4 G  h& H4 p, {
  427. : C  j  {9 V; O6 \. }

  428. * R5 C; {0 \  e% z

  429. - @- [) C7 d# @3 N7 j
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    4 g: l4 ~, ?8 v; x$ o
  431. {/ _' \6 C* e/ T' O8 u0 D
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;$ Y1 ?! [) `1 r4 j. e9 b) E/ ^; T$ b, `
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 K. R4 m5 Q2 ~1 e
  434.   {) E0 d" R  `' K$ k, S- j
  435.     char szLanguage[50];$ _- l2 ]' H! U6 V& h+ |0 |1 |
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 `" f9 W+ @& i" U, s
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  W+ m, ^- y; M5 V. Z8 L+ S
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    9 u" y2 T5 @( X8 R% F
  439.     else                                   m_iLanguage=ENGLISH;1 e/ A  [% D% Q* K3 r
  440.     char szRegister[100];6 g' m; E8 W. U1 F8 F6 [% ~' V; ~! b
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- ?8 q8 z# u& q7 I7 B  {
  442.     strRegsName=szRegister;
    6 {; n6 Y* e5 \0 _. U
  443.     char szPatchURL[100];1 Q/ j" ^' C# ~! |7 F
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # p8 t6 J  J" F. v/ A5 x- E* G! I
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 J1 ]- ^3 {( O1 c0 Y5 j+ g6 ?
  446.   }
    $ c/ v+ \7 @3 N5 \( h
  447.   else
    ) Z  c( O& N9 a: @2 J
  448.   {2 d4 @, a. v& u! A) Q* ?' \
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ m/ X; ]# I# x# _3 V/ s
  450.     strRegsName=DEFAULT_REG_URL;3 \2 K! C1 u# K) y
  451.   }# `8 P# B$ o: ]- v9 L
  452.   if(GetFileAttributes("hosts.ini")!=-1)/ r  w/ g- ?9 K8 S7 [( r3 n7 P
  453.   {! w; d6 S% o1 l: {" Z' W& T( q* s
  454.     char szIP[50];
    ! g6 ~- Q) V4 {
  455.     char szDIR[300];
    & ]- p; _2 n: d* u
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")): R& N5 P3 k: `% y# j2 m. z' E) F
  457.     {- V% O+ q2 c6 S! R& w0 ^6 N
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    7 o1 `0 d" T0 k% l) k# V: i
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");0 q8 [# {' E* e+ @/ z6 w8 T/ k
  460.       strHostName=szIP;
    8 I3 n6 e" m; D; ?
  461.       strHostPath.Format("/%s",szDIR);
      n" o; z1 h6 z: E
  462.     }
    ' C+ J$ i) j& B  v8 P$ u% i& ]+ k
  463.     else
    2 l- _6 \7 m6 i2 K0 e
  464.     {4 j) E* r- K1 l4 {# b
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)/ b0 Q/ F) V( O& o5 }
  466.       {4 p  h( M( s! d
  467.         char szLanguage[50];- m+ p; p" j4 i% ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* E, r2 N: J3 H  j
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * I+ F' e" ]4 m8 _2 A3 X) \, i
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ I+ Q4 H3 d- c
  471.         else                                   m_iLanguage=ENGLISH;# G5 N6 l, v) I, W
  472.         char szRegister[100];8 ~+ _! c$ Q, ?% z# y
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" I+ l# L! v, K; w/ c
  474.         strRegsName=szRegister;. o% v$ f0 d$ p0 s6 h. j
  475.         char szPatchURL[100];
    # c2 u0 V- F4 C; s# c
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " [3 j7 V& B( K
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 e- y1 P: y3 s4 X
  478.       }
    6 J* Z5 N% J5 d# c; r: {/ v
  479.       else
    # x# W( r3 H, ^, F
  480.       {
    6 M" W) b! I# F! u) d; d
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& y* d' B9 n* l; G. R, J
  482.         strRegsName=DEFAULT_REG_URL;8 o6 X  H) n0 u! q3 q
  483.       }
    , N3 q3 r/ Y. }) {# m- ~2 s$ ?
  484.     }
    : m0 W# s. x3 I3 ~  v( }
  485.   }
    , C+ y2 o% t) ?$ K& u* C. g
  486.   return true;
    ! t3 p; Y. o4 N( f( b; b
  487. }/ ^. M; J2 F! s5 Y2 A/ A, ?
  488.   H( c5 \- v, C2 h; _' V7 A8 q
  489. #include ".\ZLib\unzip.h"
    3 ]! v+ Q% s1 e  |- ]. q& f
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);; D3 I& x. Y) x+ Z
  491. /////////////////////////////////////////////////////////////////////////////
    & P' B3 s6 i- e0 j4 ~7 H
  492. // CRevAppApp initialization8 O0 g# g7 a& o+ d- N

  493. 2 v4 a4 b1 h+ [- z3 O
  494. BOOL CRevAppApp::InitInstance()6 d: X% c$ \" \
  495. {
    ) x( T5 T/ {1 B2 ~3 Z
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];7 n/ P! u% V3 E" t% l4 \7 t, ^

  497. % |3 ]4 p* o9 w! \) w5 m
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 z: k) C* j( w$ U; A
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))6 H2 h+ p6 |- h: n4 y3 G8 \
  500.   {
    ) D/ Q  i( _" ~
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! i6 V- V6 \4 E3 A" G4 ~7 z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
      |: H# K, i, a
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))6 ?; _4 V. W3 T% V, T. u
  504.     {% s; z* D$ d" |
  505.       strcpy(szPath,szPathTarget);2 ]2 A9 n& m9 F; F
  506.       SetCurrentDirectory(szPath);
    $ {1 W' |6 {+ l1 h$ `0 v* `% }7 u+ Z
  507.     }% \( n; `: q- O: Q0 a" i, o
  508.   }
    ' |- b: f5 D) I( Y, k! v
  509. #ifdef _DEBUG( T$ m' g, s" {' D) S; y) {
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 n5 F) Y  `4 n6 I$ ?9 Q, p9 g* Y, r6 `
  511. #else
    ' F2 g' D1 O0 z! v; ?
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      J5 \9 i/ n  _5 ]" O
  513. #endif
    % |+ ^. E% |9 k4 c* [5 @* A
  514.   {
    / e( {( y# f- w9 `; r. Y0 o- X% P
  515.     char tempFileName[MAX_PATH];9 t6 g2 C/ L3 W! k5 T- R
  516.     strcpy(tempFileName,szPathSource);
    # X+ }* ^& o% S( Y
  517.     tempFileName[strlen(szPathSource)-12]=0;8 m( W  H  M% e- Q2 [/ q) d
  518.     strcat(tempFileName,"\\$CSUpdate.exe");* I8 u& A5 S1 @3 `/ F
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);+ j3 _6 m; i3 Z. j0 N$ h$ X' \# z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    2 O$ r! f. a* v/ F
  521.     return TRUE;
    2 Q3 m3 t" M/ o
  522.   }
    / M$ N9 y5 i( R% Z0 H
  523.   // Nuke 0118: Delete run.exe( \2 U- E9 y+ U, p9 R9 {
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    , `, S; D/ P" p# T0 M4 Y( M6 _
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ) ]! x8 s: m, a5 _
  526.   if(!ReadCfgFile("Config.ini")), e! `. e7 G) U5 S6 f. Q" }
  527.   {
    7 _- x  H0 U+ l. b6 \" j2 T9 M
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
      m' Q6 L* G; w
  529.     return TRUE;
    ) h& c7 }8 X2 l
  530.   }
    & I7 s: o0 G5 C0 S6 C' `/ R2 N2 Z2 E
  531.   HANDLE mutex;$ I' |) V, D% k0 u5 i
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    0 |) B/ w$ E7 I  Q" r4 c
  533.   {
    + U/ L) D$ U+ F) Q1 T
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    + _3 n, J# [+ A/ J  v1 L9 c
  535.     {
    4 W8 a- e+ G. x) X; }# N4 U
  536.       CloseHandle(mutex);3 Q$ Z# a" X# N
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* S# O- f, A4 E1 D% _: k( P: f
  538.       return TRUE;
    ! t& j! V& A, L; @/ M
  539.     }. v, d; r; k; p9 a  ]! |6 K
  540.   }  
    + A) c  s( J$ v$ H3 @/ a
  541.   CloseHandle(mutex);
    7 w4 j8 }8 ~! y2 A% B. H( A
  542. 2 w; K7 z8 d  {* R  h
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);* O- p& c$ R2 ?
  544. 8 N& M  M4 Z+ B9 q" p+ R' A/ d, i
  545.         AfxEnableControlContainer();! h7 J9 H+ p: x) _, ^: J. v
  546. 6 Y( J* H. d% Z# Y, K
  547.   bCanUpdate=FALSE;* r! N# C4 i6 q- c+ o0 E7 l
  548.   dwStartUpSteps=1;& y1 l. e7 R  l$ N
  549.   dwProgramState=AP_NOTHING;
    ( ]1 M& F; F" N+ h$ d) J

  550. . `( @$ }* X/ Z" M
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    / N% b4 L$ I  _6 m: P. S# U

  552. 3 H( Y1 t/ X) H/ k
  553.         // Standard initialization4 p7 B+ T7 C3 X  O, ~1 m
  554.         // If you are not using these features and wish to reduce the size1 V  E7 S8 I9 V+ n/ A7 o- R
  555.         //  of your final executable, you should remove from the following& d; P" j' L7 I( A+ I* c
  556.         //  the specific initialization routines you do not need.
    ' D( F, F$ [* i6 p7 h# j' r
  557. , l; i1 c$ n- F9 ^2 P$ Q* T
  558. #ifdef _AFXDLL  o3 ]  i; h1 |1 g; l' D# K6 m, z
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL# Y) S- K7 m1 {0 ~% A. {
  560. #else
    2 w9 b& h6 D) S/ k$ M8 K. d
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 Q$ H; p% V5 s; p  ?& o& \
  562. #endif
    . W2 `: f0 D8 y
  563. 3 ]6 a* |) p8 Z5 g  [$ v- [5 u
  564.   dlg=new CRevAppDlg;- W# B, v; ^- J5 l# E8 H. z
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , i5 ~. s9 _# j+ C
  566.   dlg->ShowWindow(SW_SHOWNORMAL);! k) V1 F7 K% S
  567.   m_pMainWnd=dlg;
    3 Q- G; O7 D# ]5 o/ c" V2 n8 w4 R' d

  568. 4 o' w; A  F, l) S' v" N) Q0 {
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    9 |8 i5 `" b8 L6 l
  570. 8 v. G& T3 A  J$ X, n9 {0 c' ?" a- i
  571. //  GdiplusStartupInput gdiplusStartupInput;3 A% |2 {, J2 A6 m
  572. //  ULONG_PTR gdiplusToken;  A! |, [3 \, p  Q/ x" T: p
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);3 }+ k# h# x2 G( L8 S4 m

  574. % @7 |' x# y- ^( G0 u. ^
  575. //        CRevAppDlg dlg;8 R! m$ U. r; e1 r+ w$ N2 L
  576. //        int nResponse = dlg.DoModal();
    8 L" M7 g) a9 c4 g9 u$ q0 h
  577. //        if (nResponse == IDOK)
    0 ]% S0 R% ^, b( C- i1 j9 K
  578. //        {2 D  j# n: b$ R( z% F
  579. //                // TODO: Place code here to handle when the dialog is3 Q8 |) Z# @3 Q! c: v% p8 n
  580. //                //  dismissed with OK
    " t$ j5 a2 `1 w; H" q2 S* H
  581. //        }* q8 c1 o/ ~# e! a) O% ?
  582. //        else if (nResponse == IDCANCEL)
    5 A- o( ^, i" K
  583. //        {8 e# R2 E$ }: }6 {, P5 `/ J
  584. //                // TODO: Place code here to handle when the dialog is* H) X7 e# G: q& I" w5 d
  585. //                //  dismissed with Cancel8 G: w: ~0 k! R: X4 p- g
  586. //        }
    4 Q+ ~% f3 g; q  d7 I6 [

  587. ; I  b: ?/ o: f
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    6 ]9 C0 e: a% L0 ^" A& B9 G+ L
  589.         //  application, rather than start the application's message pump.
    $ M2 Q& F0 n. e% _5 I# f, f0 ]2 c  {
  590.         return TRUE;
    - B5 E6 k9 j( Q/ P3 q0 B& W$ ~) O
  591. }
    2 N, K' P+ E7 B. r' n0 e( O7 H
  592. # A6 s. r! h0 U: S2 N
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' @  T% i) `" w* ?0 [
  594. {
    $ }: V2 z8 @; }6 U# l
  595.   int i;) @* m2 L6 ?0 M% `  v
  596.   char *szRet;0 G, K7 \( z7 b
  597. 1 W$ G1 ^+ v* S% l9 J8 Y
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    & B! B8 V0 q9 f& T- m6 c+ h
  599.   if(sztoken)2 N. C1 S0 n0 O( p0 X* }
  600.   {
    + M) T6 G1 _7 }! y
  601.     szRet=&sztoken[itoken];4 M4 y- U5 S+ ]
  602.     while(sztoken[itoken]). U) U- G/ K6 ?$ Q  ^5 z" g4 `
  603.     {
    - k. g$ @" T. r- ]  n
  604.       for(i=0;i<(int)strlen(token);i++)3 L- t% g5 ^9 {: W& v) L& E
  605.       {0 @, V* w+ X, F% c7 @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' k8 l6 |! c3 i! I9 s
  607.         {! y" J. O( G' g/ n" n' w
  608.           sztoken[itoken++]=0;1 U9 r- d6 a; {) x: u7 n: k
  609.           sztoken[itoken++]=0;7 i9 V6 a8 F6 z$ X- I4 K
  610.           return szRet;/ S3 c$ N$ X! N; h6 a) m0 u$ b
  611.         }
    8 O! t+ i: y9 |0 X; T7 c
  612.       }
      u% _' \5 i6 [# L$ h
  613.       itoken++;) ]$ u( Z, ?2 y: S5 f
  614.     }& T2 i" G  e  h+ O$ g0 z1 l+ }
  615.   }
    - E5 T  |4 w( `6 o6 C8 c' G& ~
  616.   return NULL;  b% q/ p/ m. R3 |( ?% C+ ]
  617. }4 r) u0 C: ^9 N- N
  618. 7 }4 ^$ b- C2 d
  619. void ProcessProc(long Total,long Current)2 }/ \; R0 W  b: N+ g0 Q/ V7 B1 w
  620. {9 H1 U' L) Z* I) \  z4 F: c3 D
  621.         MSG msg;. p# B  I# t' D
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    , C9 S& O  Q# W: C7 X5 ~
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));6 @4 U$ I: C6 P& C! l
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    * n7 J3 r; p! I% i
  625.         {( V$ ^6 n7 I1 u& ~) @, g+ Q; Z
  626.                 if(!GetMessage(&msg,NULL,0,0))* x' {3 @2 v9 A0 _. _- ?
  627.                 {7 v7 D! H$ N0 ~2 W1 E  R
  628.                         return;
    ( [2 A, [. v7 ]! ?3 \
  629.                 }
    ! C9 A* C) ]% F. B7 j3 P
  630.                 TranslateMessage(&msg);
    6 B, t9 q% v. F0 G, ~% Q
  631.                 DispatchMessage(&msg);4 M/ t; x; t. m& E! r* y
  632.         }        ; `# t3 ^1 ?8 [; k
  633. }
    7 s# H* `6 Y5 a7 A2 a- j$ p8 q" K
  634. / P0 U$ Z$ w3 [: w: B& ]% J$ `
  635. BOOL bFirstChar=TRUE;, {% ^- m" x* D4 g" q* Y- g

  636. % e* ~7 \8 G! E& R1 ?
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    / L/ d+ B9 F, ^* E: Z4 Y! `7 \
  638. {. J) `, o5 \2 _# g8 }' Y$ H) i
  639.         // TODO: Add your specialized code here and/or call the base class- L8 b9 W0 D9 ]) x
  640.   switch(dwProgramState). T" r0 S8 c; _* R3 V
  641.   {8 P9 Q) D. b# D
  642.   case AP_NOTHING:' P. U$ X8 I( |- L7 u7 V6 I
  643.     switch(dwStartUpSteps)
    4 X, j6 @5 S7 n3 s
  644.     {
    $ ~; v1 u# f6 J* P' i
  645.     case 1:
    # [: V2 R1 A7 D. a# `! W. a
  646.       {0 U' h0 J$ i. O- J1 C
  647.         int i;
    7 A% {" x( s/ {7 s4 p/ }
  648.         CDC *pCDC=dlg->GetDC();0 Z; [7 p5 r0 g3 `9 d2 }
  649.         HDC hdcwnd=pCDC->m_hDC;" D/ _8 B( [& l, H9 Y* q' B
  650. //        Graphics graphics(hdcwnd);
    " O0 _+ x; c2 J" [5 ]9 E
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");  j4 f3 {+ l: l2 Q$ t
  652. //        INT iWidth=bitmap.GetWidth();
    6 V! c4 B) m* h. v, d$ q2 s% [* c8 m
  653. //        INT iHeight=bitmap.GetHeight();
    ' ?0 G; K- @2 M) l) D& E$ Y: [
  654. //        Color color,colorTemp;
    0 u7 O  u& d; s/ h( q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)2 }; u! l/ f* P- ~- e
  656. //        {
    0 i: P# t8 F1 I! G( u/ a
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    7 u8 a, G9 M4 o
  658. //          {
    6 G7 d) R% @4 J- ?7 \! X
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    " S+ s% ?& N/ w6 {. P
  660. //            colorTemp.SetValue(color.MakeARGB(
    . I1 O8 K4 i8 P, n
  661. //              (BYTE)(255*iColumn/iWidth),
    ' t/ V: Q5 o2 Q$ u$ s5 z
  662. //              color.GetRed(),
    7 k# E6 Y! \. |* ~2 K5 f
  663. //              color.GetGreen(),
    # }* ~- ]. ~+ b6 D# k, k* @
  664. //              color.GetBlue()));
    4 X% g, [% d( Z/ p
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ; W7 y+ r- E9 n/ J
  666. //          }! }5 Y# {( X2 n2 {
  667. //        }4 y$ o. [+ h: Z/ j( j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ) y3 j% h1 P9 [* t' a. P! v* \3 R4 b# m
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ h7 v4 I4 J& \( e+ j( K1 }! a, Q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    3 W& N: S1 X) E1 N: O
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ R' M8 f0 b3 s4 I& X% C
  672.         for(i=0;i<240;i+=8)' c  I2 h, L& B" L9 h! w
  673.         {) i' ^1 N" [% u! Z. t
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % I7 e6 e' v1 R2 u, o8 w
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. S# L8 h# L. B
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' {' v; m6 e+ ^3 ~# L6 S" _
  677.           Sleep(33);
    ! n9 [" U+ F6 }- L; Y8 Y6 P
  678.         }% b6 r9 I9 b, j- O" s8 s
  679.         Sleep(1000);. z/ B' b+ T0 M8 q" ^- t" k
  680.         for(i=240;i>0;i-=8)" {# Z8 G: |2 K5 g+ z' U
  681.         {
    0 m2 `6 d% R8 ]; n
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " ^; s% G5 ]8 |
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 @. Q! v0 X% L3 Y' z2 n
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 u( s0 a) l& n  B/ }+ Y2 ^
  685.           Sleep(33);" i. a  d/ J+ i' U3 G
  686.         }
    ) R$ c2 Y$ d- F! D
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);9 N0 }4 c, W4 b( k1 t% i9 ]
  688.         dlg->ReleaseDC(pCDC);- e8 d2 a0 G4 w* H5 ~
  689.         DeleteDC(hdctar);
    + n/ b& N$ N8 N* I
  690.         DeleteDC(hdcsrc);7 B! M& Y! s( z" j- F+ J) ?7 J
  691.         DeleteDC(hdcorg);8 ~- e3 t% p1 B" d6 D
  692.       }
    + ]- }, S, q$ I8 x* G, n
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);# t. d6 r: ~2 A$ E
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 z% r  r& i1 d8 v, Q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");5 [1 i" X$ `/ g' z/ G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");7 \1 N3 x3 b0 ~; t0 b4 g6 p
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) w* I& \8 t2 ?; F' Z; c+ j
  698.       if(!Dn.Connected())
    ( P# ]) S7 s1 v6 ~4 _7 _) k. E
  699.       {2 J0 ], a2 k% d# Q8 y; Y" ]
  700.         dwTotalFiles=1;& [6 r# M1 U9 F! J* b3 _& N
  701.         dwDownLoaded=0;4 U. V& @" U- I' G# z
  702.         bSilentStep=TRUE;
    5 {8 P  \4 V0 X$ x3 {  q
  703.         bCompressed=FALSE;
    7 [2 C5 l, u: h
  704.         strExtLocal.Empty();# D: x9 @; c7 J/ P% y& ]8 r
  705.         strFullName="readme.txt";
    4 H! i, \! a0 f" y# R
  706.         dwProgramState=AP_CONNECT;2 Q' N/ V: V$ p% B) L7 N# X* H
  707.       }' @: @7 l% _! d3 Q+ F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();0 @' B; r, r6 C, O" P" B+ \$ i
  709.       dwStartUpSteps=2;0 i9 O* T3 X  O4 Q! p: M* u, @
  710.       break;
    4 ?# W# @7 a% ?9 y' A' o0 [
  711.     case 2:2 t' d( `7 M* h( I
  712.       {  t: t. \2 q, y4 U. M/ p' s( T2 |* e
  713.         int iEOF;
    3 s7 N* c6 D$ i" B. L6 O" P
  714.         FILE *fp;
      N% `" R; c( B) c1 h% h3 ^
  715.         char szString[512];
    9 k. J6 L  Z: V6 @7 }  E# v) x4 @
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    , b8 f& h) P) k- w8 D
  717.         if(fp); ]4 L# n  t0 |" @. R
  718.         {7 U' b, G% A8 t* I8 |6 o% W$ v, h0 k
  719.           do
    . }0 ~( U& y( _6 S
  720.           {
    0 @! R# F* ?- ]  N& w: S# t7 k
  721.             iEOF=fscanf(fp,"%s",szString);+ E7 ?9 }0 I: H0 U* b( k
  722.             if(strlen(szString)); R, F8 q. S. {2 B% f
  723.             {
    / L" u/ @7 r8 M+ ~9 h: V
  724.               if(bFirstChar)1 [" a1 U+ Y8 p2 y* p
  725.               {9 ?: ?- N% x2 Z8 B+ d/ `9 P& \
  726.                 bFirstChar=FALSE;( `$ s$ e. }1 ~  R1 f/ P
  727.                 bConnectIsBig5=FALSE;
    2 x& r' f) t9 ^. R9 J; v
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;, F1 B& }, w: |4 f+ Q: X8 L# ]5 v
  729.               }
    4 @/ w5 E" s0 R2 {. c
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));6 k( K: Q6 {$ y) H: ^% V" K, p! R
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    8 g7 W# a" o3 {$ k) a
  732.               dlg->m_ListText.AddString(szString);
    & C0 P  k$ f! C- G$ g
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ D5 C( b6 o. W' `
  734.               *szString=0;
    $ _0 o1 |  x7 W3 i9 }! K
  735.             }+ X3 j9 l5 T/ }% N! w& |
  736.           } while(iEOF!=EOF);0 `6 [3 y4 X9 n
  737.           fclose(fp);7 q; C% T- Y6 m+ X" t* @
  738.           unlink(".\\DownLoad\\readme.txt");5 y+ m# @2 i9 b
  739.           dwStartUpSteps=3;
    . ?1 ^8 Z' O9 M
  740.         }8 ~) }  H0 u& y4 F  S4 V
  741.       }
    , |' l/ t! t( S9 B# V
  742.       break;5 ~9 }, k$ M. p4 G
  743.     case 3:
    & {1 k; f% _. u0 r, G
  744.       if(!Dn.Connected())
    - h4 g/ P! H1 y
  745.       {
    8 c& f9 Z0 t- u3 I. Y) S
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    6 u4 E( O% w+ m$ n0 ~2 O9 v' G. ^* V9 m
  747.         dwTotalFiles=1;
    ) U1 k$ [" E+ U: q& ~# a2 z/ |$ S
  748.         dwDownLoaded=0;
      ^/ U$ H  F& A, d, a
  749.         bSilentStep=TRUE;
    . l( w3 t; G/ N; `7 h
  750.         bCompressed=FALSE;
    - R- [* h9 E+ B
  751.         strExtLocal.Empty();
    4 Y0 t1 J  l; u
  752.         strFullName="checkversion.txt";" t: Q/ M- `2 N( D
  753.         dwProgramState=AP_CONNECT;4 v- E( p1 n) |! G- F5 c3 L, }  k
  754.       }
    * s* B+ `) Z4 W$ e, K7 N- |0 q
  755.       dwStartUpSteps=4;2 O' z* d7 K9 d5 E" Q( Q) A0 l
  756.       break;
    * y2 T0 i, b4 t. ~- p) s. n
  757.     case 4:. j, `% q  h4 T# j, p
  758.       {& L7 V9 h5 M: g4 d, D# S% f- m3 K: b
  759.         FILE *fp;8 B; }- U3 Y8 t) B' k+ a! J+ I
  760.         char szString1[128];
    , _% E# A$ l/ |
  761.         char szString2[128];
    5 Q" ?% z% w  M# X
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ) h  l8 c# R% F: ~$ ~1 T; s" z
  763.         if(fp)
    ) x4 P0 V! t! P; i* q  G- A
  764.         {: P, [! F4 e# r- o  o5 P5 |4 w6 j
  765.           fscanf(fp,"%s",szString1);. @1 r6 W. q  Z3 v8 {$ S+ G
  766.           fclose(fp);
    6 {: F  ^7 X, q( k3 d$ X
  767.           fCheckVersion=atof(szString1);
    4 @+ E; }* [, ~1 }0 Q, N2 E* |7 c
  768.           fp=fopen(".\\checkversion.dat","r");
    0 p& L4 ~. C8 T
  769.           if(fp)
    4 n" q; @/ Z6 L: z4 e- U
  770.           {% q- z0 N: a( [
  771.             fscanf(fp,"%s",szString2);& s* U/ t0 m, ?& L
  772.             fclose(fp);0 S2 n9 I% ]( |
  773.             if(atof(szString1)!=atof(szString2))
    # y& S/ H: K9 Z  _$ ^8 B
  774.             {
    1 s6 Z+ f5 l3 O  H! ^/ s
  775.               if(!Dn.Connected())
    / X$ R/ }; V* a" g2 ^
  776.               {7 |3 e, X6 M9 k7 E
  777.                 bFirstUpdate=TRUE;' @! W2 |2 z, C+ ^) }; ^; @( b' w
  778.                 dwTotalFiles=1;9 d4 w, V" f" ~' `6 ^0 j
  779.                 dwDownLoaded=0;8 Z( i5 L; L$ H3 |: f# V* j
  780.                 bSilentStep=FALSE;- l! @8 Q" C9 K9 }, U  f
  781.                 bCompressed=TRUE;# k7 W: u4 {8 j; Z
  782.                 strExtLocal=".\\DownLoad\";
    4 W9 a; |+ }; o$ V
  783.                 strFullName="update.txt";. m* U( X$ ?8 x4 C
  784.                 dwProgramState=AP_CONNECT;$ ]; h) ^, E; K# {& m# p6 G
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ h: S  t0 |+ x5 F* n# m7 {) ^
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 k' i- }3 e% P, @) o8 L: h
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");0 l! x! o: f: F* y
  788.   n# w- ]8 \/ a5 g4 h
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# U7 c7 q' }3 t: N  X$ k9 s
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    4 ~& K' O+ b) y% q2 t
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; E0 V) k6 L  j" Z* _
  792.                 {; p4 ^- c" M8 F0 T6 K9 f, O- O
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");. g; a, C' R, L( D/ h7 _: O
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    / D$ J% e" r$ }* [0 Y9 s* T" ~
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    6 C  k7 u' x$ K3 \0 I
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 O  P6 [+ J$ d  _! X
  797. 4 M* Y: z* O% t3 P% X/ \- f
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 f8 E5 P4 m+ ]9 ?8 B
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: j' @1 D2 ]! I7 Y  H" V2 P# \
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");, e% m- x, l2 o( }; z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# q; ^* p* S; Q/ q; N6 ?
  802.                 }
    ) T( x  T2 g5 W) d7 y
  803.                 dwStartUpSteps=5;
    7 S# z) Z% b* y  `  N4 C" T
  804.               }
    + a9 z8 m  j1 r/ x  P$ U' n
  805.             }" \! C  H$ ~! r2 O0 H
  806.             else
    , \8 h. C3 v* T% q* K
  807.             {0 ^, {3 ~2 [+ T. E: T% `
  808.               unlink(".\\DownLoad\\checkversion.txt");$ u$ q- a# A  z( [/ Y- S/ G! i
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    # O: o# \! T$ g, O
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 |  ^$ i8 e- _" o" r5 `' R, a) g! x9 M
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");* m1 H* l6 d; x( h: c$ q3 M2 ]- `
  812. $ D. X6 k* T6 ]  y6 k
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 H. h# I( p9 a9 z* F
  814.               dwStartUpSteps=99;9 l/ W0 O) a( v
  815.               bFinishUpdated=TRUE;3 N# y& G# ]. L  z: {7 G' v
  816.               bCanUpdate=TRUE;/ }, n4 M* B; ?3 k. |  z
  817.             }: T) ?0 V; Q/ u$ [* D) a3 G2 _
  818.           }' I# J: @9 [  T9 F* a7 a1 G6 v) k
  819.           else/ I2 y1 x) X5 ^" y* I
  820.           {
    ( j3 Y$ U" @4 p- ?9 j) L
  821.             if(!Dn.Connected())
    ; I9 o+ |$ o4 I& D
  822.             {
    5 n3 Y% q6 U, }1 W/ I. [3 v
  823.               bFirstUpdate=TRUE;8 Z- D% i- a8 L7 d9 V
  824.               dwTotalFiles=1;
    , v: A6 ^0 a9 v7 y' \8 W8 [
  825.               dwDownLoaded=0;
    7 c6 R% }3 }3 W  h
  826.               bSilentStep=FALSE;) \2 L6 h! X) O) J/ J# z6 P' ^
  827.               bCompressed=TRUE;
    ' h5 `2 \9 I$ k. C2 c
  828.               strExtLocal=".\\DownLoad\";
    / J6 i4 n  Y3 j9 e
  829.               strFullName="update.txt";! `) ~( w" ?& h" a: B
  830.               dwProgramState=AP_CONNECT;3 ?$ q, b2 S: F7 i6 m2 V, y. i
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) r( n* p: L4 \9 C3 W" d
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- u9 r4 {9 _; F
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / i5 V0 S3 S; @
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! G$ ], j0 g  L
  835.               unlink(".\\DownLoad\\checkversion.txt");- V2 \; B1 f; L' V- ?- U: g! z9 M
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ) n5 I+ Z: w' R! ]( K) I' I) B
  837.               {% r5 E3 T( @& F9 K. D  ]1 u
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");+ t$ z1 ]% j- \9 _0 z" _
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");% i8 B' c5 a9 F( Y: s' i/ ?3 m
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");; A8 \) R( Q# R
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 G, m" J3 M) R
  842.                
    4 z0 X2 E7 O3 X' x# g! U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; i! |2 Y, G; K2 z5 _2 @' b/ c
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    9 t, s6 s* b! U4 l0 `# R
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");9 w: J0 g. j: K8 i" t* }
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # ?0 V9 _' T2 {) G
  847.               }
    ) [. {! H6 O  c
  848.               dwStartUpSteps=5;
    ' Q" w( d6 l* j# X7 T& f5 l8 \
  849.             }
    % W! }! z! S. {5 W( S
  850.           }
    % u% w9 F. i9 ]' p
  851.         }% A" V$ p- U$ `( H
  852.         else
    $ |' O0 X  P( W1 e
  853.         {
    : x; ~3 I2 g6 {% R8 s
  854.           dwStartUpSteps=3;
    6 c* s3 }$ l. r) l" U  ^/ m2 Z
  855.         }
    9 {4 e9 E( y) U+ C* W
  856.       }
    , @' C% J( w6 M) G- `9 |2 Y
  857.       break;
    1 M0 N4 E) U6 B3 H4 l/ n* R
  858.     case 5:
    + A) k  [& P/ }. C
  859.       {
    ; R, [8 [! i5 u
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    4 o! o# K+ j9 |/ _
  861.         {
    ; d& C2 o2 ~* H5 @3 q  q! L: N
  862.           int opt_overwrite=1;2 S* d% U+ Z5 t" x8 K4 [5 I4 H! h
  863.           int opt_do_extract_withoutpath=0;$ V4 n  Z3 X: K2 l( {
  864.           unzFile uf=NULL;5 S/ g: P+ Z; Y& I( a: g" `( h

  865. & D) N+ E2 ^2 d% A  E( \
  866.           uf=unzOpen("Wsa.zip");
    0 A0 Q3 a+ [3 ~( B" Y, `
  867.           if(uf)3 z' Z3 f) F( K
  868.           {
    " x5 C  j" b9 _0 ]9 k' v/ z7 m5 E
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);$ a: u0 V8 z8 `9 ~) S
  870.             unzClose(uf);7 o9 X" P9 G8 s/ V% g# Y
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ) s; |# y  O) a$ [. O
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    # ?2 ^% x4 I) d7 ^+ \
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
      K5 t8 ]1 N7 d
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % B$ _# w( O0 Q3 a2 j
  875.           }
    % B' u6 f9 {2 G/ M1 I" L% u+ S3 t
  876.           DeleteFile("Wsa.zip" );; A  p( q, `5 F% n  D0 t* _8 z9 V2 g
  877.         }2 t& B- z0 l# H: H8 O! n+ f
  878. ; u; E) D3 ?6 c6 h4 @
  879.         if(CheckLocalVersion()); d+ W5 V/ D5 l
  880.         {( ^- v4 k! l* A9 \$ g2 h) h
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ) U4 _$ X: T% w! n' F/ p: N
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");, Q2 b6 W) ]$ j5 W  P" k; J( k
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    - B- O* u6 ^0 Z: g6 h7 N
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . L4 L/ s. j' d0 C! R$ e: I- Q% D
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    , B0 q3 B9 R& W* z0 Z
  886.           dwStartUpSteps=99;" K$ Q" n2 \8 G0 U" |" N
  887.         }
    . W! q$ E* s: }; }
  888.         else
    % k" n$ o/ \( ]$ [
  889.         {
    0 H, I& ^" Y, {& `! x8 J
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ G( L6 @6 _4 n8 y: I+ U% t
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! k! K7 P7 h3 w3 _' @. r
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
      L, n+ k2 [* Q

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

- P% M# b. g$ f5 v0 X
" x7 Q) Q+ J1 g

評分

參與人數 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-2-15 00:50

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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