CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
: F) j) ?1 Y* v& Z: Q+ C, P
  1. / RevApp.cpp : Defines the class behaviors for the application.) ~' ]) t- j$ L' O- d  K
  2. //( m; b8 H  L& N8 }
  3. 7 q1 q( j, U0 i1 a, X4 ~3 u, Z2 j
  4. #include "stdafx.h", B, i3 E: @- K9 V! t. d  n% {

  5. 1 }7 u" H/ f$ z; ^4 a3 t8 w5 t
  6. //#define UNICODE
    1 ?* V* U1 M5 K; s2 [5 W
  7. //#include <gdiplus.h>$ H0 R$ x& h" H2 n, h/ p
  8. //using namespace Gdiplus;# b) O# a1 I8 q* R  Z) D

  9. 4 V( l* O9 X4 N
  10. #include "RevApp.h"/ [4 A; Z6 C# ?( _0 X; `4 `# K2 {
  11. #include "RevAppDlg.h"$ O4 {" R: @% P" _& U' W7 |
  12. ; C* D  c. h: }
  13. #pragma warning(disable:4786)
    ; ^; @. w: `4 E* Q; R; R
  14. #include <map>
    # a( k0 w9 [5 G( I2 h. Y) X
  15. #include <list>
    $ w/ g, I4 R, Q7 y. P1 x" U1 ~  ?& ?. \
  16. #include <direct.h>
    5 n+ U3 ~+ @% p1 a3 Y" S' g

  17. # S" m7 L- L( i/ L+ X
  18. #ifdef _DEBUG% ^0 Y+ m1 q% w% ]- |
  19. #define new DEBUG_NEW
    ) `& q! \2 D8 U2 F# V' L
  20. #undef THIS_FILE
    + _( F2 g; P2 H- k3 O1 E" r8 h
  21. static char THIS_FILE[] = __FILE__;' o* C) w. L  x8 m+ E# |6 E6 n
  22. #endif
    # f9 ?, `+ }: }9 q5 @$ S& ^
  23. #include "SkinResDef.h"
    4 y& B* Y- [9 Z
  24. #include "ChangeBG.h"
    : N" d$ y5 t# o" l$ l
  25. #include "AFXINET.H"- G  V/ w' b6 i+ o6 c
  26. 8 U" {/ @# y5 W4 C
  27. #define TRADITIONAL_CHINESE 08 l  `" o" {6 B; b7 _
  28. #define SIMPLIFY_CHINESE 1
    " g0 n9 Q" r9 a/ [: y  r
  29. #define ENGLISH 2
    0 D8 G6 p1 d9 @1 T; G, B/ P! h4 ^
  30. int m_iLanguage = ENGLISH;7 p( {, Z5 l  B% A3 L
  31. /////////////////////////////////////////////////////////////////////////////
    0 Z: y  r/ y4 O
  32. // CRevAppApp
    5 P; V1 E- g7 ~2 Q/ k

  33. 6 d" w4 i. h+ p5 K
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ( o' F7 B2 W' |1 H5 f, L  w- L
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) c: ]# l1 {' n/ F: H1 x
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 }3 F! I& z, y5 `
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!) I* R: ]: G5 U( D9 J0 X
  38.         //}}AFX_MSG- {6 ?1 X( l4 C' R2 J
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
      N4 i; b- J+ ]9 W# L
  40. END_MESSAGE_MAP()
    ( B  w& O  ~. T) \0 k
  41. # \4 h+ o; @* x; O% X
  42. /////////////////////////////////////////////////////////////////////////////* I* J9 k; S* V9 P
  43. // CRevAppApp construction
    2 b1 \* B: k. r) B
  44. 5 Q0 T/ g, o* P9 r" B$ Z
  45. CRevAppApp::CRevAppApp()) j6 ^; w8 X9 b& Y; q+ T
  46. {5 ^9 V, v. q; W; n: N9 }# v
  47.         // TODO: add construction code here,8 M7 A* j+ h8 E& j
  48.         // Place all significant initialization in InitInstance
    8 ~0 p( K$ W7 z, e6 b! u2 e
  49.   bDisplayIsBig5=FALSE;
    6 x# a% Z2 N! G2 s8 o5 B
  50.   bRestartUpdater=FALSE;
    & D" N& ?4 h: W8 c, e* s; y; O
  51.   bFinishUpdated=FALSE;
    % N; m% I1 f4 G
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;. q. k9 e9 ]$ {# W5 E1 P$ F5 x
  53.   InitChangeDataBig52GBKS();( W" A4 E; ]1 q4 r2 W! G
  54.   InitChangeDataGBKS2Big5();
    * [; P) |8 f. ^9 M4 `* w; ~1 ^0 C* L
  55.         //# V4 g1 |: b# J% |- c6 ?
  56.         bClickRunExe = FALSE;
    1 ]6 m+ e  d. t% b
  57.         //" F4 y, g; u2 c. {) p" y/ b
  58. }8 I6 I- V* h2 O' j/ [! _

  59. # v/ {4 T0 [5 [6 h1 k, t! l
  60. CRevAppApp::~CRevAppApp(). e* G. I0 e, r! z- h. @3 X7 K
  61. {3 i( O. Q6 ]( P! v2 p8 P* K
  62.         // TODO: add construction code here,9 j9 T$ v/ ?$ o  e+ s% b  e# y
  63.         // Place all significant initialization in InitInstance
    5 R8 k1 m9 a/ m/ G: f1 X" n
  64.   EndChangeData();
    5 p  S) e3 H; @/ ?' H; [% y
  65. }( k: A8 I; I4 E
  66. ! O/ b! K' t2 p8 i+ X( }$ H! m1 s
  67. /////////////////////////////////////////////////////////////////////////////4 V( M% N. ?( x4 O- Y& l
  68. // The one and only CRevAppApp object; ]' ]: L4 g! j6 q

  69. " V7 s  c; |+ P2 e# \
  70. CRevAppApp theApp;
    - N- D1 ~: G$ G% t/ G4 n6 C
  71. " m0 s2 S7 s$ p: j3 v$ F
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)$ ^1 a/ q# T& v9 x% _' o* u2 h: h
  73. {, R( e* j0 @- a" b/ T2 I1 F3 n+ U4 Q
  74.   int iEOF=0;
    $ [5 v' S* K& L
  75.   char szTempName[MAX_PATH];% C+ Z0 E4 j7 \  n+ ^! w9 k* Q
  76.   *szFileName=0;
    7 F! t9 t$ }. J) `" S% ^
  77.   iEOF=fscanf(fp,"%s",szTempName);
    % N0 L1 J2 U" m& ^2 M6 ^  O
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')" B$ p1 A  G* `! l3 [. x
  79.   {
    9 _1 Z- z# ]# U4 L
  80.     strcpy(szFileName,&szTempName[1]);/ [' |) R8 c! W8 {* y& F/ A4 @
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF), m# i$ C0 [+ u0 X3 d
  82.     {
    # @: {" c9 |" c) h. t( K
  83.       iEOF=fscanf(fp,"%s",szTempName);
    0 J0 o0 x* A4 U2 s
  84.       strcat(szFileName," ");
    / h9 W" l, I6 M: s4 H# A9 ]
  85.       strcat(szFileName,szTempName);/ L3 A% r) x# f! g# v
  86.     }
      J+ B# Y- M' y$ N# h
  87.     if(strlen(szFileName)>=1). \% Q9 i; h: U- L
  88.     {
    * N4 S  e# ^' c# H
  89.       szFileName[strlen(szFileName)-1]=0;. t, X3 e4 N& b
  90.     }
    1 c( |/ c' g$ u  h
  91.   }% V" I6 k$ z: P
  92.   return szFileName;3 e/ R' L9 u7 U+ z
  93. }
    7 B+ Y* T8 _8 ^% u. o0 x- J9 p
  94. 2 b9 E! ~( ]; r4 e# u  ~: `
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ! H) {" h5 f: `) M8 g) V8 E6 ]
  96. {
    2 A" Y. ]6 [% h- v5 o6 W. {6 E4 q
  97.   FILE *fp;
    + p3 g) h/ v) V. O; C2 `. C& N
  98.   char *key=NULL;" J/ {5 o1 p% B( M  v
  99.   char version[MAX_PATH];7 w' J% C) ?2 _8 N0 ]! F- B5 E
  100.   LPUPDATEFILE file,olds;
    : I! j) o8 A, W! }# `2 F0 Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;1 z' w$ \" B1 @) U8 s9 d

  102. . s7 ?$ q' R0 x8 [1 O
  103.   UpdateList.clear();
    ; z- ]! s9 M5 v$ e
  104.   UpdateFile.clear();# t" S( H: T' p/ i" \* ~
  105.   if(GetFileAttributes(filename)==-1) return false;+ v1 M5 Y4 ^* k) }
  106.   if(!(fp=fopen(filename,"r"))) return false;
    + r8 J0 t  }" p4 E/ n) Y& S
  107.   fscanf(fp,"%s",version);
    " N% Q  X" `; C" a( o. V. m
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    % [9 ]. ^  k0 l
  109.   while(fscanf(fp,"%s",version)!=EOF)
    1 H* ]: w/ N, J1 {$ F# y
  110.   {
    ; K5 X' Q7 K" S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  Y$ M' G' L  V
  112.     fscanf(fp,"%s",file->path);
    * m' k/ i  l8 u( ?! \* S1 d& ^
  113.     ReadFileNames(fp,file->file);
    ' n7 h. D; M6 H$ @1 e1 u2 l( M& J" z
  114.     strcpy(file->full,".");
    : w2 r9 p! w% Z3 O% C9 Y2 V
  115.     strcat(file->full,file->path);
    6 }9 T- S5 Z) C" ]4 d* Y2 h  T/ u
  116.     strcat(file->full,file->file);
    ' F% t2 F: A* N! _, F$ T  w
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())9 B/ k; f; y7 z; C
  118.     {
    ( b) W; \  ]$ R) {) d
  119.       file->vers=(float)atof(version);
    6 K% x6 J8 x5 l3 O* e4 g
  120.       UpdateList.push_back(file->full);
    - _; j6 w  a! g0 Q& L% s
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    . G4 t0 u6 |# I" A) U$ n
  122.     }. P* E, D7 b: c6 T
  123.     else4 Y% s0 `  Q5 u+ k
  124.     {+ n9 Y0 E& X/ _/ S# p
  125.       olds=(*p).second;
    3 r& W6 U4 T) ]+ z
  126.       if(olds->vers<(float)atof(version))
    + u$ D2 Z* _+ X$ i+ @! M0 z
  127.       {  J: M8 H; s. g6 Y
  128.         olds->vers=(float)atof(version);
    ) `; [/ x* @. n3 }# D
  129.       }
    ; L; M: a9 j! |! T6 G! V
  130.       free(file);
      [; w4 G+ f9 {
  131.     }
    , _% m& |6 l$ U5 M
  132.   }, ?7 M2 b9 P4 ?% b( F) x0 b* S; [8 C
  133.   fclose(fp);
    $ C$ O+ m1 ~- K& A5 h
  134.   return true;
    - e0 o7 Y( B8 a7 z3 q4 i; w
  135. }
    - w6 i3 ~; y7 X$ \5 P5 _' @) B5 m- e7 ^. A
  136. 3 a( F! Q) U! R2 D- k8 h
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath); n/ ^) s( d8 F9 Y- k& }% z# F
  138. {; u; s: g0 |* I( j) d2 ~3 K
  139.   TCHAR  szFull[MAX_PATH];
    ! C. P8 x) s/ \$ P* y5 O1 ~- v6 `
  140.   TCHAR *token,*inter;
    & k. ^) ^* l$ n% m0 G# M- y( t
  141.   *szPath=0;
    ) X  N0 c8 t6 i# H
  142.   strcpy(szFull,szFullPath);
    ; E# _, v& t* r2 q
  143.   token=strtok(szFull,"\\/");
    : u7 _7 \) n3 c8 H
  144.   inter=token;
    9 g1 M3 x# R. X
  145.   while(token=strtok(NULL,"\\/"))
    & }$ ]7 {! X' m4 R* @1 |" _2 A
  146.   {
    1 a9 u- g. {8 k5 T, K' k
  147.     strcat(szPath,inter);, |. `- o2 k1 e, z4 e' E- O
  148.     strcat(szPath,"\");
    6 t9 N/ f1 e, I$ {3 Q0 I* }- c4 \) }7 l7 y
  149.     inter=token;
    % |1 {" \$ o2 |  m6 F0 J
  150.   }
    3 ~& q" I+ I8 ~, \& O( W2 R  K6 M9 C
  151.   return strlen(szPath);. R4 Q2 ^% h+ p
  152. }6 Q% o* q: L. u
  153. 0 c  U4 v1 k7 Q5 a9 G$ x5 \
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    0 c- i9 k* t; A6 e
  155. {
    % c6 i& D( `" H0 ~) ?+ u2 @
  156.   DWORD attrib=GetFileAttributes(Target);( B$ n5 g! o+ ]- y+ _) _  k/ `
  157.   if(attrib!=-1)* d; j3 k6 J, v# [$ K$ Z8 O' j
  158.   {
    / q9 ~  D/ I4 s, f6 E5 U% j5 Y* V5 I
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    " [$ `* h! P2 p- v. a2 w) v" O5 D+ L
  160.     {
    % ^# b# a- c% w
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    + U/ o: q( ~# ], M" e8 M
  162.       SetFileAttributes(Target,attrib);! f' C! T& e' ^
  163.     }; v/ a1 Z  b% Z+ q7 }
  164.   }, S4 r) I" Y- r8 _6 ]% x
  165.   CopyFile(Source,Target,Erase);
    8 K7 O4 z: Q% Z$ r0 W* k) ?
  166. }
    3 t2 M. Q4 a1 {& c- Y" X3 k

  167. 0 N, ?1 Q$ R2 T6 o
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ) h/ M0 s, B$ J: b& T- [, X
  169. {* e, J$ e$ {5 {& A% M, a& e
  170.      FILE *fp;- a" R: R! p$ k
  171.      char  szBuffer[8192];
    1 g% v. }5 H3 ~& j
  172.   va_list  argptr;
    & ^. i- Z; C& @
  173. # b1 Y1 a8 F+ I5 C& B" }7 }
  174.         va_start(argptr,message);
    9 s7 m! H7 E2 B) z. J4 {$ Y
  175.         vsprintf(szBuffer,message,argptr);
    ; ~8 G7 B& x: ^" @' p, Q. V
  176.         va_end(argptr);* h( G  p4 Q# T9 @
  177.   fp=fopen(FileName,"a");
    % [" H3 G* H4 U
  178.   if(fp). R9 {2 P) t$ H$ \9 {3 B% a
  179.   {% ?, H5 M1 q. b" x) b8 x
  180.     fprintf(fp,szBuffer);- i9 T+ \1 S  M) e6 {
  181.     fclose(fp);* ?6 Y# |. l( j$ D# L) }
  182.           _flushall();
    5 w5 p/ r1 ?" V4 H+ b+ ^5 U& n& }8 s
  183.   }2 X* y: T( Q! F. Z! E/ h* O2 e
  184. }
    . ]5 g; ~+ z7 A3 L9 I' s% v3 n

  185. : [9 W3 {3 B  W4 B" Z, _4 r: R: W
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    # O* u; r0 K; v# k9 J/ A2 \% E
  187. {/ l0 ~2 j8 k# ]; w/ }
  188.      FILE *fp;" w) g/ _. N7 `2 F
  189.     DWORD  attrib;
    ! d! X  n) J4 g7 B( J) M
  190.   attrib=GetFileAttributes(FileName);
    ! g+ q5 H. ~* |9 z. e" `* L
  191.   if(attrib!=-1)0 D5 ^* `$ J0 B: T
  192.   {' H7 B% L. z) r. J" U/ R
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ' O* t& n! {5 `. S6 l: ?8 u
  194.     if(!SetFileAttributes(FileName,attrib))1 Q) x+ E% j! k8 J; H
  195.     {
    & W, g; Z/ J/ Q# ?
  196.       return FALSE;" l% H9 Z/ M1 x. v! V1 A4 h- r/ ]
  197.     }) P& g1 I0 k0 L- E
  198.   }
    . M& o  ~) d1 d. c3 t. w; o
  199.   fp=fopen(FileName,"wb");2 d; e4 E1 n2 h1 J! D) W+ a# z
  200.   if(fp)  V1 T  }- b7 E# y: d! n
  201.   {
    # e1 ]; T  h' P
  202.     fclose(fp);
    + I! ]) h) S( t
  203.   }7 t# ?4 k" T$ q7 h
  204.   return TRUE;
    6 [9 B+ z* j* E  \' l# \) \! [
  205. }; O# K9 }8 p9 V9 Y' _1 H
  206. . J& T2 k# }0 ?+ u
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ M. ~, U- `5 Y9 \& X
  208. {
    4 A) u! b; U3 D! B
  209.   char filename[MAX_PATH];/ g* s0 l, g' K: N# M
  210.   LPUPDATEFILE file,olds;, `! Y5 M, A$ U9 L- w  K  X
  211.   std::map<int,CString>::iterator i;
    0 I9 g3 H7 X9 {/ G
  212.   std::map<CString,LPUPDATEFILE>::iterator p;: ~/ q+ ^6 ?+ X" W( ^
  213.   std::list<CString>::iterator l;% s+ C! }7 ?" e+ _$ `

  214. , c" {" q  S% X' k
  215.   if(bFirstUpdate)
    ! Z. }( n' V/ G% {0 Y( v
  216.   {
    2 S9 {" |0 W# y3 f4 x
  217.     dwCurrFile=0;; x/ S, F. Y9 H, G/ b
  218.     bFirstUpdate=FALSE;
    ; Y& K7 B5 \8 O* b
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      D: u1 m+ ?/ N' }+ X; b
  220.     {# Q8 }5 o/ T# W
  221.       dwTotalFiles=UpdateLocal.size();5 d- D. ]7 [0 W: h
  222.       dwDownLoaded=0;+ D' K; w, e9 @6 I% H
  223.       bSilentStep=FALSE;- ?6 p& Q# F+ x4 M: g0 w$ N
  224.       bCompressed=TRUE;
    # f5 ]9 L& K, J7 Y$ X5 l
  225.       strExtLocal.Empty();7 P- `  i* h% i
  226.       strFullName=(*i).second;. W/ T; {( l! Z, R
  227.       dwProgramState=AP_CONNECT;% \# F" r; C5 q
  228.       return TRUE;+ d2 ~+ j/ Q( `# W2 [9 g% ^+ O2 p9 h# e
  229.     }) J  i- H8 `, |) [1 \
  230.   }
    " D  P' C9 V6 o3 H* W& ?$ M, b
  231.   else if(bRestartUpdater==FALSE)4 b. b# Q: V6 }( F8 k3 Q- S
  232.   {. H1 @8 b1 p/ H; a/ v
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())% q! U: r5 `& W1 c* Q5 A2 s6 z
  234.     {
    ( e4 j/ P, r; t5 M& u- z9 j
  235.       file=(*p).second;0 j+ g  f! p3 M& n
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())  U; ]3 Z$ ^! k4 ~/ f! n4 S2 A
  237.       {
      q9 O6 C) f' @$ l/ h) n, P- K0 l& V2 D
  238.         olds=(*p).second;
    5 e% V, f: B  F6 f3 M/ |
  239.         olds->vers=file->vers;
    / V3 [8 D$ E& a6 ?
  240.       }/ z, g: ?5 n# N% Z! M! n
  241.       else& F# L' I5 i- y3 J
  242.       {+ G8 P: e2 M. _  K3 M$ S
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  S/ \; S* ]2 ~" I
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    3 U; b8 o3 K' m% n  r7 G& E
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));& o$ G2 W/ g5 e' {* M8 _1 I
  246.       }" w+ s( w; A' b6 f
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    1 ]0 X9 a& B- O& C& C
  248.       sprintf(filename,"(%s)",file->file);
    $ h! z$ J  K) l
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / J6 J) I; \1 K1 \8 W- ~+ L) [
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    3 ^" I! {' A$ }' n$ g8 X  k
  251.     }
    " [" R' f" U3 q4 n+ v! }
  252.     dwCurrFile++;
    9 C3 k  ?# T1 k  Q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- Z1 E- D! ^9 v) j( g1 v
  254.     {
    5 M+ |/ E' Q4 O' s
  255.       bSilentStep=FALSE;6 [1 V7 L! U& R" }
  256.       bCompressed=TRUE;
    / s7 E( q* G/ L- Q" T! q+ i
  257.       strExtLocal.Empty();4 A# g. C# M1 K
  258.       strFullName=(*i).second;3 R+ f- [; P) G/ q  W6 N. M
  259.       dwProgramState=AP_CONNECT;* w; U* p6 |  j
  260.       return TRUE;0 p  V8 E4 U; F" i9 H, J' j9 ^( E
  261.     }, S: O" O& \' O/ O4 Y
  262.     if(!bRestartUpdater)
    9 W0 h9 A/ G% f2 @5 g
  263.     {
    % [! F! Q" W' y  N$ X
  264.       int iCurrSize,iFileSize;
    4 }1 \& V/ t3 }( X  ]5 O) l. x
  265.       iCurrSize=0;
    6 x4 Z! b. t, k. }- m2 f
  266.       iFileSize=UpdateList2.size();
    , [7 d  }: N0 g
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % |# ?7 l$ ?4 K8 _$ N
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");; b! q9 A( U4 G
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");9 o2 l+ {  L& v
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + H1 a7 S, Q! J& L
  271.       Fclearf(".\\update.dat");: j6 \/ f2 Z" B( A' ~
  272.       Fprintf(".\\update.dat","Bloodyf\n");5 ]- x& u8 I, T4 b0 h, q+ h# w
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 R* Z* b+ S8 Z' I- l" r( f
  274.       {% Y$ B$ `. A- j' d2 i* m4 y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    - P' Y0 D5 ~! c5 x
  276.         {- J$ U5 z; P: d2 ^# N8 u
  277.           file=(*p).second;
    - G4 x1 m6 V, ?
  278.           sprintf(filename,"(%s)",file->file);5 }! E0 y8 k0 i2 `' V) {" w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 U- i' @7 e  L# Z% Z9 K
  280.           iCurrSize++;$ n+ W, E% d" F( }! G
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    4 T& {$ F0 _/ X8 y3 `6 ~
  282.         }
    5 n7 _9 u% D8 Q5 f$ k  h0 f
  283.       }% e- _. [5 }9 F* u, h: G. u
  284.       unlink(".\\update.txt");
    ; B- c; m3 }' f/ t5 U; Q8 q
  285.       unlink(".\\update.tmp");/ R) i+ J7 ?4 E/ s
  286.       Fclearf(".\\checkversion.dat");
      f" w) [1 b5 L. ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);- Q" a9 J  G& ~5 L) @
  288.       if(UpdateLocal.size())
    3 D6 D" F% s6 B/ \. _
  289.       {
    , s- N; j; Q7 a/ n4 j3 b
  290.         UpdateLocal.clear();
    . I3 O* \* H* C# L; \' q" q
  291.       }& u0 X5 [6 T0 q/ R) o* P: c1 x
  292.       if(UpdateFile3.size())
    ) U6 n# p' }$ J$ `1 ~. m. y% _0 @
  293.       {
    1 a: y0 w! ]. Y1 a
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 o/ @' Q2 i7 `6 K  o) f! \- o
  295.         {
      }) j# u$ h% A, Y8 p
  296.           file=(*p).second;5 I3 P+ t2 ~, l8 _0 q7 I
  297.           free(file);$ P: d  f6 o$ d- V$ _  n
  298.         }) g% e+ J- U3 N# c( L
  299.         UpdateFile3.clear();; A! D! ?/ T, M4 l5 S
  300.         UpdateList3.clear();  V( }: |9 R7 E. @/ t
  301.       }. l7 k/ I: r' V2 }" {, r+ K
  302.       if(UpdateFile2.size()), U! }- Q  M  t2 D  X  C
  303.       {
    8 Q1 I4 K; c5 y# f1 U* f
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). B9 Q0 F6 i- L, x$ g2 g6 K
  305.         {* `6 |8 }1 G  L
  306.           file=(*p).second;
    8 i6 t' N6 p- J
  307.           free(file);
    7 }, g1 T- \$ H
  308.         }
    ( N8 S5 k" J7 ]5 a8 A! n
  309.         UpdateFile2.clear();7 y. k; z0 D1 K3 h
  310.         UpdateList2.clear();
    - r& `- K4 @1 B% G. E9 S
  311.       }
    ; f8 j; V: O; v$ Y7 w3 P4 \
  312.       if(UpdateFile1.size()); {$ m: q0 V8 L; E6 X: D  U9 L
  313.       {, q, `* b: ]3 I& f
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 \; e) u# P9 e4 R3 i. p1 M
  315.         {
    8 s# j7 f" R6 ?# g  j- Q
  316.           file=(*p).second;( V( {" \2 P; b1 |* a
  317.           free(file);
    4 ^) k" w' E7 v  C
  318.         }2 F2 [* e0 x6 d. n8 [; B) l
  319.         UpdateFile1.clear();
    & v8 e8 v' S: A* C; X# J
  320.         UpdateList1.clear();
    - g* K( A) H. J& p  d
  321.       }
    - u6 j0 o5 Z$ Z& B( g$ G2 y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));; U# z1 X( G6 u
  323.     }2 E$ h; ~/ y) \5 K; Y( ^- R# b+ O
  324.   }
    - v9 _) B6 z6 Y( p9 {, t  Z+ E; S; s
  325.   return FALSE;
    ) R% J" k. _* w" A9 }) k
  326. }
    ( N9 }! L& i+ V6 O
  327. + b( s( s5 ~" e5 Y8 V8 `3 C) q: X
  328. void CRevAppApp::ClearAll(void)
    5 r5 n! A. Z+ P4 T
  329. {) z3 n/ E1 E# n( m
  330.   LPUPDATEFILE file;
    ( ^: g+ H0 ]- R" ?$ W: r5 _; d
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    / {( r* A6 |: E9 o3 J

  332. / |' E- w4 e8 y  q3 w( l) [
  333.   if(UpdateLocal.size())
      ?3 U0 `1 @+ R
  334.   {4 F+ @  j: {: i: y
  335.     UpdateLocal.clear();
    ; y+ N$ e" `' g5 t! c' |' n: y* t
  336.   }/ r* s4 D+ W' d* ]- E: ?3 n. x
  337.   if(UpdateFile3.size())5 {, z' G8 U$ `# w, N# M$ D
  338.   {* {( x% q( G4 l1 M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% {( x) q" e! D
  340.     {
      w# E& c# L7 n6 p& A+ B& n
  341.       file=(*p).second;! y* m. w7 B3 M0 z2 V
  342.       free(file);' @$ }& G) a2 X4 g0 t. r
  343.     }
    * T5 |0 Y3 {; z; P1 y3 k. @% N/ C
  344.     UpdateFile3.clear();
    + g1 q: S  l: b1 b0 p
  345.     UpdateList3.clear();
    ) N8 ?, }3 W0 ~+ s
  346.   }
    7 V( b; s2 {0 U# v: }3 W
  347.   if(UpdateFile2.size())
    ' v* V8 Y* ^# D0 }% z, K) S
  348.   {
    7 l5 w! y- d: E
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . c  `% G% }8 O9 t
  350.     {; U8 O% K4 a( U7 k2 `
  351.       file=(*p).second;! M; l7 n! H1 y+ R7 l, v
  352.       free(file);* t  R4 U0 }: h1 R! b: S
  353.     }
    7 M5 [0 S) J* n5 B* D; ]
  354.     UpdateFile2.clear();6 x/ j- i) M+ q3 ?2 z# d1 O
  355.     UpdateList2.clear();1 U' u( r6 j# \& e) W8 J9 {% h5 ]
  356.   }
    . u. h% L, }% T( d
  357.   if(UpdateFile1.size())7 K" a4 n/ }+ |, \4 A8 {
  358.   {; s9 I" K+ X# B" v( m! t, a3 J: e
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 o4 q5 S. o' ^+ U; g! \+ j4 \
  360.     {4 m, s) Q- M; J6 C- ]! X
  361.       file=(*p).second;
    7 E- k; S% n1 u6 @, L, K$ H
  362.       free(file);, u" x- G# u! @( J
  363.     }
    ( `/ i/ t' O7 X2 o8 j9 _1 J5 ?
  364.     UpdateFile1.clear();
    4 O% Z$ f: [- O$ e) _
  365.     UpdateList1.clear();
    8 ^, u+ k$ E7 }) S5 `0 V+ d
  366.   }
    1 e0 N+ V9 q1 ?
  367. }  % {& ~$ u( _5 n$ f8 W( @* f5 H
  368.   / ^" [* c- Y* E' f* P4 ?5 x* s
  369. BOOL CRevAppApp::CheckLocalVersion(void)2 X, ^0 V2 p; M% U9 Q* y
  370. {' _5 n" W; c( T7 ~( s
  371.   int c;3 Q0 `& l9 m. w. q+ [( s; S
  372.   LPUPDATEFILE file1,file2;5 U, G/ F3 R# b1 c' [& P3 ?' @7 a
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
      ]% T6 Q$ K& I3 C
  374.   std::list<CString>::iterator l;
    1 P$ d+ A( f* U" P6 b$ K
  375. 8 f, D: g0 w. R4 ]1 g; }
  376.   UpdateLocal.clear();* O9 ]3 t$ a; o: u# R9 f- z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);, v- o2 k0 H4 r  d- R7 y% B
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);  w2 N0 J% N$ ^4 O
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);3 e. Z0 |- {9 R2 b7 T8 x
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);+ e& h8 r" H" V7 x- @* b
  381.   if(UpdateFile3.size())* t" O  n5 E. g1 F/ R
  382.   {
    8 |2 {. h/ y9 ?* d
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)* P# q. C. s7 B' ^$ Q. v. }
  384.     {* o9 C8 w5 ?# M( i2 `$ D
  385.       file2=(LPUPDATEFILE)(*i).second;2 D& q/ Q6 b2 S' o) M
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 y6 q- a5 n/ f
  387.       {
    + V8 I8 E* V' B7 ^- x) M
  388.         file1=(LPUPDATEFILE)(*p).second;
    " \- x1 j8 Q, B2 N: Y
  389.         file1->vers=file2->vers;- b+ `4 l$ B0 j2 f, F; C
  390.       }
    2 h2 O* A0 [$ L
  391.       else+ u2 H9 z9 J, t& d9 f6 z4 f3 j
  392.       {$ v" ?9 B4 H- z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 G- C9 F0 P. b( J+ a; U5 P6 _
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( }6 ]. V1 T( ?
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));# z3 Q" s# [! e+ w2 b4 {* C
  396.       }& B5 a9 P0 n) z- V4 i
  397.     }
    " D" `" x+ A( z  j. \
  398.   }! `. _! p. R9 P: m. U& z
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 r/ P& g  M! ?$ u3 I. M7 t
  400.   {
    ' d- y" n- v+ j6 f
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- {5 I0 D( A" {
  402.     {, J) N$ K+ O. Q& y. M& s
  403.       file2=(LPUPDATEFILE)(*i).second;
    . f% r, z+ r) Q/ J, G
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ ^5 L3 X8 V7 Z3 x& z
  405.       {, W+ ]3 a+ J/ x3 b1 S4 i
  406.         file1=(LPUPDATEFILE)(*p).second;
    " n, L, W2 t1 y7 h. x: d- `
  407.         if(file1->vers!=file2->vers)4 `( `$ a7 l* G; f. h
  408.         {
    ; d' |) K1 M8 t$ m, ~  h6 O
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ d8 J* Z7 k# C7 ~- l
  410.           c++;* p6 G' b3 _9 y( h) y
  411.         }
    7 {( ~4 ?2 l/ B6 ^) a: J
  412.       }5 I# I: o" ^9 N  a7 k1 N
  413.       else
    / q9 T) F) X. z/ Z: a
  414.       {3 R2 F  E3 M. ]3 f% }2 Z0 n
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ; U/ u& w! c" |
  416.         c++;
    3 M) S3 O* {. e. G2 i
  417.       }
    & f, d4 Q4 g$ Z' y, y# i7 K+ r. x  S
  418.     }' F0 I4 @% T" f& i9 i
  419.   }9 a3 C5 f6 L5 M6 w6 c/ ?; z9 l
  420.   unlink(".\\DownLoad\\update.txt");
    5 k* ~1 T( U0 Q, h( p  h' S
  421.   if(UpdateLocal.size()) return TRUE;4 X2 N# k! z' P: W( h2 N( c
  422.   else                   return FALSE;
      b# r& S$ n# r, P1 e/ R2 ~2 s
  423. }, O% P$ d, |: K/ p# s$ @* c% J

  424. ( _" A) x( W% X
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"% p+ s0 Y) x9 L
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"4 L) S  U. q. k, j
  427. , r+ i. q  d2 z+ \
  428. 8 A: q# ?2 @+ s6 p6 m% @" c5 J

  429. ! ~# [2 i6 F0 v4 C" I* C* N
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)7 f" Q5 s* w  [/ [
  431. {( i0 b/ X( W, h, O' V5 v
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    # @" u4 K) g8 b0 \5 p# Z, M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 X$ Z& r8 d+ j- c, K: m" M5 B
  434.   {
    ; r3 q/ K$ \1 s0 e+ ^' V
  435.     char szLanguage[50];
      Q8 n" g0 L) v- z& t
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + z* ~( p3 N( P- W5 p
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. T% _+ ~5 G8 S% @
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 v9 m. J0 ]9 W2 [9 f. J
  439.     else                                   m_iLanguage=ENGLISH;
    " ^& \7 O# K% i8 I$ j2 {
  440.     char szRegister[100];$ P* I( S% S' w/ s/ B2 g
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% D; l7 H1 J5 f5 `, b8 `  W0 _
  442.     strRegsName=szRegister;
    $ o5 ~" [5 [8 ~6 [# t7 s
  443.     char szPatchURL[100];# R8 c* j8 q6 F% m- K: Z  o
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ f; B: [' I: [
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);! R9 S9 J3 ^8 \' _9 a! L" `
  446.   }
    - y9 y( u6 M4 I. z" T( ~5 E
  447.   else" N" e4 r+ N  o! H
  448.   {
    * e7 k: u* Q& V$ V# b! J
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 e" M7 C- L8 t( a6 L7 k
  450.     strRegsName=DEFAULT_REG_URL;4 H, {, B+ s& ]: Z6 ~
  451.   }. I' l9 a, w8 P
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ; E4 z9 \8 ]& g; o3 H, J# M6 W9 }; W
  453.   {
    $ G: r/ b* u, Y! M( }3 k1 |
  454.     char szIP[50];% }+ K$ L7 Z! L" k7 h/ p3 M
  455.     char szDIR[300];
    , h, ^4 H+ y' h  q, z6 u$ g
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")), d' }! a+ i/ F( L
  457.     {
    8 d9 I  |3 H! c" S: g: D  y
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");6 G! z4 W0 t5 a4 x# o% r
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# o- f6 {! u7 w  l: f, i8 _# F
  460.       strHostName=szIP;8 g; L  b( S4 C! Z) N3 e1 J
  461.       strHostPath.Format("/%s",szDIR);/ |1 Q. @5 l2 @0 T! a
  462.     }# m" p( P/ V1 l3 t- c' h
  463.     else
    5 z* t1 l+ k# u% }, H2 M
  464.     {
    * p, l- x. u% G1 V: N! v6 I! {
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : F7 T8 s( N, e9 J& g5 o3 Q- h
  466.       {& d9 N! G8 [/ ^* c0 w' U$ [
  467.         char szLanguage[50];" s5 b, U  V- b. h/ m6 C9 [( i1 H8 ]
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) {/ J% I. N. |+ _
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% Q' K+ f) |# Y: c) m. y
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . \: K* C" }; s/ {. H/ `! ?
  471.         else                                   m_iLanguage=ENGLISH;
    " ^7 R( @9 q1 `1 q" s
  472.         char szRegister[100];% }, ]; \! T3 e; \
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + v0 T: B0 E% n5 \8 g3 n5 B
  474.         strRegsName=szRegister;
    2 n% W( G3 d4 A+ s
  475.         char szPatchURL[100];, q. @8 Z7 Q) ?% l- s, V; e1 C
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% B0 f3 o. R& E
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 u- Y" D4 }. c1 q5 U
  478.       }
    3 R2 m; i/ W( ]: D$ u
  479.       else4 Q6 Q6 P1 X" e$ F9 ]1 p8 U" J+ ?! h6 D) {
  480.       {8 M8 P, D2 n; P- B2 C1 U0 Q
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 E. u9 |3 o2 J' J0 K8 c& e
  482.         strRegsName=DEFAULT_REG_URL;( Q; R6 A( o  Y: o. Q+ }
  483.       }
    9 C) O* v9 _# x/ S# b6 \
  484.     }
    ( K8 g: ?0 \, Y! w4 J7 x: S0 F
  485.   }
    : i% {$ A  Z$ p5 Y# i
  486.   return true;
    5 X" O$ S& b, v( Y; d/ U- Q
  487. }
    9 R3 Y+ f6 v# [8 `* Z" h

  488. * _  S! d7 }: k2 j1 t
  489. #include ".\ZLib\unzip.h"
    % D4 r+ Q. g4 i' l" i6 @3 A9 Q* P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);& l, a' X7 E2 ^0 p
  491. /////////////////////////////////////////////////////////////////////////////
    ) F- i- e% a' ~" {7 a
  492. // CRevAppApp initialization
    ( G/ f5 u1 ^6 |+ E5 R& S
  493. # b5 p+ \; ~- A( u/ t! }/ t
  494. BOOL CRevAppApp::InitInstance()
    & y# N# S' E' \! O
  495. {
    & Q# C  Z/ B4 B8 S
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    8 u) e7 c# |( p6 _# }7 u1 U

  497. . n. l. a" Z1 Q2 l
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    8 r4 G. I& k2 {: r
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))1 D8 z  g7 O3 h6 f- N) \# i! I7 W
  500.   {
    : v2 @) o7 T9 k5 D& c
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    5 S2 m7 ~( I: H- c' @, e
  502.     GetPathFromFullPath(szPathTarget,szPathSource);. H( c9 V; B; b  y" Z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))/ F' i6 [4 Z1 ?! \1 x
  504.     {
    4 h9 [( j! ~! G/ f' v
  505.       strcpy(szPath,szPathTarget);
    % y' g! N+ A" ?. D8 _, ~# W
  506.       SetCurrentDirectory(szPath);+ [) z2 J9 Z9 b- N+ s
  507.     }* x8 V* Q+ @1 I: p! s: Z
  508.   }$ U; a1 G2 `4 V6 _1 o3 c9 b
  509. #ifdef _DEBUG
    ( i! ?  k6 S' A0 w
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) a) k- d  l$ d+ V6 ?
  511. #else
    # Y& F  j4 R( ^% r' k* e
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 X8 q/ D7 g8 J" \9 i
  513. #endif3 |8 k: s/ r7 ]) @
  514.   {
    2 C  {; j) e( ~/ F" D0 j4 w8 w- q- ~7 f
  515.     char tempFileName[MAX_PATH];
    & I. u+ o7 \6 @, q
  516.     strcpy(tempFileName,szPathSource);
    * i  i  p* G" h6 k: U' ^( q
  517.     tempFileName[strlen(szPathSource)-12]=0;
    " W0 |  D& }$ Y0 n( K0 L; r
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    $ S$ O, h7 r8 y! Z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);6 y- c8 H$ H2 W1 |% }4 ^2 k
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);' {" J/ A, \* y
  521.     return TRUE;
    3 q, y" A  L, {+ Y3 ~5 h+ l
  522.   }
    & z# I1 o1 ~4 ?; q, W( C! X
  523.   // Nuke 0118: Delete run.exe) E+ t. y+ a0 l* X8 n
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );: v, N) [, r5 j3 ~: {9 V
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    " `7 y! a: B9 }3 ~% S( \" A
  526.   if(!ReadCfgFile("Config.ini"))
    - j3 a. V4 r$ G1 v' S  k3 L/ E
  527.   {
      p% q# k- O, d! P- y6 J: G
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);' B" b" \; X# _1 A$ N
  529.     return TRUE;, k: L* }4 n! n+ _8 K- x* e: M
  530.   }1 t: P3 ?2 u" V& Y* t. F/ X. ^
  531.   HANDLE mutex;
    6 i& Q# `0 H2 Q- N
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ; {+ \* Y7 h4 i$ O# o0 e5 i) _5 X1 T
  533.   {
    ; f! q4 {% h- W+ S' s* a
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    7 u! \& o4 M+ P
  535.     {' @3 C. H  n& ^8 U. N+ X9 A
  536.       CloseHandle(mutex);
    # ?( E3 a3 h! g* Z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    # L, L1 S9 a0 T7 @
  538.       return TRUE;: N" |, W; |# ?2 N' ~
  539.     }, w  w; s& M& J: ^- {$ K5 B
  540.   }  4 s0 [1 v# _1 g8 B- {" \
  541.   CloseHandle(mutex);
    / G# W* {7 h. j6 ?

  542. 2 e- E2 Y. A0 x8 F! W) C
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);1 q2 T4 t. @' C9 V2 g) X% y" x* b

  544. * x& G# o9 N4 j( r, a
  545.         AfxEnableControlContainer();- G7 {8 [- D# L" F# X8 e" P

  546. - e+ N6 @% X: ^' n
  547.   bCanUpdate=FALSE;9 `& e' Q+ _: l, Z: X
  548.   dwStartUpSteps=1;/ z8 {0 z* W7 _
  549.   dwProgramState=AP_NOTHING;! W5 p2 S1 l: [: [% T# a" z: {* {
  550. % R8 G- ^6 e! k
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);5 t# z5 m7 W6 f, ~; X/ J8 |: \

  552. - ^' e* K6 f6 x$ [# D" v5 R- V
  553.         // Standard initialization+ `* I' [, g1 `& P9 k2 }8 ?
  554.         // If you are not using these features and wish to reduce the size+ ?$ E' J2 R% y% X; }4 C7 H4 J) ^
  555.         //  of your final executable, you should remove from the following2 D! q+ _9 v, A4 l( }0 R2 B0 [; w
  556.         //  the specific initialization routines you do not need.
    3 G; M6 N% n! j8 T( ~
  557. ! ^7 b. k# i% \- \( j( V4 B1 s
  558. #ifdef _AFXDLL
    ' g* V- H) k3 P1 P& U7 G
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL- c$ T% h+ P9 n4 R
  560. #else$ X( s# I$ o+ H/ j
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically/ g) X  {. c) u, v4 \7 z9 _' h
  562. #endif
    ' u4 U: p4 I! J# Y% ?
  563. , Y8 y$ @9 q. Z
  564.   dlg=new CRevAppDlg;% `# I" b5 u  l/ w% G
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    $ Z% [6 z+ h: e) K
  566.   dlg->ShowWindow(SW_SHOWNORMAL);1 R. P% D) h/ ?
  567.   m_pMainWnd=dlg;
    3 p! b  ]! Z+ e) p' x* B# i& K2 M

  568. + }6 J- ]$ r" W- H0 a- H) X- t
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);  s  q* R. i7 Y/ {3 J

  570. / {9 c/ i: @- {! u' ^! }1 \
  571. //  GdiplusStartupInput gdiplusStartupInput;
    5 e1 p: m! N+ S
  572. //  ULONG_PTR gdiplusToken;
    # E7 m  t: A' t$ V5 m* N4 E2 Y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);$ O# ^% E" l; b6 R$ W+ v' l

  574. 5 T- y2 F9 ^$ j$ C% T! R
  575. //        CRevAppDlg dlg;
    7 r* U+ q3 y% s3 b
  576. //        int nResponse = dlg.DoModal();
    , y. A- m) i/ V0 d2 k, [
  577. //        if (nResponse == IDOK)4 [3 Q" q7 a/ i+ R1 ~& e
  578. //        {  z7 }- q3 h' E: p  Y8 s( I( \7 s
  579. //                // TODO: Place code here to handle when the dialog is; t5 x) F# o! d* W* Y
  580. //                //  dismissed with OK
    + _6 \1 u5 x7 d7 u9 Q! h- ]" W
  581. //        }, B9 N6 d: K4 e8 {/ H
  582. //        else if (nResponse == IDCANCEL)' ~- x! e) K4 a
  583. //        {: W" j0 {4 q9 Y& @# ~
  584. //                // TODO: Place code here to handle when the dialog is
    4 x; \+ u1 U2 t+ s, P2 [% m0 e
  585. //                //  dismissed with Cancel
    ( o5 p3 S/ ]  e1 W: y3 z
  586. //        }
    3 d% m3 M# S2 E
  587. - y6 j. u% \0 m1 S" U  i% a' a' k
  588.         // Since the dialog has been closed, return FALSE so that we exit the7 |+ v8 c* l* c, c
  589.         //  application, rather than start the application's message pump.- F5 o% l$ C) s- m' y' Y8 k
  590.         return TRUE;
    % _8 T6 M" f' ?0 r- B& m
  591. }( P$ |8 f* N. U6 I, ~2 L1 m

  592. 4 P+ O. Q* Q% R- x2 g
  593. char *CRevAppApp::strtok3(char *pSource,char *token)' q4 n& c  V6 h+ ?0 t0 \. z
  594. {- D+ }8 J5 N  J. ]2 T
  595.   int i;
    # f4 f/ q3 J/ {& u: w8 _' o
  596.   char *szRet;
    , L/ @8 @, d, P3 n

  597. 5 W/ \1 b5 U& v8 K$ ^
  598.   if(pSource) { itoken=0; sztoken=pSource; }8 s% I/ i0 M4 @) W
  599.   if(sztoken)" Y# A1 w+ Q$ @/ Z9 J
  600.   {
    ( L! V5 X5 j" c9 K
  601.     szRet=&sztoken[itoken];
    : }4 ~' a1 G8 y% y/ [0 b% V
  602.     while(sztoken[itoken])
    ( f# j* F2 z: G  n# f% N
  603.     {- n$ |+ i. h2 h4 y) z9 |
  604.       for(i=0;i<(int)strlen(token);i++)0 |  d3 h8 N& ]( G; s( n% B
  605.       {
    - D/ V2 G( l3 ?
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])- s, U; T# [2 Y/ ?& w
  607.         {' b3 Y3 u5 P3 {! R9 n) \3 \
  608.           sztoken[itoken++]=0;
    4 ]3 B* ?) q6 |9 b& O# m
  609.           sztoken[itoken++]=0;2 C  p: p# Q( V5 g5 b& {
  610.           return szRet;
    * H2 z9 y  z' Y' M5 G, h
  611.         }2 s& J* O9 g  \' a; h3 V, S! {
  612.       }/ Q4 i1 A. p5 n5 Q
  613.       itoken++;
    ' H# H8 b- p0 f1 s& g
  614.     }" a5 _* }2 K4 F  e3 A
  615.   }
    9 v/ @5 F4 y, K2 D- e9 U0 h" s
  616.   return NULL;  G: M, {. o$ c
  617. }; j! k- C, U+ i& A
  618. ' H4 l5 Y  Q3 F" p/ {; e
  619. void ProcessProc(long Total,long Current): T& M# a/ I$ r
  620. {
    % m7 c4 m' l. J5 `7 Z- W1 A( ^5 {, @
  621.         MSG msg;! M) }) t) U+ [5 |- h# M& y
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);8 i/ t! _! ~1 @( [6 z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    3 L, @. D6 q0 B4 E+ |4 H% T4 G1 A; j
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 j4 ^, ]) k7 ~$ l+ m* {5 F
  625.         {) U5 ~9 T8 d& W9 Y7 ^' N
  626.                 if(!GetMessage(&msg,NULL,0,0))+ G8 }3 Y' \) C$ Z
  627.                 {+ [9 S  O1 ~) N9 K$ S
  628.                         return;* [1 ?/ k. n3 U* q0 S+ `
  629.                 }
    ; a/ @  Y; R$ W; k
  630.                 TranslateMessage(&msg);! ^% J, c& ]+ R; K* Q
  631.                 DispatchMessage(&msg);& q, H; r5 ~) r; X! L9 L5 y2 B* i
  632.         }       
    / c2 K6 a) ?* s4 y* j0 @
  633. }- x3 U* c1 r) x8 N$ I% @  ]
  634. ! Q. q, Y4 `! E$ l: X4 B; f
  635. BOOL bFirstChar=TRUE;
    ' v$ \% e' S5 a& ?1 |: T2 K6 E: Y
  636. 9 X3 f; y2 i4 x& `
  637. BOOL CRevAppApp::OnIdle(LONG lCount); |( w) k. i( J5 s4 l$ y: D8 m
  638. {
    - U) ?  V  }+ G3 V
  639.         // TODO: Add your specialized code here and/or call the base class; o4 L" D3 K( A& d2 q
  640.   switch(dwProgramState)" n  z' B7 N8 A: a/ b
  641.   {
    1 e0 d( b! c' @( @7 E5 c1 o  v
  642.   case AP_NOTHING:5 O/ K; O9 C+ n5 L+ o
  643.     switch(dwStartUpSteps)& f4 R1 n' y3 I9 O, `
  644.     {
    0 ]# S: r6 q: {! K1 M" D5 @
  645.     case 1:' p0 J6 C0 S( R
  646.       {7 s# ]9 g) z) S. _$ Q" ~
  647.         int i;& d5 e: S5 G5 t  G, K
  648.         CDC *pCDC=dlg->GetDC();" B" ^8 P" l0 U! F: t7 \/ I
  649.         HDC hdcwnd=pCDC->m_hDC;* R8 V& f4 [7 s( l* k" e3 L1 H
  650. //        Graphics graphics(hdcwnd);
    , X- P$ y% t1 {: a! T# ^
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");% G4 _% W. D& P! j: ^# H* d6 g
  652. //        INT iWidth=bitmap.GetWidth();
    8 K# g! a" `. C4 ~! n
  653. //        INT iHeight=bitmap.GetHeight();
    4 H0 |7 d. \6 @$ }
  654. //        Color color,colorTemp;
    2 F7 Z; C6 r" X$ u  M7 I
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)) I5 X- ~6 r. N: `! R$ R* T4 T
  656. //        {: h, J" M0 j+ L* l
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ) M7 m& }! T' r
  658. //          {
    0 A5 |8 l2 ~9 h8 ?( ^: p. `% u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);% v9 Z! V3 ?7 A( e
  660. //            colorTemp.SetValue(color.MakeARGB(' q% O" {+ ?7 o0 Y* r
  661. //              (BYTE)(255*iColumn/iWidth),
    . E& L" S8 }  T6 C' a6 ]: N
  662. //              color.GetRed(),
    . S8 R' o  q( f2 p! Y5 p4 V
  663. //              color.GetGreen(),
    1 ^+ P8 c$ k5 T4 f2 c& y
  664. //              color.GetBlue()));9 {9 q5 u2 E) J8 h3 a
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
      n  @9 ?  e" g/ f+ Z6 A
  666. //          }
    % ~1 q" n$ `: R" |$ n
  667. //        }. J9 k+ v( ^" Q3 N1 X4 I5 l
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 m) U  h; X  q8 }5 }5 p' g
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 l0 }7 M; R/ [0 M5 k4 }7 _
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    , n  n3 A- ?0 [7 q+ J/ Q; e6 `, Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 R7 s% }4 I; B3 F/ o' c
  672.         for(i=0;i<240;i+=8)$ A+ X2 L- i7 Y( a
  673.         {' v( E5 ?4 Z4 J0 S
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' B6 [6 e6 d, F; F
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - X- Z( Q' N5 e5 h+ e3 o, [# M
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);8 ^7 z9 N; f0 @7 O4 C( a. {+ v: d7 u  _3 k
  677.           Sleep(33);
    " l1 v7 f3 {5 N) P, E
  678.         }
    4 z& Y2 I& E! J+ y8 c  v9 Z
  679.         Sleep(1000);
    9 R6 w/ Z6 H  G$ ~* ^
  680.         for(i=240;i>0;i-=8)- g* H* W: C3 |" j
  681.         {
    ! r6 M! d: p* P4 D" j
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * k# G$ ^5 d5 G8 N& k0 G/ t1 G+ z
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# Y! B3 J  g  F. `6 h
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / d% m% B* P, {5 m! G( o
  685.           Sleep(33);( n4 ?: ~  {: C8 c
  686.         }
    : M. f; }+ J! t+ \' S
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);- P& C% q2 H. E1 N+ \
  688.         dlg->ReleaseDC(pCDC);0 m8 z  Z" |7 K. ?4 U1 {
  689.         DeleteDC(hdctar);- p3 u+ t5 v* S, E: W
  690.         DeleteDC(hdcsrc);
    ) N. I9 B$ W* Y- p& v" ~! g
  691.         DeleteDC(hdcorg);
    . V3 b, x2 ?, j, }& [
  692.       }
    . n8 b! J% h/ Q! o9 k* G% A
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);3 i3 `# Z8 ^4 ]! A+ q
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' H) X! c( m+ a% d# ?( ~
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");# y. Q- \- ~" E
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");  E. S$ Q1 O- |: D; |
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! m. N5 ?: X3 S$ R; G
  698.       if(!Dn.Connected())
    8 G7 c7 W1 n7 L$ Z$ x
  699.       {
    & l) x/ ^  R1 k; R% O" ^
  700.         dwTotalFiles=1;" Z: H. h# s' \
  701.         dwDownLoaded=0;& c6 p# e4 ~+ A. J
  702.         bSilentStep=TRUE;
    1 T& d. h* r* p  |6 a" p7 h$ d
  703.         bCompressed=FALSE;
    % `/ Q" |! k" h7 f
  704.         strExtLocal.Empty();
    + I4 F0 ^; z5 J. n- b# p8 |' c
  705.         strFullName="readme.txt";  _+ a8 C* h4 @) C9 E: d3 P
  706.         dwProgramState=AP_CONNECT;1 v+ V0 N0 b1 A  {# y
  707.       }" a" u* x% a! G* R+ v
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    6 F# X5 _* S7 z7 x5 V
  709.       dwStartUpSteps=2;
    2 O9 Z9 B2 N9 I# Y. s; T* E, g
  710.       break;5 x  {+ f1 B" x
  711.     case 2:; q" {# w8 f+ T
  712.       {
    1 ?" ~% j! q& H. S
  713.         int iEOF;
    ! L7 d, s3 E/ `0 F, I! B6 s( k* o
  714.         FILE *fp;. n" L- M- f' P3 M& v# H/ a
  715.         char szString[512];
    1 D: K/ I; ^' E2 Q0 J# E4 }
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    " D! h: T) U7 H' i
  717.         if(fp)
    : C. |4 x4 e: b% ~, s: G
  718.         {
    ! k0 j0 E2 M- i1 v9 R4 g: b7 z
  719.           do
    9 Z) e" S: P& I& U
  720.           {
    0 h) S8 }7 l# _) O' Q6 q
  721.             iEOF=fscanf(fp,"%s",szString);2 p8 S. |1 C; a6 a* S1 q5 s4 K. S
  722.             if(strlen(szString))
    : ?3 c* D3 B1 H8 Y1 c& |! O
  723.             {
    + m1 Z: K2 P, [$ v
  724.               if(bFirstChar)* x; S2 P3 y% a3 t  ^- t
  725.               {( V8 r* q- T! D$ H" q% U# G
  726.                 bFirstChar=FALSE;# {) }+ x0 |' E' Q$ A
  727.                 bConnectIsBig5=FALSE;
    7 S) ?9 ]9 j" v1 j
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 l# f+ a6 q/ B8 u: [0 Q/ x
  729.               }
    3 B1 v% {- _4 x& V+ _# ~
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    % [9 M- y, X2 R* [# G" \
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));: K; t" w" w+ F( S$ I: j
  732.               dlg->m_ListText.AddString(szString);
    & u3 e& g; c* n: j' y4 P
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ J' V/ R8 P, [* ]
  734.               *szString=0;2 O4 Y: G7 c7 R! R
  735.             }
    1 v% e8 p' t( c6 Z# Q
  736.           } while(iEOF!=EOF);* T& j: M! J; C" R: |
  737.           fclose(fp);7 G% W& U( a5 G/ O, q
  738.           unlink(".\\DownLoad\\readme.txt");
    / @' L( s2 M, ^2 f# c
  739.           dwStartUpSteps=3;: ~0 q/ y( h* l4 [  h. X9 C. h
  740.         }
    6 a8 p$ K1 b. @3 G; i1 y
  741.       }! r8 K) _- U  u, f
  742.       break;
    & K& q( V! r& i/ |6 g* \8 e
  743.     case 3:
    # |1 L$ J( y4 B* z2 r* R
  744.       if(!Dn.Connected()); @/ o6 Z, j( @. H% T
  745.       {
    6 g9 A  m0 Y2 N
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);4 H, d% N0 U5 X  c( X2 @
  747.         dwTotalFiles=1;
    1 {/ N' x$ m- |; @3 t# I
  748.         dwDownLoaded=0;* F. u9 b0 n! F3 N4 [
  749.         bSilentStep=TRUE;/ {/ F4 K, k. }7 V) y) X+ v- R
  750.         bCompressed=FALSE;' j+ z9 I! d0 C
  751.         strExtLocal.Empty();
    & M$ |/ o6 n% w% A4 ]. N
  752.         strFullName="checkversion.txt";
    4 j2 e' c: i; M+ K
  753.         dwProgramState=AP_CONNECT;
    : S* T0 H% f/ \% H0 d' y
  754.       }4 P* r% s/ {! }; L3 W8 ^
  755.       dwStartUpSteps=4;
    . A  j8 s4 i  O# R
  756.       break;
    6 g' |, M3 l/ L5 M+ k! T# `, h8 b
  757.     case 4:+ U3 h) y2 u5 G( {) M
  758.       {
    & k1 n+ Z' _, Y3 U: l
  759.         FILE *fp;7 H& ^8 D- C0 r" o; L4 a
  760.         char szString1[128];
    1 g" C- \) X2 w) i; ~/ W& e
  761.         char szString2[128];
    : D4 I4 W" y( i9 f; f
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");) N# {" O# {0 \
  763.         if(fp)
    ( T6 c: G) i4 H  ~) V. P: `1 H. q6 s
  764.         {
    / n8 A5 `& P8 ]! ^, ~+ n( v
  765.           fscanf(fp,"%s",szString1);4 B5 t4 w0 F  Z: {
  766.           fclose(fp);7 B" J# H' a1 Y0 B7 `& R# h
  767.           fCheckVersion=atof(szString1);
    4 b$ K8 ~4 }: y5 ~
  768.           fp=fopen(".\\checkversion.dat","r");2 I; v0 H# [1 e3 V
  769.           if(fp)
    4 `+ {9 i* ~/ I1 v" E5 v6 ?
  770.           {
    ' O" ]* j% M4 \( I; K6 `/ l
  771.             fscanf(fp,"%s",szString2);
    . u5 j: ^$ s1 z  Q! s1 C
  772.             fclose(fp);) w* Q+ E' i; ]1 K1 i
  773.             if(atof(szString1)!=atof(szString2))" I" F3 z  I. g
  774.             {4 p) t5 d. h! N. E1 Z; N* w
  775.               if(!Dn.Connected())
    2 H* g: y+ c9 e- P& @8 z: D. k
  776.               {
    9 Y. ^9 O( H' c8 l1 R
  777.                 bFirstUpdate=TRUE;
    " I2 T. z& f5 m- j; {% Z, |
  778.                 dwTotalFiles=1;
    0 _& ^" n6 `+ k+ R. g
  779.                 dwDownLoaded=0;: J. {) e$ e1 J5 N3 `$ H0 v. ?
  780.                 bSilentStep=FALSE;
    ' D% |7 @7 S9 Z  ~: Z
  781.                 bCompressed=TRUE;
    0 \- V& \$ `- l1 Y! ~
  782.                 strExtLocal=".\\DownLoad\";
    ) u* h! Y& S+ f  k: O2 g
  783.                 strFullName="update.txt";
    ' L7 \! o% K* Y- D
  784.                 dwProgramState=AP_CONNECT;5 x) E: L1 u! H
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' w* @* m5 }5 D2 A1 s0 ~
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' u1 V. R; `2 b7 I+ @
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");1 ^+ _, R# O$ _4 h* L9 n
  788. ( s& k! P- {2 d) h0 R7 ?# [$ ^, T
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) ]+ M) O; t; {; E7 L9 Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");$ n1 G% ~! j, R; C' \& S
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)4 z" H7 i- `/ B
  792.                 {! r( a) @3 r$ U4 V0 |4 v
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");7 x, a  h' p2 B) Z6 ]- N% x, u
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");+ C/ b' P! u! t* m' ^  y( ~
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");# ]" x" R" u, P$ ?/ i. f' O% U
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . Z+ o% w; _, T) p$ a) V* y/ r

  797. # ]* T! X2 m/ c% T( [6 N$ R
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * [3 z0 I& n. N0 a* h- H& |
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . j4 J( O% _, P2 {/ r2 h3 ]4 l
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    1 Y! z3 M  F6 K7 V; q& Q6 f( @' z. k
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% E% ]% ~' w) ]6 L  m) P; ]
  802.                 }7 [8 R: Y3 e8 i: _: W
  803.                 dwStartUpSteps=5;
    % [, |; G/ K  P3 f
  804.               }6 A( s. @' P0 J2 [! t( ]
  805.             }: c' L5 N& \3 C; |' p) F
  806.             else
    6 q: a" j5 V" r' e( s
  807.             {
    : v0 O$ a# k; i4 [2 L
  808.               unlink(".\\DownLoad\\checkversion.txt");
    2 I: R: y2 T( n, f; a1 M
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , P" a6 l/ d# R/ i0 F. `4 x
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" y, o) J! }3 a0 E/ K
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    3 ?8 W" A- D' b! b
  812. # Z9 B; L; L* U# R. ^
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* w* y) t4 J8 P) U
  814.               dwStartUpSteps=99;. s5 a9 \, |  \& o1 w5 G
  815.               bFinishUpdated=TRUE;) t; D# `+ F2 O3 \2 Z5 E  U
  816.               bCanUpdate=TRUE;2 O% y: \( |/ F% e7 c
  817.             }) i; u1 P' b: W/ t* t- U, B
  818.           }9 C- K( [, [* }9 p7 q
  819.           else
    3 s; `3 L3 [4 V7 z/ j) w
  820.           {! J0 b  i* n8 G+ H* J" g
  821.             if(!Dn.Connected())0 j+ P$ a& ~/ Z- w; }- I
  822.             {' [* p8 C) Y& n6 \1 f* h9 }0 }
  823.               bFirstUpdate=TRUE;( ]( M9 h  A2 v) n; G: Z% H7 m
  824.               dwTotalFiles=1;1 }0 ~7 f! N+ F( p+ Z! f2 A
  825.               dwDownLoaded=0;) j& Z3 U0 M- V' _$ y# L
  826.               bSilentStep=FALSE;" E( n8 }3 y; R1 k
  827.               bCompressed=TRUE;7 T+ H; k  F( P) w( L+ f
  828.               strExtLocal=".\\DownLoad\";
    9 F9 D; E  {: v1 a+ T
  829.               strFullName="update.txt";
    ! ~, Y  E- j% x* J/ z! Z% |3 f) r
  830.               dwProgramState=AP_CONNECT;% _& n( y# [! {% M; O& e* f: w. J& j( r
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; U2 y9 A1 X7 H5 P! u
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 M5 ~: y6 S9 U3 x% [
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : m. \: L7 d# C: {
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 k' a3 q+ D+ n% B" [' a5 X
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ! n7 P) z+ x$ B( |8 U9 h+ `+ c5 l
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    3 a0 J8 x- k4 X1 n, S* j! {5 B6 ^* W8 O
  837.               {) f: ]8 ~# ^' I/ m: S
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");5 a( `! q$ b! \; j
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # T: v) e4 h/ C: E  Q" F2 j" l
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");5 c0 j) n- o; v& e& i8 X
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  C8 v) y9 S: u3 U- k
  842.                 ( L; m( s0 x3 ]) a+ y; r) I
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ y2 @2 U* y; M% }. A
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . @" p" O: ?, \9 O% j
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - B9 d, \: k1 f& q: H7 ?. k* _7 W
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ f4 ?  [3 \+ t- \6 x' c
  847.               }4 {; b( l5 k) g5 o
  848.               dwStartUpSteps=5;0 m2 z4 \4 Z+ B7 Y2 I. P
  849.             }8 Q! x1 p9 Z7 M3 O
  850.           }
    . {* f+ H& D7 n% n3 R5 ^) ~
  851.         }0 ]  j  L  c. A: E
  852.         else
    3 z* p! O+ Z" i4 Z  t  _
  853.         {  C9 T4 [# j0 @5 \. N4 r2 F' O3 P; c
  854.           dwStartUpSteps=3;
    ) G# ?) S4 m% z. L8 ?5 }
  855.         }
    ! U+ H$ B- l: q2 E# O% X  r& _
  856.       }9 b  Z: }: f2 v) {; e! @
  857.       break;
    7 ~; F! I& V  a- O1 R3 G
  858.     case 5:
    ! Y, [7 v1 t; J4 c
  859.       {
    , j% u. e8 |+ x4 e' @( w
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ' [* B& X- _+ t7 y
  861.         {' k' W0 U0 R7 ]& i) I4 F
  862.           int opt_overwrite=1;
    " m7 f  N, m, j/ W* d, W- w9 S
  863.           int opt_do_extract_withoutpath=0;0 ?" \0 x5 G/ I) E9 A  Q
  864.           unzFile uf=NULL;7 ^$ y8 z% |! U% h
  865. : @4 O: w: ]. C7 n+ T
  866.           uf=unzOpen("Wsa.zip");
    * D1 P- f( j' W& a7 c" S
  867.           if(uf)
    ; S1 X( T) g: d/ c6 h
  868.           {
    3 t6 B: ^/ [% s  J& g
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ( o$ o  O( j, W6 y$ ~4 E' Q
  870.             unzClose(uf);. H& C+ T3 a$ J0 o
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");% y7 F5 t% f4 S0 ~+ s( x
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");, b9 [$ v* M/ S
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    - n2 Q! ^/ w  q  {
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' W0 Z. e3 ~6 i2 T$ W4 O( e
  875.           }+ N3 c; m, }  D# ?; m9 ~
  876.           DeleteFile("Wsa.zip" );
    5 {: s, V( ]+ s3 [4 n
  877.         }
    # }' M& U) X4 l( u; S( {# I* l
  878. $ S8 G- X3 O1 J8 E9 x- V. c5 s0 r
  879.         if(CheckLocalVersion())$ F9 s0 [, j6 D5 l
  880.         {
    : u9 E0 H4 K* M  O4 Z# {1 w
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");+ H) R* i6 B- G' }6 H; v
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    1 E; B4 @2 A3 B2 L) ^* G8 Z+ ^
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
      Z# P$ x/ b( Q4 `0 T: `
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 a; X' X7 f) T1 x4 Q
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);- o( _* I* X6 j$ _& v  D
  886.           dwStartUpSteps=99;
    6 q9 {' Q2 q0 W- I4 _9 q* Q
  887.         }1 Q, o: j3 e# _. Q9 m2 d. l
  888.         else2 u0 X! q6 t7 I8 s
  889.         {% R5 L- D. K/ T
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 r3 ]$ J9 l% `! E& C9 M4 c# I" L
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& C+ R6 h  Q; J: q2 n- g! Q
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    + A, t7 w' M! Z$ b) F7 Y- R( [. i

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

9 m. F- o7 l3 X# H8 \0 \

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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