CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
8 h+ T2 M+ ~2 \' y1 M
  1. / RevApp.cpp : Defines the class behaviors for the application.0 q0 ~+ g0 G0 A! y
  2. //* R" k. I$ T9 q2 K- t2 M5 R8 e
  3. 9 c; t. z  f+ p2 h- }
  4. #include "stdafx.h"
    . X2 C) A# y0 D1 ?/ {

  5.   g; V9 y  A& `1 o" M! r4 K
  6. //#define UNICODE
    4 p9 s6 ^; F7 r0 X, w
  7. //#include <gdiplus.h>8 L/ ^" f+ z# l* X2 v1 S
  8. //using namespace Gdiplus;
    ( x" g# s5 {/ ~" B: U1 l
  9. - o. e/ J' \7 v* ?0 [
  10. #include "RevApp.h"
    . e0 u, c& C; D4 D
  11. #include "RevAppDlg.h"; v- Q/ U1 o8 D
  12. & o, y: J. h4 ]9 c. n
  13. #pragma warning(disable:4786)! X- O8 e+ c/ ^' R1 a
  14. #include <map>
    - ]" g# q( H  j3 S5 k: Y3 ?
  15. #include <list>5 e) R; U8 a( k8 I- e
  16. #include <direct.h>
    ; F- K; e* s: b/ T$ ~
  17. 3 W! @& ?! W. ~2 T0 R, C: o+ a
  18. #ifdef _DEBUG
    + W* M4 H8 J" C' u) b& E
  19. #define new DEBUG_NEW
    * C! |/ D# ^+ N; }
  20. #undef THIS_FILE
    3 |* U2 G! f( a% h, j
  21. static char THIS_FILE[] = __FILE__;* w9 O. p( {' C- v
  22. #endif- @/ u$ i7 }: G7 C
  23. #include "SkinResDef.h"2 }! w& j; s. Z1 ^6 Q) o
  24. #include "ChangeBG.h"
    + L( o. ^8 y& N
  25. #include "AFXINET.H"2 ^, p# I9 ]2 |
  26. . W. O0 ]! X% y# R0 b9 v
  27. #define TRADITIONAL_CHINESE 0) Q  G  @2 M4 W
  28. #define SIMPLIFY_CHINESE 1& R+ C2 a  }  l7 p
  29. #define ENGLISH 2) A. Z! S0 m5 ^. j
  30. int m_iLanguage = ENGLISH;
    ; A) `! i# h* g' v) H  ?
  31. /////////////////////////////////////////////////////////////////////////////4 H9 d: R( `' L4 s* w. A6 S6 ?) z
  32. // CRevAppApp
    7 e5 x3 t7 F' z2 ?9 T, a
  33. 1 n; m! c: s) `. F4 W9 G* B( A
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" W/ f$ R) b% ~
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    6 [/ v, x; f' U4 ~, Y. s
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.: S9 F& }3 U' Z) m5 Y# F, q& [
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!7 ]3 q, j0 g' @# u
  38.         //}}AFX_MSG  _0 E( R1 b) x1 A& J* I  I2 I6 t
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    9 z8 K+ v% U. _1 t% o3 _
  40. END_MESSAGE_MAP()4 B, w; [" n- S

  41. # T( f0 F, L4 z
  42. /////////////////////////////////////////////////////////////////////////////
    " V3 k4 x' u% [: {4 d' t* x0 c
  43. // CRevAppApp construction
    % l4 M8 e: _$ l/ Z
  44. ' r% _: x8 p1 f( {  E# v
  45. CRevAppApp::CRevAppApp()$ c; k! k$ G% p9 {
  46. {4 u) B4 `" c+ d, D0 u1 T
  47.         // TODO: add construction code here,
    : e: Y0 h6 j$ \4 |
  48.         // Place all significant initialization in InitInstance
    ! `8 l$ K5 W8 N
  49.   bDisplayIsBig5=FALSE;& f1 ^1 {# d, W# G( c' t
  50.   bRestartUpdater=FALSE;. X6 i0 Y/ Z9 g- m# y& m4 H: k4 v# q/ ^" y
  51.   bFinishUpdated=FALSE;
    , x& J; R6 {2 H
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    * u& B/ s9 t7 p  f. X+ e' I
  53.   InitChangeDataBig52GBKS();$ W/ F1 x, Z; h0 x+ o1 D9 V6 y  V) a
  54.   InitChangeDataGBKS2Big5();
    - O/ F" H; H( T$ W$ p
  55.         //
    1 ~  H* `# v7 \3 M) N3 G7 g: N
  56.         bClickRunExe = FALSE;
    6 c# e9 I" q2 `9 w5 x
  57.         //
    , Y, I2 |: s$ B9 k
  58. }
    ( {4 E0 P% w" }# C  ^/ p

  59. 6 j% o! ^* G! F5 p1 }
  60. CRevAppApp::~CRevAppApp()0 A! N8 y, R- k0 J
  61. {
    ! S7 `) l7 K( M: K3 b1 o7 O' o
  62.         // TODO: add construction code here,# e+ O' ^9 ^7 G" Q5 k9 V& E
  63.         // Place all significant initialization in InitInstance( ], \/ e) r/ m. a) f1 M
  64.   EndChangeData();  C2 B" x. W+ E+ d
  65. }
    - V6 Z  z6 R, N" O% ]- u/ c
  66. : L3 t& L2 q% Z3 B! F" }! N
  67. /////////////////////////////////////////////////////////////////////////////+ d/ ]: P7 n5 |4 ?
  68. // The one and only CRevAppApp object
    8 ?& p3 W" L6 ]( W9 J+ W
  69. , U& b5 n- g* y; g8 x/ Z! {' |
  70. CRevAppApp theApp;; d9 U) K. ?6 `9 }; O

  71. + [8 t2 C& @( ]& ~3 v
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName): C5 h9 b$ _3 d, N- t
  73. {
    : E" j: t" C$ T4 T8 ]& Y
  74.   int iEOF=0;
    & A, _' C1 L. B: o( f
  75.   char szTempName[MAX_PATH];+ z; o5 g- r4 x) T& F! e
  76.   *szFileName=0;9 s- N* Z3 P0 j
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 R6 T/ q7 G9 j3 E
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')+ q+ g( L8 [1 b( q! E+ ^5 y
  79.   {6 Y. Q0 [# v+ C+ ]# k+ I9 D: V
  80.     strcpy(szFileName,&szTempName[1]);
    $ M. J6 i  f! i- U: z- [; ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF); O' F8 u2 e: J, P
  82.     {, O% X! }% E+ p- \7 V
  83.       iEOF=fscanf(fp,"%s",szTempName);
    3 K$ d' q& b# \) w; I' a. o7 }1 X
  84.       strcat(szFileName," ");
    ! v" F) O7 `2 [  d
  85.       strcat(szFileName,szTempName);4 @7 b) J) X+ H6 {$ Y5 Y
  86.     }$ J1 I- V8 {; z3 c4 f3 S
  87.     if(strlen(szFileName)>=1)
    + U1 y( _: q, L' E& [
  88.     {
    & W  m: Q: P, b
  89.       szFileName[strlen(szFileName)-1]=0;4 L, L: {8 ~$ G5 n+ E2 m0 N7 H6 D- _& D1 j
  90.     }
    ' J# G. e2 n8 B" s6 ^) x
  91.   }* M; h+ F( ^2 J  L/ w/ `* |0 H
  92.   return szFileName;4 X8 V0 ^2 ]2 p! i' u' R* \1 K# {
  93. }1 u- s* l* N# ^2 c- Y, z  V" J0 C+ a

  94. ' M+ U$ o. E4 Z8 y0 H* Y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    % V; G5 a2 y$ o2 ?7 Q  O& x$ a" T2 N5 f
  96. {  V1 {  o/ {" @% e: _
  97.   FILE *fp;
    1 G- ?4 L" g0 w" e# s
  98.   char *key=NULL;' x4 T, m) O7 H! r% a6 ^( q# x
  99.   char version[MAX_PATH];" a7 X' r' `8 |8 i  t' N
  100.   LPUPDATEFILE file,olds;
    * Y) ^! a8 P' G7 e+ C! L+ a
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & Z* a  |/ Q8 E' \+ \( W% \
  102. 3 M. A5 T, H: \& `6 E! t6 j
  103.   UpdateList.clear();
    ) P- u% w7 T6 u* F7 c6 O1 m
  104.   UpdateFile.clear();. B/ q' A0 m* Q0 X& [( Q
  105.   if(GetFileAttributes(filename)==-1) return false;# M5 B9 D; F0 }& ^* B( I
  106.   if(!(fp=fopen(filename,"r"))) return false;
    $ ?% u' T. X" {) f! g7 p4 R
  107.   fscanf(fp,"%s",version);
    " w, Y- K; `, e. k( n- m
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }7 V6 E6 G; _" U
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ) a: {* g8 j1 P' a  m' D
  110.   {
    % z3 \( ~  u# K4 w5 X3 ]" w) C+ y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 d/ f. r4 a$ }
  112.     fscanf(fp,"%s",file->path);
    / P2 s9 {' H" V
  113.     ReadFileNames(fp,file->file);  a" v, ^" W. f  ~
  114.     strcpy(file->full,".");& K9 |' C6 D' [% }% a' x
  115.     strcat(file->full,file->path);: I; }9 Z, T- j3 A) Z$ r' ~5 F4 G
  116.     strcat(file->full,file->file);
    ( o8 m2 O5 g  b, ]1 J, r
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 F8 C6 U% M) Z$ {/ |- E
  118.     {$ D* O# A8 P$ h3 A. m
  119.       file->vers=(float)atof(version);
    & J+ p& n& X( K7 R, _
  120.       UpdateList.push_back(file->full);2 D  h+ E; k" j4 z+ t8 P
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    0 D! {6 u& F+ n% T0 l& m: k
  122.     }4 o& A; w0 f2 \; F2 \
  123.     else
    $ }1 I( ^$ i5 V  d
  124.     {5 m- w) j* I( `+ ^: Z) c5 }0 k
  125.       olds=(*p).second;  @( w2 Y: }. z# t! q: W# X) U
  126.       if(olds->vers<(float)atof(version))
    + S3 U0 h, \6 \0 \& F
  127.       {( f' K4 q+ F; F! @$ s* `' j: M% f/ O5 B) L
  128.         olds->vers=(float)atof(version);# j9 X% ^7 h1 V
  129.       }
    2 D" z( a7 U: X8 J" G  |
  130.       free(file);. W9 C; V, y) f7 v
  131.     }
    ; g! R8 y3 U2 E( t2 B5 x" o. \$ D
  132.   }
    5 R0 l) q5 q4 Z3 i! P6 c+ B* P
  133.   fclose(fp);
    ! d* ?1 G# k# q% N2 N: X
  134.   return true;
    & x5 p' z& W* P; U. j
  135. }5 V2 p+ u. m. i) R, a) G
  136. ; u0 S/ J+ J: Z) n- ^- ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)( ]) O, p8 C, y. ?0 H' N
  138. {
    2 U9 e" w. n; l. N* r
  139.   TCHAR  szFull[MAX_PATH];
      E8 P  B, Q$ J/ I& f: F0 o; I
  140.   TCHAR *token,*inter;
    , I/ K: _: \; r6 x0 Q
  141.   *szPath=0;
    7 w3 Z( t+ Y: ]/ m
  142.   strcpy(szFull,szFullPath);
    ; S, w4 y! c+ n$ f; C0 l. y- K
  143.   token=strtok(szFull,"\\/");8 H( D' e9 D% q3 J3 L2 ?" P
  144.   inter=token;; X% J7 y, w( M+ Z; W3 S$ k
  145.   while(token=strtok(NULL,"\\/"))
    % b5 X& ~/ C+ x2 ^
  146.   {
    $ n' u  I  K( j
  147.     strcat(szPath,inter);
    * [  i8 O4 `% W; e0 [; J6 \9 C
  148.     strcat(szPath,"\");
    ( k8 r! `9 e% ^7 Q% f
  149.     inter=token;
    " P7 c$ H! K! W% g+ w; ?
  150.   }
    : M7 I, }9 {) L0 G
  151.   return strlen(szPath);0 G$ a6 {+ K' _8 l
  152. }
    9 A% Z) B  T" G+ t

  153. $ Q3 I: b! Z# L! ]! k3 T3 d
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    1 Q" h4 V2 P' U8 k! A9 U
  155. {
    0 a+ f- W! [- D3 p$ l7 D+ D- D
  156.   DWORD attrib=GetFileAttributes(Target);
    8 _: r& [3 W4 N% {0 `7 W+ N5 t
  157.   if(attrib!=-1). z* k- F0 ?8 [8 C& u" a1 c
  158.   {8 P7 W% s7 Q, _( n& R# @; y
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    & H' M: J  s! F5 X0 S% \
  160.     {
    . x7 S+ j4 N1 q9 L$ y! }' O
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    " E3 N5 A3 r3 d8 v
  162.       SetFileAttributes(Target,attrib);/ d5 ^3 B9 |+ G5 Y" ?7 {) ]* x2 l
  163.     }
    ; G+ D2 m1 i$ z) d8 {6 B
  164.   }0 ~. j7 ?. a' N! z' O+ M
  165.   CopyFile(Source,Target,Erase);( _# f" L, L+ e/ J6 i
  166. }$ ?  a( D" |6 i- M
  167. ! C$ f4 N: [, Y% x$ J: W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    9 k4 A8 I0 u' w7 K) l
  169. {" Y/ \' V# Y: p
  170.      FILE *fp;
    + }5 d% c, S7 |# p
  171.      char  szBuffer[8192];1 f7 h2 v$ W9 E4 C2 Y. x
  172.   va_list  argptr;
    . H/ T. u3 \& z0 [5 F0 _) ~) W: p9 n
  173. ! S3 V/ H% C+ D8 ^3 p/ ?
  174.         va_start(argptr,message);' g9 V9 w* f9 \9 n- b4 c
  175.         vsprintf(szBuffer,message,argptr);0 m+ l2 w0 a, ?# @1 u5 z( C
  176.         va_end(argptr);! ?$ _2 s) ]0 K8 c' j, l
  177.   fp=fopen(FileName,"a");) z7 M/ b( u' ]9 V
  178.   if(fp)5 r& K0 B% E' {2 b% s
  179.   {
    . {3 w) H$ a' J" t) h
  180.     fprintf(fp,szBuffer);
    , O. L; H) y7 w0 e  O
  181.     fclose(fp);
    * J. V; h. C* H' d+ @. w
  182.           _flushall();
    ( Z4 `! I( e3 g, C* f" Y
  183.   }7 r* l- O# Q- H. E% ^" U
  184. }
    4 `; j; S- p* ~9 d% G7 R5 b: v
  185. ; i  Q& M- f! W( ]3 t$ Q
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    1 i+ U9 Z9 ]9 O8 D
  187. {( J' H/ b# O6 W* x4 ?  `. v1 n; r
  188.      FILE *fp;
    , ]/ s6 A) I2 ?8 S2 S$ c0 G) p
  189.     DWORD  attrib;8 ?# u  B5 W( w" C. B% ^
  190.   attrib=GetFileAttributes(FileName);
    ( o2 r  x) w9 `
  191.   if(attrib!=-1)0 k. H& i6 a; D+ l  d6 H) A0 ?
  192.   {4 Q6 u1 H% {: K+ |
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);8 j  K. ?+ b1 `+ j: e
  194.     if(!SetFileAttributes(FileName,attrib))
    + g$ x* e  }( r! q. J5 {
  195.     {4 O3 i+ K3 R5 v8 f0 V2 k: @
  196.       return FALSE;
    " R( j' s6 [* H4 u2 [3 X5 c
  197.     }* o# G. z) m1 U1 E6 f5 a7 M2 L
  198.   }
    ; g/ V# J, b! S4 A
  199.   fp=fopen(FileName,"wb");
    0 {; s9 s2 [6 C* s( b/ c  j, ?
  200.   if(fp)) b) A. R( p" m% L/ G. Z4 p
  201.   {
    $ D) T2 O6 O4 \. Z
  202.     fclose(fp);
    * }* H/ p* f/ H* f
  203.   }
    ' C" w6 i; d: e% }
  204.   return TRUE;
    " c( H" z( L# W5 J3 l. o6 W
  205. }' j& q: P: I4 Y' Z& v# ?% R9 d# p

  206. 6 d. ]. i$ Z2 Z" g9 F& g1 w
  207. BOOL CRevAppApp::UpdateLocalVersion(void)& i$ T. _/ W5 h) _
  208. {
    ' _/ Q3 _) h) w  Y
  209.   char filename[MAX_PATH];
    & `. N8 t# h' I
  210.   LPUPDATEFILE file,olds;
    1 s* _/ m. Z6 e$ N8 D- w1 I
  211.   std::map<int,CString>::iterator i;; ?+ ~& A6 b1 [
  212.   std::map<CString,LPUPDATEFILE>::iterator p;4 v# F& K1 ^* x9 y
  213.   std::list<CString>::iterator l;' [: Y$ c2 l  z& t$ S# Y, i- O
  214. + ?( a$ M/ V# }2 p. b
  215.   if(bFirstUpdate): \$ H+ _) i1 c* Z+ ~. ?$ t
  216.   {
    " R  D, L- Z% A( L
  217.     dwCurrFile=0;
    7 I; X1 E+ B# k0 E' a3 ~' r
  218.     bFirstUpdate=FALSE;0 X# ]1 J1 p$ l, N
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); \" a$ \  V3 D
  220.     {! w4 o0 Q5 l1 g8 c' q3 P( ^' I, t6 w
  221.       dwTotalFiles=UpdateLocal.size();
    2 w2 L9 D; d: L
  222.       dwDownLoaded=0;# X4 u5 ~8 \; t" y9 Y
  223.       bSilentStep=FALSE;4 l7 x8 f! M7 B
  224.       bCompressed=TRUE;
    % z& X; _8 ?1 ]
  225.       strExtLocal.Empty();5 O& a+ u2 i& a4 z& d8 s3 J
  226.       strFullName=(*i).second;* K" a" z0 k& e3 H  X5 \% ^& ]# ?3 c
  227.       dwProgramState=AP_CONNECT;
    * Q1 ^0 o' ~  q5 @7 C
  228.       return TRUE;
    , h* b  O5 b' y4 B( A
  229.     }- Y8 t1 k( r) m* u* G2 D( J
  230.   }2 w+ Q. b% ?0 B! }% e+ [) H
  231.   else if(bRestartUpdater==FALSE)& K. `4 w1 D+ d+ u; ~' z* z/ j
  232.   {! }2 x! X# b! B7 t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ! ?) I. l+ \. {3 w. {9 j% I
  234.     {7 a9 L* B3 {, U$ m0 I
  235.       file=(*p).second;
    / |4 u# F" Y( L. F" a, f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    % t! K- L: t6 ?* t3 ?
  237.       {
    & _1 o, {* G$ S
  238.         olds=(*p).second;
    5 `  ~, M6 s. M  U: ^4 {- C
  239.         olds->vers=file->vers;8 {) N  u' Q, g/ K; l0 ]- D4 ?0 U
  240.       }
    & _# y/ m8 l. I: F
  241.       else) X) R. h- L' y+ [( W
  242.       {
    / V" B' g/ d  T. J2 }. S
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- ]! R5 O6 }: Z2 N+ I1 ~
  244.         memcpy(olds,file,sizeof(UPDATEFILE));6 x5 X# G; X) e' q# f4 B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    # v. D/ n5 w- F; L! v3 o$ }
  246.       }
    2 ^( J6 ~" ~: L/ W7 w; J
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");7 X6 }' r; A, `% `, X" E
  248.       sprintf(filename,"(%s)",file->file);
    6 ?( k2 K& K; M5 Z5 i! z7 t; g+ u" }/ a
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ K7 K3 o9 f% U7 X
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    6 T8 t- o/ _& z4 {$ M
  251.     }6 ~/ A! o/ k+ X% b% I2 u4 H
  252.     dwCurrFile++;  x, m/ L7 i1 z% M8 |6 {
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) p3 ]( V/ ~: i  Z7 n9 E
  254.     {
    8 M/ L/ O* M) w3 M9 g
  255.       bSilentStep=FALSE;
    0 R. }! Z8 |1 V8 C# V4 ~
  256.       bCompressed=TRUE;
    ( P/ [5 Z1 O8 _" G% D; A
  257.       strExtLocal.Empty();
    ! `0 X: F! d) `, r2 Z( F
  258.       strFullName=(*i).second;
    4 @# V$ O; g' r* q, _4 I. q7 u1 ]( K- y
  259.       dwProgramState=AP_CONNECT;
    . n) i0 V2 x( P( x, v$ j4 M
  260.       return TRUE;
    & T7 \0 z0 N( C1 \
  261.     }
    ( o' g8 f5 M6 Z: t7 h2 f
  262.     if(!bRestartUpdater), M2 C, ~" P/ p: s
  263.     {
    9 z; W' Q8 Q; ?9 M: ?) ^
  264.       int iCurrSize,iFileSize;4 Q- W' z0 g6 h
  265.       iCurrSize=0;5 {3 L- G" f0 Z- N7 f! \& P# j
  266.       iFileSize=UpdateList2.size();
    * I/ B7 G# ^" u+ [" u( h
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    7 F, K& i& D, V9 P& y: |
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    , d) U0 N1 R. N5 K) W
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    8 e8 ]; p) \, U3 M
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 Q9 T3 }- {% H' ]( u
  271.       Fclearf(".\\update.dat");
    & c; o& e6 f6 ^- a: i; F: N/ h
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    $ P3 d6 }- O+ u2 I
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)5 B3 d" p: I: }6 r% {
  274.       {
    / }6 ?+ {$ a$ a5 U; s5 T2 L
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    6 Z5 y" t( {) w7 q
  276.         {
    # {& p/ Y+ O) m' j
  277.           file=(*p).second;
    5 M0 l" J  z! F* X
  278.           sprintf(filename,"(%s)",file->file);( j1 I: K* s( x
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);5 F! l. B$ p3 E
  280.           iCurrSize++;2 [/ c7 L" r1 x' F% l
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    , Z- x8 J# q0 m# R
  282.         }
      P* x5 i6 o4 y3 s6 a! l8 {
  283.       }
    ( n" J3 T  I" _0 ^# F- P' z7 h
  284.       unlink(".\\update.txt");
    ! L8 S* T% O. X
  285.       unlink(".\\update.tmp");
    ' ]5 j! ^  \, R% K3 S
  286.       Fclearf(".\\checkversion.dat");
    1 X% B' a- ]% U/ \  p
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);5 I6 Z# d1 U5 {# d/ r
  288.       if(UpdateLocal.size())% H# F7 N4 S/ d% s5 w$ x
  289.       {6 W7 F7 U, T9 B3 C6 ]3 ]
  290.         UpdateLocal.clear();
    7 T/ c" o% `# j6 N% e: W2 ]
  291.       }
      }9 E, A) v# d4 j# |
  292.       if(UpdateFile3.size())& q( P# z( O* V7 Y/ k+ C
  293.       {. F) N  S$ e  d- K4 `
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - b( e4 f: M1 l- S4 e: j& j4 ]
  295.         {
    ; Y0 m' X# G+ W5 I( o
  296.           file=(*p).second;& G8 V* w+ X' g& D
  297.           free(file);: k% F0 v' V- @5 @
  298.         }
    % d- F" e3 A/ u( ]6 O
  299.         UpdateFile3.clear();: d1 @3 O& m+ K4 n5 g' D
  300.         UpdateList3.clear();* |5 |# W/ P% ^
  301.       }
      t( e% ]; m8 e* @
  302.       if(UpdateFile2.size())
    7 q* v, M* a) |6 V
  303.       {
    4 Z$ |: i( H3 M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 Z1 b' N5 s- K7 a
  305.         {
    ; v7 e4 o9 u- z% Y
  306.           file=(*p).second;- h' J6 r4 o* b1 u! d, _& y
  307.           free(file);
    , J9 R5 W5 S. C& y
  308.         }- g2 Z% a, P7 \
  309.         UpdateFile2.clear();+ _2 u* I7 m& }1 a
  310.         UpdateList2.clear();
    7 l# V9 ^" a& p+ k: J! S, H& b
  311.       }' `' n0 R7 H2 ^+ ~0 ]+ R6 {
  312.       if(UpdateFile1.size())
    , G! s& w/ c9 d, e: Z5 h( }, S1 H
  313.       {
    6 T9 r+ D2 u! |8 E  D" i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) ]4 z7 }" \. d% w6 t3 f+ M1 L* L
  315.         {
    : r% w% Z. p  q& Z9 ]3 x8 }
  316.           file=(*p).second;
    % O3 t' I" @( D( y7 B# V1 j, Y  ?
  317.           free(file);5 j1 N8 e( Z9 ?2 O( L
  318.         }
    6 R( w+ d# K8 [" M; a& m
  319.         UpdateFile1.clear();7 Q5 p5 m7 T. W+ M+ J
  320.         UpdateList1.clear();& V  b, \, X/ }6 V' S: k' t
  321.       }0 i7 v+ C# x" c, o8 p1 G3 X5 s
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));6 P/ h. o- Q, c8 M
  323.     }
    * E7 K! P: t) y6 E2 u
  324.   }: z3 \9 a5 D: d8 T' i. r; I+ M
  325.   return FALSE;
    6 I& |/ ]* {* X3 K
  326. }
    2 T! W- j. D* A2 m

  327. ) e: z3 M- A( n+ \7 Z
  328. void CRevAppApp::ClearAll(void). D4 `* C$ F; m% C( Q8 ?( o( B& c
  329. {9 O* x* @3 ^$ S5 f1 g8 y: S3 a
  330.   LPUPDATEFILE file;
    # d  ], _. V/ g; o5 p
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 t- t% R4 f5 H" Z& [4 g  Q

  332. 0 x7 C5 m- m" Z1 W
  333.   if(UpdateLocal.size())/ Q" M! X6 a7 c" e0 |
  334.   {/ k9 G) x/ ~. E* c  a; n
  335.     UpdateLocal.clear();
      K  U) d5 W3 J, {9 v7 q$ q
  336.   }0 k+ L$ P+ n1 I; \' u1 j9 @; G" ^
  337.   if(UpdateFile3.size())
    ( x7 `/ T: d4 |7 `4 l! C
  338.   {
    % P8 b' ~8 }& @! k. a
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' o4 Z6 o  }. U) K
  340.     {7 }* z, ]! `) W% }& A: M
  341.       file=(*p).second;  \0 ^- ^, ?% L; `, M$ J
  342.       free(file);
    ' @" `) U( j2 _
  343.     }$ u' v' n& ?; r# [# B# U7 u
  344.     UpdateFile3.clear();
    . h: a8 R/ c& @: W3 H4 \7 ^
  345.     UpdateList3.clear();; B: u+ T+ m, h$ k* L% s
  346.   }# g, j, ?7 a* f% b: M* n$ H
  347.   if(UpdateFile2.size())
    " E* G' B4 ^3 A
  348.   {
    4 }* e, S% z. }% ?  N% Q
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ l* h, g) g1 D( o' E  ^0 N
  350.     {# {* G- p/ d! g! g$ L0 U
  351.       file=(*p).second;. ~8 ?; L; B3 Z$ t+ |! ~7 S, S
  352.       free(file);, V6 \: x2 H% L3 B
  353.     }
    * A0 B7 R3 ^2 O* @5 F
  354.     UpdateFile2.clear();7 r/ y3 W8 r$ y: \
  355.     UpdateList2.clear();
    3 v! P( E  Y: n9 s4 z! t
  356.   }2 U. j& D' u' Y. j, T1 j6 ~& ]8 ~! v
  357.   if(UpdateFile1.size())
    - j  \' _9 q) S; O
  358.   {
    7 E4 ~$ Y; q7 e+ F6 n6 L, W  W2 w
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      e, j0 F9 i2 q) b$ Q' @! C9 A
  360.     {5 M* Q7 |# }+ \3 d6 T  k( W0 w& w
  361.       file=(*p).second;
    : `$ K$ w( M( j, U: g8 N; k5 G
  362.       free(file);8 \  H* f4 L+ Y! }4 p% \6 l# Q
  363.     }
    " q: a& j+ M$ m7 V/ \
  364.     UpdateFile1.clear();
    ' w* x2 h1 R4 @8 S
  365.     UpdateList1.clear();
    2 o) V' B, |1 o4 }; R9 l9 t( a) X) d
  366.   }( y8 P' m. Q: A6 H% F4 o
  367. }  
    # G# X3 h; t4 a) A
  368.   3 |: R0 R: ]0 Y
  369. BOOL CRevAppApp::CheckLocalVersion(void)) ]& Y4 i0 N; w; w' E2 S5 O& F
  370. {
    6 d! M  f5 i' z
  371.   int c;; i* K' I% o+ ~4 q0 e4 B& i
  372.   LPUPDATEFILE file1,file2;  a8 M  g" \* R
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;6 Q( s7 p  S& u4 A2 _' ~9 |1 |
  374.   std::list<CString>::iterator l;
    8 z5 n! I: q5 {1 S$ k

  375. 5 ^) X) K# k4 g, ^1 }2 b
  376.   UpdateLocal.clear();( N' g: R5 c6 y: f# e& n% ]. J1 o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    0 X% N1 l5 @* y2 S5 X
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    1 t- z- E0 P: ^
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);% v" d4 R8 q6 [
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    # o' q9 M) m% }  t+ I
  381.   if(UpdateFile3.size())! t  L5 M8 s, \- D: ?
  382.   {0 k) r8 e; k7 _: [
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)  e5 p* ]" x7 Q3 @6 C9 q
  384.     {4 ?% P8 X2 E7 _9 l! d
  385.       file2=(LPUPDATEFILE)(*i).second;. o8 H- d0 G0 G7 @
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " {8 z# j% d) p; N: N" \
  387.       {3 m8 J* \3 N% ?' R. C9 l
  388.         file1=(LPUPDATEFILE)(*p).second;
    & [+ Y1 E7 Q# j! g. D  e+ C7 y
  389.         file1->vers=file2->vers;- _  C/ f! _1 i7 Y5 j; T& M3 V3 o5 h
  390.       }
    - W) k/ b' a* W" M% i) k7 p
  391.       else
    " g4 n' _- J7 |7 S2 `  {
  392.       {
    / `  J# j3 |( J' a" q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 n- P. X, K7 c
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    * I8 F9 k6 Y, ?& q) n
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));" z0 k, L* i$ S
  396.       }* A, V. f$ Y' s9 p) i
  397.     }0 y1 ^4 Q8 j  Y. K
  398.   }/ D3 v9 N$ b2 g$ }
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% z( z' w4 I/ s
  400.   {
    7 M* s* d2 m2 X; u8 i- W& k0 J
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())+ X+ m$ h, i3 d
  402.     {
    $ Y. i/ {0 M9 r0 j% [
  403.       file2=(LPUPDATEFILE)(*i).second;( s, i3 A4 G  Z( m
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + t! i; b6 e  y5 j- M* m6 Q* M
  405.       {
    1 J) f3 w& w, |- N2 Q# z2 L% b2 S
  406.         file1=(LPUPDATEFILE)(*p).second;$ X0 C( }- Y9 ?# k
  407.         if(file1->vers!=file2->vers)
    ' V# |* u- _$ y+ N$ `( p# s7 i6 }
  408.         {5 z+ z5 X0 f/ T- e( e% I
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & \- y; B7 v# s
  410.           c++;
    , a6 O, r4 R% Z+ c( b* s0 A
  411.         }* J; K$ P3 M% K( e0 Z
  412.       }4 a2 A# Z# Q$ H' ]" V9 v$ y3 d( |1 {
  413.       else
    * c$ L- q# P' d' w# ^3 f; @+ ?
  414.       {
    8 c# @) }$ C" r
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " T6 b" s5 `0 h' L
  416.         c++;/ C! z7 ?& A$ S0 J5 e: F' V) c: }
  417.       }
    % G$ G( n1 V$ W" H
  418.     }& U4 t* X& j9 m9 o
  419.   }
    " P, P8 l9 \) I7 \, ?5 {
  420.   unlink(".\\DownLoad\\update.txt");
    : V4 K6 v) y0 r! Z
  421.   if(UpdateLocal.size()) return TRUE;' r: q  V4 K+ V
  422.   else                   return FALSE;7 _' z4 W$ ]; b6 `
  423. }! Q; U1 C8 E5 U8 i2 y
  424. ( |$ F) G" H$ O. \9 _
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    + m# s0 G1 t3 m( J, x9 d, K
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"6 n: h. D! T! p" p+ m1 q1 S
  427. 0 ?7 u; V0 p/ |0 o1 }  d+ {( N. W
  428. ' `; c; C( m- l+ c1 K/ ^, W! L1 f
  429. : T2 M1 \# X6 O" L$ M$ H
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)0 k- \: O( u) b% O" G
  431. {
    2 n7 U9 e, |5 _$ k
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    6 @- V* b. X1 {8 p, r  K3 Y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ! @- R% m; T8 \$ x( @* A
  434.   {
      ~; @0 \# k9 b/ g0 f$ Z
  435.     char szLanguage[50];
    & ?* W% h1 N6 T! r
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 [7 l! @3 x. n$ p+ z5 U
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 N% N7 G7 R3 O. r
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ y: |) S) H% [5 |# W; {2 u( p
  439.     else                                   m_iLanguage=ENGLISH;2 h, E" t! P% l+ m5 M
  440.     char szRegister[100];1 t! G% l1 B3 \, L3 O( G
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . A. k% T7 |' Y3 K+ e
  442.     strRegsName=szRegister;
    , s. I. K* Z; ~0 J" ?
  443.     char szPatchURL[100];
    2 R4 k) l2 _  `: w: S# j
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" V0 w3 Y% z3 U+ M
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) x+ c+ I  E9 ~7 ^& Z& i
  446.   }
    8 z* x6 o- p% ^! J. P
  447.   else
    8 u3 ~6 Z/ c3 E7 Q
  448.   {6 j( L1 Q1 ~2 T4 `* O3 {' J
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( Z7 ?0 j9 x/ Q" n6 Y' O& C0 p) h
  450.     strRegsName=DEFAULT_REG_URL;
    # Q; A8 \# |6 J/ M# s7 c# ^
  451.   }
    5 P7 \( J# d" M3 V% d1 P/ C& h8 d- N& o
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! o! [5 ]" g( [% |1 ]+ I
  453.   {
    - n# t6 s$ z: ?( ~$ O* m6 j) k6 b
  454.     char szIP[50];
    % w. {/ E+ B2 N3 p
  455.     char szDIR[300];. v! @& v7 Y+ J- |( x
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))1 Z. K( `. t2 T+ c
  457.     {: |" ~/ d! O* V- M7 f; I( ]" q' T
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    2 E% D: v" ?6 v# E
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    & s, [# B% R% ?8 N
  460.       strHostName=szIP;
    + U& H- e, C2 p6 }! p  ?. u
  461.       strHostPath.Format("/%s",szDIR);
    5 M  q/ A; b. _" {# X8 N5 s
  462.     }
    8 j. I* |/ U6 V
  463.     else
    . m, B! D( S3 m
  464.     {5 \4 L6 N" x+ L2 p
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' d4 L$ V: I& Q. x; S, r+ U+ q
  466.       {
    8 J& F2 [' _+ Q. n, o0 j1 R+ j4 s! C
  467.         char szLanguage[50];
    2 p* p5 o$ o. z  U
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( N$ R& E, p; s0 |! e
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 f+ G; N2 p% A+ R
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ p/ G7 W  a9 H3 s4 W9 Z
  471.         else                                   m_iLanguage=ENGLISH;4 T, ?( H, l/ ?( y4 \2 P+ j
  472.         char szRegister[100];
    & I/ I& S" x4 |; Q
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' F! u: ^0 F5 ~$ O4 d. @; N- @5 h( Z
  474.         strRegsName=szRegister;4 Q6 P2 N, y3 L) ?( p# {
  475.         char szPatchURL[100];
      G& w* x# i6 |7 U1 h
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 N% P1 J7 y$ v  |: G2 ~4 G( w7 Q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 [4 f. k1 N0 ^. T# m
  478.       }
    6 C5 Z6 U, L5 g- u* G6 z7 Y1 N
  479.       else1 Y$ |2 O  c5 U3 e- P4 z+ n; o
  480.       {
    6 G, A! n- X& |. B- _1 S
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( h' V+ T2 S! F  c, K* I$ a7 q
  482.         strRegsName=DEFAULT_REG_URL;& T) {4 ]- o6 |4 i; e. d
  483.       }
    / L8 M; w! ~- o0 c) C
  484.     }7 `  e3 j& k) a, s  T/ ]
  485.   }  A7 v1 F) I9 ~( R/ M4 {
  486.   return true;  d1 ^/ D; D: F: J9 J/ r9 e
  487. }
    $ q7 _( H2 l9 |. n/ D

  488. 6 d5 K  A: J! `$ `
  489. #include ".\ZLib\unzip.h"
    # s8 X/ i( i1 t$ l7 `6 J* ?
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);% `0 o1 m( e/ [  d. T) k3 d( I
  491. /////////////////////////////////////////////////////////////////////////////8 n$ _# E  t- Z4 c# T! m( e/ s
  492. // CRevAppApp initialization
    0 b% b, H  E2 w
  493. . N* a8 H- @) S# ^. J0 R2 _* e
  494. BOOL CRevAppApp::InitInstance()
    7 B- Y- \, o9 S, n  N
  495. {
    5 z# k1 l* @6 k4 @
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];. J6 H9 N2 x3 U

  497. - C& m9 ~9 R& d8 ]* j: T8 ?# ~
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ) e; b2 L0 k: I& P7 L( M" O
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))- K; ^, r: Q0 o, f0 Q0 s- [4 X0 R
  500.   {
    % I/ n) h) y6 H/ V, U2 U* U
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");4 ?+ A3 m" _8 M: w% e. Y' t* Y8 s
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    1 f( }2 r' {! U
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    + K" R7 m0 h+ z+ p0 S; f6 I
  504.     {
    4 L; M# z( t! L
  505.       strcpy(szPath,szPathTarget);5 Z  A5 Y, v' q* k! ?% \+ h6 p
  506.       SetCurrentDirectory(szPath);: W, m4 q) \+ x, l% ?! T
  507.     }
    9 M! j: O; S' X. C" d+ u; s
  508.   }1 [% {& a0 K7 c! {
  509. #ifdef _DEBUG
    , Z: v& c  |9 F' n
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 L8 n! C  [: e$ @9 m) b
  511. #else4 e$ I1 r" G% i
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% q9 `* |! p3 |6 V9 r6 K; X" ]
  513. #endif
    " z8 d6 G: `( i. u$ M' h( P7 H
  514.   {
    4 Z$ v+ L) u! t1 Y
  515.     char tempFileName[MAX_PATH];
    3 a8 Z5 |( {/ F+ D1 G
  516.     strcpy(tempFileName,szPathSource);
    , _) c" w6 D5 n& [3 w7 T) E/ G
  517.     tempFileName[strlen(szPathSource)-12]=0;: k& G) |. |5 k8 q& {2 v! K& G
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    8 |) |" X! h: {2 ?2 i
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% r* C2 o1 W, g& M
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);0 P! h7 H( O% |$ P4 v3 d$ S1 z& J
  521.     return TRUE;
    # @- f# y. ~" }5 f  G. p( p
  522.   }/ m0 d5 a7 n4 n! R  h9 _
  523.   // Nuke 0118: Delete run.exe& V) P$ ]2 U3 z; u. x( S
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );: E9 [, y, R0 M+ Y8 M6 @  ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ) c! e* L* ~; Z: _2 D. i
  526.   if(!ReadCfgFile("Config.ini"))
    5 Y0 D; j3 M) w7 m' t" Y, V
  527.   {
    6 j2 S. z+ O) B) a' q4 _% }
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    + k% f  d9 v( N
  529.     return TRUE;, F: @1 o( T, M' v8 Z& r
  530.   }$ {7 s. ^8 \6 R/ \5 `
  531.   HANDLE mutex;9 m/ m. o. }! {. M" [
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    $ d4 s7 E- X5 c) ?
  533.   {
    3 g% F+ Z' B, z$ A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)" n. _# V6 F6 x
  535.     {
    0 r. M7 F$ u9 L, g3 g3 Z0 L
  536.       CloseHandle(mutex);: q  g1 O# i/ N1 A" r: h: `. p
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    / V! P) a6 G0 j8 u) R" Q
  538.       return TRUE;
    " D$ ^% z. r' D, B. y- i
  539.     }8 K# C/ ?) e1 J8 M* S9 l
  540.   }  - H9 E9 M9 {/ |* e! g& N8 Z) ~
  541.   CloseHandle(mutex);5 F' ]/ U; t8 M! Z; {1 }% b
  542. ) l7 \( T4 q) q$ L$ r- Y5 l. o" a
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);7 i* a% p' w2 n; k, U

  544. 2 U! p; D. y' Y9 g
  545.         AfxEnableControlContainer();8 \3 H6 e9 x- m# l5 E
  546. ' M$ }/ V& w- V8 M( ^
  547.   bCanUpdate=FALSE;$ Q) n4 I+ {) x4 u+ s
  548.   dwStartUpSteps=1;' W1 j  Q3 v- p  }
  549.   dwProgramState=AP_NOTHING;# b: V# B' c& F& A" f; z% e8 w, U" C

  550. 2 ]" I5 S# Y+ n! z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);) G* a  n6 B' |- y4 z% _

  552.   W( y1 E* d& n
  553.         // Standard initialization+ d: A5 U. G; h; I9 l' S% p$ Z
  554.         // If you are not using these features and wish to reduce the size
    / }0 I7 S# g8 V) {$ O. t* S
  555.         //  of your final executable, you should remove from the following
    * [# o" U- ]6 p! i
  556.         //  the specific initialization routines you do not need.# U. E3 o) X' F0 K. w1 c7 U

  557. # W& R% v. {$ b5 p3 C5 B  c
  558. #ifdef _AFXDLL
    ! G4 d- ~( M8 {! o
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    8 }' l9 l. a6 q0 p( X8 C9 a+ n
  560. #else
    3 [1 V. I: q% R4 z* B
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    # u, ]3 O3 u+ N$ [
  562. #endif+ _- Q+ @7 a4 V4 z$ x, j
  563. + Z# V6 T& \) v" e( I0 A8 A- `
  564.   dlg=new CRevAppDlg;1 ~* y9 d* M1 b7 ^
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 ~! a8 O8 R2 o$ ?% ^7 ]
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    . s, S& e4 @- H0 i7 I" z
  567.   m_pMainWnd=dlg;5 O' m; x9 Y! K& x; H4 h2 a0 s9 X& g

  568.   L! J' v+ l) \4 ]2 b' ?" o
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);* ]" }& h  W: x( w
  570. 1 N8 _# C/ T2 K) |, t
  571. //  GdiplusStartupInput gdiplusStartupInput;
    $ k$ K  d0 l& ~1 S6 z* i
  572. //  ULONG_PTR gdiplusToken;4 f4 ^* h, X' T2 v. a
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);% w6 q3 z2 {; Q6 ?1 p
  574. ! v# x; Y# T3 B9 z# R4 t
  575. //        CRevAppDlg dlg;
    - z, ]$ w5 B1 Q: V. e" r
  576. //        int nResponse = dlg.DoModal();+ @4 X0 O& L5 D/ `
  577. //        if (nResponse == IDOK)
    ! n- D2 u2 u. `
  578. //        {
    6 F7 M4 `4 m$ ]
  579. //                // TODO: Place code here to handle when the dialog is: s+ s2 f' w% U7 Q$ g7 p
  580. //                //  dismissed with OK* w6 j) Q  S" M$ C6 ]3 @0 y  s: P% C
  581. //        }
    5 J1 m0 l& E7 \* `: W5 Z6 f: D
  582. //        else if (nResponse == IDCANCEL)' I2 i7 `6 w; C* x
  583. //        {
    % e2 F& X- W8 n- G9 ~, q, \6 a
  584. //                // TODO: Place code here to handle when the dialog is
    2 Y; ~8 @( V, M" p" {; ~2 E- \
  585. //                //  dismissed with Cancel' h: `1 ~, Z2 ~
  586. //        }2 ~* p- R1 E' E/ l) f; m

  587. 0 a5 G# J3 Z0 e) V/ w5 b. f
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    5 d, h! o, e% X! |
  589.         //  application, rather than start the application's message pump.: E! O) G& Y& E5 V! `2 v1 ~+ A0 c
  590.         return TRUE;. C- Q2 a8 L8 b( a: l% ]5 e
  591. }7 _) S/ Y& x, ]
  592. 7 ?% T9 `  ?( }: |" h3 u
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ( N: \, Y$ t0 j5 z
  594. {( t- x: @/ F5 K% d& |4 o) s% x
  595.   int i;% c; @0 x$ U5 r" C0 w
  596.   char *szRet;
    2 ]1 i$ M4 b3 J, e

  597. - I, w% z' P# B& Z; N. g8 a
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # K1 n! L: M& C8 }  v4 [3 C
  599.   if(sztoken)
    . T7 n" E, w0 a4 ?2 I; K
  600.   {; ]. N  a+ ]$ _0 Z8 p
  601.     szRet=&sztoken[itoken];8 \9 i8 ~% Y8 V/ x6 M
  602.     while(sztoken[itoken])4 H' q  |" X+ M( V, k9 B: o
  603.     {1 |' ?2 h3 C( E: n8 s1 g6 j
  604.       for(i=0;i<(int)strlen(token);i++)0 M: x& T3 c# l4 S  ^, G6 i
  605.       {
    4 U' l5 h" ^& b
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])5 e( x& X1 y- K! u4 ]! A( @
  607.         {1 @/ @  ?5 f, O+ D
  608.           sztoken[itoken++]=0;
    : c2 N/ ^' N; H/ V  p- ^4 x
  609.           sztoken[itoken++]=0;
    5 f3 h0 o$ K, r- `% X
  610.           return szRet;! D! q  S5 P. I; q; w% ^8 ]0 T" O( O
  611.         }; R. k9 L. ?* I7 m; g
  612.       }6 L8 G( P  d( ], t: S
  613.       itoken++;8 {2 W. a, y+ E9 m) E: h- R
  614.     }
    + X/ C/ j! n( H! e2 j
  615.   }
    8 h; [, Z8 X% n0 Q
  616.   return NULL;
    , p* T  _" w% i: s
  617. }
    " V+ r" S# U$ Y' G2 C" ?

  618. 4 f, o: J3 e9 c+ i
  619. void ProcessProc(long Total,long Current)
    % z& t8 p1 i5 T
  620. {
    : ]( L) z# ?3 Q2 U& @8 ?
  621.         MSG msg;2 ]2 e) t- d' o  B" g; }& C
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    4 C# w5 f% U3 Y  U% r  A8 U* G) D  _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    2 ~& m6 m4 D" \, f$ O; ^
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    2 j/ U4 }( O9 J/ {6 G2 g
  625.         {
    ' [' v  x; V5 n! d
  626.                 if(!GetMessage(&msg,NULL,0,0))
    " L( r8 i2 w' }8 R5 o* w2 S4 f
  627.                 {
    + G6 J$ E4 r# o  w% C* F8 O2 \
  628.                         return;9 S4 {- I8 ^; j7 R8 \
  629.                 }
    0 A. p: k4 ^/ Y/ Q
  630.                 TranslateMessage(&msg);
    + |- n- Q+ d  J* B
  631.                 DispatchMessage(&msg);8 b# H3 |9 J6 V1 X: Y7 J
  632.         }        % f& F5 I) ]7 c
  633. }: V: q! e* I& z. w6 g
  634. ! k% Z) O, t3 B
  635. BOOL bFirstChar=TRUE;% c) @/ P9 N1 g1 }% G1 u& `

  636. $ [2 |$ G4 B& b7 h% j
  637. BOOL CRevAppApp::OnIdle(LONG lCount)& p/ ~( c4 m- I. U7 r4 U8 T. b
  638. {" ?, S' U9 b3 Q' T( |/ p: P
  639.         // TODO: Add your specialized code here and/or call the base class
    " r6 Q( F/ V9 g/ `) e3 L8 v
  640.   switch(dwProgramState)9 ~" I4 O) N$ v3 q; S
  641.   {
    0 v7 O* f4 A  D3 S) Q. {
  642.   case AP_NOTHING:' l" T8 l7 x* n. b& ~; O
  643.     switch(dwStartUpSteps): S5 W% B" o4 F
  644.     {
    5 B+ A- L  s7 V2 m4 V: \0 W) r
  645.     case 1:
    1 V9 j+ y6 d9 H/ G' Y, g; @
  646.       {
    1 w' c' m0 k* \3 Y
  647.         int i;
    3 n& L* J2 N+ k; p/ T) A* u. Q
  648.         CDC *pCDC=dlg->GetDC();& j$ L1 v! L! i
  649.         HDC hdcwnd=pCDC->m_hDC;6 k' V5 d2 c. |! B* l" ~
  650. //        Graphics graphics(hdcwnd);
    4 C$ G/ Z9 D7 [  p5 }; e
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");& }: x6 |. Y, g% _& {
  652. //        INT iWidth=bitmap.GetWidth();2 S3 u* H' L. w
  653. //        INT iHeight=bitmap.GetHeight();9 M: l) E" E5 A. Y
  654. //        Color color,colorTemp;+ @! `& {0 `" d1 y/ A; @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)! Z; |7 i% m8 g& X( [4 M
  656. //        {4 T) D( F! A' l  f5 _9 a1 ?" T
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    7 C& _* i6 ?# y7 I
  658. //          {
    6 `9 f" }" o/ L; l  x
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    8 H: V& z8 Y- F6 A% Y
  660. //            colorTemp.SetValue(color.MakeARGB(
    . T# j. f4 D- A; a8 K9 o7 b  ^
  661. //              (BYTE)(255*iColumn/iWidth),
    4 D4 K$ C) ~! R0 w; m# j" m
  662. //              color.GetRed(),' j, G: R" N8 ]) q4 B! K
  663. //              color.GetGreen(),
    ( |9 ]% n7 j+ q2 E; _5 |/ I
  664. //              color.GetBlue()));
    5 E. i+ `' L5 Q; ]! x" [8 C/ i
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
      u9 ^5 n% k, E/ d; [
  666. //          }
    4 b; m4 P% ~2 t+ {- l1 a
  667. //        }
    . _& P0 X- E. i. s
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    1 s! c9 X/ e; H4 W# q4 l* w7 i
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 B2 q8 i9 X* z8 Y/ l
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    / }% D1 [  b  G3 x3 v% Z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , f! M# O1 u: Z: ~& a
  672.         for(i=0;i<240;i+=8)
    * m$ F( h4 y0 _# h- w$ A1 [: j
  673.         {
    : H8 n5 G; R* f8 G5 u; k; |+ K0 r
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 }4 Y4 z( e( ], L
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& @' B; k. l& S& E4 m9 [
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);2 w, B# q$ r0 s- ~; Y- f$ a
  677.           Sleep(33);' s+ z2 y! I$ g7 o9 ?
  678.         }
    ; ]7 c5 O6 C4 b* Z/ m) Q3 k
  679.         Sleep(1000);
    % r3 n  {2 y& n
  680.         for(i=240;i>0;i-=8)
    + a- U4 w9 [% M6 S
  681.         {
    * G1 G) W. C. Q; `
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ( U+ ?4 U6 e% Y/ R6 e
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 V! `* I3 i0 _
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' T0 V9 J. D, B7 E" {% x
  685.           Sleep(33);
    - q1 w4 [) g5 s% t" S  _) M
  686.         }! a; R( K2 b: V/ p% |- `; Z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    " ]. k/ @4 H: B/ Q3 j! }
  688.         dlg->ReleaseDC(pCDC);- b5 C/ U6 I4 ]4 X, P1 ^. E
  689.         DeleteDC(hdctar);
    ! Z/ E. X8 }- z# p( a9 `
  690.         DeleteDC(hdcsrc);" Y1 x; s- k2 R- }0 x
  691.         DeleteDC(hdcorg);1 \* f( b% y0 h& N- S
  692.       }
    ( q7 D8 e8 X) f7 }6 J% V
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);+ p- i$ p4 Q/ |' u! L# d6 l8 V. h
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    " \, G6 e" r! ^7 L4 _0 J+ V
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");9 V6 B* [  [# p7 j% ^7 W
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");0 P  v7 p/ F0 @9 i
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 z1 Q' ~: t! ^( }& n
  698.       if(!Dn.Connected())
      w6 [1 F/ a2 _8 G
  699.       {
    9 _8 s, h7 D3 p% |: m+ [
  700.         dwTotalFiles=1;
    - Q2 b$ k' p( G! Q# s, L% s9 u
  701.         dwDownLoaded=0;
    - g+ v9 B9 c+ C) ?5 t9 }
  702.         bSilentStep=TRUE;$ z" U) n+ e" t1 d+ ]  k
  703.         bCompressed=FALSE;
    9 V1 U4 G) ?& |% j# ~( F
  704.         strExtLocal.Empty();
    $ N2 g& z5 h$ f, u. t6 E5 l9 e& d
  705.         strFullName="readme.txt";
    8 h! A9 {- m- g% J( O
  706.         dwProgramState=AP_CONNECT;
    : s, W8 N! u  _9 B
  707.       }" C0 y. y0 z7 N! @! C+ Z
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    , ]* k, u8 |6 j. A7 T, ^$ J# s
  709.       dwStartUpSteps=2;
    6 C6 a: E, i) V
  710.       break;" U% R) f5 s/ k7 @! X* [
  711.     case 2:0 B1 N: u/ Q" N7 S
  712.       {4 @$ T' Z- m( X7 B
  713.         int iEOF;, b, S9 ~: Q8 a5 ?. U2 K
  714.         FILE *fp;* R6 L* i. |  ~0 f. O- ?
  715.         char szString[512];
    9 s5 Q2 D9 t) n3 ^
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");4 e8 j' F1 P& W- \
  717.         if(fp)& @, @9 n) Z0 q/ ]/ ]  h, w% P( p
  718.         {; e8 {, _8 p! |8 h" R
  719.           do
    # K' Y4 e& k3 n( H9 f
  720.           {2 L" b, K; R- Z% |
  721.             iEOF=fscanf(fp,"%s",szString);! c! s! ~% w) t. R
  722.             if(strlen(szString))
    / K0 t- p  P2 W+ L4 w/ F
  723.             {0 s; j! k( x4 S/ |. K0 @! e$ K
  724.               if(bFirstChar)
    0 }6 g- k/ C4 @7 q$ [* j
  725.               {
    $ C+ B' h5 S6 g$ c. N! |0 A( a
  726.                 bFirstChar=FALSE;9 ^* s# I4 D4 J6 Q) j$ e# Z  d( p
  727.                 bConnectIsBig5=FALSE;
    0 Z8 H+ _+ @1 H* ]6 i
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    . U1 u! J. L. O
  729.               }
    " u& Y5 ^6 `9 y1 a
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ; e7 [0 o  u  X8 R1 g
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    & x; d, L3 }8 ?- K$ w+ F5 [
  732.               dlg->m_ListText.AddString(szString);) }* d, ?+ l, R8 M: L+ O- X; Q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 e# r+ l' \: S
  734.               *szString=0;
    - U5 B0 {# X4 W: n% }( G
  735.             }
    / r7 m7 X/ {( h. S
  736.           } while(iEOF!=EOF);3 d' r+ H/ ?6 d; X& X: \. H
  737.           fclose(fp);$ b9 Z1 y* N2 y' C) h
  738.           unlink(".\\DownLoad\\readme.txt");
    ; O. c0 h9 \4 d( [: o2 r( ?/ s
  739.           dwStartUpSteps=3;
    * K% X0 w- V5 _  ?8 y/ k9 v' }4 V
  740.         }
    ( B! }4 x/ c& w+ L; o6 D2 b
  741.       }9 k, c, _1 Y. S! @  y% s7 u
  742.       break;
    9 ^6 K3 `# p% T
  743.     case 3:, W9 b  V8 M% H" W# P, R) h  L) q
  744.       if(!Dn.Connected())
    ' _2 b/ P4 d# z6 A2 m. D0 ?" M
  745.       {, e* ]; G% {6 v. K1 c, ~% T' {
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ) D& a" z* |0 W# |. \6 W! f3 W
  747.         dwTotalFiles=1;( P  K8 u& I1 L8 u0 Q
  748.         dwDownLoaded=0;- b4 W9 O" M" [8 u
  749.         bSilentStep=TRUE;
    . T% \! i, S7 t3 F! p
  750.         bCompressed=FALSE;
    7 f) v8 M; T) @* l8 e* J8 ~
  751.         strExtLocal.Empty();3 B) X2 D# E9 n3 j% D4 g, d, s  c/ d& u
  752.         strFullName="checkversion.txt";) ]# y$ @& q7 i, [% C5 B5 L
  753.         dwProgramState=AP_CONNECT;7 E4 n9 N: }- ^) P, H* c/ d
  754.       }7 X" A: S, N2 ]6 g
  755.       dwStartUpSteps=4;1 p4 v- U0 O2 n$ s: p0 q
  756.       break;
    " X% ?( a8 ~1 [! n7 ^  B2 f+ P
  757.     case 4:7 o6 e9 w7 y* X4 s# a* X
  758.       {
    1 ?: t$ A6 c9 `# l" a
  759.         FILE *fp;
    ' P! q7 ?9 M* A- C; {$ A. M
  760.         char szString1[128];) |; }" S9 z) G9 T
  761.         char szString2[128];, t6 @) w/ ^3 _# n' X3 n
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");6 S: R* ~: L. g  b
  763.         if(fp): y& Z0 m: m9 U
  764.         {
    # G7 B, ]( P2 ?8 e6 g  O1 x
  765.           fscanf(fp,"%s",szString1);9 W( a! E% O. ~; ]5 u8 t
  766.           fclose(fp);
    * f& p; J8 |) r0 |
  767.           fCheckVersion=atof(szString1);
    1 A9 e+ P# w/ \) u- _
  768.           fp=fopen(".\\checkversion.dat","r");
    , T1 {( Q9 t1 u: r  l
  769.           if(fp); k- N7 o5 H2 |" F" w
  770.           {
    1 q# ?- r$ d8 y$ A/ }1 o: p
  771.             fscanf(fp,"%s",szString2);! ]" F2 R8 s" Z- J" B0 H1 a
  772.             fclose(fp);
    , F# F6 ~6 {3 {8 Q4 M
  773.             if(atof(szString1)!=atof(szString2))7 W# Y% Z* I- g/ {+ V
  774.             {
    ! ]9 R1 f6 f( w2 M  O7 h
  775.               if(!Dn.Connected())
    0 n7 d- `/ g, M7 V/ i
  776.               {
    8 P2 X  K5 Z; e5 g# A  E' ]
  777.                 bFirstUpdate=TRUE;
    $ @5 c& |" g- o' }' g
  778.                 dwTotalFiles=1;
    2 Z6 R9 P. ]: c; Q+ d
  779.                 dwDownLoaded=0;
    / k/ r  [' R- R; e' }
  780.                 bSilentStep=FALSE;
    & F3 e7 I# l  ], N
  781.                 bCompressed=TRUE;
    # P+ ?8 A: C+ N- Z/ x9 k& G
  782.                 strExtLocal=".\\DownLoad\";
    6 K' L# q# P$ w5 G' j3 U, }
  783.                 strFullName="update.txt";
    $ D% P, M7 Z/ {
  784.                 dwProgramState=AP_CONNECT;
    5 e9 U& |& i6 z6 C9 A* Z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & s4 M' q+ Z' @2 ?8 h
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' M4 S3 ^4 X, A
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");! h+ e+ k* r% B  _- n2 j( @
  788. ( d' h0 ?: L9 Y1 E: B
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 U& R& R( o, T: k0 R# M
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ; p- b& u. d5 {# w" }! C4 m1 x1 u$ b4 A
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)0 s6 Q2 n( P1 e8 @% p
  792.                 {
    6 _3 f5 Y6 U) ^4 }
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    $ l1 |0 _% D3 @, R3 }
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");) i/ Y( b9 v8 Z  B: Q" I
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");  R. ~% h3 H; \8 Y1 J$ `
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - P% J" B5 z( {7 t; A0 N0 N$ v

  797. ) U0 M. A5 b# z" v8 x+ `' K9 O  H0 K1 p; p
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 K" _4 x+ e) b, T# C" e# K
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 \% V7 c+ c# X, _
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");( A) B9 z0 t( m6 Z/ w
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ A) B  N5 h! w5 B) K
  802.                 }% J# `! @4 ?7 ^) C6 `0 T
  803.                 dwStartUpSteps=5;) ^. t/ D' ^: v' U: p2 ^
  804.               }2 T. e2 U/ G8 a9 D) x/ o' C6 G
  805.             }
    . \$ ?/ P+ k- o8 j8 t+ i5 S- e" g
  806.             else
    " z6 Y# M: D3 _1 Z- s
  807.             {
    4 ^2 ^9 F, ^! V9 \
  808.               unlink(".\\DownLoad\\checkversion.txt");
    5 [" s/ A4 ~0 q5 W6 D. m
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : F+ i/ L* M* E" S
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; @2 e$ C' l2 D8 x) t: v
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" z) U4 a9 S/ G6 \: S
  812.   U0 {' Q2 d- L# Y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 n. I8 z* T/ W& ]% N
  814.               dwStartUpSteps=99;
    8 J1 `7 o" I  a" G1 R4 i2 ]
  815.               bFinishUpdated=TRUE;! Y  A' T+ `1 ]# C
  816.               bCanUpdate=TRUE;
    - W+ h$ l& G, p
  817.             }
    6 Z+ D8 }' W  X% `
  818.           }; P  }& n" Y7 z& ]+ t- l2 k5 \
  819.           else
    ' z7 t! T% M2 D2 z. H
  820.           {; r8 }8 G/ Q$ R4 }
  821.             if(!Dn.Connected())* o+ {: z- H4 l. y+ I) N& T
  822.             {
    5 D9 o& A8 m- b: s6 X! `% S
  823.               bFirstUpdate=TRUE;$ Y/ {  C* i- M# V7 f) n
  824.               dwTotalFiles=1;
    8 Z, x1 I. c7 `' I+ k2 _/ C
  825.               dwDownLoaded=0;
    9 w2 O- y% @, T
  826.               bSilentStep=FALSE;* \4 v: N) d# G: D2 z8 @
  827.               bCompressed=TRUE;* V- V2 `* x8 u
  828.               strExtLocal=".\\DownLoad\";, _; I3 R3 e7 p/ _* Y9 j* ]7 U; \
  829.               strFullName="update.txt";  z5 K: I3 S" h8 j/ U9 I
  830.               dwProgramState=AP_CONNECT;3 |& Z& R3 X: r8 Y3 `) {* [" s$ m
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 x0 B, \0 I1 J5 C8 U
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ G1 o. u6 n9 @1 P& o3 |  {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");2 S" Y, B$ p$ [/ N4 o
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 i* p( o; R  L! V7 c- E" O
  835.               unlink(".\\DownLoad\\checkversion.txt");9 c; c$ J# j( h  z8 \4 R
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)1 a" P$ h4 w8 N0 n4 t. T0 i
  837.               {; X' A" w; [6 H( U! j. c8 S
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");2 ~: T3 U. c: |/ m8 O0 b8 u- f  x  I
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");0 R4 ]( z9 M; \* E8 K, ^  m
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");5 G1 v  u6 j3 x  B( ^& Y3 D
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 n4 H+ z% b( J9 N% W
  842.                 2 P/ @/ _) u8 W+ ]9 g; w# j
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");6 c4 l0 c) b2 p/ o
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ( L* d, Y; l' S2 j" x
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    1 S) f9 x. S# _( o
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( h0 ^1 a# q- W/ `9 r3 f
  847.               }* v8 \! R' [1 c! |4 E' U. O
  848.               dwStartUpSteps=5;8 R) y+ G1 K  c; p# M6 A
  849.             }
    , L3 F6 C' @' |- ^
  850.           }
    1 Z6 y6 I4 ^& D' ?- _/ t
  851.         }: O) S7 P- h$ Z* S) ]
  852.         else
    9 m2 e  }+ r! U' _
  853.         {
    " }. }( W, s5 |- V& R
  854.           dwStartUpSteps=3;+ y" f7 \# O9 }
  855.         }/ [" p% F3 f+ P0 u: G! D3 [
  856.       }( a* }1 p4 `$ [0 Y8 T, o' h" X
  857.       break;7 ?: {- w4 r9 E2 y; {
  858.     case 5:: S# i+ z& I1 Y# Z) h
  859.       {
    ' A: W, D" u! J0 u" y4 Y; G- d
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    9 V/ t7 F/ J4 z
  861.         {9 `4 d* a( y9 |  O5 g
  862.           int opt_overwrite=1;& e/ S% a4 \& T2 B4 M
  863.           int opt_do_extract_withoutpath=0;8 g% @" Z+ D) f- u
  864.           unzFile uf=NULL;$ N# K9 t$ f/ F8 H6 Z
  865. ! Z5 u8 g. f0 }2 X' e
  866.           uf=unzOpen("Wsa.zip");* Y7 I$ U# ^/ }  w2 a3 w8 h: t' v0 A
  867.           if(uf)
    ) j  F$ `  Q9 `5 @" V+ {
  868.           {5 ]$ q' E7 z) C9 d+ f6 \$ p0 y9 f
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);, P2 B( x  u6 K. _
  870.             unzClose(uf);: g: s7 j2 a# t. k7 t
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    . f: T# Z' u" `7 V7 `
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");. ?; n3 _; D- k7 z/ b
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");" T( e$ T) r, V- |2 d, u- i1 t. s* {
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; e: J$ ?8 v5 F: g
  875.           }2 W( }9 F0 y$ \, \7 S2 \, M
  876.           DeleteFile("Wsa.zip" );
    , {; ?, W* X0 t- p) Z
  877.         }) j/ ]6 y3 s) j. I* t0 M

  878. 8 s3 ?0 v8 I1 P; B8 P& b" T, W
  879.         if(CheckLocalVersion())
    - w+ U% R/ g# J' }4 x
  880.         {
    . [( }: o; ~0 u- [! }
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    , Y& G  R; B0 m" _& \" Y
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");1 m+ B+ [2 V% y4 B# T
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");% h  m; K2 \, |9 [) j9 z( _
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 b; T1 m: z6 G
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);$ l! C  m, Y; Q' B
  886.           dwStartUpSteps=99;, h" D4 w) l" e- a+ c5 a
  887.         }3 w# t: O. o5 \6 V6 g
  888.         else
    / {! g' [7 p+ I! f
  889.         {% U0 j" L9 {, ]1 n
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' U3 A. I+ X3 j% z, b1 D
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");/ E" F2 u8 D% V: r0 a
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    7 I' k$ q1 p' W2 c8 A8 c

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

評分

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