找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
1 z( \( g5 j7 Y* R4 o) s$ p
  1. / RevApp.cpp : Defines the class behaviors for the application.- C9 z1 M( i% `/ R; i1 d( C- \3 }
  2. //0 I2 z; `, n) f

  3. ! d  n3 c! [+ C
  4. #include "stdafx.h"7 M. T# D7 m' L6 o

  5.   a' C& Z9 S4 b) _3 }, L$ |4 K, ^- @
  6. //#define UNICODE
    , F4 ^! G8 a' y$ f7 s! b" a
  7. //#include <gdiplus.h>" A- ^+ ]- o! O! u+ e
  8. //using namespace Gdiplus;
    - j; z$ Q1 d. M& L

  9. & R" Z) u( u+ w9 k7 J3 c% k% T
  10. #include "RevApp.h"2 n* _+ S1 R2 W: _
  11. #include "RevAppDlg.h"
    . E2 N) z( E, Q# \, P
  12. , D9 m  s' h, U
  13. #pragma warning(disable:4786)$ U  H# D. ?4 L3 k' P
  14. #include <map>
    / T9 Z# S" j  c" @7 x! S( D" m# |* @
  15. #include <list># ~+ D1 ^7 U  y3 G
  16. #include <direct.h>
    + B4 b3 o* N9 A) Z+ e/ C
  17. / j+ Q& p7 |9 L2 F! T
  18. #ifdef _DEBUG
    7 y7 m6 h5 o0 W3 q% a3 j) y
  19. #define new DEBUG_NEW$ m% M1 K4 Y0 I4 O
  20. #undef THIS_FILE
    ( T5 f+ S! S# t* _5 v0 w, T4 h
  21. static char THIS_FILE[] = __FILE__;" d. I& u6 d2 P
  22. #endif  I. ]/ m8 ]- O- q3 J2 e, ^5 t4 |' _
  23. #include "SkinResDef.h"
    % l$ Q; d, w9 @1 Y/ N/ }6 Q$ \. J
  24. #include "ChangeBG.h"6 U& @7 N2 i3 p& Z0 |
  25. #include "AFXINET.H"- {. W3 s1 [/ `+ {% v% Y

  26. 4 {! s3 \' `$ i$ N5 H  Q! _
  27. #define TRADITIONAL_CHINESE 0/ k3 Z  v4 j& N0 z: X
  28. #define SIMPLIFY_CHINESE 1
    : l4 N0 e0 S& A2 w
  29. #define ENGLISH 21 R6 B: j/ [" r) ~9 |  c
  30. int m_iLanguage = ENGLISH;9 j7 S# D2 s1 \1 _! d, j8 T
  31. /////////////////////////////////////////////////////////////////////////////
    # o4 L, b3 T/ y6 w. n+ d1 ^
  32. // CRevAppApp
    ( {0 |- b8 c* ?9 ]; i7 a
  33. + m+ \: \. W$ P
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    % ?: Y8 m9 h. C* Z) U/ L$ u) n
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    " T8 i7 X1 y, k
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.6 F2 y2 y: o0 T- x
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    " P& Z; ^6 h2 H( j9 g0 B
  38.         //}}AFX_MSG4 h5 ?' Q8 M1 j) b+ l* N
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ; n& s5 R1 ^+ u
  40. END_MESSAGE_MAP()
    3 z' y6 S$ }0 w/ }9 q
  41. ' E' e, i( E4 c' `# ]* m! t5 z6 T! K. Z
  42. /////////////////////////////////////////////////////////////////////////////+ X1 m( K& E" x$ v+ ?# `0 G9 R
  43. // CRevAppApp construction
    4 w' a4 m( F, p( p
  44. - F* d1 R9 F( h" P# ?' b
  45. CRevAppApp::CRevAppApp()# B2 m5 g# E/ J0 U+ @4 L
  46. {! U5 Z' S- h1 G+ g6 N. ^4 |, U) Q
  47.         // TODO: add construction code here,
    ( K- |" T" Z4 t8 A, B
  48.         // Place all significant initialization in InitInstance, Q  n) E6 e- u
  49.   bDisplayIsBig5=FALSE;/ S. s3 C, c8 P* N% h! ~! X
  50.   bRestartUpdater=FALSE;' p7 S$ I* \/ j$ }/ k
  51.   bFinishUpdated=FALSE;
    ' ?% o4 |6 R% D5 {) V& w
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ) X0 R) N; [% G/ k  H/ }
  53.   InitChangeDataBig52GBKS();; c  {2 _% t+ @$ v" r) C, u: q7 K
  54.   InitChangeDataGBKS2Big5();. O8 w8 _. T% C  Q3 ~  L
  55.         //+ ^% }; v3 d  M9 W0 m6 P
  56.         bClickRunExe = FALSE;
    3 h# `2 a! z. ~, c( r# G% O  ^
  57.         //4 u: s# k& l" F3 j( e8 ^
  58. }
    , G$ x- }8 T% w5 p' i# ]
  59.   [. o1 N2 G' J" @& \% T
  60. CRevAppApp::~CRevAppApp()5 g0 L& p1 t) t5 h# i9 B+ C
  61. {
    : u0 d- M* `& I8 S7 u* \. X" O9 H
  62.         // TODO: add construction code here,
    ! C* V( @; G9 R
  63.         // Place all significant initialization in InitInstance9 X' W& K0 g! D7 r
  64.   EndChangeData();8 a/ F8 f" q5 ~2 N% \/ C
  65. }
    % m  X' S: x' f# ?
  66. 3 [9 _+ A2 b& ~4 c) x
  67. /////////////////////////////////////////////////////////////////////////////
      Y: W" f: H6 J) ?! p
  68. // The one and only CRevAppApp object
    ! W) D0 s$ L$ D7 b% s$ n; P& K

  69. 0 K' ]. X4 v7 O# w7 s; @# V
  70. CRevAppApp theApp;* X* r2 C! O0 z& l" p

  71.   I1 M) S0 w2 s' r  O1 R
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    $ t; V3 l# s% i5 t* S
  73. {# S6 w/ R6 I* z+ }5 B. }* _" l
  74.   int iEOF=0;) h8 A$ n& I# {  J9 _0 N$ ~1 V
  75.   char szTempName[MAX_PATH];+ x5 ?* f- T. K8 k$ Y9 s2 R
  76.   *szFileName=0;! V1 e" t9 C2 d; D3 ~  A! g, o. r
  77.   iEOF=fscanf(fp,"%s",szTempName);# N/ y; j# E  r% Z8 F6 B5 k
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')( ?# P# x3 l- N: f/ b8 s; I
  79.   {
    8 }6 b- T" I! [3 c2 y6 `+ B- ^
  80.     strcpy(szFileName,&szTempName[1]);
      r4 d! f/ p! V) j
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & a4 X% G& o( j% D- b$ Y) \
  82.     {& U$ [: Z1 U. i/ W* P
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & K) U9 ]! R$ T! c
  84.       strcat(szFileName," ");: Z0 ^# ^2 Q# t8 o/ i5 g' G
  85.       strcat(szFileName,szTempName);: W* h0 k3 O" P0 b
  86.     }
    6 I8 L. x8 V2 z( h. E  X
  87.     if(strlen(szFileName)>=1)
    ! \$ H/ F. h; h# M: R5 |
  88.     {, k3 n7 x- Z: }( W& h8 n' S; A8 a
  89.       szFileName[strlen(szFileName)-1]=0;
    3 [* U* o- V, m4 H8 I6 q* v2 u; Y
  90.     }: }. G. \5 v0 B
  91.   }
    ; {7 p/ N  K: z
  92.   return szFileName;
    ; }. f7 u2 V5 ]5 P6 L! I& d
  93. }
    ! A# h" z+ d' O( j7 f
  94. " X8 o! w! T4 j
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    , e; [* e: t, n$ [# |
  96. {! p/ Y4 ^9 x+ N' A, `, p; @& e
  97.   FILE *fp;
    5 T1 b7 }# r2 h0 ?" Y: }' {
  98.   char *key=NULL;
    6 j) K) d/ q- I* w( ]" N6 g0 ^* m& K
  99.   char version[MAX_PATH];
    ) y0 F8 b% r" P) m5 f
  100.   LPUPDATEFILE file,olds;3 ?) Q* e/ |1 _9 X7 ^
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 N: `# I3 \+ ~  L) u/ ]  ]* U
  102. ; l1 ^* a5 d) z
  103.   UpdateList.clear();0 b) z# m! M0 \' ~4 k
  104.   UpdateFile.clear();
    9 k5 e. k: b' c  Q% ~, m: t  [
  105.   if(GetFileAttributes(filename)==-1) return false;3 k" V7 J( ?3 b
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( i  d( X$ h" _# P
  107.   fscanf(fp,"%s",version);
    3 F" ]: A& h- m
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }" t% @1 a( F7 P6 u
  109.   while(fscanf(fp,"%s",version)!=EOF)
    8 p# V2 i! V4 T; m/ D6 i8 `
  110.   {
    3 i; t  }4 S# Q; b  R# v
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      w2 e& [& z& b. Q& X1 q! I* G
  112.     fscanf(fp,"%s",file->path);
    * f1 I( a+ [* x7 O
  113.     ReadFileNames(fp,file->file);
    5 W8 J, ~% }2 w" b2 D8 A
  114.     strcpy(file->full,".");
    7 h( W% G  Z" h2 @
  115.     strcat(file->full,file->path);
    $ A* V, |0 B, l2 b( w
  116.     strcat(file->full,file->file);
    $ a# a- n9 r! ~; A% T/ S
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    8 B& u- g1 \/ o1 g( ^: b; H% ~+ Z
  118.     {, x5 e/ R" C) V/ C6 A
  119.       file->vers=(float)atof(version);  B8 L, V. M" q; m) f5 Q6 o/ o# i
  120.       UpdateList.push_back(file->full);9 L. j' j! [9 \8 x3 N% `' O. E
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    6 Y, V6 a  V7 c/ C% _4 p! e) Y
  122.     }+ A- w; ~$ p" @& G6 o
  123.     else
    1 M/ k) _0 `+ [  q
  124.     {
    + Q4 a' K  a& d" r$ N
  125.       olds=(*p).second;
    7 l$ x" s1 n3 \( M
  126.       if(olds->vers<(float)atof(version))
    " Y8 u# W8 K8 d/ g
  127.       {
    / O4 U" k# O) \2 ~$ q1 i6 c* }
  128.         olds->vers=(float)atof(version);
    & m, a" i/ Z2 N1 {
  129.       }' ]' C- e# q) M* A  v8 G
  130.       free(file);
    % y2 P) I0 m/ [  t7 v
  131.     }
    5 ?9 C. C; J2 R' m. u1 {
  132.   }
    8 P) g! I  H1 w
  133.   fclose(fp);
    + p, K6 D( [* R( B4 l  k& P
  134.   return true;
    % h$ Q! i' D; O# }* d1 O7 p* g
  135. }6 `# w) e2 u( j* y; a1 w

  136.   B7 X3 `6 ^7 O, W3 J
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath). q' @1 x" \$ X: x
  138. {
    1 M) X. d' v/ f0 G3 H/ o
  139.   TCHAR  szFull[MAX_PATH];
    % D- m( T; ?7 S% [8 y0 ]4 ~. M- m. V
  140.   TCHAR *token,*inter;# s! v1 f' f) j) V" ^& ~# C
  141.   *szPath=0;
    2 {2 B% R" q/ t' C" r, V9 A
  142.   strcpy(szFull,szFullPath);
    ) P# C, V: K4 c& O+ m: N
  143.   token=strtok(szFull,"\\/");
    / n3 [4 p1 g9 r% f  o" c8 [4 C( s
  144.   inter=token;* M8 ~" E1 L! T" R
  145.   while(token=strtok(NULL,"\\/"))
    . R9 o7 A  H7 M) T9 c' b& b
  146.   {# d, S6 @& T7 C" r! F! M
  147.     strcat(szPath,inter);0 Z) g; ^! Q- ~2 N
  148.     strcat(szPath,"\");
    , y1 J! U% x4 W. ^: R
  149.     inter=token;
    & G" c, Z( C2 k% j
  150.   }5 q5 X% |7 [, B6 |1 A3 i
  151.   return strlen(szPath);
    ( j7 J& k6 w  V/ ]& ~* t
  152. }5 X, d8 n5 i4 y+ @  M* ~' ?( V/ d, D

  153. 4 z  O& l% u* m4 D
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ! |7 w$ t  w: A1 D6 R4 v
  155. {
    ; o9 F+ M" _/ W3 p
  156.   DWORD attrib=GetFileAttributes(Target);
    0 D) b% ~* u" \) `( D: B- c- P
  157.   if(attrib!=-1)
    8 M) c; O: X8 v. g
  158.   {
    ; D, o7 [/ K+ e! N
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    # i7 P% g4 P; p: w
  160.     {/ g& V9 E; N' X" l
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    8 V+ g% K( ]! ?  k/ a
  162.       SetFileAttributes(Target,attrib);) O" F; H% Y) H- q4 S
  163.     }
    . C. I( J5 h9 C( o( H
  164.   }
    " O, j: P+ \( ]) F1 H/ R
  165.   CopyFile(Source,Target,Erase);
    # J/ R3 i) e* o+ }
  166. }
    " C$ O. R1 C0 q  \

  167. 3 ^" v3 Q+ j$ K4 A- F5 ?# m
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)$ u% E9 @( f  v* k) L. G6 g* m
  169. {; W7 R. j) e+ P& j
  170.      FILE *fp;0 J4 b( E9 d. K( F" L
  171.      char  szBuffer[8192];
    1 j; {$ z; k( [. P" ]" c5 X- m0 s/ [
  172.   va_list  argptr;3 n% B1 V6 E. s( Q

  173. % u7 x+ W- p. F
  174.         va_start(argptr,message);* u0 Q9 T: `& S
  175.         vsprintf(szBuffer,message,argptr);' o  j) Y, B5 [8 X0 x
  176.         va_end(argptr);
    + g7 ?* |, Y: q" m* x5 M9 g, v
  177.   fp=fopen(FileName,"a");  S+ c  j. @, a# P1 z' w* Q8 {
  178.   if(fp)
      v* |$ y6 R% }* @1 f
  179.   {% |* Z' A4 |3 p- G8 n0 Q; b
  180.     fprintf(fp,szBuffer);
    # M% F, F5 D7 N! p
  181.     fclose(fp);
    0 F" I% U7 N3 U+ F# [+ Q
  182.           _flushall();0 `/ B% g$ c+ s6 F; a" m/ i' R5 }' f
  183.   }
    ) o0 O7 S& H* _( ~3 T: m1 i* z
  184. }
    ! N) _; D/ ^  b5 N. E' B

  185. 2 U/ F& N) V6 E1 z1 ]
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    3 s# d( `! c0 t. q. i  m
  187. {2 w, Y; Q, Y7 R" O6 U9 m7 {
  188.      FILE *fp;
    ) z4 ?' F( k+ _* S- X4 E, ?" l
  189.     DWORD  attrib;0 [5 q( d4 j( i
  190.   attrib=GetFileAttributes(FileName);
    , L# U: y0 d2 s3 ~& E+ T/ H; g3 z1 G% m
  191.   if(attrib!=-1)
    1 U2 w$ J  `3 }
  192.   {
    ! |0 {# y  A% |' @
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);" \( s; J" [. O) W- \. b
  194.     if(!SetFileAttributes(FileName,attrib))
    ; _- L2 B; l$ E- w
  195.     {+ K8 ?0 f- r3 u: i- T% M
  196.       return FALSE;4 _7 S1 _/ W+ U
  197.     }
    $ @) @3 d2 ]+ b# ?$ j. q
  198.   }
    , u6 ]" v5 d6 D
  199.   fp=fopen(FileName,"wb");
    , U0 G: c0 `' _9 \8 G! o
  200.   if(fp)
    + m9 {8 A1 U/ S2 I7 i- v
  201.   {) _! `8 L9 f( x+ ^0 t
  202.     fclose(fp);, [, @6 P7 y+ F' j* I% ?3 x
  203.   }# i% `0 u2 w' |
  204.   return TRUE;
    + z3 h3 v1 F$ j' l
  205. }
    1 J+ \7 Y8 t$ x, h4 ?# Y

  206. + g4 ?( M+ ]8 v$ r' [. g% |, m
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    0 N& P& o4 n' G+ Q! [1 S# Z$ A$ h3 {& H
  208. {
    , E) E% t( d- K4 Y+ P2 [" C0 {
  209.   char filename[MAX_PATH];
    7 `& H% c3 V0 ?3 X+ ]. d
  210.   LPUPDATEFILE file,olds;0 B% z$ D( h. u6 t, U3 [9 v
  211.   std::map<int,CString>::iterator i;
    8 }* ^* P3 H8 a+ a  ^0 Y, ]
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    - z& z7 G2 c- S8 m* ?
  213.   std::list<CString>::iterator l;
    ' h# f2 |- x+ ]- g. I( J# [! {

  214. % m  U# g0 g0 L; A' X; A
  215.   if(bFirstUpdate)
    $ e+ d/ J& K: @  M( i
  216.   {) X' h9 R+ s( a7 |7 |$ i4 W# s* @
  217.     dwCurrFile=0;
    ; [- ^' k& R/ f0 X: L: a
  218.     bFirstUpdate=FALSE;, I! p, A3 R( H6 |% R% Z- [
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ X+ Y8 d2 @+ Y" ^" t7 q# Z0 m9 Z
  220.     {
    $ p1 U5 x4 c3 H+ O! x
  221.       dwTotalFiles=UpdateLocal.size();' p7 c6 |& p) B9 K
  222.       dwDownLoaded=0;
    " x. m  Z4 P3 s1 i! b
  223.       bSilentStep=FALSE;
    ' O& M1 G! S$ X
  224.       bCompressed=TRUE;# _2 V: `' w3 Y4 y) d2 j
  225.       strExtLocal.Empty();% R6 u9 {  X- Y
  226.       strFullName=(*i).second;
    6 i" e/ q5 r# s, Z* R
  227.       dwProgramState=AP_CONNECT;, ?* i( f5 _' L, C( u) I5 G, A
  228.       return TRUE;1 d8 G" A" H; w( ~
  229.     }
    4 e4 j: a' {+ P/ J
  230.   }( q8 C: Y" {; u. @9 S3 [* A$ B2 w
  231.   else if(bRestartUpdater==FALSE)
    ; ]  R+ {( z  S3 T; d
  232.   {
    7 `# z3 y- X1 @
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())4 n) j  h1 R0 |, o6 c
  234.     {9 Z' i) o6 X5 F. q
  235.       file=(*p).second;: ~( Z8 W9 O: M6 f. m$ M/ W9 L
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ; G% b4 h3 q9 l$ D# o3 X1 T
  237.       {, r4 J6 L& e  o) q" n" G
  238.         olds=(*p).second;
    8 |6 S. m: \, p( m
  239.         olds->vers=file->vers;
    1 w0 R) h( \0 X; d
  240.       }
    7 D  |' G$ m7 _7 M
  241.       else+ }1 r4 L1 \9 S# t$ A3 i7 q
  242.       {
    $ Z# L" p2 B; e1 ]4 [8 Z1 W
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' F# e$ H# I8 K- ^5 C
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    8 \5 \+ t' F4 _) p
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 \# b0 n# v! O
  246.       }" `, S% P9 F4 a% z' ?( m
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");' b1 F! g# m3 a* v
  248.       sprintf(filename,"(%s)",file->file);) \3 n' j4 t$ Y( p2 U. m/ H
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; P) Z- ^7 S1 d9 T7 q, f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    % N2 d& n7 D' p: `$ ?
  251.     }# V1 `% F, Y/ _; I% [! C- L+ Y
  252.     dwCurrFile++;
    $ `0 ?* G' a2 T! \6 E9 Q3 ?
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 |! v: l$ y) P6 m; l0 ~: n
  254.     {& o$ _( v  n( x- ?- i9 x5 c! I
  255.       bSilentStep=FALSE;% O# c7 y) r& O
  256.       bCompressed=TRUE;. X- I8 \; y) i
  257.       strExtLocal.Empty();
    9 n5 O1 e& J7 H# k8 q: D
  258.       strFullName=(*i).second;
    / B* `9 z5 ]. F# }9 Z; j3 R9 @
  259.       dwProgramState=AP_CONNECT;
    7 s, y, U" \3 X. Q+ m4 W7 O" Y
  260.       return TRUE;" G( H4 c' S' Y/ i) p
  261.     }! K& p  d  c* f2 `
  262.     if(!bRestartUpdater). }" ^: c  g$ l/ C# J/ ?5 l
  263.     {
    ! C  q8 ?: @, u7 u# Q. w, e
  264.       int iCurrSize,iFileSize;
    0 a2 b2 I# w+ a) P
  265.       iCurrSize=0;
    # I& M8 C: _& o; t+ H' \
  266.       iFileSize=UpdateList2.size();
    . W* Q! I$ k8 k7 u* L1 u6 S& W
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");7 d! m5 b0 _) e4 p# Y# S
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 }; p. z$ Y& K& r( w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");3 V1 e% q+ f$ h
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: _" ^0 r7 W) a/ V& d0 h2 ^
  271.       Fclearf(".\\update.dat");9 M% E. j  Z! Q0 O8 C
  272.       Fprintf(".\\update.dat","Bloodyf\n");" {) B6 @. R8 @: k
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)  }5 R, Y5 K8 y' ^
  274.       {7 b6 t! ^2 \: L4 V" V" c
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())4 {& g4 G# w7 ?8 e6 W4 ?: _  Z1 R
  276.         {
    , Q+ f3 q0 o8 [; E! G/ N4 J, v
  277.           file=(*p).second;
    - x# k3 G2 d% j$ j0 C
  278.           sprintf(filename,"(%s)",file->file);; n" B( p9 U! {! g. ~; _: ?7 F7 L4 s
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 L' a4 p" S: J5 p( ~" d
  280.           iCurrSize++;% x  c+ P: T" q9 |' ?% E
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));; |8 ?3 h% f. u3 F" a
  282.         }
    + k' d; h$ E" M% [
  283.       }* d! s1 c5 F+ V0 _: }* i5 H' |9 U5 D$ M
  284.       unlink(".\\update.txt");
      E- G3 P# n  p/ ~
  285.       unlink(".\\update.tmp");
    4 h& i: o4 S2 o
  286.       Fclearf(".\\checkversion.dat");
      ^- q8 u0 r3 r. E) c2 A, f! o; @
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( L& T1 s! n4 g( I
  288.       if(UpdateLocal.size())# F3 c1 Q% i7 V; Z2 f
  289.       {
    + H; \- S8 m; O. {  }
  290.         UpdateLocal.clear();
    ; M( j$ b; u9 q
  291.       }+ F% w+ |) n) z' `2 B
  292.       if(UpdateFile3.size())7 u! ]: b) ^* h3 A+ Z2 c. Z
  293.       {5 o1 w4 d' j1 ~, N/ A
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) |4 f# k. h  d% [( p( F+ K
  295.         {5 A/ Q9 T4 U3 i* r- A  j" J6 y) d3 C
  296.           file=(*p).second;
    / ~9 @- ^8 ]3 s
  297.           free(file);
    * b2 [0 {2 |% V( x/ a
  298.         }$ ^% H" C' B( e0 m
  299.         UpdateFile3.clear();
    8 K! z9 X4 [' q! X- N3 g. ?
  300.         UpdateList3.clear();
    : U4 v% N' a1 \  W) O3 V
  301.       }# g# n$ w1 Y& e7 ]: N
  302.       if(UpdateFile2.size())
    5 Y4 D7 b3 S! G) T* f
  303.       {
    % X! u6 N2 I! P, C
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 {8 @1 s. H, I2 I, ]
  305.         {! z3 E& Z7 q% X) j4 J9 q
  306.           file=(*p).second;0 Z& z* Z  P6 l2 s- H, `" b
  307.           free(file);
    # c  M6 U' e2 w+ a0 T' L. `* b
  308.         }
    . I% ?- u  _. G, j1 H5 P2 _
  309.         UpdateFile2.clear();  Z- c% t5 R- C& V
  310.         UpdateList2.clear();
    9 `8 W$ j+ z5 e. j& v9 c5 D4 Z
  311.       }( u3 K5 ~/ m6 E2 H* ^1 [
  312.       if(UpdateFile1.size())
    1 N; f4 O, C* Y4 r3 s
  313.       {6 {' V6 w5 p5 r- m3 g1 ^7 k
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    4 C; }" F" u% s* _7 E- H
  315.         {
    / c) \1 f7 M' i) [$ I! h- u. v$ W
  316.           file=(*p).second;4 U: g7 N* j3 [! p
  317.           free(file);+ R" g# k& u0 R+ R. m: ~) |( \9 m6 j
  318.         }
    6 K- r" ^5 `+ o+ D$ c2 A
  319.         UpdateFile1.clear();
    : V' t  h8 b( H, q; o5 f, p7 j$ M2 Y
  320.         UpdateList1.clear();
    ) n3 b$ e( \' [( x- l0 ^! |$ o, c
  321.       }  q  x' X+ B4 T4 Q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! J2 C1 `: q5 D' A) Q& k8 N
  323.     }8 q& S! [8 @9 `2 y5 l; `5 j* _6 v
  324.   }
    " S2 F: V% ]6 C
  325.   return FALSE;; [6 o& d; |6 T; F% z. X# B! @
  326. }
    ( A6 H, e! A! o
  327. 3 }. e: z, }" U, x9 s, S/ g/ N' W
  328. void CRevAppApp::ClearAll(void)
    . V, V: _$ [3 b0 b5 ^" v) Q- C
  329. {' l+ w  D6 e/ q) ]( E
  330.   LPUPDATEFILE file;6 s8 i/ K9 n, C4 I5 q7 D
  331.   std::map<CString,LPUPDATEFILE>::iterator p;* G% ]4 U7 u/ r) k/ H9 F1 L

  332. * _% E) d0 K! `7 n* r  y+ k7 r8 J
  333.   if(UpdateLocal.size())" K+ r4 E. D- s% c3 v
  334.   {8 J. W) ^/ ~  S
  335.     UpdateLocal.clear();
    3 L4 C- x7 B& c- G
  336.   }
    ; j' N+ N# b1 x, b' X
  337.   if(UpdateFile3.size())7 ?, y2 A% B- z- k" a8 d
  338.   {
    7 R5 |  P" r4 O3 ]$ C' D' A
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)3 t; D9 X# i7 k: Y" o) G: N$ J9 j
  340.     {
    9 g0 }/ R2 N5 j; X* p5 b
  341.       file=(*p).second;
    % d% E" ^* @, Q8 c; m
  342.       free(file);- m& h; I/ i7 Z
  343.     }
    # o, \7 r# v$ t% U/ d. k: W, o
  344.     UpdateFile3.clear();
    0 t7 V# V7 C& D$ J2 Z
  345.     UpdateList3.clear();
    / e  j9 Z& }# c* U1 K
  346.   }
    & q  A8 s: `* D. h  X
  347.   if(UpdateFile2.size())
    + Q4 ^$ P! R0 Z0 ?  X
  348.   {
      U& `$ C. J& ~
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , }& _. ^1 W  O; f2 u, x
  350.     {
    5 K/ K+ p, O: [3 X
  351.       file=(*p).second;! B5 q! p" {2 T, D; h5 S9 d
  352.       free(file);5 {' |( L; ^0 Z
  353.     }
    7 x( f) K+ V% G0 s. [7 P! x+ @
  354.     UpdateFile2.clear();& I; ?/ e- ~* J: J9 Y, ~4 r: i5 }  ~9 \1 n
  355.     UpdateList2.clear();2 f# a' G3 @3 }# q4 f0 F5 l# T
  356.   }
    3 p6 X* p! ?/ F1 q1 I" j; }
  357.   if(UpdateFile1.size())' Z+ \, v& R0 a% g& N
  358.   {
    5 w" ?$ q/ i& r6 S1 u0 ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ D5 o, D7 i6 B
  360.     {& I( r9 U) v& l1 N% d* E3 v$ r
  361.       file=(*p).second;4 }1 j8 m7 Q; K1 u4 q  S
  362.       free(file);
    7 s' z, }& G! \
  363.     }8 }% d+ K! U1 ~
  364.     UpdateFile1.clear();* C& f" _5 p% a& `6 G; y& o3 K' C
  365.     UpdateList1.clear();
    8 r. f- l8 M# @. L" W7 z
  366.   }
    ) r! M4 b$ F2 l) _1 B8 M
  367. }  # e1 }$ w5 V0 u. ?* g1 M7 F$ \
  368.   # N9 W3 O6 W% r8 o
  369. BOOL CRevAppApp::CheckLocalVersion(void)6 \5 r7 O* L3 a7 s
  370. {3 y( a  k6 l0 a" A5 M  Y
  371.   int c;
    / M4 o9 _/ F7 S0 h. L- D9 |
  372.   LPUPDATEFILE file1,file2;  \: J- R$ N2 R# f- z
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ! _" z# W, C9 C/ U8 g1 H, B+ k
  374.   std::list<CString>::iterator l;
    : m( V. V$ `. H4 u& `
  375. , D7 v+ H* s* ^; i8 N: M. [  ]
  376.   UpdateLocal.clear();
    + N# i) g9 u4 a
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ H/ I& B) s( ?1 i  F" n
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);' Z* d% s2 F2 S, ~
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    & o* z- G8 r( a: [6 y+ Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    , L  ~) N4 D6 B5 c9 j0 r
  381.   if(UpdateFile3.size())
    ' T0 O# H4 ~: m- k
  382.   {
    7 G$ z5 J, k9 y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    & E8 l: X  ?0 R8 r5 ]3 w$ M
  384.     {2 _* ]. @, L) W6 E. u# d3 i
  385.       file2=(LPUPDATEFILE)(*i).second;
    & ?! K! b1 s$ [+ d4 I8 a
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! t) F9 B, K. t* N
  387.       {
    4 ~- A) O: Z1 g! d& x
  388.         file1=(LPUPDATEFILE)(*p).second;# K2 O$ R' r+ t
  389.         file1->vers=file2->vers;( n) C: [- D& |5 t
  390.       }  E0 a7 b3 |4 N* Q
  391.       else
    6 X/ s  e  g1 x; }! c
  392.       {
    7 d7 N, O0 ~7 D$ C7 Z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; ]% x# a. f( U- f
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));8 v: ]; a. E) ~3 }: ~/ o
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    : G# c8 r9 ?7 n8 I, j- g
  396.       }2 n$ ^0 H8 V8 J3 K4 W
  397.     }
    : [$ s. g+ y4 z2 w, T6 h
  398.   }
    / M1 k- h. l& {3 ~" {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & D6 u/ @% A. u, ]2 @. N% B
  400.   {
    : X4 |: ~7 G- R/ w7 d: s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    8 [9 {$ v4 H9 m! E! L2 \: m
  402.     {' g2 O) \1 P- B2 ^* d/ o
  403.       file2=(LPUPDATEFILE)(*i).second;, k2 T; g4 J9 m: N/ ?
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' F6 E  _  i6 J/ F4 \( P7 H1 Q: Q
  405.       {3 R3 h9 Y: X- e4 f) f1 J+ x
  406.         file1=(LPUPDATEFILE)(*p).second;" Y2 y* r/ i. i
  407.         if(file1->vers!=file2->vers)
    # g# d$ m: I1 b/ D
  408.         {
    ! y1 Z$ \, |! z3 V
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& O; o- n- k- c+ u
  410.           c++;8 R/ B) h4 h1 a; O
  411.         }
    ' G7 O7 M1 U- e, P( w5 j
  412.       }! B0 S2 S' \5 f
  413.       else
      v1 A9 Y. c9 r: l% ^, |8 Y
  414.       {
    . D) F- d" E/ |; i& P+ G2 h
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. S, q/ g" T9 w6 ~
  416.         c++;
    ' ?/ Z5 J5 T' S* H/ ^1 z& c6 w
  417.       }
    8 a: R- r) l+ \( A
  418.     }
    % f- q' q7 E7 b4 S( q1 F4 P0 d
  419.   }0 c8 d, I) U4 T5 z  c
  420.   unlink(".\\DownLoad\\update.txt");8 z& b9 d/ P# b' a- f) D4 P! R
  421.   if(UpdateLocal.size()) return TRUE;
    0 @; Z( }. ~; f/ _
  422.   else                   return FALSE;7 N9 T# W: Z$ Z' i
  423. }+ F8 k9 I  o. S5 o4 @! {
  424. , q" \! G3 b# l( U4 b
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 u( z3 [5 s, q+ Z* s6 ]1 u. V: t1 \
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"8 I6 b3 A; u& q

  427. ' _4 m- w! c* }. R

  428. ! s8 b0 e2 s9 y, E

  429. 3 ~! W8 Y8 [" D4 C' P
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    & m$ K* K3 {# }
  431. {# y5 J7 P9 T$ B+ ~
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( P! [6 e+ ~5 y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . t3 U* c& E9 W
  434.   {
    3 k- E7 O( m/ T% D
  435.     char szLanguage[50];
      }* L/ j& _5 |9 {
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ ~6 h! P5 i* |. c2 a2 |) y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" P2 r) p% B6 f( o! W5 N" B+ ]: O4 a
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 i2 d# ]+ f* D7 ^# j% O" N
  439.     else                                   m_iLanguage=ENGLISH;0 z9 a8 G3 l- G" J- u% p
  440.     char szRegister[100];0 j' w) K3 E8 S# m, y5 w
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: \5 N% @4 W) \, t6 m
  442.     strRegsName=szRegister;
    2 W5 ?. |2 L% g1 Q0 L9 R
  443.     char szPatchURL[100];
    2 K" J* {- n- t! p% z# n
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' L, m# f2 {, y, J+ U
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 R% g8 R- _) U$ ^# m% C. n
  446.   }
    9 L& a% S% P+ k+ w' V
  447.   else
    / q5 U; q8 A, T4 C! |2 O* v
  448.   {
    2 H9 x5 H: d+ m5 P$ j9 A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 |& q2 V. O: c; k- b$ b. `4 |. c
  450.     strRegsName=DEFAULT_REG_URL;! K( p6 ~2 r2 K/ x5 g* n. u
  451.   }
    & C. J% X5 u* d3 _- }, P8 u
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    1 s9 o' s7 m  X2 p8 _3 n: Z
  453.   {) p5 ]4 u( B, C- p
  454.     char szIP[50];3 D$ k" C* p$ v, _& x
  455.     char szDIR[300];
    , d* u1 ~  w4 c, }& A% {8 Y
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 H# b& A- m9 J$ Q# w; }; b  ~- H
  457.     {
    3 K* O' ^4 |0 f
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* e  U) B2 Y# `# Y. |: ]. }
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    7 W0 J* X; ^( m/ ~3 m+ i1 A
  460.       strHostName=szIP;) |; S  R* D  @
  461.       strHostPath.Format("/%s",szDIR);
    9 U) o8 [0 j2 z( n: t
  462.     }
    % Y3 o7 s$ @* h! N* P
  463.     else
    0 T5 S1 ~9 T. r. d( @; Y
  464.     {: s" f2 D0 |/ \1 c$ D& j# ]
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 H6 i& i1 ^8 t4 T4 D
  466.       {
    5 J% K3 m3 \8 X9 `2 b
  467.         char szLanguage[50];
      \- {, D) L2 E3 K
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( ?  q! S' i% ^
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' M! [6 i* b! b! F! W& W+ |
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  o8 ~& j  }- w
  471.         else                                   m_iLanguage=ENGLISH;
    " {! ], {' E! G, e* d- q. X
  472.         char szRegister[100];: P8 `+ |! V" p$ x1 q
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' \: f" q9 z! O+ ~0 v; U3 v
  474.         strRegsName=szRegister;
    $ b' S/ p0 I" E) m( N4 z
  475.         char szPatchURL[100];5 Y- ]. i+ M$ [5 i% _0 M6 {
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( \5 n0 A* [- g5 J5 {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) c* \0 u, [3 [5 K2 g4 e
  478.       }) U) P% }" x5 h9 i: r- V
  479.       else
    % |% f2 Y& J0 E8 H# L
  480.       {- w( P- a2 b4 [; F
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 }5 @" `# M: C0 i6 Y5 d
  482.         strRegsName=DEFAULT_REG_URL;
    - }" b& {/ n4 H: e* F
  483.       }
    / a, ?  R0 b: ^3 }; N$ }$ i. |
  484.     }
    5 U7 h) R$ h  h* k: W- Y% p
  485.   }
    4 {6 N6 ]* ^* V& O3 i- j% g
  486.   return true;$ L+ d! I. `7 B9 w6 c2 G
  487. }
    " g9 K# F+ ?, d0 {, C$ Q
  488.   F* W1 p9 K5 d' [' S
  489. #include ".\ZLib\unzip.h"
    ) v" B' I- n- Y& z. j0 R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 r1 ^  H: c& u- q& x6 Q, F0 e
  491. /////////////////////////////////////////////////////////////////////////////
    9 v1 g; o: o" J9 V
  492. // CRevAppApp initialization
    % x' J3 n( l( k+ a, f% Z

  493. 6 K, p/ M' o+ n9 P7 s
  494. BOOL CRevAppApp::InitInstance(). B/ ]" B# [5 y8 T, \
  495. {6 l7 \  {4 \& F
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , l+ q" O* B+ C5 J/ C9 b
  497. . m( g6 u' D2 t5 v8 F9 Q+ `( e2 D
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ; }; I: j) K1 F& ]; E3 q3 Z. N* V
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    $ m5 o! f6 {) X; D1 J2 E
  500.   {
    - u4 [! c  ~/ R
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ' d( e) H3 Y% M5 }, ~, M
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % w0 _1 r5 m/ P( i5 L& ^. a3 h/ \
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    / h1 W; }" x; m$ H% R
  504.     {
    % `- g) q, D- s- o; P& T# k* h
  505.       strcpy(szPath,szPathTarget);
    " g; f9 U. Y! ]1 n7 u
  506.       SetCurrentDirectory(szPath);
    ; W3 a0 G9 m# A' s$ l
  507.     }
    6 Y" R- z* n% V# K) A% I: B' X+ p
  508.   }
    - v  G4 m/ i! g  w2 b$ r8 `6 \; T% s
  509. #ifdef _DEBUG
    ! H. q6 t! t% [7 i
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    1 P$ ^  n# z" L$ `
  511. #else$ f; E" h3 S3 Y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 V% r% E( ^! P$ p) ]
  513. #endif; J& H  u% i/ V* e  v( S; w6 _
  514.   {
    / l: Q3 G  Z5 ^! K0 C( {
  515.     char tempFileName[MAX_PATH];3 m! k  T5 J1 G
  516.     strcpy(tempFileName,szPathSource);
    9 j5 l! x" g! [% p. Q& {
  517.     tempFileName[strlen(szPathSource)-12]=0;7 j- D$ E; ^% e* ~4 w
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    , R$ o1 @& v, ]$ J6 D1 @! _' T! z$ m  D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    3 Q$ J. \  y9 X% E5 _8 Z
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ; Y5 q$ t/ D6 H8 z5 ?9 D
  521.     return TRUE;* t4 }- N6 X  M  v
  522.   }2 X3 [( [7 _; Z% v* y) [
  523.   // Nuke 0118: Delete run.exe
    ( p, s: @- F/ q
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );* }3 r+ f' B/ x  ?- ^
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    6 A; [. n2 ~7 {- X4 @6 `/ D
  526.   if(!ReadCfgFile("Config.ini"))
    3 o9 A7 ]) n& X" f3 v' Q
  527.   {
      t4 J' ^! A- a8 A9 j
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    8 ^8 E% K8 O0 k1 H" c; L% V
  529.     return TRUE;
    $ M* H; _' X) l; o* \) o
  530.   }
    ) g- D% s( [9 a- J+ g  ?: h# [. N
  531.   HANDLE mutex;
    * g7 {5 e* c# J' l  e5 m2 D
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    - z4 \- |  r- q
  533.   {
    7 `3 g  c- `% R! K, d; T* j/ q8 h
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)1 Z0 \- m1 W/ t0 ]1 U) E8 b
  535.     {
    5 X1 f- |. n; v; K
  536.       CloseHandle(mutex);! T8 v& b1 n4 d8 K3 }# c
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    - [7 N/ ~. |% I$ Q& |0 M1 ?
  538.       return TRUE;
    ; U3 Z: W- p" N) u3 A# Z
  539.     }
    * u7 r! a) b6 _# E- r
  540.   }  
      l. L8 `' k5 g1 q; l% z* X
  541.   CloseHandle(mutex);$ Z6 n. f, \! \+ H
  542. " }* u3 i% s5 s2 m* D: v8 R0 e
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; C# @. D4 X3 |- y$ j) L" Z. J7 B

  544. / H- V6 ]( G% g# W9 ?0 E
  545.         AfxEnableControlContainer();6 ?: \% b# ^8 a1 n3 l4 @

  546. 2 F2 [. y9 \, _6 U0 s: g4 t' U8 S9 G2 n
  547.   bCanUpdate=FALSE;
    0 ~4 O( r4 c+ B  W. {
  548.   dwStartUpSteps=1;
    0 a0 x7 E7 u1 |% W6 v) j0 z( N
  549.   dwProgramState=AP_NOTHING;* c7 m$ ?( i) u5 E" T" e

  550.   k5 S$ F( A; k6 z& k
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. j7 l3 D% S& {) F
  552. ( \- _6 a4 Q4 }  q) e! s( f
  553.         // Standard initialization9 v" Z- M% E3 @+ V/ @
  554.         // If you are not using these features and wish to reduce the size
    , U1 ]$ Y/ z4 o+ W- u
  555.         //  of your final executable, you should remove from the following
    ! H5 e7 [3 t3 g9 `% H: S5 }
  556.         //  the specific initialization routines you do not need.
    $ V* L7 f, a6 C) Z/ N

  557. $ ^* `6 L& C. H6 g$ e+ w, G; a9 W
  558. #ifdef _AFXDLL- |2 ]/ N% Q5 q% A& }1 U. {
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL- i  W$ R8 M6 `0 d" {
  560. #else
    ) K  X/ T0 u. l# U$ E" U5 J
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically: q- F/ p# a  M9 v
  562. #endif. o* X, }6 X, ?) {) K5 `. y

  563. : }* G. g  o6 E9 B6 J( U* Y
  564.   dlg=new CRevAppDlg;: l; k$ _- a4 p/ J$ z% H% O
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ; q$ Z" A/ j5 I# @1 h
  566.   dlg->ShowWindow(SW_SHOWNORMAL);( A: j$ V0 k$ W0 J0 {8 E* G/ C4 T9 N4 d2 [
  567.   m_pMainWnd=dlg;
    ) C6 i, k+ I6 B- y
  568. 2 i9 z. m+ `+ x( z1 M8 I- k  t8 ~
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);. c8 Y' |" g* g- N' K& y

  570. , I0 F: b, g9 ?0 j7 ^
  571. //  GdiplusStartupInput gdiplusStartupInput;  @8 s* x1 |" F, m9 [( S
  572. //  ULONG_PTR gdiplusToken;+ Z+ l! r$ ~4 y% W6 [; B" \
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ; M% U! q( }. I: C1 N! A' v+ @

  574. ; ~7 Q( N! R/ Y
  575. //        CRevAppDlg dlg;$ v* p  e" w4 L6 D4 }5 x
  576. //        int nResponse = dlg.DoModal();% y# M' O& k. L' F
  577. //        if (nResponse == IDOK)5 ?9 G7 ]$ N$ T! P: v/ o
  578. //        {
      ]; J4 x' j8 k
  579. //                // TODO: Place code here to handle when the dialog is- h  `  A% \. K8 {. P
  580. //                //  dismissed with OK
    ( ~9 S5 s3 S2 j- |, w$ f
  581. //        }
    + \9 v* K- R" [; O! {! c% Y6 Y8 f
  582. //        else if (nResponse == IDCANCEL)
    ( ~: i* }' j4 Z  B& u
  583. //        {
    1 ?! F+ \& ?* ^1 ^4 w9 Y/ ?
  584. //                // TODO: Place code here to handle when the dialog is5 _/ W3 `* }8 o. F8 ?5 @6 _& }* b
  585. //                //  dismissed with Cancel) X) ^* L7 Q0 d1 @  f; D9 f
  586. //        }
    - V$ ^5 E' q4 Y5 b+ ^

  587. * J9 Q0 l2 n7 u) a7 n& ~
  588.         // Since the dialog has been closed, return FALSE so that we exit the- k1 q! q( K& P1 f3 R; m8 @
  589.         //  application, rather than start the application's message pump.
    7 G& {7 C' Q0 I) h
  590.         return TRUE;1 ]; ~# `  U+ g' x
  591. }
    ; M6 i. v+ E; s4 u7 |" `7 W; d$ R( t
  592. 9 M" q9 i  i+ y  W, p( X" l  b
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' e, j# _' h5 o: O3 M- w! a* H
  594. {
    / s- i* t5 F4 q8 W) B% e
  595.   int i;  ?7 m4 x- B+ ~, w. g( r# D% ]8 r  m
  596.   char *szRet;# W& x& k& b2 e, x

  597. * }: W& ?, _2 M, h1 n3 r
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    - M0 j" P) D+ M& \0 q7 Z
  599.   if(sztoken)
    * k$ s: F: \" v6 c; C( ^
  600.   {
    $ |- w! Y2 {- w- m7 r: O
  601.     szRet=&sztoken[itoken];
    1 S8 u, ?7 o: {6 @
  602.     while(sztoken[itoken])
    8 t. \  y9 o  e' `
  603.     {
      a. ]$ @2 M- L! w3 w! d) f* L
  604.       for(i=0;i<(int)strlen(token);i++)
    / M- E0 Y5 Q5 D0 f, ?3 g/ {7 k
  605.       {7 V1 O8 Y$ T* g# p! y  o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]); d% [. O; F3 G6 Z3 S# v' I
  607.         {( |2 d; V" h& D; n
  608.           sztoken[itoken++]=0;4 {8 A; R! N2 n
  609.           sztoken[itoken++]=0;
    5 H2 A2 M, \- V: G  ?
  610.           return szRet;" d8 K( Q0 [9 c$ S6 X; s8 j
  611.         }' \$ n+ |7 g) C' e0 a: Q
  612.       }
    / Y- L) v. C' L- F
  613.       itoken++;6 s7 U4 A$ R# [0 Q# C- j$ a' f
  614.     }
    - s5 f, n& z" D) D
  615.   }" e( I1 G, N$ J
  616.   return NULL;
    " [9 G8 Y2 L& Q8 e
  617. }
    : H6 _% b' ^8 d/ z/ }/ Z" n
  618. 9 p6 F) o) B8 J
  619. void ProcessProc(long Total,long Current)
    8 W6 s* ~$ Y& e9 K, B: S% x2 \! |
  620. {
    4 V+ [$ F0 D% l: }5 y2 F
  621.         MSG msg;
    # Z# `9 E) y. ?( z$ N% [
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);* V! g  b  y9 t8 A* S
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));: i2 y2 b7 f0 F, c, i
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ N' n2 \4 t  ]
  625.         {
    4 M5 E0 g6 C/ |8 j8 z9 G( E+ M
  626.                 if(!GetMessage(&msg,NULL,0,0)). w  z& y) b" f# p9 C% S
  627.                 {
    % D8 ?# X7 H4 [* U, B, ^
  628.                         return;8 |4 }7 N7 q7 k& U  i' T* B
  629.                 }
    * f' g8 f* @9 W% d2 E: Q2 u( F# ~
  630.                 TranslateMessage(&msg);1 ^4 K9 v2 ~0 t: O3 Y/ Q# |
  631.                 DispatchMessage(&msg);( M- z: l/ v3 x1 Y, I# k" y
  632.         }        / e1 {. A; g( b
  633. }: m- a3 z% e# ~) \+ K

  634. . l# f  T6 M7 h; H
  635. BOOL bFirstChar=TRUE;
    ' D4 y6 n3 q) z; f7 W+ M

  636. 1 R" ^5 K$ B% ]/ T
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ) ]. b+ }, ~1 k; D  K( f8 S
  638. {
    3 m: r, n6 v1 C8 U' R9 T
  639.         // TODO: Add your specialized code here and/or call the base class3 o, K: u3 M+ u0 _
  640.   switch(dwProgramState)
    9 G' _* w# t7 S& i! {: S, w* o; ]
  641.   {
      \, b# v5 C. N$ l$ A: c. _5 a
  642.   case AP_NOTHING:" f# D: @% i& X: h9 _+ m
  643.     switch(dwStartUpSteps)
      K; {/ T' f2 o6 {
  644.     {! ^- N. M8 {( a
  645.     case 1:
    2 p% e! O3 G5 {1 ~0 @0 J
  646.       {
    2 r0 t9 P! m1 t) k. Z$ i
  647.         int i;: }4 \7 H8 y# h4 A% L5 B
  648.         CDC *pCDC=dlg->GetDC();6 C- A6 \, A# @6 `- K
  649.         HDC hdcwnd=pCDC->m_hDC;& D: y5 e2 v2 L
  650. //        Graphics graphics(hdcwnd);
    " M% ?8 X; C0 ^: \- {; \5 p
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ( n6 [% A( k$ S  ~1 S# _$ K
  652. //        INT iWidth=bitmap.GetWidth();- R$ S3 z$ R5 v  `
  653. //        INT iHeight=bitmap.GetHeight();6 K# ?2 X1 ^9 i  O! T: ^
  654. //        Color color,colorTemp;  X! B: M6 {/ ]4 L& z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    # T: F, O9 u0 k  c8 |
  656. //        {- M8 V0 U/ V, U; h) W3 }; {
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    4 D/ l7 y+ I4 ]4 X
  658. //          {# u: G  b/ v& a9 O7 h7 `, x& R$ u: W
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    7 j7 I1 Y6 Y4 H* Q! u$ C! y3 C" T7 X$ P
  660. //            colorTemp.SetValue(color.MakeARGB(% g+ B; T( Z0 @  `$ E
  661. //              (BYTE)(255*iColumn/iWidth),
    " }: p5 Z' C' }! I  `
  662. //              color.GetRed(),
    & y9 L1 Q' S6 g' g* p9 D
  663. //              color.GetGreen(),2 T6 ?8 m8 `2 ?% `! k, r) v
  664. //              color.GetBlue()));. ~. r0 E+ n! H
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    2 t/ \# H8 I, W7 C( W4 Z1 I* J* F
  666. //          }
    ; a7 n; z5 |, ^
  667. //        }
    $ ^8 P4 t) K$ |1 X; c- t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);( y( O8 z% f2 W4 Y# B* g" l
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    0 O% c/ N; Q/ l/ M( L; w( |: p
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # U( |" A# O" \9 v& [
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + [0 ^# V; d. n" B1 h
  672.         for(i=0;i<240;i+=8)
    9 `7 m+ }& v3 B! y# W% q
  673.         {, h/ [8 T, N) r1 ^5 |. Q5 {& m9 e
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 Z/ u, ^6 ?9 ~
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 V; f( e$ v* k+ U$ O! e$ ^
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. U6 G# r+ ^% l# Q" h
  677.           Sleep(33);1 i/ \  n4 m. X4 x7 Q' K4 U# v
  678.         }( G9 g, ?' X0 o& V% W3 [: i8 n
  679.         Sleep(1000);6 z+ G; A2 D, p- Q
  680.         for(i=240;i>0;i-=8), F1 B3 |, }0 k5 o+ |5 v1 r2 D3 ~
  681.         {
    2 d/ {0 U) }9 [, G
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 I, M# L9 k# r/ v3 }  n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. T. h( Q8 r7 e6 }' W
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # G3 D' j( K9 S* ?4 H. s
  685.           Sleep(33);
    ! r5 J" ~/ M" a. }1 I' u
  686.         }
    ' a/ D9 L8 H. Y  h; k
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ' A6 J0 |6 h0 z; I6 }4 W
  688.         dlg->ReleaseDC(pCDC);
    ) w3 X; v# p+ T
  689.         DeleteDC(hdctar);; G, [( X7 F3 }: N! i2 ?/ |
  690.         DeleteDC(hdcsrc);
    " B) I. l1 k& P7 ^9 ^6 M3 O
  691.         DeleteDC(hdcorg);! Y) E% r- z5 z4 K. e$ R7 ^5 h) p
  692.       }
    9 [- M7 K4 G+ b( \* D
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 e4 z( o, F+ q+ d; k1 {) q% z
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");- s/ M! S2 N4 Z6 C% o
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");+ y* O* Z! J' S$ x: }
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");7 H$ |7 O( g% A. A, i: r
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* r' T; U! U& @/ D2 ^
  698.       if(!Dn.Connected())
    ' B4 V( e$ w# z/ x6 U
  699.       {& U" \2 E8 U9 _3 u3 c% x7 j, n
  700.         dwTotalFiles=1;( d! a. d+ b& S
  701.         dwDownLoaded=0;) T3 |1 I2 k3 _4 h" g
  702.         bSilentStep=TRUE;
    ; Y' b2 g4 J7 M: j/ \0 t
  703.         bCompressed=FALSE;  B; x! _. `$ T( e4 e) H( @
  704.         strExtLocal.Empty();
    3 ~- D! e  ]  q9 G
  705.         strFullName="readme.txt";
    7 ~* F6 N0 G4 b# i; y  M
  706.         dwProgramState=AP_CONNECT;
    * A( F- ~% E( f* @+ B5 H8 Y4 c1 _
  707.       }
      C/ ^. x) }6 ~" i1 |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 C: c  ?; d  N; u! x' d) W) P8 a
  709.       dwStartUpSteps=2;! q( I' \; q0 W1 E& |) O
  710.       break;
    2 A0 S7 X0 m, ^1 O% l
  711.     case 2:
    & X; N8 R# v: K4 x! N
  712.       {/ T- m9 O; m6 v) W7 R' J5 B% `/ R
  713.         int iEOF;
    0 S% T. _& T  y
  714.         FILE *fp;
    6 _& b; Z% Q/ e) N& b: B' ?
  715.         char szString[512];6 e. `. F$ K: R1 v5 w& b
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    3 ^( u) c4 l  B: R
  717.         if(fp)- ?# S/ h4 o4 z
  718.         {( J% P" M  F5 ?- e+ `
  719.           do: z5 A) j0 c- V3 M7 @1 s! N
  720.           {
    : B+ B9 I4 ?2 f6 H2 B) y% s" k
  721.             iEOF=fscanf(fp,"%s",szString);( }( H( Q/ O' J2 j
  722.             if(strlen(szString))
    5 y, z3 ?  \) O! z: O/ [2 R4 Z( a
  723.             {8 l" t& e: O1 S, p9 ~
  724.               if(bFirstChar)
    : V$ c4 p+ l! }' x
  725.               {1 Q$ O& i# d0 R8 y
  726.                 bFirstChar=FALSE;) f4 s4 p, Y$ w( x) [; u
  727.                 bConnectIsBig5=FALSE;6 a+ [/ e1 B1 t0 P
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;7 A, B# u9 R6 e: r* g, X- E6 r9 v
  729.               }+ w: p# s$ p& N. w) _% D1 _
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ' o0 Z4 {5 h) t" K( Y6 ^; ~5 t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ' C6 X( ?: A& o4 ]: ^# ^+ R
  732.               dlg->m_ListText.AddString(szString);
    6 |% r2 J. ?/ A$ S7 a5 k
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) A2 u# a- V3 |( H: V
  734.               *szString=0;
    / R9 G$ m% X9 g+ P
  735.             }
    4 x0 L$ W3 n  E# [- u
  736.           } while(iEOF!=EOF);/ O$ p( D: f5 h0 x! I
  737.           fclose(fp);
    1 H/ ?8 w7 S( J; u- G. R& F" R
  738.           unlink(".\\DownLoad\\readme.txt");/ a9 T' T# F6 [6 E6 N4 X; `
  739.           dwStartUpSteps=3;
    ( G% H4 k3 w$ o  V  ?3 F1 A
  740.         }% v: u5 `* X, J/ K9 d  {, C, N
  741.       }2 [( T7 Y9 H+ ~9 I$ w. \! R% z
  742.       break;3 {# E6 Q2 _9 t5 @3 I
  743.     case 3:$ k5 F" x4 |+ h
  744.       if(!Dn.Connected())' ]! V2 \  O( @0 e, g. R, Q* Z
  745.       {
    7 \& V& y, ?: p* P( Y7 V  y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    3 y% E' B* p/ y0 a* U0 z0 G
  747.         dwTotalFiles=1;
    - r4 I; m5 t2 `4 _& c' q5 L
  748.         dwDownLoaded=0;- i2 X* \: ]; U+ |
  749.         bSilentStep=TRUE;& G. c! g* d/ F1 L0 k
  750.         bCompressed=FALSE;# }1 F/ M3 {0 @9 D6 O# i
  751.         strExtLocal.Empty();, `$ S. }8 H* y" p1 d
  752.         strFullName="checkversion.txt";
    - ?$ W9 A0 H6 W$ m( f
  753.         dwProgramState=AP_CONNECT;/ c9 q5 e) Z7 @* Z# |# b% V
  754.       }( H! `6 |& p! K
  755.       dwStartUpSteps=4;
    4 Y# {1 `+ p9 {! \* Z4 Y. u
  756.       break;
    ) Q3 W1 l$ C" S% m' o( o' U
  757.     case 4:9 q1 x+ m# o5 w" J( s, M; N
  758.       {/ |6 |* q# P# r; C6 u5 ~4 @/ ]
  759.         FILE *fp;
    ! w1 k1 T* S2 h! q  d
  760.         char szString1[128];5 @4 p9 x$ }' w" o2 U' C
  761.         char szString2[128];6 Q. B2 K3 ^% \
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");$ \6 V+ p* D: s  U8 F
  763.         if(fp)
    # |# B; O# @& D5 }8 D& B
  764.         {
    ( t9 Z, {! s  q1 Z9 r1 X4 X
  765.           fscanf(fp,"%s",szString1);5 f/ s0 }( l; |4 o; `4 o4 P
  766.           fclose(fp);% B+ ^6 Z0 N* R4 m' ]
  767.           fCheckVersion=atof(szString1);3 Z2 ]4 f+ V; F+ i6 z0 ~" C( ^6 j
  768.           fp=fopen(".\\checkversion.dat","r");
    . {3 }; H8 D- _. x- v% w9 w: U
  769.           if(fp)
    ; W( m' j  Q5 l. J3 U9 y" ?$ O0 W
  770.           {
    * f: A; n9 s4 G) N
  771.             fscanf(fp,"%s",szString2);3 p- x& I/ n/ O( Z9 Q! F0 G
  772.             fclose(fp);
    ' A3 p& p  p( _* {# c
  773.             if(atof(szString1)!=atof(szString2))
    1 h) G6 `, Y# i' h; x7 L! P9 ?6 l
  774.             {
    $ P1 u, K! s( [3 Y9 N4 A1 F$ j2 r
  775.               if(!Dn.Connected())4 `' m" i6 _2 r0 j6 V7 A
  776.               {
    % }& W( Y( n2 x3 Q
  777.                 bFirstUpdate=TRUE;; q+ u. [: f: E$ _
  778.                 dwTotalFiles=1;
    7 r' Z" f0 G6 o% Y" _
  779.                 dwDownLoaded=0;
    % J! ^4 F( {! o. O& w1 @
  780.                 bSilentStep=FALSE;
    ! Q, p# V: |7 n/ `
  781.                 bCompressed=TRUE;
    ! F6 ~3 S. G. o& z0 E4 E% ?. Y; N
  782.                 strExtLocal=".\\DownLoad\";
    / T2 Z% Y' X1 r( `! M5 d9 X  V
  783.                 strFullName="update.txt";5 u! X' J- o3 O" Z& |
  784.                 dwProgramState=AP_CONNECT;! _; P+ o+ O% {2 S
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / f+ k! j  a: `+ X, L0 }) D
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# _# d' S; s/ y) w" O  e7 w) H
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! [% p& Z! O( V2 G  P3 ]! j7 U" T$ \
  788. ' }. V6 K, ?, q# |  M6 r
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % X2 O7 L; Q. i5 X7 D. o' C
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    & N- e; U2 f1 Q6 e- m
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    : J# y& O1 C" q  t: @9 Z
  792.                 {
    0 V7 \; c* j% `. {' Y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    * X0 M2 ?, C( L
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    . g+ ~+ K; i/ ^7 Y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    8 P% [+ u) o' ]4 _7 M
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 x0 F' n9 N  [( {; W8 |

  797. $ `" F6 O  R$ \  u! U
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + l9 w" M# P: r5 M) O
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 d) `$ @8 M* H: g/ K# u+ C. W  ]
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");5 O8 J5 p% g9 k- W  ~# a" ~& K
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ n6 C* I& u5 _5 G0 M$ S
  802.                 }
    9 N0 a% U% K$ J, O3 k/ N
  803.                 dwStartUpSteps=5;& @( t- a1 ]% A5 q
  804.               }
    9 s* n* L3 r2 J
  805.             }
    % s3 P0 u; S2 f
  806.             else. t& x# W' k1 ^# Z
  807.             {
    + _/ x7 c9 r+ ]
  808.               unlink(".\\DownLoad\\checkversion.txt");
    - _. I: I9 q7 g1 J) G
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 I: Y9 v9 ?- c
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");9 P. E/ l5 q7 e1 t  |
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 q  E6 w  t" I
  812. 3 K8 B' _1 _1 A$ m" u
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 q; X) K; @6 V, @0 E4 [( y
  814.               dwStartUpSteps=99;
    % U) R3 K- T, C  }. b
  815.               bFinishUpdated=TRUE;% K5 [* X. O* w
  816.               bCanUpdate=TRUE;
    . D% P( B  K; r/ T
  817.             }) y9 z& C+ s, r& S- o( P0 b) R% w: N$ g
  818.           }5 z" Z; T/ T4 A
  819.           else1 W8 i9 g) f) f$ C& }( H
  820.           {& {. @2 K0 t" S
  821.             if(!Dn.Connected())
    9 i1 D. w# n% }
  822.             {
    8 q1 j) r+ |0 y# T) E
  823.               bFirstUpdate=TRUE;+ g0 T( x3 C2 C" e  x$ W; x
  824.               dwTotalFiles=1;: q, R" N, b) _7 o3 O' ]
  825.               dwDownLoaded=0;
    " }# q) A( _& L  q$ K; A6 _
  826.               bSilentStep=FALSE;
    7 [+ M% E3 R$ [4 E  w4 Q/ R
  827.               bCompressed=TRUE;
    : H9 N1 L' L3 |( @5 W6 x; \2 N$ s
  828.               strExtLocal=".\\DownLoad\";
    1 |! i0 y& b! j3 Z' f
  829.               strFullName="update.txt";& |8 v0 A4 @3 X  L5 N) w
  830.               dwProgramState=AP_CONNECT;9 F+ k% L# \7 o5 G! I1 G/ N  V! V
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");# W' y- J0 e+ Y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ q( [: \/ U) E/ T9 e
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");" d1 G) ^: A+ m! J% I: y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( k8 G! g# C+ U
  835.               unlink(".\\DownLoad\\checkversion.txt");, h, K0 |) y- H  m. M" Z- e
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)* C6 j$ ~, T, f
  837.               {
    ; ]" u9 v4 }4 j
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");, [* r2 V4 J4 g2 d4 p
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
      y% b( s  d% F: j1 C' y- `# b
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    0 T# z$ q# P% c. @
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " q5 `' P/ G$ r! i+ l; n
  842.                
    ; Y; A3 b  G2 ?5 a# y: D' R
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! [9 ~4 H1 d* u" G" s; C: Y
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 N1 I$ v0 A8 x8 O* p( M
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");5 b5 O0 `' \/ _7 z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- |8 `9 T& }/ ?5 Y# P) H: r$ K* `
  847.               }
    # d) j& G( ~. O& v  w
  848.               dwStartUpSteps=5;
    ; H. S# T5 s3 |# B9 P& z
  849.             }
    4 r" ?/ Q# s5 e9 K" ^' J
  850.           }. Y& K! l; V* M: a( y
  851.         }$ @. G- h/ b  p8 r
  852.         else
    5 d8 O! Y" c7 z) q- E5 m) u
  853.         {, f3 }8 B( x$ `8 b& L0 z
  854.           dwStartUpSteps=3;
    ! I4 n) y# u* }/ Q7 f
  855.         }
    2 S6 J; |8 I5 y7 ~" L
  856.       }' f8 ?( m, i0 v. {
  857.       break;3 d$ b% ~$ q% H" t
  858.     case 5:% U, L9 ]' L5 [% S
  859.       {6 y0 T+ N7 h/ q" A0 [
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    2 H- v, O& B$ s& ^& ?- f% y. H
  861.         {
    6 l5 n* [+ [/ [7 A
  862.           int opt_overwrite=1;$ R# |' q) d+ V  J
  863.           int opt_do_extract_withoutpath=0;
      n  v  ^( R* |# G6 N2 f9 D
  864.           unzFile uf=NULL;
    & `% {3 o9 i- p* [' L
  865. & |  k, t$ n. C9 Y- f- C
  866.           uf=unzOpen("Wsa.zip");
    $ o! \1 G4 X1 ]6 B- X
  867.           if(uf)
    / y2 a7 f# r) R4 O
  868.           {2 J: u+ h" Q' Z" W# l# b
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ! ?- H  d* ]3 n$ |/ v2 A. D( r
  870.             unzClose(uf);
      z+ g$ R) k+ z
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");0 Q2 ?1 x% g% |1 s
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ( t  a& p6 }" K  Y: t
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");6 s+ p, l, M+ C- t
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 J% v9 b' x/ n) l3 O6 T# t
  875.           }; K/ r! o5 ^8 J0 c3 N1 O
  876.           DeleteFile("Wsa.zip" );
      b9 ?# q+ U: |6 @( n
  877.         }2 u& c" Y8 d# Q! i: l2 ^7 C" P7 f

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

2 B4 \; \& n4 f) {

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-8 21:22

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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