CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
) A- E  @7 D$ r2 j
  1. / RevApp.cpp : Defines the class behaviors for the application.
    8 s! ^3 M7 X; d# ?2 ~" ^% m3 ]* q/ M. \
  2. //
    4 S1 S+ f( ~; \" Q

  3.   `' r' z* t: u  Q  K  F* a
  4. #include "stdafx.h"
    ( N/ v% y& i  ]( y4 P! K
  5. ( u, K0 k. |# o5 T& ]8 ?2 }' V
  6. //#define UNICODE" p" s: ~+ j+ N/ G: y
  7. //#include <gdiplus.h>$ o6 Z, x, u2 p0 M7 P6 g' `, @8 H
  8. //using namespace Gdiplus;7 m$ f( k1 ~- U% X0 f! B- u" ~
  9. $ P% r, ~1 s# m1 b
  10. #include "RevApp.h"$ d1 T: t5 [4 [" {
  11. #include "RevAppDlg.h", [. u9 ]8 Z7 b8 O8 P( I0 W
  12. 6 R/ i6 m2 [! ^8 y/ h3 S
  13. #pragma warning(disable:4786)
    4 x) G  O& c# ~0 p: ^9 f
  14. #include <map>! {- M3 n8 ?! v5 z2 F' d0 @
  15. #include <list>3 r# m  F2 p# V: [( Q: W/ @
  16. #include <direct.h>- M! }5 Z1 A- d3 g% f  }+ ?, t2 K9 E

  17. 9 V6 [. o1 u, w  N+ ]! P
  18. #ifdef _DEBUG  n* [* R% c  _& b3 D9 [( w
  19. #define new DEBUG_NEW
    8 @, D9 q+ I8 T* K  w6 i
  20. #undef THIS_FILE
    % \- g+ M/ k" F' E  p( Q9 K
  21. static char THIS_FILE[] = __FILE__;* l+ R+ F% L$ |, U6 y' l
  22. #endif
    + q  n5 z2 U5 h5 l9 |
  23. #include "SkinResDef.h"
    1 e4 q. S/ b- ~6 n$ `) s
  24. #include "ChangeBG.h") p/ ]( I( _+ [' S9 x) d4 r
  25. #include "AFXINET.H"
    ( X: \( J; N- o
  26. & b. n  [* k# ?3 w
  27. #define TRADITIONAL_CHINESE 0& ]# K3 H4 F" H# F) _
  28. #define SIMPLIFY_CHINESE 1
    3 I/ {$ J: o: D  Y. E! b/ V
  29. #define ENGLISH 2
    : x4 v3 Q5 F" w- {- E( `
  30. int m_iLanguage = ENGLISH;2 R7 C9 u( w3 J7 `4 Q
  31. /////////////////////////////////////////////////////////////////////////////
      [3 _) K% ^% S2 E3 `5 ^8 @$ g) k
  32. // CRevAppApp
    $ B1 S; r5 d4 ]7 x' X9 Y  k
  33. # @* h: a, X6 e
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)+ c) F! [% }5 W/ P7 V* m9 `( _
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    % h& |& |! }4 y& k3 @
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.: J/ N* _: T2 ^- R3 h% g$ n
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ! H: l+ Z4 g0 C( V# y& g5 F+ b
  38.         //}}AFX_MSG# W3 o8 G& k/ Y' N5 _# @" @& o, t
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% d2 v8 g" C( Q; E% s
  40. END_MESSAGE_MAP()
    2 O6 E" C/ v9 l8 j
  41. ; B% |( C) t. Q* E/ y
  42. /////////////////////////////////////////////////////////////////////////////
    % h) s6 ^3 ^# P$ ]
  43. // CRevAppApp construction
    ( f/ X4 n4 u) z' A" d/ A% }
  44. / W& X  n) H% h0 i: m' N
  45. CRevAppApp::CRevAppApp()
    ( d7 E7 k; q2 s; u
  46. {
    ) o0 f# _2 c6 d; S
  47.         // TODO: add construction code here,1 n8 s' Y0 V' h; z& K% K$ C
  48.         // Place all significant initialization in InitInstance
    " A( S; `$ N; u& @
  49.   bDisplayIsBig5=FALSE;$ E. i( N' s; u# W& [
  50.   bRestartUpdater=FALSE;% P" H  Y8 F4 |( x
  51.   bFinishUpdated=FALSE;1 ?& C- N! H, Q0 @
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ! K% Y+ s" c, [$ X, p
  53.   InitChangeDataBig52GBKS();' a3 i  F/ u+ ^( q
  54.   InitChangeDataGBKS2Big5();. a% P4 W/ }8 I9 C
  55.         //
    $ m! J$ ^3 r8 s* a3 j0 T( ~" s) m
  56.         bClickRunExe = FALSE;
    7 D* w! K. P4 q8 K% Q+ W
  57.         //
    * a8 q. @+ ]9 S" S, b
  58. }: X& O7 u9 |" L( }, G1 T
  59.   Q$ V$ R) l; H* |
  60. CRevAppApp::~CRevAppApp()
    5 I4 Y" g4 \! b; N7 `8 k: Q
  61. {: h9 r7 i! N' f' G/ c
  62.         // TODO: add construction code here,% c( L8 Q5 [% ^6 m0 H3 O- ]
  63.         // Place all significant initialization in InitInstance
    9 x3 M% G# q. Q4 U# I' t
  64.   EndChangeData();. M# p- b; H+ G- d% E
  65. }
    # p6 Z: x1 |; F8 f# I" o  s: v

  66. 4 d* H) q1 V# @; |9 N" F
  67. /////////////////////////////////////////////////////////////////////////////3 y- A: n, e+ B
  68. // The one and only CRevAppApp object
    # Z: W) c8 J# o$ M

  69. 3 f: V* N0 z0 b4 [5 a8 h9 h
  70. CRevAppApp theApp;
    : G+ ~9 M& F) O- p

  71.   i  }: a7 X' {: T$ r* y& T
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    " @. }: w1 B& P' \* X7 R7 k. C. D2 G
  73. {
    % \+ l2 m, d" r3 J: q9 N7 r, \! l
  74.   int iEOF=0;% |( z% e0 P" x2 d8 h  W
  75.   char szTempName[MAX_PATH];
    4 h0 ^) E% l) w+ D5 E
  76.   *szFileName=0;
    & Y( s, U' _+ [, Q& m( h
  77.   iEOF=fscanf(fp,"%s",szTempName);+ }8 d* E; j4 R# }# U# }  @
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
      y) Y. E2 X! W. Q
  79.   {
    * N, i8 H( w( S2 u7 t; x. R
  80.     strcpy(szFileName,&szTempName[1]);
    2 p8 s2 z; X3 K* j
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    * ^& |% Y* z( Y. ?& x
  82.     {, o4 E# [7 G% x& o6 o/ \5 N
  83.       iEOF=fscanf(fp,"%s",szTempName);* e6 }" A( K6 C
  84.       strcat(szFileName," ");
    : X- d* K! d2 g$ S
  85.       strcat(szFileName,szTempName);
    1 C8 G0 ^" K( s$ L. a. x  s
  86.     }
    7 y/ m0 I& J4 S1 W5 Q
  87.     if(strlen(szFileName)>=1)
      U% d7 @( u! _$ X5 a% s
  88.     {0 F. [2 C+ x6 X. y: f2 c
  89.       szFileName[strlen(szFileName)-1]=0;
    : z, ?! w" Q6 G- m* u& r* H" L) x7 l
  90.     }& w2 h) f* P/ Z2 p6 F4 ?# f
  91.   }! L+ g& X/ l, E1 e2 H
  92.   return szFileName;
    5 a6 t# M8 }. f% ~- E2 g/ U4 v
  93. }
    1 S: f( S2 n( T' m6 L" W- G

  94. 3 s3 w8 z8 ^! y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    4 e. E8 H" _4 R$ w# O
  96. {# \( \5 a5 A7 n$ Z! Y
  97.   FILE *fp;% m! j0 [+ N' c; r
  98.   char *key=NULL;
    3 z$ W- ?& i/ n
  99.   char version[MAX_PATH];$ I( v  w( Y0 X0 f
  100.   LPUPDATEFILE file,olds;
    : y* N: `/ `( y6 X3 R% a9 G
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" Q2 R! D4 y5 z

  102. # k6 Y- i( L; I% r0 m$ H' H( {2 C( Q# t
  103.   UpdateList.clear();/ Z8 e2 e3 j6 {& C; y) m
  104.   UpdateFile.clear();) I* K- \. B) \8 F
  105.   if(GetFileAttributes(filename)==-1) return false;$ b) d/ o( s! _
  106.   if(!(fp=fopen(filename,"r"))) return false;
    6 U& e: d4 J  ~1 J
  107.   fscanf(fp,"%s",version);
    : r) o$ d0 i  y* @+ {% u$ F
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    8 W( R  d. i% b) I6 Z& m  _* q
  109.   while(fscanf(fp,"%s",version)!=EOF)3 N: `2 l8 ~. C" K! J" I) p/ h
  110.   {
    0 T3 [) @& T1 A/ i4 ?' l  S! B
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - E3 u1 ~5 r8 h8 r4 q' ?& g: A
  112.     fscanf(fp,"%s",file->path);5 F( E1 q, S4 K* R% l1 V
  113.     ReadFileNames(fp,file->file);: i. e3 P$ u) j/ E) r8 I9 X
  114.     strcpy(file->full,".");0 }3 N( o9 y3 J$ B" D) c" u
  115.     strcat(file->full,file->path);2 J* H0 I( m* E+ `$ }
  116.     strcat(file->full,file->file);, T* r6 `2 V. }! k$ q6 S, e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
      n/ {: a% M+ e1 L3 D
  118.     {
    - j7 `" c/ W2 h  h% s" l  Z
  119.       file->vers=(float)atof(version);
    . Q# C) E2 j& }$ Q8 H
  120.       UpdateList.push_back(file->full);9 r3 a7 n" C! l( Q0 k" P
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    & o% I& S# p5 f. |) D  o
  122.     }5 d. A2 w4 h5 @1 E4 c9 h
  123.     else8 m" r5 V) {- k, G
  124.     {
    1 m- e/ d' U1 ?" j
  125.       olds=(*p).second;
    . I  ?# u7 b$ M5 e
  126.       if(olds->vers<(float)atof(version))+ `4 e- `% y! V1 M
  127.       {
    2 m; B# b8 f  H  ^; I
  128.         olds->vers=(float)atof(version);
    1 d  |* [2 r6 H$ v
  129.       }3 i9 T5 l( U3 |, n0 _0 o
  130.       free(file);) y7 ?9 k* A) P) G2 |# r
  131.     }
    0 s8 F* P6 D! M0 G( T
  132.   }6 w& U7 [, J, U
  133.   fclose(fp);
    - Z* v8 v1 [- J! j: b# l- h
  134.   return true;
    , I, M/ v, G3 i# [( u, B
  135. }- Z7 w/ \. W5 k7 s& F& I
  136. : r! u. ^7 H0 _; z! M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)) T" Y, d) N! ]' I& [& m
  138. {' C. t% Q4 y; i0 p! {9 @- R- m
  139.   TCHAR  szFull[MAX_PATH];
    # k. n; _1 f) I7 s
  140.   TCHAR *token,*inter;
    7 }7 o- k" E8 u$ Q! ?
  141.   *szPath=0;
    0 u/ o& U( o) |) W  T; \
  142.   strcpy(szFull,szFullPath);  O7 f! h8 d- i% H+ e
  143.   token=strtok(szFull,"\\/");# O# ]. @3 h; d/ j. A. x( O
  144.   inter=token;
    ! T7 [  J7 {" b+ n
  145.   while(token=strtok(NULL,"\\/"))
    9 ~( y; t4 v% C7 X5 V
  146.   {, R  @7 Y4 M5 b" \* S
  147.     strcat(szPath,inter);% c* F1 B$ u2 A: A
  148.     strcat(szPath,"\");, d6 h. F1 L; F7 C% x* \
  149.     inter=token;
    7 |: Z- q# s' g
  150.   }
      A: ^6 O( A* h5 @. g
  151.   return strlen(szPath);* Q$ p4 B& _* `" n0 w2 s
  152. }
    % }& K5 v- o$ A' x. H
  153.   u/ l2 k' g! U' g5 N$ {; f
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase), L6 _2 X& T/ J7 h$ [3 ^4 i
  155. {
    " Z2 j8 G6 {( O! `
  156.   DWORD attrib=GetFileAttributes(Target);6 Q7 X8 d, Q: T8 h  |# `6 Y7 B
  157.   if(attrib!=-1)
    9 p7 D8 t- [* y# n# J
  158.   {8 N/ H* S  r7 B, m3 C
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    2 G2 X$ ?, ^2 h/ X
  160.     {2 G9 t1 c3 U8 {. {
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);! g; G% \; S1 q  m' C8 h
  162.       SetFileAttributes(Target,attrib);4 W' d/ c1 S9 J  U2 `
  163.     }3 c8 g; k9 U: j5 M* [
  164.   }9 _) w; h/ g, J/ T' \
  165.   CopyFile(Source,Target,Erase);
    ; A8 J" a0 E! Z
  166. }+ G9 V, H/ s2 C! X
  167. 3 E3 |2 J# J) c
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ z2 y4 M  }/ ]- i9 A' p2 v1 |
  169. {
    ! W8 J% K9 J# K/ R2 {1 t: e; S" G" G
  170.      FILE *fp;0 A& H* D5 i* O$ ^& `3 z; D4 c
  171.      char  szBuffer[8192];
    * E3 Q8 J" K2 l
  172.   va_list  argptr;* @) Y9 N3 |5 \6 J7 @5 y9 b/ L
  173. , ?) l" j  _& C; B9 l
  174.         va_start(argptr,message);. W3 ]0 W4 V- e# s2 d
  175.         vsprintf(szBuffer,message,argptr);
    / c0 Z1 d6 Y! d) w6 n+ R
  176.         va_end(argptr);
    " O5 ?2 \5 f: {
  177.   fp=fopen(FileName,"a");
    ' `9 H" _9 e* ^" f8 P7 ^
  178.   if(fp)
    1 N3 G; ~5 N( k8 N+ E
  179.   {, Z; v& n1 B* a3 S" q$ N4 b
  180.     fprintf(fp,szBuffer);2 P6 Y6 Y+ \3 E* h
  181.     fclose(fp);
    % {1 H+ |  X5 E; G. Q& b6 M0 T  J5 v
  182.           _flushall();
    ' \/ U+ J" X3 H- p6 Z6 b
  183.   }
    3 E. ]1 ?% O/ G0 y/ Y4 ^0 `, ]
  184. }
    1 [% U$ P8 n" d! c
  185. 1 G5 H5 Z( Y8 b0 n1 U9 X
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 d2 m$ @9 `5 P
  187. {0 z) t& o) V. \- a8 Z' D
  188.      FILE *fp;7 [8 [1 F8 g, ^3 j. C
  189.     DWORD  attrib;
    + ^9 |7 [( Y. b" a4 F; u- y
  190.   attrib=GetFileAttributes(FileName);/ Z7 o; R: z0 n/ `9 |% |$ Z
  191.   if(attrib!=-1)2 P: o& ?) N: S9 a7 `  s
  192.   {3 _: j9 |6 ]) W' J! S5 _& E
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 x8 Y" O; D; P! F
  194.     if(!SetFileAttributes(FileName,attrib))8 d& u" X( o: }* c8 }* S/ u
  195.     {( d0 r8 `9 n0 \, m7 [% N8 U* w
  196.       return FALSE;, V% L2 n9 Y' j& e8 p6 R
  197.     }
    & _$ s1 S* {* G
  198.   }- o  s4 J! s1 e' k! n$ D
  199.   fp=fopen(FileName,"wb");
    7 X" R* r4 m- W, S6 X# N& e# }. g
  200.   if(fp)  K" d  j, {; G0 L4 {
  201.   {& p: ^5 B) s0 N
  202.     fclose(fp);+ a9 \5 B1 W. f$ d) _4 c
  203.   }
    3 }6 L- t) r4 E7 g9 o3 v- D
  204.   return TRUE;7 u; q0 i5 @8 h
  205. }, p: F" [9 L0 p& B* `+ c0 s% S
  206. # |. v- h6 c1 u! _0 k" ]/ v! R2 V
  207. BOOL CRevAppApp::UpdateLocalVersion(void)2 ]! H) X. l% r9 i- m) a
  208. {+ H: s# I2 Q8 V1 O
  209.   char filename[MAX_PATH];
    8 n" ?9 r4 D) H+ Q( W' O/ H
  210.   LPUPDATEFILE file,olds;, `' ^4 d& z, f8 n6 w, ]) Y
  211.   std::map<int,CString>::iterator i;' h& ?6 Q- m& P4 k( a9 A
  212.   std::map<CString,LPUPDATEFILE>::iterator p;3 l  D  F8 }' L2 L
  213.   std::list<CString>::iterator l;
    # j" }1 o: ~  ~& ^& w

  214. 5 V  j4 J+ v; V/ ^1 k- ^# ~
  215.   if(bFirstUpdate)$ x4 q; u8 _2 }1 ]: s$ L" S
  216.   {5 s% H& ^+ m& _) A
  217.     dwCurrFile=0;
    $ B- K* u: L) Y9 {+ W8 _
  218.     bFirstUpdate=FALSE;
    4 s/ P% l  Y! ~
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 u& `  A) i7 S* C" L- b
  220.     {: x& s$ H# y5 S/ g! H
  221.       dwTotalFiles=UpdateLocal.size();
    - @! r' c+ y+ }+ ?- m8 T
  222.       dwDownLoaded=0;$ ~& r* a& Y5 O$ N6 G0 z; z
  223.       bSilentStep=FALSE;
    5 }: H) |8 x6 J1 w$ a" p1 o
  224.       bCompressed=TRUE;4 r1 c$ f' F6 P1 i/ C$ \
  225.       strExtLocal.Empty();- D" _0 R$ ?! N8 i
  226.       strFullName=(*i).second;
    $ M2 g; G$ Y, D
  227.       dwProgramState=AP_CONNECT;
    - f, ?  o, k5 e8 ^! Q
  228.       return TRUE;5 w* X& n! ]% I
  229.     }
    2 d/ d: w$ E# G3 _9 O# F  a
  230.   }2 J; d4 ]5 m6 p7 j( \4 d/ J! V# Y) L
  231.   else if(bRestartUpdater==FALSE)
    3 x8 E/ `8 R$ C* J5 B0 b
  232.   {
    + J$ z3 j' D) V; X* t" r
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    + Y6 p+ N/ s) q; G
  234.     {
    ; i: b: V* ^% E9 \
  235.       file=(*p).second;
    ; h! L- t% J) e6 T" v
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())) T# _  ]+ q8 n/ i. u; ?& ?& R* [& |% y3 o
  237.       {3 y7 Q+ ]3 P+ |  ^
  238.         olds=(*p).second;
    8 E- O5 b! G* T* r& D
  239.         olds->vers=file->vers;
    2 z$ B# H  I1 L" ~6 Y. Q
  240.       }
    ' S. U7 \/ z0 K8 y+ g
  241.       else+ ?1 C% ?$ @" Z6 ~
  242.       {( x# h, q$ x9 }7 c" b  w
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      V* M% g6 G* T) O* W% z
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    - w) |% X# q4 i6 T
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    " ~! h9 l* i/ U
  246.       }; I9 G& k8 V1 Q" [, d3 n6 F* [
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");5 M8 n9 I& c9 u% h& O
  248.       sprintf(filename,"(%s)",file->file);
    5 h0 g5 o  t7 y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! q: G! p2 R/ p8 D8 L/ g" b
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }, `3 b5 i& |9 `% M/ Q, u
  251.     }
      P5 A2 S! X4 b, H2 \
  252.     dwCurrFile++;
    / M( B- a7 g3 m8 I# y
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())( t5 z  r4 ?. t% P0 [) ]
  254.     {' L. _! Y# K; L. l7 k0 R+ \' [. L
  255.       bSilentStep=FALSE;
    3 Y; Q) G7 D  J. U
  256.       bCompressed=TRUE;
    0 p! k. ~; p% B
  257.       strExtLocal.Empty();4 `* |3 Q- y' Q
  258.       strFullName=(*i).second;
    - r1 G4 y( j7 u( k) x% m
  259.       dwProgramState=AP_CONNECT;
    " s: d) h! K6 r, i" W! b
  260.       return TRUE;
    6 T* h- K+ t) m" M
  261.     }
    , }& z+ y6 O3 c: F/ ?9 I8 X$ Q
  262.     if(!bRestartUpdater)
    " N. b3 G' S$ `/ X; i7 O# L# @; l
  263.     {, Q- l0 X6 d+ V7 N* Z7 `
  264.       int iCurrSize,iFileSize;
    7 d3 Y; u6 c$ o# e" [
  265.       iCurrSize=0;
    $ T5 l" d+ }! [1 \# b; D7 }4 a
  266.       iFileSize=UpdateList2.size();
    8 D( |2 L2 R5 P+ q; n/ q: l3 B
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");7 H) u' s! r4 Q+ s0 q" [1 {
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");8 y  I! {$ ?) S+ O0 \: c: n0 y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! M8 _* B8 J5 r+ y/ W9 \) j( _# B" p
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- v  T+ s6 H* D3 P; h% K
  271.       Fclearf(".\\update.dat");, ~6 `- J/ F* W, c8 c/ b9 A
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    2 ]! ~6 V' E: s9 r8 @1 p
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + y$ g/ b- i' ?9 G9 a) D" F+ S
  274.       {
    4 X: w$ ~$ d* V; ~  @! t
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  B/ C- i# F8 t5 {8 r9 k: B
  276.         {; ^6 [4 O1 P+ ^8 |& ]/ V
  277.           file=(*p).second;
    8 k" a) W1 H2 c" j
  278.           sprintf(filename,"(%s)",file->file);( G3 F) ~% @) T1 |9 o% r6 U5 s
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);9 P9 C, i7 n! |' p. h6 G* q* k
  280.           iCurrSize++;
    ; S; W! A+ N/ x9 h: N
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    - O  X0 j# D1 _5 ~5 g* \# x# n
  282.         }" o6 t( N- Z9 [! u2 ^
  283.       }& q6 U. W' w& ~5 U; I
  284.       unlink(".\\update.txt");4 |# Q+ n( O6 o$ Y" n0 Z  i
  285.       unlink(".\\update.tmp");
    1 V" h4 O+ j" h" \; G; @
  286.       Fclearf(".\\checkversion.dat");1 \, Q9 {  c( z& b1 w, z$ ?- D
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    : Q( M" j% F8 [2 G  l+ T' h
  288.       if(UpdateLocal.size())
    . @) O) N# ?2 w6 ]% D- M! Y( o
  289.       {& e/ m" z" d) i
  290.         UpdateLocal.clear();
    ( y1 o* S8 m' h9 U
  291.       }
    # `  Y% K) o, S9 z" v9 R* ]
  292.       if(UpdateFile3.size())
    1 h5 `% t6 u& F8 \3 D9 O7 ^
  293.       {8 n& R/ }+ f" Y/ f1 u# m
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % O( H% m& J6 R( }1 P0 a
  295.         {5 u1 b. e: d1 k. }" h* Q
  296.           file=(*p).second;7 a5 [: s" \6 I
  297.           free(file);7 q1 {" O( V' U; |8 r8 a
  298.         }: S# {! q' s% f3 v, I8 D
  299.         UpdateFile3.clear();
    ( N6 X$ l- b1 T. ]
  300.         UpdateList3.clear();
    : F4 Y9 }! z9 j5 r5 ^. c7 h
  301.       }
    1 A5 g" |6 J: h4 A- R
  302.       if(UpdateFile2.size())
    6 x+ C4 A$ V7 ^5 A# f3 o% q
  303.       {2 v$ F% `6 Y! o/ ^1 _8 O
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)1 j8 N5 N2 e8 o
  305.         {* K: a+ V/ n7 C9 o9 L& N4 ?
  306.           file=(*p).second;
    2 z3 J/ S" \* U, S! o3 R0 a; q8 ~8 t
  307.           free(file);
    : y1 H; f) e1 W, S' N+ H5 c% u
  308.         }2 t3 s2 q" C$ ?- v; y
  309.         UpdateFile2.clear();6 L0 V) ]; N! m* v
  310.         UpdateList2.clear();7 Z. g% J1 F, J! k- z% @
  311.       }: ^) Z6 G: X% c9 E6 _" S! c' F
  312.       if(UpdateFile1.size())
    0 x/ s9 N6 o# K  G/ I1 X
  313.       {
    / n- Z: e% M! V0 i  Z& g
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 `% |( ^  t- ]  V' K9 }1 L
  315.         {2 g, c. c0 {0 s( j
  316.           file=(*p).second;# A9 d% y& I2 @. D  T# e
  317.           free(file);
    . N# X5 h$ L: W, k+ F5 F4 f6 T
  318.         }1 F, m, E* a' v& w: G: v
  319.         UpdateFile1.clear();- j( n% v$ l9 i+ I2 ]
  320.         UpdateList1.clear();1 V6 T% _  O/ k; C
  321.       }
    4 _: W: L& E# }0 G+ P4 L
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));4 I9 ?# d5 V$ o
  323.     }6 p9 @9 i! ~2 G. e2 G4 \% N
  324.   }- i# n+ D- B7 w7 J  D6 I$ H# r/ {! y. `
  325.   return FALSE;
    5 c; [8 }4 N0 w) b* P5 m0 U. [2 X- B
  326. }
    * v  D2 i: [) ~0 V

  327. ( ?3 z& ~4 x/ A$ ^/ F2 D
  328. void CRevAppApp::ClearAll(void)
    # i; x2 Z/ o# A) a
  329. {
      ^' \% @# d, K) M
  330.   LPUPDATEFILE file;$ V# E; Q4 D$ ~& @3 |1 F
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    - P2 R$ o5 ]6 W' o5 s$ G- O" i

  332. $ q( s$ [) Z7 A; W' k
  333.   if(UpdateLocal.size())1 D6 G7 V, W# X  q
  334.   {
    $ q& ?+ N! K9 s* d% w+ h" U1 H
  335.     UpdateLocal.clear();
    $ k( F0 R6 }1 @6 E
  336.   }+ k9 p% B4 u4 \4 [& L  V- j+ L. R
  337.   if(UpdateFile3.size())
    $ I2 [; J% J3 S& b# O
  338.   {
    2 S! q4 j4 h! n* z3 i3 |  Y9 T" ?
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ S3 \1 |+ h: }# Y+ _) ?4 ~  m
  340.     {
      y* Y8 ?  M9 e: c
  341.       file=(*p).second;
    % N; `; o% _- i" X! x3 e7 K6 g
  342.       free(file);
      x* V% l6 V, I) c/ y& D& R2 A% ^
  343.     }$ R& V1 R) F$ ~" l
  344.     UpdateFile3.clear();
    " y0 H8 d' [( v
  345.     UpdateList3.clear();  R3 n7 A; j( j% h4 G. l
  346.   }
    7 x4 |9 J7 `- A5 U+ z3 S# d
  347.   if(UpdateFile2.size())+ q$ X- y; Q! o' a5 F
  348.   {
    - m7 y- e( X# x. H. S3 O0 C
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " _6 ]" x0 _3 d6 O7 L6 K0 k' N, Z
  350.     {
    4 Z: p# ?) g! W& U: o1 y
  351.       file=(*p).second;
    , i* _$ }. T9 [; i$ F$ X5 G
  352.       free(file);2 e7 d9 T, ?0 O! U9 l& r+ q
  353.     }# y1 [, @9 y- O! }; V5 `6 d
  354.     UpdateFile2.clear();
    $ _. m0 L$ ?" [' F" W, B1 B5 D# F
  355.     UpdateList2.clear();
    1 F- F- M$ x# t( a4 [
  356.   }/ X" x. e; w9 z% [. a" h  c. e
  357.   if(UpdateFile1.size())
    % s$ K; Q; u* c4 g. c4 f3 t- E
  358.   {
    * k4 f2 a  d. {& [
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 A9 t5 n& q/ G
  360.     {
    ' ?) t8 Z$ h; \
  361.       file=(*p).second;
    $ T8 ^) ]. x0 d* p# f/ ]
  362.       free(file);2 V0 Z$ y1 ]0 r4 S4 `" |' r+ H  A
  363.     }
      k" {" T0 D7 R+ ?  j
  364.     UpdateFile1.clear();& J9 J: x5 n0 C
  365.     UpdateList1.clear();
    ; f/ F) o; m; n+ D
  366.   }
    - b+ g" r8 \% J" m/ R# ?4 N' [
  367. }  ' X% y0 P% B% ^3 ]7 y
  368.   
    4 t; W# J/ ?0 U# A* L
  369. BOOL CRevAppApp::CheckLocalVersion(void)0 |2 e/ G" n( `
  370. {
    ' z  L9 m9 S2 N9 P
  371.   int c;
    * Z( g. k) ^( p- Q' N
  372.   LPUPDATEFILE file1,file2;
    3 ]$ }5 v7 }" `7 |* l7 ]
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    1 x% |8 \6 f1 s7 B8 Q5 t$ @$ l
  374.   std::list<CString>::iterator l;
    " d1 b2 ~' p: ?" E$ }) Q) h

  375. - S; z! Q0 g( U; i9 i( q: c4 C7 w
  376.   UpdateLocal.clear();
    8 ]2 v- c4 Q& l. h1 k, q- m; I
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    + h, F) e3 a4 s8 s( L3 b' S% z8 u; W
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);9 I. v- v" r$ L. ]! x5 _
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + E9 d/ J5 l3 K/ L! t
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);8 G7 {1 P% S% _8 n8 H6 h. w, t
  381.   if(UpdateFile3.size())  N+ I; s' u" o  O; U) S0 H) Q- G
  382.   {
    " F: H5 u  p! D! p/ ^6 h9 Y+ D% @' i
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++), \  w0 L' S+ R8 J# o. p9 C6 V
  384.     {; B( U' t' n0 }. N: v+ X
  385.       file2=(LPUPDATEFILE)(*i).second;! f! O! x6 s7 i6 {7 i7 }. {
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& z8 x$ H3 F# q- R
  387.       {  G/ @6 z- M3 v
  388.         file1=(LPUPDATEFILE)(*p).second;
    5 H% i/ B5 [4 q6 a5 j) J
  389.         file1->vers=file2->vers;
    / ]( K$ A4 ~* i8 s. n* F
  390.       }, c1 b; S8 S0 k, F& m
  391.       else
    # V  G/ a- A$ Q/ y" K: u) P9 R3 @
  392.       {
    ; N6 Y, L" B0 _: x) e9 J5 c4 a
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 W. c* c8 I3 r' j' @6 s0 N5 l; |
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    + u, R+ d1 R3 P  {7 z
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& A  v% z/ w$ R6 Y2 \: `# R/ Z3 \* F! G
  396.       }  ~( ~5 W% I. }/ {: y( Q' R
  397.     }
    4 z) j* g% z& y9 o8 F7 W9 Y2 ~
  398.   }: y! Y; q& l+ R& I/ r* s/ v" m
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)- c! f# u, y& B8 D
  400.   {
    9 {5 }2 f1 ]" E0 p  `7 Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    / Z: A# f3 \, ]$ F2 Z" _3 k
  402.     {/ P5 r7 ]' n$ Y- P0 {9 Y5 Y" N' b
  403.       file2=(LPUPDATEFILE)(*i).second;8 n1 W+ `' B3 q1 N% D6 I; C5 ^6 U; \; Q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 S8 I8 V. z  X. R
  405.       {$ y9 O1 {# T% y1 X' R% `: m
  406.         file1=(LPUPDATEFILE)(*p).second;, }$ ^! I. g& Q# r
  407.         if(file1->vers!=file2->vers)7 ?9 V3 f3 Q% o
  408.         {+ x& H% Z' o# h- B9 g4 r
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 t1 x9 Z. `9 h$ S0 t
  410.           c++;
    # K" q! V5 ^1 i: S
  411.         }1 Q2 W0 m; _3 z) l
  412.       }
    2 a3 i0 s: H, n
  413.       else5 _; L3 H: Y5 v- X
  414.       {
    # A+ P0 W6 J3 H) T% w  @
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. j2 _& i  y" _
  416.         c++;
    % }: k! h; E* @; g$ a
  417.       }1 j9 l. j7 u! e5 O5 {% Q
  418.     }
    , ^3 k/ m0 E# D( D$ J/ Q3 b$ o
  419.   }3 a. u  b. U6 m+ S6 ?- t2 X
  420.   unlink(".\\DownLoad\\update.txt");
    5 O" u+ i; a* P/ U& O, S
  421.   if(UpdateLocal.size()) return TRUE;6 G+ X9 S' @8 L" @( t) U, f- V
  422.   else                   return FALSE;
    3 |+ y) P0 R2 n2 c( b. n; z) ^$ S
  423. }! s. e  d8 m/ C6 Z) J# ^0 C
  424. # h$ t5 S$ T8 @9 ^; ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    8 i- z) `7 \7 n$ {7 b) m3 l, F
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ w, h2 ]* [. _7 E! d
  427. , r+ M3 P* [, o/ s& {# i

  428. , Y" F+ F' P2 b/ g- z, K
  429. 4 Y* S5 H5 U! X' a  i3 S
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    2 \3 h6 w- U* z% b7 o
  431. {
    % G2 N7 Q/ v2 A- T- ^2 l9 t  Q" W, G% Q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 m; i3 Z# m) \6 b
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ O) a+ w* Y  e6 W
  434.   {2 ?- z. W8 i" A: k8 Y- i
  435.     char szLanguage[50];
    ) h6 I! d8 h9 {* U% Y" j
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: C9 G- g' m' Y( z# v4 u
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & o$ R  B/ h) _0 ^; ]" w
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    , {0 d% h0 P# H! ?% Z. f
  439.     else                                   m_iLanguage=ENGLISH;: q7 Z' ~$ }, E8 ]) S
  440.     char szRegister[100];3 A: ], _8 E' r( k% c$ L
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 M/ Q3 I6 `3 W& Y
  442.     strRegsName=szRegister;2 {" x; P  i- \2 m9 W" u# \
  443.     char szPatchURL[100];
    9 c! @5 Z+ K% }
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- x& E: a0 Y) _& e
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 [6 X3 {2 Y' k; l& U6 y, Z
  446.   }
      H# |3 B4 k* U
  447.   else, O8 c$ K  N1 o
  448.   {: L3 X1 T# L* Q* H: g4 Z
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  d- o0 j) }! K
  450.     strRegsName=DEFAULT_REG_URL;
    ; v- {9 \0 v" ~* i
  451.   }
    : {9 l8 k& o6 S
  452.   if(GetFileAttributes("hosts.ini")!=-1)8 j7 x3 P# W' k0 X
  453.   {
    & |, S( }5 D% w
  454.     char szIP[50];
    + t; w7 G" W; q5 u% y; d
  455.     char szDIR[300];
    ' n5 e2 M0 _, c7 `: E5 z  p
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % \" O" G" ^$ o1 `. `) n
  457.     {7 U) i9 F  n2 m
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    , ~( g& x. X& h
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    5 p- X, \# e7 D) q4 Y3 O
  460.       strHostName=szIP;
    & S$ [2 {0 ~( n7 e( i$ X
  461.       strHostPath.Format("/%s",szDIR);/ d4 S# N$ C) F
  462.     }
    9 O; a3 k* o  Z; P# @; w$ Y
  463.     else( v1 `" q: x7 \+ m: s
  464.     {
    , I* t7 L+ r; P
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; R* k6 J  B4 g1 |
  466.       {
    8 i- r) z2 G* ?0 J
  467.         char szLanguage[50];
    . d* H! Y& K4 H+ I9 A: j4 H8 [- L
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  u4 D" ^+ \$ p* u' K# t
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; Z  X" T; V0 e% B9 e3 Q4 N6 T* G
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 W6 h# z! G7 m9 J8 }
  471.         else                                   m_iLanguage=ENGLISH;0 _* J- I8 L5 e  e: e
  472.         char szRegister[100];0 J# A5 M: A+ K% @6 L
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " _$ l- h! d5 E( @$ \! T* G
  474.         strRegsName=szRegister;
    8 n! G$ q% R( g( o) M- O
  475.         char szPatchURL[100];/ O# }) v5 Q$ f
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" O: K1 A. n; o3 P" y1 @, \# v
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  R: g, v3 y" q# _" n; G7 y
  478.       }, Z( |0 R$ H, R
  479.       else+ j  @, Q1 H# m- u' U, b
  480.       {
      e) ]) y2 F. c- \5 h& x. G! D
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% @8 Q9 {4 H+ v. J# R9 P3 `
  482.         strRegsName=DEFAULT_REG_URL;! O- G+ {" v; J/ e
  483.       }
    ( Z$ E+ d- w/ {* m2 M- A" D
  484.     }
    " h" ^# W0 o( ]1 x6 g8 N
  485.   }$ a9 P8 O$ G7 p$ C7 q& q: l
  486.   return true;
    . G1 \2 o" w8 c) r9 @3 q
  487. }
    ; p$ O/ \& u7 ^8 X$ X; _% H
  488. 9 R: w1 o' r# o' Q& b; I3 T# \
  489. #include ".\ZLib\unzip.h"
    + ~  q' ^# d0 s( s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);$ ?6 f% z# _) B0 R% @) l& g; f) E  G# ^7 \
  491. /////////////////////////////////////////////////////////////////////////////# G$ @. G% l6 C0 X
  492. // CRevAppApp initialization
    6 [) m) w7 r) ]2 h

  493.   O- I! ^; c0 E$ ]. N
  494. BOOL CRevAppApp::InitInstance()& S6 i" i1 E% y. p
  495. {3 m8 n. s" n3 v% E! A# b
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ; O- ]# C2 T7 q  v* I
  497. : Z" b3 |/ A+ [# {
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    : u  P  b3 Q9 W& d
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    # O/ L" Q8 V6 p8 G  ?
  500.   {/ i+ J; Z/ i! O" y) x
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");) A! L* K6 y. ~) a- o2 c1 O! P
  502.     GetPathFromFullPath(szPathTarget,szPathSource);) K( J; a" k1 R* o6 W, y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 e( p! R6 I! K( T& v2 a( S
  504.     {3 a# E- J1 D; N) E* K2 Z
  505.       strcpy(szPath,szPathTarget);
    # e- H4 A" R# f! R# u/ R  b( P
  506.       SetCurrentDirectory(szPath);# n( x$ U8 D' x$ H( f
  507.     }+ e/ W( W1 J0 q$ V0 i
  508.   }
    7 |! s( Z% T! \/ W  i7 ]
  509. #ifdef _DEBUG5 C6 [/ C; U9 {. ]
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 ]9 Y+ A* Z" f1 A* Y9 m2 O! l
  511. #else# _1 N0 f! ]$ x) z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , L# B! U% W+ A- q" S  E
  513. #endif
    ) B% w/ R$ N2 Z9 R7 H4 Z
  514.   {
    ( R: G. \5 K& L* z2 o% k  O. N
  515.     char tempFileName[MAX_PATH];
    - v1 [8 r$ f/ f  W) N5 o, o6 U
  516.     strcpy(tempFileName,szPathSource);, ^  G' ?  q0 V/ [- @' t0 b
  517.     tempFileName[strlen(szPathSource)-12]=0;
    5 M* f* \& ?4 n& l0 O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 c# D8 y9 R, [; Y% R1 `% a
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);  G& ~/ P( `4 H5 ?6 n
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    3 ^" v: Y3 P  a' o- q; t, N
  521.     return TRUE;+ ?2 y& Z* R8 m9 r! I+ r
  522.   }
    2 R& x! @2 O1 x- V* }% R, d
  523.   // Nuke 0118: Delete run.exe
    7 Q2 F: i( d* z7 y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );& o1 Z* Z$ w: V+ E
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) r5 `, |7 R; f! y% C" I
  526.   if(!ReadCfgFile("Config.ini"))
    , ?: |$ u, y; S$ \+ I4 P) i
  527.   {$ ~& b' v. d( d& U
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    # `7 v( a& S; W" i/ e
  529.     return TRUE;
    1 Q$ K: S2 s& M8 `& G( _6 K
  530.   }3 o7 G( }% [* e) O& x+ p
  531.   HANDLE mutex;
    ) O' i% T1 s/ X" Y
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% I9 a5 P9 S* |* p1 d* I9 Z& \
  533.   {
    " H6 [9 Z/ @' n/ u! {
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    , x1 i/ O* T8 G
  535.     {+ s4 t# U8 N, L$ q; M2 {# Y
  536.       CloseHandle(mutex);
    : H, }6 o) ~$ O4 o6 p. D
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);# {4 @: Q9 |5 i
  538.       return TRUE;9 b- H1 _8 o; O" I, I8 Z
  539.     }
    ' P  B$ ?  D  q! q' r& {  r
  540.   }  
      f6 @) z) O3 e+ F$ C# ?* }
  541.   CloseHandle(mutex);
    ) i! e3 ?6 t/ m1 Q+ _* Z. O, K
  542. ; ]6 Z5 Z" m# s  W% v
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);9 g# `/ v/ F1 U1 x2 \3 L: e
  544. - C. h% g9 O& L& [9 C, A7 ?
  545.         AfxEnableControlContainer();) x1 M8 d% t7 q8 @) t4 C3 R
  546. 3 Z# [! E- B+ l. ^- W3 o
  547.   bCanUpdate=FALSE;- i7 p& N0 Y  }( s- U
  548.   dwStartUpSteps=1;+ ?2 A9 g; Z1 O+ a
  549.   dwProgramState=AP_NOTHING;+ \+ E0 B' V3 i+ u

  550. * A1 w. b7 m/ h. S1 M4 G* ?
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);. r" |5 f. X$ C. N$ Q
  552. % b0 _9 i: Q8 s
  553.         // Standard initialization
    6 I7 L1 w+ C- I6 W# i2 ~; q
  554.         // If you are not using these features and wish to reduce the size4 h) ?* P+ Z1 q) ?& L
  555.         //  of your final executable, you should remove from the following
    2 h* I+ m, \+ c6 v7 j
  556.         //  the specific initialization routines you do not need.( J( _! W' `6 `. P& b' T) J
  557. 1 Q% E' v  c; ^3 T
  558. #ifdef _AFXDLL3 J2 N9 W( i% Z# F2 e- ^: [9 I/ k" Q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ) z& m4 @1 Z" E7 V- y* u# d
  560. #else% J  @3 H' I. D/ d
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically# B; Y- \2 B2 K' v* e
  562. #endif
    5 g; v! V3 H* I1 [
  563. $ D! T; u0 t8 K* w' X6 G
  564.   dlg=new CRevAppDlg;' F9 U  O4 ?( L- Q3 o8 Q
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    $ w* H# b2 F/ u& ~' t
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + `/ v# ?' ]6 ^" q4 B
  567.   m_pMainWnd=dlg;: y6 p5 m8 x8 x( C* G: o

  568. 5 a6 D; |) P2 u/ z9 H/ \
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ F! x5 M: r3 t+ E8 x3 {7 r
  570. . u, T/ C4 y! N0 Y8 }1 ]
  571. //  GdiplusStartupInput gdiplusStartupInput;( v( ~) w3 H; X4 B; ?
  572. //  ULONG_PTR gdiplusToken;
    + s+ {& w6 j! {- G
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);" e3 n. E8 {; R& V# V# a/ t' Q0 F
  574. ) p3 l' }6 \6 V8 U9 Z% t. E
  575. //        CRevAppDlg dlg;
    & `# {7 m7 G, ^9 b, O1 a1 _/ e6 f, k
  576. //        int nResponse = dlg.DoModal();3 B0 t: G0 W/ b( {/ u9 E
  577. //        if (nResponse == IDOK)
    ; T' p0 [) o- }, ]  N1 D4 l
  578. //        {
    ( v7 K7 H% m/ ~; T7 ?
  579. //                // TODO: Place code here to handle when the dialog is9 N1 A6 V& J& I" P/ s
  580. //                //  dismissed with OK
    ( P1 x# _, V6 y. ], `% V
  581. //        }
    ; s3 i% c9 }; o  s6 n
  582. //        else if (nResponse == IDCANCEL)% W3 A+ u5 v, V6 e+ D! p* M
  583. //        {
    % m2 ^+ W$ g# m4 B$ m. G
  584. //                // TODO: Place code here to handle when the dialog is
    # H/ \; X" w4 T& q% v: h5 _
  585. //                //  dismissed with Cancel
    ' |" r  D; P* R8 y
  586. //        }2 E7 p- C8 M4 D" @6 f( O) [

  587. ) E+ _2 w$ s! S  g+ B
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ! ^( D  h: U4 i! \
  589.         //  application, rather than start the application's message pump.6 i+ P, E3 I  {4 w1 b1 R0 F$ G
  590.         return TRUE;" l1 X* a1 }' M
  591. }
    * K/ f& t" ]  T! C: Z0 d# |0 {
  592. 7 z7 [3 p& n9 ^& w" D3 f
  593. char *CRevAppApp::strtok3(char *pSource,char *token)+ J$ w3 j+ s  z) l! }
  594. {& `7 A) x0 @5 a* x3 _
  595.   int i;  Y" f3 c/ M1 ^6 T+ n& s
  596.   char *szRet;
    / T+ p5 O' e) b& P6 U
  597. ! C2 Y' l8 R0 z3 f5 w* |
  598.   if(pSource) { itoken=0; sztoken=pSource; }8 u7 `9 F# D6 g- e1 T/ t: \
  599.   if(sztoken)
    / ]0 T$ G: k( C0 O  f: _. ]
  600.   {
    3 {5 t  |6 ~. @1 r6 |" M4 O
  601.     szRet=&sztoken[itoken];
    ' }% r5 A9 m* y. x3 s4 F) e8 J8 J+ k1 z
  602.     while(sztoken[itoken])
    2 G% G+ @: [: ~* T: B  g- G8 V
  603.     {
      ~" ?/ Y6 p, p1 |9 f$ z: r' \
  604.       for(i=0;i<(int)strlen(token);i++)
    5 L7 A* h; i$ _
  605.       {: M9 q1 `) ^' b, Y6 |1 B
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])) ]+ r  G4 G' {4 y, g$ I, o
  607.         {
    " f4 }2 z7 G$ }- s4 |
  608.           sztoken[itoken++]=0;4 X/ Q, |% F& Z& K+ B; |* W9 c
  609.           sztoken[itoken++]=0;
    " O' v1 m2 d3 s" n5 i: h
  610.           return szRet;
    6 m1 }$ w# w- I* Z; f8 {3 E
  611.         }! i8 J9 W( W6 H/ z: D* ~
  612.       }
    : R7 c0 v: M$ X# }+ P  }/ b  I& L0 Y
  613.       itoken++;
    $ J4 y4 X/ \  d3 C" v% K8 M
  614.     }
    3 g: @; f+ G7 U
  615.   }7 k% ?1 \+ @  {/ `5 l
  616.   return NULL;% ?. t5 {1 m3 [+ {  Q$ S
  617. }
    ; c9 o9 s4 `, f) ], d

  618. " D8 n, G) `5 h1 {5 y
  619. void ProcessProc(long Total,long Current)
    1 A% {$ i* Y8 |+ a6 T8 g2 r
  620. {2 K0 I; ?4 K4 G1 j7 ?2 d( g
  621.         MSG msg;
    # h1 r, y9 J9 P
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);2 ?0 q$ y. B; f, Y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" E6 h( Y; M8 U7 K
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))! L  U3 ]& X! \5 f& p1 Z  T
  625.         {
    5 p, C! f) L: _
  626.                 if(!GetMessage(&msg,NULL,0,0))" c5 U( n* k: l, @: O7 {
  627.                 {
    4 J( X6 M. ?) P% B* _9 I9 V
  628.                         return;. p- h8 B, g9 M" ^4 r0 Q
  629.                 }
    8 Y0 E8 p; ?# _0 m% v; m) L
  630.                 TranslateMessage(&msg);* b$ a# e8 C. i8 {9 @
  631.                 DispatchMessage(&msg);4 c% Z# m, o& Q- F
  632.         }       
    2 E# g* B$ Z$ k5 Y8 K' z2 S3 X
  633. }5 Z8 J  A+ u. X

  634. # ^: k' r9 I1 u. r) t: |
  635. BOOL bFirstChar=TRUE;: J- y0 x" Q& l+ Z  O- o) t: ~/ o# s

  636. $ [  P3 e) r! j4 A) c3 ^+ `
  637. BOOL CRevAppApp::OnIdle(LONG lCount)7 l* Y' M# K! L/ {) S" @0 q
  638. {0 }6 O0 d# B* B+ E" _, L! [: O+ Z4 G
  639.         // TODO: Add your specialized code here and/or call the base class6 D" e- a8 s8 H
  640.   switch(dwProgramState)
    7 A  X6 k; @* O- F
  641.   {
    $ \6 _1 e& e0 ?) p
  642.   case AP_NOTHING:8 ]! D7 a* o, U! d7 R6 Z
  643.     switch(dwStartUpSteps)% I! r% ]( r7 f; e6 T$ O
  644.     {
    5 i4 V! f+ y$ w0 _
  645.     case 1:
    ) S( x/ i" W' Q6 H1 k6 j
  646.       {
    6 Z# l- ~- K1 y: g2 `% A
  647.         int i;
    ( B, Q* Y& b( _$ u1 @8 ^
  648.         CDC *pCDC=dlg->GetDC();
    1 E3 P1 J( q8 K8 h
  649.         HDC hdcwnd=pCDC->m_hDC;
    ' U0 g* t9 F. S; b" G5 E  g
  650. //        Graphics graphics(hdcwnd);
    3 b4 ^7 ^' o# u- v0 [7 n
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    4 M2 c" q* i3 v* M
  652. //        INT iWidth=bitmap.GetWidth();
    : N  r# p: c& c9 |# z8 I2 X! {
  653. //        INT iHeight=bitmap.GetHeight();
    * W2 `9 @% z/ c6 C" U4 q
  654. //        Color color,colorTemp;
    . w- f4 t* q* \5 ^# p9 b, W: _9 T- E
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)/ n. I- q8 c' X
  656. //        {) w# \  d& h' C
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)0 n' Y4 k" n. w% p7 @! j! |& D
  658. //          {
    / t. ^% K% L9 N/ Z% u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);  y( K/ u- a$ S% N4 U
  660. //            colorTemp.SetValue(color.MakeARGB(6 J  s4 b2 |+ b% V( }! k
  661. //              (BYTE)(255*iColumn/iWidth),
    3 k8 }9 i" @1 J' M
  662. //              color.GetRed(),: F6 R: }' {- q
  663. //              color.GetGreen(),
    ( r! }+ e( _- B. ]2 r7 S
  664. //              color.GetBlue()));# q1 l5 U6 `/ y; ^2 c5 }# r- d
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    3 m" ]* M/ d# P+ d/ W) Z) p
  666. //          }5 I$ f5 b+ ^( d7 I! s& C+ O9 t
  667. //        }4 o" V3 S% ~% l# z" k
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);. G. e/ C3 J" f
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! Z& [' B9 A. w: m/ t5 {/ G
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 e) n8 x& E, n* \+ H# b1 {
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( w/ r% n1 @0 }5 H
  672.         for(i=0;i<240;i+=8)' r, @( t: a# ]" k- ~  K- c
  673.         {# q9 \, @& `0 F( H& q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 O5 u$ Y0 q& C; J
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 k6 ~* R$ z; O8 M; x+ b* p
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    2 U0 W, g( ^( v4 P0 v. N' C. i# }) u
  677.           Sleep(33);
    $ v! G. [! l! i4 `
  678.         }$ K+ ?9 A; b7 G+ m# ^
  679.         Sleep(1000);
    % O+ V7 q' |: O( h0 v3 L1 S% d
  680.         for(i=240;i>0;i-=8)3 @- U/ u1 b" }. X0 G
  681.         {
    ( m3 J, E* i0 w) C- J# W( `( I+ `
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 a4 C& e  Q7 f- {2 O$ _& _, J
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; B  \1 D( t/ i2 U' i# H/ t2 M
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * O/ `/ T& B2 E, t5 ]
  685.           Sleep(33);
    . y# J" Z: P1 K. c$ I8 U) |) m/ Y
  686.         }
    ' g7 |) Q5 k4 @3 c2 q9 D0 W. z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    2 R  y* f; S- W
  688.         dlg->ReleaseDC(pCDC);
    6 a# k; }3 k, ]" f
  689.         DeleteDC(hdctar);6 ~9 q  W3 ^# b5 E8 y# ~
  690.         DeleteDC(hdcsrc);
    3 c; E& y3 G5 W
  691.         DeleteDC(hdcorg);/ y9 V5 ]. q$ t; v" T0 q2 _
  692.       }$ h- b! t/ w5 J2 Y! n! g% S9 H
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);( _% l2 P0 N; D- `' J* D
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    / D) [6 A3 G' {
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");- s) X# ?* f3 V" _) l1 T5 _% C9 T
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    " e. T4 ?3 _% X4 p) k
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 j9 x/ D2 |2 ?1 z0 {! m
  698.       if(!Dn.Connected())! u/ f" d8 ]# m/ O; I+ G% J
  699.       {
      R2 F1 A9 o0 b2 y$ a
  700.         dwTotalFiles=1;
    ' W/ }. {# @8 p4 O
  701.         dwDownLoaded=0;
    $ M5 C/ q8 W. j9 c8 n1 g' e
  702.         bSilentStep=TRUE;9 H6 p& j7 h5 Y
  703.         bCompressed=FALSE;# h* }* n9 s( y1 q1 ~. U: e' j8 ^$ h
  704.         strExtLocal.Empty();
    8 @4 _, ~4 n, y. H5 ?
  705.         strFullName="readme.txt";
    0 P. l& W2 P1 k
  706.         dwProgramState=AP_CONNECT;
    . Q4 ?$ C9 h; K
  707.       }
    ' O& t4 z! R5 Y3 U8 ~8 o0 L
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    2 n1 S2 c  D2 c( W* t# s4 T2 L  \
  709.       dwStartUpSteps=2;
      Q9 K2 g' o( e" F4 v( n* F6 l
  710.       break;( e" N  w' a3 q/ R+ r5 Y
  711.     case 2:
    $ r: @% R$ A0 ?, [# a
  712.       {
    3 o  s  @1 \$ x
  713.         int iEOF;
    ! s2 [  v9 Y0 @6 s5 C
  714.         FILE *fp;* P  K8 m, I5 ]. m$ f, C& s
  715.         char szString[512];# d: {2 \2 k2 g' {" G# a. }  @4 C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");: I( e/ S4 c: y* J: I* @3 A
  717.         if(fp)
    ) d5 H! N6 I- d- g3 P
  718.         {
    ( o- V) S! `- c+ p
  719.           do
    + C7 P4 L6 r( W8 U4 l# A
  720.           {
    * H2 B! P7 D: L1 Y1 Y! i
  721.             iEOF=fscanf(fp,"%s",szString);" H( t) _5 o& F, B6 b
  722.             if(strlen(szString))
    4 S/ M" g$ a. p% t3 D
  723.             {) K& r- l: [' o9 ?0 b2 M5 M
  724.               if(bFirstChar)
    3 s6 D6 p: @/ z: u4 S+ p8 W1 w
  725.               {
    0 N( @- P% A/ n5 A
  726.                 bFirstChar=FALSE;
      p/ U  ^$ b2 Q
  727.                 bConnectIsBig5=FALSE;
    4 `. s/ j& l/ [, k  s4 I
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;, e2 l: s: M+ D% ]* u
  729.               }4 a+ x; k6 Y8 x6 l/ w! }' l5 p5 x
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    & A' I9 e, ~" j# a7 _  G6 r' Y. r* \
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . r9 Q2 a, i" I' C; A' t! p$ J$ ?
  732.               dlg->m_ListText.AddString(szString);. U. V$ w* R1 K2 P8 j- t  ]7 i2 y9 B
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! a( N" @( b' k5 \- y8 G3 m2 R
  734.               *szString=0;
    8 x( y, K" s5 |! a
  735.             }
    % i- j3 @2 {" R2 R, Y' d0 b9 c
  736.           } while(iEOF!=EOF);3 [; n! n; |: m# q2 S( m
  737.           fclose(fp);; w3 p: V% `" B7 J# G
  738.           unlink(".\\DownLoad\\readme.txt");- e( i2 K# N3 U: M, S+ V
  739.           dwStartUpSteps=3;1 c( l+ Y- [% m8 O
  740.         }( j! K( x; c5 @0 b
  741.       }
    ' X7 \8 z; }) F
  742.       break;
    8 e; h2 Z2 \& S: s9 P- ?8 P# [
  743.     case 3:
    % b$ w  P3 q) }" y
  744.       if(!Dn.Connected())/ O, N9 E6 ?" s3 [) W% g4 m0 ]" d7 F
  745.       {( z' ~6 p8 N5 h
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  {. y8 w, `% k) W0 g# R9 e
  747.         dwTotalFiles=1;
    ! k6 Y8 [3 U* c- i, ?, z
  748.         dwDownLoaded=0;
      s6 b$ X0 L! q+ H
  749.         bSilentStep=TRUE;8 ^+ f* d/ d4 _9 b4 o/ J( P! ?
  750.         bCompressed=FALSE;
    : C+ H$ j* ]3 h6 a; I0 y5 B8 w/ D
  751.         strExtLocal.Empty();
    : a5 u% \) B5 ^& ?& x
  752.         strFullName="checkversion.txt";8 h3 E! J6 @) k" r2 B
  753.         dwProgramState=AP_CONNECT;
    $ V, O, A& m* a/ q8 o. K
  754.       }
    ; [: D3 c1 m: V6 n/ B* i5 Y% F
  755.       dwStartUpSteps=4;6 i; P# ~9 L9 Q2 `
  756.       break;  v+ O5 p2 k# g' |) m7 F
  757.     case 4:
    5 [# s# B  O5 A& v
  758.       {8 u. j. ~" Z1 p+ E( h& x! N' U
  759.         FILE *fp;2 l. F, [4 T8 Y7 \3 l5 A" S
  760.         char szString1[128];. U* x! i7 \/ `
  761.         char szString2[128];
    % a8 G3 P% k- _" Z6 [
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    / H8 K. R& E% Y, {" P$ X, @4 ^
  763.         if(fp)* \& g* }) U+ s9 L1 K% A% Q
  764.         {8 }' _2 Y/ K+ D% H6 Q! B8 V- c8 l3 P
  765.           fscanf(fp,"%s",szString1);
    ' J1 F; c$ \5 h$ n" a/ p
  766.           fclose(fp);" o' U1 P2 \* M, U7 K' }, [* j+ `
  767.           fCheckVersion=atof(szString1);& b4 a. Y- K9 y0 `
  768.           fp=fopen(".\\checkversion.dat","r");! a6 m/ o( K: x# T; B0 L
  769.           if(fp)
    - r) y3 S8 x- R' S% }  i
  770.           {
    ! ]/ z9 a) o" d" A
  771.             fscanf(fp,"%s",szString2);
    5 X4 L/ }- T7 l  B7 T9 V
  772.             fclose(fp);, v+ o) M& H- L8 w: h1 |0 [
  773.             if(atof(szString1)!=atof(szString2))
    0 ?2 v2 k8 G; \3 \
  774.             {. V- D4 r' |# a8 G. z: M/ T9 i* l, g
  775.               if(!Dn.Connected())8 q3 K) r) q1 v4 t2 J
  776.               {
    ( @4 ~: a- f' X2 g
  777.                 bFirstUpdate=TRUE;
    : O1 P! @6 C' o; r. j. ?' y
  778.                 dwTotalFiles=1;: h( K5 ~, _& o4 z0 W, r% z
  779.                 dwDownLoaded=0;8 E( t2 X! h; T  O% z, |
  780.                 bSilentStep=FALSE;
    7 o% \. @. V8 W/ |
  781.                 bCompressed=TRUE;3 U  \8 C: i) j5 p$ P
  782.                 strExtLocal=".\\DownLoad\";
    $ [( c- b( o: }/ b( z. E+ e
  783.                 strFullName="update.txt";' X4 U0 r- P. x1 N
  784.                 dwProgramState=AP_CONNECT;
    $ S6 \- s0 T  a2 R
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , x/ f5 y2 e  I( p1 |
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( w$ E9 t4 ]) g6 W" d* _" c
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");. Z/ A. L$ h) E, h5 n

  788. % S# a9 v  X+ Y. Z: t
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 `7 M: g" C: J1 B8 N. [( r2 F+ x) v
  790.                 unlink(".\\DownLoad\\checkversion.txt");4 i2 \& v! \/ q0 @
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)" J# t' \3 W0 z  @
  792.                 {
    # `' D: \. L' N* i! T5 A2 A
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");9 X: F( F% U  A7 Q. D' N8 }6 f) h
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");+ V5 D; B" ?0 ^) v' y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ) ~& j. P  w6 A( I! H0 K
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ ]! e' Y7 l3 r; ]9 m0 k9 w
  797. 0 O1 G, i6 {4 h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");/ _- Q8 m' J6 Q0 F
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    5 b6 M% x! U$ l; x0 M% l
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' |) Q$ D' A7 I8 C0 D# X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 j# _8 \4 H1 q6 `; }% ^5 @7 k
  802.                 }& D. N$ v! }  `5 E8 i' E
  803.                 dwStartUpSteps=5;, V3 q) k, q1 h& o+ o, U
  804.               }; ^. o- ~' Z) p+ j2 ]1 F: w
  805.             }; g0 U* b8 n8 F. I1 n8 ^+ |
  806.             else( ~! N* v2 `" k
  807.             {
    0 i; O" a1 o5 p
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * }& |9 _! u$ l) u5 s; e* \5 E
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - L3 V1 [6 J2 f! h& }
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 q% p( p' b. u* F7 U; x1 f
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");9 J9 z2 W  U7 O. h0 j' W- g
  812. & \9 O! j9 F) N7 e2 U
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" V+ g9 ^7 F3 T' B. \
  814.               dwStartUpSteps=99;7 ]1 \# _+ Y$ B1 `3 o3 L% O7 O5 Y
  815.               bFinishUpdated=TRUE;
    ) x5 ?  ~. j1 k2 {2 w: l) \: Y" _
  816.               bCanUpdate=TRUE;6 z# O( l$ A" u/ l6 P
  817.             }
    9 C0 X& W7 j7 _2 S9 w- o! o& u
  818.           }. y# m6 w; Y% o1 F& T" H2 Y3 p" ?
  819.           else
    6 H0 }3 p) V' Z) q% I
  820.           {/ b' m. A- p, p' _
  821.             if(!Dn.Connected())
    7 x" P; l4 x4 h6 N
  822.             {+ J, x+ k% u# f" P8 U! m; z
  823.               bFirstUpdate=TRUE;) i4 F% H' o7 o, \7 ?4 M7 P
  824.               dwTotalFiles=1;
      ]" r- v# M( [, h8 \+ [* x) M
  825.               dwDownLoaded=0;$ O  ^  z, L; b/ M
  826.               bSilentStep=FALSE;$ J6 |; k" i  s& X5 a
  827.               bCompressed=TRUE;
    1 h! K; B: O& E0 B2 m' S5 a
  828.               strExtLocal=".\\DownLoad\";
    1 G" N! c8 X% p+ D
  829.               strFullName="update.txt";* r+ C9 r* I% _7 E% }
  830.               dwProgramState=AP_CONNECT;7 O+ u( |. S8 P9 p
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : y1 p4 v6 v) ^& o, U4 _" D
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , ]+ g# m7 B5 h# P6 i) C# t8 p
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' f0 n# W% q, }) J4 m. h
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 ^5 |. ^7 P  z* r6 A6 _- u- I
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ) B5 d1 P, ?- h+ ~3 e2 Q
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)% P, ]1 p2 h0 S4 r  b0 F
  837.               {
    / R  K2 Y' e4 O- j9 a
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");0 ?+ b# x  V" }- D3 B) l1 ]8 \1 G
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    0 U1 L! q6 W: h  Q5 Q0 M
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");. [2 \. n9 n+ F9 M# O  N2 @
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& E. b# Q3 C! m) ~- N
  842.                
    . ?0 ?' v% z7 i. L
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % ~# F' M/ k, T' B% Y
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      o4 L5 Z/ _8 x4 y# J
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");4 H$ z8 R4 t  v* F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  S9 Y: K2 U, h- T2 N, Q* e5 ?
  847.               }, \; E4 r# e8 S. Y7 F& |
  848.               dwStartUpSteps=5;
    6 p$ M# y6 F% Y, w! z2 }
  849.             }
    0 M) c$ e& P* I+ K! ~( T( g
  850.           }, i  c# }4 s: I6 N7 S, w( t. y
  851.         }6 W, G7 X& q2 b( Z! a+ y8 i3 X
  852.         else
    * f7 N: S7 o$ N# {5 M
  853.         {6 `- I! ~. r9 L: H0 e1 Y* {6 j% S& \
  854.           dwStartUpSteps=3;8 S5 \4 q* u' l+ n. d
  855.         }8 ]( V) w# v/ R' r# L+ P
  856.       }3 @3 F! |8 @7 F( `' X, w1 Q
  857.       break;+ o( b* D- f4 u
  858.     case 5:
    ( M% c* S# f( I/ Y
  859.       {6 Z7 v7 f; t  X0 f( ?% Y, A3 ]
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)! E1 M8 `1 |  Z; I4 ?
  861.         {
    8 g) P  L" p9 _
  862.           int opt_overwrite=1;
    7 d5 P  `3 a7 _  D, u. [
  863.           int opt_do_extract_withoutpath=0;& @3 R4 G1 l' x
  864.           unzFile uf=NULL;7 J& O6 s3 f9 o: P7 b. y
  865. / g4 ?1 A) P7 h7 g/ E% i# u
  866.           uf=unzOpen("Wsa.zip");
      Z4 o& C, c( B
  867.           if(uf)
    % A7 k7 N& ^' C, K- H" J1 _
  868.           {
    " C. ]0 k! I  i, a# y' v6 k4 @. b1 m
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);; V4 u5 Q6 q4 @: T2 i2 l9 x! U
  870.             unzClose(uf);1 O2 j5 ^! s+ ?, @
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    7 y0 x7 Z& g7 y# K$ c
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");5 v  q& ~% L+ E& v' U$ x4 ^
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    " v, R# C! K5 f! E3 U! Z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 D$ T$ [' [+ U0 P
  875.           }
    % I6 o2 _: H% X) q& P
  876.           DeleteFile("Wsa.zip" );" w6 g% B# y& v1 Q# B
  877.         }8 W) g6 E( E9 [8 `+ v. p' J: }8 K

  878. , G. E0 W9 U; w% v% q
  879.         if(CheckLocalVersion())
    1 R+ g1 Y+ }/ H% R( [7 b  \6 R. h
  880.         {
    ! a6 M2 Z' B8 H4 T
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    0 c2 N5 r' }2 R) [) {9 W; b( B
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");* n' b  e4 q; y3 T3 D
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    % W' d* C& _' T' g8 R/ Q& x0 |
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 L+ c4 _4 m9 U/ }: l$ l3 k
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);, H& b3 `; t6 v2 a
  886.           dwStartUpSteps=99;
    ) N, N" m$ _: i% ^8 O" U: T
  887.         }' ^0 z4 f- ?0 I- l4 f& M
  888.         else9 x2 l. X  ^% i& T2 c4 u
  889.         {  B' F4 B& R4 O7 o
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 O; |& A9 f& D
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");6 R( u  M3 Z. f5 Y! S5 q* Y
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    8 ?# P/ M7 S( \+ X6 Y

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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