CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
3 k( ]! q7 j( V1 j
  1. / RevApp.cpp : Defines the class behaviors for the application.5 z8 P6 O) r, k
  2. //& e% W/ N1 ^' J) A# h6 @3 W+ W
  3. " |6 J3 W$ j  G0 x& y3 s& F
  4. #include "stdafx.h": B9 V: D/ j* Y: k
  5. * u" e8 f: I. l2 L9 a2 Y0 x
  6. //#define UNICODE# s* D3 d$ s  [) @( C' _/ s3 k
  7. //#include <gdiplus.h>
    * _) F- c+ C- x* t7 A% v1 h% R' }
  8. //using namespace Gdiplus;
    $ g& P$ y7 t/ F; i8 e2 v
  9. + ?% k9 i* n6 r( L- H% s3 Y0 l
  10. #include "RevApp.h"
    . R1 S( L! Z7 S4 E1 e
  11. #include "RevAppDlg.h"
      u' a! H* U6 r/ r
  12. - T0 o4 ]# g. e( m
  13. #pragma warning(disable:4786)5 v  F& x4 M; l* Q
  14. #include <map>
    # R% x2 v/ u% ]7 \7 m! X
  15. #include <list>
    0 J4 G+ J0 }" z/ D+ K
  16. #include <direct.h>
    / J  ~( o( C3 p3 \0 q

  17. 8 h) i' d& o' B8 I8 [1 ]$ C
  18. #ifdef _DEBUG) m" B8 n! |; v8 ~5 X$ w( `1 F
  19. #define new DEBUG_NEW
    * K7 k3 |! @. k7 W/ i0 I) s
  20. #undef THIS_FILE
    % n. ]9 N* N8 `! G  C; Q- @
  21. static char THIS_FILE[] = __FILE__;$ O* L* n; U( z: D) k: W
  22. #endif, {9 k- A3 S" g- e% N4 G
  23. #include "SkinResDef.h"$ r+ a1 w. Y& L0 v& v4 k7 E
  24. #include "ChangeBG.h"
    2 k3 o+ p- L8 X; j
  25. #include "AFXINET.H"/ K6 n, M) Z) m7 s9 N+ x. D

  26. ! Z% x7 D4 u7 p9 b$ s' d
  27. #define TRADITIONAL_CHINESE 0
    * q/ {8 D# j9 t- X$ G$ y
  28. #define SIMPLIFY_CHINESE 16 g  v$ _. R# }4 \; L/ L
  29. #define ENGLISH 2
    " k( X6 z% a  l) C0 l' O
  30. int m_iLanguage = ENGLISH;, ?' D4 |+ B" I! R
  31. /////////////////////////////////////////////////////////////////////////////
    8 r! L1 d: X" t1 ^5 G
  32. // CRevAppApp4 A1 d* p; M4 O* r( @

  33. + _  ]2 r3 a7 H5 ^2 y2 E9 {% F
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    , g( f1 o- a6 {
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    4 r  t4 w3 d3 M, l9 D) l7 I
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.( h% E' p0 j3 Q. j7 V: I" C
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!; N: @  [2 t. J: ]. h$ P' l
  38.         //}}AFX_MSG6 s# N# m* S$ O' r& ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)- ?! H* e) ?4 i8 v8 M# z, S2 N
  40. END_MESSAGE_MAP()* k# w+ B" \) v! t$ j* h% n. x7 q
  41. 6 ]- Z4 S- @" B
  42. /////////////////////////////////////////////////////////////////////////////
    4 {3 n% O4 N( E
  43. // CRevAppApp construction
    ! G$ |" T; v5 s3 T  K( n- @4 ]4 x2 u
  44. , w: h) M' ^3 h7 N
  45. CRevAppApp::CRevAppApp()- i2 c9 {5 |$ T% _: o4 i# u) o
  46. {
    6 U/ B% N+ A) q4 S! s
  47.         // TODO: add construction code here,1 \; t6 Y- H0 G  ]
  48.         // Place all significant initialization in InitInstance
    ( T. S  `$ h% D4 E* n/ ]
  49.   bDisplayIsBig5=FALSE;5 [# }  F3 m9 r1 i- b
  50.   bRestartUpdater=FALSE;, m% y) k# y# y
  51.   bFinishUpdated=FALSE;
    0 Z$ i6 T8 Y. L3 }; i
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    , [, X7 t- K1 |+ n* }1 V  o* M
  53.   InitChangeDataBig52GBKS();( l7 `, A0 f, A7 |8 _7 l
  54.   InitChangeDataGBKS2Big5();4 f  h+ p) z0 s3 V* e4 p' f  a
  55.         //
    8 m( f! N; M; ]4 v0 m
  56.         bClickRunExe = FALSE;
    & v! O, B$ ]+ l
  57.         //  N8 R6 z' a% F/ Y. g2 J$ c
  58. }8 ~$ m7 [3 Y" C
  59. - N- ?5 l7 k$ t! [5 ?/ i
  60. CRevAppApp::~CRevAppApp()
    & H- b6 K& v! t0 M  O5 z" q  s  f! A
  61. {
    % [# \* [: H- m. N
  62.         // TODO: add construction code here,; E: M2 B4 C, x& v' C6 e4 f
  63.         // Place all significant initialization in InitInstance
    ; E  N- o8 w" M) R
  64.   EndChangeData();
    " ^: |" i& j# l2 y% }7 f
  65. }
    5 U1 E  V& ?( ]* O& d- d

  66. - A& W9 A% }' j. Y8 X: w1 ^9 E
  67. /////////////////////////////////////////////////////////////////////////////) u. u1 V0 |( f$ t
  68. // The one and only CRevAppApp object) R. L: H" O. O7 t2 |* `
  69. . V6 _4 \. [1 ?. {2 a  j
  70. CRevAppApp theApp;
    3 O1 ?) ?/ P8 e

  71. ; w# y& \: X+ x
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)  Z1 u2 v5 t7 g
  73. {
    $ k& Q; N$ @; L) X( t
  74.   int iEOF=0;
    . z# X# C. _# }' Q& f
  75.   char szTempName[MAX_PATH];. z8 O1 C5 u9 M7 z( Z, R
  76.   *szFileName=0;+ R1 N, |. P* Q% i$ U/ \
  77.   iEOF=fscanf(fp,"%s",szTempName);
    3 i7 O7 F: S5 M3 J
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')' d( v# N; \) _' W9 t9 J
  79.   {
    : o' q" |0 @1 V  {5 Z8 I8 B, n6 q/ t
  80.     strcpy(szFileName,&szTempName[1]);0 _3 a( Z* W1 }* O9 O
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) i) x: }& d' t* T) S* G. ]
  82.     {
    * G% {) T! u) z2 y. \
  83.       iEOF=fscanf(fp,"%s",szTempName);( E$ ?9 ^/ X+ T
  84.       strcat(szFileName," ");
    * B1 d7 B" r- c/ U
  85.       strcat(szFileName,szTempName);0 L8 ?8 s6 T% O
  86.     }9 M1 q. R: l' |/ I& K5 r
  87.     if(strlen(szFileName)>=1)
    0 n* r4 Y$ V3 V7 T& f7 x4 I
  88.     {
    5 X+ U" O  u$ V7 N" r; }
  89.       szFileName[strlen(szFileName)-1]=0;6 Z6 K% G+ @! M5 c& [* a
  90.     }0 Y7 O, w, O1 L9 m" d% T% I
  91.   }
    5 p" ~6 W/ ^9 k
  92.   return szFileName;& x$ x7 o% b( J* [& y, C. h( {% j
  93. }5 g# B8 A& T: V& y% G/ R

  94. * S6 {! g( L4 k. a# i9 v- R& T
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)7 m6 V% u7 p* D8 F5 d( g; S
  96. {) v: q9 @3 b4 A' I
  97.   FILE *fp;
    ) Y, X+ X; F- o( s
  98.   char *key=NULL;& B4 e1 Z+ M0 A9 `
  99.   char version[MAX_PATH];! w" N1 L8 f. ^
  100.   LPUPDATEFILE file,olds;
    : t$ g5 A$ m9 Y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;6 `2 ]7 f" ~' Q) P  |+ m; h/ @# l
  102. % r' w- V; k2 r% K% ^
  103.   UpdateList.clear();* M; ~' A( ?4 J8 m
  104.   UpdateFile.clear();
    1 f; e- l) N2 i
  105.   if(GetFileAttributes(filename)==-1) return false;
    % k8 H0 p1 I+ \7 [6 {
  106.   if(!(fp=fopen(filename,"r"))) return false;
    8 h' W+ y1 U9 U- N3 J
  107.   fscanf(fp,"%s",version);4 s5 l2 _/ \* x$ p* p- w
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }, ?4 A; T3 [+ L/ |  U
  109.   while(fscanf(fp,"%s",version)!=EOF)' z# `4 G1 k5 T, _* l; b
  110.   {) v  ]4 o" q4 p+ \9 V( ^& [
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 J4 H. n/ d( I3 a
  112.     fscanf(fp,"%s",file->path);
    3 G7 J$ ]' k, K4 M
  113.     ReadFileNames(fp,file->file);0 u3 \7 n. C3 \9 \& T. S6 Z  E
  114.     strcpy(file->full,".");
    3 q8 X6 M! T8 p+ g
  115.     strcat(file->full,file->path);
    7 v/ I( ]  V/ U1 F  D
  116.     strcat(file->full,file->file);
    5 i8 {2 B4 x5 ~1 _( @
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    5 p2 s: X0 e$ O) v
  118.     {
    ! h2 B5 z& C: i( n& m0 }1 X
  119.       file->vers=(float)atof(version);/ [7 y4 w; M  e! A& U* R
  120.       UpdateList.push_back(file->full);
    2 d! d  ~2 h' c9 i8 Z
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , f3 W  d8 ~- {
  122.     }
    * Y  n: r8 O4 I3 x8 N( {. ?& Q1 G
  123.     else
    - |- H% ^# a/ ?8 H  `
  124.     {
    3 B, K4 H& `3 h, w5 ]
  125.       olds=(*p).second;- t* ~' o( k5 |+ _' {" ]' T2 }
  126.       if(olds->vers<(float)atof(version))
    * ~& W' |! k3 {7 P$ u
  127.       {! V- S; W! F$ G2 V5 Z( d' I
  128.         olds->vers=(float)atof(version);0 k( B/ ]2 n+ j0 I" q0 M
  129.       }
    ) V2 E& [+ w1 {8 F2 h! n% Y- u8 O
  130.       free(file);
    2 s& w) F) O# y% a+ L
  131.     }
      N, h. z6 r. x
  132.   }2 b% J7 S+ V: y9 {2 h
  133.   fclose(fp);
    0 Z9 w% x& {% ]& Y# O4 Z# G$ V5 [4 `
  134.   return true;
    : i& C6 Z) q; U/ C. |. j6 N
  135. }
    * X$ ?- B: v2 }  O  F! I: R
  136. / r; k7 w' M8 B% m" u! Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    3 \) H+ |1 k- M
  138. {
    - [! {# M" H" u7 {$ D) k' e3 P
  139.   TCHAR  szFull[MAX_PATH];2 z& o; v7 g9 N7 R1 w  S
  140.   TCHAR *token,*inter;
    9 o9 M4 `; o4 }- r9 A
  141.   *szPath=0;
    - H3 T' P& h7 S. Y
  142.   strcpy(szFull,szFullPath);, p. `0 G9 y2 _- p$ D% x
  143.   token=strtok(szFull,"\\/");" K4 s1 v0 d  h% B# u9 T
  144.   inter=token;+ v9 g/ n" h( r
  145.   while(token=strtok(NULL,"\\/"))7 V, C' t+ Z& j: a
  146.   {
      y# c" P* I& _" P% g+ l5 k1 A6 f
  147.     strcat(szPath,inter);# V! ~  y; \/ `! ~
  148.     strcat(szPath,"\");1 U7 v+ w7 ]9 T; B1 D) e' Z
  149.     inter=token;# r# J  I* U7 g
  150.   }
    " d" J* M3 p$ y+ s; X- \: f: R) W: _
  151.   return strlen(szPath);' N4 |0 J7 N, X! q& W' n) ?; N
  152. }
    - h' e$ z  W. Q2 F! W/ |
  153. ' o& Q# R3 Z4 Q- Z# K; a3 K+ p
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)0 x, F" Z& J6 Y( o
  155. {
    ( S; ?$ h( ?+ ~' U1 Q7 ?2 w. `) `
  156.   DWORD attrib=GetFileAttributes(Target);1 K* X; Y1 X' {2 U7 q: P* b0 n4 [
  157.   if(attrib!=-1)
    ( R) [% e8 X7 ^, d3 Q% R4 N
  158.   {
    + |" d* E: J1 I# A/ X
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    . i6 S7 a& T6 M) g8 \1 A3 ~% I
  160.     {
    3 Y7 t$ A) L2 d) ]! t' N
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    * o' n% K4 S! e- E
  162.       SetFileAttributes(Target,attrib);
    $ N& Q6 z9 ~9 Z4 q$ O: p0 V
  163.     }) c! z+ k) t+ I
  164.   }
    ( _( R  ]& T# U4 z- ]6 l  [- o
  165.   CopyFile(Source,Target,Erase);2 o: \" l" T3 L' ^2 C% |
  166. }# t8 b9 M; n* j" a$ y

  167. ) t* n* a8 n5 n( ~& b
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    + {* O, W( v8 C! s0 B# }! ^
  169. {
    % m0 U* j/ G; N9 F& S; I0 z# T8 i" x
  170.      FILE *fp;
    9 ^, V9 f8 Z. j. @3 v1 ]' G
  171.      char  szBuffer[8192];' }, ^3 i; ]& q; v% n# X3 z
  172.   va_list  argptr;; x, y+ N8 I, o! `% ?/ A) c

  173.   |7 M+ k# i+ y" Q- t7 _+ G1 N
  174.         va_start(argptr,message);, c8 X1 `7 J" g/ e
  175.         vsprintf(szBuffer,message,argptr);! f# z9 B8 c) c6 f
  176.         va_end(argptr);+ u1 Q, \/ E% J; [7 O7 ?
  177.   fp=fopen(FileName,"a");- W8 i# t7 |' e- P- Q5 `
  178.   if(fp)
    5 o* Z( {5 ~: s" a3 G! o) i
  179.   {
    1 \7 I1 e! E0 l# ^
  180.     fprintf(fp,szBuffer);
    6 t* h; H4 C6 s, A. i/ N# b/ k3 ~
  181.     fclose(fp);
    ) K, `7 A; Z1 {9 ?2 u; v, v
  182.           _flushall();
    ' d) M6 E# l5 b" {: ^4 z
  183.   }
    ) H( f+ }  \+ d. f3 f
  184. }
    5 V+ {0 ^; {! J+ _; W* b: L
  185. / x9 u: w0 n& s' k- Z- d3 k8 R
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    . N. K" Z6 ]: l6 s+ ~
  187. {
    0 p2 Y3 q5 Y* H: r2 p
  188.      FILE *fp;) o9 N. ?% z2 ?) g' e
  189.     DWORD  attrib;
    " U6 w6 w2 W0 Z$ d& O% ^0 e# A
  190.   attrib=GetFileAttributes(FileName);2 @0 `( r, z9 u
  191.   if(attrib!=-1)
    : r) F8 y- m6 ^1 m
  192.   {
    - O; {1 d' z; o) N3 v! i
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: S6 K7 Z% j# u; O9 l4 L
  194.     if(!SetFileAttributes(FileName,attrib))
    ( R2 T% \$ L5 d% _8 Z- `& ]
  195.     {
    . E# n, m. f1 {0 s. c' n7 _" H
  196.       return FALSE;/ |( L( p$ R5 l7 w% b+ P5 ]
  197.     }
    : g# @0 n$ Q# J- M; t' [
  198.   }
    0 z! T, R* P. u# J
  199.   fp=fopen(FileName,"wb");. D" P! H% W; `- d+ R
  200.   if(fp)
    . S  X8 N9 H& G+ k4 E! [# M
  201.   {
    0 d9 e& E) g  p9 f. h" T
  202.     fclose(fp);* G2 Z  M1 n$ F
  203.   }
    & y2 s6 S9 e- _6 A" L
  204.   return TRUE;) e9 o* v1 o4 B5 F9 B) q. I
  205. }
    / J- D& g5 M& B) M3 q: u8 r

  206. 8 }5 O* t# K% g# y4 @
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      ?2 ^1 f. E' T, C- f4 z& v
  208. {
    3 T& t4 D4 _, {
  209.   char filename[MAX_PATH];. t$ [: [* Q; N# d1 y: r
  210.   LPUPDATEFILE file,olds;
    4 _& g9 s0 r" W2 a) ]
  211.   std::map<int,CString>::iterator i;  f; t/ n( s) l, i  Y* S: R
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 z8 [' S2 K: H/ ^; q( N
  213.   std::list<CString>::iterator l;# J- R  O, \4 G7 a6 Z# B' v2 c
  214. : t* W5 `; C% d1 s, d: ^& E  |
  215.   if(bFirstUpdate)
    & H$ G8 j  q, }$ M
  216.   {+ q/ Z' v9 |- B+ p; r
  217.     dwCurrFile=0;9 x5 L; p0 m7 h' t
  218.     bFirstUpdate=FALSE;: P5 F* I7 j$ ~: e" V
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- F: K! q; m+ p: K: c3 y( L2 V# J; G
  220.     {
    4 D0 X' x, i0 j( i* z1 H
  221.       dwTotalFiles=UpdateLocal.size();  `1 Q0 U. U$ C, s4 B% y, \2 r
  222.       dwDownLoaded=0;# L" M' R. l& Y' L
  223.       bSilentStep=FALSE;
    & f- a5 w% M& w3 D; O8 H5 u: A
  224.       bCompressed=TRUE;! `; x8 u$ {2 |) R3 p: w- I  S# K' \
  225.       strExtLocal.Empty();* B) g' i  M3 R& r' F9 P( Y
  226.       strFullName=(*i).second;$ i3 X, {  N! |. v4 v  }2 E
  227.       dwProgramState=AP_CONNECT;! w9 C7 p" R: V
  228.       return TRUE;! E0 D3 z1 l6 ?/ l; t
  229.     }
    : s$ X( {% F$ q" O6 J! E
  230.   }+ u3 ~' f% Z2 g2 w) k
  231.   else if(bRestartUpdater==FALSE)
    # @/ M/ d- H; e, i% k5 ~
  232.   {
    # x' R1 [; w7 n# Q* @
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())# Q% c! G3 B$ y) S
  234.     {
    $ p  ^& H' |/ o
  235.       file=(*p).second;
    ! q' Y6 |8 j- X9 d
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())8 u2 r, \& r1 i/ E. H( H4 y) c
  237.       {
    ( ]' K* m9 ]* ]4 }" p' i
  238.         olds=(*p).second;
    2 e0 W/ Q: g4 |$ p  x
  239.         olds->vers=file->vers;/ H0 I$ A+ x$ l, R
  240.       }
    5 t' N' w5 j; q3 V2 N
  241.       else2 s9 ]% u3 c. V# E- M3 i
  242.       {
      C0 J3 J/ p1 j% d+ ~* n: x
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 c* V+ n/ \7 l+ v8 b
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    " ^+ F. I6 M0 n/ f1 i/ E
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 E+ G. o) i/ L; _
  246.       }
    6 j4 B# F7 v+ M& H7 D$ H
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");+ n' M8 K7 d1 j0 t
  248.       sprintf(filename,"(%s)",file->file);" \& S; v2 h, R; j
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);5 S' U" \5 _, ]: \; Y% E' J
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: v1 q7 k; ]( f% _( }* D( e
  251.     }
    $ D  s2 ?( P5 ?' e$ G$ ~1 N0 h
  252.     dwCurrFile++;
    ) C: P; z( X  h+ A# Y0 ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    6 T' d: n, u+ ~2 e  p
  254.     {
    % U6 }* [: G- \, ~$ S. ~
  255.       bSilentStep=FALSE;
    ! X4 m/ ?( {7 `1 R
  256.       bCompressed=TRUE;
    6 k! l1 F+ C4 _& _; @
  257.       strExtLocal.Empty();3 |  k  B& U" J8 S# Y; W! Z$ n
  258.       strFullName=(*i).second;/ A7 G3 S/ L! U+ [7 e5 z' l; v* n$ W
  259.       dwProgramState=AP_CONNECT;
    ( i( L6 Y% H$ o' k" _- E
  260.       return TRUE;4 o$ _6 e5 S! n
  261.     }
    ! `' b. W: [9 l, }0 L7 y
  262.     if(!bRestartUpdater)  w# C, S% L3 S. X, U1 y
  263.     {0 v! @# a, @+ B! P2 T5 k  m: r
  264.       int iCurrSize,iFileSize;
    , m* Q" s. C: F
  265.       iCurrSize=0;
    / t% Q% {+ u2 x& ^/ z' v- O+ H
  266.       iFileSize=UpdateList2.size();
    4 {- Y2 l8 b% x$ ^/ i
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");1 B" a& K- x: F2 T7 a0 O& R9 |' d( B# D
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    - _- A6 C# [4 @; X- \- y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");+ E" R/ K( o2 n% h+ D/ Y& i
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* [0 `* B; i! o+ b
  271.       Fclearf(".\\update.dat");
    $ X  t" {* l3 ]2 ?' o- c3 x
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    8 A: S/ e) t8 U
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ' q$ |. K: ~( X8 W: ~& g3 t6 J
  274.       {+ _# ]: e. `: f& N3 }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    & X/ }8 Q8 k6 P
  276.         {
    & F# X  @' B4 K& V
  277.           file=(*p).second;( }) L3 c' G8 D6 q) j; w
  278.           sprintf(filename,"(%s)",file->file);
    ( ?  K8 o, |+ W  h' T' L
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 G- l0 w4 ^" N
  280.           iCurrSize++;
    $ M2 ]% t" r! B( ?0 ?; t& ?6 P
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) z* u& x  ?, f7 R. Z7 x
  282.         }0 p2 L, x0 m, }8 _0 P
  283.       }
    " k3 t+ F  v& ~# X7 z' i6 S( C' o% y
  284.       unlink(".\\update.txt");" `: ]# G+ J3 o7 ]  v
  285.       unlink(".\\update.tmp");
    % T6 l: D7 S: G' }0 z+ m$ }9 x+ U
  286.       Fclearf(".\\checkversion.dat");" p6 ~1 q+ p( K" g- o
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' c5 _* s2 ]; I3 C3 R
  288.       if(UpdateLocal.size())' ^7 {7 x  P+ n5 v; J
  289.       {
    ' W! i* N( T  W+ {
  290.         UpdateLocal.clear();! H' H$ b4 E) g  J) E% s
  291.       }9 j9 {5 Q# s( m, {. y; T
  292.       if(UpdateFile3.size())2 i* [4 _" Z  c: b4 B; |) v
  293.       {. V/ j+ Z; }' N# ?& t% O, d
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- d4 }5 A( f$ x2 v; s
  295.         {# x; G: r% j, R- n% ?
  296.           file=(*p).second;
    % f/ G9 N  G0 N6 w, G
  297.           free(file);2 [; V4 U3 P8 b6 M  V5 _5 s5 `
  298.         }/ v3 C8 g1 u. L  }7 C
  299.         UpdateFile3.clear();" S8 E  K. n. A5 Q, s
  300.         UpdateList3.clear();) J' Y1 `7 ^0 G/ X/ b; q) s: k
  301.       }7 W" y. v9 V5 d+ P0 Q- e
  302.       if(UpdateFile2.size())
    6 L9 Y) [  a$ Q
  303.       {5 Q. G0 L( y  S( ~
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - r  ]6 m  L% J
  305.         {
    ! o5 P, x) v& \! m3 t% X
  306.           file=(*p).second;! i0 e# G$ E* o: q9 S
  307.           free(file);
    1 [, G" n) |3 l& y! z; C
  308.         }
    5 b. a  A4 \; W2 d
  309.         UpdateFile2.clear();
      _4 p  N  i# H! {' r% R# T
  310.         UpdateList2.clear();: Q% s7 c' K0 Y, v5 ?+ t1 g
  311.       }
    4 g5 l( E6 [# ]( H5 `# V; D
  312.       if(UpdateFile1.size()), g) S1 s9 j' U' |6 f0 ^. f
  313.       {
    ' q* a7 f% @3 z+ t- |& {4 l' m: p
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    * i# {, `9 [% m( d8 E
  315.         {7 V* E8 @/ o+ [1 y$ b
  316.           file=(*p).second;
    4 t8 O2 _# u! ?
  317.           free(file);+ g- V4 }( F: [+ R  |1 ~
  318.         }$ U: b$ C$ _$ J; ?
  319.         UpdateFile1.clear();
    / F/ F, Y: p. A1 V2 d! b. r% _
  320.         UpdateList1.clear();8 u$ f6 B: \* E3 i, D
  321.       }* O. s4 K( n) U
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));: L+ B$ W6 Y- M0 o2 ^- e4 S
  323.     }. q0 m% z& x% d5 s4 i
  324.   }4 \8 D- m2 D6 C
  325.   return FALSE;
    & t3 m! c. w, Q$ w( S
  326. }
    2 a  B2 \5 a6 A# D

  327. 8 f- P- C! e+ u9 r' k5 ~
  328. void CRevAppApp::ClearAll(void)
    , e; p$ R1 X/ B
  329. {
    % ?, j1 P% O6 S6 O+ k
  330.   LPUPDATEFILE file;
    & ~  @; V- K3 j0 R, D% _
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 p' `3 T) p- T- l

  332. : H8 ^- R( d; z
  333.   if(UpdateLocal.size())
    8 x4 A2 g4 v" w8 b" b) P6 }6 K+ h, R; f2 v
  334.   {
    ) B3 D, S! M: G7 [, f. v; W
  335.     UpdateLocal.clear();& w9 L2 k8 e% T/ l4 l- B/ s. j
  336.   }4 ?# z- N' u3 g; F
  337.   if(UpdateFile3.size())
    8 W8 [2 [' F' E0 C8 S1 G0 G
  338.   {9 s( l( {3 J8 v% k
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + N% i! a0 o+ h( C8 ~" `, {
  340.     {
    7 D) |" q$ a3 z3 V( e
  341.       file=(*p).second;& s4 v: S* X1 U5 u7 x# M* Z) \" R
  342.       free(file);
    , X1 y$ L9 |8 V( ^' L& F* _: K) {, \+ y
  343.     }
    % A% \8 k9 N& K( m& w
  344.     UpdateFile3.clear();% Q- t- W- z: z; Y# a& q+ F: n
  345.     UpdateList3.clear();- o, ^- \- a6 N
  346.   }
    2 ^0 ?8 z4 Z5 @! ~" }( _
  347.   if(UpdateFile2.size())( L5 p5 J) m" M2 a4 h
  348.   {
    ) O+ j9 ?3 t1 J' Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)7 a: ^5 [+ a+ i
  350.     {, U  Y. j! d/ Z
  351.       file=(*p).second;+ C1 N( C7 d9 U: _" O* T$ I
  352.       free(file);2 x& R! a3 n& N/ s
  353.     }
    & r, Y; \, k5 h& a  z" I
  354.     UpdateFile2.clear();4 g3 z4 n+ n3 Y" R) P
  355.     UpdateList2.clear();. G6 o; s" k2 ]( T
  356.   }
    & G; n( _. `( K, R3 p, @) h
  357.   if(UpdateFile1.size()); H/ K1 F1 Q7 X! k9 Q
  358.   {
    ) ?5 M* V/ S4 h" v+ t' S" h
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& v) \( d" |  K- x2 _! ^3 o
  360.     {( \* O  u# e0 w  V1 `" d
  361.       file=(*p).second;
    2 p3 `: @. ]7 G; P/ ?' |
  362.       free(file);
    9 \, |% t, J. m( x: R/ Z! L$ M
  363.     }& G7 n0 q. C8 H4 q
  364.     UpdateFile1.clear();; I% N) o1 j% M0 E" y- C
  365.     UpdateList1.clear();. r: B5 ^5 c8 l( t; w6 E
  366.   }5 f* {/ i' c9 U# Y$ u7 X
  367. }  + Y' S8 j& O+ \0 U- p7 Q" `2 h
  368.   ) x" S* e0 H, Z2 K
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    . k" C% r& P+ m7 \
  370. {, V( \3 D* t0 K; j- Y6 n
  371.   int c;
    5 }( V  F9 o. I$ A; J1 J. d! a
  372.   LPUPDATEFILE file1,file2;5 l/ c; ^- _, Q  F# X, e
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ( M# z- ?3 A# p$ @9 g7 y
  374.   std::list<CString>::iterator l;8 `) _- ~6 k+ {3 `5 M8 G5 z4 ]
  375. + m3 o  V! M& G" _, S: Q6 f; ?
  376.   UpdateLocal.clear();
    , u8 q- J# [; i1 \. A
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ `3 ~4 A& I4 `7 e% \, v' |
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    7 |! |* Q' t% P/ H3 Z- h/ j
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ e  L' R, b4 i- i* T+ H
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);  A4 l; [8 u; F; S* k, m
  381.   if(UpdateFile3.size())4 Z, j8 `/ J' E3 M
  382.   {1 j. ?+ a2 z( g  _4 R; }) b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)5 k6 ~4 N& B  W1 s
  384.     {
    ' I8 Y5 j7 ~' X
  385.       file2=(LPUPDATEFILE)(*i).second;6 t3 K5 M) D) _9 b# M3 O! F
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( u4 X3 b  g! j) e
  387.       {
    . p4 }( w4 k- X* R
  388.         file1=(LPUPDATEFILE)(*p).second;
    % n2 s9 g' g% W; b" `% v
  389.         file1->vers=file2->vers;% K$ b" D& q6 o7 ^. U1 e
  390.       }' J7 ~! {) u- M: P1 g( \
  391.       else2 Y" j  A6 [" v/ F$ ?5 ]4 P# i
  392.       {/ i9 L1 p' g& K1 _% h1 B5 T* _
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 X+ p) G" a3 z. X# c& |& h2 ?) C
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));; Q; J* M% e. B9 B
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));3 N, {) P1 D% S4 M/ L
  396.       }# r! K  e) z% e. L$ y9 U" G# [
  397.     }
    ) S$ n0 `/ ]2 b1 \' t1 C
  398.   }* H. \) Z: L% F6 B
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)- @5 K8 X6 I) g; I
  400.   {: Z$ M4 b) ~$ n4 E
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())) N  p0 a% n( X* U- t! Q
  402.     {& E- g  e8 `4 o
  403.       file2=(LPUPDATEFILE)(*i).second;
      `# H% U% Y5 ?1 i" R6 K5 A. B
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 C) y2 P, S: s" e. B0 y
  405.       {
    ) _- y0 |" F; }+ H1 N
  406.         file1=(LPUPDATEFILE)(*p).second;
    + A* `4 k$ u3 r. N3 K; B3 O
  407.         if(file1->vers!=file2->vers)
    ) e7 M+ m  X$ `' p. M3 |) r2 n
  408.         {& ~. l- e! T6 e& `7 E' Z. {
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- |: N0 g" p2 N3 d
  410.           c++;
    7 Q; H3 n  ^! @9 i8 H. S$ J" A
  411.         }! |$ d/ _# C+ o. ], B& ~% [: g
  412.       }
    ; `; N/ @$ P" h# ~/ o( m
  413.       else
    1 u; r( M2 `( x; P/ o
  414.       {
    4 f4 `$ t2 A! H) V5 P
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( N* W' ~. _* L/ d1 g0 G
  416.         c++;. i  {. H8 B8 n
  417.       }# J) E0 i0 K" g6 o
  418.     }
    9 m5 I9 @6 N. K
  419.   }* s7 H: N& Y1 w" g9 o! L2 c. O
  420.   unlink(".\\DownLoad\\update.txt");
    7 Q* t/ t7 |: Y% V# G; V4 K  @
  421.   if(UpdateLocal.size()) return TRUE;9 b8 i) b- ~: f; g
  422.   else                   return FALSE;
    / m; k) @# q5 g3 h3 d/ J5 @
  423. }3 ?( p5 D$ \6 w6 E! Q
  424. . Q8 e$ F( G4 O. {" b6 _$ P0 h
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    9 n3 J2 s! H# M5 ~9 v) z! m2 `) C
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' y2 A) T" [( @- F' E* e

  427. 7 i' d5 c0 g8 t- W4 ?1 g, |

  428. , \( j% F: G1 x2 D+ n& l$ X
  429. 3 _/ K/ O1 a; I- y5 u8 K7 l3 i
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)3 i$ `' h6 e9 f( f" Q& s
  431. {$ n2 ^3 j, S# Z, y/ r  e$ e
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ) v0 x' l0 o9 Y! r3 v4 c3 }
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& S! e6 D) u$ W+ ]4 {, n# L3 i
  434.   {( j  x( t2 f6 G: H. N+ v
  435.     char szLanguage[50];
    8 |+ @% u1 n0 k. J' _
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & d3 y( r2 v# X7 _2 Y" q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 B, t1 @* v, w7 E0 g. Q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # Y% G; x9 O, ], j. ~9 o, ?
  439.     else                                   m_iLanguage=ENGLISH;
    ; A: W" K0 [7 ~, l) @; e
  440.     char szRegister[100];& V0 N0 Q$ V! l+ [2 d
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    9 x* U) h( E# u1 W
  442.     strRegsName=szRegister;- R" R& x  j2 c; G" \# L9 }
  443.     char szPatchURL[100];2 I; e# `2 C( B) I1 m# d
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + G" g* H4 Y4 p' d
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ; Z7 ?7 q  n+ d2 f! ?3 G
  446.   }1 V: p- ^' r: W2 K
  447.   else! B5 Y" ^, ?- x3 O
  448.   {
    - b2 w0 i9 n. j- r6 E5 q$ d: c
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 u3 O4 M& G$ A- v! v1 t
  450.     strRegsName=DEFAULT_REG_URL;
    9 H: Z, l1 H# w' M0 p+ A
  451.   }
    * V! X0 P8 W4 i+ {2 K4 x' v8 R9 r' ?
  452.   if(GetFileAttributes("hosts.ini")!=-1), D7 V+ x3 s; y* M
  453.   {
    1 K7 W9 o, d, |' a) Y0 r
  454.     char szIP[50];+ G% u) F! c4 S2 Z- k7 i; s, f
  455.     char szDIR[300];6 d! o# I1 g% w, a5 }  P- K' a
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    + Q0 s& z! r, h6 _5 _, X) p
  457.     {" |) Z0 C: Q/ {
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    1 I9 `( Y$ C6 W+ Y0 X
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# T7 D$ l8 q1 W8 |+ F$ O% A
  460.       strHostName=szIP;- s/ Y$ Q, |+ y, o
  461.       strHostPath.Format("/%s",szDIR);
    2 N. `, g' a! V6 o5 D! B
  462.     }
    ( E5 |# T  O4 N) ^* C* Q
  463.     else" i( u% N7 U& p- w$ v: T" ?
  464.     {3 H% G: |5 I7 \0 P2 M; [# _8 l9 I
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* V8 k+ S# k6 N4 f0 [2 ~  d
  466.       {
    ! ]9 o8 T; U" K$ r! g& z" T
  467.         char szLanguage[50];$ @! M/ u; B' F9 V! }
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 [) U0 N; v& C3 Y" ?
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 X$ d3 H1 h1 X- }0 |2 m# h
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 Z% g3 b/ r, V# E4 l' ~$ a1 b
  471.         else                                   m_iLanguage=ENGLISH;( N0 w+ m1 N% z( m& n
  472.         char szRegister[100];, `( \" V# K1 N
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / g  r5 m' I$ d4 k" z4 E; a6 p
  474.         strRegsName=szRegister;2 U4 p, [- |0 V# e# M1 j: s
  475.         char szPatchURL[100];
    : W. t) L1 m, V$ y9 {* N2 w3 H+ U
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - ?" O/ Y' M; S6 ?9 i1 Y9 l8 E
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 K; n8 l& g; e8 n$ I
  478.       }+ h3 E6 R4 Q/ ~$ `- m4 K, q
  479.       else
      h4 J. M6 a8 R* `, H) }0 a- W
  480.       {8 |4 R* r) p+ |& w/ c
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : t# D; d; ?' S1 d7 l
  482.         strRegsName=DEFAULT_REG_URL;
    9 L% F8 e0 u6 g
  483.       }
    $ i/ ~' z6 j( S* i. y# o4 y& g
  484.     }9 o* [6 W# F" V
  485.   }8 o% C) P# F9 E# x3 k/ i2 Z" O" |2 Q3 S
  486.   return true;
    " v4 I4 t+ n6 P& k9 v: B
  487. }
    $ j- y6 y( D8 N  Z) V
  488. ) q3 u. ^5 Z7 f. M# E, x& z
  489. #include ".\ZLib\unzip.h"
    / W2 [0 j) r5 R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 l& z: A/ R/ m0 L3 c2 K( v" ]( C6 A
  491. /////////////////////////////////////////////////////////////////////////////0 D! Q1 E0 [. {/ x' d- H. @  F. n
  492. // CRevAppApp initialization1 P: p$ j. F2 ?; p

  493. * N7 J6 O5 }! K  O% u
  494. BOOL CRevAppApp::InitInstance()
      O/ f" I6 Z7 {! ]3 _
  495. {" k$ A% S1 C6 b6 Y2 m
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];8 C% `, A* G1 Q: A0 N
  497. 3 ]# a+ g. s$ j: m9 k* H6 }
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);" s2 B# B" O5 m, q. w
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    % r3 {- l, b) z" V, d
  500.   {
    * j5 W; O+ M7 {  M0 i% A# Z" g
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    9 A# j7 \& P* i1 B3 E
  502.     GetPathFromFullPath(szPathTarget,szPathSource);. B. V6 e& H' u( @( d2 C
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    , I" [7 j- z% h- {
  504.     {
      \4 J# B# E, o, P3 F# ?* G
  505.       strcpy(szPath,szPathTarget);/ k" f- d4 ~0 |: h. L5 N
  506.       SetCurrentDirectory(szPath);
    $ \3 k% T8 D7 o6 l) |3 g5 B" x
  507.     }
    6 F7 ]; |# r) j8 b/ V
  508.   }
    " s& |1 B" s. U7 y' K
  509. #ifdef _DEBUG  o9 F; Q) x8 l' }% Z) \
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( U) o; P) n8 [; R* R
  511. #else- M3 [5 L, w3 d# A) m
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 d& Z* N# B1 x( _8 d
  513. #endif
    0 I5 o4 u0 e+ k% v& q) x
  514.   {$ h; A: \6 O% o) n& M
  515.     char tempFileName[MAX_PATH];
    9 j' f2 M+ a: K' l
  516.     strcpy(tempFileName,szPathSource);
    . [" B2 `0 I9 S! r# b
  517.     tempFileName[strlen(szPathSource)-12]=0;8 D! q1 B% T* i1 n. y( Y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( s6 N; t2 v+ v- a+ M  Z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    0 d( {" b; n7 J' k3 n, E6 l
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);3 r" [( G1 B; K% n7 Z6 ^' i
  521.     return TRUE;
    7 f" F( i3 Q  g6 S7 z: l
  522.   }
    4 [: M" i1 c; |  c& O, |  ?3 W
  523.   // Nuke 0118: Delete run.exe
    : a! S7 |; x/ ~" w6 ?3 S
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    : \9 [1 w4 m& h
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ( m5 q6 M' L6 T0 e
  526.   if(!ReadCfgFile("Config.ini"))
    1 `1 n3 O4 t% ^' h
  527.   {5 a! b  _1 J6 ~" J
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    1 j  A9 b* c. F3 y) F' h" Z
  529.     return TRUE;! }* {, r( \( C0 \: c& r9 o
  530.   }
    " I  g- P/ q7 P( w' K  p- ?- ^
  531.   HANDLE mutex;
    # o& x: M2 u1 [# w$ m4 k9 X1 {
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))" E5 a! h0 {* G8 V: i" N
  533.   {
    , p2 \& e8 u# \8 R% R
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)+ d7 p4 e/ q6 c0 x$ V
  535.     {
    1 u4 A6 J. j6 A! c( j: b
  536.       CloseHandle(mutex);
    + C' q: N9 W% \5 L( G
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    0 a& a7 \. G. b$ b6 b; p7 M
  538.       return TRUE;% U7 C! ~( U. G8 T) \$ z3 X$ e
  539.     }! O% |# n; i1 h* m, s1 V2 \, y1 m1 f
  540.   }  8 b: D1 c. x( w) |! ^/ t- S
  541.   CloseHandle(mutex);& B* n# [8 e; w( H; s

  542. ' |, K' g( _, {6 `+ ~
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # r5 }5 @' J- }* l* Z8 C/ m. G3 Y
  544. 5 s; P0 K8 y- \! t5 ~4 Y- W+ o3 S" }
  545.         AfxEnableControlContainer();7 \( {+ M% y( j) I; d
  546. : l% ?: |3 |& n* S
  547.   bCanUpdate=FALSE;
    : ?5 U' @* f' t
  548.   dwStartUpSteps=1;) s) Y; V" [1 N0 `5 P, h4 v
  549.   dwProgramState=AP_NOTHING;
    7 {- Q& W+ P/ W/ c! n
  550. 8 I( d6 S& z' c+ p4 E! {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    9 N8 \) t& K' r, _. q( m

  552.   e! j4 p& j8 Y/ ~, f) S4 Y
  553.         // Standard initialization
    0 `) u9 a+ |2 h0 G; e: v
  554.         // If you are not using these features and wish to reduce the size
    1 |% `1 y7 k1 z7 L8 u
  555.         //  of your final executable, you should remove from the following
    ' g, a. k! h+ r* z: [% l
  556.         //  the specific initialization routines you do not need.
    , p' M: z: x) K7 k) \4 C4 `6 D

  557. 8 \: A$ R( {: l" z/ ^% h( X+ s
  558. #ifdef _AFXDLL* p$ G0 v/ m8 E2 \. [& K
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL$ i% t, f8 t# _- _8 K2 Y
  560. #else$ y) n3 l! J. H0 H
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically1 X: b7 I7 f0 q5 |/ T& U
  562. #endif* C) r: U( s- n6 M
  563. / b1 ?# q( m' W) Q+ j3 t
  564.   dlg=new CRevAppDlg;- _2 J7 b% z5 g
  565.   dlg->Create(IDD_REVAPP_DIALOG);- p7 {- F6 F+ {) e: g# k  N* D( j
  566.   dlg->ShowWindow(SW_SHOWNORMAL);1 ^4 u3 ?$ u' t; e- w) f$ y# j. c
  567.   m_pMainWnd=dlg;
    3 i  l% \/ c7 N4 H: ~: b; |/ z

  568. 2 D9 s) z0 I( ?  p9 F$ |* Y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    0 ^, g$ C( O. D9 q. s* c/ h3 {

  570. $ ^2 L, d( U9 y
  571. //  GdiplusStartupInput gdiplusStartupInput;
    * J+ j% v& l& \2 h; f: {- ]; V/ ]& I6 _
  572. //  ULONG_PTR gdiplusToken;
    8 W: B6 \6 O7 c8 D
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);, B8 s% F! w' U( n

  574. - Q  @3 V9 B( m; m, m# p# k" d8 y
  575. //        CRevAppDlg dlg;/ s1 I' ^+ L/ o( {
  576. //        int nResponse = dlg.DoModal();
    + @, T! k, m) C3 B$ S% o' z
  577. //        if (nResponse == IDOK)+ I# V+ k( t+ C1 C
  578. //        {
    . }6 U+ X. B5 G; X
  579. //                // TODO: Place code here to handle when the dialog is
    3 G3 a. n( s& E" J/ ^0 n) h1 Z
  580. //                //  dismissed with OK
    9 L" ^9 f, K3 m( x8 {( w  u
  581. //        }3 T5 _. d7 }5 A" b: m: O/ ~& R0 v
  582. //        else if (nResponse == IDCANCEL)
    3 e& Z0 S( K4 n: }1 U" r
  583. //        {. q% J% m4 T% n
  584. //                // TODO: Place code here to handle when the dialog is
    0 N  F& F* X2 T  X
  585. //                //  dismissed with Cancel
    " `- N- A* U' r5 Z1 `% `
  586. //        }# J$ o$ j8 F1 |
  587. . q4 |! N, j& L
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    $ p* j( ^% N6 s  k6 l
  589.         //  application, rather than start the application's message pump.& F4 n; k2 V* Y! ]- v
  590.         return TRUE;% G9 V* A* ^( n% G% m
  591. }
    . ]$ _; x3 k; @: b. Z. `

  592. ( r* b' U; ?- b8 U/ K
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * \) t! j8 g6 {  D
  594. {
    ) G8 z# D5 q2 H! {% y- z
  595.   int i;$ y0 E$ W) S4 N7 A/ g
  596.   char *szRet;3 |) A$ C9 N' b, d/ F" E$ c

  597. , p  S" x# ~1 k$ A( W4 x+ g
  598.   if(pSource) { itoken=0; sztoken=pSource; }6 ?; \: G/ U9 H, ^6 [
  599.   if(sztoken)# `+ S  p2 w" S& l/ R
  600.   {
    $ [2 v( Z5 p6 E, t, L& f7 \
  601.     szRet=&sztoken[itoken];
    / @) l, m. F( f+ ?7 n3 Q
  602.     while(sztoken[itoken])
    9 U* t1 y/ C0 d, n% W6 D
  603.     {
    2 `1 m7 g* @* w) ^
  604.       for(i=0;i<(int)strlen(token);i++)* c/ |/ w5 D( g& R4 N1 T3 A
  605.       {7 g! [& q4 ^/ g  V, f# v; g
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    $ k8 U1 a4 n9 B1 |4 N. [: f  S
  607.         {
    1 V+ I) y, I" E1 r% B$ F
  608.           sztoken[itoken++]=0;
    % |0 H' m) n2 d  c
  609.           sztoken[itoken++]=0;
    3 _- \8 u* ]( y
  610.           return szRet;' D& g* `' ?" T, q3 |
  611.         }1 Q! n: a- R8 q: A  k' I& d
  612.       }- J; q  c! H* K  P) s9 b
  613.       itoken++;
    8 M" g" ]8 P# Z+ Z' [9 C+ p
  614.     }
    2 U9 y8 T; T( s" i
  615.   }
    / u. \; v1 I- U1 ?; t4 m
  616.   return NULL;
      b2 h; M& w6 ]. V
  617. }
    0 A, f0 t8 b( s8 ?* @% K4 b& s) e
  618. - |9 e, d% m, z) ^3 j! I
  619. void ProcessProc(long Total,long Current)  _; C: y* D* E0 e3 T0 i
  620. {6 I+ Y) f/ k, P7 e0 J
  621.         MSG msg;
    ' P/ l1 _& g/ k& d$ M- G. j
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);: w! G6 ]+ [+ h+ l; _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));1 m" v3 F1 t" ^( e
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)), y7 c  W' X( E2 a4 q. `
  625.         {
    # i* I; R: j0 @$ N7 ?2 g3 t' ]. V3 i: J
  626.                 if(!GetMessage(&msg,NULL,0,0)), h% E" w) C* d$ D1 ]! `9 o6 W* S& z
  627.                 {
    6 `6 S& ]- x: w* w' s! r- I
  628.                         return;/ A( F6 E% q. w) V
  629.                 }6 v- D* G, f4 ^5 ~1 c
  630.                 TranslateMessage(&msg);2 D: g6 a) @& z6 ^8 N& [* `! G
  631.                 DispatchMessage(&msg);
    " S, |  e( k5 z" V8 }) y7 o9 }2 Y
  632.         }       
    . |( \% F% }5 R. L, ^1 D# u5 I
  633. }8 d+ @$ R2 _$ I* _4 ?( ~$ f" j
  634. : \6 i1 F+ q$ @+ n; o
  635. BOOL bFirstChar=TRUE;% P# ^6 J; [% n2 F

  636. . R: ?" r$ e# X/ N. A. k6 d
  637. BOOL CRevAppApp::OnIdle(LONG lCount)+ t( B4 @6 R4 G% A2 N) O7 ?
  638. {8 G1 a- A, e+ B: {+ Z/ m7 S9 ~
  639.         // TODO: Add your specialized code here and/or call the base class; z3 b: B* @. ?
  640.   switch(dwProgramState)2 l. T- y8 T+ h! ?( \5 Q
  641.   {
    2 `, @9 }+ C& ~& f7 t
  642.   case AP_NOTHING:; O/ Q& _/ n3 z. }
  643.     switch(dwStartUpSteps)- E3 K# d9 M9 G; W
  644.     {" X5 T3 ~( m( O0 ?# a2 D! X
  645.     case 1:
    8 E  R6 ^" y! T0 [, F7 `" o
  646.       {1 z! i8 j/ G1 H  F" M" c
  647.         int i;
    6 q# r- A! w5 \; l& l& s
  648.         CDC *pCDC=dlg->GetDC();
    $ q1 k9 j/ s' C6 C+ ^
  649.         HDC hdcwnd=pCDC->m_hDC;  k! y' z) V7 p* }' }
  650. //        Graphics graphics(hdcwnd);
    - N/ P5 L3 V/ O; N
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ) ^6 f9 ?7 B: Z4 |/ z* z
  652. //        INT iWidth=bitmap.GetWidth();% l; H6 d- k3 k# x5 {
  653. //        INT iHeight=bitmap.GetHeight();
    / q, o! }% a* k9 {
  654. //        Color color,colorTemp;% ?# y, P3 i  Q2 A
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)- Y8 s0 g+ }3 Z. ~* b" Q2 x' m
  656. //        {
    - k; S" T. v" q. K& X% |  v* x
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)7 V/ J& T  u' Q' J
  658. //          {7 }# n6 r. V$ R6 ^
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    # c' g* B& K! N+ D
  660. //            colorTemp.SetValue(color.MakeARGB(
    . ?. s/ n  p4 q% }1 A2 O
  661. //              (BYTE)(255*iColumn/iWidth),7 N. S5 M- a3 ^4 G1 g
  662. //              color.GetRed(),& p( Z: p  H6 G* N, w
  663. //              color.GetGreen(),+ Q. {8 i1 a: E* e) }- r9 ]/ s& Q
  664. //              color.GetBlue()));
    2 t9 C3 z" E4 h. K! R
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);0 C& g1 L& u5 e# B  q; o% `
  666. //          }" a6 v; w! ^* i) b+ u. x- E6 Z
  667. //        }! I$ d+ e8 n9 l% g0 @
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    0 q) X6 y- z( R3 n& t1 u8 Y0 R+ E
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; q5 ]1 X. j* z. _
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");" a$ j; z' q6 ^+ P. X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 t; [: a, k7 v
  672.         for(i=0;i<240;i+=8)
    & A9 ?7 M4 E" x4 \; K, Y* k
  673.         {
    ! m' \7 o8 o& O* `: ?/ O
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 h$ `6 Y+ \+ Y) d) W  S
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);( T4 v5 g/ i9 r! t$ k+ B$ n0 z9 ]
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ w& B' J  R, k' u
  677.           Sleep(33);
    " E  Y7 _( m, B7 t( ^5 }3 y
  678.         }% [* H' i8 j2 q" ^  v
  679.         Sleep(1000);
    $ R6 |3 v/ c$ q) y5 _5 _" U
  680.         for(i=240;i>0;i-=8)" O! K% }' ^7 p% q9 E
  681.         {
    , I/ \8 Z, _3 d6 O! J
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( ^$ ^) @1 _& @8 f, c
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 E/ d: J+ D6 ~6 E. ?
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 Z3 T2 R$ R6 ^! @) M  @& l
  685.           Sleep(33);
    ) e* K: j! g' f) O* D" w
  686.         }( V$ _# I. ?" h6 W  Z0 u2 ~3 c
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    . T% g, ]& A- B5 G# {
  688.         dlg->ReleaseDC(pCDC);: X" r# L5 N) T7 k( U9 p0 g1 y& @
  689.         DeleteDC(hdctar);5 M0 I4 R0 W8 r1 i( J0 @$ J" g
  690.         DeleteDC(hdcsrc);( z4 u# F( C8 G
  691.         DeleteDC(hdcorg);
    1 k1 _. |: G% @; i% u# |% C
  692.       }' L: Y+ ?+ x) l1 U5 [; j
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);0 T( q) {2 l7 _# x! K4 \, y/ G
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");% h# f: g% J/ `6 L& K
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");+ u. B% C, ]+ d) G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");: r' o+ U* a$ w& Z/ j
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' w) X' E* J. i4 B
  698.       if(!Dn.Connected())0 {- W% _/ r' ?6 G: ?
  699.       {
    6 f% b9 P7 j& \4 Y0 f
  700.         dwTotalFiles=1;
    % E8 h; W4 _5 B% E
  701.         dwDownLoaded=0;& z" b' b7 }9 w& ^8 K& A/ e; k
  702.         bSilentStep=TRUE;! f5 n$ s- V3 y7 ]+ H% a: p2 H0 S
  703.         bCompressed=FALSE;
      ~( W" c5 P3 }# G, `
  704.         strExtLocal.Empty();' }5 S% T3 y1 ~" g
  705.         strFullName="readme.txt";
    6 p( G" x6 f. L9 g3 }4 P3 r* Z' E
  706.         dwProgramState=AP_CONNECT;
    7 x# V2 B- r: t  Y
  707.       }: A) R- o6 x2 `4 _+ O4 Z, x& j
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    % V5 u2 j2 ]0 L4 h
  709.       dwStartUpSteps=2;, J+ X5 F% K7 U: {1 c2 h
  710.       break;
    + s6 d5 ?6 ~5 v6 o
  711.     case 2:
    ! f- a" |* c  T, F0 _
  712.       {& d' W4 `" h4 B0 r: c% q3 I5 Y) _7 D# ^3 h
  713.         int iEOF;
    6 C" J+ c1 o2 v% u1 S; [
  714.         FILE *fp;
    ' C) b* P5 F3 G. d1 e
  715.         char szString[512];
    ' J0 F) X5 y$ p! r: I7 }
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");8 z, v6 i- r: i$ I) l9 k
  717.         if(fp)
    ; V- _4 b3 K4 O% h7 K- g5 f8 b& Z: D
  718.         {
    , C; }! v1 y* V% V" t
  719.           do# `4 I2 s+ T* K# O# g. o6 W# c0 l
  720.           {
    & a  \7 M2 Q5 M; F) K
  721.             iEOF=fscanf(fp,"%s",szString);
    6 y2 j7 Q$ r2 O5 S& x* w. h
  722.             if(strlen(szString))1 \$ s0 W- n6 {% E, \4 ]! j0 k
  723.             {
    6 S2 j% M# m# k% r6 o$ A/ Q$ y
  724.               if(bFirstChar)
    3 y* y5 W- z  b! m9 W0 n  {
  725.               {. }; T6 C) n! I! b
  726.                 bFirstChar=FALSE;) B( i& T) D; w* d+ c
  727.                 bConnectIsBig5=FALSE;
    $ `, ]- N; }; G: u) u" ]$ l) r
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    % B( X/ `2 P# ?8 A( }
  729.               }+ T, J3 F' j" g% o" q) f- P% M$ E
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    % m7 O% O: {& p  a+ _5 i7 F; C8 Z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));6 @0 g/ N9 O0 |$ b6 q: q6 c& S8 q
  732.               dlg->m_ListText.AddString(szString);
    , i: M6 k0 y* @! u; `
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 r$ p+ i! K* Y
  734.               *szString=0;9 {$ a5 |2 F5 }3 u4 ~. I" O
  735.             }
    * q5 I' E% l, t& n2 @* E
  736.           } while(iEOF!=EOF);/ U8 ]# G% q) }- ]* x
  737.           fclose(fp);
    7 p% ~& Z1 E4 y$ E, Q
  738.           unlink(".\\DownLoad\\readme.txt");& Y4 }4 C+ A6 N2 q; q% G1 G& D
  739.           dwStartUpSteps=3;
    : ?. W& x6 b. e
  740.         }
    # N+ M1 H1 k/ t4 H
  741.       }. F7 [3 Q' v$ W  w, q4 N
  742.       break;
    1 E2 d. o& k, o  M& b' l
  743.     case 3:
    0 M* @* p4 t4 C& l  Q1 `; t
  744.       if(!Dn.Connected())) [' j5 i9 H& g( x* u
  745.       {5 ]4 U+ P, [/ _; z$ P
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ; X+ c3 R6 `; G4 U( G: x7 ?8 `
  747.         dwTotalFiles=1;
    0 m4 a! v6 g$ ]# t3 w
  748.         dwDownLoaded=0;4 D7 `0 f2 e% S! V
  749.         bSilentStep=TRUE;5 E6 y4 p# K$ I# V+ Z& `
  750.         bCompressed=FALSE;9 u' v* N3 _3 _4 a3 |
  751.         strExtLocal.Empty();
    $ t" D9 \  J1 U8 b3 F
  752.         strFullName="checkversion.txt";  l. V% U  e% y; U
  753.         dwProgramState=AP_CONNECT;
    # o! x$ @8 S% \2 @
  754.       }6 ]7 ~4 f: o( O/ @4 W* b& U
  755.       dwStartUpSteps=4;
    4 f) b4 N1 L) I5 Z
  756.       break;$ T4 u9 i9 m7 ]8 v
  757.     case 4:
    : i6 _: B2 M# N
  758.       {
    & B% `. ~* [6 F  ~' y
  759.         FILE *fp;
    ( K) y/ Q. f2 s  D% S
  760.         char szString1[128];. C/ `' I- d3 P% M% ?
  761.         char szString2[128];
      E7 D' d/ b' D7 N- X$ A3 P& A5 V
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");; u5 {# Z& x1 }
  763.         if(fp)0 x4 ]. J5 q3 C( J9 C
  764.         {2 C2 C* C: G' d! l1 _# w7 V5 X) w
  765.           fscanf(fp,"%s",szString1);2 l: |3 E+ O/ S1 J
  766.           fclose(fp);3 B+ l3 r' U9 L* N5 [- I7 f
  767.           fCheckVersion=atof(szString1);9 v8 U& x+ d7 n. ~4 f6 `# L8 V
  768.           fp=fopen(".\\checkversion.dat","r");
    . b4 q" b7 _. ]+ ?# l" Q8 X) l
  769.           if(fp)
    0 P: F5 w' n8 l; B
  770.           {
    ) Q, w' r! W* N- o8 C7 |7 e3 {; J
  771.             fscanf(fp,"%s",szString2);8 e3 c/ ^. E% i# @6 T
  772.             fclose(fp);
    " P: n7 u( _$ X" u
  773.             if(atof(szString1)!=atof(szString2))
    ! v; t! M+ b- J/ C+ z5 }* G
  774.             {
    ) j) a9 u1 ^  A; Q8 {8 d4 s- k8 ~: T
  775.               if(!Dn.Connected())
    & Q7 T0 a6 m5 Z/ S; G
  776.               {
    8 g# g- j5 k3 e, a! ~- M4 Q+ P4 R+ J
  777.                 bFirstUpdate=TRUE;
    : Q7 l( |+ z) o5 ]$ U
  778.                 dwTotalFiles=1;
    - w8 o- B) k4 o" z8 }
  779.                 dwDownLoaded=0;
    5 m# M0 n6 T$ o( a
  780.                 bSilentStep=FALSE;& Z) {0 H6 E3 ~" p, n
  781.                 bCompressed=TRUE;: `' ~" g0 Q) P; L& j/ T% C) [
  782.                 strExtLocal=".\\DownLoad\";  e* `0 z# a1 n0 |$ P" ?1 d. ?
  783.                 strFullName="update.txt";% V0 M# q. T! a9 e
  784.                 dwProgramState=AP_CONNECT;
    ) @- L' K: c, A% m* ~; u
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 b' s) Z) S- w
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 v. Y9 V2 D9 k. q7 p
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : M9 _  |% @. J6 J2 `
  788. ! l6 a% f5 C3 |
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& ]- S4 }/ H5 b
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    : c1 ]# E7 l& E# z. w4 }
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)6 Y& k% J% C% q
  792.                 {
    $ M- G2 X% a! Z, K5 K
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! m$ T5 R; Y0 {
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");. ^0 X2 X+ d% ?: A: Z" W
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");6 d7 L  P- t7 g/ n3 g, ?/ W+ l
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 ~* h. J$ h- |+ J

  797. 0 \. I) p9 Y; G$ o; K7 x. P
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    3 t5 I2 A+ }1 Y+ I, F
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ( L( d' y. e+ c2 h2 [
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");$ o% v, H9 V* n+ k) X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) q/ l% T3 O5 k! o% V. j
  802.                 }
    ( i0 T* T3 ?2 R& \2 m
  803.                 dwStartUpSteps=5;! k! x7 |- g) Z% Z( u% x
  804.               }
    . M& d+ a& f) z4 E
  805.             }
    ( Q. k3 @% C# w
  806.             else# k0 Q: k$ g5 C0 q$ ~) K
  807.             {
    ) I) h" f8 D! |
  808.               unlink(".\\DownLoad\\checkversion.txt");( h, r% b4 r; X2 q  V7 ~
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    5 f8 j/ P8 N* C
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");) \- C* |5 M* m5 T& o$ K5 Z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    : c5 G+ ^$ C4 h6 U$ J0 A* O
  812. 8 J8 p: i, \5 W! \. D* H# [, J2 s. ^
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 ^1 i# ^; H& O; t9 i- O6 z
  814.               dwStartUpSteps=99;
    6 K+ V- U% w* y' [
  815.               bFinishUpdated=TRUE;: _8 F2 q% [* y5 {2 \+ ^$ l. [
  816.               bCanUpdate=TRUE;; Q% s% U: `" m  f) J7 \
  817.             }
    0 r* j# n& Z  j( w
  818.           }3 C* h# A; G; j7 l( L; I0 [
  819.           else
    $ G) b, F( v1 O& A! J; A$ s
  820.           {
    3 `5 S$ b# q! I; m  ^' c
  821.             if(!Dn.Connected())# N6 b% `$ m5 \6 f' Q( _/ O( B. t
  822.             {$ ^; G/ B9 R9 L- D# d8 g
  823.               bFirstUpdate=TRUE;
    2 M. N2 r/ d6 O- ~' y4 z0 p
  824.               dwTotalFiles=1;. k2 @& E3 R# F. h+ ~
  825.               dwDownLoaded=0;9 i7 I) Y* X/ e" c
  826.               bSilentStep=FALSE;
    ( h5 \1 F/ V5 k5 X) N1 D4 t5 P
  827.               bCompressed=TRUE;
    ( A. U4 Q& `9 j) s' {
  828.               strExtLocal=".\\DownLoad\";) R  I, v" s5 _  F
  829.               strFullName="update.txt";
    ( X" b. @$ e6 h2 {4 x& r& l
  830.               dwProgramState=AP_CONNECT;8 Q: O% Q- Q" |- E* D
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * E8 S: u3 g4 n( L6 R( S( I' I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & O  u( w& ~: T- Y/ J' y8 A
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");9 V, j& v: a5 d
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* H0 i! ]9 A! V, E
  835.               unlink(".\\DownLoad\\checkversion.txt");% f$ \8 ~6 L, Y0 R9 l& T" g# |! w
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ! A5 U% O0 H! L! ?# M& m- p
  837.               {
    1 B0 E* l! H7 F( x9 ^) Q/ L
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    . a! z/ P* ~' K; I1 i( Q* \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");* |2 \9 R# h( Z' A
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");' P% A: {" G5 l
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ n1 }8 v6 J7 g' z1 M# C* P, C
  842.                 7 V  R4 K4 A$ I0 E3 ^
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! Z4 b! \6 ]3 j, L
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");8 d& [$ m  l0 g( j% [5 }' p
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");; ~' _4 v+ w% u& d8 Y& c
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  S1 j5 w9 u0 H, v2 r4 J
  847.               }& F* v! N) U+ @& u
  848.               dwStartUpSteps=5;# _7 J: J; H2 \0 b" d- q: Z
  849.             }
    2 q" v7 [! }  G! H% s; w- z9 C
  850.           }
    # o3 K1 S. u7 N: M
  851.         }
    5 M8 \; z3 w+ W& S, U- J. |, o
  852.         else
    $ Y/ \' x3 D! y2 m  z; x) F1 ]* }4 V
  853.         {
    , E% _8 o1 q& ]/ d1 g+ n' Z; O
  854.           dwStartUpSteps=3;
    # r* [9 k5 s! X& T
  855.         }
    ) P' ~4 t. [1 U7 H& d+ r% d
  856.       }" `$ \6 e: @( Y# j. i2 {  ^5 i
  857.       break;
    * e8 r3 B5 t+ f2 f5 K
  858.     case 5:
    * S' G, x" S/ f0 w' e; E
  859.       {6 B4 U. H6 T( \7 L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    $ t* J0 l7 t; R! g. N
  861.         {) R- f. x7 }: J0 {4 I1 D& B  c
  862.           int opt_overwrite=1;
    6 [: n- V$ V  ]  F7 B
  863.           int opt_do_extract_withoutpath=0;
    4 z) R2 I% _8 g0 p: Y: U7 y
  864.           unzFile uf=NULL;
    % Q5 H8 I4 Z, y# Q' a; U

  865. + k  _9 [' j5 _0 U5 O; G4 a, a
  866.           uf=unzOpen("Wsa.zip");
    8 z& z- d1 i$ N5 y# h/ g# X
  867.           if(uf)
    - O$ e, a2 F  \) d" x
  868.           {1 Y) _+ n7 _/ R3 J; \
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    2 h3 K% K5 d( J4 ?& L
  870.             unzClose(uf);
    5 @0 @' c; p( o) C
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");! W/ W( O. K5 m" e  o: I
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) `+ Q. U$ }4 b' u. E
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    9 C9 l* g) V* G0 h4 W% m
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - C" M, ~3 i4 \- h1 Z' [
  875.           }' ?% h0 l! x' r
  876.           DeleteFile("Wsa.zip" );
      U6 U( ]& Z; Y, B0 G- H
  877.         }9 [$ X/ q, h7 b. Q
  878. % o" E8 C# V" ^/ W  n
  879.         if(CheckLocalVersion())
    / K* ^2 H, P1 V& ?  j
  880.         {$ T$ @! k; |8 [" F
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");! V7 D6 U& v8 y
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    4 w' q8 L5 V. v) H" G
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");* A' Y7 ?4 |5 D3 _
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 z- U$ r' G" _  p, B+ ~* T
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);. V% P( _! N! w# J
  886.           dwStartUpSteps=99;) e1 x* l. v/ j9 O; |
  887.         }- G# ]9 C1 I# x5 ]
  888.         else
    # k4 e* P6 i* z% h
  889.         {5 n# K1 W/ I6 s$ u
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    7 o" b2 _3 _8 e
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 Q4 c4 b9 ]+ c: h  s1 O, [
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");$ H& H  `1 o# ?' y  S# z3 Z( w

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

$ G& T- M# q7 n

評分

參與人數 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客服返回頂部