找回密碼
 立即注册

CSUpdate.exe源代码

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

/ i% |1 t4 n, }% I* v9 T
  1. / RevApp.cpp : Defines the class behaviors for the application.
    5 m# N& I  R" W$ z# a
  2. //
      K9 g$ P  I+ @, v# o( S

  3. : C& T/ r) K  T5 Z
  4. #include "stdafx.h"
    ) f1 w+ b- U$ [$ a# |

  5. $ L) x: D& W6 U+ [! {* n6 k! W2 `4 N
  6. //#define UNICODE
    & B% y: Q( ^2 \' c* D, e2 d
  7. //#include <gdiplus.h>
    % r/ W) _& p! o3 s3 L0 G) f
  8. //using namespace Gdiplus;
    " b. R7 M6 s+ U. Y! L6 O
  9. 8 W. F( ]+ f, ]% `+ i. z* w5 E
  10. #include "RevApp.h": `3 ^5 K, i' c8 B# z3 O
  11. #include "RevAppDlg.h"2 F3 J8 N7 n8 R- i; p2 L5 B
  12. ' r2 r8 Q0 m7 R& ~1 ~
  13. #pragma warning(disable:4786)
    $ p8 @; S. B9 a( u8 d/ l. T
  14. #include <map>
    " @- Q5 `$ k! ]. H- u/ W6 |9 x! k
  15. #include <list>
    2 N* l  X2 `6 N0 N9 x
  16. #include <direct.h>
    ; e1 I4 ?! x+ ?3 E# G) u1 Z! u# @& a
  17.   w& w( o; J# V( ]3 ^
  18. #ifdef _DEBUG. k9 U) g- J$ L3 e( ?6 e6 J' a
  19. #define new DEBUG_NEW+ H/ T% f% r* b
  20. #undef THIS_FILE0 W: g/ d+ O8 J& c; g, [
  21. static char THIS_FILE[] = __FILE__;7 C# u( {% s) r9 ^" l) L
  22. #endif
    0 X# J4 d) [  c7 K1 G* m$ q* v
  23. #include "SkinResDef.h"$ J: \6 F$ o" n/ S$ `! C
  24. #include "ChangeBG.h"
    / z5 B0 L8 ~, t
  25. #include "AFXINET.H"# h( r, _( N) z0 [6 h! r$ \" Q
  26. 0 ~7 [1 w! X" k" ~( Z
  27. #define TRADITIONAL_CHINESE 0  J, m+ |, \* ~) D
  28. #define SIMPLIFY_CHINESE 1
    / w% V# T8 P; C7 t
  29. #define ENGLISH 2- k; [! x3 `3 c6 f( Z+ d8 V
  30. int m_iLanguage = ENGLISH;
    % o2 }* m3 ^! c) F2 g
  31. /////////////////////////////////////////////////////////////////////////////
    ! l. l: v% y# z1 \& u& x
  32. // CRevAppApp; s5 E0 b7 Z' Z
  33. 1 r7 j7 S. `5 c
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)# ^0 _! R( t  L/ q
  35.         //{{AFX_MSG_MAP(CRevAppApp); ~3 Z3 c4 \9 {9 W% d! p( ]4 e) t
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here., j5 M3 A+ Z& x5 h: d
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!( A: t6 N0 a' {
  38.         //}}AFX_MSG# g( x6 [: p  L4 Y  @( x0 @' O
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    , d6 X1 A9 {" L1 w3 e
  40. END_MESSAGE_MAP()1 g% ]8 S  F/ t4 S" s3 f! L- S; W
  41. % \' b0 a' M  O( x
  42. /////////////////////////////////////////////////////////////////////////////7 }/ T' ~' X3 `( j7 M2 a( J6 @
  43. // CRevAppApp construction
    0 `* F0 q  y. z5 ^3 |# u

  44. 3 U9 p. s" w9 W3 k
  45. CRevAppApp::CRevAppApp()7 d; A- b% }# s* ^! n# b+ g
  46. {
    0 S7 f7 r# b; y* v! a) ]8 I' y
  47.         // TODO: add construction code here,
    ( x: n4 C/ O1 `/ b' Y
  48.         // Place all significant initialization in InitInstance
    7 D$ Q& ~3 ^1 _0 n2 e; E, r
  49.   bDisplayIsBig5=FALSE;
    ! i7 A9 S0 A( S; K7 Q
  50.   bRestartUpdater=FALSE;- w  H  k! l" }1 J
  51.   bFinishUpdated=FALSE;
    4 J( x% T4 h8 @$ S6 C8 f
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 e$ R. B( g- z; C2 N
  53.   InitChangeDataBig52GBKS();0 z6 j2 {" L5 {% v) U% u& C% s. c
  54.   InitChangeDataGBKS2Big5();
    2 W. W4 V5 Z- O( |6 r  Z8 [: W
  55.         //
    / `8 H# H" T% V6 _
  56.         bClickRunExe = FALSE;+ G4 I/ H0 s) M; T$ L6 j4 X5 e8 [
  57.         //
    5 H! m* o; A0 Q& i, x
  58. }1 G: f( j; h/ @/ x7 t6 E- b+ ^
  59. * ]1 U+ `3 G' e3 u+ ^, v
  60. CRevAppApp::~CRevAppApp()
    0 `, {' ~$ S; q; g: G$ E+ R. W
  61. {% x! t( z5 e) @2 V7 U# Z" V7 t
  62.         // TODO: add construction code here,3 K$ x5 m! w% v: y
  63.         // Place all significant initialization in InitInstance& X; Z! n- t4 o: f
  64.   EndChangeData();" s- Y+ w5 U, y9 V* v; @# w- }+ q
  65. }- \+ N& g; [& T- C, J; ~
  66. 8 {8 Y: i4 a& i# j
  67. /////////////////////////////////////////////////////////////////////////////
    7 y8 q  R; i: [6 O8 A9 J
  68. // The one and only CRevAppApp object" n3 X6 {1 z" v$ Q5 R% }

  69. * m7 f$ N- {' ^0 y: n9 K0 S0 p% z
  70. CRevAppApp theApp;
    / B9 Y! b1 j" D: F  r  E
  71.   s: R& H& }2 _: F- F
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)4 J% a$ O$ [9 Y3 J
  73. {
    9 c  T" i; n1 \, s1 d, e" W# T3 W
  74.   int iEOF=0;
    ' Y6 L1 b7 e* y8 o! E. u& f
  75.   char szTempName[MAX_PATH];2 w3 O) D9 u1 f# B- m
  76.   *szFileName=0;' w" ~" d' O- @! c3 I" s, I1 [
  77.   iEOF=fscanf(fp,"%s",szTempName);3 D+ L+ f% v; _4 p* {* X
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    3 x1 N( p* G# p9 K7 R* S( a% l
  79.   {+ R* _- h" r5 O! ]1 ^
  80.     strcpy(szFileName,&szTempName[1]);5 K- g" L5 l; P, t  w
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)+ b9 T, Y) Q, k. o2 C" i* U2 f
  82.     {
    / N% s( B, w$ m+ p* P: u
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ; \: c, _5 F# \* |% Z* ^* A
  84.       strcat(szFileName," ");
    : U0 i2 S9 C) D1 I; M  p8 O
  85.       strcat(szFileName,szTempName);* L% z7 e$ u& M3 @0 e) ~: S" |! g& D
  86.     }
    - c; s$ a# z* E
  87.     if(strlen(szFileName)>=1)
    ! \/ N9 |1 k3 b8 V7 C5 j9 B4 {
  88.     {
    4 I! J' K6 G4 H! D
  89.       szFileName[strlen(szFileName)-1]=0;( ~* [0 x6 @! U3 A
  90.     }
    # v% u* j- |6 F1 M
  91.   }, c0 ~& d' R) W7 _( n
  92.   return szFileName;
    * P9 E* y, }( a/ ?3 u8 w
  93. }
    9 u( H+ Y9 _+ ?0 K

  94. ; \$ `: \' J5 W' D
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)% i3 x1 m$ s: P
  96. {
    ! ^, E7 s  t2 w: l$ r
  97.   FILE *fp;
    % r8 }2 e* F- s" w" F
  98.   char *key=NULL;  N2 z  [: Z* M4 L
  99.   char version[MAX_PATH];
    5 ~$ d7 N5 r" x8 @2 l6 P6 i
  100.   LPUPDATEFILE file,olds;
    ) F# T  ?' Z1 v
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 |  A: K, X: ^
  102. 0 a7 o1 w# j4 f2 w
  103.   UpdateList.clear();
    . h+ [$ A+ j/ [+ u
  104.   UpdateFile.clear();
    3 @( _0 _4 K1 r& O2 [
  105.   if(GetFileAttributes(filename)==-1) return false;
      d1 `8 j4 Q3 j) V1 q* t& q% J
  106.   if(!(fp=fopen(filename,"r"))) return false;' Q& `. w2 B. a4 ~3 A4 t" P4 A' S
  107.   fscanf(fp,"%s",version);
    : P! O# Q, V, |
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ( l- w  b- t' Z2 A4 ]) N* {: I
  109.   while(fscanf(fp,"%s",version)!=EOF)
    3 u% v3 R2 s6 A6 ~7 h4 G
  110.   {2 S! h6 e; ]1 V
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ ~3 X2 H* K% J1 D) z; D
  112.     fscanf(fp,"%s",file->path);
    : k* m) V! y" j) `$ F& M  C
  113.     ReadFileNames(fp,file->file);6 p+ L  z& b7 C& O+ j6 k0 V
  114.     strcpy(file->full,".");
    ! J2 K  A+ o2 |4 r# o
  115.     strcat(file->full,file->path);
    7 m; J: N- x4 X; K: M( r( F- h6 q
  116.     strcat(file->full,file->file);
    ( j) m5 B4 m6 w6 x; t) m  p7 I9 m" ]
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())8 e# Q  ]$ `0 r3 e3 `; g
  118.     {# t: X) [9 n- t2 L
  119.       file->vers=(float)atof(version);# z; d0 K+ X1 E8 L. }* ]
  120.       UpdateList.push_back(file->full);4 B1 D6 W9 I0 |" j! Q6 }; N9 A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    - k( V1 y/ g. l8 S/ n4 s' j
  122.     }$ @! z/ k$ [# w- d
  123.     else& |- J: k7 K4 U/ j2 {
  124.     {
    4 [7 ]& ^- }! G; W8 A- M" _! W' _
  125.       olds=(*p).second;/ [9 _$ X( P; V% T1 r
  126.       if(olds->vers<(float)atof(version))
    ) ?- T1 h2 i' D: V  M
  127.       {
    8 }, O& N1 c3 }
  128.         olds->vers=(float)atof(version);( e" s- l; g8 X4 F7 e9 E* r1 Z
  129.       }+ A0 \( x( U! X3 S5 l4 |6 T
  130.       free(file);  \- O, R, j/ Z% E
  131.     }
    0 o* r1 T- O7 c6 A% t8 q
  132.   }! n( q9 {8 M+ r/ ~
  133.   fclose(fp);4 J5 C4 T7 Y. u8 M( ?% ]- o0 M
  134.   return true;0 t5 T- H6 Q2 j4 R+ Y
  135. }# k( i& o) x% d- g

  136. - j9 ]: I! F/ m( ?3 Q* u5 e
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)0 A$ Q9 \# [0 ~
  138. {$ A0 X5 S* h+ v& K& y
  139.   TCHAR  szFull[MAX_PATH];0 k9 g. n) h% I3 p0 j
  140.   TCHAR *token,*inter;
    ( d, M* j; q& ?5 C/ @
  141.   *szPath=0;
    + B& F/ a$ H# R/ J' O- n( t, |+ R0 w  z
  142.   strcpy(szFull,szFullPath);  m. r  Y* R+ x" A' C, _; k% [4 {, u& H
  143.   token=strtok(szFull,"\\/");1 t4 Y$ a" E) K/ k: {4 q) i( f7 ]
  144.   inter=token;
    " z, B  L+ d/ w- ]  S; c  k
  145.   while(token=strtok(NULL,"\\/"))
    # ]) k: l  Q7 [) U; Q4 E
  146.   {
    ! I3 b- ^* J4 h. e0 x
  147.     strcat(szPath,inter);5 w* F6 u* ]- i. `0 f9 `; [  u
  148.     strcat(szPath,"\");) D5 _1 o# D9 u+ L) I
  149.     inter=token;
    ( ^6 U2 K2 Y5 z0 q8 Q% u
  150.   }
    2 i) b/ `7 t6 \4 s) J
  151.   return strlen(szPath);
    ' V9 L6 V. `+ ?2 Z9 {' F
  152. }
    & ]1 b7 D! l( [! a( V( _5 K0 A
  153. / T: O1 f9 @+ k# c: ?1 r  [
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    , K5 w' z+ n: T" w: Y9 a1 A
  155. {
    & c' o5 `6 h' n4 ?
  156.   DWORD attrib=GetFileAttributes(Target);
    + s# ?! B' E1 F# A
  157.   if(attrib!=-1)# c# i7 }4 f1 m/ I7 m1 ~3 |
  158.   {
    0 Q# ?. L! C4 O8 w. R" \+ t1 N; g
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    1 ^! G4 D7 Q7 X7 q' x' n" @
  160.     {1 N3 g6 |/ o& |) T$ N. c$ R2 G+ u
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);* y, X# A9 ?. |) \5 c8 |5 V' T
  162.       SetFileAttributes(Target,attrib);$ H' g9 v' K/ X+ m
  163.     }
    9 y( A- l4 R4 ^) t8 o
  164.   }
    / S8 ^$ M& d! l6 Z) r6 l- r
  165.   CopyFile(Source,Target,Erase);
    ! x" Y8 @8 I6 Z' \- @' l
  166. }( O; x5 D( J/ z4 r* @

  167. 2 v; h) M/ V: f8 T
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . O% `  x- m( f1 [0 W3 g' o  T
  169. {  a8 K& l- Y1 F8 ?. o
  170.      FILE *fp;
    ; U  G* H' r* @
  171.      char  szBuffer[8192];% S% f' o/ t4 I$ n2 s
  172.   va_list  argptr;1 y( [6 S' v- [

  173. 6 T$ k% V' o- L* l" i$ m
  174.         va_start(argptr,message);, L9 B8 t8 H' ]
  175.         vsprintf(szBuffer,message,argptr);
    6 I5 B3 G. ?8 b# I. A! I, n
  176.         va_end(argptr);7 d+ I+ r& P# Z9 E" f) c
  177.   fp=fopen(FileName,"a");0 i% p+ `- S1 U, w, w
  178.   if(fp)2 J3 ~( |6 R" W! `' o( l
  179.   {
    7 C. d' k4 S: e4 e  r5 c. z+ A* }
  180.     fprintf(fp,szBuffer);2 r' l; S8 g7 P5 ~3 g
  181.     fclose(fp);
    0 l2 i) @+ c8 `) W1 P- A1 ^5 L6 ?0 |
  182.           _flushall();
    # o& w: J( P( Q
  183.   }
    # ^, l6 e) p: J+ z* Z: m0 D1 [
  184. }& b/ M, ?/ `0 i" r* T1 y" |
  185. + [( J' `9 @$ a) i9 l! _9 W* q
  186. BOOL CRevAppApp::Fclearf(char *FileName)4 R& z5 m! N) U  V$ @! o
  187. {/ J5 K; o! `) O  h0 _% u" |
  188.      FILE *fp;" G( e+ S7 R5 x) h  |' P5 {# U
  189.     DWORD  attrib;
    $ v  `: R6 u" ~. K' u, x3 T2 e
  190.   attrib=GetFileAttributes(FileName);+ U! ]3 m8 R, I6 j
  191.   if(attrib!=-1)
    ( T( ^) X) g- Z; |4 L7 n
  192.   {9 [6 p6 j( W5 c. i3 X  k2 U- K' t
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);) v( o/ n# ^; {5 v' j
  194.     if(!SetFileAttributes(FileName,attrib))
    9 w7 ^+ y% P5 S+ I. [5 w. s
  195.     {
    ) r, B" v0 Q# N) L2 }
  196.       return FALSE;
    " C  B- ^! _6 o+ y
  197.     }
    / @9 \( _4 {$ g. q
  198.   }# u- R1 @% g* ]9 i+ [+ ~
  199.   fp=fopen(FileName,"wb");
    - F1 d7 f1 W/ @) M5 ]% @
  200.   if(fp)$ S2 H; V' C; |, b- d, a
  201.   {
    1 W; K3 c. c% \
  202.     fclose(fp);
    ' R7 `6 ^# P* j
  203.   }3 g' P* A2 \# j/ s! `' [% C, E  A" p
  204.   return TRUE;
    * Q: Y. V6 ]2 }% U/ `2 P2 m  B
  205. }
    6 z! Y; i$ u* G% o; Q3 @
  206. 3 F/ n3 w; N/ n2 d
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    / X5 s  k/ l: ~3 o8 o$ M# g- B% N
  208. {; s; Q0 ~0 p8 y1 x2 n& }  Q
  209.   char filename[MAX_PATH];
    0 D) z& [' J8 S; R' M
  210.   LPUPDATEFILE file,olds;) @1 Q. p# ~7 t6 e6 s
  211.   std::map<int,CString>::iterator i;# g! y3 t+ u1 n2 m0 g
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; H4 [/ k. m: C+ K& e& J
  213.   std::list<CString>::iterator l;% P- W8 w; z* a

  214. 4 K  G% {: a5 v: P$ E
  215.   if(bFirstUpdate)" j' W2 `, L8 n* m$ K
  216.   {
    : G  i2 ]; K* E
  217.     dwCurrFile=0;
    1 v0 i" I. l) K
  218.     bFirstUpdate=FALSE;( y0 J8 C* ]4 Q. u# r! B
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())2 P# J* I% h  [. K2 n
  220.     {
    8 y7 X! G) L+ R  F0 @" `: \
  221.       dwTotalFiles=UpdateLocal.size();
    2 a! i! x9 V0 p- r( X; a
  222.       dwDownLoaded=0;
    , c2 V0 a3 i* F
  223.       bSilentStep=FALSE;3 ]" |7 ]1 p* z# B
  224.       bCompressed=TRUE;
    ) y- [, \" X/ {$ ~1 X4 @
  225.       strExtLocal.Empty();" X" Z! t; `/ u0 ^& `
  226.       strFullName=(*i).second;
    " i* ^8 u$ q) k$ u
  227.       dwProgramState=AP_CONNECT;2 e2 ^/ P, j$ T- d. P, N$ V
  228.       return TRUE;8 ^8 G- X! M) q5 I: x  Q
  229.     }1 s& F& G$ z- D  [' L
  230.   }0 ~4 |4 E) u/ m; ]5 X' h" ?, m
  231.   else if(bRestartUpdater==FALSE). f* }7 V; `# O* ]/ r, b7 t% g6 Q
  232.   {
    / P' j+ C' P) z6 r! V2 H  C
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())& i/ I% Y+ T0 y7 `9 x
  234.     {; t8 `8 d4 B7 Z2 |6 a
  235.       file=(*p).second;
    1 O2 i, {6 v, T) e" U6 v
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())$ O7 w* c6 }! F& j1 b2 V
  237.       {
    # J! K' x! v; N4 q$ q0 o9 f
  238.         olds=(*p).second;
    9 @& u: b4 w& X
  239.         olds->vers=file->vers;
    1 L  s3 s0 V5 j- X* g% L
  240.       }( d7 O4 P; R# K
  241.       else
    ' D$ Q7 e9 C" L5 K. ]% Y
  242.       {, c1 `8 a! S- a: e. L( _. U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - i- |# s9 v9 r8 Q( p
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    . u! u5 K( d- M$ Y+ v2 q1 y1 {
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));: v, a$ }4 \3 p+ z7 w' ?; D; g
  246.       }& b! m9 U9 \: ]' p
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");1 ?7 f, Q; g5 D9 i# ]
  248.       sprintf(filename,"(%s)",file->file);& b* v$ x7 j8 W- y. R9 C
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% Z- E: B# [+ _1 y; ]: ^4 s) H% e. U
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 g6 f  }9 ^- [# q
  251.     }
    $ j6 u. Y7 _1 \* z
  252.     dwCurrFile++;. c/ R# y& h5 l, I8 v' t# ^
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ x2 {! h5 M6 v
  254.     {
    2 v; d: Z# c- N; f. [& K0 v5 @/ k
  255.       bSilentStep=FALSE;. `' M  V7 G' p/ v
  256.       bCompressed=TRUE;
    9 _! Z, r( G: j! V9 [
  257.       strExtLocal.Empty();
      P# _4 ?7 L! ^! g  |! G: P
  258.       strFullName=(*i).second;( N$ D7 t0 ~9 H
  259.       dwProgramState=AP_CONNECT;
    + S- B- t! L( C4 M
  260.       return TRUE;
    8 ?, A+ j' P: M% r9 G" Z
  261.     }/ y, S9 C9 Y8 l: S
  262.     if(!bRestartUpdater)0 c" e1 Z' K' `% i4 B
  263.     {
    ) v: x7 G9 u7 S- t5 n
  264.       int iCurrSize,iFileSize;% e. \8 p. }5 b6 k
  265.       iCurrSize=0;+ q) `, s$ {4 B0 ^) ]0 N( Q
  266.       iFileSize=UpdateList2.size();
    : V8 o/ g& L% i5 o# Q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    7 k( T, ^3 l5 [
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");! ]" K/ a: a' a+ L7 z, _% v- k( }
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");$ ^8 q# C8 V) w
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 B" k6 m/ J2 w9 l
  271.       Fclearf(".\\update.dat");
    . A- m' B* V5 x0 M# f
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    0 u- @, B: h1 w) R5 o
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 O& g8 W8 D# X0 W, G9 \* m
  274.       {
    . @5 L# {5 e* H, i% T2 X
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    " b9 ^# G" X+ f- e) ?+ R) c
  276.         {+ a8 g$ W" W1 v2 ]
  277.           file=(*p).second;
    . x# z1 }# W' A# ?
  278.           sprintf(filename,"(%s)",file->file);5 P0 t1 ?% Y, D  \9 v- M) `) {
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 s; l% L9 l1 Y% A$ X
  280.           iCurrSize++;
    1 [/ T+ e8 y9 T
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    9 d( H! T, `7 ^8 l+ A7 L6 s; s
  282.         }& S7 P, J: U6 I
  283.       }  R* N5 U4 q$ G5 X. Z9 U+ \: |
  284.       unlink(".\\update.txt");
    % z4 \8 R6 G, u6 ~# |1 h4 Q
  285.       unlink(".\\update.tmp");+ Z2 z& m* T  F3 s5 y6 d; }$ f
  286.       Fclearf(".\\checkversion.dat");. I9 t3 E+ @5 I* K+ T8 n/ C, N# ]
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);- K9 u0 ?  o$ j
  288.       if(UpdateLocal.size())
    % v8 B; A+ @% E
  289.       {
    1 V, L! ]! T: ^* K& M
  290.         UpdateLocal.clear();' ]7 W. Q- _1 m
  291.       }
    3 L6 F! `& f' Q" M3 L
  292.       if(UpdateFile3.size())6 U9 B# Q5 c7 U  Y7 {
  293.       {* N$ z# c0 D+ D
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 d, O5 c- \  [% ?9 @* C
  295.         {* }1 e: ]7 F- |) G. q
  296.           file=(*p).second;, S* b/ k  e% g4 M4 g
  297.           free(file);
    - j' q4 Q  a; X7 B9 R
  298.         }7 ^9 ?0 M1 s# d! O, K: p4 s, u
  299.         UpdateFile3.clear();- Z' X1 Z  I1 G
  300.         UpdateList3.clear();
    + U# L' p+ S: a5 ?% m! O
  301.       }
    . N( ?9 f6 T# W. E$ G3 {
  302.       if(UpdateFile2.size())+ ?0 g) L! W) n/ Z, W
  303.       {
    : z. R( w! Q3 t8 j
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , i& ~8 T" e. ^9 N! N: G
  305.         {* R  B8 L7 ?( v5 F/ }3 G  `6 {1 k
  306.           file=(*p).second;
    ; M" k3 L4 o  n1 o  a
  307.           free(file);
    3 f" O8 w0 k$ x. c; X5 L0 z
  308.         }
    ' V! I  W8 C. T: x3 `5 E
  309.         UpdateFile2.clear();' q  I  D) v. ^8 r9 ^0 f. V8 h5 A
  310.         UpdateList2.clear();
    : w0 h9 C" d8 Y9 f5 ^/ s9 c% U
  311.       }  c1 ]* h  n) A) @. d( @1 }
  312.       if(UpdateFile1.size()); f6 z6 L% k: q' W# S6 s9 r
  313.       {
    / I  s0 ~0 h" N9 h# }2 P* C
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' v7 d# ^; ]" G6 Q# m5 x. M
  315.         {+ m+ U# j- `7 a" @8 a
  316.           file=(*p).second;
    4 _2 U1 O1 Q0 W$ f% n
  317.           free(file);
    7 U' m: p9 W* n6 h$ O
  318.         }) n5 c' I# Z  ^, v) g
  319.         UpdateFile1.clear();
    6 T) U: B8 u0 h
  320.         UpdateList1.clear();( _6 S8 p, Z5 `) T: |% [5 s
  321.       }
    - F8 d& I# p2 R0 u" t+ ~1 N2 T
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
      c7 Y& H" r; b- g# h; p& {
  323.     }
    3 [# t9 l- B, a' ^
  324.   }& E+ q" \/ ?6 w: \+ l$ ?" Q# C
  325.   return FALSE;; {) X3 A5 [( L9 `1 U
  326. }
    2 m  _! ~4 B! O8 i9 r. a

  327. , V6 `$ m4 {5 f$ l
  328. void CRevAppApp::ClearAll(void)
    6 u7 @0 B4 q5 B& k
  329. {
    * c; T7 z0 D* T0 c
  330.   LPUPDATEFILE file;. V" q7 u- O8 N" \3 Q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' W! H  N5 `2 D, B- R

  332. 6 U% u* ]2 N3 f
  333.   if(UpdateLocal.size())
    " K% b' x; e& |9 D1 ?2 N
  334.   {
    % N2 G: H) ~& T1 O- U/ g6 S
  335.     UpdateLocal.clear();2 `/ B- p& c$ A% p- m
  336.   }2 O; y% I! C. e! x) j; o$ w
  337.   if(UpdateFile3.size())! F& j) d; f3 i+ z, ]; F2 c
  338.   {1 q: B: R9 W, `3 R! m
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% h; a- w9 \1 @$ ]' F
  340.     {, K8 q; ]( c: ~6 p
  341.       file=(*p).second;; x& M! c- u/ B' Y7 O, @0 g5 J
  342.       free(file);
    - `; W/ J+ Y. d& O, b& r  o
  343.     }- S  x  ^* R  y; k0 u/ J; X" n
  344.     UpdateFile3.clear();
    9 R0 l/ w+ L- H8 o
  345.     UpdateList3.clear();
    ; [4 E" T6 {) F4 q  ?0 K
  346.   }
    9 Y) ]/ Y% F1 k. q# F1 U' k+ S" s8 m' D
  347.   if(UpdateFile2.size())
    - c" L5 u; P3 C6 {+ g
  348.   {& B) T5 e! M4 {, t
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 z# w6 A: w$ M5 w; G$ @; k; V  n
  350.     {
    ! }" h( i6 c% b0 u
  351.       file=(*p).second;/ e) C) _' {+ c. m+ p& l, {4 k
  352.       free(file);, `9 A9 Z, `8 o2 n
  353.     }& U& [0 t3 _2 C; x
  354.     UpdateFile2.clear();
    . ]. r6 Z3 y* y3 i) `$ f$ m
  355.     UpdateList2.clear();. z, m( B0 [7 j, q" B
  356.   }4 r1 ]5 ~( ]% F: v( w+ F+ H
  357.   if(UpdateFile1.size())
    * L4 R9 `$ u, J' O8 I) g+ U& j
  358.   {( f, E9 r1 ^* v( y9 _% Y% v
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ f: z+ I- s1 i8 @& c
  360.     {" M8 w$ B3 i2 F% p1 Y0 P- W  h4 ]
  361.       file=(*p).second;
    3 t7 _3 }' B% t
  362.       free(file);
    % t% c, I5 _- \9 w* N" w
  363.     }
    1 ^5 Y; _* ^% w6 o% K
  364.     UpdateFile1.clear();0 h( P6 R9 s5 g1 q- w
  365.     UpdateList1.clear();  t$ o, c" a, M$ i" g
  366.   }" u" D' `* r" L; ]4 X$ t8 M9 z+ x, Z* W
  367. }  
    3 D! ]; e" B+ ]6 L; B* L* G, f) h+ [
  368.   # v5 F8 V* }" L7 A$ w& V. Z, w! z
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 [1 J; s& [# Q# [1 k1 R
  370. {* ~# V. Q- W3 A
  371.   int c;
    ; a  @7 C% v& G9 U, Y
  372.   LPUPDATEFILE file1,file2;
    # g6 x) F) n* R& T
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ( T9 [4 J; ^. B7 Q7 y1 {
  374.   std::list<CString>::iterator l;
      x  W* ~1 ?: i7 Y
  375. ' A. ~8 f# V1 n) }1 g9 n
  376.   UpdateLocal.clear();. I: K' L, e/ S2 x9 q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    8 v& X! e& x1 z) c1 a  U
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);, c3 D+ p/ L' l5 N; N/ F8 y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);$ ?, J4 W! U1 J& f- |/ b" G
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    0 P1 E  ~" u, e! M) `$ _/ g2 u
  381.   if(UpdateFile3.size())& x' [; |1 [) h  D4 x# ^. `* [
  382.   {
    6 N8 N7 _, E9 ~& q. Y- A
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)! M) j0 N4 K8 V  Y
  384.     {
    ( F* g2 Z' ?+ C% y
  385.       file2=(LPUPDATEFILE)(*i).second;
      g7 L- _- I$ D* B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 Z" o: R; I, N
  387.       {
    ( |3 d; I& T0 L
  388.         file1=(LPUPDATEFILE)(*p).second;
    & P2 F- M4 X  p# ]% q' w' g) \
  389.         file1->vers=file2->vers;
    ( u8 x  q1 D% c5 p: D
  390.       }- @4 }% k. ?3 n# u
  391.       else0 B0 y: O( f* e  d
  392.       {/ l' T9 H' C6 m% B
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ ^0 G1 p( Y: D. t5 p
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    6 T8 _! a- y' L% A# I
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ; N$ L) {# {/ `9 P( B6 i( |
  396.       }+ f# q% y+ C3 g# Y$ {2 f* s2 Y% U
  397.     }
    * @! D# u' q2 n: H. }' Z
  398.   }1 i& t3 O* ~, @6 x
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & R) i/ L& o4 f6 Z! F
  400.   {
    8 z2 i4 o0 @$ F, O3 N' B2 \
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! X# `: R( J1 A2 q
  402.     {& ]0 o& q1 l' E
  403.       file2=(LPUPDATEFILE)(*i).second;
    8 T7 X5 I2 i/ G" X0 G
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 i  h( T7 s7 v: |, }# d0 E; k% ]
  405.       {
    7 D% v* C5 n8 M
  406.         file1=(LPUPDATEFILE)(*p).second;: U2 H6 B1 h% V6 Q+ p& ^3 l: }4 x
  407.         if(file1->vers!=file2->vers)  m$ \, M$ C" N. q. D; X6 L3 M
  408.         {
    . x* n3 L# C9 j3 _4 q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" u. ^4 h: r1 B0 y, k1 X
  410.           c++;( q5 Q3 q8 L, l& [) X. c+ M
  411.         }5 D5 f/ `+ Z$ h8 m
  412.       }+ ~8 C- J8 F& F/ L5 s
  413.       else8 c5 M* I: K* e* e8 u$ T
  414.       {
    7 ^# Z) M4 j8 I
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! x3 U9 c2 b2 D' H& i
  416.         c++;
    ( r# q$ {+ n( L/ I! Y1 w
  417.       }, L: s# U: B/ ~, x3 o. V
  418.     }% V: x1 p- o! ~- {: Z
  419.   }6 Z8 J: q! D" U6 o: D0 `
  420.   unlink(".\\DownLoad\\update.txt");2 T3 `' h5 ~- x& k& c
  421.   if(UpdateLocal.size()) return TRUE;0 z% {3 w- |$ w0 }( J2 ^
  422.   else                   return FALSE;
    % G$ I3 [* B( }
  423. }0 m! `! k' O6 @" _
  424. - o' k. |8 n# r; M# m
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    * ^" D+ w$ D$ ?, ~" B
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    # {1 ~1 T0 b5 @: S' ?5 `* V* t

  427. 3 x7 f- a6 R0 \- }$ b
  428.   L6 I3 g1 W; {  e' F2 J3 \
  429. / r5 \* Z: K" w# a/ O
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)8 z* S# M- t+ r$ b4 _4 m6 \
  431. {. i+ ]. Z1 k* t( r2 M& p, v% B
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;4 o1 X5 K" O' L! y" M' m8 g* U
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 o. A6 a; M6 }: P( `0 m# B8 l
  434.   {
    % X! z0 j' U; k" T" F
  435.     char szLanguage[50];
    & M/ J! X0 Y1 R: x9 Q( k5 C+ M
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" h' u+ M; Q2 Q; |  f8 c7 n! M
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; d3 W3 E: v  o/ u: k4 T
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" D( _8 }6 ]/ n
  439.     else                                   m_iLanguage=ENGLISH;  t9 Z0 d5 t6 P5 w
  440.     char szRegister[100];
    / l; {. D6 N( Q# ?
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # T" H# r7 P2 a/ I( h
  442.     strRegsName=szRegister;: A$ Y5 Z6 J! h" g/ `& y
  443.     char szPatchURL[100];; h6 u& B3 B' A- o+ Q: W% B  T) t
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' B. G1 Y. q+ B  n4 @
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 V+ i" k/ ^% w* f) J) y5 K
  446.   }
    ) ~" Y) m  [9 Q
  447.   else% l7 h: |! |7 N# h( y7 N  J
  448.   {6 W+ y9 B' B  {4 T6 W
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % y% {1 e6 B* H5 M9 D/ ?
  450.     strRegsName=DEFAULT_REG_URL;
      g2 v$ }# |+ l5 Y0 W/ N6 o
  451.   }9 Y# |$ X4 M; B! L$ X
  452.   if(GetFileAttributes("hosts.ini")!=-1): [6 e: E, u" T. M) m% k1 y
  453.   {
    , N  R8 p2 I) U
  454.     char szIP[50];
    7 |; Z! c6 a4 v6 n
  455.     char szDIR[300];9 W+ z3 E; J! b# _
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))7 A/ y8 Z: h9 o: o  e
  457.     {
    ' a: C& t; R5 s4 p# U" l, ^) W( i
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
      R7 m+ t2 s% q! Y) L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    * e9 n- l) ^( O0 O' X/ O0 U/ h
  460.       strHostName=szIP;: G  \2 g9 p$ z0 V6 h
  461.       strHostPath.Format("/%s",szDIR);+ G$ ?- U' P' R6 ]/ w$ _% A
  462.     }
    2 o" C1 z9 B) O+ |+ n
  463.     else" G; P" [  ]& H& u5 O
  464.     {6 O  r$ y5 q9 h0 S1 U/ v  N( w
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 U! }: i7 q8 f7 K) z7 e$ O, B9 z
  466.       {* J1 R; g+ r: N& P/ [
  467.         char szLanguage[50];
    2 t/ o* A3 Z8 U7 x& ^5 R/ o% q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / ?- o4 c6 }/ w, M) v# w9 c* ?
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 u/ V- q4 f4 k/ t% H
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % W5 N* q7 i4 S9 ^, h) O) @6 x$ X+ o
  471.         else                                   m_iLanguage=ENGLISH;
    , g+ F! R. E/ i. y  U
  472.         char szRegister[100];
    / R3 t8 V1 F% ~! e, {
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& z: E% \1 a& ?" F! c
  474.         strRegsName=szRegister;
    ; b. `8 |) l! |% z
  475.         char szPatchURL[100];
    ) u, g- E$ N4 F, u
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! Z6 l* |% f+ p# t
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; l7 r2 i! m1 P0 B/ u! H3 h' z4 A
  478.       }
    " _# T2 X1 e. ~" x8 b$ s
  479.       else
    4 ?3 }& A: ~0 L, U- d
  480.       {
      V3 O% f/ S5 v% g
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , a  D: T3 Q1 ^+ T" s0 |
  482.         strRegsName=DEFAULT_REG_URL;& _' \7 u3 `2 n
  483.       }
    ! j( I: R  R2 q4 C5 L4 b7 e
  484.     }8 c6 w2 E# g4 u4 T  m4 P1 s
  485.   }
    " `: `! W1 u* v( g
  486.   return true;
    4 v4 i+ ]* k8 Z. y) T: L# X
  487. }7 y3 `' Z% \2 T0 R1 \6 \: _

  488. ; _4 K) i& k% n  i
  489. #include ".\ZLib\unzip.h"
    5 a- H: C/ E3 N0 {/ |9 U. n' Z7 |
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);3 H, y) O, f3 A
  491. /////////////////////////////////////////////////////////////////////////////5 w8 K  g3 g% d5 c
  492. // CRevAppApp initialization4 H0 r% L1 p( Z4 a/ U+ a7 V
  493. 2 P: R4 r7 g: G' E
  494. BOOL CRevAppApp::InitInstance()
    9 l+ S, a/ D7 R7 C' }
  495. {/ V' ?2 _$ x3 M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];# z+ E! @6 @" g9 _
  497. 3 O. o- d2 h1 `1 n  T" T
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' `( O+ b4 _, d1 `
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))! m( ]4 _2 Q" \7 W% O: g' S1 c
  500.   {$ H+ k, h9 s5 F& ], d# f
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");& e3 U5 A: a7 w# @1 _0 ^
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ! d8 i* |/ x/ o% v; O
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ! k6 U3 g; f: A# X5 d* c
  504.     {
    * ^/ W5 b) {8 B4 [8 \* C
  505.       strcpy(szPath,szPathTarget);7 u& g* A2 z% [3 w. t- ]& B
  506.       SetCurrentDirectory(szPath);# a& X3 i4 X4 y0 b- \8 X5 S6 m: ^
  507.     }
    - u' R6 z" H5 ~! H. r" }% v
  508.   }% X6 `3 ?  @. D1 B2 L: r
  509. #ifdef _DEBUG' r# P( c1 M8 S5 d6 Q$ u/ P
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * s1 R; T% F( B* V
  511. #else
    & r% e4 _$ `9 q/ ?6 T" j6 X! z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 ~% m: F3 ^3 f' D$ s
  513. #endif0 B( o6 L) r  d: |: H, C
  514.   {( `' W1 h" Z! l) q7 l1 m; u
  515.     char tempFileName[MAX_PATH];! N( ]. L* |9 T0 ?( A' F0 ^
  516.     strcpy(tempFileName,szPathSource);& s' n1 L- k1 l  @  i3 `
  517.     tempFileName[strlen(szPathSource)-12]=0;
    3 F; u  i% l+ r; o7 t+ E- r0 }9 ~
  518.     strcat(tempFileName,"\\$CSUpdate.exe");- q) [8 ?! ~  e) j
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);+ R  b" w7 U9 [( U. N6 U6 S# ^* C, \
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);) [: B; d$ R  r4 o; G- A
  521.     return TRUE;
    . k; r" W. N6 J/ H, o. s1 g
  522.   }4 }& e' t2 Y4 J2 e
  523.   // Nuke 0118: Delete run.exe# _# A  j' w* C( S
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    , y8 m( n( W" i" u& w3 Z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");6 V0 F: ~% R! t% ~9 T; X
  526.   if(!ReadCfgFile("Config.ini"))( e0 A* G( P) u
  527.   {! U) x. d8 m" j( O* V  w
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);8 Q/ r0 S2 E0 }' B& R- x
  529.     return TRUE;
    $ _4 S  P. A* J. h7 M" ]: b% p* f( P/ ^
  530.   }
    - E  t0 c, U" p% y8 [9 C7 I' a
  531.   HANDLE mutex;1 d2 A- J8 u! h  [  Z6 U6 @& S
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")), T' ^2 u7 Q7 Q. l% b; c7 g0 `
  533.   {
    - I- i1 k) o- K* G! E+ G* n- s
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ! ]6 N, W, `; Z. u  ]  D
  535.     {
    $ x+ c  z. p1 d! y0 k
  536.       CloseHandle(mutex);
    2 e+ I: d& `$ s; J. ~! I
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);' _) P( f; Y* ~6 j9 T( P! ?: {0 S
  538.       return TRUE;4 \' z& d1 a1 s" t: {, j0 y
  539.     }* F0 }. W. l1 c2 R4 Y7 {! t; r6 A
  540.   }  
    9 n" r( M3 m) U' X
  541.   CloseHandle(mutex);
    + w4 h) Z, m& w5 N

  542. / s# e- D2 p* i4 R8 G
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);$ r$ I$ b6 ~1 H. ]/ n' V7 O" h( c
  544. ) l) y8 B- L  j( Q
  545.         AfxEnableControlContainer();8 h" Q& s0 f! ?9 P' c' I4 j
  546. 9 U: W  D+ q' k
  547.   bCanUpdate=FALSE;9 H) Q, y  g$ `; [$ ~- Y
  548.   dwStartUpSteps=1;2 e- k; `6 T2 y' u! m
  549.   dwProgramState=AP_NOTHING;
    " r4 v( X+ }" t: C, [7 s  W2 V
  550. , K! r6 U3 C2 ]# E6 R" F% E$ _0 z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    1 d4 D4 O, L: U$ e

  552. # I) g$ G* p5 y/ N3 w  ~$ [
  553.         // Standard initialization0 d* {, \2 N$ E1 R, l% N& q
  554.         // If you are not using these features and wish to reduce the size
    4 h1 P/ G  M& w3 z8 B/ I
  555.         //  of your final executable, you should remove from the following9 u+ S& c5 F9 v
  556.         //  the specific initialization routines you do not need.0 {2 K/ {, T) g+ a6 e
  557. 7 {! g6 _8 H/ G2 t
  558. #ifdef _AFXDLL
    3 l" Z( m, q( t' j* [# f  [( ^: S. b
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' d8 @3 T& e7 W/ U+ \& q3 |
  560. #else
    8 x. y* Z6 a9 h: U7 R
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ ^' y. }) D5 a% p8 X5 H+ J7 Z. Z5 |
  562. #endif" i( B; L# l# ]' P- t) a+ [7 u, e2 E

  563. * ^: y0 T5 z! ?+ i
  564.   dlg=new CRevAppDlg;
    " |( M  f1 X; \8 e" i
  565.   dlg->Create(IDD_REVAPP_DIALOG);: E& \9 y$ F+ M5 d, S: a/ l! e( \
  566.   dlg->ShowWindow(SW_SHOWNORMAL);5 j: R' @# `  x/ I4 t6 t) d
  567.   m_pMainWnd=dlg;& t' H+ _/ l' v1 Y+ J  Z
  568. ; {' u( u5 ]" [
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    % L$ K$ ~# G" q" W! U- P

  570. 3 k  W+ l# y+ `' o  b& j+ @
  571. //  GdiplusStartupInput gdiplusStartupInput;1 a% r" D9 D3 O( P# s3 o; S
  572. //  ULONG_PTR gdiplusToken;
    9 |) A4 U. q5 T$ x) S* m
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    % E; d1 s1 I% F% v/ |

  574. , ?9 Z3 {8 F. I4 ?
  575. //        CRevAppDlg dlg;
    : y7 W& A; |4 N0 E! r
  576. //        int nResponse = dlg.DoModal();
    8 D+ _+ c3 _7 _* [9 m, J& t; r1 U
  577. //        if (nResponse == IDOK)
    ! p9 S  c- Q8 i/ q; g5 C0 w
  578. //        {/ C. m+ z1 F- R0 S$ i! Y. b) Z& r
  579. //                // TODO: Place code here to handle when the dialog is
    % m7 M5 _9 I, _  V6 t
  580. //                //  dismissed with OK" E+ A/ ]  i) X+ M1 n
  581. //        }5 p0 J, l6 g% X; u6 Y- }
  582. //        else if (nResponse == IDCANCEL)
    8 `' O3 S+ B( N, {
  583. //        {
    ; X7 D; b  G8 y# J5 B+ p
  584. //                // TODO: Place code here to handle when the dialog is3 N' O" a- Q1 s( y# ^
  585. //                //  dismissed with Cancel  u/ e* [8 m, H. w0 v( C0 b
  586. //        }% }9 D3 Z+ n! O( l: u
  587. 8 Z' o- L  g0 u
  588.         // Since the dialog has been closed, return FALSE so that we exit the! z+ y1 t, b1 I& {, P
  589.         //  application, rather than start the application's message pump.! n* j8 X% P# f
  590.         return TRUE;6 {6 Z* c# }5 ]
  591. }
    9 a. k9 T5 Z1 l5 v& h  H
  592. ! T5 S% [% N% ^2 ]  @
  593. char *CRevAppApp::strtok3(char *pSource,char *token); W/ t* F- ]! d! Z- |! z+ [
  594. {0 r6 S8 e5 b, O0 |9 t
  595.   int i;
    - S* t0 |1 i. X& ?' _* G
  596.   char *szRet;. J( I: A1 \7 o

  597.   Z% c1 t7 H6 q
  598.   if(pSource) { itoken=0; sztoken=pSource; }" [7 J5 v$ Z1 h/ t$ b
  599.   if(sztoken)
    3 r: J* t8 T  B4 L2 u3 U
  600.   {
    + q4 c5 |4 X) Z; e1 O$ j* U5 J
  601.     szRet=&sztoken[itoken];2 \- D; v) E( c+ ~/ j; j
  602.     while(sztoken[itoken])
    3 @7 r6 z) y1 e! V2 p1 U" A
  603.     {
    - z( J/ O  x0 Y/ d- J
  604.       for(i=0;i<(int)strlen(token);i++)
    + g& l# ~" A# \% q8 |# l
  605.       {
    1 P  G1 d+ x0 [( x# w" V* `
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])$ f4 |& ~. H6 i. n, u4 T7 [
  607.         {
    ; H; \) `3 R% ^$ K. z( t! U
  608.           sztoken[itoken++]=0;
    : ?/ l3 v) k8 T' m
  609.           sztoken[itoken++]=0;' ~: T6 u0 E7 N8 Z: E
  610.           return szRet;
    ( s6 T$ j1 D' ^+ a1 J
  611.         }
    4 K, X. j1 |. \
  612.       }
    & d/ j2 q$ S/ T
  613.       itoken++;7 Z9 E! P" @# ^% \7 |. n* y4 d5 L$ F2 X
  614.     }
    1 e( V5 t9 W! z! J: _0 K
  615.   }: n1 N# _2 T& j+ e' j# W
  616.   return NULL;
    # W  q1 N$ A/ [9 n1 d
  617. }, }. }+ Q2 J3 `0 p
  618. " ?7 ]: r5 C1 g
  619. void ProcessProc(long Total,long Current)
    : u3 @7 i. ~7 h
  620. {. e( l3 z6 M5 D% ^$ Y# b
  621.         MSG msg;
    # @6 x. F/ ?( o- x1 r- P* J
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    - a7 J5 r6 R. D, i' o4 L8 M+ [' n
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    9 H7 K- m0 B- h: D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ( B6 c. [+ M5 ^. Z( _2 a
  625.         {+ V$ B. p" A: I* i3 h
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - n/ g" \1 X7 l9 k( n% Q  w/ C: b+ i
  627.                 {
    9 @3 ?3 [) M% f) B
  628.                         return;7 K$ J8 Y* p5 x$ b! [6 u1 R' y
  629.                 }
    : F. c+ T/ Q, B
  630.                 TranslateMessage(&msg);
    7 r5 E% R; Z" V; I4 k, |2 x5 z
  631.                 DispatchMessage(&msg);  Y* T6 o  E8 k8 L: s1 C5 v( ^
  632.         }       
    9 M2 |3 r: o1 B" d2 g3 ~: Z
  633. }
    " {& o2 H9 t+ w9 n: I- p7 l

  634. 4 O" K4 n0 M- P  W1 i
  635. BOOL bFirstChar=TRUE;
    3 T8 j+ Q: y+ T/ Z6 z9 i( t: I

  636. / J& o" m6 z1 K1 s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ( g& ^9 p2 a% H; ]4 {
  638. {- D+ I: y# \6 X0 ^
  639.         // TODO: Add your specialized code here and/or call the base class
    ' I& g2 c. G5 C
  640.   switch(dwProgramState)
    " K- H- |. m$ \0 @; U. j5 f7 j6 r
  641.   {
    7 X3 K& `0 S; Y6 H4 u% ^2 L
  642.   case AP_NOTHING:5 Z( G( t6 X7 }7 H1 l0 L
  643.     switch(dwStartUpSteps)) m% T7 \1 I: l7 ~
  644.     {% h# z) A: s3 O: L
  645.     case 1:2 G8 v8 e! g6 ^. q1 B
  646.       {% J6 h- B2 ]& u) S9 B- ?
  647.         int i;" L2 W" h) k. q
  648.         CDC *pCDC=dlg->GetDC();5 G8 R" r) C  l7 M
  649.         HDC hdcwnd=pCDC->m_hDC;+ g% f) ^! f5 P' M
  650. //        Graphics graphics(hdcwnd);* p. E/ s5 d2 `% ?
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");  R; l3 m" {7 N! w1 R; }+ N
  652. //        INT iWidth=bitmap.GetWidth();. u0 b% T' H  S- Q  U. `
  653. //        INT iHeight=bitmap.GetHeight();; R7 q% G7 ^1 V% D# f) s6 q* X3 f
  654. //        Color color,colorTemp;
    ( u$ y( V/ y* O+ e6 y/ y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    5 D% N4 S" V* G7 n  ~
  656. //        {
    5 p3 u& Y, Y7 ^# A2 O% X- d# F
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    9 {3 C: J4 ?/ D1 K
  658. //          {7 S# X2 m% s4 ]" x# n: W7 V9 m
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    . g* N" ?, ]8 a
  660. //            colorTemp.SetValue(color.MakeARGB(7 i( ^, T4 p: S
  661. //              (BYTE)(255*iColumn/iWidth),4 a8 D" }% [; j  N0 v
  662. //              color.GetRed(),
    # h, u9 e# Q) \0 p
  663. //              color.GetGreen(),
    0 M$ w1 Z; W2 s4 @1 ~( C
  664. //              color.GetBlue()));
    " [. k0 |4 C9 H1 P
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    . s- r& k5 S% z; v
  666. //          }5 B* b- a8 t# x, o/ [* f* P
  667. //        }
    2 e4 S1 n" ?9 v* i- P  X+ j$ M
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    8 `7 w1 ]0 e: q6 J' l
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 W6 c0 q0 w( z: q8 L& l$ L
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");' s: j  S' F9 I3 f* R; Z- T
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( Z% h5 ?: s" `* ^/ S: M' b) D
  672.         for(i=0;i<240;i+=8); c6 K  P$ M* \
  673.         {( o3 X" G) I( `$ I' }3 p
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' A" U& _& R3 a- d" C: c; F5 h
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
      f+ b+ Q  _  [4 S5 Z
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 X# Q+ d/ F! |. k7 @' }9 w$ D* ]
  677.           Sleep(33);+ y6 |6 j0 F! Z: N
  678.         }: K0 f! }3 ^+ i2 E" J; J
  679.         Sleep(1000);
    4 W* h  w& j% T) o( d2 M1 _: i
  680.         for(i=240;i>0;i-=8)
    4 R! G( O6 d  q
  681.         {+ F9 m3 B- T' t% G! A0 K/ d
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * D# U7 r/ L; k' K0 m
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - D* q( u6 N, u& ?! G
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 `# y4 T6 |/ z% a: N9 f
  685.           Sleep(33);! A* [9 B4 [  F# `+ K( T  b
  686.         }
    % s4 |" ?! i& D, f) Y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);, A9 ]  x/ P$ N. G8 B$ s
  688.         dlg->ReleaseDC(pCDC);
    ! @, _2 }) R" `7 E9 v1 w& e
  689.         DeleteDC(hdctar);8 U* Z5 t& j2 ^% k1 I  X+ C
  690.         DeleteDC(hdcsrc);% j- v2 E* p! B+ v& R1 Z8 `
  691.         DeleteDC(hdcorg);' T* U9 \% c7 m! e4 I! y6 |
  692.       }
    + N1 |; d2 a0 E, R& \+ ~
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ) J. v7 s) m' H
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ! t( Q  m) N$ K5 `
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");9 ^$ m" I/ i5 N- `
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    6 L$ w9 p  c6 }- \3 G. Q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 }3 g4 b( o* M; O
  698.       if(!Dn.Connected())
    ) n2 t) I" r) r3 h5 v, u+ W
  699.       {
    % _" E% g/ n$ g
  700.         dwTotalFiles=1;+ Q7 l% c* _" B; m, B: \- Q/ @
  701.         dwDownLoaded=0;9 g7 K6 a& |: T( u
  702.         bSilentStep=TRUE;: c) @+ y) T. Q7 G6 h
  703.         bCompressed=FALSE;
    * V- o' \' I; o6 g7 |  z, m+ z
  704.         strExtLocal.Empty();2 R  v: ?( E8 w) j) f9 o
  705.         strFullName="readme.txt";6 y* d  O& Q6 L7 m1 x  N
  706.         dwProgramState=AP_CONNECT;
    8 D. G$ a5 [+ V# J3 @5 P; q
  707.       }
    4 i" `, n) N$ @3 b- d$ i5 j
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    0 n% k1 i' o8 i' L
  709.       dwStartUpSteps=2;+ R; x7 _- o( a0 U, Z) D
  710.       break;. [6 t+ G8 d" P+ ?
  711.     case 2:
    , i( D7 T3 i) |$ W5 Z, C
  712.       {
    3 l# T+ j1 }2 n5 t: L$ o
  713.         int iEOF;) I  G1 s1 ?' z  b! p- T9 B- E
  714.         FILE *fp;
    & n& z- w7 p! a8 D. v) B5 [  z
  715.         char szString[512];1 w- A: M6 z1 g, Y! C) P
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");1 E' e4 l4 G. o: s7 J( |
  717.         if(fp): g& C- A) q3 }3 h1 Z( S
  718.         {
    $ q. \% }# t; T0 d- L" D& A
  719.           do" Q' r" \% W  s% P0 r; s. A
  720.           {: M1 e. V3 N' [7 K; O
  721.             iEOF=fscanf(fp,"%s",szString);* {* g) _4 v: r( I" d9 }
  722.             if(strlen(szString))% K. [) i7 k* e; z$ [
  723.             {
    % `0 Q! n0 ?2 E* L
  724.               if(bFirstChar)
    % ~) P" ]0 ?0 M+ M8 r7 T: @" D
  725.               {
    ) o8 j; T) w& |
  726.                 bFirstChar=FALSE;
    % N6 m2 F' o8 y- V
  727.                 bConnectIsBig5=FALSE;
    # D0 K$ G7 E2 _% @
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;+ b0 b- R6 ]6 z
  729.               }1 E2 E& h/ u( c4 G
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));, h4 H# d" d, ?
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));$ s8 u* Q1 D: r4 }- @# j3 S
  732.               dlg->m_ListText.AddString(szString);
    ( R- d1 }# h. a0 l) R# e5 _" p
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 @  }. t( ^5 _1 y& o9 M
  734.               *szString=0;
    # \+ [# `1 b2 }% K: t
  735.             }1 G( O& n, }/ H  ]2 ?$ }
  736.           } while(iEOF!=EOF);) _, ^4 J3 T: D6 ?, j2 X
  737.           fclose(fp);/ D3 ~$ h4 C4 g1 @; r1 z$ n
  738.           unlink(".\\DownLoad\\readme.txt");
      @. ^  t0 p+ a
  739.           dwStartUpSteps=3;
    1 p* R- L* T7 _: w
  740.         }+ b4 _' q- s, e1 E" V7 u% K% e4 W. N
  741.       }6 \: J2 A: L: G
  742.       break;  a8 Q3 l. `! e. l' b5 c6 m, q
  743.     case 3:
    * y/ q$ Q! {8 `8 g  {* ]
  744.       if(!Dn.Connected())" E0 Z& Z& K  y$ [' d: |! O
  745.       {
      @3 {: B' m. ?, e: A& `
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ! t: p; {; a) q6 M, z
  747.         dwTotalFiles=1;' r) u" Z% N9 p& m. p
  748.         dwDownLoaded=0;
    5 M) ^0 N; u4 ?. a$ v5 }
  749.         bSilentStep=TRUE;# ^5 G0 C6 c8 r+ u  C& z+ |
  750.         bCompressed=FALSE;! G( R2 u2 S5 `) n. G9 X
  751.         strExtLocal.Empty();
    6 Q3 R! H6 V  [
  752.         strFullName="checkversion.txt";
    0 O7 J4 T3 D$ K# O% o
  753.         dwProgramState=AP_CONNECT;
    ; c' I0 S9 H# g3 ?
  754.       }
    % I$ v7 H+ X$ I
  755.       dwStartUpSteps=4;
    ! O4 ?$ v: n0 l* [5 h
  756.       break;
    3 m: g2 x8 ?# C" h" ~0 G
  757.     case 4:
    ( y1 q4 p" q* B; h
  758.       {6 t, ], m' s4 a6 h8 k0 a
  759.         FILE *fp;
    6 D+ B( |4 x) U' k/ G( w: e! C3 f
  760.         char szString1[128];
    ) R. d: d% Y  x) g
  761.         char szString2[128];" Q* u  f9 F1 I7 i2 P( a6 |
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");! W8 u; {0 J4 ^' F' ]) t
  763.         if(fp)7 L9 l- w; X- J& R# d# d2 _, o
  764.         {/ @. J0 d. K. B* z( [4 ]' @. N. _
  765.           fscanf(fp,"%s",szString1);2 q# C: w5 {  l4 q
  766.           fclose(fp);
    1 n# o* W5 n: h9 U% C
  767.           fCheckVersion=atof(szString1);& c, n7 T! N- F
  768.           fp=fopen(".\\checkversion.dat","r");
    0 ^0 ]  f0 O/ K
  769.           if(fp)
    + F0 t7 i- z* V
  770.           {% |4 Z( _1 ?0 m$ Y
  771.             fscanf(fp,"%s",szString2);
    $ Z  L% x4 K0 `' {  F
  772.             fclose(fp);
    / I2 |7 Y% ]& J4 x# X
  773.             if(atof(szString1)!=atof(szString2))
    ; o4 ]/ p# Y) h( T+ i
  774.             {* J+ L, G4 y6 n9 A
  775.               if(!Dn.Connected())/ k. g# O+ t8 o  Q5 C8 u& c
  776.               {) ?) f# R8 |; `- m4 ~$ L! H# @
  777.                 bFirstUpdate=TRUE;% ^7 ~# J3 r! E7 i' p* O" c
  778.                 dwTotalFiles=1;
    / X. N: _- i  [  w" J0 {+ S, y6 z: a
  779.                 dwDownLoaded=0;
    8 V7 y/ V' n4 h! ~  B1 d; ?3 W
  780.                 bSilentStep=FALSE;$ i& W7 ^8 E# u) F
  781.                 bCompressed=TRUE;1 m4 \+ ?- o& _6 B) f6 l
  782.                 strExtLocal=".\\DownLoad\";
    " [6 t  F5 z+ k5 A0 u  @6 T
  783.                 strFullName="update.txt";
    - [, u% G, W' {$ F
  784.                 dwProgramState=AP_CONNECT;+ Q( e& V7 S* |' f! ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" a" g8 c/ _4 {9 ^6 z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. S$ f: H( y6 H# [  G; ^
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");  z+ f" a4 I' q7 K" p9 @# Q' p

  788. 5 m2 [2 N8 z, x0 ]; `% P1 ?. J
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ D5 u4 Y' w! ?1 c2 ^2 Z% _6 Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");. j3 t0 ?' o  C% c0 ]
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)* f& q5 Y" N! v8 O  Z% d
  792.                 {
    & W+ K& _" j5 v" P; q
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    6 o$ ~2 ]5 B5 I, [6 ]6 H
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % F# j; p% Q* n% ]6 A3 Z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    9 Y2 e) b# P# b0 h0 F2 D/ U0 X
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; ~& g5 C0 H$ J! i9 b% F# O  y9 c. Z

  797. 8 w( X7 b0 x$ `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 U! M6 Y' y0 ]4 E3 q# Y- ]9 F
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ N9 Z7 ]! w3 o. `
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 E# W; w! v8 Q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      s# e8 d9 a3 }) _* [
  802.                 }
    . z) C: k/ @' b1 Z4 p
  803.                 dwStartUpSteps=5;
    8 o& A3 I2 K' F* [( i3 Z  ]" v
  804.               }4 C0 j  }6 W* d3 o  g$ d" m
  805.             }
    & a( C( `/ S: r
  806.             else
    - P5 M/ R  Z3 O% s8 P
  807.             {$ r* W$ ~( u, j4 o
  808.               unlink(".\\DownLoad\\checkversion.txt");
    # B' v- k( M6 [9 ]' a$ W3 v
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 M7 Q* n1 n9 D3 L! h. E, `( l
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. U, b9 s& D7 ?" K  V0 r
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");, A9 p  e, {! W& i3 P

  812. 6 T' f8 S6 B! }/ Z7 a( G. q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 R! z$ ?* L8 j; K4 D' m8 r. ~& Z: T
  814.               dwStartUpSteps=99;
    2 p3 j5 d" c) W/ u, O1 V
  815.               bFinishUpdated=TRUE;3 Z9 \( e1 V5 W5 N' r
  816.               bCanUpdate=TRUE;0 `' [) n. X& f* c" c
  817.             }( V) T: s: j# @" B
  818.           }
    * B: Z8 u9 Y+ |1 y
  819.           else
    " n& L$ i, V8 _1 Y! }, t- x
  820.           {
    : G' T, b! I# q: f7 Z8 |9 n4 n
  821.             if(!Dn.Connected())3 A7 i2 k. P2 s
  822.             {
    / P: Q8 I. R6 ~1 y; ?% U
  823.               bFirstUpdate=TRUE;
    8 `: p% r5 j0 w/ n7 }
  824.               dwTotalFiles=1;: A; \4 J& V7 h( U5 [5 ~
  825.               dwDownLoaded=0;
    + \6 ?" i. \* p& x2 H4 L) b
  826.               bSilentStep=FALSE;0 z5 l. G4 }/ o4 h( h! `
  827.               bCompressed=TRUE;
    ; u# i! }, w8 r( X; j9 k
  828.               strExtLocal=".\\DownLoad\";
    " u  [/ f. \8 X) w
  829.               strFullName="update.txt";- K3 N) l% x* j6 Y2 t! O) K
  830.               dwProgramState=AP_CONNECT;
    7 D( B! e$ d0 w1 X. o. q/ x1 i3 b
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 }) Q/ O, o# s" L. n$ f& L
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ i, K/ x3 d$ Z. Q  g. D- i5 P5 _
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");% |% h/ s+ L/ g0 h( S) s. k
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 W* Y+ M, K) C& s
  835.               unlink(".\\DownLoad\\checkversion.txt");
    / M8 E8 v4 ]3 R9 C5 U+ }+ `
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)$ D/ ~1 B+ K! K% B/ p' }$ Z/ K  e
  837.               {
    ' `; M/ Z) T/ F. o: K  ?
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");- I9 @( h9 J5 A; g% q% l8 a# y9 S# }& U
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    8 L  D  I: g3 |2 C' W
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    / y- `4 C( Y7 Y3 c7 }. l  J
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 M0 q. w( J4 i1 K: K- N" l  I: ^
  842.                
    3 y7 `' E. t  \7 u" U5 x
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # u! ]0 D6 ^/ a4 C8 n3 H, s8 ?
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 b6 Q4 x* q) b. R
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - y/ O6 u/ r. U+ P  O! T# @
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % ?" \4 A: g3 c8 n* K8 n
  847.               }' g' V8 A$ W" m9 ~
  848.               dwStartUpSteps=5;
    " u8 `, m- V6 E8 x* v
  849.             }, k. m6 [5 S1 O6 d( h9 K" d
  850.           }
    - i5 t0 D7 w3 \& G
  851.         }
    + {) }" s  o* R* M( _. P
  852.         else
    3 a! O, g) o' p/ L5 b& \
  853.         {4 a2 x' b* X' T+ c
  854.           dwStartUpSteps=3;
    - r6 H6 G+ T  Q4 f; L: X% C+ |
  855.         }
    . ~* ?) c+ F6 N1 F
  856.       }
    6 y0 m+ l4 N( r% Q& t
  857.       break;
    ' f% L$ B: n2 ^* _
  858.     case 5:) @- ~$ C8 v* H2 F2 Z; t* o; Y0 h
  859.       {
    % |7 [" z  R* ~+ C; o0 J6 R3 e! V
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    - E, W. k5 R/ s5 f
  861.         {: U) ^7 s( {' W  k7 ]
  862.           int opt_overwrite=1;( A- Z2 j' [/ O
  863.           int opt_do_extract_withoutpath=0;
    / W  I0 [2 d1 Q( G) _/ @
  864.           unzFile uf=NULL;
    1 I4 A8 L& X+ [$ o7 f1 s6 S
  865. " y  a4 A8 e0 P3 A
  866.           uf=unzOpen("Wsa.zip");
    * \) ]5 N& b( r0 e' v4 I5 ]
  867.           if(uf)
    , w4 u* E; X( @2 f( D" |
  868.           {
    % ?+ T: g9 _( Y' i+ k
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 V2 [" P! c) {: c/ W8 R+ h- f0 X. m
  870.             unzClose(uf);  q& t6 |; d3 V& q* c. G1 z4 \
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 v- c5 Q2 S8 }5 K/ `$ {
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    & G- u. Q) a6 u- Z6 x# T/ Q4 a3 h
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    1 t' ?+ C7 |0 Z& u
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) E3 B/ M0 d9 D6 x0 g
  875.           }
    $ R& G, [. s; h
  876.           DeleteFile("Wsa.zip" );
    8 o  M* k, j8 j! h. b7 u* |6 k
  877.         }" Q# m' [/ V, i1 x) p( G

  878. # |3 i. G( I1 d9 k! B  Z* o
  879.         if(CheckLocalVersion())
    ! Q5 o5 a+ j0 `! Y$ A! E
  880.         {# e3 G* V. }7 ^  n& J) i
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");4 n3 H3 ~5 F; e& P& q
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ! W% N6 L! h$ \" v5 a3 g, G
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");0 s; j$ ]+ Y6 C- ], q# t
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & c# l) S% T% t8 W' K
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);3 A( Y0 X& J% L$ S0 n" p
  886.           dwStartUpSteps=99;" w. t+ G3 I* I, l$ H
  887.         }
    * I2 T+ e- f3 t/ n
  888.         else+ R& s6 \4 h' P# O. m4 P8 S
  889.         {9 Y, j! i( h+ f/ D4 l' ]7 i3 M
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- \( A. ~: M5 \2 Z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / k# u2 I* h( F2 _+ k
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");% p' |# p' o# K# V0 `

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

+ c! N1 o! O  a* d& {! v
$ j0 n. x5 s2 w$ ]+ u1 c8 W' `; W: _

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-8 16:52

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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