找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
9 k% s4 d  t1 S
  1. / RevApp.cpp : Defines the class behaviors for the application.
    : c9 t% ~1 s3 @) T+ z7 N
  2. //+ k3 q  o$ B# L+ m$ s

  3. ! x: x- r" O% U( u; h# w% p
  4. #include "stdafx.h"
    - g/ B5 @/ Y8 o0 \- E

  5. # b; |4 |: ?7 t- A6 x: C3 J
  6. //#define UNICODE/ d- P- I; r% N6 K
  7. //#include <gdiplus.h>" y" u, P; T" z3 K; ?, y
  8. //using namespace Gdiplus;* Z) e/ G* S% T2 I- D

  9. + s& P4 M- P3 Y( ^
  10. #include "RevApp.h"
    ( g. k5 H' m) w0 _
  11. #include "RevAppDlg.h"
    - k8 R; i' E2 N  A8 @4 [+ D
  12. - X; b% _& F4 g: y" C5 Z8 K
  13. #pragma warning(disable:4786)4 X+ `( ]+ }. L/ C% X
  14. #include <map>
    1 P6 b8 d2 m  S. N! S1 U
  15. #include <list>
    * t- ?2 j7 v" h, |0 s) X6 ^
  16. #include <direct.h>1 @7 t0 D0 B' `3 L( @
  17. 8 r+ x. U$ X0 n( d
  18. #ifdef _DEBUG
    & l2 M* C/ e5 O" M
  19. #define new DEBUG_NEW
    2 Z  s8 k3 B, z( j- X
  20. #undef THIS_FILE- @, U$ D$ ~9 s' a8 Q
  21. static char THIS_FILE[] = __FILE__;
    # n6 T$ B) |+ G# v4 M  W8 W
  22. #endif
    1 G! Q; e- B* q4 y: T
  23. #include "SkinResDef.h"% ^3 m( F! Q4 H
  24. #include "ChangeBG.h"
    ! T( B5 w1 U6 z2 E
  25. #include "AFXINET.H"
    % k7 a$ v' r- j, j. C# W

  26. " j: F" l' f3 o* E$ Z
  27. #define TRADITIONAL_CHINESE 08 b3 O  h, K# {0 ?3 |" t; ^. q
  28. #define SIMPLIFY_CHINESE 1" M' [! c- e+ v# Y& h7 b) z) k4 X
  29. #define ENGLISH 2, b; l6 e4 k2 g
  30. int m_iLanguage = ENGLISH;3 n( f' Y9 g2 [3 k
  31. /////////////////////////////////////////////////////////////////////////////
    4 g0 z" G) {$ V$ S* G( D4 C6 a
  32. // CRevAppApp
    ) O: u7 ~: B# X6 z% t- w) P# w

  33. 1 k4 p- X: C' ~* T
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    5 Q1 Y  l! M; ]. S1 e' k
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    . w. J2 I' |0 A  T! L/ ?
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    : s1 r) _" a2 q/ M+ u
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!( q3 Y6 ^/ E7 f
  38.         //}}AFX_MSG
    ' D: M- D& f4 X1 }9 g: |
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 D7 D" s# m/ i# G  D/ Y! Y
  40. END_MESSAGE_MAP()- G1 W0 p. L! h" b# {
  41. 7 C! G, ?2 X( X8 e' ]2 ~: w+ C
  42. /////////////////////////////////////////////////////////////////////////////4 h/ l: C% f" F: s8 o& Y* M# {
  43. // CRevAppApp construction
      o2 M" p" M" Y. L0 w2 `7 z2 n) _

  44. , N) Q- g" _" j$ F  D6 x+ b9 B
  45. CRevAppApp::CRevAppApp()1 d6 P4 ]8 Q+ i. H4 h
  46. {1 O6 `% @+ L8 w5 V* p: _
  47.         // TODO: add construction code here,
    8 E( V) L, q4 C3 d2 q
  48.         // Place all significant initialization in InitInstance, D$ k. f$ F" q9 ]( C( I; w/ }
  49.   bDisplayIsBig5=FALSE;
    : p; z8 z: R5 m% x4 V
  50.   bRestartUpdater=FALSE;# c0 t/ W/ I" U6 ?$ i6 p
  51.   bFinishUpdated=FALSE;7 ^* Y7 Q* k9 c4 X1 v1 H
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;( j# v' M$ h! f: L1 f
  53.   InitChangeDataBig52GBKS();% k! B+ A) }0 ]
  54.   InitChangeDataGBKS2Big5();* L6 R; l  w' Q) I: n
  55.         //
    5 C1 l% O/ o/ O) H1 {
  56.         bClickRunExe = FALSE;8 o' d" l; Y) {4 ]# N
  57.         //$ m2 G$ w6 \0 C" i% ?' [& P+ W
  58. }; o: A( ]; L% o5 k
  59. / \: N& P% H: r( `4 k6 F
  60. CRevAppApp::~CRevAppApp(). [& T% \" G  J% a
  61. {
    7 d3 |* `! r1 F8 J$ W1 m
  62.         // TODO: add construction code here,2 b! Y& b5 Y6 c' L: w) X3 N
  63.         // Place all significant initialization in InitInstance* y# c1 ]- Q" P9 ?( O
  64.   EndChangeData();0 i2 D5 @1 u) b7 _9 i5 B
  65. }
    # L* c1 l* X% U$ `& F& X

  66. 4 ]$ C/ H9 W  ~+ B9 S4 k6 ~* v
  67. /////////////////////////////////////////////////////////////////////////////
    0 t' d  i) Z* P2 i, O
  68. // The one and only CRevAppApp object3 _7 Z5 P) A8 q- n; D
  69. ' t$ R( ]3 |9 t" `5 C6 k1 K0 ?
  70. CRevAppApp theApp;9 t, i# ~9 S/ h3 ^( Y
  71. 1 {& k& u- H+ j/ n. N& Y! ^2 p1 S/ }
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)& Z6 y( b* {. l% @& G. X+ v
  73. {
    1 ]" d' R5 E1 q# C. r! I& i
  74.   int iEOF=0;
    , M1 [! q; \% ^; P' V1 C
  75.   char szTempName[MAX_PATH];5 Q* J0 o$ j( o  u- k& S6 X
  76.   *szFileName=0;& y) X* A" h5 {+ p/ g- q+ V  T! S
  77.   iEOF=fscanf(fp,"%s",szTempName);7 J9 _. S  z) \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')6 i- D* j/ p( S& x* m
  79.   {% l+ d5 v$ _% P
  80.     strcpy(szFileName,&szTempName[1]);- C5 i9 h. w- `% l" q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) U( ]) J8 W$ d& S
  82.     {; c3 X6 N+ @, h& \
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & |( l. s2 i) F
  84.       strcat(szFileName," ");
    ' z, d% k3 |5 d8 @5 B1 l
  85.       strcat(szFileName,szTempName);
    . r+ }; F4 l, i/ _. T4 E
  86.     }
    + z5 E9 ~+ |" V
  87.     if(strlen(szFileName)>=1)
    ! e& j4 e6 M7 }5 K0 @
  88.     {
    3 |' ]+ d+ i* ~) @0 z1 }0 @
  89.       szFileName[strlen(szFileName)-1]=0;
    * @$ ]+ [% O( i; \) b0 j/ \
  90.     }
    ( i: l' x* N% `' f- o0 Y3 L
  91.   }3 _# B: K8 V0 P; b
  92.   return szFileName;- \5 O, s0 z& L$ j% l8 P
  93. }5 l9 W" _" A; L- e9 }& p3 d0 w

  94. # ?8 b! h( o/ M8 l* I) h2 {. E
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    * P2 z8 A5 p+ [3 u* Q% e
  96. {
    & C4 h: G  Y8 K4 j0 c$ y
  97.   FILE *fp;6 X9 B9 {7 C: d3 S2 e
  98.   char *key=NULL;
    0 f. B  v) Q+ X) k# q+ b  ]4 _
  99.   char version[MAX_PATH];2 J$ b" r2 {( m3 o  ]% o' P- Y& k
  100.   LPUPDATEFILE file,olds;( ?. d: d8 n/ H( e; e. }/ E% {
  101.   std::map<CString,LPUPDATEFILE>::iterator p;9 l6 P* d! ^7 [' o. G  q

  102. ' ]0 n; N. x4 n: s6 R
  103.   UpdateList.clear();8 G2 }5 N7 G; g; D2 F2 J
  104.   UpdateFile.clear();
    0 t( I$ q; z, J# z- \
  105.   if(GetFileAttributes(filename)==-1) return false;9 K, V/ q$ M, C1 N
  106.   if(!(fp=fopen(filename,"r"))) return false;2 n. p; i# V7 j+ @" r9 ?: I$ @8 U& K
  107.   fscanf(fp,"%s",version);
    + j9 v6 Y1 o0 w$ c; m
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ p* }+ a' ~. {; ^
  109.   while(fscanf(fp,"%s",version)!=EOF)  \" T  f! O, V) D4 B4 Z$ A- p
  110.   {
    6 n9 q+ @- ^8 i" U- Q
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 i6 q4 W$ P3 r. W- ^+ L- p& x- h/ r
  112.     fscanf(fp,"%s",file->path);
    3 e2 Y; ^2 R2 L6 p. Z& M
  113.     ReadFileNames(fp,file->file);6 f9 A* u) u! R9 ?- s
  114.     strcpy(file->full,".");
    4 C/ ~5 C+ m) C; S! f) h# `7 z
  115.     strcat(file->full,file->path);% k1 [, p1 x! |% K
  116.     strcat(file->full,file->file);" l5 X- p& [5 x( C6 ~! G
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 }- f, e) z9 ^& j
  118.     {
    5 v$ W3 G0 P2 u1 q0 ~
  119.       file->vers=(float)atof(version);
    2 V( |& I1 u! i( E* w" Y
  120.       UpdateList.push_back(file->full);
    1 Q/ w" E2 A) V/ \8 U
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));( A2 y  [5 i0 o0 ^- e5 r+ q7 K
  122.     }
    1 K( F- k! X0 m$ G: M+ }8 y
  123.     else
    + }: v6 i  q9 T' X- x4 M
  124.     {9 F3 Y( |) ]% m& F( F
  125.       olds=(*p).second;0 D1 R# y- t* Z5 a+ I) m
  126.       if(olds->vers<(float)atof(version))
    & H& B# |+ e( r# D% o
  127.       {
    1 k8 o$ f" v' R$ p. {: d1 T
  128.         olds->vers=(float)atof(version);
    2 K% p4 N3 d( e
  129.       }+ C" i+ c2 B# w+ N* w
  130.       free(file);
    - L2 U# p* N6 W& X
  131.     }
    , Z8 T4 z* \# r. c5 k
  132.   }
    / f/ u" q5 r! u- G
  133.   fclose(fp);
    , S* }# m- `- h* _- B& ?% o2 @
  134.   return true;. V$ O  t* X% W7 }
  135. }0 x- b. I$ I) d  E
  136. - e) J$ }5 A; x
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)( B9 a3 Q& A2 F3 V* l0 A0 s
  138. {! d, o) h' U2 v6 Y
  139.   TCHAR  szFull[MAX_PATH];
      C$ `! X: z* J! W+ @5 D* h
  140.   TCHAR *token,*inter;# m5 X6 \! q6 S6 Y6 @
  141.   *szPath=0;
    ( Q: q. H" [, j0 g1 {
  142.   strcpy(szFull,szFullPath);( g: \9 }$ z5 d) c& C
  143.   token=strtok(szFull,"\\/");: N; W/ p, t4 I' }2 m
  144.   inter=token;
    7 b5 G1 w1 d' U5 O: [3 D" y
  145.   while(token=strtok(NULL,"\\/"))
    $ a5 b. R- W( p, l6 I
  146.   {
    ( c, P6 }2 I( E0 t- C5 L; W
  147.     strcat(szPath,inter);0 `4 o- {+ W- A/ S( l& G4 D
  148.     strcat(szPath,"\");8 I3 m& l: Q0 G3 N$ G& S" n
  149.     inter=token;
    & \, V" b; @# T$ o6 @' P
  150.   }
    3 I/ Z- t  k& ~6 v+ Q
  151.   return strlen(szPath);- ?- x/ u, `" ?3 I7 X- l/ S9 ?/ U( x
  152. }7 ]' x( Y& X  F8 O0 T% Y0 B
  153. $ O$ b9 }7 U* J$ H9 H! Y* `: ?. `
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    2 x* ]3 X% k2 s0 D3 G
  155. {% {* y; g8 L2 b4 E, ?: E5 G
  156.   DWORD attrib=GetFileAttributes(Target);
    6 p3 H, J- C' r1 S" u
  157.   if(attrib!=-1)
    # v2 J4 i  e: H7 d
  158.   {
    ; H5 P$ Q9 @" Y* o- A7 e
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    % I# G5 {2 O7 m3 i
  160.     {
    * |3 o- S; ?/ }7 ^- t1 Y* Q
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    * O5 |9 N3 G1 Z
  162.       SetFileAttributes(Target,attrib);# E# z/ v3 j% C* t
  163.     }8 q1 o- l) D  O( @
  164.   }
    6 }- H) q4 m1 m1 `3 q
  165.   CopyFile(Source,Target,Erase);
    . a) j7 G" C3 l0 t, u7 j. Y; P
  166. }
    8 S4 Z( H' f0 `. Q* ~
  167. ( ]1 D0 b% C& Y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)* f& N4 o8 J% A8 ], o
  169. {
    - _& B9 v1 e- Y
  170.      FILE *fp;
    5 W# t6 A' D, R7 Y9 w
  171.      char  szBuffer[8192];
    3 L% T" c* d. D* O
  172.   va_list  argptr;
    * _% \, ]0 n4 N# t

  173. 9 P  Q  p% [5 T2 f' d
  174.         va_start(argptr,message);
      t. ?( C) |* ^, O5 q6 p' m" v8 @0 F
  175.         vsprintf(szBuffer,message,argptr);
    9 d0 f1 o4 y3 d0 H
  176.         va_end(argptr);
    2 v8 f9 e$ m" [! J- h) t0 u0 k% J
  177.   fp=fopen(FileName,"a");, K7 ]' Z: q/ k% U, S
  178.   if(fp)) H5 x( Q: t: n4 Y* z
  179.   {' |8 ?% K4 _3 P0 h, g
  180.     fprintf(fp,szBuffer);
      g8 d2 l' Y/ v' T& P, ?" J
  181.     fclose(fp);5 B# ^. I( y- s6 D7 c" L( e
  182.           _flushall();) d6 Y% T- f+ n& w- v8 y! d
  183.   }3 \; K: a7 J/ D
  184. }9 U2 X. v: q% y, J6 i

  185. ' `. f4 @7 f2 ^( f: Z
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    + a; l8 b% [8 R9 Z& u0 A% Z
  187. {
    * ]) g! f9 S! ?
  188.      FILE *fp;  Q- ]+ N# y- [. x/ l9 }
  189.     DWORD  attrib;
    9 i* M6 n5 a4 u$ k" F6 g: P
  190.   attrib=GetFileAttributes(FileName);% L$ ?% {2 @4 }: M) n8 A
  191.   if(attrib!=-1)
    6 r* H" R& h- ^. X" x* t
  192.   {
    8 O* _/ C" W" m! p% {
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);+ ]7 c. L$ k; q8 Q( ~
  194.     if(!SetFileAttributes(FileName,attrib))
    4 a: a2 H5 p$ P, u7 C3 g2 d' i! u# o
  195.     {" ^0 @8 h) v, s
  196.       return FALSE;8 L1 k) `1 ^  q! F- C4 [# V' N
  197.     }# M2 |) K* ?% G" o" l+ S1 S: b" u% k
  198.   }: S5 r/ L$ w2 h, o
  199.   fp=fopen(FileName,"wb");
    # B1 R5 z6 G, p# `0 @  l
  200.   if(fp)
    9 @+ S8 a4 T+ `$ ^5 Z! m
  201.   {
    7 f: r& |* e; B2 t3 R% L. }
  202.     fclose(fp);" h6 P- ]7 ], y& B
  203.   }
    8 V/ x' V1 k5 g
  204.   return TRUE;2 q% M+ V7 R$ e/ Y4 k9 o
  205. }, D& A  Z1 x0 ^, v, w
  206. 6 F2 m, U' N# Z' c3 s
  207. BOOL CRevAppApp::UpdateLocalVersion(void)& S; n3 d% R( |3 P; `" x( ^
  208. {
    9 o. u5 G* g+ ~# A
  209.   char filename[MAX_PATH];
    3 |7 p* W& n* X' d. N7 A
  210.   LPUPDATEFILE file,olds;/ p  ~& l; e' P) p9 s' n
  211.   std::map<int,CString>::iterator i;
    5 X! Z/ Y& ^: d- g! B
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 j* ~& h: U' @9 E3 `- b
  213.   std::list<CString>::iterator l;8 v5 {' j" d' Q5 D1 K1 k

  214. 9 R1 G# C& ^9 n" M# C
  215.   if(bFirstUpdate)* A( _+ ?' W9 R& Y
  216.   {! p7 k2 R% W/ n
  217.     dwCurrFile=0;
      E' V- m% y7 [+ d
  218.     bFirstUpdate=FALSE;
    6 _) C) w( t( e% y1 {4 |0 u7 }
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# [/ K: g! ?9 e. t
  220.     {
    9 q6 S, ]7 s1 e5 k3 q
  221.       dwTotalFiles=UpdateLocal.size();
    ! j2 n4 Y! M( C1 O0 v
  222.       dwDownLoaded=0;
    ( y4 k( e4 K: {+ u
  223.       bSilentStep=FALSE;
    9 e6 I  b8 q" C6 n4 D
  224.       bCompressed=TRUE;
    $ P, t6 \- b- @7 ]# G
  225.       strExtLocal.Empty();
    + N0 H9 _; c+ N5 n
  226.       strFullName=(*i).second;
    ' S2 {9 z9 W! d( C. f5 p4 G7 U
  227.       dwProgramState=AP_CONNECT;: k. o2 r$ g' ?& v& q
  228.       return TRUE;
    $ ?6 C) p9 i2 l/ |" y
  229.     }- i- ?- y0 x0 s% b& N5 c
  230.   }
    ( @* H+ e4 Y( k7 T7 f' V; L
  231.   else if(bRestartUpdater==FALSE)
    9 O* ^  v( S/ G3 V5 c8 Q
  232.   {" t) [/ Z* S8 d. }2 S3 A
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    6 A& r% w. f- V3 f1 w
  234.     {
    . O0 d+ O, H1 ~  |
  235.       file=(*p).second;
    2 U: j9 I4 z- n* E
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ; a, G' z' h. E& t
  237.       {
    2 i1 L; j2 @& E1 d  d
  238.         olds=(*p).second;( P/ Q  d' w: J! y9 B5 N% x
  239.         olds->vers=file->vers;8 K* I: |4 k% L! W$ e
  240.       }
    : h& S& @+ K- U# P" W" F4 V+ G
  241.       else
    . c4 v& a" J' F, }
  242.       {% ?; A5 o$ q+ v0 Z, j
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 h) G" Q- a* h* Z& U
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    0 a  ?5 O; n7 D8 t
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));" m* z/ [+ m3 W, q4 E
  246.       }
    ) `+ N. h0 M! g0 e: A
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    5 L- O) o4 `5 ^7 p0 O% y- A
  248.       sprintf(filename,"(%s)",file->file);
    ( s' C6 g! a; F; w: {; b
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 e, N4 G' [/ `9 T  Q  w
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    5 o# x7 j7 c4 c/ }) h9 X
  251.     }6 ^5 ?  l( m2 @, C! S% h8 X
  252.     dwCurrFile++;
      B& [' k# m  X$ @, K% Q/ \
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 {9 V7 ~% |- L- O: ~! @8 |
  254.     {
      W! X; o! j  I) f
  255.       bSilentStep=FALSE;" G+ M. F/ F4 I( E
  256.       bCompressed=TRUE;% m& c- |  P1 j
  257.       strExtLocal.Empty();
    4 p. E3 G: F' `' c& G: g9 c+ v
  258.       strFullName=(*i).second;
    6 }: U' O/ F* l8 g! ~
  259.       dwProgramState=AP_CONNECT;! R$ j  B; R4 M2 A/ f
  260.       return TRUE;" F3 _0 T+ ~5 E+ I9 ?! q; D
  261.     }
    # a# T; c% u" |+ e6 Z
  262.     if(!bRestartUpdater)
    + B2 a* h+ D) x5 h+ E  M
  263.     {0 j/ H: ]2 A8 `/ h$ s& W
  264.       int iCurrSize,iFileSize;
    ) t8 Z, H" l! `, |
  265.       iCurrSize=0;$ t; x% l6 O. u* S0 s# L
  266.       iFileSize=UpdateList2.size();) ^* m) J2 s* {) z1 Q( R
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    - U: e9 N6 x6 o  g- o. Y9 a
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    6 e7 J$ f- ?2 ?) S/ q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");" f# c  ?3 Q7 l) `% i0 l+ k+ X& n
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! b' \$ o6 r5 u3 i5 f; W
  271.       Fclearf(".\\update.dat");
    ( ~+ ~, }) A9 m1 f1 E
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    9 I  C# `0 |7 K0 d2 `
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 f2 e$ f, ]8 j/ p
  274.       {
    $ @, Z% C# T3 d
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    : ]0 M1 {/ b6 S' F1 ?
  276.         {
    " s! E  f( ]8 Y+ T7 v2 A" _1 ?
  277.           file=(*p).second;
    4 W+ z( x8 O. ^6 ~5 ^: g
  278.           sprintf(filename,"(%s)",file->file);
    ; A" Y' X0 U$ V: e
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  @4 q) y1 [" y5 \0 t
  280.           iCurrSize++;
    9 r. @) n4 g, S, b! X5 L
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ; y8 K- C# @1 {
  282.         }# f) i; V. c& x9 D
  283.       }' M; M! ^# S1 o) b6 N! w: n
  284.       unlink(".\\update.txt");  L% S4 U$ |9 H8 Y1 }4 L+ ]
  285.       unlink(".\\update.tmp");5 n8 B+ e) v0 t5 ~! ]& _) h# H; p! f
  286.       Fclearf(".\\checkversion.dat");
      G6 ^/ k) e% z( a
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ Q# M% ~0 W, T/ n0 ~" K$ X  ^( y0 L
  288.       if(UpdateLocal.size())
    1 Z7 g0 C& E% [/ e, @
  289.       {: n( ^+ `, K, D; a
  290.         UpdateLocal.clear();
    8 T5 q' K+ P2 \( y( C
  291.       }1 Z1 Z1 u  d0 v$ u( a5 ~
  292.       if(UpdateFile3.size())
    0 V, _5 @5 Q7 J! R: ^
  293.       {- D5 q' B/ s4 r3 I9 c
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), p9 @! m: l0 {% w. z6 D' e
  295.         {
    6 y  s1 e9 Y, I
  296.           file=(*p).second;
    1 v. a% E) P# V- y1 _1 i* H0 N
  297.           free(file);
    & x8 s- L" U4 [5 `
  298.         }- K$ Z. y  M) U  \3 F
  299.         UpdateFile3.clear();
    2 f* N+ }! b! m+ K3 C% e8 n8 s
  300.         UpdateList3.clear();
    ( A5 O2 G4 w" J. c/ {: P! ]0 L
  301.       }
    9 e, `) w) F, b" s/ [1 }
  302.       if(UpdateFile2.size())! Q+ D( i. K+ w. O1 T
  303.       {
    ' d* h6 g* t, _: H/ ^2 H  d8 C
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' z+ p: z- K5 I  J, l  d; O
  305.         {
      W# J# p7 _$ V* s/ P
  306.           file=(*p).second;
    3 Q3 K7 D& M7 B- W' z6 k7 d
  307.           free(file);2 Z% t" I/ r% d( I3 X
  308.         }1 o- {( {- M3 ~! K" D2 {4 h
  309.         UpdateFile2.clear();3 q  }  ^& ]7 k4 i6 ^- f
  310.         UpdateList2.clear();
    # d3 k, ?+ t$ C/ Q7 b3 n1 ~# x
  311.       }
    * E* J6 R6 Q& L, v6 `% @7 G0 d4 O9 l
  312.       if(UpdateFile1.size())
    $ z9 H. [! ]7 {) [! N
  313.       {
    ' k+ M  e( h& \9 f$ G/ }
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 N4 |; v) J5 g8 w" E
  315.         {
    7 v2 Y$ C+ |- n9 ^1 L- D" J
  316.           file=(*p).second;
      I$ v( h8 t, D" ]
  317.           free(file);/ S. R4 I* l$ O  }# Y1 s
  318.         }
    1 j. X- w6 G" Y$ i* G% b, V
  319.         UpdateFile1.clear();
    2 \- ^) F0 S7 Q7 S0 O: S4 w0 p
  320.         UpdateList1.clear();& l  {3 v/ o" I* l+ C% X# ]9 m
  321.       }
    4 {" d/ n6 K( Y0 X
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & p6 r( X- P4 Z* R" l
  323.     }: ^# b/ R) A- y3 {1 X# {0 y8 D* C
  324.   }9 _* i% ^: C' R9 h) x
  325.   return FALSE;/ V* }. t7 C0 i1 X: f
  326. }
    8 |6 Q# ]( V$ H! l9 ?
  327. ( Y8 U" B# y2 A. n
  328. void CRevAppApp::ClearAll(void)
    + A" ~3 _3 S' u7 f& K: E$ O
  329. {, |: v% W) J  ~- ]. h
  330.   LPUPDATEFILE file;
    & m0 {, Q: @4 w1 [
  331.   std::map<CString,LPUPDATEFILE>::iterator p;6 M6 {, x& U' I: v: [1 Q! b
  332. 0 u0 A) n' k% L) T
  333.   if(UpdateLocal.size())
    ; |: [5 p, |" [( K: m: [5 P, A
  334.   {" b/ |8 F& v! K5 X* B7 N
  335.     UpdateLocal.clear();
    3 B6 j1 V9 w) ~' W0 |$ Z* T
  336.   }$ d+ z( u. G- z7 T9 H
  337.   if(UpdateFile3.size())1 D! R; _* Q" ?' h7 G
  338.   {0 T$ ?3 ?+ B4 \* j( P2 j5 |
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ u8 N7 Y2 F4 Z4 ^6 u
  340.     {5 u* p: _. r& t+ g% d' g; V
  341.       file=(*p).second;/ z4 J$ G- D3 b# `5 F
  342.       free(file);
    # A) ~1 s7 R% q) z; ]
  343.     }
    ' _# [! ^# ^& g: D6 W. [  A, K
  344.     UpdateFile3.clear();
    ' {9 |8 T$ r. `8 H6 P2 D$ G
  345.     UpdateList3.clear();5 A0 x. R: |4 U0 {1 |0 `
  346.   }
    ) f; x5 h! R, Z: O
  347.   if(UpdateFile2.size())
    8 V- t. ?4 z  C" X) }+ R' g
  348.   {
    , T9 E" B4 X0 A4 L2 u; `
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ d' I& e% u6 |7 ?
  350.     {
    4 A, ~5 B; P& _' @
  351.       file=(*p).second;2 k8 l7 U; @/ ~3 j8 P' s
  352.       free(file);$ ^% @1 X. l. [3 ~4 E3 j
  353.     }
    : O1 _9 u; w1 Y. d# v* p- H+ V
  354.     UpdateFile2.clear();
    3 e& w/ w# ^4 b6 q9 {2 J
  355.     UpdateList2.clear();! e0 l1 N3 B" F( A% M- z& ~9 f0 @
  356.   }; u" s& l0 _0 D, r9 `! g- P
  357.   if(UpdateFile1.size())$ }2 T# A! k8 y- Z5 z9 e, ~
  358.   {
    6 D5 l% j7 K! L$ `
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' _+ `  l2 q! R7 r/ F
  360.     {
    % F7 F' z! I" J! t& f
  361.       file=(*p).second;% I: S- N1 ]9 {2 P% d3 T" I1 W* {
  362.       free(file);9 v1 U) ^3 P' q: |( B) o4 ?" R
  363.     }
    1 C3 u9 U+ E4 ?
  364.     UpdateFile1.clear();
    : H- N( i0 z) U( ~' S- \* K$ {; i
  365.     UpdateList1.clear();
    . R! D% o  a; ~. J8 Q# @% T' v# z9 {- G
  366.   }% T: }+ }4 U7 R) e5 \, N% V
  367. }  
    & U% g4 L) n5 V
  368.   
    2 ^/ ~# W2 {/ H- M
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    # m$ E) z3 B, Z) k% h
  370. {$ I. [7 y0 f# F$ W: K" d
  371.   int c;) s, o: n! E9 f0 z: s
  372.   LPUPDATEFILE file1,file2;8 z: M4 \9 K4 k1 |4 w
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;% y3 y# J- W: `2 E, Q5 Q; S
  374.   std::list<CString>::iterator l;
    3 O) R" i& S$ D) \. k

  375. / {% ?% |+ Y. C8 H) k
  376.   UpdateLocal.clear();& v  ^$ X, k9 s$ V
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( i" ?! ]5 O+ R5 F' r6 M; W
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);/ g* `: ^4 w9 [5 g/ c# f
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);$ b; N7 m& Z" y) e5 W
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    # X% @% ]3 ]( t0 ]2 F
  381.   if(UpdateFile3.size())
    7 r3 B% t* C7 a
  382.   {' A; ^2 j6 J' y4 Z" ^2 h
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)/ |- j' `* o3 l, j- `7 W2 k
  384.     {
    ( {% z; f$ Y5 H; n- ^! b
  385.       file2=(LPUPDATEFILE)(*i).second;& w6 }9 c& S; ^
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* ~3 f9 Q( ~" u: E) a, D0 Z7 t- b: p
  387.       {' D+ Q$ _2 S1 S+ ]
  388.         file1=(LPUPDATEFILE)(*p).second;
    7 G$ O4 w8 W. s* d+ u) o  Y* Y
  389.         file1->vers=file2->vers;
    , }, X( T- ?+ I. K& s, K2 t7 b& q- i
  390.       }% J1 m+ \5 M" W* Y) J, V7 |3 u6 s
  391.       else
    5 ?& o$ s% `1 i1 c0 O5 N/ s6 B% m
  392.       {2 W( c# q, Z# n# [" n
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % J  f+ H! v7 w
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' I* |/ E: j( }/ n
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ; y: ]1 f2 t. s$ Y, a0 A+ l
  396.       }
    ) }7 @5 ~' B. D6 Z  U3 S
  397.     }
    $ `, Z  q9 p$ Q, z
  398.   }
    : m: G( S- N. V1 K) l5 W, U* Z1 p6 n+ _
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)# W* g  J2 Q) a# U" M
  400.   {
    : T/ B3 v. J! c: \6 J
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()). }3 h2 E* k/ A4 D8 B: L0 H* n
  402.     {7 f  E: i5 ]1 B: B8 `
  403.       file2=(LPUPDATEFILE)(*i).second;
    9 C* i6 [. e: \/ P" \. X# _
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 q# U: K* d& D9 c% }- |
  405.       {
    & b. R3 H$ M* ]; ~3 }' a
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 ~) O# F) |7 f
  407.         if(file1->vers!=file2->vers)& S8 @; o' R( ]
  408.         {5 X, u. R0 ^  z3 V& {3 D# W
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . l( }4 j9 g# K/ c& \9 h
  410.           c++;
    3 b( a4 q' n( f1 n. L! |
  411.         }
    # b. l& [# E/ `2 h" q8 K
  412.       }
    4 k5 W& X& o3 Y( {6 A5 p* ]
  413.       else$ V9 G! y. n# @5 ^$ E
  414.       {
    7 V2 i7 [$ T- s5 z: J+ ?
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# q' q4 W) I( M. z0 \( v1 n
  416.         c++;" \) P. n$ }. u( S  O
  417.       }
    , @6 W! o; W2 M6 G6 B7 y7 g" t
  418.     }. n  f" B  B+ D# p
  419.   }, V* R3 W" ^3 P4 f2 t% E7 P
  420.   unlink(".\\DownLoad\\update.txt");0 ]" T% D$ O" l" U
  421.   if(UpdateLocal.size()) return TRUE;
    ! T* @0 f& S6 T' O0 ^
  422.   else                   return FALSE;" {% i2 M8 ]3 J) E. d
  423. }
    3 n' u. s5 M$ P2 Z

  424. 7 U/ R* P3 D' \3 S# ]. M( K! r
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"( g% u/ i: F" }! m4 D0 H2 e
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    4 O" w2 l  d5 l7 V
  427. % R, I6 B6 h) r4 ~8 ~* N) R

  428. / }/ {4 h. ?" v. A1 J  n3 h1 L
  429. % k: Q% ~! i$ ?. P! M8 P, r+ J  n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)8 L& D! X5 w& b
  431. {* y5 f, h4 n! n4 w* D
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;3 B6 [* O3 w/ ]( a9 l& t
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" M* D9 _5 W; h  Y6 z5 |  n( {9 |
  434.   {
    7 D0 y% [( j5 g& N' F1 T
  435.     char szLanguage[50];$ l/ V/ G6 l  L: n5 g" A& O
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' ]$ ~4 r, ]6 T# R4 x! A
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" Q8 Z& j5 k0 [2 _
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 k5 L4 _3 b, H- I. o
  439.     else                                   m_iLanguage=ENGLISH;0 r# N7 Y- ^  V( w8 q! G+ u8 D  q) h
  440.     char szRegister[100];
    7 X" I: r1 m6 o- k" Q: v* E
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; q0 z) \/ n& Q7 S* `
  442.     strRegsName=szRegister;1 R+ @4 w, L9 ^! e  _( H: M* S
  443.     char szPatchURL[100];' D9 i; l7 z; Q! W9 ^
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- Y- B% B& M7 W( ]& A5 F
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ; v6 H9 V$ G) ^
  446.   }3 m  G! c5 m* B/ Y/ S# |, s* E
  447.   else2 g8 ]& x2 Y# l+ R' w
  448.   {
    3 E, H( m; R4 d8 @, Q+ v/ {
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 @' \% @- c8 E+ p. P
  450.     strRegsName=DEFAULT_REG_URL;
    ' |  \3 d% H% O* G$ m
  451.   }
      ~* }6 M7 i% N: P2 p2 F* }
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 u' _! V9 f6 B8 X% K* t; Q0 `' Y! B
  453.   {; `2 F2 _! O. C/ J/ H$ x
  454.     char szIP[50];
    : p" M' c: |& ?
  455.     char szDIR[300];( K; G; E- x: C+ b* h2 q
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))5 @) J: q! m# u  s- S: P! M) a
  457.     {7 J$ y! ~- u9 a
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    % V* N: i: i0 x% k" t. d3 [% f( X4 z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: j6 [( e9 N& d$ N0 q
  460.       strHostName=szIP;( X4 H# U2 ]3 x- y2 V
  461.       strHostPath.Format("/%s",szDIR);: z3 O/ ^/ `8 t% k, z- y7 w
  462.     }
    ) U3 `8 E7 D7 a, p  A  E3 A
  463.     else. E! N( P7 Q, d* D
  464.     {
    3 ?2 @" ]% M( B; i0 o1 Z3 t
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & X7 q$ H# W3 o1 p! b  j, D+ Z1 A9 E  B
  466.       {$ N+ C) ~2 }: R6 I5 b
  467.         char szLanguage[50];
    9 W, G: Y0 v0 ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, m2 n: Z  w- @2 P1 v
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , I( R' o1 N4 l  u
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- ]" ^. e- `  [3 X" e$ p# `/ n/ j4 W
  471.         else                                   m_iLanguage=ENGLISH;
    % i- o5 J: A6 x6 @# v) ~# {
  472.         char szRegister[100];
    3 @5 |3 s  Z# X2 N- n  _% }: d* n
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 u. i+ H' C( ?+ |
  474.         strRegsName=szRegister;& i, c; z+ X3 j9 Z/ k& e* \1 F! `8 S& ^
  475.         char szPatchURL[100];2 Y7 @+ n# z1 ]' [, ^: N
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - P1 I3 M$ e) n) C9 {: w4 U8 U# N# q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. u8 n% r) ^4 C% N& ]) Q& J8 V
  478.       }
    & p; }( n+ c: k) \5 ?
  479.       else. s3 x) J7 p1 U0 @: W7 f
  480.       {
    ; ]" x; ~$ ^- A2 Q2 k7 V
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 V! V8 e9 E  z6 z) e
  482.         strRegsName=DEFAULT_REG_URL;  g9 p+ D9 w+ F7 E  M
  483.       }
    & R4 \- R7 E. _! f: G! r
  484.     }. r0 w0 T3 n* ^: K
  485.   }
    ( l# v5 ^1 n+ {. W. v& m) s9 C
  486.   return true;) B* H9 b2 I. f+ A8 P  b  Y
  487. }
    ( K$ {- t2 G; e$ D4 ^# Q
  488. # b, C9 h1 t! I/ A9 a* _
  489. #include ".\ZLib\unzip.h"
    0 P7 O! K) j; T& t8 S/ Z& K
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    + n0 w, w  S  r) V% ]) {
  491. /////////////////////////////////////////////////////////////////////////////; r) j( o4 X/ P9 l& L
  492. // CRevAppApp initialization
    % U5 b6 F3 O8 W& B1 @( k/ u  b8 z+ `
  493. * A' |2 p% j/ S! w3 C
  494. BOOL CRevAppApp::InitInstance()
    8 [7 {  f- q6 w1 u0 m, l
  495. {! k0 Y) |0 H5 M! f) F( ^+ b, S
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];. o% \9 n( z& x4 r- ^9 K, l3 ~
  497.   o* k7 |2 k9 y* k+ |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    8 L% X  n: T  z2 G% ]) c: D7 q/ J5 Y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + u6 F9 H$ A" s; `, z
  500.   {2 \, Q$ P7 ]) B0 n" z$ q# R! A9 o/ r
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    9 k5 z7 I0 ?& H6 W/ r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);+ g8 D  Y% J. s4 L0 L% Q; R
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))4 |. m3 ?7 Q! Y  d2 O1 P* I
  504.     {- x" g5 E' |5 c. J& @; V, g
  505.       strcpy(szPath,szPathTarget);
    7 q8 u0 N7 i' N: g4 k) q
  506.       SetCurrentDirectory(szPath);
    . Y! a" Y6 G: ?: q
  507.     }
    1 Z+ G7 n3 J# |4 V+ X; ~, ^% @
  508.   }: G; w3 }3 ^2 L2 d& R9 R
  509. #ifdef _DEBUG0 n* T- i+ V6 X/ X6 t4 _# n
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / G# i" ^3 z1 ~5 ]' a
  511. #else
    + s& T, F! ^$ [! M( A
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ o) x9 M# \! c' `2 @
  513. #endif# l, X0 J# [) U1 c6 {& A8 {# r
  514.   {
    ( e" @7 d& Z( ?
  515.     char tempFileName[MAX_PATH];2 b6 Z9 N& ?4 y0 k
  516.     strcpy(tempFileName,szPathSource);7 b4 U7 S% I+ o6 Z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    % B& w9 g- ]1 ~8 X! |- z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ' u$ h9 S/ T5 W5 h
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ' ^5 D7 s- q9 b3 b# n7 ~0 K
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);& |% y/ G# x7 y, e4 i- g
  521.     return TRUE;
    0 T$ O5 W& X- o+ t1 ^
  522.   }
    ! W# ?+ r4 ~' m
  523.   // Nuke 0118: Delete run.exe% q( L' o9 E# s5 B1 n3 z
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ! Z8 M: {$ k6 W0 u
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");1 y$ R) _% W: u
  526.   if(!ReadCfgFile("Config.ini"))# q1 A7 Y5 ^( w/ H' t1 {- W: I/ {' A
  527.   {
    $ t, c9 i: N7 m6 v! n0 B3 ^
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ; u3 _) a2 C( h! ?+ }! t  y
  529.     return TRUE;# }% ^9 N8 M6 Q9 V. ^) {; j% Z
  530.   }
    ' ~2 J# y( \, X1 E7 C
  531.   HANDLE mutex;3 \& q  w5 R% N1 H9 [' H$ S
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    * y! t. K; q9 s1 b, @8 T
  533.   {
    1 X8 ^. o* g) o, S
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)2 j. q& R; [2 \8 z( Z
  535.     {
    + L) l( d, h- f8 L
  536.       CloseHandle(mutex);  f0 g0 t! f& j4 B/ q" e( o
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);2 ~, J5 `7 I1 v! l
  538.       return TRUE;2 l( J; U+ g3 u# L: s7 f) G
  539.     }, U& z+ B$ C0 D* l+ ^
  540.   }  
    $ X5 F" ]/ N& m: J4 M) H
  541.   CloseHandle(mutex);
    6 c0 J# @) F- H8 x& k5 S& y( z
  542. 9 M' u7 h/ v5 g$ P& Y! S
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    3 d5 c7 K4 j$ H' W

  544. / s/ M+ o3 i7 m) ]/ `5 S: a
  545.         AfxEnableControlContainer();
    ' Q* W  r) t3 V) o! ], n+ h" d

  546. 3 s, ~7 k! `9 C, x
  547.   bCanUpdate=FALSE;0 @2 j' B& j9 G3 n2 e
  548.   dwStartUpSteps=1;
    1 |% F, P; r$ y
  549.   dwProgramState=AP_NOTHING;' f; T  [; X8 ]2 A# a! A- n

  550. ( ~  W! t# N0 `4 g* t) t
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);+ F( N+ e* K/ x2 p5 f
  552. $ o. A+ K. V& v8 i; ^
  553.         // Standard initialization
    % N+ n# p- A% y" G% d
  554.         // If you are not using these features and wish to reduce the size5 F3 X( u4 k+ b7 c- h
  555.         //  of your final executable, you should remove from the following+ q3 Y# ?# z, M# J& m
  556.         //  the specific initialization routines you do not need.2 n% v& {- c% u4 f0 [
  557. 9 |/ [  @3 r7 |) O
  558. #ifdef _AFXDLL# q1 ?$ ?2 [4 w2 G. j' z5 V
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 J; |' b7 E4 S/ _
  560. #else
    ; g6 s; ~) ?7 W/ x: J  ^7 [
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    $ q* l- A- E# v0 b
  562. #endif
    8 Q4 r9 G' ?. [' B* S% ^2 a
  563. * M. h% e5 p$ _4 }+ Z2 e) f. Q
  564.   dlg=new CRevAppDlg;
    ) T1 u) d8 t; S* x1 E+ L; v
  565.   dlg->Create(IDD_REVAPP_DIALOG);3 H  J* D& `' C) K& o
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    3 e+ g& X: x: I6 k
  567.   m_pMainWnd=dlg;
    6 U( {1 u5 D  ~* x! Y7 l

  568. + ~& d' p& a7 P' L
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * M, x! l5 l* R2 |. p  [4 {
  570. ) {; _, ^" L- J) S
  571. //  GdiplusStartupInput gdiplusStartupInput;
    9 ^: L5 `) D+ q5 t1 V5 S
  572. //  ULONG_PTR gdiplusToken;
    4 u  D6 Y- k$ O+ z! Q3 D3 I
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    . O4 t4 N' {/ f2 E# y
  574. * s- z8 |. N) |
  575. //        CRevAppDlg dlg;
    7 H) L: `$ m' b- s
  576. //        int nResponse = dlg.DoModal();
    ( S# [" Z6 W2 T7 y' `! p* L' @
  577. //        if (nResponse == IDOK)
    $ b6 p2 H2 U; R
  578. //        {5 N0 V- R5 ]' D! V# D3 I
  579. //                // TODO: Place code here to handle when the dialog is0 d. [- S5 r6 s5 `, T7 A
  580. //                //  dismissed with OK% T3 Q1 F3 c; ~9 S* O: }, Y  w
  581. //        }4 ]/ W& p# V. n8 A+ A- R3 R
  582. //        else if (nResponse == IDCANCEL)9 [; ]) B$ K. R
  583. //        {, j: A. e+ ~6 F
  584. //                // TODO: Place code here to handle when the dialog is+ h: i! _) i# r3 A
  585. //                //  dismissed with Cancel) G5 E) p, V2 d3 z. o2 J
  586. //        }7 V0 Z' ^- f( i- L# m; \1 n
  587. 4 c: y; W# F2 W. X
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    5 v/ J* D9 C8 B4 `" @% Q
  589.         //  application, rather than start the application's message pump.
    . f9 `5 k4 T* B$ F9 W) e
  590.         return TRUE;
    ( v# v. o- F$ Z. r, B
  591. }
    8 E2 |! Z5 T2 b. h: I
  592. 8 g- }; M, X3 m' m5 O) n4 H% O
  593. char *CRevAppApp::strtok3(char *pSource,char *token)) c# r* \6 o) b! V- ^, h; E( r1 A
  594. {
    % i6 L7 P# _3 P3 q% H7 Y
  595.   int i;0 S2 Q1 E8 u1 o5 K7 H
  596.   char *szRet;
    ' q  {3 ]8 C7 u- y, u3 T
  597. " F  P1 \: j- |, q0 N
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    % Z3 O+ Q) M6 \) i$ s0 n
  599.   if(sztoken)
    ; R( M8 b* `' K6 f3 h% P- W
  600.   {+ n4 Z0 z; r0 W/ X/ F& u& l
  601.     szRet=&sztoken[itoken];
    8 ~. G! L9 q, n  U2 B/ U& g4 {& d' ?
  602.     while(sztoken[itoken])
    + M. W9 n; l& v: z2 c& S
  603.     {
    5 s+ I9 \; P' f
  604.       for(i=0;i<(int)strlen(token);i++)
    + B* `  _# P; P% K  R
  605.       {' T0 q% Q7 `, P
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])7 J: D  V; U% F% L! s
  607.         {
    , B  Q3 o% }9 ^+ d8 A
  608.           sztoken[itoken++]=0;
    + H: B+ w) |  X! u% ~
  609.           sztoken[itoken++]=0;2 V; c/ r5 z+ C7 Y. E
  610.           return szRet;
    * i- e  S1 E5 c9 B. F, D5 B
  611.         }- d9 O! V6 A0 `& T* ^: J
  612.       }
    ( N8 F6 j$ a& C
  613.       itoken++;
    9 {  d; w# R- n* q) Z+ p
  614.     }
    6 a2 b1 e6 Q8 F; _) [
  615.   }# v+ k6 {. r2 x% ^9 M3 z
  616.   return NULL;
    * ]1 g# c2 g' K8 ?3 e8 k- V6 Z
  617. }
    / t6 C) _' Z. m  a$ y6 a

  618. , u/ S2 M6 R8 S# l" _) u* j
  619. void ProcessProc(long Total,long Current)4 O5 c  k0 d; _' d! O% \/ z8 T/ {
  620. {9 V- _& K7 O- D% z! z9 n0 R' g
  621.         MSG msg;  Y7 H. \' |6 ~* u; |& j
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);, S8 V7 l$ _! V  V6 q  e' d
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));% Q1 e$ Q! C+ I  }$ G1 P& I
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    % o' b& {. j) S5 M; F8 J% A) @7 O
  625.         {
    0 A3 n. B& C' B5 v
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ; X0 ]! R  {3 o$ }/ @/ b4 h
  627.                 {
    + N/ t4 a# b/ i. A! G
  628.                         return;% e- f4 `' @. @1 _
  629.                 }0 z3 {' k# A3 f. [& B% p
  630.                 TranslateMessage(&msg);
    & s/ `3 h3 Z, I  E1 N+ j
  631.                 DispatchMessage(&msg);9 y) Y' K. T; g
  632.         }       
    ! n9 o5 k/ M# n$ r
  633. }- z( f, X8 W% P3 V" n# d+ O# t
  634. 0 {" [" r" W+ k8 `0 k
  635. BOOL bFirstChar=TRUE;
    ( Q$ Z5 l2 n& ]$ Y. A3 @
  636. 2 v$ c2 Z& T+ B8 P: B1 G
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ m7 M7 I1 e& f. Q! e
  638. {
    1 f# l$ e2 ?2 [' G! ~# q$ _' M
  639.         // TODO: Add your specialized code here and/or call the base class7 ]0 A6 {& P  I1 f
  640.   switch(dwProgramState)
    4 A! @( n4 i# ]3 d4 Q
  641.   {* c' [0 P3 n# H
  642.   case AP_NOTHING:
    ; l. V# w5 \3 O1 P+ @0 e. z
  643.     switch(dwStartUpSteps)% r9 I0 V1 P6 Y7 A
  644.     {+ ~5 ^$ [/ A" k' Y" e2 T
  645.     case 1:+ P  F' a/ v! e# l0 y  q
  646.       {
    6 Q. K7 [) [' h
  647.         int i;" z) A) Y( d; r# v" V
  648.         CDC *pCDC=dlg->GetDC();
    ; W, N0 U; ?. W0 P
  649.         HDC hdcwnd=pCDC->m_hDC;
    0 t3 m1 W9 z  ^- }* ~5 ]
  650. //        Graphics graphics(hdcwnd);
    2 M# v# x; T- P) N+ t4 `  t
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");% ~& ~9 R6 G% w) [
  652. //        INT iWidth=bitmap.GetWidth();
    % ]8 Q- ^' n, ~7 ]
  653. //        INT iHeight=bitmap.GetHeight();5 _0 g0 E, V% D7 I
  654. //        Color color,colorTemp;
    / ]& c: r/ l" D+ x' F5 H
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ! z" E% g3 X( r& w3 T8 B# p
  656. //        {
    $ B& V0 s$ D% K+ I
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - B) o3 \% t4 {/ z$ c/ ?1 l8 S
  658. //          {) _, i5 Q/ A1 g$ e+ T: [( ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ( U+ L0 z/ H8 K; s& }
  660. //            colorTemp.SetValue(color.MakeARGB(9 p; ?5 L+ p+ D& p7 A! A0 D
  661. //              (BYTE)(255*iColumn/iWidth),6 R8 C) d* ]  o- r
  662. //              color.GetRed(),
    $ f- M/ a- ^  L2 Y% W! Q- S: [
  663. //              color.GetGreen(),6 z- v+ X$ h7 r8 x# |0 N0 j
  664. //              color.GetBlue()));9 v, E, |5 h0 M* I
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);1 a: O4 a' T: _5 d& F
  666. //          }2 ?9 P% y$ T$ A% b/ v  i9 e8 ?9 U" s
  667. //        }
    / k& l! Y! U# U- n( j( T9 ~; h
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);. m' j/ S0 S7 }  F5 J
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 P/ T( L$ U" P' P) U: f5 h+ ]
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ) \, l6 Y' M4 E' W
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: F. {6 [  v7 e1 o1 B; M/ o$ E
  672.         for(i=0;i<240;i+=8)5 B/ ~9 o' L; s% n/ j: {% g4 T
  673.         {
    6 |/ A- b) T! J# y+ u! }
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 i! ~* k! G" U0 V
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( S# K  s9 }6 Z0 {
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 K: v* x1 ^" k  Y
  677.           Sleep(33);! }1 K. x2 l( q* @# m( Y# y$ t+ o9 s- v
  678.         }2 {$ Z; L# J5 A' K( p/ G
  679.         Sleep(1000);" _$ J6 A/ K0 Q" ~0 g! n# |3 j8 l
  680.         for(i=240;i>0;i-=8)
    : u1 E, i7 {8 R; N/ q% z- G. v" x
  681.         {3 B' f3 ~( q# N$ i
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; ?* @# ~5 _5 D% T/ Q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! J) B# N! G1 _6 v
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % }* M" ]0 m, m7 S+ f; ~# j
  685.           Sleep(33);- v+ z  p0 z; y' l; L+ S
  686.         }
    0 u8 i0 `5 k5 `/ T0 \  W; {
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);4 h- z7 C0 K: Q6 f: d
  688.         dlg->ReleaseDC(pCDC);
    . G- B% B" q+ ]3 h5 v* m5 Z
  689.         DeleteDC(hdctar);
    ) o% v. G' a- w! `
  690.         DeleteDC(hdcsrc);
    : ^2 I# ~3 K: t' J" }' \
  691.         DeleteDC(hdcorg);
    ! S& r( k7 W7 ^7 Q4 R& O* T9 g
  692.       }1 f! F" C% [6 g! E) D
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    $ O2 {- t7 m2 M0 }8 a# U6 V& M
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");3 V9 x9 z2 R9 p1 n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");1 p6 E3 J4 T7 U" E# w) [$ o& I: |
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");3 N1 D6 c: Q& T& t0 x0 R6 Y( d
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 A, Y8 ?) M# R& d; H
  698.       if(!Dn.Connected())/ z$ O2 J# D7 d
  699.       {
    ! B5 H9 b$ S/ |5 j2 p  g# t
  700.         dwTotalFiles=1;+ B, p$ o' v& b
  701.         dwDownLoaded=0;
    ! ~, x7 c' B& z5 Y
  702.         bSilentStep=TRUE;4 Z- G8 C7 b' {4 r4 P" \0 I
  703.         bCompressed=FALSE;
    4 `( w' E2 F& Z3 p2 }' I
  704.         strExtLocal.Empty();
    & w  s  w* P7 y" ~# r
  705.         strFullName="readme.txt";
    & g( R  c  j( i2 X& |; c$ i+ g9 P
  706.         dwProgramState=AP_CONNECT;3 R; }5 z! B' T! }' ~! {5 i
  707.       }
    ; I- x+ ]" b) `9 z& S+ \
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();' u5 l, |& F5 K, ~
  709.       dwStartUpSteps=2;
    ' ]) P% l8 n9 ?3 M# |0 R) W/ V
  710.       break;
    ( Z6 K& c* `# A! w
  711.     case 2:; ~5 z. @2 n/ a9 d
  712.       {
    1 y8 i7 u' T+ Z/ D  P
  713.         int iEOF;
    / ^5 k- n8 H) |  `5 [' s
  714.         FILE *fp;
    ( [  k6 O- d1 T
  715.         char szString[512];! T' t8 f$ Y$ H0 a+ C8 u/ [
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");- ^7 m9 N6 P7 ?
  717.         if(fp)
    ) y5 d0 V0 f, C1 q; @
  718.         {
    ) y: c% e: G* A" v
  719.           do
    2 {& ^- C$ C( C5 @% i1 d" ~
  720.           {
    5 {( q) Y5 j  g! k8 f
  721.             iEOF=fscanf(fp,"%s",szString);$ {/ ~# u/ {1 R+ {) }6 j4 u
  722.             if(strlen(szString))
    ; T: [, D9 @3 T7 }( l2 v& g3 }
  723.             {+ Z1 N* X2 v$ Z+ {8 A
  724.               if(bFirstChar): J4 c' z1 T+ c: [7 z2 `
  725.               {
    4 P- @/ a# ~4 t3 i' f7 U
  726.                 bFirstChar=FALSE;
    " O5 y7 O' S1 o. R2 k
  727.                 bConnectIsBig5=FALSE;' m/ H, l( p. V' [  e' E( J! E* u
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; W, ]8 e  G  R4 ]
  729.               }5 ]: K3 h1 k: ~
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    3 [3 q: K: j) `: x0 M7 z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));" h! i( y, b" O+ P' ^7 S! o4 k3 I
  732.               dlg->m_ListText.AddString(szString);
    1 o" ~. U- N! ?! @5 }( b
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' e: A( ?& q( v' d  U) C
  734.               *szString=0;
    # Z/ b9 W* t) f7 B4 W7 A
  735.             }& F" a+ p/ Y* x8 \
  736.           } while(iEOF!=EOF);2 Z( K) X0 C- \/ Q( Y  s
  737.           fclose(fp);" b: k% q7 t9 \" Q7 ~1 m
  738.           unlink(".\\DownLoad\\readme.txt");
    5 S5 d% Y  ]* b% Y( |
  739.           dwStartUpSteps=3;
    6 p7 L( |+ h, O/ M9 g/ t) ~
  740.         }; D: J* e! {! ^* l/ X
  741.       }: Y4 c5 F8 j  {* {5 X" s
  742.       break;' O) j  l# X: |( m- O0 [# e0 O
  743.     case 3:
    8 \; q: S, b3 c. R
  744.       if(!Dn.Connected())
    1 v9 w8 i1 L: K- s% J# v5 @0 k
  745.       {
    2 f4 l1 s3 v/ E. e( O% Z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    + Z- [/ U6 ^8 _
  747.         dwTotalFiles=1;
    8 T/ B! N6 f- j+ m* |7 C1 Z, r
  748.         dwDownLoaded=0;
    ( h8 v; e" A) S3 |( J& [
  749.         bSilentStep=TRUE;& t0 s# ]! U+ g& Y
  750.         bCompressed=FALSE;
    # S; W' s' R/ f4 b8 \& r. g# y# {9 \8 ~
  751.         strExtLocal.Empty();
    5 b0 W% I1 H$ j6 A/ p# H0 t
  752.         strFullName="checkversion.txt";; N2 v8 U; h3 ?4 C
  753.         dwProgramState=AP_CONNECT;
    0 t+ f! H' z& u
  754.       }
    4 ], b" t* o+ D& e
  755.       dwStartUpSteps=4;; ]$ K. G+ ^* ?# W& {: @' Y
  756.       break;. L. F( m, Q8 {8 [0 _
  757.     case 4:8 J2 y3 h* \5 g$ [- ~
  758.       {5 j" m. `" R3 }. w& [0 i; i
  759.         FILE *fp;
    ; T) s+ b' U# y1 z% G! P# v. B
  760.         char szString1[128];" W) [0 f; n+ _3 i
  761.         char szString2[128];- ?- C8 l9 [6 H1 A, A( d
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 F- X1 U$ d$ n/ l# {
  763.         if(fp)
    1 E$ n2 R% h6 [! B" F/ j
  764.         {% |/ l+ h: {% b
  765.           fscanf(fp,"%s",szString1);3 a; {4 f2 X! ^4 x9 Q/ l
  766.           fclose(fp);
    ; |1 {0 i" L7 f; Z5 S+ H5 _
  767.           fCheckVersion=atof(szString1);$ b4 r, ?5 [9 S' O- M) T* q7 B. i: A4 H
  768.           fp=fopen(".\\checkversion.dat","r");
    2 {. X; M  ^+ C2 |) W
  769.           if(fp): g. F, i, h  o5 h5 I# m. V
  770.           {
    % Z5 d- U8 l4 k
  771.             fscanf(fp,"%s",szString2);
    + \0 }3 c) `6 J% O& t
  772.             fclose(fp);7 V; w' W, t6 v$ l5 m
  773.             if(atof(szString1)!=atof(szString2))
    7 n% F! O& w- f3 _" W5 V
  774.             {
    $ \8 N3 f" s- Q' h( t0 l
  775.               if(!Dn.Connected())
    3 q$ F. I4 B  E: T$ ~5 |
  776.               {
    8 Y6 u. d& ?0 J/ c& E
  777.                 bFirstUpdate=TRUE;
    + Y( {3 z! B7 [! W- X
  778.                 dwTotalFiles=1;
    9 ^. c% \! P3 ]/ |
  779.                 dwDownLoaded=0;
    6 Z; W: O- D  |7 h8 o" B9 \, b
  780.                 bSilentStep=FALSE;( z( y7 p% b" i$ g/ X1 N
  781.                 bCompressed=TRUE;  w% O* i4 k6 d, y, D
  782.                 strExtLocal=".\\DownLoad\";! [8 ?+ g& K5 t) A6 H8 M
  783.                 strFullName="update.txt";
    2 c6 v) [+ j; U! }+ \. O7 j2 S7 i
  784.                 dwProgramState=AP_CONNECT;& d6 p6 [5 m- K/ h- f
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 R" k: k$ U7 [  Y7 Y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      ~* @, H& m. J: T8 q" X
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");# M% d1 E5 p8 Q1 X
  788. 8 n- y1 v5 Q( t8 r1 m! s
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , i4 x" ^# G7 I1 g7 r
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    , R1 ]7 E& H5 s) T& D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)) M; |( x7 x. f
  792.                 {
    $ e2 |$ D9 i7 ~; x; |9 d
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");  {# {1 T1 Z* y; p* ?) M2 ]
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* W/ B) m* N/ X0 }) u0 w8 B9 a- o
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");! M, a9 v" `3 C3 j0 ]" P+ p
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& ]% f$ {' \4 B: `# v

  797. / ]( \* v6 Q& I3 G7 n+ e- w
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % Y' E# c  o2 M0 y+ A* Z! |: H- y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + R1 g$ b& Z- ~$ Y; l
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    9 U( f& L! s  l9 s/ m
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 ~6 s, I, L  a: a- Z/ P3 j$ k
  802.                 }' V: L% G6 v7 U  b3 t( L/ m
  803.                 dwStartUpSteps=5;
    2 ^/ y+ {* [1 d) d
  804.               }5 u2 H) C! F) p2 \
  805.             }
    5 p4 G& E% l! A) h; d
  806.             else
    1 I+ j5 s" u  ]
  807.             {" G* x/ J/ N( Z7 |# G  M! R
  808.               unlink(".\\DownLoad\\checkversion.txt");
    : Q: t) n# G( ^; f
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 v" b; d2 x9 }
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 e; h% k5 M$ E! Y4 q; S/ P
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    * j& S# D. K$ Y. G  a" l+ i
  812. : t. ?7 l4 }4 j5 ?8 x4 t& p
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 L8 y$ v4 J5 y# P  z2 a8 g3 Q
  814.               dwStartUpSteps=99;
    % J0 n7 b3 t+ G- O: D! L/ a
  815.               bFinishUpdated=TRUE;% {! x: o" x; {1 H3 f; v
  816.               bCanUpdate=TRUE;
    5 @) N6 C* `# [
  817.             }
    # s- `- k! F4 A. ?$ P0 Z4 l. \
  818.           }: }$ T5 e8 B* @4 r  I' N
  819.           else+ b% J) J" V! Z* B2 O
  820.           {
    2 \# I+ m$ `) p% y2 w  I
  821.             if(!Dn.Connected())
    & k  Z  ?& |1 s/ D  I$ {
  822.             {; \7 q6 w5 a2 ]3 Z/ Q. ~; [+ p
  823.               bFirstUpdate=TRUE;
    5 N% P# o# Y: h& d& H
  824.               dwTotalFiles=1;
    " P% |4 W/ M; f: P( K& _
  825.               dwDownLoaded=0;
    - D; O! y! D5 |( G* h9 h4 N
  826.               bSilentStep=FALSE;4 q+ A. b- x& F' t1 D
  827.               bCompressed=TRUE;" t/ D5 f9 o- P4 R2 A% c
  828.               strExtLocal=".\\DownLoad\";
    ! {8 X0 Y0 t, g
  829.               strFullName="update.txt";6 ^8 w; N  R) K
  830.               dwProgramState=AP_CONNECT;
    7 ^1 k3 I, n# J; z$ p, J
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 v* ~! |* o* d7 B9 Z
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: y+ o: Q# F, g& d7 H/ i
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; n/ p' k6 d( ^+ {2 y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 o' u& E4 R" N7 W; y$ L
  835.               unlink(".\\DownLoad\\checkversion.txt");( l3 I7 W/ s7 I) _& q9 M+ s# o7 W
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)3 A/ t" t+ b9 D3 n& a1 C- D
  837.               {
    . i* c* p8 {) B/ |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    9 k) x2 {; H, ?% J. i' h' x' V+ \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");, n% x$ i3 G( o8 X  q1 q. V5 `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");, ?6 r* ~/ S, a! P( ?! q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) U. v% i- p$ W
  842.                 & O- `/ d. k, `
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. R; u2 h  n* w4 i" z5 o. s* _% ?" H& h3 X
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    5 `; o1 k% U' T' a0 D
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");. r, R' W! ~' B
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- }( O7 P& H1 ~1 V
  847.               }
    . W: j, H( I3 e
  848.               dwStartUpSteps=5;
    9 p, i0 u, _0 |8 D
  849.             }! f+ w  _1 R5 N& e, m& V4 M
  850.           }
    & s# l7 \/ A* F$ q- L
  851.         }
    9 W1 N8 E' f9 `3 T- C9 b$ Z
  852.         else
    7 ?! ?& L4 X/ \* Z' `$ v
  853.         {
    + n/ ~  }4 V! z1 o& i- p
  854.           dwStartUpSteps=3;
    7 [5 w, ~* L- }4 _- l
  855.         }
    4 k1 \1 \' \$ X2 b" b/ L
  856.       }
    3 S4 O! ?3 x# M2 o
  857.       break;
    / O! b# G+ F- `3 f% {2 o- }' Q
  858.     case 5:" I2 {  A' V7 _$ ]2 Q
  859.       {
    ( H3 m5 c3 [6 C
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)" C- ~( X7 v, w$ C" a$ D
  861.         {7 w9 \- w; V4 w$ ]/ }$ E
  862.           int opt_overwrite=1;9 f1 p: v+ ~( B. u" K. v) o
  863.           int opt_do_extract_withoutpath=0;
    , q$ I: K7 S  b% ^( q
  864.           unzFile uf=NULL;3 ~9 Y2 G+ d$ T1 ^# a) J
  865. ' t& M2 A  m4 P1 ]9 h6 t
  866.           uf=unzOpen("Wsa.zip");1 a: O- B( U  q. l1 @4 t
  867.           if(uf)$ P7 L" Z# h" v: f$ ?1 \
  868.           {  w% u% h& S8 }* C0 \) Y
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);8 `7 y: \& G4 I# @! J3 o; u
  870.             unzClose(uf);4 Q0 q" c. \# `7 W) r4 s8 Q
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    7 a" X* ~# t% k! \: C1 M' S2 s' t
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    4 ]- y4 J7 Y% O7 F1 }3 W
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    9 ^! v2 N" r: }2 z8 g
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- v( f0 ?& l) X# b
  875.           }5 m, s. V8 {9 z7 C- d
  876.           DeleteFile("Wsa.zip" );: Y, f3 u# K7 A6 K- U9 {1 N
  877.         }0 X& ^% h* p4 w9 m8 h

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

; O+ m1 W: ]5 T. u' C  U
! F/ {$ u  d' G% H0 h8 J+ p' i

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-11-28 23:27

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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