CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
) h. s) F  ]1 G% X
  1. / RevApp.cpp : Defines the class behaviors for the application.+ V9 h% @* ^' Y: S% P1 H
  2. //
    ) j' N+ K2 _/ J/ A: k

  3. 6 ^# L4 H" J4 U. M( S( Z) n9 U
  4. #include "stdafx.h"
    0 H4 b, S! f) ]" w( a* y/ P2 L
  5. $ S" H7 e8 n- `4 ]& W3 Z
  6. //#define UNICODE5 P2 P+ q% r" g& ]( ?  {2 _
  7. //#include <gdiplus.h>
    / [8 V; V7 e' K% m% Q4 Z
  8. //using namespace Gdiplus;
    7 m( ^: P4 ?7 O, z, \- ]
  9. ! b( C/ E1 B9 c7 S
  10. #include "RevApp.h"
    # O! |  b9 A/ T. n& j. U* U" Z
  11. #include "RevAppDlg.h"! u7 o0 |6 l* s. o7 W, J, l
  12. , ~$ n6 G: ]( Z8 q. h
  13. #pragma warning(disable:4786)1 B: H& h: G) O& q+ X$ n+ t$ z
  14. #include <map>, h0 [3 R/ \+ g" q. a; i. r
  15. #include <list>
    ! E$ I5 i  w* k% c
  16. #include <direct.h>/ W. b0 }1 w  L0 J# v
  17.   E' Q0 C& B4 i2 A0 X# g; A, k" m2 b
  18. #ifdef _DEBUG0 u3 N* l; D/ W3 W1 X
  19. #define new DEBUG_NEW
    2 A/ g  E8 |+ i  Q+ d
  20. #undef THIS_FILE- i' Z9 i, _* }) Q
  21. static char THIS_FILE[] = __FILE__;) m: N+ b$ k% s7 L( H' L
  22. #endif6 a9 i  Q/ R2 d/ p" `! W; `2 C% z
  23. #include "SkinResDef.h"! k6 D0 g  h1 W8 n7 i9 H
  24. #include "ChangeBG.h"1 m1 U" _+ R$ H/ h- d9 @3 P
  25. #include "AFXINET.H"
    6 q* Y2 I2 Q  q7 n  |/ ]. Z

  26. ; @4 L( g" V' M, Q( c! n
  27. #define TRADITIONAL_CHINESE 0
    3 ?* h2 y; m$ P) m+ {9 V/ Y7 _
  28. #define SIMPLIFY_CHINESE 17 C, z2 O. W' f
  29. #define ENGLISH 2' C/ a" z" z  ?  S4 |) r
  30. int m_iLanguage = ENGLISH;* ?8 d9 g8 Z5 r' A+ x9 M
  31. /////////////////////////////////////////////////////////////////////////////: D$ n' m4 |4 [1 \. J/ T  y4 f
  32. // CRevAppApp; }3 X& t7 S" H/ M4 P2 l

  33. . U" o# H  r: F) z0 C0 V
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    , o. q, ]* e: ^
  35.         //{{AFX_MSG_MAP(CRevAppApp)  D" r% H: J8 \# K
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.1 p( Z/ T6 \$ f2 b; _  l! S  v9 J: O9 L
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!! B; ^9 o8 @5 h- f: n
  38.         //}}AFX_MSG
    % t( F1 R: {$ o+ F8 J9 c+ o
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ; n* D- K" h. \  ?" V0 s
  40. END_MESSAGE_MAP()
    2 R% V3 ]" `: Z
  41. ) V8 g$ ?8 n/ Z: ?) u0 A! j1 T' H
  42. /////////////////////////////////////////////////////////////////////////////5 c7 ?/ w) ]' L) }* A- f% Q
  43. // CRevAppApp construction5 F( I: C1 H0 ?% u
  44. ; w3 j; r& W( X# Q% R! r
  45. CRevAppApp::CRevAppApp()+ E0 P4 ?$ b/ _) v" {
  46. {  O" A% h' W; _! I7 k3 v* R
  47.         // TODO: add construction code here,
    ' ~+ v( O! N- U4 c0 r
  48.         // Place all significant initialization in InitInstance
    0 b: s, \4 z' A/ C* F
  49.   bDisplayIsBig5=FALSE;
    - z; r, E; K6 H9 b1 e
  50.   bRestartUpdater=FALSE;8 b# M& z1 W/ }! a
  51.   bFinishUpdated=FALSE;
    # D( e. x  x4 n6 ~( k
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;6 S+ G% W) [, |. S4 a6 t: j
  53.   InitChangeDataBig52GBKS();
    ! w5 M& R5 s0 M8 i# m
  54.   InitChangeDataGBKS2Big5();
    ) v7 H. i( H" {- T
  55.         //
    & |& n- `/ z  a( H" I' H
  56.         bClickRunExe = FALSE;
    : U' J% E4 @/ I7 Z( q, [, w$ \
  57.         //( Z3 m! d- M; ]+ \+ ]
  58. }7 s9 r- H5 o" D
  59. ' K1 v/ v* d3 a$ ^# G8 m6 ~! c
  60. CRevAppApp::~CRevAppApp()3 N8 i2 C* E# k( \
  61. {# W3 x) j3 p' f7 Y7 g
  62.         // TODO: add construction code here,$ T+ A& Z0 t# e; x8 w/ H1 g
  63.         // Place all significant initialization in InitInstance
    9 b( L7 w- V3 q# X0 G
  64.   EndChangeData();
    0 C+ m. `# G% ~+ Z
  65. }
    2 U, P& k# e4 U1 V8 [# s
  66. ( n; Y: X: Y8 ~* I) T
  67. /////////////////////////////////////////////////////////////////////////////
    7 S& Z. c& w0 Z# s
  68. // The one and only CRevAppApp object0 t+ [/ P" M' ]* x2 M

  69. # j+ k  v3 S. a4 i. p" P0 X8 O
  70. CRevAppApp theApp;
    4 A% g2 _6 E6 X$ x- F3 W
  71. % X* a3 j0 Q' c7 n( S# G
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)% d- z$ y4 _4 z2 P0 o9 \! V
  73. {$ b7 M4 b) l# C9 s  ~$ X- s2 S
  74.   int iEOF=0;
    - {3 H4 l" b) q' I9 O
  75.   char szTempName[MAX_PATH];. N/ b$ q; u0 N; `1 P# Q4 V3 c
  76.   *szFileName=0;' |) X% \' `5 `/ X, P$ l
  77.   iEOF=fscanf(fp,"%s",szTempName);) Y% l9 L4 W4 l. ^# I, L' H% w# x1 \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    , w) \# @- {" p$ C" Y1 ~" P
  79.   {) g( B) h0 q  D  x$ q
  80.     strcpy(szFileName,&szTempName[1]);  f( }! H& A, Z, e
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)6 _3 f3 j; k! A# e' Z
  82.     {7 K; r, I. M6 C5 ^; H
  83.       iEOF=fscanf(fp,"%s",szTempName);' P  a; h) t+ `- ~6 n
  84.       strcat(szFileName," ");
    ! M8 p' P: I7 {  Q* I9 ~8 {# W
  85.       strcat(szFileName,szTempName);
      ^$ x3 ], ]% w  X7 |/ c( a/ J
  86.     }% h5 A8 Q7 A; C( f. [' M. C0 v
  87.     if(strlen(szFileName)>=1)" C* |* E" W" H( t
  88.     {
    + K* w! v& W/ Q& Y7 X
  89.       szFileName[strlen(szFileName)-1]=0;. d3 x% X- b& ~( S5 C. T; `  L% P6 ]/ v
  90.     }
      y7 l* w0 q. ?3 k$ j
  91.   }; {, |! @; @- p9 U) y
  92.   return szFileName;
    & N$ J( X8 r; Z: C4 \1 R0 @2 ~
  93. }* |3 [3 d+ R2 m3 X: E8 K9 L4 q
  94. # c% i; O7 k% e3 s, V/ F$ T
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ) g% m$ |5 c& {' i5 o% T- v; m
  96. {
    ' u. f. w4 U3 t3 z
  97.   FILE *fp;' w2 k6 o6 J7 ]. l7 o$ C, a% X
  98.   char *key=NULL;
      X) [9 q2 }- a4 u# ^6 @
  99.   char version[MAX_PATH];0 B) O( n; H2 P8 u5 x% ^" n( F8 y
  100.   LPUPDATEFILE file,olds;
    2 z9 x, e  e& G, G
  101.   std::map<CString,LPUPDATEFILE>::iterator p;3 p/ D9 I$ ~" ^( D& h/ e
  102. 1 ]+ p- L. v6 h3 {9 f8 [
  103.   UpdateList.clear();0 e8 L2 Y7 ~$ P3 y
  104.   UpdateFile.clear();& D* b! o4 \3 p
  105.   if(GetFileAttributes(filename)==-1) return false;7 q" \' d7 }% k+ e6 r
  106.   if(!(fp=fopen(filename,"r"))) return false;
    & D8 V! S& A8 `; H3 n
  107.   fscanf(fp,"%s",version);9 j( Y$ \) C* X9 r8 p
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    . b2 K6 U2 A7 @6 V; `! p
  109.   while(fscanf(fp,"%s",version)!=EOF)
    , h- ?$ E" r& z. W
  110.   {! ]# w4 |% m  C+ ]# f4 k
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' g9 ~4 R* I% L  A4 o/ [( g
  112.     fscanf(fp,"%s",file->path);: Z, \4 C4 v, w; h5 M
  113.     ReadFileNames(fp,file->file);
    , J' n9 p' x$ J
  114.     strcpy(file->full,".");- y: y1 z: E$ {: Z& ~. w' O
  115.     strcat(file->full,file->path);
    # g+ f' j/ G" E5 v
  116.     strcat(file->full,file->file);
    , p0 x6 H& g/ L9 a
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())% ~$ U1 e: |# }: S* I, ?
  118.     {
    6 a5 O6 f6 o' p! O  }) E( U
  119.       file->vers=(float)atof(version);$ l1 ]9 v9 k) Z7 @' T1 F0 m
  120.       UpdateList.push_back(file->full);; x% b1 J% D, K, w- D0 x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));: E4 [, j% e: {% W
  122.     }
    0 q9 x% U# l) |. ?" H% b5 ?: j+ i& Q
  123.     else. G$ r5 p* O! D* L
  124.     {% L& q( U. \- K5 `
  125.       olds=(*p).second;
    6 W5 ^7 i0 e/ o. G' S
  126.       if(olds->vers<(float)atof(version))
    ( ]! p, ~1 n0 X) J7 p: x2 s) \8 ?
  127.       {
    * I2 j- t7 C# B' ^( P+ _) W
  128.         olds->vers=(float)atof(version);
    - C$ u, c2 e1 M8 y8 |
  129.       }
    ' f4 X, X( R0 s) U  m7 F# N/ G% m
  130.       free(file);2 }- C- g" @0 _" @
  131.     }0 _5 Q, p9 O3 V1 c' h# {
  132.   }
    6 P9 p6 f& g$ ?) o
  133.   fclose(fp);! q2 F6 W/ ]) R1 Y2 _4 D
  134.   return true;6 A' @& F- \5 r- C+ j" q: o
  135. }
    / n8 S) e1 N; I0 ?# P; R

  136. $ m8 Y- `0 w" {8 C. @
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    - t6 c$ t4 C! ?' @1 D. t
  138. {
    6 ^' B  q* Q1 k) o; k
  139.   TCHAR  szFull[MAX_PATH];# Y/ [* R2 l7 o, Q
  140.   TCHAR *token,*inter;" M! w/ p6 t3 l3 K5 T# ^2 w6 B
  141.   *szPath=0;3 v2 |' _9 Z$ O: e+ `
  142.   strcpy(szFull,szFullPath);7 d( y; \, i/ c: o
  143.   token=strtok(szFull,"\\/");
      F: l$ C! G; p. H4 b6 i1 o
  144.   inter=token;
    $ F3 p! _. i" O, O: L& p
  145.   while(token=strtok(NULL,"\\/"))
    % X" `- ?- w% Y
  146.   {3 o5 K, t6 y/ [" d
  147.     strcat(szPath,inter);+ C5 E% s1 E$ z+ O7 G! }8 X6 R% f
  148.     strcat(szPath,"\");
    & N: C$ s( _) I8 p8 m2 D3 J
  149.     inter=token;9 s: U+ x# |) l( a: ?1 E! Q
  150.   }
    ' F8 c; u3 d) D+ e/ B
  151.   return strlen(szPath);
    ( b' E+ I% y% a) E, [
  152. }4 Y& U( I/ Y- {& @, k% {
  153. ' y, h9 ~# B% w
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    % I- ]5 I2 J7 ^7 r+ u4 ^; I
  155. {* ?( b5 O: |( k. I1 f: R
  156.   DWORD attrib=GetFileAttributes(Target);
    : u6 u, h6 d+ D( D/ n) c0 n
  157.   if(attrib!=-1)
    / O' A: l, z; L! H1 b" D. P3 j
  158.   {" E- e4 e) x% [7 U8 W$ Y$ A
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))% B5 L$ d' i3 z  }- f* O6 p
  160.     {' [9 j- p7 t. s4 a/ \1 p' y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);# l0 p% m" T( I  s
  162.       SetFileAttributes(Target,attrib);2 K1 [/ B8 B4 y' |  }3 H
  163.     }
    - i9 E5 H8 G) D- G9 p/ U
  164.   }0 |/ Z0 ^. k7 {! W
  165.   CopyFile(Source,Target,Erase);
    , z# i# X# v& X
  166. }
    5 `4 W) Z+ n! J4 w/ ]- j

  167. ' w5 K  s, e" A; K& @( ~& p
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! i% ]+ g: M: ~9 k7 p; W& I
  169. {! h3 h0 ]. k- w$ d/ N+ U& ~. k* ?
  170.      FILE *fp;
    0 t9 F  x/ ]- m! M/ z# b7 {
  171.      char  szBuffer[8192];
    3 c5 x9 E% G: b1 U/ u% w: @% c
  172.   va_list  argptr;$ l' b: U$ j9 }4 H, ?& L8 ]
  173. / U6 y" R1 g! @
  174.         va_start(argptr,message);- Z: y3 F- x0 O3 N& q
  175.         vsprintf(szBuffer,message,argptr);. _7 G# j& Z6 ]7 d
  176.         va_end(argptr);2 U2 s' Y9 j/ {& z
  177.   fp=fopen(FileName,"a");% J1 j% X1 ]! H. T. c
  178.   if(fp)6 w. u! P; \- K0 v7 t/ X
  179.   {
    ' h% o) d* L( O
  180.     fprintf(fp,szBuffer);4 P: P5 M; R9 z
  181.     fclose(fp);
    9 q3 I6 V- q- s0 Y* f& l
  182.           _flushall();
    5 I: g5 \3 o$ \9 P
  183.   }! U) _+ z: i4 {) M
  184. }
    ) D9 E2 Y  r2 i, m; @; J1 S% Q
  185. 7 z, {0 e3 Q8 }3 m
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ! ?% P: _3 ]' p
  187. {( _9 n- K" B+ f$ d" `7 i
  188.      FILE *fp;' e0 o0 m2 g0 x7 y7 E: M* W& U" M
  189.     DWORD  attrib;
      }- G" k& D7 G7 O
  190.   attrib=GetFileAttributes(FileName);8 v* A, W5 {% Z4 t5 N
  191.   if(attrib!=-1)
    " h& w# h6 o# f1 O" R3 I
  192.   {4 R0 z9 q, R7 l! G
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);) t1 [/ a) K3 @
  194.     if(!SetFileAttributes(FileName,attrib))
    4 B) `* T2 @* U. t5 k7 z9 {
  195.     {
    : Y" M) s2 ?$ l3 l& C8 R" f' e1 {! S
  196.       return FALSE;: J! R# d) G; i6 ^5 S3 G9 u
  197.     }3 Z; e9 l; E9 S2 |" y2 \+ I
  198.   }7 Y/ w6 Q; c5 u4 g/ X7 S) v
  199.   fp=fopen(FileName,"wb");
    + O6 O* X3 \0 r+ G. {
  200.   if(fp)- ?& Y7 F$ H: c5 r9 f; Y& O& z$ w* |. U
  201.   {: x; a; R6 ^7 O+ @4 [- w0 R
  202.     fclose(fp);
    / j  B. f) {4 _
  203.   }
    & \. H, C& Y; q6 i+ F* s
  204.   return TRUE;% C, ]7 C; M& Y* ~+ E
  205. }8 I# R, Z& u5 ]* H% `6 {
  206. + e3 s' o/ e6 g' R0 s
  207. BOOL CRevAppApp::UpdateLocalVersion(void)0 A4 p9 f2 O& Y- J$ e6 U; S/ V
  208. {
    3 L# E7 K5 Q6 X8 t
  209.   char filename[MAX_PATH];- o8 U  F/ W4 C  ?! M- b" u
  210.   LPUPDATEFILE file,olds;
    : a4 \& L- P3 d0 c$ @% ?
  211.   std::map<int,CString>::iterator i;
    7 Z- Z+ z' O/ Y- Y/ R$ j" I) q
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( D) g1 i1 h9 @7 s1 s8 _6 z
  213.   std::list<CString>::iterator l;
    * d, g% N: ^$ [! r7 r* b+ z5 N
  214. 2 [: j% [6 p! [7 R6 T
  215.   if(bFirstUpdate)% N  T) ~2 o: N4 W! N$ ?& u  Z
  216.   {/ C% P7 I1 P  u( [- p
  217.     dwCurrFile=0;- Y2 K1 ?& ]) X4 M. \8 q
  218.     bFirstUpdate=FALSE;
    , K8 F6 R  j1 V( q2 i
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# |( |/ I' F- ?5 ~- z9 l: Z: [
  220.     {% n+ k' T& F; z8 e& J; ?
  221.       dwTotalFiles=UpdateLocal.size();1 V% Y( F! g$ G4 h* n
  222.       dwDownLoaded=0;. A) Z, {% |) y6 R( u0 {: Z
  223.       bSilentStep=FALSE;
    $ i! v! c) X% w  Y) ^/ R8 q
  224.       bCompressed=TRUE;
    9 Y; \; {! l5 t' Y
  225.       strExtLocal.Empty();
    7 _1 f; `2 M! o2 z6 @2 @
  226.       strFullName=(*i).second;' i# y8 P# Z5 _9 \4 X
  227.       dwProgramState=AP_CONNECT;* X  y! N: N! X0 ~  {% e, J
  228.       return TRUE;
    6 x8 |, K- e4 P4 z) z
  229.     }
    ; }1 ]; P2 q. N: y* {+ m6 n
  230.   }
    ' m) M8 y9 ?  N' H% d
  231.   else if(bRestartUpdater==FALSE)
    : Q! j! L0 c5 C/ I3 @+ H
  232.   {7 f/ j& c2 Z5 a  j
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())6 f1 X2 o5 [4 d- Y5 @
  234.     {
    / Y  ], Y0 {: F  ]# ?. s; X
  235.       file=(*p).second;
    $ o% g( H3 e" u6 t5 ?4 E
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    . k3 b7 |$ @9 b6 t5 S; L: ]
  237.       {9 C3 {+ Y: m6 U% ^
  238.         olds=(*p).second;
    ' Z( x1 Y6 T6 p0 H. s
  239.         olds->vers=file->vers;
    + X0 b# `' q& I; w: L
  240.       }
    - s, s" o% K! j/ d& ?: w1 [( i8 L' s
  241.       else: h3 E: ]+ m2 N* C
  242.       {
    $ A$ a- u3 W% _$ ^" S+ O2 @; ~( a
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + w3 M- o  r9 z6 g! A! k3 o
  244.         memcpy(olds,file,sizeof(UPDATEFILE));3 O2 l, [; C2 L
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));( f: l& L; p0 k8 z
  246.       }3 _( [, _3 S: u* O* l& E9 Z3 P0 P$ A  e
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    + k1 `- g. Z, D
  248.       sprintf(filename,"(%s)",file->file);: p$ t, r; m( {$ L  [
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 K7 C- E* P& s+ m
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ; p! u3 Q$ h" `" ]+ g9 O, J9 g+ ]
  251.     }
    ' s0 _, F$ d# a# J0 s. S
  252.     dwCurrFile++;& C) p# X- G" V$ {0 O' a
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): V" K5 ]6 ]4 u- h2 ^( Z
  254.     {
    5 {3 q3 \" w. F1 C6 I
  255.       bSilentStep=FALSE;
    - O5 Y( d0 |8 C/ C
  256.       bCompressed=TRUE;0 V4 ~; ^! t. W( o
  257.       strExtLocal.Empty();
    ! u( Q$ }8 G% j
  258.       strFullName=(*i).second;: V; |( ^3 h# R2 H- U& I3 U: H
  259.       dwProgramState=AP_CONNECT;% D" ?0 N& P2 o6 u% U
  260.       return TRUE;
    4 q: @9 C. o5 B3 Z# }9 U
  261.     }
      @- I7 ]1 s! C5 r# h  a; h
  262.     if(!bRestartUpdater)0 H5 j' E6 Y0 J4 \& y
  263.     {
    - H7 U, q* N) @0 r- y
  264.       int iCurrSize,iFileSize;
    : }! U: i% F3 L! T5 ^  |9 A
  265.       iCurrSize=0;
    % |7 T0 B# T# }& C
  266.       iFileSize=UpdateList2.size();
    ' z/ i1 M4 y) t9 @/ Y% a' ]' b% [
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    : T' E; Y) i5 q8 S  u! \3 Y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    9 e. T5 L) V4 h6 J# e! \4 V& q1 h9 Y- L
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    " F5 N, N& i' L/ F! z; Z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) \' b% M# o3 i  ^8 F
  271.       Fclearf(".\\update.dat");
    4 O) }8 X5 J( u1 ?8 r! F+ c6 O/ ]
  272.       Fprintf(".\\update.dat","Bloodyf\n");* ~, C. Q' z: s* m; i1 k
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , ~9 P2 L$ B& Y/ w9 v5 Y# u% w& ]
  274.       {8 `$ A  E' x/ ~8 @: w
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())$ n5 Z0 g8 _8 @
  276.         {' i$ X- J+ _$ [. m
  277.           file=(*p).second;5 m2 N2 k! U5 q" C+ u  ]
  278.           sprintf(filename,"(%s)",file->file);
    4 g5 t2 o+ J1 o1 k% i; W
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 e7 I( q1 E; J9 @8 ^# R; \; ]- t
  280.           iCurrSize++;
    ' \5 }4 Y5 R) j/ @
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    4 r+ C4 u0 B7 M
  282.         }
    + J' v4 F4 o# h
  283.       }- c' s! B/ K' B6 q/ H- A
  284.       unlink(".\\update.txt");
    4 t4 h& H; T3 V1 `: v' m" G# O
  285.       unlink(".\\update.tmp");4 Z9 l6 L! y, k, P: w; V
  286.       Fclearf(".\\checkversion.dat");
    - k  |& }. B% e+ u- C5 S
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);7 m& g9 f" [) s% I5 z& T
  288.       if(UpdateLocal.size())7 q6 S# X; _" Y: D
  289.       {
    ) E- v; C  M* T& _
  290.         UpdateLocal.clear();* {# V/ Z( F8 P4 T' A; v
  291.       }- `/ l- T0 R4 Z/ T/ W7 V
  292.       if(UpdateFile3.size())
    6 y& W% ^& A/ _3 c6 d
  293.       {
    ' ]1 {' p' Y; n: l" W" A
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); M7 i! Q) q) @/ ~7 v
  295.         {
    7 g) u3 n8 f& o4 z
  296.           file=(*p).second;* n6 @& H* u& x! d0 Y* _
  297.           free(file);
    5 S. L* D6 v4 }2 P4 ^
  298.         }
    # I9 u0 N% Z: Y& w: p5 r
  299.         UpdateFile3.clear();7 X4 W" \! G* f7 p
  300.         UpdateList3.clear();2 E9 a& D' H# M; @; v) I( z
  301.       }' ~7 N' Q+ G+ H$ t2 L
  302.       if(UpdateFile2.size()); @, }* I2 h# s  V; P+ o% j2 c
  303.       {
    % Z1 L  n8 V& k: y6 I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! e0 K: l0 c0 `, O
  305.         {
    ' u- c' u9 j2 @
  306.           file=(*p).second;! Q2 W; q& w: Y' l
  307.           free(file);# t+ A5 s! q  K5 r5 c/ c
  308.         }
    + }) [) {5 s$ o) y; |
  309.         UpdateFile2.clear();
    0 D( r8 C& }/ B8 Y
  310.         UpdateList2.clear();& B7 A- ]2 x' n4 _1 d( M5 J
  311.       }* M& n! [& Z- f$ e% s" _
  312.       if(UpdateFile1.size())
    . g' o& v- [* Y. Z0 I
  313.       {
      v, h6 a4 t% \8 M3 x+ S5 z; e; d/ k
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( H  x: D0 ?" q- |1 J  \
  315.         {# [% j" `4 ~+ i4 ~9 n
  316.           file=(*p).second;
    4 ]3 b5 x3 u0 G( i; j1 w7 w
  317.           free(file);
    ' r8 D  @, ]$ T; M  `' I: ^
  318.         }
    $ J  w5 P$ x  P' |+ }) F' F+ ?
  319.         UpdateFile1.clear();2 X5 J8 E0 y6 R: `5 j3 u
  320.         UpdateList1.clear();
    / w5 t. Y" |9 S) |$ _
  321.       }
    & i5 A% \+ V3 t4 z$ i
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));1 U- A/ T* i7 z8 y- q
  323.     }
    % I( }4 Y( C! j0 A: n
  324.   }
    0 ?1 T# ^, D' d8 l, d6 Y
  325.   return FALSE;
    8 h6 ~& d* [; }6 `3 B4 Y9 |# q
  326. }
    2 e# ?1 q1 I1 t9 S3 t

  327. & X# ^, B* }" s, ~& b* M- N3 b
  328. void CRevAppApp::ClearAll(void)' E" }! y$ A7 l
  329. {
    % t9 u* i  f5 W6 _  w* e; O9 Y9 r7 i& e# X
  330.   LPUPDATEFILE file;2 B: ?  _# c+ `- ]1 _$ K
  331.   std::map<CString,LPUPDATEFILE>::iterator p;4 i7 Q9 M, c1 ^) L1 q0 G

  332. + {, }$ c% |( O' @5 u5 t9 S
  333.   if(UpdateLocal.size())5 Y+ _! D. P+ ?5 Z% i( G  }
  334.   {8 J+ f4 b  r# D7 j( L+ {
  335.     UpdateLocal.clear();
    # r" _1 q0 R/ f$ P* p3 y2 O
  336.   }
    4 L5 }; b4 a, u/ B% \4 K; J
  337.   if(UpdateFile3.size())" E2 A' C( D; `* T: r; J
  338.   {, C/ c  |& P* ?: L" ]7 J+ T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 h8 A. l& O) ~" x& o% B
  340.     {  E: ?  g" T3 w) Q& l4 X
  341.       file=(*p).second;
    2 U' w( L1 j: X# w/ `
  342.       free(file);( s" p1 |# f6 L6 l" N9 _
  343.     }
      J9 t2 h' y; }. I/ _: Z( d
  344.     UpdateFile3.clear();/ b8 r0 n: m8 {3 R. c3 M" k
  345.     UpdateList3.clear();
    ; X/ _1 \0 S  _/ M$ q1 a4 O
  346.   }
    ; j9 b$ z1 H  S$ r7 a0 r. s' ^
  347.   if(UpdateFile2.size()); e1 \2 p) O& o' k  t) K- K
  348.   {0 m( Z# G  A4 _* _
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! B, W7 B# B* Y" ^% H, _* p
  350.     {
    ) p, T8 P& A' |
  351.       file=(*p).second;
    9 O$ `, ^3 v6 j+ i' }2 G1 H
  352.       free(file);7 m! Q3 K6 b& e; H, L- _5 B
  353.     }- l0 F3 F  d- ]
  354.     UpdateFile2.clear();( S# u' ^. }5 @% m% f
  355.     UpdateList2.clear();5 q8 Y2 J8 @2 M3 D8 V& O8 S
  356.   }
    : u# \1 m$ x/ [, q9 q$ W) W* ]: s
  357.   if(UpdateFile1.size())- h3 h# e2 _/ \# c3 e
  358.   {
    7 Y* ^* q/ a$ o6 {( R
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( z5 M- P9 X6 a) a7 \* k+ e4 {
  360.     {
    8 p1 b/ r  v$ x! k
  361.       file=(*p).second;
    + {1 i1 z9 p8 t2 N
  362.       free(file);& h* {# Z: u) \  a9 _
  363.     }
      h( Z5 F$ X) k- ~! `
  364.     UpdateFile1.clear();
    0 r& R2 {$ x- R  C
  365.     UpdateList1.clear();9 o) m+ b, w5 S  _" t1 U% m, L
  366.   }4 r; q; e; f- `0 f& A
  367. }  - D* k' x! J! u+ m; s' d# I
  368.   
    ( A; r* L- z0 Y" ]% k5 \
  369. BOOL CRevAppApp::CheckLocalVersion(void)+ o  d: Y2 _- t- k
  370. {
    ) r, g& o, U# g8 o$ @$ ^1 l
  371.   int c;' o' S+ V# H$ R" `4 e3 V$ o
  372.   LPUPDATEFILE file1,file2;
    ' O) n  D& }& {# ~% S3 a1 J
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;" ]  k, I) N& z" W8 E
  374.   std::list<CString>::iterator l;
    ' N' C0 x- E' `. Y; t
  375. . Q( I9 y+ ]4 O# A/ E
  376.   UpdateLocal.clear();
    9 u) t) J$ G' A+ O( |3 w
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ( o8 a# S. Y5 [0 H" A
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . O- q9 ?4 q, F% G. r
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    * ~) W' X: F# S  M7 B
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);6 m* _6 e2 F8 D% N
  381.   if(UpdateFile3.size())
    1 I) L( Z* G% `0 I1 C# ?7 ?
  382.   {/ v# a/ s1 R# [4 s7 D1 Y9 Y, W/ X
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); j- H4 `, k$ Q
  384.     {% ^  I2 r7 r0 U  a
  385.       file2=(LPUPDATEFILE)(*i).second;
    - a" v: j- o6 k' o8 I( _
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 u% E% q5 p: r, ^! C& M2 ~! w0 C
  387.       {# Z2 O' S* o3 ~0 j
  388.         file1=(LPUPDATEFILE)(*p).second;
    2 g' l7 d( n) p3 T! Z! J5 H# ^
  389.         file1->vers=file2->vers;. G6 t3 o' G( @# O
  390.       }! i; {9 o: T+ ]+ C9 [8 O3 K0 s
  391.       else
    5 D/ x6 ~; b7 @8 s9 b6 ]
  392.       {
    7 ~8 `+ |6 ]% b2 o+ e
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 z) W2 r) L: [. L
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    1 [% Q* `) I$ r+ f' Z2 v
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    $ E4 _# T2 u8 K# H! L
  396.       }% w! {; [) X0 I3 |9 U$ f$ t
  397.     }
    1 m( \& J) j5 y, S9 B" Q
  398.   }
    ) C% O& I# T' K7 h
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / s; R  _; B: B: r. D3 l
  400.   {
    " @3 E/ e: c: e: s( _. D# p+ _
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    * S, K/ S4 L' l
  402.     {
    $ t. s% T; a- w/ _0 v9 H
  403.       file2=(LPUPDATEFILE)(*i).second;
    . O' w+ r' j) h' D0 E
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    . C& n2 ]0 w! }, z) e6 Z
  405.       {
    ; ~3 D7 G4 b" W% d/ b' K
  406.         file1=(LPUPDATEFILE)(*p).second;
    # T7 X3 g6 ^$ d  X# Y9 l
  407.         if(file1->vers!=file2->vers)
    3 ]5 k4 h( K: y/ s3 Q
  408.         {
    " A0 V  q+ b8 i4 ?* X
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 O5 `$ {( v: ~1 K( |- q
  410.           c++;. }! i  \2 F8 i' h0 w
  411.         }
    0 r* J' P  D: S  }  [
  412.       }% H" l+ G! E  }6 D
  413.       else" z* Q7 c4 r) h
  414.       {5 Q/ h3 c! q& h0 T4 U/ W
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ s: c' }5 o' f+ K: J
  416.         c++;
    # _/ q$ C4 b/ a2 E7 N0 Q
  417.       }& R4 t: ?2 b$ S) T2 u
  418.     }
    $ v+ V! n9 `+ ~% p# S  J) t
  419.   }! E2 A% T' n. i
  420.   unlink(".\\DownLoad\\update.txt");
    ; L+ |6 V+ l% A# J- P) N5 k' p& L
  421.   if(UpdateLocal.size()) return TRUE;
    % t, E; Q8 F! @5 s- S* _
  422.   else                   return FALSE;
    8 ]6 W5 s7 L& g4 r" \; `
  423. }5 K5 [5 H/ N( L: p! k
  424. , {! ~, _) Y0 s) v2 ^  w
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    & z+ ~3 n) L3 L3 G- U2 S
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    " [+ C: y6 d! {. b1 H! k
  427. 6 x4 @/ X" q1 j5 L% ]( v

  428. " }- X% ?3 P% N) I9 Z9 f4 N8 C: P, d1 b
  429. + O1 o' G1 B. w6 F* }' I' h
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)3 r5 b+ p4 p7 |1 }
  431. {+ j  F$ [" C$ |/ ?/ W
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;  @% M" z' Q  X' n. u+ r/ V7 O# U
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ X, v% E6 @+ V- l+ l7 X
  434.   {
    5 J! A" ?* P' V1 e" d! L9 K
  435.     char szLanguage[50];! r5 I- L$ Y8 j4 @( I3 m
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 r" H1 i; p2 O7 {! _
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 i  ]) U. ^1 n% ?
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, j; }2 R! f& G/ h/ z( I8 |" T
  439.     else                                   m_iLanguage=ENGLISH;2 f6 J: ?# n; W/ a
  440.     char szRegister[100];
    $ t; k9 B5 h2 x
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 \" e7 G2 C" S" S0 k
  442.     strRegsName=szRegister;  W% y, c* X. o
  443.     char szPatchURL[100];
    2 ?4 f: t2 @! Z" u$ C
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ; p1 H7 P; l% n0 j& b
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! Y1 l) T( e6 v
  446.   }
    8 H7 ?# I* U1 e( ~% t1 x$ s9 h+ I2 r
  447.   else
    5 u% y+ Z7 K4 O& d; i) J8 O
  448.   {
      X5 Y$ K9 F# ]$ A' P
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 n9 x) q: @. A  c9 x7 }. O+ N
  450.     strRegsName=DEFAULT_REG_URL;
    % A+ j% g' D* x8 \5 F( ?* Z" X: h! u
  451.   }
    ! W. T9 D2 D8 m  K& Y
  452.   if(GetFileAttributes("hosts.ini")!=-1)' I$ b7 k" o. [2 y
  453.   {
    , _  @0 D$ Q6 Y. S
  454.     char szIP[50];5 h, \9 h/ @6 _( ^$ v8 ^( X
  455.     char szDIR[300];/ d. e3 k; M/ ]' i- e
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))# ?' a) @( [& P/ y: t2 {
  457.     {
    : e' r( J1 V* S9 d+ ~  x3 b
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    3 |2 x! l) S4 t
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: b8 y. ]4 o8 j) i* i" K6 b( v
  460.       strHostName=szIP;
    5 K8 D4 Y5 @  O  s  U6 O) Y* V2 r
  461.       strHostPath.Format("/%s",szDIR);
    . [$ @! b+ Q$ m8 x: N, e9 o
  462.     }& x: }) H' ]; ?. P0 B" x
  463.     else
    " C7 Z$ m4 U, H5 w; E2 \; E0 g, U9 v& |
  464.     {
    - l9 F/ L) Z- _: I1 z7 C
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : @% q7 P- l% F7 X
  466.       {
    ! v8 Q0 c5 _* r% c5 T
  467.         char szLanguage[50];% Y6 G6 @* K: [6 X
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' X' s4 Z5 e. j4 n3 v
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 r$ L& N5 i0 s; e0 U1 e, a
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 f$ m; z, S4 I; d4 a
  471.         else                                   m_iLanguage=ENGLISH;
    # [; d1 u7 [7 d1 b. u( w' n
  472.         char szRegister[100];9 n8 q5 C4 k0 w; e3 r6 i. j# y) Q- v
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) `/ t! ?8 w2 g5 A' n
  474.         strRegsName=szRegister;
    4 |9 m9 V3 @: O3 M9 x# p
  475.         char szPatchURL[100];( q: S# d* K. b+ v- u
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      Q: f/ b9 a( g
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) n* e4 \- j& F/ }5 ^
  478.       }
    6 y0 H: U! B* b( O
  479.       else5 O/ ~, r; x2 a- ?4 {7 {5 r
  480.       {* C  ~2 ]% ^8 X( S6 ?" J$ d
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 a" V8 q) g8 A9 N! _9 [- {) P
  482.         strRegsName=DEFAULT_REG_URL;5 ?- t6 p2 L4 K3 ]. j
  483.       }
    # {6 J- {- b# @# J
  484.     }7 X8 v/ P: s( E( F
  485.   }! ^1 [) p9 i% q- K% ~
  486.   return true;
    * c; K$ C5 i+ M, f0 _
  487. }
    ' `& z$ F. I" N. d) b8 m# m, B

  488.   j, S2 G) z- d1 C: M8 H
  489. #include ".\ZLib\unzip.h"% X7 r7 N- v: t# A# E- ^( A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    + M& t: e3 `  g0 M9 K- Z! \+ P
  491. /////////////////////////////////////////////////////////////////////////////
      B. F  Q; a7 h5 p( @; c
  492. // CRevAppApp initialization* L1 l1 _& f* A' T+ k8 r1 u& i, a& A

  493. 2 Y. t7 g0 }6 W" {: o
  494. BOOL CRevAppApp::InitInstance()! ^: h! M/ h% |( p
  495. {
    + ]5 t+ C1 d& A$ i7 `& r3 ]$ V; {
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 g3 z1 `2 c5 b9 \& L

  497. 6 T; z$ C6 a7 ~/ {& L+ U) C
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    1 B: w- C2 p1 H( k) @' {3 T9 Y+ e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))+ i5 I. w# ]- ?8 Q/ Y5 f1 Z6 U+ u! J
  500.   {& z  D# _% u4 X
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");8 b# X8 @. D/ {! G2 t
  502.     GetPathFromFullPath(szPathTarget,szPathSource);7 F2 q* J( v: o
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    * o1 M" p* C3 m
  504.     {2 n3 @4 K+ m* i* b5 {; H
  505.       strcpy(szPath,szPathTarget);  ?* H* F" F2 [! B
  506.       SetCurrentDirectory(szPath);1 @% o* b) F- |  _0 q; W$ x
  507.     }2 w( S4 X% {# c9 g8 b
  508.   }9 [' d! p7 L7 {; h* X
  509. #ifdef _DEBUG$ t# I1 K5 h; K  @% G
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ |1 M3 h/ v3 g; Y8 N
  511. #else  {4 a% B2 q- l  ]
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ P$ J$ a0 d7 \5 B/ D* v: e/ ^3 T
  513. #endif, N- U$ w8 L" q9 l  q1 t
  514.   {/ W+ _4 i' J. Y
  515.     char tempFileName[MAX_PATH];
    $ U1 ~' x+ p0 ~: K
  516.     strcpy(tempFileName,szPathSource);
    % ?$ D8 j* ~! l# d7 Y: f( R; h
  517.     tempFileName[strlen(szPathSource)-12]=0;6 c' n9 _0 m0 a3 Q5 v& J+ w
  518.     strcat(tempFileName,"\\$CSUpdate.exe");7 i4 r8 Q! @3 \8 O
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ( C2 ~0 o9 }4 a3 a$ z- \3 u
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    4 B9 v* z8 _- Z  H. s' T
  521.     return TRUE;
    # L3 y8 g& \8 A) q# u
  522.   }
    ' m# I: A! f) d$ k* s
  523.   // Nuke 0118: Delete run.exe
    , P5 O1 a( S) t0 f9 |0 A1 Z- C3 C
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    & X5 ?* }1 y: }0 L! C; s# _: _
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    * @8 V; R' y# v; ]6 X9 X
  526.   if(!ReadCfgFile("Config.ini"))
    1 g. ^8 ~( d% q, I, [5 r5 u3 {  {
  527.   {1 U: s0 }7 j  V0 m
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    * ^2 W7 N" f, M
  529.     return TRUE;6 T$ T* e, Y8 @7 |
  530.   }
    - f" Y7 J5 ?7 x" s4 L
  531.   HANDLE mutex;  T% L8 r# b% _+ E0 i3 ^. b
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))# ]! r* P+ K2 n/ J
  533.   {
    & @0 `$ f' q! ^
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)' M' a# ^3 a4 j$ C, z1 m: D% O
  535.     {' X% t* \6 Q* e* u
  536.       CloseHandle(mutex);" a. j# s- L7 t
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);' m5 w9 H3 `- i& e& v/ a
  538.       return TRUE;& d7 V* C5 V$ ]
  539.     }# s% g8 g6 F# L
  540.   }  7 Y+ w7 B; |( k$ f
  541.   CloseHandle(mutex);
    1 y$ Y& S0 ~, F2 S

  542. 0 S/ d2 x; W& M$ b8 f; i' j$ t
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    : n& d0 V1 B/ v( |
  544. ) x3 s" C8 ]1 d: h! b% Q$ P1 f
  545.         AfxEnableControlContainer();' z/ {/ s3 ]2 f
  546. * u1 |9 N5 W8 q' w. H
  547.   bCanUpdate=FALSE;# q9 @" W' _! ?$ G. Z" c
  548.   dwStartUpSteps=1;; k3 m8 n4 S/ e: Z5 W4 ?0 Y
  549.   dwProgramState=AP_NOTHING;
    " P5 @! ]) ~# U% C4 F  N
  550. " W0 }2 W" G3 `# l( o
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    0 {5 ~- d6 B; H% X$ j2 N2 Q" J

  552. ( r# q8 A( l5 }6 T( O
  553.         // Standard initialization
    2 w3 x; O& _3 A6 I' p7 {0 w4 g
  554.         // If you are not using these features and wish to reduce the size
    ! h# a: o, |" M  A* N
  555.         //  of your final executable, you should remove from the following" M; c( m# B2 Q% F" C  ]9 J" L; J
  556.         //  the specific initialization routines you do not need.. t7 ^7 u3 K$ h9 ?! n' S

  557. 0 d6 y7 k& H6 |6 k* ~3 A
  558. #ifdef _AFXDLL* K- ~' G5 T; H5 H
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL6 t) W% J! g0 r$ T. N3 ?/ t" _
  560. #else4 {3 Y0 D  @. y" c" U
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically- A$ M! B4 F  l1 v7 P7 p
  562. #endif
      N' v) a8 X0 Y/ ^8 i+ P: c

  563. 3 M. [! D$ {  s5 f: H5 Y- |
  564.   dlg=new CRevAppDlg;
    7 C4 A3 M) V9 f- S$ P
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    9 \" k- X/ V# ], e7 Q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);. z7 _6 J  M8 Z/ Z5 W  A/ e
  567.   m_pMainWnd=dlg;
      F$ Z& G: c2 Q; z

  568. 3 D2 d5 O9 B$ _7 s
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    0 }& U7 N! i& x/ d3 U8 c1 I

  570. 8 x( M* {* s7 H& R4 E
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ; Z9 c3 Q1 l7 o0 g& f; ^
  572. //  ULONG_PTR gdiplusToken;
    * {4 E! ~& ?' T
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    " h% U$ H" |+ x5 M: f- A- A6 x7 l

  574.   H3 N( K1 q8 H" w' u  p7 d4 V
  575. //        CRevAppDlg dlg;3 ~: V0 C$ A+ X0 g: E: Z+ k2 P% L
  576. //        int nResponse = dlg.DoModal();
    9 D/ v; V# H* ^9 z- ?
  577. //        if (nResponse == IDOK)5 P) w  v. o; w5 J# U- z# ~* V
  578. //        {. N# z, v6 t4 j( P( k
  579. //                // TODO: Place code here to handle when the dialog is0 w# f4 ?1 M9 w- N* \$ w
  580. //                //  dismissed with OK
    $ \6 l! m2 ^1 W" F  u7 s
  581. //        }# w+ \6 U7 |9 P2 I0 i
  582. //        else if (nResponse == IDCANCEL)& {9 u# r) w. N7 O7 s/ `
  583. //        {! u9 V  C! ?( N; U
  584. //                // TODO: Place code here to handle when the dialog is
    $ J5 V+ ^# v* s0 V! D: R
  585. //                //  dismissed with Cancel. a: s6 B" o5 h5 n( t
  586. //        }+ v2 H; e* `9 l
  587. : E: R- S0 j2 y8 d8 \' T
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    : L$ H/ R% p! a3 `8 p* i8 i
  589.         //  application, rather than start the application's message pump.+ c! l7 L- |1 L/ g4 T8 w
  590.         return TRUE;. M- e3 R) H5 Z! g
  591. }
    ! u) K# P  R4 q% v
  592. ( |4 ]* ~# b! B1 C* s+ B4 x7 w7 t
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    + i, O4 e  U" J& O
  594. {" a  L) F+ _5 i# |  n4 K$ t/ M% P
  595.   int i;
    3 I4 R  ^2 u" w& b
  596.   char *szRet;" ?8 W* [4 G% d1 e# H+ f: W
  597. & I5 I8 C! _/ x# y0 t% V
  598.   if(pSource) { itoken=0; sztoken=pSource; }( N, |9 x% u% x  z( g7 X6 G
  599.   if(sztoken)
    * J- d6 @" D" ~4 W" ^/ Z2 s& f
  600.   {0 W: P" e* p& e! ]
  601.     szRet=&sztoken[itoken];
    ) V9 {0 Q4 Y7 v
  602.     while(sztoken[itoken])
    1 G' ?( m5 V  y& O5 C- S; G% V
  603.     {
    " \; V- O8 u& r5 I: O% e
  604.       for(i=0;i<(int)strlen(token);i++)
    7 {+ [/ W, r; t+ O) |& E
  605.       {
    - v5 `! i; |0 x; N& x
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    * U" h5 i/ Y$ [9 e6 i. A% M
  607.         {/ J3 L( T# w+ d  D' ^0 N6 c' G+ w
  608.           sztoken[itoken++]=0;
    : m# N% w5 {$ y
  609.           sztoken[itoken++]=0;
      i. b& S: _2 v4 w$ _0 M% y7 X- e
  610.           return szRet;
    3 }* H! I; B. H  s
  611.         }9 N0 W* Q8 C- E" w/ M; j1 k
  612.       }. P- m8 p4 z7 c: H* @. H
  613.       itoken++;
    ' A, ]( F  ~' X9 D; C
  614.     }' @# U- {# U9 g0 d& A) y
  615.   }1 F1 |' S" \+ y' A8 H% Q
  616.   return NULL;
    ; B! ^9 \/ ~" G
  617. }
      V* F9 s8 S4 K1 B- i" N9 W
  618. 6 U! v9 {" P. B& U" T
  619. void ProcessProc(long Total,long Current)
      t. w+ y; y+ R7 V6 g( y- `7 ^. ?( o
  620. {% O* H- }; ^8 [) {; q8 R
  621.         MSG msg;$ i( M) @1 l3 P5 g) Z
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);% S' e4 n& Y7 l+ Y  f: c
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" z! A  c* d" s8 {
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    " I9 I3 }. c0 F/ ?! Y
  625.         {3 Y7 s" h% L. G; l
  626.                 if(!GetMessage(&msg,NULL,0,0))( c$ O' C+ l$ w8 D  k
  627.                 {
    & L  Q# S" N# A; c2 ^( m
  628.                         return;6 n! z% I2 _$ u8 a3 J- c3 E" G
  629.                 }, Z( m- i" A6 @* j7 U  p
  630.                 TranslateMessage(&msg);8 f5 `% q- ^& q7 J  s
  631.                 DispatchMessage(&msg);$ z! P6 p. Z4 n
  632.         }       
    $ {  U( |: @, n5 h+ z; V
  633. }
    5 N3 E. ]9 B, ~  S+ D. L+ k
  634. 0 ^! d! k' L) T  F* F- N8 h. \
  635. BOOL bFirstChar=TRUE;
    # Q0 d. r; A. h5 I2 [

  636. " `5 l" I6 b& F1 a  S2 E( V
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ u% R' C. }2 \: }4 k" n% m
  638. {( U* h7 t* b5 o! d" Y0 }* B3 J
  639.         // TODO: Add your specialized code here and/or call the base class
    ) w' E" C# d0 d% Y
  640.   switch(dwProgramState)
    3 t6 Y/ r8 [3 R
  641.   {: \& R" W( Y8 K+ v: J, e6 @5 ]) `
  642.   case AP_NOTHING:( E1 s, m: ~% {* Y6 k
  643.     switch(dwStartUpSteps)
    5 ?/ u  T0 _* s! d$ Q
  644.     {
    * r9 i- Q5 J0 [0 X) ]4 n. G
  645.     case 1:
    1 s: b1 Q% ^$ S8 ?+ O9 V# B. A
  646.       {5 h/ m! @5 ?# G% }( n2 g
  647.         int i;
    7 B9 p- L- s! d7 g: g8 _8 W
  648.         CDC *pCDC=dlg->GetDC();
    " j0 r. n; a( C1 e
  649.         HDC hdcwnd=pCDC->m_hDC;. [8 U% c" ]& m; p% u
  650. //        Graphics graphics(hdcwnd);0 G; l$ y0 X5 `  ]
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");) U, E# x4 m% |8 {  A( h- W5 A8 @
  652. //        INT iWidth=bitmap.GetWidth();. U: b7 d6 B" o" v5 G
  653. //        INT iHeight=bitmap.GetHeight();4 u6 f! G/ g/ X& V, N
  654. //        Color color,colorTemp;0 V# w) n5 i3 V/ ^
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& h- q0 y: C7 Z& c
  656. //        {
    4 P' l2 @7 B5 }( S" G; F
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    & L6 s; P+ M/ V" L1 [# Z
  658. //          {
    " p7 d7 m7 c. T3 A  J; e7 A( W* i
  659. //            bitmap.GetPixel(iColumn,iRow,&color);# R0 V* }# a& B3 e4 F1 c4 O4 N$ @3 p
  660. //            colorTemp.SetValue(color.MakeARGB(2 @1 k3 ?& x: N0 ~+ W
  661. //              (BYTE)(255*iColumn/iWidth),( m! I8 e% I; ?4 d6 G
  662. //              color.GetRed(),  H5 Z2 m8 @/ C
  663. //              color.GetGreen()," Y: c/ u, R$ N/ I( k) Y- o
  664. //              color.GetBlue()));4 \, l9 l  _; L3 F' e! X
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);7 {- m$ Z) [: A* K
  666. //          }8 B! b. P4 @- t
  667. //        }- A  I( u- g' I5 b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    0 ^- Z0 [- K0 z" M, A7 \4 ]
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # P* b* U1 D/ J# A
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    6 v& e1 k# N+ ~' ~5 G0 X5 B
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & \1 D: N7 l+ {1 N) y2 O/ C# {+ x8 A
  672.         for(i=0;i<240;i+=8)# {* m6 }, }, z* I: S2 I
  673.         {
    7 t6 K2 w3 i* a- V! U8 |$ x. @
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 l; R8 P; s9 n, Y% ]
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);1 a5 g7 d8 R6 L: ]3 O+ y- w- }
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 J+ t% |. _4 H! d. i
  677.           Sleep(33);
    5 V8 S9 O. G$ ]
  678.         }$ j7 H$ X+ F7 n" r( V- E
  679.         Sleep(1000);
    . k4 u( e- p, `: s! R
  680.         for(i=240;i>0;i-=8)
    3 R) Q$ b9 H; p/ F4 I) E
  681.         {
    * ]# k# S: f( f
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* I+ z, K% _1 |! Z0 O8 p
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. x; b6 P  }/ y; G  B; D
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * H2 C( G2 B' h3 I
  685.           Sleep(33);3 H7 u3 L- ^' ]8 t# Y! H" C
  686.         }  E- ~$ k3 N& n! j8 D; Q, t) \9 I
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);/ `- n* x0 _- c0 T2 k8 q1 v, K# ~
  688.         dlg->ReleaseDC(pCDC);7 ]# Q1 e9 D5 b# p. t+ M
  689.         DeleteDC(hdctar);
    , \! k+ Z) s# `0 A; O
  690.         DeleteDC(hdcsrc);! J: M6 ^( l% _% \% c
  691.         DeleteDC(hdcorg);
    . M5 O' c$ ^2 u2 ~) R% o
  692.       }1 ]$ O0 S. _: o
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
      A- t/ N$ }3 ~5 F) B# w
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");6 ~$ o! Q$ U# {/ A) a' M
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");% X- j" _' P) D9 n
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    . S, Y7 V5 V% R4 s! f, ]; }
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 Q) q  _8 E3 g! O* h* ^
  698.       if(!Dn.Connected())
    1 ^' X  k8 E1 A& W  o! l
  699.       {
      Q- z& @+ `) m! |% U4 y4 H: r
  700.         dwTotalFiles=1;& T9 {! j8 x: `- ^4 f
  701.         dwDownLoaded=0;
    8 I7 }# k. U0 E& J* o
  702.         bSilentStep=TRUE;5 G9 J2 s6 e7 m( p
  703.         bCompressed=FALSE;
    4 ~) X" v4 S3 D/ h5 Z' R
  704.         strExtLocal.Empty();
    2 _. ^" K" H- s. N0 \
  705.         strFullName="readme.txt";  {! T  a% }( l% u1 A' j
  706.         dwProgramState=AP_CONNECT;
    * u  }: P, P! {) O& y
  707.       }
    5 O- N: M2 u3 P$ `( w
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ; @3 P/ x2 E  h+ n1 _. w* [  h  o
  709.       dwStartUpSteps=2;0 s% g+ \0 V, T
  710.       break;& S+ t8 G) f) f" m  B; A% B' H
  711.     case 2:/ y1 I+ l" k4 r4 D4 ~. |- z' l
  712.       {2 W5 }: _0 Y) ^" t7 }! z
  713.         int iEOF;% u! p: G* Y% X! W6 R  y* p
  714.         FILE *fp;' Y: B9 m3 X& P, W+ w* a
  715.         char szString[512];# y; n8 N$ k; D- W) i
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    7 n& L/ ]6 ?6 f# {1 _8 u
  717.         if(fp)5 L) H: |9 {: u- Y+ C, _6 ^7 @/ O
  718.         {7 u* O( z$ O/ i; R6 T1 p- M8 {
  719.           do
    # U; N, c$ q) B3 s$ d# ^- p
  720.           {# u% ?) e; `7 K5 t: v4 V* V  w5 c
  721.             iEOF=fscanf(fp,"%s",szString);7 L* m% m# g. r- j+ p
  722.             if(strlen(szString))  @& S$ n0 I# o: ~# U3 t
  723.             {$ X: Z. m% \* W6 _# v* F
  724.               if(bFirstChar)
    9 |/ y- x5 _& t) n
  725.               {
    ( Y' R8 h4 Z. J3 ]6 g
  726.                 bFirstChar=FALSE;5 J  J" L. d: H* x2 ^
  727.                 bConnectIsBig5=FALSE;
    . x- t% d5 a) q0 D  d  c
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ( h6 Y- R6 W1 _
  729.               }# ^* {6 u) \0 i) C  F& p4 t
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 m; ]9 v4 Z. ~; ?
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));5 b  X* m' V. `; n' k
  732.               dlg->m_ListText.AddString(szString);  r  _/ p& U" B" Z4 B
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 ~5 R: y3 A+ J! [
  734.               *szString=0;  z, y) f5 d& X& [5 N3 c
  735.             }8 g! S' B3 w8 @# L
  736.           } while(iEOF!=EOF);
    6 D& r0 [- j1 M5 C
  737.           fclose(fp);0 Y/ B6 P, F% L3 o
  738.           unlink(".\\DownLoad\\readme.txt");
    / r, O, L% T' k9 f( ?7 B' u
  739.           dwStartUpSteps=3;3 W+ H" m& y* n2 F7 H+ S
  740.         }& @9 v0 v! y; o" P5 o& T
  741.       }
    7 `  D  A* c/ U! O. l
  742.       break;
    ; X, N0 s& s3 ^
  743.     case 3:. [3 s" d( a( C# m0 M: v! l; g  y
  744.       if(!Dn.Connected())7 v8 l/ i+ H) M2 Y4 S
  745.       {
    + T* m4 }% n2 _0 a) o' y! Y/ w
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);2 Z' b7 }# C6 h# L9 v+ C
  747.         dwTotalFiles=1;
    9 b- I5 D1 N% p) I0 t& [! \$ X2 v4 Z
  748.         dwDownLoaded=0;$ o8 e6 c8 l$ Z% [
  749.         bSilentStep=TRUE;
    9 {" n1 N$ N4 Z7 X2 e: _+ s
  750.         bCompressed=FALSE;3 v* g. k5 H( L3 F
  751.         strExtLocal.Empty();
    6 P# h7 ~1 P( }! Q. a7 m
  752.         strFullName="checkversion.txt";
    # c) _$ M, r) `7 h( [
  753.         dwProgramState=AP_CONNECT;( m" j) S0 D0 J5 J+ v$ u
  754.       }
    , R, S$ R* S7 }& O& M- {& G
  755.       dwStartUpSteps=4;
    9 S  N* F) u; M; q5 ~2 Z8 Q% s
  756.       break;' e/ O9 a6 o* l, V
  757.     case 4:8 J, J# f$ W' E8 o9 J( ~4 _
  758.       {
    # i9 e2 z- `  m9 x2 p& K! V
  759.         FILE *fp;) w+ ^3 S( P( z+ W
  760.         char szString1[128];
    ' S" C5 v4 L0 p. D2 B  d3 K( r1 P0 ^
  761.         char szString2[128];
    3 T! Y) E: I& f) G: U$ X* H
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; `6 g7 }) t* E+ {4 H* V8 T4 D  q
  763.         if(fp)- d* ^' A0 s+ H# H
  764.         {5 Y. u) ~6 _; z
  765.           fscanf(fp,"%s",szString1);4 C  n) M. j8 r- ~
  766.           fclose(fp);/ f$ h: Y$ n6 j& f
  767.           fCheckVersion=atof(szString1);
    5 ]! R2 @, }0 p" N1 R
  768.           fp=fopen(".\\checkversion.dat","r");
    " p; }9 }* ~! y2 O6 l
  769.           if(fp)" q: g* U* E: ~$ G7 Q  q0 X" l* m8 _$ Y
  770.           {3 ^- ~  Z6 y1 u- h9 f# K' A
  771.             fscanf(fp,"%s",szString2);
    $ G" L7 _4 B6 e. o8 J
  772.             fclose(fp);3 h# |. A# U/ ^1 ]
  773.             if(atof(szString1)!=atof(szString2))& K8 l7 j2 R" @8 L  H
  774.             {
    / Y* i: n. F, e- L2 V
  775.               if(!Dn.Connected())
    4 }( _  y# H" u0 d
  776.               {, R" i7 C( @5 O3 f* ?* P$ \
  777.                 bFirstUpdate=TRUE;
    5 V. l( J- Z; P: E4 |9 U
  778.                 dwTotalFiles=1;
    / n. k. B# f) Z: h3 ?
  779.                 dwDownLoaded=0;1 Y! S2 `9 O; s- A" I
  780.                 bSilentStep=FALSE;0 l% F5 [6 T8 n% c; W0 W& F. k3 m- w
  781.                 bCompressed=TRUE;
    - Q$ E% r; k" k; t. M$ P
  782.                 strExtLocal=".\\DownLoad\";, I6 A6 w9 N" |# z
  783.                 strFullName="update.txt";
    ! X# V4 h" Y- ?4 `# Q9 F
  784.                 dwProgramState=AP_CONNECT;6 f2 P- Q# ^2 \- P
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' z1 G1 \3 G0 T$ |7 X
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " j2 t7 M% |) C
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");3 u5 v* Z9 Y. k- I7 f/ i4 a! G6 z

  788. / v2 P1 y* G* a9 H# s7 S
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 d! F  r+ d2 Y! u$ I/ ^
  790.                 unlink(".\\DownLoad\\checkversion.txt");) p" G$ T& x- B3 ?. x
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / C# c3 a! B7 i1 n4 Y$ D# j5 N
  792.                 {  f# `. Q- k/ W1 ]) y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");* M* k2 X  x) U2 @9 D
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    * r& y3 J3 q. F: v* {
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    / ~9 ]" V. v* C
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. B) |9 r. Z, ^- Q* n' v! r
  797. & q$ K* o) O- F, r- E
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");4 |" ?+ m$ t$ c, B5 N0 h* C
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & X8 U8 e# R. M( C+ @' r- U
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 w, D- \9 \& m9 N& Y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 b; q/ R: P" U8 S5 C: A! X
  802.                 }5 D# q) k% C2 J% H, \
  803.                 dwStartUpSteps=5;8 L0 p& }5 U& d' z7 S* x, C8 X
  804.               }7 P8 t! b( P" h# N# a
  805.             }$ S5 l# I' ~: }6 w' I
  806.             else
    7 n1 H8 P+ @  Q  S: e
  807.             {
    & M% h$ A; J/ z4 R! M
  808.               unlink(".\\DownLoad\\checkversion.txt");
    - K5 p5 W  k- H0 k: [
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");1 R$ g$ `1 l- Y, ?" ^
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! j1 |# t/ P- P" R( b/ a
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' R. [. W& e: u* C9 L+ d

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

  J7 V" D" v4 }6 h4 O- x; ~7 ?+ h) B1 m$ G2 ^

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回覆

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回覆

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回覆

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回覆

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回覆

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回覆

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部