找回密碼
 立即注册

CSUpdate.exe源代码

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

* [. z0 H& {: M1 R5 Y3 G! `! _; k
  1. / RevApp.cpp : Defines the class behaviors for the application.6 c) U" g6 B- T2 b: L5 T; R/ P
  2. //' I+ e9 V  `9 o# a

  3. - v* X7 g1 g- l1 s  i0 ?
  4. #include "stdafx.h"
    / M& c" O2 K' y) o

  5. 9 ]5 \  q! B  R5 S0 x- o
  6. //#define UNICODE' A. B' F' s8 i( t
  7. //#include <gdiplus.h>
    " O- t  Z4 t' \8 M" n2 |
  8. //using namespace Gdiplus;
    6 K, s( g1 f# _, S/ L

  9. $ l4 t2 H0 ^; q, Q% ~1 W7 n/ I
  10. #include "RevApp.h"* p2 Y; K* G+ N5 p& Q, P  j
  11. #include "RevAppDlg.h", N" C/ [6 h. n

  12. 3 S5 O: o5 k' J. F7 }( w
  13. #pragma warning(disable:4786)8 C& T! v' x5 M# t( a. C2 Q
  14. #include <map>
      g  e) o5 b& h& t8 i9 }
  15. #include <list>6 c- t* V0 t5 V+ K
  16. #include <direct.h>; N& \! @; c- `$ M! p. }

  17. 2 e! I# o5 M- q, q1 p- U
  18. #ifdef _DEBUG8 O+ _! i7 W7 E# X4 _( c4 J! ]7 N
  19. #define new DEBUG_NEW1 J+ u+ ?- a" F# R+ C1 g
  20. #undef THIS_FILE0 X  i: k" U3 ?2 \8 U( t, N
  21. static char THIS_FILE[] = __FILE__;
    . _; n$ K% j8 F% R0 W9 u5 s
  22. #endif  U. J: I% L: f& L9 p9 [/ M  C
  23. #include "SkinResDef.h"  }5 `' ~3 H. I$ ^) l0 U/ }
  24. #include "ChangeBG.h"
    $ {7 `+ s) N% F0 `, P$ {# g
  25. #include "AFXINET.H"
    : g2 P# g0 B: r0 i/ g! V

  26.   y3 b/ A6 w5 Q
  27. #define TRADITIONAL_CHINESE 0) T+ j$ T! {6 e
  28. #define SIMPLIFY_CHINESE 1' O- W6 C9 T0 Q' v
  29. #define ENGLISH 2
    7 ]% z( H! a0 ?
  30. int m_iLanguage = ENGLISH;
    6 T  K  L) o, M8 |
  31. /////////////////////////////////////////////////////////////////////////////  P& U$ Q# h: @6 k" Q4 T- r1 l
  32. // CRevAppApp
    $ y1 n4 |0 t  ?2 }* E. `

  33. 0 `! @3 G+ J( r# E3 V* t
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)6 Y' Q5 L  r1 j# `6 q
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    6 E7 P' y/ l! o4 Y' |6 j
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.% _' u! \0 O& ?6 G; J
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ! `) ^$ f6 H! L! l
  38.         //}}AFX_MSG9 k( W% m" b! t0 c9 I4 ^
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    + [. a9 F& \& ?1 k. ^
  40. END_MESSAGE_MAP()
    $ G% k9 ^' q; Z& L' T
  41. ) \/ r- n2 w7 F6 m
  42. /////////////////////////////////////////////////////////////////////////////
    5 W, ~( v' i: V3 \1 b" y
  43. // CRevAppApp construction  m7 {6 E6 F: R( T8 u
  44. 8 M- P7 }! O+ U3 A
  45. CRevAppApp::CRevAppApp()
    & v/ i# _2 b, g* N- E6 I% V  o& M8 D
  46. {
    ) r' ?6 _! f5 h( P# x
  47.         // TODO: add construction code here,  |) \3 e5 T$ n- a6 T; ?; U
  48.         // Place all significant initialization in InitInstance
    * S+ j) e& }2 b5 e
  49.   bDisplayIsBig5=FALSE;: K2 Y9 ?1 \; v/ ]9 L8 O7 Q
  50.   bRestartUpdater=FALSE;
    6 H# D" b' [5 M$ m
  51.   bFinishUpdated=FALSE;
    & b6 @4 m& B* H5 P0 P) Z0 e0 S
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;5 _8 l9 C3 ?7 k( w9 B8 ^) M
  53.   InitChangeDataBig52GBKS();
    " u2 ^7 t/ i; m! ]9 i
  54.   InitChangeDataGBKS2Big5();
    % Y+ E1 P" Z) \" j
  55.         //- v3 C% w" c7 A" ]" ^% I
  56.         bClickRunExe = FALSE;2 o" ^: K1 ^+ a# x- g5 o5 X& @
  57.         //
    $ a- d0 `7 `$ y/ Y1 F8 h
  58. }
    : ^# C7 q) J# M
  59. + n/ E/ M7 c7 o& |7 m
  60. CRevAppApp::~CRevAppApp()+ n' T' z$ Y( G1 D+ q
  61. {
    0 z4 m4 l9 N$ W# h
  62.         // TODO: add construction code here,9 J" d5 }+ r) p8 X5 N1 V8 K
  63.         // Place all significant initialization in InitInstance
    0 c% o* d: O& p8 m$ Z3 A2 k) _
  64.   EndChangeData();
    $ K: E" t$ Y/ N0 d+ S: Z! G* R
  65. }
    # @8 H2 M* ?, S9 i& ?! K
  66. ( u( b  ~/ r$ y' b. i4 ?1 N- L
  67. /////////////////////////////////////////////////////////////////////////////% b" v, v  R1 y5 h' u  n  K1 o
  68. // The one and only CRevAppApp object
    ! X9 c4 H) T# @* B& o$ q2 I
  69. ; @% C. s2 q+ a
  70. CRevAppApp theApp;
    * p  M+ I+ Y2 p- A( ]

  71. ! D/ K) w& {! p6 I2 L
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ( N1 s! p+ D/ `2 b. y& m
  73. {$ v+ O/ \1 g: i& k2 M% N+ r
  74.   int iEOF=0;
    3 b4 e$ f& c4 n3 [
  75.   char szTempName[MAX_PATH];; }" x! x( p) q! _& b9 C
  76.   *szFileName=0;
    4 `9 X8 j, D# }, R/ l! e* I; H& `  j
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ; f) P/ @, N  k
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')  |& ~7 j" Q  j; ]: r6 {- ~
  79.   {
    ; M+ Y8 @' ]4 q  m+ x9 W/ u( |
  80.     strcpy(szFileName,&szTempName[1]);( r3 k0 M3 ~' N3 g7 T. ?
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    6 j% O% g2 ~) N. D9 V% a, J
  82.     {, b' T0 [0 C& t! W
  83.       iEOF=fscanf(fp,"%s",szTempName);7 }; E; q' Z9 O0 i) b* `8 M
  84.       strcat(szFileName," ");
    9 @8 `- N8 B. P7 H/ \1 S0 W8 w
  85.       strcat(szFileName,szTempName);
    & B0 ?* E  a3 h% C* n
  86.     }
    7 `/ K/ \; x5 p4 t6 W
  87.     if(strlen(szFileName)>=1)
    8 g9 F- G, [' L- F
  88.     {
    ' v) |# Q* h# _+ @* W% O
  89.       szFileName[strlen(szFileName)-1]=0;
    ' ?% W7 x0 s; M9 ^0 h3 o
  90.     }! C6 ?; G4 b3 z5 K: l' B
  91.   }
    + |0 ^5 w/ R& {; Q  ^9 r
  92.   return szFileName;3 R) b5 C4 h; j
  93. }% O" j8 [2 k6 P6 }  _

  94. " H* b7 R% n) |8 Y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    9 O7 H; ?5 b5 M) V/ b$ W3 H
  96. {' t: a: P7 u8 i& m) E  E
  97.   FILE *fp;$ H& ^8 V: X8 g& ~( z  K
  98.   char *key=NULL;
    . y2 i# l5 v- S8 b+ u# ~
  99.   char version[MAX_PATH];
    7 g7 l; H2 g0 m1 R9 ^
  100.   LPUPDATEFILE file,olds;
    9 ^7 X1 o2 L& @! y$ t( o
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
      f: }6 F, ]* ]; _
  102. ) t+ ~6 Q' V+ m+ T6 s9 k5 _
  103.   UpdateList.clear();
    + ^1 `0 q; t4 {6 n
  104.   UpdateFile.clear();
    & T. R% O. t/ ?+ d" F
  105.   if(GetFileAttributes(filename)==-1) return false;
    * Z  d/ ?  h* }
  106.   if(!(fp=fopen(filename,"r"))) return false;1 {  D4 K% `  {/ [
  107.   fscanf(fp,"%s",version);
    & |' U8 H5 `4 ]& `+ T# Y! d5 S
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    % X& i, D9 v; x* O
  109.   while(fscanf(fp,"%s",version)!=EOF)
    / `' {4 b  ]" p. e
  110.   {  x" e/ y  x' C
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ G8 z. A7 a$ R+ h
  112.     fscanf(fp,"%s",file->path);
    - i' e+ m7 K, x- t
  113.     ReadFileNames(fp,file->file);
    / c9 [7 o9 k  G5 a" P
  114.     strcpy(file->full,".");
    6 ]' }3 E  [5 Q) o3 A$ e. W& k$ \
  115.     strcat(file->full,file->path);% A( ~7 n- g4 b/ T# `( `
  116.     strcat(file->full,file->file);$ W2 E+ Q; j5 g1 N; g
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())6 }" R. @$ R2 o6 e" R% S
  118.     {. t  d  L( B+ C
  119.       file->vers=(float)atof(version);+ n* n3 i( g4 r, w7 [
  120.       UpdateList.push_back(file->full);; \- J; I& I# a  V1 x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));6 J4 H$ K. }" M. }1 ^5 ]
  122.     }  Q. S; y) P7 q0 E: T+ R
  123.     else! _( Y% h: o' B6 K9 p- |2 y, K
  124.     {- ~- ^6 K: B9 f7 p2 ^* l9 G: j
  125.       olds=(*p).second;
    * r1 r0 `8 F1 P# N7 ~9 ]
  126.       if(olds->vers<(float)atof(version))
    ' W% p9 w3 S0 n5 B' S$ Q& s' L
  127.       {
    6 y( X" p# C: Z. Q0 r" E
  128.         olds->vers=(float)atof(version);& e- P' C5 D; y) s8 ~
  129.       }& [9 d4 c% J, _! y1 ?  N( @, a
  130.       free(file);
    ) `8 o) {6 ]2 t0 S2 F
  131.     }
    5 ^/ j; m2 j/ V/ G! A
  132.   }) m" J- y, N: ~
  133.   fclose(fp);
    & N4 u% ?% M! H9 z) G8 ^% k  v
  134.   return true;
    7 \$ Q8 W* V8 r7 Y! Z; L
  135. }9 I1 B- d9 u) O2 H. _: U! X/ q

  136. 8 c' Y+ q: P; A- ]# F' S' O2 _
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! {7 o6 {0 \9 y' v- O9 c
  138. {/ u5 j+ T" x: Y3 R/ B
  139.   TCHAR  szFull[MAX_PATH];
    7 S0 V; O/ j9 Y# v
  140.   TCHAR *token,*inter;
    , ?# V" v: N" I6 Z/ {
  141.   *szPath=0;
    + p& u9 o4 C+ E% L: r) G
  142.   strcpy(szFull,szFullPath);
    ' g6 G* a. q3 i7 Y1 o' g' k* R
  143.   token=strtok(szFull,"\\/");. x5 Y: A; m7 u* z( p2 ~
  144.   inter=token;
    # [/ t3 F# X* [% S1 [. F! `
  145.   while(token=strtok(NULL,"\\/"))
    0 Q; q4 f6 c9 X/ R& N: S" O
  146.   {4 `/ V1 n: s2 x+ x/ \
  147.     strcat(szPath,inter);
    5 D, A9 T/ n$ g0 L/ }& [) s8 M3 l
  148.     strcat(szPath,"\");. p2 k1 L" i& T/ X
  149.     inter=token;5 d4 X& J+ ^5 L4 N0 V
  150.   }) @& k: P- Y9 N, z  a& L
  151.   return strlen(szPath);6 o4 r5 o- E) p
  152. }! p. R; F" I, Y4 _

  153. " B5 {! G/ t1 J/ O7 s! T
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    . Y7 B4 D! g% ?/ \4 [
  155. {
    - g1 Z2 a  S6 t: U; U* A- u" L' t5 ?. T, n
  156.   DWORD attrib=GetFileAttributes(Target);
    $ L  a% L0 h" Z2 @- t
  157.   if(attrib!=-1)
    . \/ l4 v* v: T
  158.   {
    ( y2 R6 U7 h7 [$ `% b
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))- ~. y: W1 Y2 D; _) h
  160.     {
    # p/ {# M9 y3 W9 {1 L9 N  s( E
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    + B. O* O4 u% R  a1 J3 o
  162.       SetFileAttributes(Target,attrib);1 E1 {* f/ E8 c$ m9 @+ |8 k
  163.     }4 s& u7 U9 H* E/ F& {* b  Z3 O; ~
  164.   }
    ' `7 e6 l5 J: c8 _- ?1 I) b( Y" T
  165.   CopyFile(Source,Target,Erase);
    2 C; \: ~! d7 L) ~9 H1 s: k/ n/ R2 c
  166. }
    ; k) n( Q$ u- J; m* w6 l
  167. 6 Z/ c, I! x2 |3 h
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)! a5 D( O' e1 G
  169. {
    7 D6 t0 h: J7 i! g; f
  170.      FILE *fp;1 T$ c2 Q9 A5 \  W" o' f
  171.      char  szBuffer[8192];; y$ d4 b9 X8 `- Z
  172.   va_list  argptr;
    4 P, D/ {1 ~( [( r1 ]" Z& ^8 Y

  173. 6 {1 O. p" F6 |! t
  174.         va_start(argptr,message);7 o+ s/ |8 P$ S/ h" S
  175.         vsprintf(szBuffer,message,argptr);
    3 f, A; t: ^* w: I1 O# T! H! i
  176.         va_end(argptr);) @! v  w9 @" A: c6 W9 j- p' s
  177.   fp=fopen(FileName,"a");8 r/ M2 ?1 e% F: m+ V: n& X0 A
  178.   if(fp)
    3 z9 {1 [+ M! a9 `5 I2 j
  179.   {
    ; K1 o9 E: @0 H1 J9 A' H9 d: s
  180.     fprintf(fp,szBuffer);% a1 X( s& c4 Q9 t
  181.     fclose(fp);6 f6 ]6 @: Q2 U0 Y% t
  182.           _flushall();/ V- _0 h% R5 `! _6 p
  183.   }2 Q. i4 K; [! K* p  s
  184. }
    # X3 G/ _4 G8 I+ `/ j4 a$ ]# g3 k. Q# S
  185. 4 b0 u8 E! x/ L( @) ?
  186. BOOL CRevAppApp::Fclearf(char *FileName); m- s; \2 n# Y* M0 K  P! Z
  187. {) y% L3 B9 n" O5 T9 l
  188.      FILE *fp;% E- O5 L0 m; a) Y: i
  189.     DWORD  attrib;
    % P8 I! W; H0 |* u1 J
  190.   attrib=GetFileAttributes(FileName);' b2 `" C: S3 P  L5 ^
  191.   if(attrib!=-1)8 {" t0 r1 ]  {3 l  i) [% g
  192.   {
    4 J0 \9 ?2 _0 p8 S& B7 N/ ~
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    9 Z, D" Y* B6 I4 P9 ^% X
  194.     if(!SetFileAttributes(FileName,attrib))
    0 |9 W! j: V+ _$ u" _
  195.     {/ }& c5 |, k- x9 t2 M0 c" j
  196.       return FALSE;. t3 S7 K4 ?* f) ]; S4 }3 _; u
  197.     }
    : f) p1 k, |  g5 h6 M
  198.   }$ W4 k0 d2 O$ H+ N! c; ~
  199.   fp=fopen(FileName,"wb");
    6 ^  K6 M' O2 i( e9 Z& |  U) Q* s( U
  200.   if(fp)
    ' m2 f6 ^, R3 ^4 _
  201.   {
    # Z( d" \8 j! A! g2 n. y* T3 S
  202.     fclose(fp);
    2 |$ E7 u/ C: N2 D+ v% I, z
  203.   }
    ) c, i8 t0 E7 \* o
  204.   return TRUE;
    2 @$ c% i! H5 R
  205. }
    9 m; Y. _3 l* o3 L! `

  206. 7 l2 @% Z; u3 x& i6 Q2 C' ^* G
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + }5 P3 O+ @7 E5 |
  208. {
    7 h& D& s, q% {3 P- A' t. `7 Y
  209.   char filename[MAX_PATH];
    5 h( B+ |' {6 [* x) Q) Y
  210.   LPUPDATEFILE file,olds;
    % }5 D2 ]: i0 J) Q. o/ m  f1 Z0 ~
  211.   std::map<int,CString>::iterator i;% f# D: R) L! O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;/ a/ U+ [- i$ s
  213.   std::list<CString>::iterator l;
    1 K2 J# ^, f5 i' P0 c

  214. 5 A+ i% G* o$ N. \$ ~4 h
  215.   if(bFirstUpdate)8 U" ^# ?! |  V1 q+ h, H6 Z
  216.   {
      O0 _! @8 n' J8 V: z3 d
  217.     dwCurrFile=0;8 s( M* `8 E( S2 m% v% B/ J
  218.     bFirstUpdate=FALSE;2 t) w1 n* \: }5 N
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " D* `$ O; e* K+ }' W) I5 M
  220.     {0 @1 f% o; R. t2 H  c
  221.       dwTotalFiles=UpdateLocal.size();4 L0 @  j$ t4 T. c( M) M  D
  222.       dwDownLoaded=0;
    , E# A. T2 b! h0 K4 D
  223.       bSilentStep=FALSE;
    . \: T1 b: z1 p8 \6 E5 j
  224.       bCompressed=TRUE;: Z9 d  Q  h2 b. B' e
  225.       strExtLocal.Empty();- G- Z( _$ b# F. Z5 h  Y- f* @
  226.       strFullName=(*i).second;
    ' a' f% h  W) f% }
  227.       dwProgramState=AP_CONNECT;
    $ U* M: L$ P6 A  C: b; [, J
  228.       return TRUE;" }5 l1 L. o# @$ R, H" ]
  229.     }
    ' R2 `) B% i2 Q; Y
  230.   }9 u; ~0 `3 X, d1 K
  231.   else if(bRestartUpdater==FALSE)! g# e7 [: Y! P. g' |. b7 d8 l, j' l9 n
  232.   {3 \7 B4 \4 i' H( v
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      K9 s3 g/ m, {8 U( v
  234.     {7 h) u! l. L7 {+ O5 j& }" I" [
  235.       file=(*p).second;
      P+ Q& C5 n# Q- O
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    * j9 r( c: g8 r+ ^; Z
  237.       {
    7 P+ b" E7 `& e! Y
  238.         olds=(*p).second;
    ( Z$ h6 Z6 ^7 R+ T  b
  239.         olds->vers=file->vers;
    $ [5 d* z- l9 h+ z6 B; k
  240.       }
    $ p) A+ Q9 q2 x* u9 z
  241.       else
    8 k6 l( r% J/ q  a% e  m
  242.       {
    4 X5 L% J, o% X* a0 Z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 S3 L/ N7 ^! J( ~% _; R- o* ^
  244.         memcpy(olds,file,sizeof(UPDATEFILE));, m; Z. s) c3 O, r
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));5 e- v5 c2 z0 _" Z7 ]* G0 E
  246.       }1 v4 [& m' b9 ]3 [1 o: B4 B7 X
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    " g( \- Q" f8 _- [7 ^! v5 h7 _
  248.       sprintf(filename,"(%s)",file->file);4 g; Q: K! a; }, L3 t
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: W( B1 @/ i6 E/ D9 w( j
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    9 g$ m0 \; q$ z& w3 ]3 X. I: v
  251.     }5 Y& o1 T4 u9 i  J& w  Q
  252.     dwCurrFile++;
    ! Y6 y" Q1 M7 \' {  G; c& S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - S* M: q: n- P8 @+ J9 k% d2 U
  254.     {% w* f4 `. {' q# j, x* A
  255.       bSilentStep=FALSE;
    . l- x! ], a5 b7 k
  256.       bCompressed=TRUE;7 S8 ^, p8 b2 Q4 Y" V
  257.       strExtLocal.Empty();! t( w- {& O! Y5 i
  258.       strFullName=(*i).second;
    , i! o  ]# s$ c- e$ I/ p) O
  259.       dwProgramState=AP_CONNECT;
      |5 {, p! z5 M, u; ^9 l
  260.       return TRUE;
    ( T- t! j, Z4 y
  261.     }% k, l  s1 F: m
  262.     if(!bRestartUpdater)
    " d4 e4 i7 k$ [
  263.     {
    . z' O) j' E9 i3 B) r/ `
  264.       int iCurrSize,iFileSize;
    8 x* m1 X# h$ ~/ T
  265.       iCurrSize=0;  K: s9 S9 \9 {' D' t& Q
  266.       iFileSize=UpdateList2.size();" ]- o% G8 C3 C) o  T
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");% {8 N$ r/ T& J5 q' w
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");- `' |7 G$ _2 g2 d
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    3 D; y3 R. Y1 a% g% r8 ^2 \' |/ y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 k0 j! m0 }$ x+ i$ Y
  271.       Fclearf(".\\update.dat");
    ' n8 }4 y% }* c  ~. f% |4 \
  272.       Fprintf(".\\update.dat","Bloodyf\n");' ^1 Y8 M* U7 K  b( K: f) z
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . l; X$ e, V( a! A$ K0 u, W( Q
  274.       {" y- p) l$ w) |7 ~, M
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())8 [5 D- d0 w& n/ H/ T
  276.         {
    # V. Q" V1 @1 O7 M  A
  277.           file=(*p).second;
    " }  g7 k' _: X$ n  K
  278.           sprintf(filename,"(%s)",file->file);% |" {' h- J7 H; }! ]/ p+ ?
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, l# Y! w8 A) Y5 w! l- v
  280.           iCurrSize++;; ]5 P0 O  d) d2 |- r! C
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));3 i) v5 C/ I/ V& S! d
  282.         }) _% M- q7 N8 K0 t4 C: u; T
  283.       }5 m) F1 R  f9 E# p. R7 O/ o5 h" k
  284.       unlink(".\\update.txt");+ S& P! J' w$ g6 t" [& v
  285.       unlink(".\\update.tmp");5 ?* k+ V. N; y& n" p
  286.       Fclearf(".\\checkversion.dat");
    ; T- l7 |3 O+ g& u! _1 o% m* g
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    1 S0 \; R! Y. n! e/ d8 B) u! q
  288.       if(UpdateLocal.size())$ s+ R2 }& w4 {2 j7 f
  289.       {  A9 s' N) p. n( X* W
  290.         UpdateLocal.clear();3 A; q  v" k( _
  291.       }
    5 U( a9 `5 G. q" B2 A3 B4 C3 m/ E
  292.       if(UpdateFile3.size())
    7 L0 ?3 o  n3 q" o
  293.       {
    5 v+ E- i; u% k4 O
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ( A  W6 @9 n7 T6 Q0 T' ~6 S5 w
  295.         {0 z5 L4 S8 m7 v4 S- Z
  296.           file=(*p).second;
    / [5 D, h5 h2 D  b
  297.           free(file);" J1 w' E/ |! y+ e( M3 O
  298.         }4 q/ ]' q( [9 V( Y( i
  299.         UpdateFile3.clear();9 k0 T% ]+ h% _5 R! E
  300.         UpdateList3.clear();
    " G5 w8 U+ ]. E* j' Q  _9 O
  301.       }0 [: ^8 J( r& C( r
  302.       if(UpdateFile2.size())
    4 q" I9 R: L* Z( s- a( D
  303.       {
      i8 ^2 X9 l/ Q6 r2 T
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) E  [4 X6 {- H$ S
  305.         {
    # v! M$ L. h0 p& {  {% h
  306.           file=(*p).second;6 M' |' b) x/ q7 K% P
  307.           free(file);
    ! W# Z1 F/ t  A! u. Q8 L" O1 h3 b' E. ]. f
  308.         }
    6 g5 \( {+ ~- f$ X# ]* @
  309.         UpdateFile2.clear();
    ' R3 y3 Y+ N3 b7 Z! \3 o! O" m
  310.         UpdateList2.clear();& R: @2 a& G" }1 j7 R1 f
  311.       }
    $ r- \) b8 \, q$ O7 q3 p/ l
  312.       if(UpdateFile1.size())+ Z5 W1 y3 F: c$ L6 k3 c( T
  313.       {
    0 F& h, @$ }5 d* W' R$ x# Z, n' X
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' r* s" p- c- |
  315.         {
    " D* a$ k# D* E7 L6 o2 G
  316.           file=(*p).second;
    # n# s' ^9 g4 y" D# I; x* ~
  317.           free(file);0 R/ O4 j6 m: z% X- I3 A2 u6 M* H4 s
  318.         }, `# V9 V8 S7 m) I! D) f4 l
  319.         UpdateFile1.clear();
    " Z9 G  l- n0 [" j) `
  320.         UpdateList1.clear();5 B; Q3 f3 L3 ~; D0 T1 m. V
  321.       }& j9 u$ u& V2 F( G( X
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    0 A; P, E9 f8 }1 s* i2 h* h7 ?
  323.     }
    % P. j8 j! W% B, \. h- ?2 L. Z
  324.   }1 x3 p2 k9 p. A2 p, s8 ?# Z. L/ O4 t
  325.   return FALSE;
    : Z' e. C8 O! d6 k3 @( v$ F# f
  326. }4 M* k; T. P2 H) e. w

  327. # z( Q$ U6 p& g0 ]* x( R
  328. void CRevAppApp::ClearAll(void)
    6 |. }( V* L6 `# }8 h! E
  329. {
    ! @5 J' A  n9 R  h2 [
  330.   LPUPDATEFILE file;+ G9 N& [* Z- I  h
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    : J" q" j( _- a3 s8 x

  332. + w2 G3 M4 f* {
  333.   if(UpdateLocal.size())* G& q! P# Z1 t# Z  F* s2 v2 H
  334.   {1 ^; l1 @4 E- N2 @( ~0 i) u, x1 y
  335.     UpdateLocal.clear();/ C( o+ w$ ?5 E# m3 {
  336.   }4 a" b( r; q$ g0 Y& p
  337.   if(UpdateFile3.size())6 c9 u7 T; P+ L) P. G! [
  338.   {  @7 W  [/ k7 ]: G* j: f7 o0 R
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* [0 c. P' K, V4 x( Z  z
  340.     {& `  Y; ~( Z8 x3 O+ b/ m
  341.       file=(*p).second;
    $ |, k- b) Q" R9 Q! t4 E& v
  342.       free(file);) n1 Q! B+ c. k  w+ d% w4 Y
  343.     }
      w0 s' q( W4 x" Z( a0 B+ l3 f
  344.     UpdateFile3.clear();
    - y  _1 I# }0 d
  345.     UpdateList3.clear();( L2 F4 _& ^& ?6 I: y3 V2 _
  346.   }& L  G7 h' `/ L$ U- [/ I" m
  347.   if(UpdateFile2.size())4 R' k: C+ y2 ]- r' I
  348.   {
    ) K9 v+ f4 J, q
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 N# V/ j' C" F. y
  350.     {* d" _* @2 l- L0 R* U* P% h* W. [
  351.       file=(*p).second;
    * M) J9 W; f& P8 `; q4 f, Q
  352.       free(file);; ^7 T8 l: ~! o$ D
  353.     }
    2 B) }# g( ?$ I# s' N+ T  X9 \
  354.     UpdateFile2.clear();
    - {3 `" G2 W  a. H6 b
  355.     UpdateList2.clear();
    . `! C* L! }5 T
  356.   }
    ! @! F2 [6 O$ U/ T
  357.   if(UpdateFile1.size())
    7 q/ y; M$ z1 w! G, g; Z) h, X; Q
  358.   {$ |- Z0 ^. \7 x4 T1 c& M9 a4 w$ s
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# H7 C# W- F* S6 c# r( I9 [
  360.     {
    + H/ o- n, w8 q
  361.       file=(*p).second;! D0 m, P; }3 {, s
  362.       free(file);
    ) O- g. J# o# E. e" e8 [
  363.     }
    7 T5 E+ a0 l- W# v  l" x3 @' r
  364.     UpdateFile1.clear();8 K5 ?6 y7 h9 O0 R
  365.     UpdateList1.clear();* j+ {0 ]8 Y1 w( i# D- C* c" n
  366.   }
      A5 l) v) O) z
  367. }  
    : J# W. v2 s8 o8 `4 x
  368.   
    . O. G+ Z' v# y
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    7 g6 d, F: U6 w% A& S% N% p, g. R7 T
  370. {, H3 S! m6 ?) u8 Q* t8 T5 ^5 U
  371.   int c;/ \2 @4 X8 s7 ]( c; \" e
  372.   LPUPDATEFILE file1,file2;
    1 X" ?. k- w. d' _2 |8 j/ V/ U
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , W9 E3 a8 L' W) u6 f, N' |/ j
  374.   std::list<CString>::iterator l;
    - d* k( v' H. y& l; I" o& r% O! ?

  375. 0 W  T0 u+ @1 h; x. ?& ?! t
  376.   UpdateLocal.clear();
    ) ~3 N  _# [. ~1 ]2 h3 }0 l9 I
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    4 C3 e' S5 b( J4 L+ ^( @- @
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    : e  C& C' R( Y. v
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);3 F) w5 p, P7 u0 }" _  y! H
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ) P1 d3 b( l. O4 ]0 V
  381.   if(UpdateFile3.size())) v& z' \: i4 L  ~5 W8 B
  382.   {
    * S, D  g. `2 _% k/ e% r
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ( `# X7 p9 c8 B# f, O
  384.     {0 v& J% N# a' F& F
  385.       file2=(LPUPDATEFILE)(*i).second;
    4 ]- X" D: _' J% O/ ?  B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " A" ]4 b1 a  b* v: H
  387.       {
    ! [8 t: @+ y# F1 C; o" k6 h
  388.         file1=(LPUPDATEFILE)(*p).second;) H- p# V9 k+ g# L
  389.         file1->vers=file2->vers;
    " ^- r! z5 k7 i
  390.       }
    & p: r4 q1 }7 ?2 U- b
  391.       else5 Z  x# G1 g& R! q+ c
  392.       {
    9 c% Q' k3 {& Y
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 Z; E! h+ I3 t+ z- K& }
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));. m* e! E1 {6 J5 N) F" r) O
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ( f, p' c3 i4 d9 n
  396.       }
    / X) L& B" w+ n" G
  397.     }
    8 f/ c! c' ]7 I- C
  398.   }% x! Z/ H7 z: c; v: a) Y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    - y) B  N5 H, K- k0 T+ N/ `5 K* l* T
  400.   {& o* ?% I/ l% I% N
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())% e5 Z: l3 V, @. W& C' w  ^
  402.     {
    ( `4 B) x3 ~2 D* B
  403.       file2=(LPUPDATEFILE)(*i).second;8 N+ \2 L6 Q8 l
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ f* ^. w# k# e( O. J& F
  405.       {
    6 B8 f3 y6 t) H* G0 V
  406.         file1=(LPUPDATEFILE)(*p).second;
    4 F. O& J+ ]1 k* U6 [7 l$ x
  407.         if(file1->vers!=file2->vers)2 v& m0 _1 _) j) [7 e
  408.         {
    - n7 E" c# Y5 P) W/ n- ^6 G
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 }- x0 n3 a. j7 Z( y; h
  410.           c++;0 @* A0 P7 K/ m! t
  411.         }
    6 c! E# c8 B1 ^5 \# P( @
  412.       }2 v. z) s. x% T
  413.       else
    / C$ B# V0 J- V3 l5 |
  414.       {* D6 _4 U2 o1 G: H& e* L: W: e
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 ]: F$ E* E( p4 P) [3 V
  416.         c++;
    . N5 ?* Q) Q& D/ Q& }5 ]* s4 K
  417.       }* x5 b' f" k/ L. C. m
  418.     }
    9 v  P  A: [" D
  419.   }
    2 A2 \2 K; r6 m6 \7 y  M
  420.   unlink(".\\DownLoad\\update.txt");
    * k6 @" D& p- f4 p6 ?* \
  421.   if(UpdateLocal.size()) return TRUE;
    % v, }. b3 B$ N6 z3 v5 b& s
  422.   else                   return FALSE;5 F* b# K6 {' B) B, b$ n( O
  423. }8 C5 s  U) j- q2 |7 v& v7 W4 c$ H

  424. & g1 |& j) r7 h) ]# ~
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    / k/ w9 n! W" d" ]" |& O: \
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    # Q  F3 M6 t3 l. U& W! T
  427.   \" O$ W/ g0 }# G% l6 t; A
  428. " Z+ V8 J5 G0 b% T8 F1 e0 R

  429. " m8 i; w& `3 w6 m, q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    . |# ~: t3 A+ v2 D
  431. {
    ' _7 A  h( S& X; r/ E* {" l
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    8 z" S8 `. T0 e( a  K! f
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & n$ K" B: R6 G0 V
  434.   {
    ) F* m/ M: s7 P/ j9 Y+ R& M
  435.     char szLanguage[50];
    5 W% p5 {4 W  A* A# E9 {
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; x: b/ [. I& o- q. O  V
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 y" d+ J4 d- v# T: p
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 I) O4 l9 u, u8 ~6 }; P; T
  439.     else                                   m_iLanguage=ENGLISH;
    8 O( H4 n, a0 ?- N* h
  440.     char szRegister[100];
    # w* G& H5 g1 c" X
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    * q; K; N( e# t' W" ]; r
  442.     strRegsName=szRegister;
    4 Q' O1 O  J- ~5 |. l
  443.     char szPatchURL[100];
    3 k2 U+ ^) ~' Z, {
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # i3 |+ a2 i% U$ p7 V* T/ U
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      R' j/ X& f# r, ^/ M/ u
  446.   }1 e; N' ]' a1 M& s
  447.   else3 P1 R# u3 Y0 @+ ~: f* g( R5 m
  448.   {
    % p7 u5 i% H1 J4 h$ r
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);! n/ m# x* S' _4 }' d
  450.     strRegsName=DEFAULT_REG_URL;
    $ n* x5 I! P% C* l4 ~# Y
  451.   }
    ; z1 x% Z. S/ m" {6 @1 w
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! d: p/ C' y, k& n' L) ^( P
  453.   {
    & i/ ]: H3 ?1 }& r1 |
  454.     char szIP[50];
    4 M$ o- h. {0 B; a1 u# y
  455.     char szDIR[300];6 V- S# U/ Z/ A) j2 Z# `7 ?4 W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))# D+ N  K$ g* n
  457.     {
    ) |9 R( h& }- t. t8 u5 h. e! A' Y% V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    7 Y6 j% d2 y- {
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    1 a+ ~/ d9 t+ a4 ]
  460.       strHostName=szIP;' y" U4 k8 r; g# r; E: Y1 |
  461.       strHostPath.Format("/%s",szDIR);
    ; j6 F, q  E3 T' B$ g
  462.     }
    4 K2 w6 O9 S8 F* n1 H; x& C+ z
  463.     else1 l! Y1 a6 o$ n- A. M
  464.     {. R# J4 A, u8 Y& z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* q0 {: O4 \, N% M
  466.       {- R2 m, ~; P& O* S
  467.         char szLanguage[50];& p! Z$ R* P7 L+ R9 U
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" D  U0 z6 r2 E* P0 @* d
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % B! w: g5 \, y% E4 }3 e
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * a! Z" ^1 _* ^1 X" x. J: s
  471.         else                                   m_iLanguage=ENGLISH;
    * m3 h. l8 m8 H' c" Y! k
  472.         char szRegister[100];. m2 ]5 ]7 Z% Y* |6 A" o
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% s8 k3 B9 U* D/ u6 T! E- {$ Z' ^* G
  474.         strRegsName=szRegister;
    4 }: s0 ~% v2 W6 d' m
  475.         char szPatchURL[100];
    ; C( T8 [# @( m, Z0 |5 l, x" g2 B
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . I2 P4 A5 o* T+ q: m2 V1 R# R
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; X0 l# A! C+ }9 N! T  R, P, B+ t
  478.       }" u, t( x4 ^9 {; M% `2 t: _
  479.       else. t, v; F/ `' H) u' q) E1 l# N* I: {
  480.       {. S0 k5 i* H; j' n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# P" w( k* p+ q
  482.         strRegsName=DEFAULT_REG_URL;  ]% d, Z5 ?: l4 I* P2 D: H
  483.       }- r2 ?: R3 K" C
  484.     }
    2 R6 D! a- M& z- F
  485.   }( E4 ~1 ~0 Q" R
  486.   return true;5 c4 U6 T' ]  b: e
  487. }
    1 J! E- e7 _; i0 A

  488. % c0 ], [+ ^, C$ w/ V
  489. #include ".\ZLib\unzip.h"  n* v3 W8 o& b5 O( \% e7 _( x
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    + F8 v0 L' ?% i7 C
  491. /////////////////////////////////////////////////////////////////////////////1 A. ?; A$ P9 i1 W/ f
  492. // CRevAppApp initialization, F3 i* \7 z' F! u: r

  493. ! f( O% R' \% ?: ~8 Y' ?
  494. BOOL CRevAppApp::InitInstance()% a! T6 k" V; X7 x8 j
  495. {
    9 }) N; Y' M+ e
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    + P+ [/ P% i+ O: ]) s
  497. 3 o7 a3 c/ m# E: |, s
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / U& E  L0 e. p" A0 e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))6 H- m" {: S0 x7 }# }" x7 x9 l
  500.   {
    # b" _8 K+ o& F: j7 U
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
      t5 K9 S5 E' g, z6 {& n
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    & [- H% ]% q/ ]! k! Z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    3 W* S& {, B9 X/ J/ ^4 v2 L
  504.     {
    ( r2 T0 B5 [6 G2 x6 @" C% E& o: \! E3 }
  505.       strcpy(szPath,szPathTarget);- C; a/ C  @6 j4 E( \
  506.       SetCurrentDirectory(szPath);% c2 E, V: A) e" F" S
  507.     }
    3 z3 |* _% C; j, b3 I1 G; P
  508.   }
    9 Q. w7 h, g" x9 c  I9 j9 e5 J
  509. #ifdef _DEBUG# L# ~' F& m3 ]4 S# l0 Y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( [% R9 a5 g2 K3 @: q) c" h* ^
  511. #else/ _6 ^% J# q( v- {) m- [- q% w
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 X! K# o5 i0 \+ I* \
  513. #endif
    . J& j( h6 Y" ?) a6 }9 q
  514.   {
    0 L7 u, ~7 d9 P/ z+ V
  515.     char tempFileName[MAX_PATH];$ ?9 W  r- W% g% N! F
  516.     strcpy(tempFileName,szPathSource);! d9 N/ t+ P+ R. P, y6 m
  517.     tempFileName[strlen(szPathSource)-12]=0;! ]9 A4 {/ d/ Y) Q: Y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    % Z# X, C* s' }0 D" t& ~
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ( `) e6 n+ u3 [6 K1 i* M2 V, a9 U4 B
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);1 p3 n; M; T7 O2 A
  521.     return TRUE;4 Y% N" `$ n5 W( h# U$ D0 V: R. Q
  522.   }9 e: V: K( `9 V+ S9 _
  523.   // Nuke 0118: Delete run.exe
    $ ?& Y& P* C" j2 h
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    6 Q! \8 |/ _* a3 X/ }) C
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    8 _/ N. I9 g4 L! x/ c
  526.   if(!ReadCfgFile("Config.ini"))
    6 o2 u1 \$ B) e. S
  527.   {
    2 F0 k2 O. v  k- R
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);% J7 M7 J$ u$ X% E5 ^
  529.     return TRUE;
    4 P  q' t+ q* x' A% r- G
  530.   }# y' y; l% Y8 \7 n
  531.   HANDLE mutex;
    3 v2 s9 b; m6 n* g. Y, h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))& i  |0 W( m2 l' R! R  q& B( o
  533.   {8 n, S) A5 m/ P# l$ X$ h9 l
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ( ?& D5 X1 {* B; z
  535.     {$ P' N( Q; j3 p
  536.       CloseHandle(mutex);' W0 x$ |( T- f3 d
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " y5 G+ x, v5 B: o8 f  H' L4 L
  538.       return TRUE;
    ! h% r# O6 w, y4 L
  539.     }
    2 v( M2 T8 H3 s8 r9 P
  540.   }  
    2 m  V8 w4 O8 \! s' l1 S# B
  541.   CloseHandle(mutex);
    5 p6 ~- Y3 i. j5 j1 U
  542. & L8 e( Y; G, S0 g
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);# J/ m7 r3 l3 L7 a6 U; g2 ^

  544. 0 ~% ~3 m7 i$ Z) c+ t
  545.         AfxEnableControlContainer();/ g5 v- }2 a$ _- w
  546. % J0 C' {$ O* J, C- y/ O- |
  547.   bCanUpdate=FALSE;
    . |" l6 N- k9 g  Y4 d
  548.   dwStartUpSteps=1;7 L" M% `3 d3 i
  549.   dwProgramState=AP_NOTHING;
    9 Y3 S* d/ X/ u0 |
  550. " N9 o1 K; Y2 a# I
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);& E$ F( S" }3 R" |" p( a/ Z: w5 @* o

  552. 4 c6 [3 a, m) W- V
  553.         // Standard initialization
    ! N0 r3 j1 \+ p; }- Q) L+ J! b$ T
  554.         // If you are not using these features and wish to reduce the size
    - A( u5 H2 T; W9 R# d. U7 {
  555.         //  of your final executable, you should remove from the following4 k6 s" \7 ?  U
  556.         //  the specific initialization routines you do not need.9 j' G7 g, S- N

  557. / B3 J) O/ p4 i3 i/ J
  558. #ifdef _AFXDLL" |8 O$ d' s9 h3 C
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL$ S  S4 Q% f; N/ m- y" k
  560. #else
    + p7 p" P0 s& _8 w
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    . t, K3 x$ r/ f
  562. #endif* S: q. ?" f0 ?+ O

  563. ( b7 U" p7 f% q1 z9 p0 Z6 W# ]2 T
  564.   dlg=new CRevAppDlg;
    " z/ j7 o+ |7 X, ?$ X6 C
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    & \- U% `3 o. z' W) G) d& ?1 H
  566.   dlg->ShowWindow(SW_SHOWNORMAL);8 D3 z( M7 O+ {1 G4 y: H0 x
  567.   m_pMainWnd=dlg;" D5 f& V4 ?# o1 b, q! O( Y

  568. 1 }* Q4 {& P3 I0 B3 Z" q0 Q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * u& M, E% ^) g. F2 a; @+ \

  570. 0 Z- N8 h% i: I2 Z- V; v& y
  571. //  GdiplusStartupInput gdiplusStartupInput;
    9 r- v4 w( {/ {; g6 y$ ^) a
  572. //  ULONG_PTR gdiplusToken;* a# J9 h7 A0 U/ g2 _" N4 m
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);8 |$ p' N. g0 O6 v0 O# m) ^

  574. * U$ s! V$ W. q
  575. //        CRevAppDlg dlg;( w* O. [! g& q6 Y/ |( Q
  576. //        int nResponse = dlg.DoModal();
    % u9 _, ?2 v- U, {' \  K
  577. //        if (nResponse == IDOK)
    * c; ?0 b4 @" l
  578. //        {
    ) M: B! A/ C- {5 u1 Y4 G+ n
  579. //                // TODO: Place code here to handle when the dialog is
    3 @6 t' Z* ?- I( k# ^4 q9 J$ D
  580. //                //  dismissed with OK; E& v/ _0 e7 o$ P- f
  581. //        }
    8 F8 |6 `* G+ u4 B: N
  582. //        else if (nResponse == IDCANCEL)$ K+ }  S- B, T! E4 l1 S* B
  583. //        {; `: D9 f8 r, O' ~
  584. //                // TODO: Place code here to handle when the dialog is( B, G7 A" w: X% ^4 f) L7 f
  585. //                //  dismissed with Cancel) K) r: @2 B/ p% A3 Z6 ?+ _8 [
  586. //        }
    ' \' J' {+ S# H
  587. 2 m6 b% o- [0 _" X) c4 D' [
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    : y; x1 g& M! S' R1 [8 T
  589.         //  application, rather than start the application's message pump./ I. @$ i$ `* D) E% Y  s- x
  590.         return TRUE;
    , ?4 B- _% A  E3 K5 ^* S  c
  591. }% a+ a9 \, V6 n

  592. 7 ]1 s3 M  S3 K$ x! j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)9 C2 L: P  G  G5 P% K# _5 b7 z$ Y
  594. {4 Y2 p$ M1 Y! ]3 c
  595.   int i;5 F# t" `9 T4 M2 P; U
  596.   char *szRet;
    ) v1 L8 K8 O( ^" Y4 v

  597. 6 l. U: |4 {" g" a+ R
  598.   if(pSource) { itoken=0; sztoken=pSource; }" V+ }3 b7 V2 ^8 z+ u
  599.   if(sztoken)
    4 N6 W) W8 C8 ]
  600.   {. p: d9 c+ _3 _8 b9 V0 K: t
  601.     szRet=&sztoken[itoken];
    ! p1 [$ T+ l! L. `
  602.     while(sztoken[itoken])
    ; ?- J, l& A5 m& @5 u% b6 @. _
  603.     {! S7 T( m* ]' n' k
  604.       for(i=0;i<(int)strlen(token);i++)7 m, p3 S! ^- G/ [
  605.       {
    ( Y! \0 Z1 l( E1 E
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    : k0 |9 W6 w7 F0 h) I
  607.         {2 q7 M3 f7 p8 }
  608.           sztoken[itoken++]=0;
    , [* t; T$ I2 r$ W! ]7 `
  609.           sztoken[itoken++]=0;; \% N: D8 `7 Q! `* j2 @  {) U7 l
  610.           return szRet;
    1 F4 }5 ?$ |: K( ^3 I* b; ?
  611.         }( N: u* `% l2 v4 {
  612.       }3 X! A% M  E0 ]1 B
  613.       itoken++;
    3 l- z4 o- o6 e/ ]' G! X2 {$ L2 ~: Z
  614.     }
    / c( e- U+ n( I) v) ~7 h
  615.   }
    $ H4 m- A2 C7 K" O' ]1 `" R; M
  616.   return NULL;5 [6 g  R; Z% r
  617. }
    / ?5 x. g6 r) }3 m

  618. : D6 O( `" ~4 k2 e* a: v4 _4 _. t
  619. void ProcessProc(long Total,long Current), i2 M2 c3 S; @! D8 }
  620. {# h. j' `1 N5 e9 a
  621.         MSG msg;& h0 w5 P5 G: d+ u4 u3 u
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " L1 \# ]* |! |, H: ?0 S7 F
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    8 c# W7 E9 r* Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 W7 N: Q' l( F: R! U3 Q, L8 I" w
  625.         {: `4 h" D8 U  ^; n% M- b+ V: E  \
  626.                 if(!GetMessage(&msg,NULL,0,0))) q+ W* e! W( ?+ H8 y
  627.                 {
    # z! q* n- t; r' u) _
  628.                         return;6 p% P1 T+ ?9 O- [4 Z9 l
  629.                 }
    - D1 c' n* T" {( x) K7 O
  630.                 TranslateMessage(&msg);
      m1 z0 i0 u9 I, @6 y& R
  631.                 DispatchMessage(&msg);
    + a( c& u+ Q2 U' `3 a7 `* u
  632.         }       
    ; s- y# W* |" Q/ E  u7 c& ~9 t# I
  633. }
    , m2 x7 y9 N7 |5 S0 r1 G
  634. ) D6 F' O$ [7 C" ?% e
  635. BOOL bFirstChar=TRUE;
    . }* U3 m. R: E

  636. " E. u4 u/ g! n+ ]8 J; C& V$ I" I
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    * S. A; ~; a/ s
  638. {
    + o: F# s6 `1 Q/ ], G( H& j; E- y, q
  639.         // TODO: Add your specialized code here and/or call the base class9 i* a  l  F2 x$ M
  640.   switch(dwProgramState)
    3 ^1 Q# I+ b& p6 v, T
  641.   {
    - I8 x, K+ u! [2 T
  642.   case AP_NOTHING:
    / p  Y" `0 c) v1 b( p7 ~; T" k
  643.     switch(dwStartUpSteps)" o6 T1 ~0 x& }( H
  644.     {
    ; l+ g% G) i5 v: d' c% m
  645.     case 1:
    4 [- h: b, P6 P6 C% M
  646.       {8 c; T+ }$ l9 k9 z  M* Y. v
  647.         int i;
    8 C9 ^! H: c) V# v$ h, U; v# A" |( O* I
  648.         CDC *pCDC=dlg->GetDC();. z+ I3 S7 Z; b0 O# y' ]' A
  649.         HDC hdcwnd=pCDC->m_hDC;& h2 T1 ^; F6 l  @6 R6 ?
  650. //        Graphics graphics(hdcwnd);9 L/ `4 \! ^! S' O8 F
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    5 }5 b/ N+ k) w
  652. //        INT iWidth=bitmap.GetWidth();8 o  R7 |4 G9 w3 {5 ^( N
  653. //        INT iHeight=bitmap.GetHeight();
    " X" P* w3 A3 V* ^! ?* Y! X
  654. //        Color color,colorTemp;
    5 E) C- A' E# F1 o- j+ W
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    , Y9 W: `  w3 K& h2 g
  656. //        {6 J; Z$ k% j( N- Q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++): u0 R- r6 ]/ ?3 N- r' `8 t6 a
  658. //          {% c: ]1 Q! J4 c& [) L, P
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 N5 u7 a( w% S7 N1 {
  660. //            colorTemp.SetValue(color.MakeARGB(/ q# ]2 h1 e; s2 p/ G* o
  661. //              (BYTE)(255*iColumn/iWidth),8 B4 ^0 ?) P8 S0 V4 w5 z6 C
  662. //              color.GetRed(),
    . @; T+ C" }  R! h7 F9 [1 l1 B  l
  663. //              color.GetGreen(),
    ) M7 q- H+ v4 ~
  664. //              color.GetBlue()));
    ' Q. Q) j$ G: |$ r2 ?
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);9 k* U: d& Q. m  ]% I- e
  666. //          }+ W+ V* }5 T8 u$ }+ q
  667. //        }, E! A1 m8 a+ [. B. }2 Z! d  t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);0 D0 p5 A2 L3 @1 j; M( O
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- w9 n, i& B6 {7 g/ T5 J
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    1 @. i# q( `, Q+ q& P4 M
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* q0 J  X' X  m8 q! y; w
  672.         for(i=0;i<240;i+=8)% y1 J9 u7 j) t$ b
  673.         {
    , h8 @" R: `7 x9 p5 f  m
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 D, H1 B& S9 @& S
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. a- B4 ~5 \" E; k, N' F7 M
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    , _2 G) [+ Q7 n( X; s
  677.           Sleep(33);
    ; F  d; f; p6 o) T, t: m8 i% K
  678.         }
    0 _( S$ m" A% d
  679.         Sleep(1000);
    # T2 P0 T: ^6 t- C$ C7 l
  680.         for(i=240;i>0;i-=8)
    9 J* a0 h- S7 o
  681.         {
    9 F; \0 s; J% u( W. F
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , Z( @% s5 I1 Q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " R' u' v! M7 ^+ H7 [% P
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 r, }! ^, W; C4 M
  685.           Sleep(33);% k) m) m- b/ _  A
  686.         }
    / e/ |- b6 F# p8 f" B7 ?. G
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);& ~: _. E4 c) B& J0 p
  688.         dlg->ReleaseDC(pCDC);  V8 e+ |4 W4 l" G" o. R: S
  689.         DeleteDC(hdctar);
    - I5 ^7 L4 e# r/ b) N
  690.         DeleteDC(hdcsrc);2 d+ N4 e$ W8 ~$ r7 {
  691.         DeleteDC(hdcorg);
    " I' T6 ?3 {: A
  692.       }
    + A( |8 F: Z7 U9 U6 Y' G# A! `
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);/ }  o9 c" M, P- i( ~
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");3 D: |0 A4 w6 c( n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");; f5 A' k. }  J) p7 u
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    " ^$ \8 `$ \0 e; K/ _
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ V. ?1 Z9 h4 b/ ?! N
  698.       if(!Dn.Connected())
    & C4 \. @. R2 d2 ?+ k, \2 U
  699.       {
    + Y$ c8 f( T7 S) w! }
  700.         dwTotalFiles=1;+ g' D1 Q$ F! n4 m0 X
  701.         dwDownLoaded=0;
    " a& T5 |4 P6 J6 ^5 w
  702.         bSilentStep=TRUE;
    ; b* M! s; f7 T) ~
  703.         bCompressed=FALSE;
    " {9 _3 H( A3 _. L* x5 y6 |
  704.         strExtLocal.Empty();, W! k0 \! L8 T- z
  705.         strFullName="readme.txt";+ I& m( S; N# h- ]' h& B/ e1 U  G1 |
  706.         dwProgramState=AP_CONNECT;
    4 ?% K- f1 C; @
  707.       }
    " B( ?3 D/ i% h9 _% P8 H: R
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();6 _: Q$ p# Q3 X: g
  709.       dwStartUpSteps=2;
    2 G4 k; ~# g8 a$ u. w
  710.       break;# I; d# c% L3 N
  711.     case 2:. R* ^. a/ K# v0 y- h$ G
  712.       {
    $ ?2 s# _1 l, f9 S' `# {
  713.         int iEOF;- h7 Q0 H. P% N. a
  714.         FILE *fp;
      e" F- v! y  W0 c( `) [
  715.         char szString[512];
    * v' S/ N# M6 X# J9 R* x
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");  W) b6 [: \: C$ ^: C& v
  717.         if(fp)1 V5 |9 V7 ?& M! k5 x
  718.         {
    1 n! ~4 l" W% I' s; q% n
  719.           do
    3 S" i/ K" A" g' {. u
  720.           {$ P/ z, h1 ~5 n& A' c( W9 k
  721.             iEOF=fscanf(fp,"%s",szString);
    ) H, b. b" o* e5 b# D) j, c" Q2 W
  722.             if(strlen(szString))2 l' z% d" [. B: a5 q8 G. ^) K
  723.             {3 I$ k7 I1 M& S5 c3 s2 {
  724.               if(bFirstChar). U. D- w  E" }
  725.               {  H, e- u9 Y/ e$ U
  726.                 bFirstChar=FALSE;8 o# K. l0 U' ~& }
  727.                 bConnectIsBig5=FALSE;3 E7 M/ ^1 X2 q7 ]  c9 S
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    6 S2 j. h2 _8 q/ |3 G
  729.               }
    5 d+ s3 J, I  w9 u$ N
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 |6 C2 O0 J7 Q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    9 z' p4 b& }% o1 d$ z
  732.               dlg->m_ListText.AddString(szString);
    7 V$ y2 b/ Y' ?  F% \2 t, m
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - m; w. e( U3 G. @7 K+ ]6 s) H! ^
  734.               *szString=0;
    + I. }" Y8 {8 P# u5 B' l, Z
  735.             }
    1 D7 T, ?8 s. ^0 ?
  736.           } while(iEOF!=EOF);
      L' H( t7 k6 t# S6 O; i, l
  737.           fclose(fp);
    # Z. ~. C9 p+ X! W5 s
  738.           unlink(".\\DownLoad\\readme.txt");$ E, B  e, K/ [8 I6 I$ l( A
  739.           dwStartUpSteps=3;
    7 T3 h  W9 }7 l- [& F4 f
  740.         }
    * ~& p: \7 c9 E7 V, M+ T/ y; P
  741.       }5 p3 h+ f! ]0 P9 h& ^0 @
  742.       break;" i9 _# l$ t- \# X2 d' H
  743.     case 3:8 i% `. }, m6 q2 _3 o4 z9 G$ X
  744.       if(!Dn.Connected())
    9 s9 G. o) n/ q3 P$ ]: E
  745.       {% f" C0 L8 k* Y$ j
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);! L( f% z* ?1 \; k$ S
  747.         dwTotalFiles=1;
    ) f1 b* q2 |" h3 q; L
  748.         dwDownLoaded=0;. R% i& {8 e: P0 [& B; r
  749.         bSilentStep=TRUE;6 S6 X. d6 G& v0 a
  750.         bCompressed=FALSE;
    " H# S$ M5 X7 z% z
  751.         strExtLocal.Empty();, {. z4 R$ E8 B! [& y# U! Z
  752.         strFullName="checkversion.txt";$ M8 o; h; W( A
  753.         dwProgramState=AP_CONNECT;: @$ Z7 @( |6 [5 F" O4 s: W
  754.       }5 M  r; R: v1 a+ j
  755.       dwStartUpSteps=4;- p+ E5 R; l" h: o% a7 ?
  756.       break;
    3 b) n6 _9 [5 s  T. e' d9 }1 ]( c
  757.     case 4:
    % V& Z! o" @1 c% C# r. h9 g
  758.       {
    # F" `; H% w6 P( ^: {* u
  759.         FILE *fp;& ~+ s, \0 S8 N* x6 {1 g
  760.         char szString1[128];
    8 d+ ]3 r+ M" T+ t7 n9 p
  761.         char szString2[128];
    8 y, k+ `- l" b( Q2 E, F; D5 b' U
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    % D8 ^! J4 ~- D
  763.         if(fp)7 j$ L3 f5 m" J! ~* x5 O3 q6 y
  764.         {
    & @# t( }( r, b( N9 C
  765.           fscanf(fp,"%s",szString1);6 B! b2 u" b  a: P& r/ n, d2 M
  766.           fclose(fp);& O  b% ~1 j* p6 }1 r& c
  767.           fCheckVersion=atof(szString1);* j/ L! ]0 u& a) |  }- @
  768.           fp=fopen(".\\checkversion.dat","r");
    + I4 F0 g2 B# D
  769.           if(fp)  U! ]( J! N* f& n  b
  770.           {
    ! ~  m/ ~3 X' {! {
  771.             fscanf(fp,"%s",szString2);% x/ K  {% u/ C& ?" t  W; B- l+ }( H
  772.             fclose(fp);; V2 f1 ?& Z& y" E5 U3 J  y6 g
  773.             if(atof(szString1)!=atof(szString2))1 l' e4 w' t: o/ i* C" e" I
  774.             {% b( v3 v- ^9 t4 R- k. y$ H* W. {
  775.               if(!Dn.Connected())
    - b6 h* a: b# J' b
  776.               {
    0 g2 d2 _0 W6 Y: J$ \' g
  777.                 bFirstUpdate=TRUE;3 A* |+ x( ~9 G) C0 \- u( G
  778.                 dwTotalFiles=1;1 `9 c+ y. {# R2 I" R6 F
  779.                 dwDownLoaded=0;+ ?( W* H  f2 m- h7 n# ~% }
  780.                 bSilentStep=FALSE;
    ' @& `) B  v$ E3 G7 R
  781.                 bCompressed=TRUE;
    2 j/ q. f! ~. l
  782.                 strExtLocal=".\\DownLoad\";
    / X' Y! i1 V. w0 {
  783.                 strFullName="update.txt";
    - P) S1 A8 z3 k0 r  V# c
  784.                 dwProgramState=AP_CONNECT;
    : G- \8 T7 m  o
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) ~7 B3 q. y+ c; V  }
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ e: z- k! n& u) c' y3 S' s
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : X2 Y9 o# R; n! V5 ^
  788. # x  D$ g: L9 z' `2 G% J7 t
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& V* k/ W4 z1 [. @
  790.                 unlink(".\\DownLoad\\checkversion.txt");0 W0 {' X% f- R. P4 e/ y) M! i  F7 ^
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)( P. @! y# W& S5 k" s* T) p
  792.                 {
    2 k: a. f9 v. p, ~6 q1 A4 E" c0 ]3 C
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    9 K4 h6 X# [2 u' x# }0 r9 `3 T
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    4 {; J9 P" p" _  i
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");+ |+ `( l$ D" Q" _8 v. q5 Q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 G$ }( X3 ?. b4 z

  797. + O6 ^. J# A" u. X( s% |
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ {# x& A& W) t2 M1 ?6 R
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ e% c, \/ ~' X  \: J% b
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 d% P$ R& d8 N0 Y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ D. p+ m0 s2 d& `  N% A2 j
  802.                 }3 I5 A9 c( X5 i, ?3 d5 ]
  803.                 dwStartUpSteps=5;- v% a( {1 }/ ]/ M2 }) T6 d" f& O# _# s
  804.               }
    $ G6 h, U$ |+ ?/ R- N/ m- V
  805.             }
    . I6 h& \. _/ v: S$ c
  806.             else4 w8 i  X. l" Q5 p1 g
  807.             {5 X7 X  s$ x/ Q; r# x, Z7 A
  808.               unlink(".\\DownLoad\\checkversion.txt");( ?) Y9 ~- f5 \, H! \: c& E! `! n, |
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' c: C* W. r, C1 R( q9 z: X0 `
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" f, C0 m$ G4 w& i9 M
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" n  J. [, k$ P7 q4 o, i
  812. $ R( A% n3 M: ?+ V9 i( l6 W: x
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * w* e9 l% g7 p" f! p
  814.               dwStartUpSteps=99;
    7 a- ^% O1 ^; F; C- ]) f
  815.               bFinishUpdated=TRUE;9 L1 K1 M; ?: i: X, g
  816.               bCanUpdate=TRUE;" D, a: v- O- J/ U
  817.             }$ I: `) @) N! _; x( ]0 X1 ~5 F* C6 X
  818.           }; F/ O" D7 u+ A
  819.           else# ^. g, }8 J# o5 t; D. F
  820.           {
    " m3 Q) Z  L! s3 K
  821.             if(!Dn.Connected())
    5 m7 S6 O& r& P( a- [& i1 H$ g
  822.             {9 b1 K  G2 V8 d7 I/ @0 |
  823.               bFirstUpdate=TRUE;
    - ^) U8 y* C2 o# J* L
  824.               dwTotalFiles=1;; `( p% n$ U3 E# T/ m
  825.               dwDownLoaded=0;
    # r* z( C: A  W* X' U1 s
  826.               bSilentStep=FALSE;
    ! C  g- K6 b( N- d
  827.               bCompressed=TRUE;
    ' Y+ }. |+ K, v0 j3 W5 D5 u
  828.               strExtLocal=".\\DownLoad\";- h4 P% u! Q5 U7 ?8 U
  829.               strFullName="update.txt";
    ' U( ^! u: O1 E  D. `) n
  830.               dwProgramState=AP_CONNECT;
    : t! v% ^& |/ i! P1 i# o7 b
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - L. B& h4 V7 z5 f
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; p+ r' h+ y! f" b  {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");7 m( |( f: G: i# n7 D
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" O0 U1 u( a( [- @9 z% B5 @  [3 T! A
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 q; C5 r9 j4 u
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)  p' N7 n* E: R% @$ r
  837.               {. D: k# e; c9 a0 ^  N
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");) T9 E, O6 F6 M, c1 |3 {  z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");, u" [# L5 \4 T
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");: u0 X( N, Y0 _0 r0 n7 p
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ w, |% i& w# b& V7 m8 N
  842.                 - V- x1 ^  V5 N3 g
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 n; [, T4 y+ K% }
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& R7 M2 u  @1 u( [( F2 Y: p& U$ T5 M) U
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");; I2 ]7 ~  Q! U3 {
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: X1 A7 [1 v  I5 }7 y0 f$ @6 a
  847.               }
    ; n& g; T. [& M  m1 E
  848.               dwStartUpSteps=5;
    1 y( w; U& M5 H# r
  849.             }
      |, Q/ f3 F# x+ W
  850.           }
    & J+ G( L3 H5 I
  851.         }8 }# j1 {- K3 r% h  C2 o: X( g
  852.         else
    & J2 b! N' t4 e9 @- {. \
  853.         {7 i: b5 ~; _4 A2 s
  854.           dwStartUpSteps=3;
    1 g# l; B/ _, w" K
  855.         }
    & k8 f4 |& t( o( _" f. e& Y
  856.       }
    - l# P# I& X8 r9 x6 T5 c2 T
  857.       break;, C1 n2 u0 Q, Q. \, n1 K
  858.     case 5:# ~+ {: A6 w: p; g  n" ^( S
  859.       {
    7 n. s2 M! V! @; l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)% P( m) m* m, L. ^% t% ~
  861.         {9 Z! \" k" {+ T; ?0 I* N
  862.           int opt_overwrite=1;
    " T$ d1 W1 Y0 `
  863.           int opt_do_extract_withoutpath=0;$ {7 {9 ?! `+ h3 e
  864.           unzFile uf=NULL;. G' k: \5 e) V% T! ]6 [1 v

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-1 14:50

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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