CSUpdate.exe源代码

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

3 C7 h2 a  v* R# Q* U
  1. / RevApp.cpp : Defines the class behaviors for the application.. R; g7 E% m# a" X( r2 i" X8 U
  2. //
    ( W3 F# i% q9 g0 t
  3. + Z2 `2 f* O5 n1 u; R% d
  4. #include "stdafx.h"0 d( _1 Q2 l' y; z( `" Z+ C& }

  5.   w" ~% l9 U$ ^, P+ N( _8 W
  6. //#define UNICODE/ G5 o0 m. y1 w- b& w  e
  7. //#include <gdiplus.h>
    ( i7 Q: {1 P5 a3 l7 P( M6 M
  8. //using namespace Gdiplus;1 U8 ?: {# U- U' X3 T

  9. 7 M0 N2 ]8 g5 G1 c  m+ V
  10. #include "RevApp.h"2 A/ g3 J7 I7 x5 ~
  11. #include "RevAppDlg.h"7 t  ?8 f& b6 f0 d

  12. 9 C) i# q; @: m5 s. e+ ^
  13. #pragma warning(disable:4786)
    $ `! T+ q: Z' D+ `
  14. #include <map>
    % L- f: |- @6 P
  15. #include <list>0 ^0 h1 N& p, Q7 s2 g
  16. #include <direct.h>) w" n1 B7 f/ j! t+ C
  17. 5 o5 N. a! g; g' A7 z. Y
  18. #ifdef _DEBUG, V( ]3 ~1 U5 e" {7 X
  19. #define new DEBUG_NEW" ]* F/ u% M" H8 V" U; @8 o
  20. #undef THIS_FILE
    3 q, B$ `" G6 ?3 o* \
  21. static char THIS_FILE[] = __FILE__;( b7 O5 k1 X% B2 k( V
  22. #endif) [1 f3 A. B# O6 |9 L
  23. #include "SkinResDef.h"
    0 b" a# j7 V) \( z% T
  24. #include "ChangeBG.h"
    2 V# b  R; @$ d+ j5 L$ [) A
  25. #include "AFXINET.H"& r( [  q3 t2 Z8 p

  26. 5 @0 B& B9 r7 `1 x$ [
  27. #define TRADITIONAL_CHINESE 0* y$ _" Q+ T6 O
  28. #define SIMPLIFY_CHINESE 1
    4 X5 B* `8 y; b: E" S. U
  29. #define ENGLISH 2
    3 x' k5 q- L  x- ^5 `5 R; Q
  30. int m_iLanguage = ENGLISH;
    $ k; a  g% r$ {9 s
  31. /////////////////////////////////////////////////////////////////////////////
    6 k2 O( z: ^( j% \9 |* K0 g6 J
  32. // CRevAppApp% K6 Q  U( v; f

  33. ! m  \$ ]1 C  N) I4 t
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)) ?9 ^# {* n! I& _5 K5 L0 p  C' o
  35.         //{{AFX_MSG_MAP(CRevAppApp); a$ s0 u( a0 e$ f& d0 I4 Y0 g! W
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    . t3 A0 C! k$ S0 ?
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    - ?% X9 j1 X8 \" t0 D' ~
  38.         //}}AFX_MSG, Q8 X" y/ g" i0 N) c- h
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)) Q, U! W* G7 U; z- Y
  40. END_MESSAGE_MAP()7 C$ k+ h, {2 U% T5 M

  41. 4 P* `' c- i& Z! Q1 n) F
  42. /////////////////////////////////////////////////////////////////////////////1 {, E2 z* R. O7 v6 v* u- i% d+ Z, Y
  43. // CRevAppApp construction- N& D* E3 N2 ^

  44. 5 l( u) m! S( e/ Z
  45. CRevAppApp::CRevAppApp()6 i9 P5 Z8 g, w6 m8 e: O7 G4 Y
  46. {
    , J" d- ]8 O4 h5 X5 B
  47.         // TODO: add construction code here,$ l0 ]; @5 _- Q5 e! ^! a- D# A
  48.         // Place all significant initialization in InitInstance
    - o2 l7 N7 N! s: N0 D7 ?
  49.   bDisplayIsBig5=FALSE;4 |3 G* A1 L& X! M5 ^1 _' n
  50.   bRestartUpdater=FALSE;
    ; O4 w, n2 B6 M- k# z- o4 U
  51.   bFinishUpdated=FALSE;6 ]- @+ l( i; D- |: ^
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    3 M% b  t+ V3 S, ~* \1 F
  53.   InitChangeDataBig52GBKS();0 j7 |$ i8 u, ]/ S6 w6 q5 k% |
  54.   InitChangeDataGBKS2Big5();6 K. j; f% D: v$ A5 A; ^
  55.         //1 L8 p$ [, s. |5 H
  56.         bClickRunExe = FALSE;
    . N9 B( r. ]7 {9 E
  57.         //$ x6 d# B" i. T$ y' }7 _3 [5 T
  58. }
    2 d. P2 W, _" y

  59. 2 u4 D4 I; C8 y8 a
  60. CRevAppApp::~CRevAppApp()
    . P- s5 t5 v1 H* N
  61. {
    . T- d% l' u3 K( Y
  62.         // TODO: add construction code here,$ f; }& I9 q8 ^" B7 X
  63.         // Place all significant initialization in InitInstance* d7 D7 n! n9 l- f
  64.   EndChangeData();
    5 Q/ B( F8 P% I9 _9 B7 i
  65. }4 i( P9 J  H, c& l1 B
  66. ( ]2 o2 ~) N* k8 G7 m
  67. /////////////////////////////////////////////////////////////////////////////
    " I; [# ~1 e  f8 R" X4 W
  68. // The one and only CRevAppApp object' V- z0 b- M2 W
  69. 3 t. {* o' j  @( }$ F) F& O/ c
  70. CRevAppApp theApp;
    , T7 `9 y# W/ r) s6 G3 \5 p
  71. . I  A4 {# v8 A6 w+ g# g3 e$ J# Y/ p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    % F" {6 V7 N( q) v9 v' Z( S6 m7 q8 B
  73. {5 d. R+ U! h; O# O% V
  74.   int iEOF=0;9 [, \# Q. u8 b. u; ~0 b5 O
  75.   char szTempName[MAX_PATH];/ F( y2 g9 I0 {) I$ Z2 i! J! w
  76.   *szFileName=0;
    8 W2 L; A* u, `( r) K, j* q
  77.   iEOF=fscanf(fp,"%s",szTempName);
    1 _2 |  O) P4 I' v6 Z5 K
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
      N+ s! c7 M5 ^3 W5 ~$ }
  79.   {& @$ d8 t) h  |. @/ a  N4 {
  80.     strcpy(szFileName,&szTempName[1]);% j* S! @4 S7 }" L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    . ]& a- F5 @2 H" s6 o
  82.     {1 ?# B, C" a% i6 v5 N; C) _
  83.       iEOF=fscanf(fp,"%s",szTempName);
    0 d0 \2 G4 N8 T1 J
  84.       strcat(szFileName," ");
    & @4 K6 i/ Y; ]) i# B
  85.       strcat(szFileName,szTempName);; O' H8 g' F2 B2 n, f) a" p
  86.     }( u; [% A  f! [0 B5 V9 F
  87.     if(strlen(szFileName)>=1)
    4 X6 g- v. M/ a& R: ^
  88.     {3 f6 b% f8 t+ @; \
  89.       szFileName[strlen(szFileName)-1]=0;
    # J  E2 {& x' D0 c9 M) ]
  90.     }
    * R3 O+ O& p4 V2 {, ~, z" h
  91.   }
    ! c* j2 S3 i3 e
  92.   return szFileName;
    ( p6 A2 I6 `- i: m6 C6 l' w
  93. }
    ! B% S9 b# |9 S6 T" P: W& l
  94. : A- z+ Y8 e. F& N  y8 E2 M" s
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    7 i& n8 D( P& ]* d$ g! d; S
  96. {
    2 v* Q' G9 D2 L% L; H' B0 N8 Y( x
  97.   FILE *fp;9 w# k9 I/ d. A4 m, j# x3 j% l
  98.   char *key=NULL;
    4 {+ s" q  y6 h
  99.   char version[MAX_PATH];8 r( P. X1 A, S1 p* v% [  C
  100.   LPUPDATEFILE file,olds;3 b, n8 x5 e( L" @
  101.   std::map<CString,LPUPDATEFILE>::iterator p;' f# \; t% d0 @
  102. 3 E% E" y0 @3 R  K5 v/ Z
  103.   UpdateList.clear();
    $ L, k2 L" i# N# u: p: m
  104.   UpdateFile.clear();; X! w* P/ {5 L: ?  m5 k* G& }2 ?  M
  105.   if(GetFileAttributes(filename)==-1) return false;
    * T- v8 _& J5 }. i
  106.   if(!(fp=fopen(filename,"r"))) return false;
    6 o, j+ Z, H; F, J* @$ j
  107.   fscanf(fp,"%s",version);' x$ U! f0 H; ^( |
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    # A7 f* s/ ~4 ^( o+ h0 z
  109.   while(fscanf(fp,"%s",version)!=EOF)
    $ `, Z# i( ]4 D" a7 S7 X! _
  110.   {
    ( Q" y5 }. o; Z* a1 X
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 J2 n8 W4 c/ }4 ?& A8 Y. t3 d
  112.     fscanf(fp,"%s",file->path);- \4 X5 t! `/ Q1 {
  113.     ReadFileNames(fp,file->file);4 t* s, e* I% A
  114.     strcpy(file->full,".");
    3 U8 q* r# L% h
  115.     strcat(file->full,file->path);! z1 r' D, Q4 Y; b. f# K
  116.     strcat(file->full,file->file);% `; l6 P6 ?! d; e& E( n, _
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    % ^. S+ e# I2 b1 ]+ l" J2 q+ C' T' z
  118.     {& ]$ u5 ~! D4 I% A2 @+ O$ M9 p
  119.       file->vers=(float)atof(version);
    ( _3 u& ]" n+ z' B3 l- @
  120.       UpdateList.push_back(file->full);
    + l3 j; t% P9 Q3 \3 A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    & }. O" c; ]7 ^! L
  122.     }
    + q5 G% I' r. o+ Q
  123.     else4 A9 F0 ]1 i2 G
  124.     {
    3 P2 R* ~. d# V+ b# U4 L
  125.       olds=(*p).second;
    1 ~  [5 ~' K0 ^
  126.       if(olds->vers<(float)atof(version)), Z8 b4 i0 U  Q9 [5 T0 J5 g2 a
  127.       {* ]) k6 W+ Q8 {3 u2 T# y; Q, y7 H
  128.         olds->vers=(float)atof(version);
    7 ~4 ?1 }* _9 ^1 Q' E, ^9 h
  129.       }/ {: |6 _! {* S7 m1 g- R
  130.       free(file);
    3 V% |9 z- _) y" ]$ t" @/ X
  131.     }
    * j' m3 u3 u- e5 d- [# u1 y
  132.   }
    " t# f* A6 L; s6 @4 p
  133.   fclose(fp);
    1 w( c2 h+ j$ G# E; b7 m7 p8 C! C
  134.   return true;+ H2 a1 ?$ U9 Z0 v3 ]$ k
  135. }" ^( g, A; n! D, n2 I) b7 L( Q
  136. , Q- f" A4 V7 q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    0 J3 H7 ]( H$ p, o& |
  138. {7 s' Z" b0 a3 K- w
  139.   TCHAR  szFull[MAX_PATH];3 T4 [$ i5 L6 e. o6 j) C
  140.   TCHAR *token,*inter;
    2 k$ E! n0 d7 y
  141.   *szPath=0;
    6 w* C2 ?; Z0 p( M
  142.   strcpy(szFull,szFullPath);2 p$ O. r0 J- P+ r; W( L6 @6 N
  143.   token=strtok(szFull,"\\/");
    5 x# [0 N$ f0 b3 N2 u8 F
  144.   inter=token;5 N$ N7 T. Z; |- S% L: |
  145.   while(token=strtok(NULL,"\\/"))
    : N5 {' l8 V/ p: A; D1 ]
  146.   {" B$ V  U3 Z; M# y' Q
  147.     strcat(szPath,inter);
    2 B/ x5 h: H" ^0 F# f
  148.     strcat(szPath,"\");
    / e' M& U9 g& i4 r
  149.     inter=token;
    8 A9 X" n8 J1 N) {% w3 }
  150.   }) U+ P- y( f# Z1 P' f! y- i) k
  151.   return strlen(szPath);
    3 @/ n% M3 n5 P4 ?/ O5 P+ o* A
  152. }( x5 s' |2 H# T* i
  153. . Y; `: U4 d2 j% u
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)5 v% U- t3 y$ F# X! D$ w/ F- A
  155. {5 m" C8 Q' |. l9 K: a
  156.   DWORD attrib=GetFileAttributes(Target);
    ' I4 b" c! s# m7 o2 _
  157.   if(attrib!=-1)
    0 V, S; n( L; l) E) l0 r7 {& Q
  158.   {  w$ s3 o) L% s8 Q4 `
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    9 f) K" {7 ^' |- h+ G; \
  160.     {( ?. f, }# A! w, s9 G3 F3 E$ M5 O
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    * \9 t0 t, ^  I1 S$ ?) {# `
  162.       SetFileAttributes(Target,attrib);
    ' l, L( ]5 Q# g
  163.     }$ O. E6 _8 U" B; }# e
  164.   }7 v, b6 l( j# ~7 i& c: e: x3 M: ?
  165.   CopyFile(Source,Target,Erase);. e7 j/ z$ K2 e: I$ d# {
  166. }1 ^8 G- |8 D. P2 u

  167. + F1 x' i+ F; t8 W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)' c7 ]' n% Z% c4 G! N
  169. {
    ) f( B4 k2 j+ P' m' {
  170.      FILE *fp;
    " v, a% }/ ?& G( D- }- N
  171.      char  szBuffer[8192];3 l* p+ `4 F" c& b
  172.   va_list  argptr;
    + N  p8 V& i) N+ |" p; D$ Z0 m
  173. $ L% v8 F5 C! K, j
  174.         va_start(argptr,message);
    / s- h4 s' _1 L
  175.         vsprintf(szBuffer,message,argptr);) r; e7 O, t) n. r% B  F+ P; R
  176.         va_end(argptr);4 {8 S& \% `! q( ^. \% n' `) U5 e
  177.   fp=fopen(FileName,"a");
    # q5 ~+ K) G3 L  z( W9 U  A  \
  178.   if(fp)8 l- V( Q  k9 ~
  179.   {
    8 k- f* ?) J- x/ @5 B
  180.     fprintf(fp,szBuffer);
    ; P" K- R  z1 {6 Y
  181.     fclose(fp);5 O4 q; _* |: }6 h. @
  182.           _flushall();9 l3 j: p8 H& W" v$ g3 ]% C
  183.   }
    4 s6 P  t0 d! t6 z
  184. }7 U8 k- g# O" h
  185. : B9 G3 M0 y# w; l6 E) f  f& a$ Z" f
  186. BOOL CRevAppApp::Fclearf(char *FileName)8 q, t) h# q& L$ C  ?0 @* i/ X) B" _
  187. {
    % X& h- r% B( w
  188.      FILE *fp;( [2 g: V" J' ~' Q. q/ G
  189.     DWORD  attrib;  F+ b9 l7 ^' p& w# }
  190.   attrib=GetFileAttributes(FileName);2 T8 i9 O( A! g9 @" K
  191.   if(attrib!=-1)
    3 Z9 L3 c* B2 n( v. Y: y8 ~
  192.   {) W; W! d3 U3 I6 c$ D7 q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    3 X% {. R" ]/ @+ m; V& Y
  194.     if(!SetFileAttributes(FileName,attrib))) t- |+ p% u" C% d! z4 f1 f; a' X* n
  195.     {
    ; q( R  ?" t5 c5 `
  196.       return FALSE;
    # f6 X/ Q5 H* k! Q
  197.     }8 |0 U1 I- I% F- O& k& ]* ^& g
  198.   }$ E" v8 r5 Z; y8 U- T3 t; J: ?: x
  199.   fp=fopen(FileName,"wb");& D; c% C+ H) u6 Y5 g3 o
  200.   if(fp)- \5 u! f6 ~! E. t0 W% t
  201.   {0 W  H3 T; x; v) N% I  V, s
  202.     fclose(fp);
    ( [' q# e8 g; w9 j7 ~7 X; C6 p
  203.   }4 `) a5 d. v$ j0 J. U: @
  204.   return TRUE;
    5 k3 O: U, z# d  B4 C! \, k
  205. }
    ' a' |* g6 |$ h1 J

  206. ; q0 C3 S5 a, b  x- f
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    4 r3 m$ k* M5 a9 P
  208. {5 j# k( `: X7 h/ |4 ~5 }$ D
  209.   char filename[MAX_PATH];
    . B4 L3 F9 o5 q0 G  \) c
  210.   LPUPDATEFILE file,olds;: C& I6 y0 ~# s+ Q9 L
  211.   std::map<int,CString>::iterator i;5 g3 \7 @( c/ W8 f$ L: s
  212.   std::map<CString,LPUPDATEFILE>::iterator p;" Q$ c# A+ q! e' U! N
  213.   std::list<CString>::iterator l;
    8 g* u# n0 r/ J* E, o1 P

  214. 7 `5 i& U* z8 r2 V1 J" l
  215.   if(bFirstUpdate). [/ W' G& B2 w
  216.   {
    1 M& d+ o+ B6 i8 C
  217.     dwCurrFile=0;& E1 H/ O* u1 v9 Q  t
  218.     bFirstUpdate=FALSE;
    6 m+ g/ W% |2 H7 h  M3 u
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; v- Q# t, I) g
  220.     {
    ( C: [9 S8 H& _* f& ?  j/ e/ Q
  221.       dwTotalFiles=UpdateLocal.size();
    % A% s" V' {# z" R" ?  f( N5 k' G- v
  222.       dwDownLoaded=0;: R) F: M, _- M  ?2 h* b0 G% T
  223.       bSilentStep=FALSE;  R. t, Q. a+ ?# ~
  224.       bCompressed=TRUE;
    * z' H1 M$ y, ^( }4 o
  225.       strExtLocal.Empty();
    % t) f) ~4 q! h4 [+ O8 a* `/ ^/ r5 b
  226.       strFullName=(*i).second;
    - r7 S/ D5 e' C* o. a
  227.       dwProgramState=AP_CONNECT;
    9 d- @7 j# c( ~1 `" B
  228.       return TRUE;
    0 u3 P0 A1 e# B- {% R  ?
  229.     }
    / U8 m: w, v' V; t
  230.   }: p0 B) ~# z/ ?$ E' b
  231.   else if(bRestartUpdater==FALSE)
    ; k% N& {# ?- s" H4 [$ b1 I' Y. G0 Y
  232.   {1 G0 t: D0 A( {
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    # J3 [6 ]8 D6 K- o: ^+ G! z& ]$ p
  234.     {
    ' ~8 b/ T& Q1 h9 ?8 o1 X
  235.       file=(*p).second;
    8 }. N' c1 M3 I% }" E* [! ?/ ?
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ! z! ^3 P0 }! S( P! e# A
  237.       {
    ! {* Q6 k4 U* ?+ c
  238.         olds=(*p).second;2 T/ |, d  q: o  W
  239.         olds->vers=file->vers;
    3 g2 k5 k- @8 T0 z5 F8 N9 I
  240.       }
    8 Y* ]6 U8 ?( o3 z& V( `
  241.       else% ]9 x/ c, c$ t/ b3 `4 k( T& X
  242.       {, y/ h( D8 X9 k- ~0 v2 m! D- ~
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 O; o; b: z  A3 z/ X  y4 l) a$ ^
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    # g5 I4 U, d6 q- V2 t3 x% @6 G
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));7 F5 r' G5 \3 ]" t3 {
  246.       }
    3 k9 c  m: U8 e2 [/ x
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");8 R2 P% D  a1 H6 m2 r/ v
  248.       sprintf(filename,"(%s)",file->file);
    ' i5 b+ j! ]- f# f
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- ?! g; {: S9 a9 P2 ^1 C
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    / H2 y( n& N, b3 j& G6 P
  251.     }
    % m+ v8 T, [% @
  252.     dwCurrFile++;/ p; t1 @9 r% E: c
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 M5 g" ?, j; N
  254.     {
    1 K( P, r/ G( j4 M; y$ P- A+ m
  255.       bSilentStep=FALSE;  c. _- N7 P( z9 b
  256.       bCompressed=TRUE;( U' l" \; W) A6 l0 u
  257.       strExtLocal.Empty();; r4 g! ?6 [- `7 W
  258.       strFullName=(*i).second;5 x: c+ U/ ^* w9 y0 I0 x8 n
  259.       dwProgramState=AP_CONNECT;
    + J1 w. S$ G2 c8 ^6 T1 }
  260.       return TRUE;
    2 N: w5 ?: B, I
  261.     }3 |, h$ L, b4 S
  262.     if(!bRestartUpdater)
    5 G- }7 h) J: F0 X
  263.     {
    0 T0 H6 c2 {/ ~7 H1 D- e
  264.       int iCurrSize,iFileSize;
    " C! K7 g. M3 ^1 A' l4 M2 ?! s& p1 O
  265.       iCurrSize=0;
    + U& f4 j. {1 H2 R1 c! p/ E
  266.       iFileSize=UpdateList2.size();, N7 u1 e$ g- T# G
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");9 x5 r8 O' }* B# {
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    % m( B4 c6 l1 w9 `6 R) N
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");  P$ ?$ b4 I# k6 C) u
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & l3 \% G/ [6 z2 ~2 i
  271.       Fclearf(".\\update.dat");, C! ]- ^) F3 b' ?# ^4 y. m
  272.       Fprintf(".\\update.dat","Bloodyf\n");: i$ H5 k5 U% @- D+ h  P6 T# @
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; h& O- I. U; H0 B/ Y
  274.       {- R/ N, Y; F9 q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    3 D( R; G& Q$ g) |) U4 ?& _  _
  276.         {/ h8 b% I3 B! ~: N- F, e* f8 g
  277.           file=(*p).second;& z) w  L) W& N
  278.           sprintf(filename,"(%s)",file->file);
    ' b% z0 \  S, `4 p  f* @
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ p$ W( B. n8 d
  280.           iCurrSize++;
    7 J3 K! t8 s1 j) z7 \, S7 t, v( W9 x
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    1 R* ?/ I/ d' q6 q0 Z0 o
  282.         }" S  s4 ]& L& A0 s* E
  283.       }
    ; ~4 u! U. ^& Z$ k
  284.       unlink(".\\update.txt");
    ! m: F& E1 R( L% v5 J; Y8 B! I
  285.       unlink(".\\update.tmp");- I! H# B+ S9 G2 Y
  286.       Fclearf(".\\checkversion.dat");, m* J; z- N* E3 d- O' Z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ; a/ p; W; {' z2 w% Z$ R! b) \2 h& Q
  288.       if(UpdateLocal.size())8 m4 f4 [0 F0 j3 g" @% L; }1 _- `
  289.       {
    + J8 j- y3 k# f% G) @% q/ B
  290.         UpdateLocal.clear();8 r6 q4 ~  j! x/ U' U4 M( A" b
  291.       }
    . R5 i  O1 U& b2 d# R  X, x
  292.       if(UpdateFile3.size())
    & ]% M* U6 Z( f/ A  u
  293.       {1 L" I* a2 f2 r# h/ [# g* y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & p2 L- r+ G5 q1 e  i3 R5 O
  295.         {8 E2 Z8 a" ?0 L9 N9 m
  296.           file=(*p).second;) P+ g: G# Z2 [/ e
  297.           free(file);
    ! ~( o! M  k0 I0 P6 ?* t
  298.         }
    ; l5 c6 B( L* I
  299.         UpdateFile3.clear();
    * v2 C' B7 ^# b  Y$ c
  300.         UpdateList3.clear();( M4 ^4 O  b2 G
  301.       }
    , L0 R/ [; \: X* V
  302.       if(UpdateFile2.size())( ~: Y) x: M, e' P9 N
  303.       {8 ?7 g4 p/ A0 s
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # e& s, V+ Y: h+ ~' |
  305.         {2 y3 a! Q% A% {, K
  306.           file=(*p).second;; f1 r, T# ^+ r( O- m' J  Y
  307.           free(file);
    9 }; G0 O% Z. m+ L: S. G
  308.         }/ a/ k5 ]7 ]% ?. U# r
  309.         UpdateFile2.clear();4 t" m( b$ o: T- I+ k; @
  310.         UpdateList2.clear();
      A( {6 C) W/ g  ^; f0 a) Y, E
  311.       }
    " R( B9 n7 ?/ t0 w
  312.       if(UpdateFile1.size())- U( Z% O4 C3 a3 @& w
  313.       {" `# O; h* l$ v" F
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    % q/ L  u& m8 t5 X
  315.         {$ X* r* y  P4 E% w
  316.           file=(*p).second;# w5 R, W- t: [+ W2 k7 W; F
  317.           free(file);( o: `, M6 X% T. }& D; V0 O' B
  318.         }
    ; D* [6 P0 x% q# D- V, Q! B
  319.         UpdateFile1.clear();' x- {' W8 U8 s; z; ?4 i5 j0 c2 v
  320.         UpdateList1.clear();
    ( }) @1 g7 q, g& C2 L: Y
  321.       }
    $ Z! g. X$ i- U) q: a
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    7 J. U! J" @7 o
  323.     }
    ' p! i* S- l1 l5 f3 O
  324.   }
    & k, N" ~% N8 O
  325.   return FALSE;
    / j  R8 H2 K2 m0 B0 \) D
  326. }# J' Q# B& H/ ]3 ?7 Z& ?2 s' g% F

  327. % ^. p& c6 a  v& v! Y
  328. void CRevAppApp::ClearAll(void)
    8 \* _: _1 G$ m( ]
  329. {% J& B1 {1 n- ]0 d+ L0 K( ^% K
  330.   LPUPDATEFILE file;8 g( L7 n* ]: g: j( t1 [$ F
  331.   std::map<CString,LPUPDATEFILE>::iterator p;8 |3 f! e& o1 k
  332. 2 w" Y6 X" W0 d9 q" d
  333.   if(UpdateLocal.size())5 ^( B: y0 u- |& S. h
  334.   {
    , p7 G7 g4 J( t- e5 f0 B
  335.     UpdateLocal.clear();. ]% m  I6 L& q2 b
  336.   }
    + l. a4 I) g, }& H; w" Y6 }. S
  337.   if(UpdateFile3.size())
    9 k4 [2 ]" G6 A7 U! x3 E
  338.   {
    3 y9 v3 o( z. g, l* y- l
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 o& G! K3 O. v- X
  340.     {: f. e; u8 n! w/ w- n
  341.       file=(*p).second;
    0 E, e# Q8 Y; m. `) n) ]/ m
  342.       free(file);
    6 E  j' p8 @7 }: `: v# B3 J
  343.     }
    " n' q# i- s3 H
  344.     UpdateFile3.clear();! e. z' R! b3 ~# a6 k
  345.     UpdateList3.clear();
    8 {$ J( ~# Y: Y7 Z
  346.   }8 G" l/ z# K' S/ y8 R
  347.   if(UpdateFile2.size())
    6 n2 R9 I% ^7 H4 S0 c! R  C
  348.   {& p: v  H- w. S8 T* o3 R
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)/ ]( d/ e6 u# x# t1 ]/ ^) @1 |
  350.     {5 q0 y% G5 h$ ~( [- K. v
  351.       file=(*p).second;9 y. c9 t3 V2 K9 L+ E
  352.       free(file);! {$ h4 x% r1 ^& k) f
  353.     }
    + c5 e$ a* V( p: m
  354.     UpdateFile2.clear();
    ( Z& V) U' E4 @" f, M
  355.     UpdateList2.clear();; L# u  Y" N4 a7 M
  356.   }% R7 r+ T: [1 ^
  357.   if(UpdateFile1.size())
    ; V; ?* j) N) n1 Q- b: Q. c
  358.   {# L2 d0 e3 p1 b" Z0 d, X. E$ |0 J& q
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 {: `: v* o' Q+ b1 C2 ^
  360.     {
    , X7 W" Z% j) z0 s5 e, t3 C& D" M
  361.       file=(*p).second;- ~( F: g: E8 e6 i
  362.       free(file);* B& g2 Z* S/ Z) V( U* x
  363.     }" r6 S9 Y; N! q! V
  364.     UpdateFile1.clear();
    7 F9 Z- K; a: |. t1 i% X5 S& Q, F
  365.     UpdateList1.clear();
    7 o# ~+ R: x& `0 S  @
  366.   }6 D( J' u" e: o4 o! _$ W
  367. }  
    ( }+ Q) p. G4 h
  368.   
    ' T- j& s* X% Y. h+ q
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    / d: ]8 w9 B0 }8 M7 ^8 k' S
  370. {
    8 ?5 ?7 g$ m: O; P+ X- v# Y1 o
  371.   int c;
    ' ^! N/ O4 ]# F: H
  372.   LPUPDATEFILE file1,file2;
    1 N8 d& v' d) A- Q
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;! x$ j+ L; E0 l; v" O! O# [
  374.   std::list<CString>::iterator l;0 d- N# a+ |4 D: H5 @% n
  375. - F; U4 s  B1 ~: h9 z6 K
  376.   UpdateLocal.clear();# V, l- k6 J; c% w. w; r
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);  U3 C8 ~4 Y( w4 n$ h
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    6 [7 s  N3 N) x4 p
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    - x$ S5 }) g6 {1 I: v
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    0 E- N3 H# A8 `/ W3 h  ~4 ?
  381.   if(UpdateFile3.size())) U. ~# d4 b, a) `9 }
  382.   {9 p* F1 V& v% h7 t* }6 r- ]0 \
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    2 L8 o' T. P& ^' c1 b0 H1 O
  384.     {
    & ~1 n6 H( ^+ n& t2 Q
  385.       file2=(LPUPDATEFILE)(*i).second;
    7 K1 j2 p) F2 c$ {. M! D8 l
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * z% k- n; E3 G: @$ s# ?
  387.       {( A2 x7 i3 ~1 c( k" z3 V! y
  388.         file1=(LPUPDATEFILE)(*p).second;
    " n( L. @  b1 h% _5 ]
  389.         file1->vers=file2->vers;
    6 @* {1 N6 R' `4 E, m
  390.       }( \* E) ?; w* J+ p
  391.       else& ^2 p$ b" g' f6 n
  392.       {
    9 G, ^% v7 {) d% n# j/ Z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " S3 p) V" c3 j- t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));  O. V' S, M% {4 W: i+ i9 t; p( D5 |1 C
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    9 k- B- B' P9 C! N7 w* L! ^
  396.       }
    * O( {* [* v, N; o, L1 z
  397.     }$ a3 P. c; x7 U) ]+ B0 a+ P
  398.   }0 M% V  |  ]+ g, |" h9 z
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++): k' Z, P, f- ?0 @9 Q! v
  400.   {/ \* C7 G  |! e: U) f$ U
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())0 x! U$ q/ L/ @8 L7 S& f; e( T
  402.     {
    9 R8 D4 H* E7 F# t" k9 l
  403.       file2=(LPUPDATEFILE)(*i).second;
    + O; D1 h" g" ?5 }) r( i" F2 z
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 z! a7 z2 ^5 o& _0 K/ W
  405.       {
    5 U8 X, @, |: y( `
  406.         file1=(LPUPDATEFILE)(*p).second;3 F0 M3 g( N0 C
  407.         if(file1->vers!=file2->vers)7 M  ?7 E+ O7 d0 ?% \- Q$ W: d
  408.         {
    6 ?* c. m; U9 A( u( a, t7 @
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% d; A& ~, {8 i, s5 ^$ O; `
  410.           c++;$ {2 |3 v$ j3 a
  411.         }8 X' f! m: b4 A3 A% V# S
  412.       }! @7 N- E$ G+ N6 }: S0 Z: \
  413.       else
    9 G4 a/ ]% g) g' s' M' M
  414.       {; w5 `9 _: i7 e; S; }% w5 w5 I
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, N/ t* O, }- {. Z; g5 T; k
  416.         c++;
    3 o1 b+ K5 I. v4 ~# E- H- f  e
  417.       }
    * D3 g' f* C" U8 I
  418.     }# L$ D. v% H* ^4 r
  419.   }; X" z, M" ]6 s0 h  _* Q! b# I0 w
  420.   unlink(".\\DownLoad\\update.txt");
    " ^1 S, C2 y9 {; |8 U  _+ }
  421.   if(UpdateLocal.size()) return TRUE;
    $ q9 i- [, P! e) s0 B! {: g
  422.   else                   return FALSE;
    - N$ V# \3 U7 Q# ?* M% i
  423. }- a$ ^" J( b7 d

  424. - B8 Q3 J  f8 `  J: g7 Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/", P* X1 p" D6 e0 B+ K( e: ^+ H
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    3 }- z( l  S, P0 ]

  427. # z7 K9 k* j" x% N' Y
  428. & H( @  n& l7 F

  429. ) l. O4 {) t6 G' n# Z/ }
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ( b# S( {3 \% q3 i% B& m6 Z# j
  431. {
    ' w2 u2 p8 F' p1 A. R
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    / I2 C% c, P. c
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1). b' ~2 g9 i4 Z6 ?! s& Y& O
  434.   {7 f7 C4 C" g- I
  435.     char szLanguage[50];
    ! }) G4 I3 P0 {1 N
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 i$ X' b0 m" ~  i% [( q- V8 Y4 m
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " i$ u9 O( R6 p) z6 E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 k# J7 o" E# l! u' j' I3 ~
  439.     else                                   m_iLanguage=ENGLISH;
    7 x( }; F: q7 y# X- r" Q
  440.     char szRegister[100];- _+ H; E8 N4 |6 G9 U% U/ I( M
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 Z6 `* g( i3 T3 \1 ?! S* A1 `
  442.     strRegsName=szRegister;9 v5 G0 x2 t0 }4 r2 a# J) t
  443.     char szPatchURL[100];
    4 Q# u7 J, e0 O4 D
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    & K* U& u; n& a: O9 s3 v0 Z+ K6 N! y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" i4 M# f+ M# `& k' S
  446.   }. b- J# m$ Q# w: {. T* x6 q
  447.   else
    * `' I% A1 a4 L1 Y/ }4 `
  448.   {
    9 Z3 z+ G; X& ]9 E5 t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - Z# |# u) h7 d$ c; M
  450.     strRegsName=DEFAULT_REG_URL;
    8 k5 F9 I  E$ G: I+ {
  451.   }
    # X0 `% n* s7 h# {$ Q$ G- m
  452.   if(GetFileAttributes("hosts.ini")!=-1)
      ~# C. |; F& M/ V1 q/ a+ q5 U% Q
  453.   {. o; a% q: N% d: i; r& S
  454.     char szIP[50];! B8 q6 U; I8 M% F  q% J
  455.     char szDIR[300];
    . I! t1 L0 Z! E( _1 ]# H
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))2 l" ^' m: ~$ x2 ?" V0 l/ J" i
  457.     {
    5 L, h$ d' g+ I' M1 h) }& P
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");/ e* _; L6 \* p2 ?3 P
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: _3 w+ b! {5 E9 \" [. G; ?
  460.       strHostName=szIP;/ \  L' T3 M0 c  y) v
  461.       strHostPath.Format("/%s",szDIR);
    + Y  x* R) z$ r% Y# l1 |
  462.     }% H! h4 h2 T4 }$ S5 `
  463.     else% ?0 X3 Q. T2 \" m) a; Z' o+ s4 Z
  464.     {/ X& n# j4 _! Y/ K  h
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 C, b1 _& R% K0 P6 }% m9 J  @: V
  466.       {
    7 V& ^. P6 {$ k3 D' v) D1 ]
  467.         char szLanguage[50];% J) L  l0 B" a. x3 P. B/ d3 x
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 h; c. n* R$ ^/ y* W
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : w  l' ]8 H  Y; Y6 f) b3 A4 i
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 j3 N6 D( Y/ L1 U5 ]/ q
  471.         else                                   m_iLanguage=ENGLISH;
    * A( l1 j/ G! w# B
  472.         char szRegister[100];
    3 f) O7 b$ G& f) e9 i" o
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 p  K' e/ F3 P& w8 v
  474.         strRegsName=szRegister;0 o0 c+ s# z3 o# P: l9 K! _
  475.         char szPatchURL[100];
    ! z" w" e: l: b( C# a) }3 \5 i
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* M( \, N  g* k9 p
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' j2 a; n: |; C, g7 a% m
  478.       }* ?* E# k0 x* w0 y+ D2 g! H! t' M2 P
  479.       else
    7 s8 j/ T4 j' I
  480.       {
    # ~8 ?8 L2 G2 n* r5 _* a" \
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 R5 F9 x6 |, f: J1 @
  482.         strRegsName=DEFAULT_REG_URL;- b5 R  k/ g& c
  483.       }
    & F/ R. \% q2 V1 _" D% O" b* D, u
  484.     }) F4 W# U4 ]5 |# @' n
  485.   }+ A+ \6 h+ l: a3 b
  486.   return true;' ]% |% u8 Y; j( ~' c& u% j0 E& Q
  487. }
    ' P3 f7 s$ X' |8 t# `$ d
  488. ' X. D! s% E0 c# w2 R+ h
  489. #include ".\ZLib\unzip.h"+ \0 _9 E% ?  H& i* k" ~5 D
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ) G+ c& C6 g6 T. d( N4 o( m! q$ {
  491. /////////////////////////////////////////////////////////////////////////////# M' |& _. h3 j7 ]: T
  492. // CRevAppApp initialization) F& M7 l9 N# x2 P! w6 U
  493. ) \6 |) A) R0 R! i: m( h2 v5 J! r
  494. BOOL CRevAppApp::InitInstance()
      `+ u" ~* q3 \: w8 t
  495. {
    * E8 y- K4 d+ c( [; E
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];* M; q* n8 J' _2 L, K' d$ [6 ~

  497. / ]9 r0 u5 P  \2 d
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);4 w; [# y, h! V- W. ]
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    2 q% p2 _3 }9 ^5 \7 H. k% ~
  500.   {
    ( a. C- {' o  z% e3 u7 B0 @, O
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    0 C/ c/ p0 l5 U8 y+ S, m
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    6 D( o2 g1 O8 q1 O* X
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))8 s. s3 A9 w/ Q) Q# ?' _( O  ^
  504.     {
    1 t2 ^' ~! D. D6 o/ q. U/ g. I
  505.       strcpy(szPath,szPathTarget);6 s; l4 \. ^- `
  506.       SetCurrentDirectory(szPath);
    . R  I" s% p) R! N" f
  507.     }( I; }% B% ?% R& l+ W% A& c8 [
  508.   }/ `3 H. a9 w( }% `9 \) P
  509. #ifdef _DEBUG5 O* H: Q* _8 m6 k0 h# C
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); o/ t  ]! |5 N2 H" O% D
  511. #else0 V) v: R$ `- m! Q0 ]2 E8 p. ~0 I
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 r8 {" C4 O3 E) J. N# [
  513. #endif
    $ i* R: x9 F& n6 r' j6 j
  514.   {; O- Y5 b% g/ L. H, G: d
  515.     char tempFileName[MAX_PATH];
    2 A( u1 D0 }5 p: a/ e  j( L. [
  516.     strcpy(tempFileName,szPathSource);$ q; V- e; H6 b% @
  517.     tempFileName[strlen(szPathSource)-12]=0;( c/ N: [+ t9 A
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ' v" h* z# n& y! H6 n: ~* C" r
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    0 N. o% T4 K3 e2 M3 }' D; _# `
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    3 H  O+ n# y% j' `
  521.     return TRUE;: b, T5 s6 c+ V
  522.   }/ D5 x7 T7 q! {* {) a
  523.   // Nuke 0118: Delete run.exe# e) F6 J# y3 u- H/ R0 j
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    : x% T, h2 V# R& W" L+ P# V3 i
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + V! o4 M2 t* ]$ O$ Q5 p8 ^8 ~6 i
  526.   if(!ReadCfgFile("Config.ini"))
    0 _0 }7 p: H; _, l4 b2 Y2 E- j
  527.   {
    / C$ t# z* P, C8 O, ?$ m# \
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);& \& u" e4 Y1 E: W- B
  529.     return TRUE;1 S  B. x3 u) Y1 p" E9 L" X
  530.   }) d& N% c- W' l+ ?, j* _
  531.   HANDLE mutex;) F/ M! _5 O/ Q( y* T  m. e
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 _" O* P. n! i6 J1 c" q( {6 k
  533.   {5 A' G6 O( d2 T8 E1 ]
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)) V! h) M5 {; l& P6 t( G' Z' s
  535.     {' E( ~) p5 V- J% u
  536.       CloseHandle(mutex);' Z; v! }* X5 k8 l
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 N; w, ~5 b( [0 k1 ^/ M9 ~
  538.       return TRUE;
    ( s  q6 V+ d4 g3 ]6 `
  539.     }9 u3 k- a: p+ x  C- ^/ u( K
  540.   }  - c1 q; i( n3 G# I" l* n7 ~
  541.   CloseHandle(mutex);! o$ [  a5 m) t" S; |! I
  542.   G/ Y' P% U& ?& h" {* c3 t
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);: ^/ m9 y" Q. i/ Z3 s9 i, A
  544. " I" p# q' q6 h( m
  545.         AfxEnableControlContainer();
    1 ~( z' t0 w9 k  K
  546. 9 `, E8 |: w3 Q7 f5 m) s% `* B
  547.   bCanUpdate=FALSE;7 F9 }' A. j( \! R
  548.   dwStartUpSteps=1;
    $ R4 B( ?% r- D2 h1 s- p: j5 H
  549.   dwProgramState=AP_NOTHING;
    + U" X7 ~0 ?, D6 y

  550. 8 W5 `! d9 X4 p% Y5 b
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);/ ?2 R7 M3 H! a7 [, K

  552. * E8 g  `" h' g# {8 G9 ~5 s3 y2 X
  553.         // Standard initialization) I0 J$ l9 \  X5 ~( l% d
  554.         // If you are not using these features and wish to reduce the size
    , r! P0 [. S9 [2 t1 C
  555.         //  of your final executable, you should remove from the following
    . @  t7 d* J; t3 T' V
  556.         //  the specific initialization routines you do not need.
    8 G, P( C5 S. \# \0 w

  557.   A3 }) t  g' z$ p
  558. #ifdef _AFXDLL, O: d4 K1 s" P$ W; k% e9 a- m" F# ?3 O
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL& ?8 W* R$ G5 [; |3 E& V/ C
  560. #else! R* `. n# z! |8 h: G
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( y5 l2 P. q0 M  Q+ O- O
  562. #endif
    8 y9 Y# }" X- o; A6 S

  563. 0 P. x6 t& a7 y$ h
  564.   dlg=new CRevAppDlg;% E3 {; |, j) i  ~4 V/ o4 i5 n
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    9 a9 ]0 t+ f4 m* t& b+ @9 r
  566.   dlg->ShowWindow(SW_SHOWNORMAL);0 P3 L/ |. X) R+ }
  567.   m_pMainWnd=dlg;
    1 Z9 G6 Z  m9 v" Z

  568. 8 h% k5 y/ w* r: n* [& D" x
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    8 P+ `$ m* b) q) n) M

  570.   \2 p/ |, k$ t& q( o
  571. //  GdiplusStartupInput gdiplusStartupInput;
    . x6 a3 n# L! H8 b' S  X; ]1 a5 l
  572. //  ULONG_PTR gdiplusToken;/ _' V9 D# r' j9 J3 D0 B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);* [3 o6 g+ Q+ o+ v) t" @
  574. 7 Y* G; Y9 R+ C; O
  575. //        CRevAppDlg dlg;# J& Y% v: \! T1 X9 d# w) x
  576. //        int nResponse = dlg.DoModal();
    $ F8 z9 x4 ]1 ~
  577. //        if (nResponse == IDOK)
    8 D) y" @  t! d  [# f5 R
  578. //        {5 z2 S9 A/ s3 ]" h
  579. //                // TODO: Place code here to handle when the dialog is
    : v: \! {5 Q" \7 l3 f+ I: k! P! `
  580. //                //  dismissed with OK( P2 \# q! V5 o7 M* D$ C
  581. //        }
    4 ~+ X2 x: r% v: c0 W8 y
  582. //        else if (nResponse == IDCANCEL)! y* o, z) {% R/ B" r5 I! e) r  C. K, b5 h
  583. //        {
    * p4 f3 D( o" c5 ^( t8 q
  584. //                // TODO: Place code here to handle when the dialog is
    : Z0 ]9 p5 v: R9 ?0 i$ n: S# f
  585. //                //  dismissed with Cancel
    7 [; f2 h4 L. l$ y
  586. //        }7 B1 d9 k& j/ M- D: B! T6 P' m
  587. 4 L' {: }- J6 ^, m
  588.         // Since the dialog has been closed, return FALSE so that we exit the& ~% z4 f, u% u) T9 e2 @. h
  589.         //  application, rather than start the application's message pump.
    $ ]1 p* Q9 u" |. s
  590.         return TRUE;6 W& _' U: L" N1 g/ P
  591. }
    $ @  g  z% G" w% g" C& Q
  592. 9 W! S3 p% M: T" o/ {2 G# d
  593. char *CRevAppApp::strtok3(char *pSource,char *token)3 s+ ^2 C1 J& V: q) @
  594. {
    . s! r% z8 b9 t) T$ C; d# w3 ~! Y
  595.   int i;' B3 Q8 S, R2 Q" p' `: f
  596.   char *szRet;
    / j" @5 w" A* X! O0 j* ]5 P
  597. # \% ]7 t  y) b
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    * D- q& a) p. Q/ P9 G
  599.   if(sztoken)
    4 H5 _% `) Q* @6 C' r( w
  600.   {+ e- I9 q0 K% M2 c$ \+ L
  601.     szRet=&sztoken[itoken];
    9 I, m5 Z5 z: h8 [( `2 M. d
  602.     while(sztoken[itoken])% C& g5 ]/ C  u+ c% f/ }
  603.     {) M: V/ H  W0 }8 c! @- q" G
  604.       for(i=0;i<(int)strlen(token);i++)
    - v0 L  f) q3 y7 _  U3 V6 w
  605.       {3 Z% g1 I1 u$ e/ c+ Y9 n
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])+ _) i" s6 a2 m4 T0 G) b; {3 Y
  607.         {0 b6 G6 C+ K, p5 }& l
  608.           sztoken[itoken++]=0;
    / {, y' }$ y0 o* T9 X3 v# |
  609.           sztoken[itoken++]=0;! B1 B& J& K1 z
  610.           return szRet;2 h6 [2 b* E, {. E
  611.         }3 r5 d: K, ], i' v. z4 _( n
  612.       }
    9 D9 u, s& S) \' J* \) b
  613.       itoken++;
    6 ^$ o4 K! V( ^- y- Z7 k
  614.     }2 Q3 s6 c, ^+ B9 F
  615.   }
    2 a& J( X4 e7 y( Q) A. C4 U9 o
  616.   return NULL;8 f, X% d" }! z8 `2 A) g( U
  617. }; ^( l$ K0 ?8 p  [. Z

  618. . p# a9 F+ {; P& L! [0 E1 U0 p
  619. void ProcessProc(long Total,long Current)
    ! m% j3 L  L  O; v' O! v6 _/ X
  620. {
    ; N/ F7 }/ }+ \# p2 H) r
  621.         MSG msg;
    : A, @! C6 f- @- j# a
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " ^1 R8 T* P0 g" J; {& p
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    % V( _  U! x  p
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      o6 ~2 h% \6 B* A
  625.         {9 j) F! J. i# @0 ^
  626.                 if(!GetMessage(&msg,NULL,0,0))' a% ?8 l+ ]( I
  627.                 {8 a/ c7 w* l2 y* l' ^
  628.                         return;
    1 w9 S8 J& X& j! s* @% e4 t( m. Y5 w
  629.                 }6 [; V5 C: ]: O/ V" Y0 E* j& y
  630.                 TranslateMessage(&msg);
    # P& q1 e( d# `7 m/ F8 u" X
  631.                 DispatchMessage(&msg);
    ' t5 T3 C1 ^% D' ~
  632.         }          Y1 F+ T$ P+ ]
  633. }
    * }9 M/ P5 o% P1 s- D5 J% a2 K

  634. 3 ]. M* e8 y4 s4 e
  635. BOOL bFirstChar=TRUE;1 `; O* v& r& ~) f$ j
  636. 7 I3 i  r: t1 ^  h
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ' ?: v4 r$ f; t$ s( e$ @
  638. {
    5 E  B6 J4 f( _' Z  l
  639.         // TODO: Add your specialized code here and/or call the base class; C6 m4 T6 k* Q. ~
  640.   switch(dwProgramState)+ H- `; j- J1 A0 i1 |4 I2 Z
  641.   {  ^; [! V  W1 q; B7 E
  642.   case AP_NOTHING:1 M0 i) p5 z# [5 v
  643.     switch(dwStartUpSteps)
    4 c& i+ E5 Y2 e
  644.     {7 m7 y( U6 e+ k2 t1 ?: M  v; @6 k& G
  645.     case 1:3 X2 Y: f; P. G8 V# n
  646.       {$ z# c3 [( `4 Z# @! A6 k( p7 Q
  647.         int i;9 O: H7 _5 M# h: ^! v
  648.         CDC *pCDC=dlg->GetDC();+ h) M3 a5 x+ O' f! V) O
  649.         HDC hdcwnd=pCDC->m_hDC;- l3 ~4 r7 }  V0 f! w
  650. //        Graphics graphics(hdcwnd);
    6 G& f8 I, h( [( [( o, h+ @) Y$ }. U
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");6 e. N- p4 X; S- Y
  652. //        INT iWidth=bitmap.GetWidth();
    5 D4 H" k1 k) O
  653. //        INT iHeight=bitmap.GetHeight();
    2 f+ j% S: L0 F& N" [- F% x
  654. //        Color color,colorTemp;
    + v, o  K1 d) N" i4 T" d5 w
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)- ]5 Z* q0 ]2 E. E
  656. //        {
    ) F% V* `1 M- t3 P& M2 |2 V
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)! b9 J5 Q6 u- K, b: g
  658. //          {' E# {% L1 ?" g7 j( t
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      J1 ]6 u5 ?! |8 W( d5 F
  660. //            colorTemp.SetValue(color.MakeARGB(
    : `, E, c" I: D: A# g( @! G/ a7 [* _
  661. //              (BYTE)(255*iColumn/iWidth),. ?2 K  r% S) p0 z/ }' r
  662. //              color.GetRed(),' u4 B. D: ~5 K
  663. //              color.GetGreen(),0 e8 J9 \' L; k  K
  664. //              color.GetBlue()));
    ' U+ m* y5 |/ b$ L" i, r  s
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);9 y+ ?6 s. E' A: B2 g" K$ f7 y
  666. //          }7 ^; f* d, j4 K1 B' D
  667. //        }
    ( `8 B7 e4 N& j- s
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # B5 K/ W) s& c3 {0 Q# }
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 U7 Q  I1 V" [: D
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");  w' b; O5 L5 {( N2 Q- m2 N! T. x
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 k! ?) p4 d8 i8 ^  A6 A* b2 d% Z
  672.         for(i=0;i<240;i+=8)% i9 y* D! d2 Z( g4 k/ Q% v8 i9 q
  673.         {5 J, a5 K+ c  g4 {8 L; y+ u5 P
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: [4 b# q' m* Y" J- k# ?' e4 k
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      \; ^7 j  c9 V' z
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * |/ B. ^9 I. T9 n
  677.           Sleep(33);3 F, S2 w& y& ?0 S4 d& h
  678.         }5 M. ^/ V# r! T* j' l
  679.         Sleep(1000);
    % q: s3 F0 e% a& q
  680.         for(i=240;i>0;i-=8)  R, K7 G3 ~, N4 f7 e
  681.         {, `* p/ [& ~' N
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& T) Q9 h4 J6 j" m7 ^
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% R" s" M; X% Z) ]6 [# L
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    - p2 T/ ]% c9 s$ A7 W8 ~
  685.           Sleep(33);# U# H( q$ ^$ |& Z, G* _2 l' q/ |
  686.         }6 J; S  k+ k( {
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ! B$ _1 w% p7 i6 |, x+ q' a+ T
  688.         dlg->ReleaseDC(pCDC);1 d! G% V" R! l6 a0 u+ {5 Y' B' p& U
  689.         DeleteDC(hdctar);
    + s9 W1 t' H& X0 O; w: b0 s
  690.         DeleteDC(hdcsrc);
    1 K5 Z% s4 C. `
  691.         DeleteDC(hdcorg);/ e/ g5 X7 ?' }" T# h( O# _
  692.       }. k9 W$ N' H/ c9 K# [( }
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    4 W( O: l! j" y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    $ r7 c3 _0 Q; R; R4 y& y: p
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    6 {2 V3 b4 L  f% n
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");3 U! j$ d, N+ ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 e  o9 p2 B+ g  o/ |: y
  698.       if(!Dn.Connected())
    * E' `  S( o5 c/ a! _
  699.       {
    4 B( o: x" Q, t5 M2 Z6 V
  700.         dwTotalFiles=1;2 b+ Q, i" ]- R( C5 ]) y
  701.         dwDownLoaded=0;
    - T9 ?9 Z7 [: T# y& E
  702.         bSilentStep=TRUE;3 R" C) ?$ |& l7 r6 G+ `5 j
  703.         bCompressed=FALSE;
    5 d3 x' ~% j3 q4 U7 P& K: F9 [/ l
  704.         strExtLocal.Empty();* J  K- h# w9 z- D0 j0 m
  705.         strFullName="readme.txt";
    ) l# d% g5 h3 A9 r
  706.         dwProgramState=AP_CONNECT;
    . N, w2 l2 ^2 y. ?
  707.       }7 n, z! g2 O$ v% k
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    0 X. m+ _/ \5 k
  709.       dwStartUpSteps=2;# [# s- F  E. {
  710.       break;9 s7 G! r$ t7 m( i7 K
  711.     case 2:
    : {! G1 S  R; I) l/ n% ]  M$ `
  712.       {. J, t3 A) \5 `" Q
  713.         int iEOF;7 J3 y* V3 C' w6 s$ ?4 G3 j8 s
  714.         FILE *fp;
    3 Z0 f9 E. H( H' l+ x4 x8 m
  715.         char szString[512];
    ' F& ^0 s' e/ V& g& F! j' k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");0 s& Y  C, e7 W0 c, C
  717.         if(fp)
    : N+ L- B2 O7 P, j5 U8 ~4 l5 o. r
  718.         {' N  f# t0 O1 d5 Y% D7 C" [" l
  719.           do
    . ^+ O. G. G/ Z% W: G- n9 X4 P
  720.           {. l5 D- I; o( P  b! C  z
  721.             iEOF=fscanf(fp,"%s",szString);+ G$ I' w( N. x- p8 E0 S
  722.             if(strlen(szString))! d. ~' x( r" Y: g: J
  723.             {
    : d  o  c/ w& X0 x. m8 c
  724.               if(bFirstChar)
    - x2 ?3 |4 \0 Z
  725.               {; f! u# K" [+ ]
  726.                 bFirstChar=FALSE;
    . X, h/ X$ j+ S6 Y" O+ P) o
  727.                 bConnectIsBig5=FALSE;5 g( k3 t0 V( J' L* V$ V) p
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;8 \0 q) R# K" d- ?$ g
  729.               }
    ( b/ M' Z  n$ u
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; [" |" H4 I8 f! l, H2 U  d
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    / a9 b4 U+ T& I0 d
  732.               dlg->m_ListText.AddString(szString);
    " I" T) o" J- {* g) A4 H% B& ~
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 D% o: C. F2 ~6 \/ M( A6 W
  734.               *szString=0;9 `9 \$ p# d/ w$ ?( D1 ]
  735.             }4 y% U7 W; Q$ A4 N' U, k8 W' Z
  736.           } while(iEOF!=EOF);
    ' _/ v8 r5 X& o2 f
  737.           fclose(fp);
    ; k; F0 w" e3 v! y) D
  738.           unlink(".\\DownLoad\\readme.txt");0 x8 Y4 _+ p& z$ @: P' C8 t
  739.           dwStartUpSteps=3;! N% _/ \9 b5 ?0 T
  740.         }
    / I/ V) P" {5 a
  741.       }7 S) h, b; ]' |, k. S
  742.       break;
    8 \- J: V! I& V2 g, n0 H  s' E4 ?
  743.     case 3:( [' \$ q2 |2 [  p
  744.       if(!Dn.Connected())
    % _& |$ Y0 f2 _' w
  745.       {4 V! W' {+ o+ L+ m. x; m
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);* ?3 T/ F" A) g* J, |5 B! c
  747.         dwTotalFiles=1;
    . ~+ t6 |. h/ D" S+ o* I/ l
  748.         dwDownLoaded=0;
    " C5 {4 s+ ^5 w
  749.         bSilentStep=TRUE;! @( A" q) w# `! E
  750.         bCompressed=FALSE;% k6 _) u* v" e" e& X" g7 z
  751.         strExtLocal.Empty();
    8 `9 g1 b/ d1 C, M1 q  A
  752.         strFullName="checkversion.txt";/ x  u1 [9 |* }
  753.         dwProgramState=AP_CONNECT;% H7 V3 ~7 |6 g% H. J
  754.       }( \* E; N! h9 q; T; m
  755.       dwStartUpSteps=4;! f3 c6 j5 x7 X2 g7 @- }  L2 _
  756.       break;9 A: Z# a- v, Y! @0 o$ l9 u- q% r
  757.     case 4:% ~( o' v' e  i2 ^% U- M7 Q! D
  758.       {
    : {4 D* w0 c% z) ~; L
  759.         FILE *fp;6 m6 ]" v7 ~* s$ o% V1 i5 b
  760.         char szString1[128];5 o2 z9 ]' _0 H8 ?; X1 `9 l) V3 b
  761.         char szString2[128];4 I) Z6 G! a+ ]4 C0 _) Q+ z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # P; s: A9 A- `+ X+ T& S. j3 z
  763.         if(fp)/ {) R& m5 |! B* W/ r) E
  764.         {
    9 p% T3 S/ d0 n$ f' v  ?
  765.           fscanf(fp,"%s",szString1);7 v/ |( [4 y/ L- B9 P  h8 c
  766.           fclose(fp);" ]$ U- P, Y! K' f% X/ \8 u( I' O
  767.           fCheckVersion=atof(szString1);  e, C% `7 B5 Z9 s; W5 U, y
  768.           fp=fopen(".\\checkversion.dat","r");
    * w) p& |* i% _2 U, p! G* p2 [
  769.           if(fp)" {( R5 d2 O& D' s! N- N
  770.           {( z* M1 E& [1 g- `0 @1 x% R
  771.             fscanf(fp,"%s",szString2);: Z/ q$ ~3 M' T
  772.             fclose(fp);0 @- o. V0 B; a  L9 j9 `
  773.             if(atof(szString1)!=atof(szString2))# m/ w4 m6 [2 @( k, {; B$ u
  774.             {5 R7 p" g& x. _
  775.               if(!Dn.Connected()); Z$ k& ?: c1 y
  776.               {
    + U9 J2 I; Y$ i6 i$ |/ z- ?9 S
  777.                 bFirstUpdate=TRUE;
    / m5 E3 f+ ^& s: S7 X" z% Y
  778.                 dwTotalFiles=1;
    5 I% b. x; ]& _1 Y2 Y; U. s- j& r
  779.                 dwDownLoaded=0;
    % u( Z2 s* N  z8 C9 P+ r, S
  780.                 bSilentStep=FALSE;, C. R3 k( m9 }
  781.                 bCompressed=TRUE;
    . s+ k) J  K+ F) ]9 ]
  782.                 strExtLocal=".\\DownLoad\";) ~2 t! E" t# D; P8 `/ l# d
  783.                 strFullName="update.txt";
    ' N/ x* J1 p* U7 k
  784.                 dwProgramState=AP_CONNECT;
      z+ N+ q7 q( D1 t& e) C) N, u
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    3 j2 ]& N8 K9 n0 R
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 a# }( r- z2 H
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 s5 B4 b8 [5 q# _! ^. }
  788. 0 p. e' g4 L0 J( E
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& S) B+ N- a. G. k% W+ w) Q5 O
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    # \7 ~( l. f/ V/ O- C7 J# y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 r" [0 ^0 B! E* G1 ?) C7 ?
  792.                 {% S. h& g) I* V4 L# _
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ) z5 }0 M% i% A  b4 j- t
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    2 W! o# E6 @6 A) i9 f1 [1 C7 h/ Q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");. O+ i3 k! U  J! _
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # \6 i. n# A$ e; y

  797. $ z! h- s$ e; q; U" T+ d2 l) ~
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");( I& w3 Q  P" i$ O! w' ?
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. r' T! E5 Z- r+ g3 Z/ _
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; W# k6 k9 L" s$ o/ _
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ R9 W$ d4 _5 O" ]
  802.                 }
    + U" T8 }" P7 e. d, O
  803.                 dwStartUpSteps=5;& U# l  B4 e+ [& C8 i* k- j
  804.               }
    , F1 n0 v9 x  u; d
  805.             }
    , o7 x' c- y. j3 U
  806.             else
    ( z* L' m# P. a- z* x
  807.             {# }- N. [# U' D0 j' t
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ! e; ]" a( O. `* c- q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 L  L/ e$ y$ u' n4 ?
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 ?4 C7 u$ N+ w# z+ Y7 [& R
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" j/ d, z/ \# L
  812. 5 j8 o9 u6 {1 S6 g! ]
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. A, r: [! c4 ], F2 A( g1 f
  814.               dwStartUpSteps=99;
    9 x; `* W7 C* t; G, `* a7 e
  815.               bFinishUpdated=TRUE;
    ( P. i! m! E, L
  816.               bCanUpdate=TRUE;$ s8 W' w4 _) w/ R
  817.             }; F9 ]2 V! b2 g- ~
  818.           }
    / V6 O' e- `! t7 m$ _5 `% F6 s
  819.           else
    , |2 M; J+ t+ N- D6 X/ }
  820.           {
    6 s2 d: q1 [4 I0 N6 `
  821.             if(!Dn.Connected())
    0 k0 G* R: c) d# Z
  822.             {4 @9 f+ y7 t2 `0 }
  823.               bFirstUpdate=TRUE;
    ' M9 F& z" I$ ~6 a
  824.               dwTotalFiles=1;
    . f3 T7 h: \, }' e
  825.               dwDownLoaded=0;- F/ y' X' U$ b; j) f
  826.               bSilentStep=FALSE;
    . d# d1 L9 i, o- G/ c3 h' Q8 n/ t7 A
  827.               bCompressed=TRUE;7 D: g, p2 @# u4 V' O
  828.               strExtLocal=".\\DownLoad\";  {% N% p9 ^4 M# V2 o
  829.               strFullName="update.txt";/ X+ u, C; A, D7 X$ f, C  ^: z
  830.               dwProgramState=AP_CONNECT;
    4 J6 J3 U3 J5 m/ [
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 o: F- ~4 L- D$ n- w8 Y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    * g9 z! }3 j$ t2 K- m( g
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " U4 T/ w3 X+ N" A  a
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 h5 @, x$ |$ e9 `
  835.               unlink(".\\DownLoad\\checkversion.txt");2 u3 p6 F0 t6 K5 g0 v  |
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    8 w! r; w% g' D" |4 u% ^
  837.               {, n" x5 y" I- I8 ?: F* g
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    $ i& w! i* q# |, \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");- r: S. Z2 l4 Z3 p2 C! S
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");) n' V2 M. ?; ]8 d5 J1 N
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 Y2 A6 H' p, w
  842.                
    % @1 P8 S% e" H9 V1 S" P; ^: M! P
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , B/ S" {, c  _/ j- a, i2 D" r
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + }$ D& x, q6 v. M$ u
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 s( [: D5 U& E* a/ f0 Z* ~
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! J9 Y3 ~7 r' h7 k$ ^5 F
  847.               }# e) H! K  {% y0 i/ m1 n% ]  _' b
  848.               dwStartUpSteps=5;
    # u2 e8 B+ o9 V! }: i$ b
  849.             }! q- v2 D6 Z! K7 b/ O
  850.           }0 [; K- ^3 l$ J8 c8 q0 }2 s3 N- p
  851.         }+ i! w) R  X; |" H' g
  852.         else
    8 q/ v; T7 [# l* a: z
  853.         {
    * S! f+ E/ l; z/ e( _
  854.           dwStartUpSteps=3;
    ! o2 ]0 A1 M. D
  855.         }0 U5 ~& V% n1 d+ {& L( k* i. i! Y
  856.       }  [% ~$ @  c6 L& F5 D
  857.       break;* k& e, U# J0 h9 |/ y! l
  858.     case 5:
    ; x% _! X" V; q# L  a
  859.       {5 ~- I' _, F' q4 I
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    7 |" c1 V# L- M* S/ H, ~2 @
  861.         {
    0 F: M0 i1 M4 k. t6 [/ j
  862.           int opt_overwrite=1;( s; D2 A; W* ~3 w" v! t0 p
  863.           int opt_do_extract_withoutpath=0;" ?2 U' R# |9 \, l$ E# v5 ?
  864.           unzFile uf=NULL;3 t7 u8 ]& M. e8 A8 n

  865. ' `0 c- J" l' ~2 r2 N
  866.           uf=unzOpen("Wsa.zip");
    5 w1 T! g+ Q) A( V. I
  867.           if(uf)
    ! i9 K! j8 H' K  \( \4 X. @1 ?  ~
  868.           {; U" [( D  c) L, k2 \" z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ; a+ S' D  v" ], d. H5 W
  870.             unzClose(uf);' b% W% p9 y8 b
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");3 y/ e0 z5 q; _- p
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");' c  k( n2 p! A1 n- I! |
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");. A6 f5 c6 I( w! F( Y- j
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 a5 S% {' @! {, T. O
  875.           }
    ( b/ q9 m( s7 a1 i# w8 B% |4 C" x
  876.           DeleteFile("Wsa.zip" );
    % Z0 G; ^9 d+ K" g) L
  877.         }
    - B7 W. d# B! R6 ~$ i% r, M! p! _3 C

  878. * v/ P/ O; y8 K6 R3 u- I2 A
  879.         if(CheckLocalVersion())
    6 N3 E+ r4 _, y0 n9 a0 x
  880.         {% y% Z# r8 W" c! f
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    * L9 r( z, p1 O8 M' v1 q
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");+ L0 Z& {( D9 m+ Z6 _6 H) y
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    % T/ [5 T# y0 r  q2 N
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  Q- n; p9 ?% z4 \' R- k
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);4 _4 z4 [/ F+ }7 [: t' K
  886.           dwStartUpSteps=99;- i, z' B' F6 K
  887.         }
    1 B3 u  t1 Q- b7 N. n: |" F4 K) @
  888.         else
    " C+ X5 G3 H9 L" e6 Z
  889.         {! [( ~( Y! c8 H: W: K6 }& F( Y% C( {
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : I2 z- a3 u7 K: m- B
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- `6 {5 g3 Q+ V3 {' p
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");: x1 f5 G9 u  I. X: f

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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